From 8b03d62a758c8aaff478f45770dd7c649f6d7b02 Mon Sep 17 00:00:00 2001 From: dj <1042039504@qq.com> Date: Wed, 25 Jun 2025 17:41:15 +0800 Subject: [PATCH] =?UTF-8?q?feat(upload):=20=E4=BC=98=E5=8C=96=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E4=B8=8A=E4=BC=A0=E7=BB=84=E4=BB=B6=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在删除文件时,将删除的文件信息存储到本地存储中 - 在选择文件时,检查本地存储中是否有删除的文件信息,并从选择的文件中移除 - 优化了文件上传流程,提高了用户体验 --- src/components/AttachmentUpload.vue | 2 ++ src/components/FileUpload.vue | 33 ++++++++++++++++++++++------- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/src/components/AttachmentUpload.vue b/src/components/AttachmentUpload.vue index aa94a2a..5f4f094 100644 --- a/src/components/AttachmentUpload.vue +++ b/src/components/AttachmentUpload.vue @@ -426,6 +426,7 @@ const handleDelete = (row, type) => { allFileList.value.splice(allFileList.value.findIndex((item) => item.fileId === row.fileId), 1); isHaveOneFile.value = !(allFileList.value && allFileList.value?.length == 0); console.log('allFileList.value',allFileList.value) + localStorage.setItem('deleteFileRow', JSON.stringify(row)) if (localStorage.getItem('collectData')) { let collectData = JSON.parse(localStorage.getItem('collectData')) collectData.fileList = allFileList.value @@ -462,6 +463,7 @@ const getOtherFile = (val) => { } else { allFileList.value = _otherFileListValue.value } + isHaveOneFile.value = true emit('getOtherFile', val) } diff --git a/src/components/FileUpload.vue b/src/components/FileUpload.vue index c131907..52d3e21 100644 --- a/src/components/FileUpload.vue +++ b/src/components/FileUpload.vue @@ -10,11 +10,11 @@ :show-file-list="showFileList" :auto-upload="false" :before-upload="beforeUpload" - :on-success="handleUploadSuccess" :on-error="uploadError" :before-remove="beforeRemove" :on-remove="handleRemove" > + 上传文件 @@ -61,7 +61,7 @@ const props = defineProps({ }) const uploadRef = ref(null); // el-upload 的 ref const uploadPromises = ref([]); // 跟踪每个文件的上传状态 -const emit = defineEmits(["input", "beforeUpload","getFile", "delete"]) +const emit = defineEmits(["input", "beforeUpload", "getFile", "delete"]) const fileList = ref([]) const _value = computed({ get() { @@ -87,14 +87,29 @@ const handleRemove = (file) => { // 文件选择变化时触发 const handleChange = (file, files) => { - console.log(file, files,'files') + const deleteFileRow = JSON.parse(localStorage.getItem('deleteFileRow')); + console.log("🚀 ~ file:deleteFileRow ", deleteFileRow, uploadFile.value) + let deleteIndex = null + if (deleteFileRow) { + deleteIndex = uploadFile.value.findIndex((item) => item.name === deleteFileRow.originalFileName && item.size === deleteFileRow.size) + console.log("🚀 ~ file:deleteIndex ", deleteIndex) + + if (deleteIndex != -1) { + uploadFile.value.splice(deleteIndex, 1); + } + } + + + console.log(file, files, 'files') uploadIndex.value++ uploadFile.value.push(file) + console.log("🚀 ~ file:uploadFile.value ", uploadFile.value) + localStorage.removeItem('deleteFileRow') }; watch(() => uploadIndex.value, (newVal) => { - console.log('newVal',newVal) + console.log('newVal', newVal) startUpload(uploadFile.value); // 自动触发上传 -},{ +}, { deep: true }) // 自定义上传逻辑 @@ -117,7 +132,7 @@ const customUpload = async (options) => { // 触发所有文件上传 const startUpload = (files) => { - uploadLoading.value= ElLoading.service({ + uploadLoading.value = ElLoading.service({ fullscreen: true, text: '文件上传中...', }) @@ -144,9 +159,10 @@ const startUpload = (files) => { }) files = []; // 清空文件列表 uploadRef.value.clearFiles(); // 清空上传组件 + uploadFile.value = [] // 清空文件列表 nextTick(() => { uploadLoading.value.close() - uploadLoading.value=null + uploadLoading.value = null }) }) @@ -157,6 +173,7 @@ const beforeUpload = () => { return true } const handleUploadSuccess = (res) => { + ElNotification({ title: '提示', message: res.code === 1000 ? '上传成功' : '上传失败', @@ -166,7 +183,7 @@ const handleUploadSuccess = (res) => { showTable.value = true let data = res.data fileList.value.push(data) - emit("getFile", res.data) + // emit("getFile", res.data) } const uploadError = () => { loading.value = false