diff --git a/track-uniapp/src/pages/scan/components/FlowTree.vue b/track-uniapp/src/pages/scan/components/FlowTree.vue
index ff97399..0049486 100644
--- a/track-uniapp/src/pages/scan/components/FlowTree.vue
+++ b/track-uniapp/src/pages/scan/components/FlowTree.vue
@@ -19,17 +19,32 @@
-
-
-
+
+
+
+
+ ↓
+
+
+
+
+
+
@@ -52,6 +67,18 @@ export default {
|| this.node.task_type === "TRANSFER"
|| this.node.task_type === "RECOVERY";
},
+ // 主线子任务:TRANSFER/RECOVERY,继续主干道(左对齐)
+ mainChildren() {
+ return (this.node.child_tasks || []).filter((c) =>
+ !c.parent_task_id || c.task_type === "TRANSFER" || c.task_type === "RECOVERY"
+ );
+ },
+ // 分支子任务:其余(SPAWN 协助等),缩进显示
+ branchChildren() {
+ return (this.node.child_tasks || []).filter((c) =>
+ c.parent_task_id && c.task_type !== "TRANSFER" && c.task_type !== "RECOVERY"
+ );
+ },
isWarehouseTask() {
const name = String(this.node.task_name || "");
return (name.includes("在库") || name.includes("入库")) || this.node.assignee_id === "virtual_warehouse";
@@ -128,5 +155,20 @@ export default {
.ft-time { font-size: 11px; color: #9ca3af; }
.ft-records { font-size: 11px; color: #2563eb; font-weight: 600; }
-.ft-children { margin-left: 16px; padding-left: 10px; border-left: 2px solid #e5e7eb; margin-top: 8px; }
+/* 主线子任务:无缩进(左边缘对齐成笔直主干道),之间用 ↓ 连线 */
+.ft-flow-arrow {
+ text-align: center;
+ color: #9ca3af;
+ font-size: 16px;
+ font-weight: 700;
+ line-height: 1;
+ margin: 2px 0;
+}
+/* 分支子任务:缩进 + 左边线 */
+.ft-branch-children {
+ margin-left: 16px;
+ padding-left: 12px;
+ border-left: 2px solid #e5e7eb;
+ margin-top: 8px;
+}
diff --git a/track-uniapp/src/pages/scan/components/TreeCanvas.vue b/track-uniapp/src/pages/scan/components/TreeCanvas.vue
index ddeea66..58e5ff1 100644
--- a/track-uniapp/src/pages/scan/components/TreeCanvas.vue
+++ b/track-uniapp/src/pages/scan/components/TreeCanvas.vue
@@ -16,16 +16,18 @@
-
-
+
+
+ ↓
+
+
@@ -96,6 +98,15 @@ export default {
.tree-scroll { flex-shrink: 0; }
.tree-root { padding: 16px 12px 20px; }
+/* 根级主线之间的向下连线箭头 */
+.ft-flow-arrow {
+ text-align: center;
+ color: #9ca3af;
+ font-size: 16px;
+ font-weight: 700;
+ line-height: 1;
+ margin: 2px 0;
+}
.tree-legend {
display: flex;
flex-wrap: wrap;