diff --git a/frontend/src/components/TaskTree/TaskFlowView.tsx b/frontend/src/components/TaskTree/TaskFlowView.tsx index e8791dd..332c59e 100644 --- a/frontend/src/components/TaskTree/TaskFlowView.tsx +++ b/frontend/src/components/TaskTree/TaskFlowView.tsx @@ -164,9 +164,14 @@ export const TaskFlowView = memo(function TaskFlowView({ tasks, onAction, curren // 🚀 焦点模式 vs 全景模式:共用同一套垂直时间线布局,仅数据过滤不同 const visibleMains = useMemo(() => { if (showFullMap) return allMains; - // 焦点模式:过滤掉已完成/已入库的历史主线,保留活跃主线 + 所有协助分支 - return allMains.filter(t => active(t.status)); - }, [allMains, showFullMap]); + // 焦点模式:保留自身活跃的主线,或含活跃分支(后代)的主线, + // 避免「主线已完成、但并发协助分支仍在进行中」时整条分支被错误隐藏 + const hasActiveDescendant = (node: TaskResponse): boolean => { + const kids = childMap[node.id] || []; + return kids.some(k => active(k.status) || hasActiveDescendant(k)); + }; + return allMains.filter(t => active(t.status) || hasActiveDescendant(t)); + }, [allMains, childMap, showFullMap]); return (
diff --git a/frontend/src/pages/admin/AdminTasksPage.tsx b/frontend/src/pages/admin/AdminTasksPage.tsx index 358d347..301dbe1 100644 --- a/frontend/src/pages/admin/AdminTasksPage.tsx +++ b/frontend/src/pages/admin/AdminTasksPage.tsx @@ -412,12 +412,15 @@ export default function AdminTasksPage() { {/* 最新动态 */}
{p.latest_record_time ? ( - +
{new Date(p.latest_record_time).toLocaleString("zh-CN", { month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit" })}
{p.latest_record_has_images && 📷} - {p.latest_record_content || (p.latest_record_has_images ? "图片记录" : "—")} + + {p.latest_record_assignee_name && {p.latest_record_assignee_name}: } + {p.latest_record_content || (p.latest_record_has_images ? "图片记录" : "—")} +
diff --git a/frontend/src/types/admin.ts b/frontend/src/types/admin.ts index fea9af6..d8a253f 100644 --- a/frontend/src/types/admin.ts +++ b/frontend/src/types/admin.ts @@ -21,6 +21,8 @@ export interface ProductResponse { latest_record_time: string | null; latest_record_content: string | null; latest_record_has_images: boolean; + latest_record_assignee_id: string | null; + latest_record_assignee_name: string | null; } /** MOM 物料选项 */