From dfff3c667a47ad85c7fced85538d891ff2fc56e0 Mon Sep 17 00:00:00 2001 From: AaronWu <2463371514@qq.com> Date: Mon, 28 Jul 2025 14:25:58 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=B7=A5=E5=8D=95=EF=BC=8C=E7=9F=A5?= =?UTF-8?q?=E8=AF=86=E5=BA=93=E6=A8=A1=E5=9D=97=E6=B7=BB=E5=8A=A0=E9=99=84?= =?UTF-8?q?=E4=BB=B6=E4=B8=8A=E4=BC=A0=E7=8A=B6=E6=80=81=E6=8E=A7=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/issue/model.d.ts | 2 + src/views/client/issue/index.vue | 11 +- src/views/question/issue/formSchemas.tsx | 138 +++++++++++-------- src/views/question/issue/index.vue | 18 ++- src/views/question/knowledge/formSchemas.tsx | 135 ++++++++++-------- src/views/question/knowledge/index.vue | 19 ++- 6 files changed, 200 insertions(+), 123 deletions(-) diff --git a/src/api/issue/model.d.ts b/src/api/issue/model.d.ts index ad2e371..71d81c9 100644 --- a/src/api/issue/model.d.ts +++ b/src/api/issue/model.d.ts @@ -29,6 +29,7 @@ declare namespace API { zentaoNos?: string; // 关联的禅道工单号 resolutionTime?: string; // 解决时间 solutionType?: string; // 解决方式 + fileUploading?: boolean; // 附件上传状态 }; type CreateIssueParams = { @@ -57,6 +58,7 @@ declare namespace API { zentaoNos?: string; // 关联的禅道工单号 resolutionTime?: string; // 解决时间 solutionType?: string; // 解决方式 + fileUploading?: boolean; // 附件上传状态 }; type DeleteIssueParams = { diff --git a/src/views/client/issue/index.vue b/src/views/client/issue/index.vue index e0dceb9..18f36cf 100644 --- a/src/views/client/issue/index.vue +++ b/src/views/client/issue/index.vue @@ -256,8 +256,12 @@ const values = await formRef?.validate(); if (values) { console.log('values: ', values); + // 判断是否正在上传附件 + if (values.fileUploading) { + message.warning('请等待附件上传完成'); + return; + } values.id = curRow.value.id; - if (values.files && Array.isArray(values.files) && values.files.length) { values.files = values.files.map((e) => { if (e.response) { @@ -271,7 +275,10 @@ ...e, }; }); - values.fileIds = values.files.map((e) => e.id).join(','); + values.fileIds = values.files.filter((e) => e.id).map((e) => e.id).join(','); + } + if (values?.fileIds === ',') { + values.fileIds = ''; } if (values?.tags && Array.isArray(values.tags) && values.tags.length) { diff --git a/src/views/question/issue/formSchemas.tsx b/src/views/question/issue/formSchemas.tsx index 4c520ec..d821cd4 100644 --- a/src/views/question/issue/formSchemas.tsx +++ b/src/views/question/issue/formSchemas.tsx @@ -1,3 +1,11 @@ +/* + * @Author: AaronWu 2463371514@qq.com + * @Date: 2025-04-02 13:45:06 + * @LastEditors: AaronWu 2463371514@qq.com + * @LastEditTime: 2025-07-28 14:09:09 + * @FilePath: /IssueSupportManage/src/views/question/issue/formSchemas.tsx + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + */ import type { FormSchema } from '@/components/core/schema-form/'; import { TableListItem } from './columns'; import { commonUpload } from '@/api/upload'; @@ -278,71 +286,87 @@ export const getEditFormSchema: ( }, rules: [{ required: true }], }, + { + field: 'fileUploading', + component: 'Input', + defaultValue: false, + label: '附件上传状态', + vShow: false, + }, { label: '描述附件', field: 'files', component: 'Upload', - componentProps: { - disabled: isDetail, - customRequest: async (data) => { - console.log('data: ', data); - const formData = new FormData(); - formData.append('file', data.file); - const res = await commonUpload(formData); - console.log('res: ', res); - data?.onSuccess && data?.onSuccess(res, data.file as any); - }, - beforeUpload: (file) => { - console.log('file: ', file); + componentProps: ({ formModel, formInstance }) => { + return { + disabled: isDetail, + customRequest: async (data) => { + // 添加附件上传状态 + formInstance.setFieldsValue({ + fileUploading: true, + }); + console.log('data: ', data); + const formData = new FormData(); + formData.append('file', data.file); + const res = await commonUpload(formData); + console.log('res: ', res); + data?.onSuccess && data?.onSuccess(res, data.file as any); + formInstance.setFieldsValue({ + fileUploading: false, + }); + }, + beforeUpload: (file) => { + console.log('file: ', file); - // 限制允许上传的文件类型 - // 添加视频和压缩包 - const allowedTypes = [ - // 文档 - 'xlsx', - 'xls', - 'doc', - 'docx', - // 图片 - 'pdf', - 'jpg', - 'jpeg', - 'png', - // 视频 - 'mp4', - 'avi', - 'mov', - 'wmv', - 'mkv', - 'flv', - 'webm', - // 压缩包 - 'zip', - 'rar', - '7z', - 'tar', - 'gz', - 'bz2', - 'tgz', - 'tbz2', - // 其他 - 'htm', - ]; + // 限制允许上传的文件类型 + // 添加视频和压缩包 + const allowedTypes = [ + // 文档 + 'xlsx', + 'xls', + 'doc', + 'docx', + // 图片 + 'pdf', + 'jpg', + 'jpeg', + 'png', + // 视频 + 'mp4', + 'avi', + 'mov', + 'wmv', + 'mkv', + 'flv', + 'webm', + // 压缩包 + 'zip', + 'rar', + '7z', + 'tar', + 'gz', + 'bz2', + 'tgz', + 'tbz2', + // 其他 + 'htm', + ]; - // 检查文件类型 - const fileType = getFileExtension(file.name) || 'unknown'; - if (!allowedTypes.includes(fileType)) { - // 文件类型不在允许列表中,拒绝上传 - // 可以在这里展示错误信息 - message.warning('文件类型不正确'); - return false; - } + // 检查文件类型 + const fileType = getFileExtension(file.name) || 'unknown'; + if (!allowedTypes.includes(fileType)) { + // 文件类型不在允许列表中,拒绝上传 + // 可以在这里展示错误信息 + message.warning('文件类型不正确'); + return false; + } - // 其他验证逻辑... + // 其他验证逻辑... - // 允许上传 - return true; - }, + // 允许上传 + return true; + }, + }; }, componentSlots: { default: () => ( diff --git a/src/views/question/issue/index.vue b/src/views/question/issue/index.vue index 6a787f4..973f62c 100644 --- a/src/views/question/issue/index.vue +++ b/src/views/question/issue/index.vue @@ -209,6 +209,11 @@ const values = await formRef?.validate(); if (values) { console.log('values: ', values); + // 判断是否正在上传附件 + if (values.fileUploading) { + message.warning('请等待附件上传完成'); + return; + } values.id = curRecord.value.id; if (values.files && Array.isArray(values.files) && values.files.length) { @@ -224,10 +229,16 @@ ...e, }; }); - values.fileIds = values.files.filter((e) => e.id).map((e) => e.id).join(','); + values.fileIds = values.files + .filter((e) => e.id) + .map((e) => e.id) + .join(','); } else { values.fileIds = ''; } + if (values?.fileIds === ',') { + values.fileIds = ''; + } if (values?.tags && Array.isArray(values.tags) && values.tags.length) { values.tags = values.tags.join(','); @@ -436,7 +447,10 @@ ...e, }; }); - values.fileIds = values.files.filter((e) => e.id).map((e) => e.id).join(','); + values.fileIds = values.files + .filter((e) => e.id) + .map((e) => e.id) + .join(','); } else { values.fileIds = ''; } diff --git a/src/views/question/knowledge/formSchemas.tsx b/src/views/question/knowledge/formSchemas.tsx index fbbf81f..2e561a5 100644 --- a/src/views/question/knowledge/formSchemas.tsx +++ b/src/views/question/knowledge/formSchemas.tsx @@ -83,70 +83,85 @@ export const getEditFormSchema: ( }, rules: [{ required: true, type: 'number' }], }, + { + field: 'fileUploading', + component: 'Input', + defaultValue: false, + label: '附件上传状态', + vShow: false, + }, { label: '附件', field: 'files', component: 'Upload', - componentProps: { - disabled: isDetail, - customRequest: async (data) => { - console.log('data: ', data); - const formData = new FormData(); - formData.append('file', data.file); - const res = await commonUpload(formData); - console.log('res: ', res); - data?.onSuccess && data?.onSuccess(res, data.file as any); - }, - beforeUpload: (file) => { - console.log('file: ', file); - - // 限制允许上传的文件类型 - const allowedTypes = [ - // 文档 - 'xlsx', - 'xls', - 'doc', - 'docx', - // 图片 - 'pdf', - 'jpg', - 'jpeg', - 'png', - // 视频 - 'mp4', - 'avi', - 'mov', - 'wmv', - 'mkv', - 'flv', - 'webm', - // 压缩包 - 'zip', - 'rar', - '7z', - 'tar', - 'gz', - 'bz2', - 'tgz', - 'tbz2', - // 其他 - 'htm', - ]; - - // 检查文件类型 - const fileType = getFileExtension(file.name) || 'unknown'; - if (!allowedTypes.includes(fileType)) { - // 文件类型不在允许列表中,拒绝上传 - // 可以在这里展示错误信息 - message.warning('文件类型不正确'); - return false; - } - - // 其他验证逻辑... - - // 允许上传 - return true; - }, + componentProps: ({ formModel, formInstance }) => { + return { + disabled: isDetail, + customRequest: async (data) => { + formInstance.setFieldsValue({ + fileUploading: true, + }); + console.log('data: ', data); + const formData = new FormData(); + formData.append('file', data.file); + const res = await commonUpload(formData); + console.log('res: ', res); + data?.onSuccess && data?.onSuccess(res, data.file as any); + formInstance.setFieldsValue({ + fileUploading: false, + }); + }, + beforeUpload: (file) => { + console.log('file: ', file); + + // 限制允许上传的文件类型 + const allowedTypes = [ + // 文档 + 'xlsx', + 'xls', + 'doc', + 'docx', + // 图片 + 'pdf', + 'jpg', + 'jpeg', + 'png', + // 视频 + 'mp4', + 'avi', + 'mov', + 'wmv', + 'mkv', + 'flv', + 'webm', + // 压缩包 + 'zip', + 'rar', + '7z', + 'tar', + 'gz', + 'bz2', + 'tgz', + 'tbz2', + // 其他 + 'htm', + ]; + + // 检查文件类型 + const fileType = getFileExtension(file.name) || 'unknown'; + if (!allowedTypes.includes(fileType)) { + // 文件类型不在允许列表中,拒绝上传 + // 可以在这里展示错误信息 + message.warning('文件类型不正确'); + return false; + } + + // 其他验证逻辑... + + // 允许上传 + return true; + }, + } }, componentSlots: { default: () => ( diff --git a/src/views/question/knowledge/index.vue b/src/views/question/knowledge/index.vue index f10edff..e94ac8a 100644 --- a/src/views/question/knowledge/index.vue +++ b/src/views/question/knowledge/index.vue @@ -174,6 +174,11 @@ const values = await formRef?.validate(); if (values) { console.log('values: ', values); + // 判断是否正在上传附件 + if (values.fileUploading) { + message.warning('请等待附件上传完成'); + return; + } values.id = curRecord.value.id; if (values.files && Array.isArray(values.files) && values.files.length) { @@ -189,11 +194,18 @@ ...e, }; }); - values.fileIds = values.files.map((e) => e.id).join(','); + values.fileIds = values.files + .filter((e) => e.id) + .map((e) => e.id) + .join(','); } else { values.fileIds = ''; } + if (values?.fileIds === ',') { + values.fileIds = ''; + } + if (values?.tags && Array.isArray(values.tags) && values.tags.length) { const allTags = (await getDictionaryByTypeName(DictEnum.TAG_TYPE)) || []; // 找出values.tags中不在allTags中的值 @@ -292,7 +304,10 @@ ...e, }; }); - values.fileIds = values.files.map((e) => e.id).join(','); + values.fileIds = values.files + .filter((e) => e.id) + .map((e) => e.id) + .join(','); } else { values.fileIds = ''; }