# 设计说明 — 服务器全选筛选结果 + 脚本执行失败分组/CSV **日期**: 2026-06-08 **基线**: `main@5f63fb0`(分类/分页/执行详情已上线) ## 背景与目标 1. **服务器列表**:`v-data-table-server` 表头 checkbox 仅选当前页,批量操作无法覆盖「分类 Chip + 搜索」下的全部匹配项。 2. **脚本执行详情**:失败项已有「仅失败」筛选与单行操作,但同类错误分散在多行,缺少聚合视图与离线导出。 ## 方案对比 | 能力 | 方案 A(选用) | 方案 B | |------|----------------|--------| | 全选筛选 | 前端复用 `loadAllServers()`(已有 search/category/sort) | 新 API `GET /servers/ids` | | 失败分组 | 前端按 `summary` 首行归一化分组 | 后端解析 stderr 分类 | | CSV | 前端 BOM UTF-8 下载 | 后端 StreamingResponse | **选定 A**:零后端变更、与现有分页/filter 参数一致、部署风险低。 **2026-06-08 范围确认**:CSV 不做;留档改为「复制失败清单 + 复制分组摘要」;分组规则 **B**(去动态 IP/端口/路径)。 ## 接口与数据 - 无新 API。 - 全选:`fetchPagePerPage('/servers/', { search, category, sort_by, sort_order }, 1, -1)` → ID 列表。 - 分组键:`normalizeExecErrorKey(summary)` — 首行 trim,空则「未知错误」,上限 200 字符。 - CSV 列:服务器、域名、状态、退出码、错误摘要、完整输出。 ## 安全与性能 - 全选 300+ 台:多页 GET(200/页),与「分页全部」相同;批量操作仍走既有 authenticated API。 - CSV 含命令输出,仅管理员 JWT 会话内下载,不落库。 - 筛选条件变更时清空 `selectedItems`,避免误对旧选择批量操作。 ## 验收标准 ### 服务器 `#/servers` - [ ] 分类 Chip 筛选后点「全选筛选结果 (N)」→ N 等于 Chip 数量,批量改分类生效。 - [ ] 搜索 + 全选 → 仅匹配项被选中。 - [ ] 分类视图:每组可「全选本组」;顶部可「全选筛选结果」。 - [ ] 更改分类/搜索/排序后选择被清空。 ### 脚本 `#/scripts` 执行详情 - [ ] 存在失败时可选「列表 / 按错误分组」;分组按错误摘要聚合,显示台数。 - [ ] 「复制失败清单」「复制分组摘要」剪贴板内容正确 - [ ] **不做** CSV 文件下载