From e3973f4ae6d3aeb2ee343fdbba9d55425253e26e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=86=E5=85=89LG?= Date: Wed, 20 Aug 2025 22:29:36 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8Dkeywords=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E4=B8=BAstring?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/paper/question/CdesignForm.vue | 70 +++++++++++++++++++++++- 1 file changed, 68 insertions(+), 2 deletions(-) diff --git a/src/views/paper/question/CdesignForm.vue b/src/views/paper/question/CdesignForm.vue index e80c641..1a0ae1b 100644 --- a/src/views/paper/question/CdesignForm.vue +++ b/src/views/paper/question/CdesignForm.vue @@ -731,7 +731,7 @@ const downloadFile = async (url: string) => { try { // 获取文件信息 const fileItem = formData.value.fileUploads.find((i) => i.url === url) - const fileName = fileItem?.fileName || '下载文件' + let fileName = fileItem?.fileName || '下载文件' // 使用 fetch 获取文件 const response = await fetch(url) @@ -739,6 +739,58 @@ const downloadFile = async (url: string) => { throw new Error(`HTTP error! status: ${response.status}`) } + // 如果文件名没有后缀,尝试从URL或Content-Type中获取 + if (!fileName.includes('.')) { + // 先尝试从URL中提取后缀 + const urlParts = url.split('/') + const urlFileName = urlParts[urlParts.length - 1] + if (urlFileName.includes('.')) { + const extension = urlFileName.split('.').pop() + fileName = `${fileName}.${extension}` + } else { + // 从响应头的Content-Type中推断文件类型 + const contentType = response.headers.get('Content-Type') + if (contentType) { + if (contentType.includes('text/')) { + fileName = `${fileName}.txt` + } else if (contentType.includes('application/pdf')) { + fileName = `${fileName}.pdf` + } else if (contentType.includes('image/')) { + const imageType = contentType.split('/')[1] + fileName = `${fileName}.${imageType}` + } else if (contentType.includes('application/zip')) { + fileName = `${fileName}.zip` + } else if (contentType.includes('application/json')) { + fileName = `${fileName}.json` + } else { + // 根据文件类型添加默认后缀 + switch (fileItem?.fileType) { + case '1': + fileName = `${fileName}.c` + break + case '2': + fileName = `${fileName}.txt` + break + default: + fileName = `${fileName}.txt` + } + } + } else { + // 如果无法获取Content-Type,根据fileType添加后缀 + switch (fileItem?.fileType) { + case '1': + fileName = `${fileName}.c` + break + case '2': + fileName = `${fileName}.txt` + break + default: + fileName = `${fileName}.txt` + } + } + } + } + // 获取文件内容 const blob = await response.blob() @@ -823,7 +875,16 @@ const open = async (queryParams: any, type: string, id?: number) => { formLoading.value = true try { const res = await QuestionApi.getQuestion(id) - res.keywords = Array.isArray(res.keywords) ? res.keywords : [] + // 处理 keywords:如果是字符串则解析为数组,否则确保是数组类型 + if (typeof res.keywords === 'string') { + try { + res.keywords = JSON.parse(res.keywords) + } catch (e) { + res.keywords = [] + } + } else { + res.keywords = Array.isArray(res.keywords) ? res.keywords : [] + } res.questionKeywords = Array.isArray(res.questionKeywords) ? res.questionKeywords : [] res.answerList = Array.isArray(res.answerList) ? res.answerList : [] res.fileUploads = Array.isArray(res.fileUploads) @@ -1116,6 +1177,11 @@ const submitForm = async () => { // 如果参考答案是独立管理的,提交时需要赋值给 analysis dataToSubmit.analysis = referenceAnswer.value + // 将 keywords 数组转换为字符串类型保存 + if (Array.isArray(dataToSubmit.keywords)) { + dataToSubmit.keywords = JSON.stringify(dataToSubmit.keywords) + } + if (formType.value === 'create') { await QuestionApi.addQuestion(dataToSubmit) message.success(t('common.createSuccess'))