From 8255cfd479d4eccc5c1b443c0ec74b5533d06217 Mon Sep 17 00:00:00 2001 From: wumode Date: Fri, 27 Feb 2026 16:20:04 +0800 Subject: [PATCH 1/2] fix(reorganize): dynamically update progress SSE connection based on item path --- src/components/dialog/ReorganizeDialog.vue | 41 ++++++++++++++-------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/src/components/dialog/ReorganizeDialog.vue b/src/components/dialog/ReorganizeDialog.vue index 2f200cbf..6ef6240b 100644 --- a/src/components/dialog/ReorganizeDialog.vue +++ b/src/components/dialog/ReorganizeDialog.vue @@ -10,6 +10,7 @@ import { FileItem, StorageConf, TransferDirectoryConf, TransferForm } from '@/ap import { useI18n } from 'vue-i18n' import { useGlobalSettingsStore } from '@/stores' import { useBackgroundOptimization } from '@/composables/useBackgroundOptimization' +import CryptoJS from 'crypto-js' // 国际化 const { t } = useI18n() @@ -200,25 +201,36 @@ function handleProgressMessage(event: MessageEvent) { } } -// 使用优化的进度SSE连接 -const progressSSE = useProgressSSE( - `${import.meta.env.VITE_API_BASE_URL}system/progress/filetransfer`, - handleProgressMessage, - 'reorganize-progress', - progressActive, -) +// 进度SSE连接 +const progressSSE = ref(null) // 使用SSE监听加载进度 -function startLoadingProgress() { +function startLoadingProgress(key: string) { progressText.value = t('dialog.reorganize.processing') progressActive.value = true - progressSSE.start() + + // 如果已经有连接,先停止 + if (progressSSE.value) { + progressSSE.value.stop() + } + + // 计算MD5 + const keyMd5 = CryptoJS.MD5(key).toString() + const url = `${import.meta.env.VITE_API_BASE_URL}system/progress/${keyMd5}` + + // 创建新的SSE连接 + progressSSE.value = useProgressSSE(url, handleProgressMessage, `reorganize-progress-${keyMd5}`, progressActive) + + progressSSE.value.start() } // 停止监听加载进度 function stopLoadingProgress() { progressActive.value = false - progressSSE.stop() + if (progressSSE.value) { + progressSSE.value.stop() + progressSSE.value = null + } } // 整理文件 @@ -228,14 +240,13 @@ async function transfer(background: boolean = false) { // 显示进度条 progressDialog.value = true - if (!background) { - // 开始监听进度 - startLoadingProgress() - } - // 文件整理 if (props.items) { for (const item of props.items) { + if (!background) { + // 开始监听进度 + startLoadingProgress(item.path) + } await handleTransfer(item, background) } } From 2b08be1e7dbbefb34941049a06ea8148876c38ff Mon Sep 17 00:00:00 2001 From: wumode Date: Fri, 27 Feb 2026 17:42:55 +0800 Subject: [PATCH 2/2] fix(reorganize): add progress tracking for log transfer --- src/components/dialog/ReorganizeDialog.vue | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/components/dialog/ReorganizeDialog.vue b/src/components/dialog/ReorganizeDialog.vue index 6ef6240b..aba4c8fa 100644 --- a/src/components/dialog/ReorganizeDialog.vue +++ b/src/components/dialog/ReorganizeDialog.vue @@ -64,6 +64,9 @@ const progressText = ref(t('dialog.reorganize.processing')) // 整理进度 const progressValue = ref(0) +// 进度SSE连接 +const progressSSE = ref(null) + // 所有存储 const storages = ref([]) @@ -201,9 +204,6 @@ function handleProgressMessage(event: MessageEvent) { } } -// 进度SSE连接 -const progressSSE = ref(null) - // 使用SSE监听加载进度 function startLoadingProgress(key: string) { progressText.value = t('dialog.reorganize.processing') @@ -214,12 +214,10 @@ function startLoadingProgress(key: string) { progressSSE.value.stop() } - // 计算MD5 - const keyMd5 = CryptoJS.MD5(key).toString() - const url = `${import.meta.env.VITE_API_BASE_URL}system/progress/${keyMd5}` + const url = `${import.meta.env.VITE_API_BASE_URL}system/progress/${key}` // 创建新的SSE连接 - progressSSE.value = useProgressSSE(url, handleProgressMessage, `reorganize-progress-${keyMd5}`, progressActive) + progressSSE.value = useProgressSSE(url, handleProgressMessage, `reorganize-progress-${key}`, progressActive) progressSSE.value.start() } @@ -244,8 +242,11 @@ async function transfer(background: boolean = false) { if (props.items) { for (const item of props.items) { if (!background) { + // 如果是文件,计算MD5 + const key = item.type === 'dir' ? 'filetransfer' : CryptoJS.MD5(item.path).toString() + // 开始监听进度 - startLoadingProgress(item.path) + startLoadingProgress(key) } await handleTransfer(item, background) } @@ -253,11 +254,14 @@ async function transfer(background: boolean = false) { // 日志整理 if (props.logids) { + if (!background) { + // 为日志整理任务开启进度监听 + startLoadingProgress('filetransfer') + } for (const logid of props.logids) { await handleTransferLog(logid, background) } } - if (!background) { // 停止监听进度 stopLoadingProgress()