From 4e1df67857f81dd664a52c6b883445de53c7ce97 Mon Sep 17 00:00:00 2001 From: Momentry Studio Date: Thu, 8 Oct 2026 01:32:43 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=89=B9=E9=87=8F=20D?= =?UTF-8?q?eep=20Scan=20=E9=98=9F=E5=88=97=E6=98=BE=E7=A4=BA=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题: - 使用静态的 position 计算 queuePosition,导致队列显示不准确 - 任务实际执行时间不确定,导致队列状态显示错误 修复: - 使用 processing 变量跟踪正在处理的任务数量 - 动态计算队列数量:queueCount = filesToProcess.length - successCount - failCount - processing - 确保队列状态实时更新 改进: - 添加 processing 变量跟踪正在处理的任务 - 在 finally 块中递减 processing 计数器 - 实时更新队列显示,反映真实状态 --- src/views/LibraryView.vue | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/views/LibraryView.vue b/src/views/LibraryView.vue index 60849be..6ee326e 100644 --- a/src/views/LibraryView.vue +++ b/src/views/LibraryView.vue @@ -1893,12 +1893,13 @@ async function batchDeepScan() { const immediateCount = Math.min(filesToProcess.length, maxConcurrent) const queueTotal = Math.max(0, filesToProcess.length - maxConcurrent) - actionMsg.value = `Starting: ${immediateCount} immediate, ${queueTotal} queuing...` - + let processing = 0 let successCount = 0 let failCount = 0 - const tasks = filesToProcess.map((f, index) => { + actionMsg.value = `Starting: ${immediateCount} immediate, ${queueTotal} queuing...` + + const tasks = filesToProcess.map((f) => { return limit(async () => { const fileUuid = f.file_uuid if (!fileUuid) { @@ -1906,19 +1907,20 @@ async function batchDeepScan() { return } - const position = index + 1 - const queuePosition = position - maxConcurrent + processing++ + const queueCount = Math.max(0, filesToProcess.length - successCount - failCount - processing) - if (queuePosition > 0) { - actionMsg.value = `Processing ${successCount + 1}/${filesToProcess.length} (${queuePosition} queuing)...` + if (queueCount > 0) { + actionMsg.value = `Processing ${successCount + 1}/${filesToProcess.length} (${queueCount} queuing)...` } else { - actionMsg.value = `Processing ${position}/${filesToProcess.length}...` + actionMsg.value = `Processing ${successCount + 1}/${filesToProcess.length}...` } try { const file = filesCache.value.find((x: any) => x.file_uuid === fileUuid) if (!file) { failCount++ + processing-- return } @@ -1940,6 +1942,8 @@ async function batchDeepScan() { } catch (e: any) { failCount++ console.error('[batchDeepScan] Failed:', f.file_name, e) + } finally { + processing-- } }) })