Files
Nexus/docs/design/specs/2026-06-08-servers-select-all-script-exec-export-design.md
T
2026-07-08 22:31:31 +08:00

2.3 KiB
Raw Blame History

设计说明 — 服务器全选筛选结果 + 脚本执行失败分组/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 文件下载