# 2026-06-07 — 服务器分类筛选 / 批量改分类 / 脚本库按分类选机

## 日期
2026-06-07

## 变更摘要
服务器列表新增按分类筛选、分类分组视图、批量改分类；脚本库执行/临时命令的服务器选择改为按分类勾选（与推送页一致）。

## 动机
导入 300+ 台服务器后需按业务分类浏览与管理；原列表仅有分类列，无法筛选或批量调整。

## 涉及文件
| 文件 | 说明 |
|------|------|
| `server/infrastructure/database/server_repo.py` | `uncategorized` 筛选；`update_category_batch()` |
| `server/api/servers.py` | `POST /api/servers/batch/category` |
| `server/api/schemas.py` | `BatchCategoryUpdate` / `BatchCategoryResult` |
| `frontend/src/composables/useServerCategories.ts` | 分类列表与计数 |
| `frontend/src/composables/useServerPagination.ts` | `categoryFilter`、`loadAllServers()` |
| `frontend/src/pages/ServersPage.vue` | 分类 Chip、列表/分类视图、批量改分类对话框 |
| `frontend/src/types/api.ts` | `BatchCategoryResult` 类型 |
| `frontend/src/components/servers/ServerCategoryPicker.vue` | 可复用按分类服务器选择器 |
| `frontend/src/composables/useServerList.ts` | `category` 字段；`loadServers({ all: true })` 分页拉全量 |
| `frontend/src/pages/ScriptsPage.vue` | 执行对话框与临时命令改用 `ServerCategoryPicker` |

## 功能说明
- **分类筛选**：Chip 展示各分类数量，点击过滤列表（`uncategorized` → 未分类）。
- **分类视图**：切换「分类」后以折叠面板按分类分组展示，支持勾选与批量操作。
- **批量改分类**：勾选后点「修改分类」，支持选择已有分类或输入新名称；留空清除分类。单次 API 最多 200 台，前端自动分块。
- **脚本库选机**：`#/scripts` 执行脚本对话框与「临时命令执行」支持按分类全选/单选、搜索过滤，展示在线状态与已选台数。

## 是否需迁移
否

## 是否需重启
是（后端 API 变更）；前端需 `vite build` 后部署

## 2026-06-07 补充：服务器列表列排序
- `useServerPagination` 接入 `v-model:sort-by` → API `sort_by` / `sort_order`
- 表头 key 与后端对齐（`domain`、`agent_version`、`last_heartbeat`）；`操作` 列 `sortable: false`
- 后端新增 `target_path` 可排序字段
- 未实现排序的其它 `v-data-table-server` 默认关闭排序箭头（`headersWithoutSort`）

## 2026-06-07 补充：表格分页中文化与「全部」修复
- Vuetify 全局 `zhHans` 语言包（「每页数目」「全部」「上一页」等）
- `fetchPagePerPage` / `fetchLimitOffset`：选「全部」(-1) 时自动多页拉取（API 单次上限 200）
- 修复调度列表 `slice(0,-1)` 误删最后一行；命令日志页补 `items-per-page` 变更回调

## 验证方式
1. `pytest tests/test_credential_poller.py`（既有用例）
2. 本地 `#/servers`：分类 Chip 筛选、分类视图、批量改分类
3. `POST /api/servers/batch/category` 审计日志 `batch_update_category`
