From c92e7bd93100fbdcf8685a0ae1e9d64b99b9bc68 Mon Sep 17 00:00:00 2001 From: duxingchen Date: Thu, 6 Aug 2026 11:45:56 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D2D=E5=B8=83=E5=B1=80:=20?= =?UTF-8?q?=E6=97=B6=E9=97=B4=E6=88=B3=E5=88=A4=E5=AE=9A=E4=B8=B2=E8=A1=8C?= =?UTF-8?q?/=E5=B9=B6=E8=A1=8C=20=E2=80=94=20created=5Fat>parent.completed?= =?UTF-8?q?=5Fat=E6=89=8D=E6=98=AF=E4=B8=B2=E8=A1=8C,=E5=90=A6=E5=88=99?= =?UTF-8?q?=E5=B9=B6=E8=A1=8C=E5=90=8CY?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/pages/scan/components/TreeCanvas.vue | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/track-uniapp/src/pages/scan/components/TreeCanvas.vue b/track-uniapp/src/pages/scan/components/TreeCanvas.vue index 222ccde..e83b9bd 100644 --- a/track-uniapp/src/pages/scan/components/TreeCanvas.vue +++ b/track-uniapp/src/pages/scan/components/TreeCanvas.vue @@ -66,8 +66,12 @@ export default { const layout = (tasks, parentRowIdx, parentX) => { if (!tasks || !tasks.length) return; tasks.forEach(t => { - // 判定:parent COMPLETED → 串行 Y+1;parent WIP/PENDING → 并行同Y偏右 - const isSerial = !t.parent_task_id || (this.taskStatusMap[t.parent_task_id] === 'COMPLETED'); + // 时间戳判定:子任务创建于父任务完成之后 → 串行(下一行);否则 → 并行(同Y偏右) + const parentNode = this.taskDataMap[t.parent_task_id]; + const isSerial = !t.parent_task_id || ( + parentNode && parentNode.completed_at && + new Date(t.created_at) > new Date(parentNode.completed_at) + ); const rowIdx = isSerial ? (parentRowIdx >= 0 ? parentRowIdx + 1 : rows.length) : parentRowIdx; while (rows.length <= rowIdx) rows.push({ y: 0, tasks: [] }); @@ -100,9 +104,9 @@ export default { return nodes; }, - taskStatusMap() { + taskDataMap() { const map = {}; - const walk = (tasks) => { if (!tasks) return; tasks.forEach(t => { map[t.id] = t.status; walk(t.child_tasks); }); }; + const walk = (tasks) => { if (!tasks) return; tasks.forEach(t => { map[t.id] = t; walk(t.child_tasks); }); }; if (this.product) walk(this.product.task_tree); return map; },