From 6b77e1a3f472809c3420f30b645fe07219908b1d Mon Sep 17 00:00:00 2001 From: BianLzhaoMin <11485688+bianliangzhaomin123@user.noreply.gitee.com> Date: Tue, 25 Nov 2025 11:06:29 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../docCenter/components/tableCom/addCopy.vue | 79 +++++++++++++++---- .../docCenter/components/tableCom/move.vue | 76 ++++++++++++++---- 2 files changed, 121 insertions(+), 34 deletions(-) diff --git a/src/views/publicService/docCenter/components/tableCom/addCopy.vue b/src/views/publicService/docCenter/components/tableCom/addCopy.vue index 72dd494..ce7a2b8 100644 --- a/src/views/publicService/docCenter/components/tableCom/addCopy.vue +++ b/src/views/publicService/docCenter/components/tableCom/addCopy.vue @@ -97,6 +97,7 @@ export default { type, toType, publicFolderId, + fileName, // 添加文件名参数,用于错误提示 ) { const params = { id: fileId, @@ -109,11 +110,24 @@ export default { } try { const res = await copyDocCenterAPI(params) + // 检查返回状态码,如果不是200,抛出错误 if (res.code !== 200) { - throw new Error(res.msg || res.message || '添加副本失败') + const errorMsg = res.msg || res.message || '添加副本失败' + throw new Error(`"${fileName}"添加副本失败:${errorMsg}`) } return res } catch (error) { + // 如果是HTTP 500错误 + if (error.response && error.response.status === 500) { + throw new Error(`"${fileName}"添加副本失败:服务器内部错误`) + } + // 如果错误消息中不包含文件名,则添加文件名信息 + if (error.message && !error.message.includes(fileName)) { + throw new Error( + `"${fileName}"添加副本失败:${error.message}`, + ) + } + // 如果错误消息已包含文件名,直接抛出 throw error } }, @@ -131,29 +145,60 @@ export default { } this.loading = true + let successCount = 0 + let failedFile = null + try { - // 批量移动文件 - const movePromises = this.selectedFiles.map((file) => - this.moveDocument( - file.id, - this.selectedFolder.id, - file.parentId, - file.parentIds, - file.type, - this.selectedFolder.type, - file.publicFolderId, - ), - ) + // 使用 for...of 循环顺序执行,遇到失败立即停止 + for (const file of this.selectedFiles) { + try { + await this.moveDocument( + file.id, + this.selectedFolder.id, + file.parentId, + file.parentIds, + file.type, + this.selectedFolder.type, + file.publicFolderId, + file.name || file.fileName || '未知文件', // 传递文件名用于错误提示 + ) + successCount++ + } catch (error) { + // 捕获添加副本失败的错误,记录失败的文件信息 + failedFile = { + name: file.name || file.fileName || '未知文件', + error: error.message || '添加副本失败', + } + // 立即停止后续操作 + break + } + } - await Promise.all(movePromises) + // 如果有失败的文件,提示用户 + if (failedFile) { + this.$message.error( + failedFile.error || `"${failedFile.name}"添加副本失败`, + ) + return Promise.reject( + new Error( + failedFile.error || + `"${failedFile.name}"添加副本失败`, + ), + ) + } - this.$message.success('添加副本成功') + // 全部成功 + if (successCount > 0) { + this.$message.success(`成功添加 ${successCount} 个副本`) + } return Promise.resolve({ success: true, - movedCount: this.selectedFiles.length, + movedCount: successCount, }) } catch (error) { - // this.$message.error(error.message || '添加副本失败') + // 兜底错误处理 + const errorMsg = error.message || '添加副本失败' + this.$message.error(errorMsg) return Promise.reject(error) } finally { this.loading = false diff --git a/src/views/publicService/docCenter/components/tableCom/move.vue b/src/views/publicService/docCenter/components/tableCom/move.vue index 832cb18..3c73c67 100644 --- a/src/views/publicService/docCenter/components/tableCom/move.vue +++ b/src/views/publicService/docCenter/components/tableCom/move.vue @@ -102,6 +102,7 @@ export default { type, toType, publicFolderId, + fileName, // 添加文件名参数,用于错误提示 ) { const params = { id: fileId, @@ -114,11 +115,22 @@ export default { } try { const res = await moveDocCenterAPI(params) + // 检查返回状态码,如果不是200,抛出错误 if (res.code !== 200) { - throw new Error(res.msg || res.message || '移动失败') + const errorMsg = res.msg || res.message || '移动失败' + throw new Error(`"${fileName}"移动失败:${errorMsg}`) } return res } catch (error) { + // 如果是HTTP 500错误 + if (error.response && error.response.status === 500) { + throw new Error(`文"${fileName}"移动失败:服务器内部错误`) + } + // 如果错误消息中不包含文件名,则添加文件名信息 + if (error.message && !error.message.includes(fileName)) { + throw new Error(`"${fileName}"移动失败:${error.message}`) + } + // 如果错误消息已包含文件名,直接抛出 throw error } }, @@ -136,29 +148,59 @@ export default { } this.loading = true + let successCount = 0 + let failedFile = null + try { - // 批量移动文件 - const movePromises = this.selectedFiles.map((file) => - this.moveDocument( - file.id, - this.selectedFolder.id, - file.parentId, - file.parentIds, - file.type, - this.selectedFolder.type, - file.publicFolderId, - ), - ) + // 使用 for...of 循环顺序执行,遇到失败立即停止 + for (const file of this.selectedFiles) { + try { + await this.moveDocument( + file.id, + this.selectedFolder.id, + file.parentId, + file.parentIds, + file.type, + this.selectedFolder.type, + file.publicFolderId, + file.name || file.fileName || '未知文件', // 传递文件名用于错误提示 + ) + successCount++ + } catch (error) { + // 捕获移动失败的错误,记录失败的文件信息 + failedFile = { + name: file.name || file.fileName || '未知文件', + error: error.message || '移动失败', + } + // 立即停止后续操作 + break + } + } - await Promise.all(movePromises) + // 如果有失败的文件,提示用户 + if (failedFile) { + this.$message.error( + failedFile.error || `"${failedFile.name}"移动失败`, + ) + return Promise.reject( + new Error( + failedFile.error || `"${failedFile.name}"移动失败`, + ), + ) + } - this.$message.success('移动成功') + // 全部成功 + if (successCount > 0) { + this.$message.success(`成功移动 ${successCount} 个文件夹`) + } return Promise.resolve({ success: true, - movedCount: this.selectedFiles.length, + movedCount: successCount, }) } catch (error) { - // this.$message.error(error.message || '移动失败') + // 兜底错误处理 + const errorMsg = error.message || '移动失败' + this.$message.error(errorMsg) return Promise.reject(error) } finally { this.loading = false