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 物料选项 */