-
⚠ 以下 {legacySubs.length} 个分支属于已完工的历史主线,仍在进行中
+
+
⚠ {legacySubs.length} 个遗留分支仍在进行中
)}
-
- {/* 中央:activeMain 纵向排列 */}
-
- {activeMain.map(t => (
-
- ))}
- {activeMain.length === 0 &&
当前无活跃主线任务
}
-
-
- {/* 两侧:activeSubs + legacySubs 与中央同行 */}
-
- {/* activeSubs(实线) */}
- {activeSubs.map(t => (
-
-
-
-
+ {/* 每个活跃主线一行:左翼 + 中央 + 右翼 */}
+ {activeMain.map(mainTask => {
+ const allSubs = [...activeSubs, ...legacySubs];
+ const leftSubs = allSubs.filter((_, i) => i % 2 === 0);
+ const rightSubs = allSubs.filter((_, i) => i % 2 === 1);
+ return (
+
+ {/* 左翼 */}
+
+ {leftSubs.map(t => {
+ const isLegacy = legacySubs.includes(t);
+ return (
+
+ );
+ })}
+
+ {/* 中央主干 */}
+
+
+
+ {/* 右翼 */}
+
+ {rightSubs.map(t => {
+ const isLegacy = legacySubs.includes(t);
+ return (
+
+ );
+ })}
+
- ))}
- {/* legacySubs(虚线+来源标注) */}
- {legacySubs.map(t => (
-
- ))}
-
+ );
+ })}
+ {activeMain.length === 0 &&
当前无活跃主线任务
}
)}
@@ -164,40 +174,50 @@ export const TaskFlowView = memo(function TaskFlowView({ tasks, onAction, curren
{allMains.map(mainTask => {
const children = Array.from(ALL_TASKS).filter(t => t.parent_task_id === mainTask.id);
- const activeChildren = children.filter(c => active(c.status));
- const hasLegacyActive = activeChildren.some(c => !isMain(c) && !active(mainTask.status));
+ const hasLegacyActive = children.some(c => !isMain(c) && !active(mainTask.status));
+ const leftChildren = children.filter((_, i) => i % 2 === 0);
+ const rightChildren = children.filter((_, i) => i % 2 === 1);
return (
- {/* 垂直轴线 */}
-
+ {/* 垂直轴线贯穿中央 */}
+
- {/* 主干卡片居中 */}
-
-
+ {/* 水平一行:左翼 + 中央 + 右翼 */}
+
+ {/* 左翼分支 */}
+
+ {leftChildren.map(c => (
+
+ ))}
+
+ {/* 中央主干 */}
+
{active(mainTask.status) && (
)}
-
-
- {/* 分支水平排列 */}
- {children.length > 0 && (
-
- {children.map(c => (
-
-
+ {/* 右翼分支 */}
+
+ {rightChildren.map(c => (
+
))}
- )}
+
- {/* 区间连接线 */}
+ {/* 区间连接 ▼ */}
{allMains.indexOf(mainTask) < allMains.length - 1 && (
▼