df95a2429f
服务器列表支持跨页全选当前筛选/分类本组;脚本执行详情按错误类型分组(去动态 IP)并复制失败清单,不做 CSV 导出。 Co-authored-by: Cursor <cursoragent@cursor.com>
2.3 KiB
2.3 KiB
设计说明 — 服务器全选筛选结果 + 脚本执行失败分组/CSV
日期: 2026-06-08
基线: main@5f63fb0(分类/分页/执行详情已上线)
背景与目标
- 服务器列表:
v-data-table-server表头 checkbox 仅选当前页,批量操作无法覆盖「分类 Chip + 搜索」下的全部匹配项。 - 脚本执行详情:失败项已有「仅失败」筛选与单行操作,但同类错误分散在多行,缺少聚合视图与离线导出。
方案对比
| 能力 | 方案 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 文件下载