fix(servers): 未设路径区表格绑定 sort-by 启用服务端排序

未设路径面板缺 v-model:sort-by,列头点击不触发 API;与主表共享 sortBy。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Nexus Agent
2026-06-08 14:36:21 +08:00
parent 05c7aeb702
commit 85ecd1f54f
4 changed files with 56 additions and 0 deletions
@@ -0,0 +1,25 @@
# 审计 — 未设路径服务器表格排序
**Changelog**: `docs/changelog/2026-06-08-unset-path-table-sort.md`
## 变更文件
`ServerUnsetPathPanel.vue` · `ServersPage.vue` · `web/app/index.html` · `web/app/assets/*`
## Step 3
| 项 | 结论 |
|----|------|
| sort-by 与主表共享 | PASS(同一 `sortBy` ref + `listQueryParams` |
| API 参数 | PASS`target_path_unset=true` + `sort_by`/`sort_order` 已有) |
| 无后端改动 | PASS |
## Closure
Gate 7/7 PASS · 生产部署 · `/health` 200
## DoD
- [x] 未设路径区列头可排序
- [x] 与主表排序状态一致
- [x] 前端构建通过
@@ -0,0 +1,25 @@
# 未设路径服务器表格排序修复
**日期**2026-06-08
## 变更摘要
修复「未设置路径服务器」区域点击表头排序无效的问题:为 `ServerUnsetPathPanel``v-data-table-server` 绑定 `sort-by`,与主表共享同一排序状态并走服务端 `sort_by` / `sort_order` 参数。
## 动机
主表已有 `v-model:sort-by`,未设路径区缺绑定,列头点击无 API 请求、顺序不变。
## 涉及文件
- `frontend/src/components/servers/ServerUnsetPathPanel.vue` — 新增 `sortBy` prop 与 `update:sort-by` emit
- `frontend/src/pages/ServersPage.vue``v-model:sort-by="sortBy"` 传给未设路径面板
## 迁移 / 重启
无。前端构建部署即可。
## 验证
1. 打开服务器页,在未设路径区点击「名称」「心跳」等列头,列表顺序应变化且与主表排序一致。
2. `GET /api/servers/?target_path_unset=true&sort_by=...&sort_order=...` 应出现在网络请求中。
@@ -53,8 +53,10 @@
show-select
show-expand
:model-value="selectedItems"
:sort-by="sortBy"
v-model:expanded="expandedModel"
@update:model-value="$emit('update:selected-items', $event)"
@update:sort-by="$emit('update:sort-by', $event)"
@update:page="$emit('update:page', $event)"
@update:items-per-page="$emit('update:items-per-page', $event)"
>
@@ -177,6 +179,7 @@
<script setup lang="ts">
import { computed } from 'vue'
import type { ServerApiItem } from '@/types/api'
import type { TableSortItem } from '@/utils/serverTableSort'
import { statusChipColor, statusLabel, formatRelativeTime } from '@/utils/status'
import { normalizeServerIds } from '@/utils/serverSelection'
import ServerInlineDetail from '@/components/servers/ServerInlineDetail.vue'
@@ -189,6 +192,7 @@ const props = defineProps<{
page: number
itemsPerPage: number
itemsPerPageOptions: ReadonlyArray<{ readonly value: number; readonly title: string }>
sortBy: TableSortItem[]
expandedIds: number[]
selectedItems: Array<ServerApiItem | number>
selectAllLoading: boolean
@@ -199,6 +203,7 @@ const props = defineProps<{
const emit = defineEmits<{
refresh: []
'update:sort-by': [sortBy: TableSortItem[]]
'update:page': [page: number]
'update:items-per-page': [n: number]
'update:selected-items': [items: Array<ServerApiItem | number>]
+1
View File
@@ -302,6 +302,7 @@
:items-per-page-options="dataTablePageOptions"
:expanded-ids="expandedUnsetIds"
v-model:selected-items="unsetSelectedItems"
v-model:sort-by="sortBy"
:select-all-loading="selectAllUnsetLoading"
:editing-path-id="editingPathId"
:editing-path-value="editingPathValue"