# 实施计划 — 服务器全选筛选 + 脚本失败分组/CSV

**日期**: 2026-06-08  
**设计**: `docs/design/specs/2026-06-08-servers-select-all-script-exec-export-design.md`

## 涉及文件

| 文件 | 变更 |
|------|------|
| `frontend/src/utils/csvExport.ts` | 新建：BOM CSV 构建与下载 |
| `frontend/src/utils/execDetailGrouping.ts` | 新建：错误键归一化、失败分组 |
| `frontend/src/pages/ServersPage.vue` | 全选筛选、全选本组、筛选变更清选择 |
| `frontend/src/pages/ScriptsPage.vue` | 分组视图、导出 CSV |
| `tests/test_exec_detail_grouping.py` | 可选：若纯 TS 则 `frontend` vitest 或 TS 单测脚本 |

## 步骤

1. 抽取 `csvExport.ts`，ServersPage 导出可后续复用（本 PR 仅 Scripts 必用）。
2. `ServersPage`：分类 Chip 行下增加「全选筛选结果」；批量栏保留；group 视图 panel 标题加 toggle。
3. `ScriptsPage`：详情区增加 列表|分组 toggle + 导出按钮；分组用 `v-expansion-panels`。
4. `watch` 筛选清空选择。
5. `bash scripts/local_verify.sh` + 前端 build。
6. changelog + audit。

## 测试要点

- 本地 mock：分组函数单元测试（Node/ts 或 pytest 不适用 — 用 vitest 若已配置，否则 manual + local_verify）。
- 手动：`#/servers` 选分类 → 全选 → 数量；`#/scripts` 打开历史失败详情 → 分组 + CSV。

## 回滚

- 纯前端：回滚 commit + `deploy/deploy-frontend.sh`，无需 DB 迁移。
