feat(tasks): 任务列表新增漏洞数量列,描述/目标列收窄

- 任务列表接口 TaskListMetricsAll 批量统计每任务的漏洞数(findings 表,
  按 task_id),经 TaskDTO.findings 下发;列表页新增「漏洞」列,>0 高亮
- 描述/目标列宽 max-w-xs → max-w-40,目标列补 title 悬浮全文
- mock data/handler 同步补 findings 字段
This commit is contained in:
Autumn-27 committed 2026-09-24 13:26:22 -04:00
1 parent 9bc8d16a0b
commit e65d3e5202
7 files changed
+27 -3

No files matched your search

+12 -2
View File
@@ -950,6 +950,7 @@ export default function TasksPage() {
onSort={sortTasksBy}
/>
<TableHead className="text-center">目标进度</TableHead>
<TableHead className="text-center">漏洞</TableHead>
<TableHead className="text-center">运行中 Worker</TableHead>
<SortableTaskHead
field="created"
@@ -1193,7 +1194,7 @@ const TaskRow = React.memo(function TaskRow({
{taskIsPinned(task) && <PinIcon className="text-primary size-4 shrink-0" aria-label="已置顶" />}
</div>
</TableCell>
<TableCell className="text-muted-foreground max-w-xs">
<TableCell className="text-muted-foreground max-w-40">
<Link
href={`/function/tasks/detail?id=${encodeURIComponent(task.id)}`}
className="block truncate rounded-sm hover:text-foreground hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
@@ -1202,7 +1203,9 @@ const TaskRow = React.memo(function TaskRow({
{task.description}
</Link>
</TableCell>
<TableCell className="text-muted-foreground max-w-xs truncate">{task.goal}</TableCell>
<TableCell className="text-muted-foreground max-w-40 truncate" title={task.goal}>
{task.goal}
</TableCell>
<TableCell>
<StatusBadge domain="task" value={task.status} dot />
</TableCell>
@@ -1213,6 +1216,13 @@ const TaskRow = React.memo(function TaskRow({
<span className="text-muted-foreground">—</span>
)}
</TableCell>
<TableCell className="text-center text-xs tabular-nums">
{task.findings && task.findings > 0 ? (
<span className="text-destructive font-medium">{task.findings}</span>
) : (
<span className="text-muted-foreground">0</span>
)}
</TableCell>
<TableCell className="text-center text-xs tabular-nums">
{task.in_flight && task.in_flight > 0 ? (
<span className="text-foreground font-medium">{task.in_flight}</span>
+2
View File
@@ -65,6 +65,7 @@ export const tasks: Task[] = [
paused: false,
active: true,
in_flight: 3,
findings: 4,
stalled: false,
goals_total: 5,
goals_met: 2,
@@ -90,6 +91,7 @@ export const tasks: Task[] = [
paused: false,
active: false,
in_flight: 2,
findings: 2,
stalled: false,
goals_total: 4,
goals_met: 1,
+1
View File
@@ -1192,6 +1192,7 @@ function route(m: string, path: string, seg: string[], q: URLSearchParams, b: Re
paused: false,
active: true,
in_flight: 0,
findings: 0,
stalled: false,
goals_total: 0,
goals_met: 0,
+1
View File
@@ -23,6 +23,7 @@ export interface Task {
queued?: boolean;
active?: boolean;
in_flight?: number;
findings?: number; // 该任务已登记的漏洞数
last_activity?: string;
stalled?: boolean;
goals_total?: number;