fix: 修复批量 Deep Scan 队列显示问题

问题:
- 使用静态的 position 计算 queuePosition,导致队列显示不准确
- 任务实际执行时间不确定,导致队列状态显示错误

修复:
- 使用 processing 变量跟踪正在处理的任务数量
- 动态计算队列数量:queueCount = filesToProcess.length - successCount - failCount - processing
- 确保队列状态实时更新

改进:
- 添加 processing 变量跟踪正在处理的任务
- 在 finally 块中递减 processing 计数器
- 实时更新队列显示,反映真实状态
This commit is contained in:
2026-10-08 01:32:43 +08:00
parent 593b83d61a
commit 4e1df67857

View File

@@ -1893,12 +1893,13 @@ async function batchDeepScan() {
const immediateCount = Math.min(filesToProcess.length, maxConcurrent) const immediateCount = Math.min(filesToProcess.length, maxConcurrent)
const queueTotal = Math.max(0, 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 successCount = 0
let failCount = 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 () => { return limit(async () => {
const fileUuid = f.file_uuid const fileUuid = f.file_uuid
if (!fileUuid) { if (!fileUuid) {
@@ -1906,19 +1907,20 @@ async function batchDeepScan() {
return return
} }
const position = index + 1 processing++
const queuePosition = position - maxConcurrent const queueCount = Math.max(0, filesToProcess.length - successCount - failCount - processing)
if (queuePosition > 0) { if (queueCount > 0) {
actionMsg.value = `Processing ${successCount + 1}/${filesToProcess.length} (${queuePosition} queuing)...` actionMsg.value = `Processing ${successCount + 1}/${filesToProcess.length} (${queueCount} queuing)...`
} else { } else {
actionMsg.value = `Processing ${position}/${filesToProcess.length}...` actionMsg.value = `Processing ${successCount + 1}/${filesToProcess.length}...`
} }
try { try {
const file = filesCache.value.find((x: any) => x.file_uuid === fileUuid) const file = filesCache.value.find((x: any) => x.file_uuid === fileUuid)
if (!file) { if (!file) {
failCount++ failCount++
processing--
return return
} }
@@ -1940,6 +1942,8 @@ async function batchDeepScan() {
} catch (e: any) { } catch (e: any) {
failCount++ failCount++
console.error('[batchDeepScan] Failed:', f.file_name, e) console.error('[batchDeepScan] Failed:', f.file_name, e)
} finally {
processing--
} }
}) })
}) })