From d9b9a0581eec45e4b1d9b56093387ce3ec41d5da Mon Sep 17 00:00:00 2001 From: SADYX Date: Mon, 8 Jul 2024 17:41:28 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E9=87=8D=E5=86=99uploadFile?= =?UTF-8?q?=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/UploadFile/src/UploadFile.vue | 37 +++++++++----------- src/components/UploadFile/src/useUpload.ts | 2 +- 2 files changed, 17 insertions(+), 22 deletions(-) diff --git a/src/components/UploadFile/src/UploadFile.vue b/src/components/UploadFile/src/UploadFile.vue index 4459e69e..4532d45c 100644 --- a/src/components/UploadFile/src/UploadFile.vue +++ b/src/components/UploadFile/src/UploadFile.vue @@ -61,13 +61,18 @@ import { isString } from '@/utils/is' import { useUpload } from '@/components/UploadFile/src/useUpload' import { UploadFile } from 'element-plus/es/components/upload/src/upload' +type ResponseFile = { + name: string + url: string +} + defineOptions({ name: 'UploadFile' }) const message = useMessage() // 消息弹窗 const emit = defineEmits(['update:modelValue']) const props = defineProps({ - modelValue: propTypes.oneOfType([String, Array]).isRequired, + modelValue: propTypes.oneOfType([Array]).isRequired, fileType: propTypes.array.def(['doc', 'xls', 'ppt', 'txt', 'pdf']), // 文件类型, 例如['png', 'jpg', 'jpeg'] fileSize: propTypes.number.def(5), // 大小限制(MB) limit: propTypes.number.def(5), // 数量限制 @@ -121,7 +126,7 @@ const handleFileSuccess: UploadProps['onSuccess'] = (res: any): void => { // 删除自身 const index = fileList.value.findIndex((item) => item.response?.data === res.data) fileList.value.splice(index, 1) - uploadList.value.push({ name: res.data, url: res.data }) + uploadList.value.push({ name: res.data.name ?? res.data.url, url: res.data.url }) if (uploadList.value.length == uploadNumber.value) { fileList.value.push(...uploadList.value) uploadList.value = [] @@ -152,35 +157,25 @@ const handlePreview: UploadProps['onPreview'] = (uploadFile) => { // 监听模型绑定值变动 watch( () => props.modelValue, - (val: string | string[]) => { + (val: ResponseFile[]) => { + console.log(val) + if (!val) { fileList.value = [] // fix:处理掉缓存,表单重置后上传组件的内容并没有重置 return } - fileList.value = [] // 保障数据为空 - // 情况1:字符串 - if (isString(val)) { - fileList.value.push( - ...val.split(',').map((url) => ({ name: url.substring(url.lastIndexOf('/') + 1), url })) - ) - return - } - // 情况2:数组 - fileList.value.push( - ...(val as string[]).map((url) => ({ name: url.substring(url.lastIndexOf('/') + 1), url })) - ) + fileList.value = val.map(({ name, url }) => ({ + name: name ?? url.substring(url.lastIndexOf('/') + 1), + url + })) }, { immediate: true, deep: true } ) // 发送文件链接列表更新 const emitUpdateModelValue = () => { - // 情况1:数组结果 - let result: string | string[] = fileList.value.map((file) => file.url!) - // 情况2:逗号分隔的字符串 - if (props.limit === 1 || isString(props.modelValue)) { - result = result.join(',') - } + const result = fileList.value.map(({ name, url }) => ({ name, url })) + emit('update:modelValue', result) } diff --git a/src/components/UploadFile/src/useUpload.ts b/src/components/UploadFile/src/useUpload.ts index c0465a28..d2023ccc 100644 --- a/src/components/UploadFile/src/useUpload.ts +++ b/src/components/UploadFile/src/useUpload.ts @@ -31,7 +31,7 @@ export const useUpload = () => { // 模式二:后端上传 // 重写 el-upload httpRequest 文件上传成功会走成功的钩子,失败走失败的钩子 return new Promise((resolve, reject) => { - FileApi.updateFile({ file: options.file }) + FileApi.updateFileEx({ file: options.file }) .then((res) => { if (res.code === 0) { resolve(res)