diff --git a/frontend/src/components/TaskTree/TaskFlowView.tsx b/frontend/src/components/TaskTree/TaskFlowView.tsx index 9ecd5a6..ac9d3e4 100644 --- a/frontend/src/components/TaskTree/TaskFlowView.tsx +++ b/frontend/src/components/TaskTree/TaskFlowView.tsx @@ -150,11 +150,13 @@ const SlimCard = memo(function SlimCard({ )} - {/* 记录:右下角普通文本链接 + 蓝色 > 箭头 */} + {/* 操作日志:全行蓝色横条,整条可点击 */} {task.records && task.records.length > 0 && ( -
{ e.stopPropagation(); onViewRecords?.(task); }} className={`${sz.record} flex cursor-pointer items-center justify-end gap-0.5 text-blue-600 hover:text-blue-400`}> - {task.records.length}条 - +
{ e.stopPropagation(); onViewRecords?.(task); }} + className={`${size === "lg" ? "-mx-4 -mb-4" : "-mx-2.5 -mb-2.5"} mt-3 py-1.5 w-full bg-blue-50 text-blue-600 text-center text-sm cursor-pointer hover:bg-blue-100 border-t border-blue-100 rounded-b-md transition-colors`} + > + 查看操作日志 ({task.records.length}条)
)}
@@ -252,7 +254,7 @@ export const TaskFlowView = memo(function TaskFlowView({ tasks, onAction, curren {/* ─── 统一垂直时间线布局(焦点/全景共用) ─── */}
- {visibleMains.map(mainTask => { + {visibleMains.map((mainTask, mainIdx) => { // 🔧 侧翼严格过滤:主线归主轴,仅 SPAWN 协助分支进入左右翼 const directChildren = (childMap[mainTask.id] || []).filter(c => !isMain(c)); const hasLegacyActive = directChildren.some(c => !isMain(c) && !active(mainTask.status)); @@ -262,7 +264,14 @@ export const TaskFlowView = memo(function TaskFlowView({ tasks, onAction, curren return (
-
+ {/* 中央垂直线:按行渲染;首行从卡片中间起,末行到卡片中间止,避免冒出/多截 */} +
{/* 左翼 — 递归渲染,子子孙孙向外延伸 */}