Skip to content

Commit

Permalink
fix(全局): 部分 bug 修复
Browse files Browse the repository at this point in the history
  • Loading branch information
ba1q1 authored and fit2-zhao committed Jun 20, 2024
1 parent fbd0a27 commit eff826b
Show file tree
Hide file tree
Showing 25 changed files with 275 additions and 227 deletions.
42 changes: 24 additions & 18 deletions frontend/src/components/business/ms-add-attachment/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -295,26 +295,32 @@
});
const buttonDropDownVisible = ref(false);
onBeforeMount(() => {
// 回显文件
const defaultFiles = fileList.value.filter((item) => item) || [];
if (defaultFiles.length > 0) {
if (props.multiple) {
inputFiles.value = defaultFiles.map((item) => ({
...item,
// 这里取自定义的字段名,因为存在查看的场景时不会与刚选择的文件信息一样
value: item?.[props.fields.id] || item.uid || '', // 取uid是因为有可能是本地上传然后组件卸载然后重新挂载,这时候取自定义 id 会是空的
label: item?.[props.fields.name] || item?.name || '',
}));
} else {
inputFileName.value = defaultFiles[0]?.[props.fields.name] || defaultFiles[0]?.name || '';
watch(
() => fileList.value,
() => {
// 回显文件
const defaultFiles = fileList.value.filter((item) => item) || [];
if (defaultFiles.length > 0) {
if (props.multiple) {
inputFiles.value = defaultFiles.map((item) => ({
...item,
// 这里取自定义的字段名,因为存在查看的场景时不会与刚选择的文件信息一样
value: item?.[props.fields.id] || item.uid || '', // 取uid是因为有可能是本地上传然后组件卸载然后重新挂载,这时候取自定义 id 会是空的
label: item?.[props.fields.name] || item?.name || '',
}));
} else {
inputFileName.value = defaultFiles[0]?.[props.fields.name] || defaultFiles[0]?.name || '';
}
getListFunParams.value.combine.hiddenIds = defaultFiles
.filter((item) => !item?.local)
.map((item) => item?.[props.fields.id] || '')
.filter((item) => item);
}
getListFunParams.value.combine.hiddenIds = defaultFiles
.filter((item) => !item?.local)
.map((item) => item?.[props.fields.id] || '')
.filter((item) => item);
},
{
immediate: true,
}
});
);
function handleChange(_fileList: MsFileItem[], fileItem: MsFileItem) {
if (props.multiple) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
}
"
>
<span class="mx-[2px]"></span>
<span class="mx-[2px]"><slot></slot></span>
<template #content>
<div class="flex flex-col gap-[16px] text-[14px]">
<div class="font-semibold text-[var(--color-text-1)]">
Expand Down Expand Up @@ -68,7 +68,6 @@
const props = withDefaults(
defineProps<{
visible: boolean;
savingFile?: MsFileItem;
fileSaveAsSourceId: string | number;
sourceIdKey?: string; // 资源id对应key
Expand All @@ -89,7 +88,7 @@
const { t } = useI18n();
const saveFilePopoverVisible = defineModel<boolean>('visible', {
required: true,
default: false,
});
const saveFileForm = ref({
name: '',
Expand Down
6 changes: 3 additions & 3 deletions frontend/src/components/business/ms-menu/index.vue
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import { computed, defineComponent, h, ref } from 'vue';
import { RouteRecordRaw, useRoute, useRouter } from 'vue-router';
import { Message } from '@arco-design/web-vue';
import { cloneDeep } from 'lodash-es';
import { cloneDeep, debounce } from 'lodash-es';
import MsAvatar from '@/components/pure/ms-avatar/index.vue';
import MsIcon from '@/components/pure/ms-icon-font/index.vue';
Expand Down Expand Up @@ -407,7 +407,7 @@
// 渲染菜单项
const renderMenuItem = (element: RouteRecordRaw | null, icon: (() => any) | null) =>
element?.name === SettingRouteEnum.SETTING_ORGANIZATION ? (
<a-menu-item key={element?.name} v-slots={{ icon }} onClick={() => goto(element)}>
<a-menu-item key={element?.name} v-slots={{ icon }} onClick={debounce(() => goto(element), 100)}>
<div class="inline-flex w-[calc(100%-34px)] items-center justify-between !bg-transparent">
{collapsed.value ? (
<div class="text-center text-[12px] leading-[16px]">
Expand Down Expand Up @@ -436,7 +436,7 @@
</div>
</a-menu-item>
) : (
<a-menu-item key={element?.name} v-slots={{ icon }} onClick={() => goto(element)}>
<a-menu-item key={element?.name} v-slots={{ icon }} onClick={debounce(() => goto(element), 100)}>
{collapsed.value ? (
<div class="text-center text-[12px] leading-[16px]">
{t(element?.meta?.collapsedLocale || element?.meta?.locale || '')}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,23 +37,19 @@
>
{{ t('ms.upload.preview') }}
</MsButton>
<MsButton type="button" status="primary" class="!mr-[4px]" @click="transferFile(item)">
{{ t('caseManagement.featureCase.storage') }}
</MsButton>
<SaveAsFilePopover
v-model:visible="transferVisible"
v-if="item.status !== 'init'"
:saving-file="activeTransferFileParams"
:file-save-as-source-id="activeCase.id || ''"
:file-save-as-api="transferFileRequest"
:file-module-options-api="getTransferFileTree"
source-id-key="caseId"
/>
<MsButton
v-if="item.status !== 'init'"
type="button"
status="primary"
class="!mr-[4px]"
@click="transferFile(item)"
>
{{ t('caseManagement.featureCase.storage') }}
</MsButton>
<span :id="item.uid"></span>
</SaveAsFilePopover>
<MsButton
v-if="item.status !== 'init'"
type="button"
Expand Down Expand Up @@ -198,7 +194,7 @@
return item;
});
}
Message.success(t('ms.upload.uploadSuccess'));
Message.success(t('common.linkSuccess'));
emit('uploadSuccess');
} catch (error) {
// eslint-disable-next-line no-console
Expand Down Expand Up @@ -244,14 +240,12 @@
}
}
const transferVisible = ref<boolean>(false);
const activeTransferFileParams = ref<MsFileItem>();
// 转存
function transferFile(item: MsFileItem) {
activeTransferFileParams.value = { ...item };
transferVisible.value = true;
document.getElementById(item.uid)?.click();
}
// 删除本地文件
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@
import useAppStore from '@/store/modules/app';
import useMinderStore from '@/store/modules/components/minder-editor/index';
import { MinderCustomEvent } from '@/store/modules/components/minder-editor/types';
import { filterTree, getGenerateId, mapTree, replaceNodeInTree } from '@/utils';
import { filterTree, findNodeByKey, getGenerateId, mapTree, replaceNodeInTree } from '@/utils';
import { hasAnyPermission } from '@/utils/permission';
import {
Expand Down Expand Up @@ -156,69 +156,65 @@
/**
* 初始化用例模块树
*/
async function initCaseTree(notRemote = false) {
async function initCaseTree() {
try {
loading.value = true;
if (!notRemote) {
const res = await getCaseMinderTree({
projectId: appStore.currentProjectId,
moduleId: '', // 始终加载全部,然后再进入对应的模块节点
});
caseTree.value = mapTree<MinderJsonNode>(res, (e) => ({
...e,
data: {
...e.data,
id: e.id || e.data?.id || '',
text: e.name || e.data?.text || '',
resource: props.modulesCount[e.id] !== undefined ? [moduleTag] : e.data?.resource,
expandState: e.level === 1 ? 'expand' : 'collapse',
count: props.modulesCount[e.id],
isNew: false,
changed: false,
},
children:
props.modulesCount[e.id] > 0 && !e.children?.length
? [
{
data: {
id: 'fakeNode',
text: 'fakeNode',
resource: ['fakeNode'],
isNew: false,
changed: false,
},
const res = await getCaseMinderTree({
projectId: appStore.currentProjectId,
moduleId: '', // 始终加载全部,然后再进入对应的模块节点
});
caseTree.value = mapTree<MinderJsonNode>(res, (e) => ({
...e,
data: {
...e.data,
id: e.id || e.data?.id || '',
text: e.name || e.data?.text || '',
resource: props.modulesCount[e.id] !== undefined ? [moduleTag] : e.data?.resource,
expandState: e.level === 0 ? 'expand' : 'collapse',
count: props.modulesCount[e.id],
isNew: false,
changed: false,
},
children:
props.modulesCount[e.id] > 0 && !e.children?.length
? [
{
data: {
id: 'fakeNode',
text: 'fakeNode',
resource: ['fakeNode'],
isNew: false,
changed: false,
},
]
: e.children,
}));
importJson.value.root = {
children: caseTree.value,
data: {
id: 'NONE',
text: t('ms.minders.allModule'),
resource: [moduleTag],
disabled: true,
},
};
importJson.value.treePath = [];
window.minder.importJson(importJson.value);
}
if (notRemote) {
if (props.moduleId !== 'all') {
// 携带具体的模块 ID 加载时,进入该模块内
nextTick(() => {
minderStore.dispatchEvent(MinderEventName.ENTER_NODE, undefined, undefined, undefined, [
window.minder.getNodeById(props.moduleId),
]);
});
} else {
// 携带具体的模块 ID 加载时,进入该模块内
nextTick(() => {
minderStore.dispatchEvent(MinderEventName.ENTER_NODE, undefined, undefined, undefined, [
importJson.value.root,
]);
});
}
},
]
: e.children,
}));
importJson.value.root = {
children: caseTree.value,
data: {
id: 'NONE',
text: t('ms.minders.allModule'),
resource: [moduleTag],
disabled: true,
},
};
importJson.value.treePath = [];
window.minder.importJson(importJson.value);
if (props.moduleId !== 'all') {
// 携带具体的模块 ID 加载时,进入该模块内
nextTick(() => {
minderStore.dispatchEvent(MinderEventName.ENTER_NODE, undefined, undefined, undefined, [
findNodeByKey(importJson.value.root.children || [], props.moduleId, 'id', 'data') as MinderJsonNode,
]);
});
} else {
// 刷新时不需要重新请求数据,进入根节点
nextTick(() => {
minderStore.dispatchEvent(MinderEventName.ENTER_NODE, undefined, undefined, undefined, [
importJson.value.root,
]);
});
}
} catch (error) {
// eslint-disable-next-line no-console
Expand Down Expand Up @@ -291,7 +287,10 @@
try {
baseInfoLoading.value = true;
const res = await getCaseDetail(data?.id || activeCase.value.id);
activeCase.value = res;
activeCase.value = {
...res,
isNew: false,
};
const fileIds = (res.attachments || []).map((item: any) => item.id) || [];
if (fileIds.length) {
checkUpdateFileIds.value = await checkFileIsUpdateRequest(fileIds);
Expand Down Expand Up @@ -389,7 +388,7 @@
projectId: appStore.currentProjectId,
moduleId: data.id,
});
const fakeNode = node.children?.find((e) => e.data?.id === undefined); // 移除占位的虚拟节点
const fakeNode = node.children?.find((e) => e.data?.id === 'fakeNode'); // 移除占位的虚拟节点
if (fakeNode) {
window.minder.removeNode(fakeNode);
}
Expand Down Expand Up @@ -464,6 +463,10 @@
extraVisible.value = false;
showDetailMenu.value = false;
resetExtractInfo();
const fakeNode = node.children?.find((e) => e.data?.id === 'fakeNode'); // 移除占位的虚拟节点
if (fakeNode) {
window.minder.removeNode(fakeNode);
}
}
setPriorityView(true, 'P');
}
Expand All @@ -483,20 +486,16 @@
node.data.isNew = true;
window.minder.execCommand('priority');
if (index === nodes.length - 1) {
nextTick(() => {
handleNodeSelect(node);
});
window.minder.toggleSelect(node);
}
} else if (node.data?.resource?.includes(caseTag)) {
} else if (tag === caseTag && node.data) {
// 排除是从模块节点切换到用例节点的数据
tempMinderParams.value.updateModuleList = tempMinderParams.value.updateModuleList.filter(
(e) => e.id !== node.data?.id
);
node.data.isNew = true;
if (index === nodes.length - 1) {
nextTick(() => {
handleNodeSelect(node);
});
window.minder.toggleSelect(node);
}
} else if (node.data?.resource?.some((e) => caseOffspringTags.includes(e))) {
// 用例子孙节点更新,标记用例节点变化
Expand All @@ -522,7 +521,13 @@
case MinderEventName.CUT_NODE:
// TODO:循环优化
nodes.forEach((node) => {
if (!caseOffspringTags.some((e) => node.data?.resource?.includes(e))) {
if (!node.data?.resource || node.data?.resource.length === 0) {
// 删除文本节点
tempMinderParams.value.deleteResourceList.push({
id: node.data?.id || '',
type: 'NONE',
});
} else if (!caseOffspringTags.some((e) => node.data?.resource?.includes(e))) {
// 非用例下的子孙节点的移除,才加入删除资源队列
tempMinderParams.value.deleteResourceList.push({
id: node.data?.id || '',
Expand Down Expand Up @@ -619,7 +624,7 @@
versionId: '',
updateCaseList: [],
updateModuleList: [],
deleteResourceList: [],
deleteResourceList: tempMinderParams.value.deleteResourceList, // 删除的资源不清空,避免请求错误导致数据丢失
additionalNodeList: [],
};
}
Expand Down Expand Up @@ -702,7 +707,7 @@
watch(
() => props.moduleId,
() => {
initCaseTree(true);
initCaseTree();
},
{
deep: true,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -615,7 +615,10 @@ export default function useMinderBaseApi({ hasEditPermission }: { hasEditPermiss
}
if ([stepTag, textDescTag].some((tag) => node.data?.resource?.includes(tag))) {
// 用例下的文本描述和步骤描述节点
if (node.data?.resource?.includes(stepExpectTag)) {
if (
node.children?.length === 0 &&
minderStore.clipboard.every((e) => e.data?.resource?.includes(stepExpectTag))
) {
// 粘贴的是期望结果节点
return false;
}
Expand Down
Loading

0 comments on commit eff826b

Please sign in to comment.