diff --git a/src/frontend/src/components/EdictBoard.tsx b/src/frontend/src/components/EdictBoard.tsx index 2398955..e8eef5a 100644 --- a/src/frontend/src/components/EdictBoard.tsx +++ b/src/frontend/src/components/EdictBoard.tsx @@ -267,7 +267,7 @@ export default function EdictBoard() { { key: 'blocked', label: '阻塞', icon: '🚧' }, ]; - let filtered = tasks; + let filtered = tasks.filter(t => !t.parent_task); // 只显示顶层 Task if (statusFilter !== 'all') filtered = filtered.filter(t => t.status === statusFilter); if (searchQuery.trim()) { const q = searchQuery.trim().toLowerCase(); @@ -277,8 +277,8 @@ export default function EdictBoard() { const order: Record = { working: 0, review: 1, claimed: 2, blocked: 3, pending: 4, failed: 5, done: 6, cancelled: 7 }; filtered.sort((a, b) => (order[a.status] ?? 8) - (order[b.status] ?? 8)); - const counts: Record = { all: tasks.length }; - tasks.forEach(t => { counts[t.status] = (counts[t.status] || 0) + 1; }); + const counts: Record = { all: tasks.filter(t => !t.parent_task).length }; + tasks.filter(t => !t.parent_task).forEach(t => { counts[t.status] = (counts[t.status] || 0) + 1; }); const activeCount = tasks.filter(t => ['working', 'claimed', 'review'].includes(t.status)).length; const doneCount = tasks.filter(t => t.status === 'done').length;