Эх сурвалжийг харах

refactor(data-fill): 优化未上传文件的存储和处理逻辑

duy 1 сар өмнө
parent
commit
0cc5b3961d

+ 30 - 44
src/views/data-fill/components/HcUpload.vue

@@ -119,8 +119,8 @@ const autoUpload = ref(props.autoUpload)
 const typevalue = ref(props.typevalue)
 const isListFile = ref(props.isListFile)
 
-// 按类型存储未上传的文件
-const unUploadedFiles = ref({})
+// 统一存储未上传的文件(不再按类型区分)
+const unUploadedFiles = ref([])
 
 //监听props变化
 watch(() => [
@@ -145,7 +145,7 @@ watch(() => [
     isListFile.value = list
 })
 
-// 类型变化监听
+// 类型变化监听 - 核心修改:切换类型时将未上传文件添加到文件列表
 watch(() => props.typevalue, async (newType, oldType) => {
     await nextTick()
   
@@ -154,9 +154,8 @@ watch(() => props.typevalue, async (newType, oldType) => {
         file.id || file.status === 'success',
     )
     
-    // 恢复新类型对应的未上传文件
-    const newTypeUnUploaded = unUploadedFiles.value[newType] || []
-    fileListData.value = [...uploadedFiles, ...newTypeUnUploaded]
+    // 将统一未上传列表中的文件添加到当前文件列表
+    fileListData.value = [...uploadedFiles, ...unUploadedFiles.value]
 }, { immediate: true })
 
 // 深度监听fileList变化
@@ -190,7 +189,7 @@ const uploadExceed = () => {
 }
 const q = 1 
 
-// 文件变化处理
+// 文件变化处理 - 改为统一未上传列表
 const handleFileChange = async (file, fileList) => {
     if (!isFileSize(file?.size, 60)) {
         window?.$message?.warning('文件大小不能超过60M!')
@@ -207,14 +206,11 @@ const handleFileChange = async (file, fileList) => {
     
     fileListData.value = [...processedList]
     
-    if (typevalue.value) {
-        const currentUnUploaded = fileListData.value.filter(file => 
-            !file.id && !['success', 'uploading'].includes(file.status),
-        )
-        unUploadedFiles.value[typevalue.value] = [...currentUnUploaded]
-    } else {
-        window?.$message?.warning('请先选择附件类型再添加文件')
-    }
+    // 存储未上传文件到统一列表(过滤已上传和上传中的)
+    const currentUnUploaded = fileListData.value.filter(file => 
+        !file.id && !['success', 'uploading'].includes(file.status),
+    )
+    unUploadedFiles.value = [...currentUnUploaded]
 }
 
 //上传文件前预览pdf
@@ -245,13 +241,11 @@ const onDragEnd = () => {
     }))
 }
 
-// 手动删除文件
+// 手动删除文件 - 从统一未上传列表移除
 const handleRemove = (file) => {
-    if (typevalue.value && unUploadedFiles.value[typevalue.value]) {
-        const index = unUploadedFiles.value[typevalue.value].findIndex(f => f.uid === file.uid)
-        if (index !== -1) {
-            unUploadedFiles.value[typevalue.value].splice(index, 1)
-        }
+    const index = unUploadedFiles.value.findIndex(f => f.uid === file.uid)
+    if (index !== -1) {
+        unUploadedFiles.value.splice(index, 1)
     }
     delUploadData(file)
 }
@@ -268,11 +262,10 @@ const finishFileNum = ref(0)
 const uploadSuccess = (response, file) => {
     finishFileNum.value++
     
-    if (typevalue.value && unUploadedFiles.value[typevalue.value]) {
-        const index = unUploadedFiles.value[typevalue.value].findIndex(f => f.uid === file.uid)
-        if (index !== -1) {
-            unUploadedFiles.value[typevalue.value].splice(index, 1)
-        }
+    // 从统一未上传列表中移除已成功上传的文件
+    const index = unUploadedFiles.value.findIndex(f => f.uid === file.uid)
+    if (index !== -1) {
+        unUploadedFiles.value.splice(index, 1)
     }
     
     if (beforeFileNum.value === finishFileNum.value) {
@@ -288,13 +281,9 @@ const uploadError = (error, file) => {
     errorFileNum.value++
     window?.$message?.error('上传失败')
     
-    if (typevalue.value) {
-        if (!unUploadedFiles.value[typevalue.value]) {
-            unUploadedFiles.value[typevalue.value] = []
-        }
-        if (!unUploadedFiles.value[typevalue.value].some(f => f.uid === file.uid)) {
-            unUploadedFiles.value[typevalue.value].push(file)
-        }
+    // 确保上传失败的文件保留在未上传列表中
+    if (!unUploadedFiles.value.some(f => f.uid === file.uid)) {
+        unUploadedFiles.value.push(file)
     }
     
     const num = finishFileNum.value + errorFileNum.value
@@ -331,11 +320,10 @@ const delUploadData = async (file) => {
             fileListData.value.splice(index, 1)
         }
         
-        if (typevalue.value && unUploadedFiles.value[typevalue.value]) {
-            const unUploadedIndex = unUploadedFiles.value[typevalue.value].findIndex(f => f.uid === file.uid)
-            if (unUploadedIndex !== -1) {
-                unUploadedFiles.value[typevalue.value].splice(unUploadedIndex, 1)
-            }
+        // 从统一未上传列表中移除
+        const unUploadedIndex = unUploadedFiles.value.findIndex(f => f.uid === file.uid)
+        if (unUploadedIndex !== -1) {
+            unUploadedFiles.value.splice(unUploadedIndex, 1)
         }
         
         uploadRef.value.abort()
@@ -426,9 +414,8 @@ const submitUpload = async () => {
             if (!error && code === 200) {
                 window?.$message?.success('上传成功') 
                 await sortFile()
-                if (typevalue.value) {
-                    unUploadedFiles.value[typevalue.value] = []
-                }
+                // 清空统一未上传列表
+                unUploadedFiles.value = []
                 emit('change', { type: 'success' })
                      emit('update', [...fileListData.value])
             } else if (code === 413) {
@@ -447,9 +434,8 @@ const submitUpload = async () => {
             if (!error && code === 200) {
                 window?.$message?.success('上传成功') 
                 await sortFile()
-                if (typevalue.value) {
-                    unUploadedFiles.value[typevalue.value] = []
-                }
+                // 清空统一未上传列表
+                unUploadedFiles.value = []
                 emit('change', { type: 'success' })
                     emit('update', [...fileListData.value])
             } else if (code === 413) {