From 3d8013da57f2a1919fdfa1bbf8f856cb63fba8b5 Mon Sep 17 00:00:00 2001 From: chengkai3 Date: Sat, 20 Jun 2026 11:11:03 +0800 Subject: [PATCH] =?UTF-8?q?[fix]:[FL-156][=E4=BB=BB=E5=8A=A1=E7=9B=91?= =?UTF-8?q?=E6=8E=A7=E9=A1=B5=E9=9D=A2=E5=88=86=E9=A1=B5=E7=BB=86=E8=8A=82?= =?UTF-8?q?=E5=AF=B9=E9=BD=90]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: multica-agent --- memory/2026-06-20.md | 23 ++++++++++ web/src/app/admin/task-monitor/page.tsx | 57 +++++++++++++++++++------ web/src/app/globals.css | 1 - 3 files changed, 67 insertions(+), 14 deletions(-) diff --git a/memory/2026-06-20.md b/memory/2026-06-20.md index ec4c29c..aaa4ff4 100644 --- a/memory/2026-06-20.md +++ b/memory/2026-06-20.md @@ -211,6 +211,29 @@ - 改动仅影响任务监控页前端展示、筛选布局、错误反馈和移动端呈现,不改变 `/api/v1/admin/flower/*` 接口路径、请求/响应字段或权限语义。 - `web/package-lock.json` 此次同步了 `web/package.json` 已有依赖条目,变动较大但不改变业务代码。 +## Follow-up - 任务监控页分页和空态细节对齐(FL-156) + +- 背景: + - 复核发现任务监控页表格分页、移动卡片顶部间距和筛选空态文案仍与用户管理页存在细节差异。 + +- 本次处理: + - 任务监控页新增与用户管理页一致的表格分页 state,默认 `pageSize` 调整为 20,并补齐 `current`、`total`、`onChange`。 + - 表格分页选项改为 `[10, 20, 50, 100]`,`showTotal` 改为读取筛选后的任务总数。 + - 筛选项变更和重置筛选时将表格分页复位到第一页。 + - 移除 `.admin-task-monitor-card-view` 的 `margin-top: 16px`,与 `.admin-users-card-view` 对齐。 + - 表格和卡片筛选空态文案统一为“未找到符合筛选条件的任务。”。 + +- 验证: + - 基线:`npm --workspace web exec eslint src/app/admin/task-monitor/page.tsx --max-warnings=0` 通过。 + - 基线:`npm --workspace web exec tsc --noEmit` 失败于既有 `src/app/admin/elevation-records/page.tsx` 类型错误。 + - 修改后:`npm --workspace web exec eslint src/app/admin/task-monitor/page.tsx --max-warnings=0` 通过。 + - 修改后:`npm --workspace web exec eslint src/app/admin/users/page.tsx src/app/admin/task-monitor/page.tsx` 通过,仍仅用户页 1 条既有 unused eslint-disable warning。 + - 修改后:`node --experimental-strip-types web/src/lib/task-monitor-display.test.js` 通过,4 passed,仍有既有 MODULE_TYPELESS_PACKAGE_JSON warning。 + - 修改后:`npm run build:web` 编译通过但类型检查失败,失败点仍为既有 `src/app/admin/elevation-records/page.tsx` 的 `useAuth().api` 等类型错误。 + +- 风险与关注点: + - 改动仅影响任务监控页前端分页、筛选复位、空态文案和卡片间距,不改变接口、权限或任务数据转换逻辑。 + # Work Log - ATP 模型管理页面一致性优化(FL-158) - 背景: diff --git a/web/src/app/admin/task-monitor/page.tsx b/web/src/app/admin/task-monitor/page.tsx index 8a425b3..5ae17a8 100644 --- a/web/src/app/admin/task-monitor/page.tsx +++ b/web/src/app/admin/task-monitor/page.tsx @@ -160,6 +160,7 @@ export default function AdminTaskMonitorPage() { const [queueKeyword, setQueueKeyword] = useState(""); const [taskKeyword, setTaskKeyword] = useState(""); const [statusFilter, setStatusFilter] = useState<"all" | "online" | "offline">("all"); + const [pagination, setPagination] = useState({ current: 1, pageSize: 20 }); const [tableScrollY, setTableScrollY] = useState(TASK_MONITOR_TABLE_MIN_SCROLL_Y); const tableScrollAnchorRef = useRef(null); const viewMode: "table" | "card" = isMobile ? "card" : "table"; @@ -380,6 +381,7 @@ export default function AdminTaskMonitorPage() { setQueueKeyword(""); setTaskKeyword(""); setStatusFilter("all"); + setPagination((prev) => ({ ...prev, current: 1 })); }; const workersOverviewErrorMessage = workersOverviewQuery.error instanceof Error @@ -600,7 +602,10 @@ export default function AdminTaskMonitorPage() { allowClear placeholder="按执行节点名称筛选" value={workerKeyword} - onChange={(event) => setWorkerKeyword(event.target.value)} + onChange={(event) => { + setWorkerKeyword(event.target.value); + setPagination((prev) => ({ ...prev, current: 1 })); + }} /> @@ -609,7 +614,10 @@ export default function AdminTaskMonitorPage() { allowClear placeholder="按队列名称筛选" value={queueKeyword} - onChange={(event) => setQueueKeyword(event.target.value)} + onChange={(event) => { + setQueueKeyword(event.target.value); + setPagination((prev) => ({ ...prev, current: 1 })); + }} /> @@ -618,14 +626,20 @@ export default function AdminTaskMonitorPage() { allowClear placeholder="按任务 ID / 任务名称筛选" value={taskKeyword} - onChange={(event) => setTaskKeyword(event.target.value)} + onChange={(event) => { + setTaskKeyword(event.target.value); + setPagination((prev) => ({ ...prev, current: 1 })); + }} /> setStatusFilter(parseStatusFilter(value))} + onChange={(value) => { + setStatusFilter(parseStatusFilter(value)); + setPagination((prev) => ({ ...prev, current: 1 })); + }} options={[ { label: "全部状态", value: "all" }, { label: "在线", value: "online" }, @@ -728,18 +754,23 @@ export default function AdminTaskMonitorPage() { loading={workersOverviewQuery.isLoading || allTasksQuery.isLoading} tableLayout="fixed" pagination={{ - pageSize: 50, + current: pagination.current, + pageSize: pagination.pageSize, + total: Math.max(filteredTaskRows.length, 1), showSizeChanger: true, - pageSizeOptions: [20, 50, 100, 200], - showTotal: (total) => `共 ${total} 条`, + pageSizeOptions: [10, 20, 50, 100], + showTotal: () => `共 ${filteredTaskRows.length} 条`, hideOnSinglePage: false, style: { marginBottom: 0 }, + onChange: (page, pageSize) => { + setPagination({ current: page, pageSize }); + }, }} locale={{ emptyText: ( ), }} @@ -756,7 +787,7 @@ export default function AdminTaskMonitorPage() {
) : ( diff --git a/web/src/app/globals.css b/web/src/app/globals.css index f95d4dc..9575b2e 100644 --- a/web/src/app/globals.css +++ b/web/src/app/globals.css @@ -677,7 +677,6 @@ body { min-height: 0; flex: 1; flex-direction: column; - margin-top: 16px; } .admin-task-monitor-card-view-content {