diff --git a/frontend/src/components/TaskTree/TaskFlowView.tsx b/frontend/src/components/TaskTree/TaskFlowView.tsx index d452241..ab7f23e 100644 --- a/frontend/src/components/TaskTree/TaskFlowView.tsx +++ b/frontend/src/components/TaskTree/TaskFlowView.tsx @@ -14,6 +14,10 @@ import type { ModalTarget } from "./TaskTreeViewer"; function fmtTime(d: string | null) { if (!d) return ""; const dt = new Date(d); const pad = (n: number) => String(n).padStart(2, "0"); return `${dt.getFullYear()}-${pad(dt.getMonth() + 1)}-${pad(dt.getDate())} ${pad(dt.getHours())}:${pad(dt.getMinutes())}`; } function isMain(t: TaskResponse) { return !t.parent_task_id || t.task_type === "TRANSFER" || t.task_type === "RECOVERY" || (!t.task_type && !!t.parent_task_id); } function active(s: string) { return s === "WIP" || s === "PENDING"; } +/** 微型右箭头 SVG */ +function ArrowRight({ color = "#9ca3af" }: { color?: string }) { + return ; +} function parseImages(s: string | null | undefined): string[] { if (!s) return []; try { return JSON.parse(s); } catch { return []; } } function imageUrl(u: string) { if (!u) return ""; return u.startsWith("http") ? u : import.meta.env.VITE_API_BASE_URL + (u.startsWith("/") ? u : "/" + u); } @@ -121,43 +125,50 @@ export const TaskFlowView = memo(function TaskFlowView({ tasks, onAction, curren {/* ─── 焦点模式 ─── */} {!showFullMap && ( -
⚠ {legacySubs.length} 个遗留分支仍在进行中