feat(缺陷管理): 缺陷管理详情编辑报错优化

This commit is contained in:
xinxin.wu 2024-09-12 14:46:37 +08:00 committed by Craftsman
parent db0c14f723
commit 97741d4b33
3 changed files with 107 additions and 78 deletions

View File

@ -575,13 +575,6 @@
} else { } else {
activeTab.value = 'detail'; activeTab.value = 'detail';
} }
} else {
if (!props.pagination && !props.tableData) return;
const query = { ...route.query };
delete query.id;
router.replace({
query,
});
} }
} }
); );

View File

@ -17,7 +17,13 @@
/> />
</template> </template>
<div class="h-[calc(100vh-168px)] w-full"> <div class="h-[calc(100vh-168px)] w-full">
<BugDetail ref="bugDetailRef" v-model:template-id="bugTemplateId" :bug-id="bugId" @save-params="saveParams" /> <BugDetail
ref="bugDetailRef"
v-model:template-id="bugTemplateId"
:bug-id="bugId"
:is-copy-bug="isCopy"
@save-params="saveParams"
/>
</div> </div>
</MsCard> </MsCard>
</template> </template>

View File

@ -215,7 +215,6 @@
import { EditorPreviewFileUrl } from '@/api/requrls/bug-management'; import { EditorPreviewFileUrl } from '@/api/requrls/bug-management';
import { useI18n } from '@/hooks/useI18n'; import { useI18n } from '@/hooks/useI18n';
import { useAppStore } from '@/store'; import { useAppStore } from '@/store';
import useUserStore from '@/store/modules/user';
import { downloadByteFile } from '@/utils'; import { downloadByteFile } from '@/utils';
import { scrollIntoView } from '@/utils/dom'; import { scrollIntoView } from '@/utils/dom';
import { findParents, Option } from '@/utils/recursion'; import { findParents, Option } from '@/utils/recursion';
@ -239,6 +238,7 @@
const props = defineProps<{ const props = defineProps<{
templateId: string; // id templateId: string; // id
isCopyBug?: boolean; //
bugId?: string; // id bugId?: string; // id
isDrawer?: boolean; // isDrawer?: boolean; //
caseType?: CaseLinkEnum; // caseType?: CaseLinkEnum; //
@ -262,7 +262,6 @@
const { t } = useI18n(); const { t } = useI18n();
const appStore = useAppStore(); const appStore = useAppStore();
const route = useRoute();
const form = ref<BugEditFormObject>({ const form = ref<BugEditFormObject>({
projectId: appStore.currentProjectId, projectId: appStore.currentProjectId,
title: '', title: '',
@ -297,11 +296,9 @@
const associatedDrawer = ref(false); const associatedDrawer = ref(false);
const loading = ref(false); const loading = ref(false);
const acceptType = ref('none'); // - const acceptType = ref('none'); // -
const userStore = useUserStore(); const isEdit = computed(() => props.bugId && !props.isCopyBug);
const isEdit = computed(() => !!route.query.id && route.params.mode === 'edit');
const bugId = ref<string | undefined>(props.bugId); const bugId = ref<string | undefined>(props.bugId);
const isEditOrCopy = computed(() => !!bugId.value); const isEditOrCopy = computed(() => !!bugId.value);
const isCopy = computed(() => route.params.mode === 'copy');
const isPlatformDefaultTemplate = ref(false); const isPlatformDefaultTemplate = ref(false);
const imageUrl = ref(''); const imageUrl = ref('');
const previewVisible = ref<boolean>(false); const previewVisible = ref<boolean>(false);
@ -310,7 +307,7 @@
// -/ID // -/ID
const descriptionFileIdMap = ref<Record<string, string[]>>({}); const descriptionFileIdMap = ref<Record<string, string[]>>({});
const isLoading = ref<boolean>(true); const isLoading = ref<boolean>(false);
const rowLength = ref<number>(0); const rowLength = ref<number>(0);
// //
@ -593,7 +590,7 @@
copyFiles, copyFiles,
richTextTmpFileIds: isPlatformDefaultTemplate.value ? getDescriptionFileId() : descriptionFileIds.value, richTextTmpFileIds: isPlatformDefaultTemplate.value ? getDescriptionFileId() : descriptionFileIds.value,
}; };
if (isCopy.value) { if (props.isCopyBug) {
delete tmpObj.id; delete tmpObj.id;
delete tmpObj.richTextTmpFileIds; delete tmpObj.richTextTmpFileIds;
} }
@ -644,51 +641,61 @@
return []; return [];
}; };
// //
const getDetailInfo = async () => { async function setTemplateValue(bugDetail: BugEditFormObject) {
loading.value = true; const { status, templateId, platformBugId } = bugDetail;
const id = route.query.id as string; try {
if (!id) return; if (props.isCopyBug) {
const res = await getBugDetail(id); // ,
const { customFields, templateId, attachments } = res; await templateChange(templateId);
// ID } else {
if (isCopy.value) { await templateChange(templateId, { fromStatusId: status, platformBugKey: platformBugId });
// ,
await templateChange(templateId);
} else {
await templateChange(templateId, { fromStatusId: res.status, platformBugKey: res.platformBugId });
}
if (attachments && attachments.length) {
if (!isCopy.value) {
// Copy,
attachmentsList.value = attachments;
} }
// } catch (error) {
const checkUpdateFileIds = await checkFileIsUpdateRequest(attachments.map((item: any) => item.fileId)); // eslint-disable-next-line no-console
// console.log(error);
fileList.value = attachments }
.map((fileInfo: any) => { }
return {
...fileInfo, //
name: fileInfo.fileName, async function handleFile(attachments: AttachFileInfo[]) {
isUpdateFlag: checkUpdateFileIds.includes(fileInfo.fileId), if (!attachments.length) {
isCopyFlag: isCopy.value, return;
}; }
}) // Copy,
.map((fileInfo: any) => { if (!props.isCopyBug) {
return convertToFileByBug(fileInfo); attachmentsList.value = attachments;
}); }
//
const checkUpdateFileIds = await checkFileIsUpdateRequest(attachments.map((item: any) => item.fileId));
//
fileList.value = attachments
.map((fileInfo: any) => {
return {
...fileInfo,
name: fileInfo.fileName,
isUpdateFlag: checkUpdateFileIds.includes(fileInfo.fileId),
isCopyFlag: props.isCopyBug,
};
})
.map((fileInfo: any) => {
return convertToFileByBug(fileInfo);
});
}
function makeCustomValue(bugDetail: BugEditFormObject) {
const { customFields, status } = bugDetail;
let tmpObj: Record<string, any> = {};
if (isEdit.value) {
tmpObj = { status };
} }
let tmpObj: Record<string, any> = {};
if (isEdit.value) {
tmpObj = { status: res.status };
}
if (customFields && Array.isArray(customFields)) { if (customFields && Array.isArray(customFields)) {
const MULTIPLE_TYPE = ['MULTIPLE_SELECT', 'MULTIPLE_INPUT', 'CHECKBOX', 'MULTIPLE_MEMBER']; const MULTIPLE_TYPE = ['MULTIPLE_SELECT', 'MULTIPLE_INPUT', 'CHECKBOX', 'MULTIPLE_MEMBER'];
const SINGRADIO_TYPE = ['RADIO', 'SELECT', 'MEMBER']; const SINGRADIO_TYPE = ['RADIO', 'SELECT', 'MEMBER'];
customFields.forEach((item) => { customFields.forEach((item) => {
if (item.id === 'status' && isCopy.value) { if (item.id === 'status' && props.isCopyBug) {
// , // ,
tmpObj[item.id] = ''; tmpObj[item.id] = '';
// //
@ -730,34 +737,57 @@
} }
}); });
} }
// return tmpObj;
fApi.value.setValue(tmpObj); }
//
if (isPlatformDefaultTemplate.value && form.value.platformSystemFields) {
Object.keys(form.value.platformSystemFields).forEach((key) => {
form.value.platformSystemFields[key] = tmpObj[key];
});
}
const { platformSystemFields } = form.value;
let copyName = ''; //
if (isCopy.value) { const getDetailInfo = async () => {
copyName = `copy_${res.title}`; try {
if (copyName.length > 255) { loading.value = true;
form.value.title = copyName.slice(0, 255); const res = await getBugDetail(bugId.value as string);
const { templateId, attachments } = res;
if (templateId) {
await setTemplateValue(res);
} }
//
handleFile(attachments);
//
const tmpObj = await makeCustomValue(res);
fApi.value.setValue(tmpObj);
//
if (isPlatformDefaultTemplate.value && form.value.platformSystemFields) {
Object.keys(form.value.platformSystemFields).forEach((key) => {
form.value.platformSystemFields[key] = tmpObj[key];
});
}
const { platformSystemFields } = form.value;
let copyName = '';
if (props.isCopyBug) {
copyName = `copy_${res.title}`;
if (copyName.length > 255) {
form.value.title = copyName.slice(0, 255);
}
}
//
form.value = {
id: res.id,
title: props.isCopyBug ? copyName : res.title,
description: res.description,
templateId: res.templateId,
tags: res.tags || [],
projectId: res.projectId,
platformSystemFields,
};
} catch (error) {
// eslint-disable-next-line no-console
console.log(error);
} finally {
loading.value = false;
} }
//
form.value = {
id: res.id,
title: isCopy.value ? copyName : res.title,
description: res.description,
templateId: res.templateId,
tags: res.tags || [],
projectId: res.projectId,
platformSystemFields,
};
loading.value = false;
}; };
// formCreate // formCreate