From 06986db74f7bd3eeba2eaedb944d3f57d9c8d3e0 Mon Sep 17 00:00:00 2001 From: jmal Date: Mon, 4 Aug 2025 16:35:09 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E5=A2=9E=E5=BC=BA=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E8=BF=87=E7=A8=8B=EF=BC=8C=E9=80=9A=E8=BF=87?= =?UTF-8?q?=E6=94=B9=E8=BF=9B=E7=9A=84=E5=8F=82=E6=95=B0=E5=A4=84=E7=90=86?= =?UTF-8?q?=E5=92=8C=E7=8A=B6=E6=80=81=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/ShowFile/ShowFile.vue | 10 +---- .../SimpleUploader/globalUploader.vue | 34 +++++++++++----- src/views/home/mobile/index.vue | 40 ++++++++++++------- 3 files changed, 51 insertions(+), 33 deletions(-) diff --git a/src/components/ShowFile/ShowFile.vue b/src/components/ShowFile/ShowFile.vue index 5cccb3b..5eaaf3b 100644 --- a/src/components/ShowFile/ShowFile.vue +++ b/src/components/ShowFile/ShowFile.vue @@ -2329,17 +2329,11 @@ export default { }, upload() { // 打开文件选择框 - this.$store.dispatch('updateMessage', { - event: 'openUploader', - data: this.getUploadParams(), - }) + this.$store.dispatch('updateMessage', {event: 'openUploader'}) }, uploadFolder() { if (window.uploader.supportDirectory) { - this.$store.dispatch('updateMessage', { - event: 'uploadFolder', - data: this.getUploadParams(), - }) + this.$store.dispatch('updateMessage', {event: 'uploadFolder'}) } else { this.$message({ message: '该浏览器不支持上传文件夹', diff --git a/src/components/SimpleUploader/globalUploader.vue b/src/components/SimpleUploader/globalUploader.vue index fc4513a..58a0601 100755 --- a/src/components/SimpleUploader/globalUploader.vue +++ b/src/components/SimpleUploader/globalUploader.vue @@ -192,6 +192,7 @@ export default { successMsg: null, enableDragUpload: true,// 是否启用拖拽上传 uploader: null, + resolveFilesAddedPromise: null, // 用于等待获取上传参数 } }, computed: { @@ -218,19 +219,21 @@ export default { } break case 'openUploader': - this.params = msg.data || {} if (this.$refs.uploadBtn) { $('#global-uploader-btn').click() } break case 'uploadFolder': - this.params = msg.data || {} if (this.$refs.folderBtn) { $('#folder-uploader-btn').click() } break case 'onUploadParams': this.params = msg.data || {} + if (this.resolveFilesAddedPromise) { + this.resolveFilesAddedPromise(); + this.resolveFilesAddedPromise = null; + } break } } @@ -311,21 +314,33 @@ export default { }); }); }, - onDragenter(e) { - this.$store.dispatch('updateMessage', {event: 'getUploadParams'}) + onDragenter() { }, isPath(str) { // 这个正则表达式检测路径中的斜杠字符 return /[/\\]/.test(str); }, async onFilesAdded(files) { - // 等待50ms - setTimeout(async () => await this.doFilesAdded(files), 50) + if (files.length === 0) { + return; + } + try { + const waitForParams = new Promise(resolve => { + this.resolveFilesAddedPromise = resolve; + }); + + await this.$store.dispatch('updateMessage', { event: 'getUploadParams' }); + + await waitForParams; + + await this.doFilesAdded(files); + + } catch (error) { + console.error("Failed to add files:", error); + this.uploaderCancel(); + } }, async doFilesAdded(files) { - if (files.length === 0) { - return - } let filenames = files.map(file => file.name) const paths = Object.keys(this.uploader.filePaths) paths.forEach(path => { @@ -339,7 +354,6 @@ export default { filenames: filenames, ...this.params } - console.log('上传文件', query) const res = await api.checkExist(query) if (res.data.exist) { this.$confirm('文件已存在,是否覆盖?', '提示', { diff --git a/src/views/home/mobile/index.vue b/src/views/home/mobile/index.vue index 10704f6..f050a63 100644 --- a/src/views/home/mobile/index.vue +++ b/src/views/home/mobile/index.vue @@ -273,7 +273,7 @@