diff --git a/memory/2026-05-02.md b/memory/2026-05-02.md index 52d4ebb..86df2d1 100644 --- a/memory/2026-05-02.md +++ b/memory/2026-05-02.md @@ -190,3 +190,28 @@ - 风险与影响: - 本地若仍保留旧文件名 `.env.prod`,将不再被 dev compose 自动读取。 + +## Work Log - 系统日志页面样式优化(2026-05-02) + +- 背景: + - Issue [FL-170] 要求“参考菜单管理页面,调整系统日志页面样式和布局”。 + +- 本次改动(最小闭环): + - 文件:`web/src/app/admin/syslog/page.tsx` + - 对齐 `menus` 页面风格,保持日志查询与筛选逻辑不变,仅调整 UI 布局: + - 页面容器从 `Space` 改为 `div.space-y-6`,与后台管理页一致。 + - 加载态改为居中 `Spin`(`min-h-[240px]`)。 + - 未登录/无权限态改为与菜单页一致的 `main + Link` 布局与按钮样式。 + - 筛选区改为 `Form inline`(动作、用户ID、查询/重置筛选)。 + - 错误提示统一为 `Alert message + description`。 + - 列表分页补充 `showTotal`,信息文案统一。 + +- 验证: + - 差异检查:`git diff -- web/src/app/admin/syslog/page.tsx`。 + - 尝试运行类型检查(未安装依赖,不做编译): + - `npm --workspace web exec tsc --noEmit --pretty false` + - 当前环境报错 `EROFS`(npm 缓存目录只读),未执行到项目级类型检查。 + +- 风险与影响: + - 影响范围仅 `syslog` 页面前端展示层。 + - 接口请求、权限判断、筛选参数、分页逻辑保持不变。 diff --git a/web/src/app/admin/syslog/page.tsx b/web/src/app/admin/syslog/page.tsx index 020855e..1a5034f 100644 --- a/web/src/app/admin/syslog/page.tsx +++ b/web/src/app/admin/syslog/page.tsx @@ -1,17 +1,19 @@ "use client"; +import Link from "next/link"; import { useQuery, useQueryClient } from "@tanstack/react-query"; -import { Alert, Button, Empty, Input, Space, Spin, Table, Tag, Typography } from "antd"; +import { Alert, Button, Card, Empty, Form, Input, Space, Spin, Table, Tag, Typography, type CardProps } from "antd"; import type { ColumnsType } from "antd/es/table"; +import type { ComponentType } from "react"; import { useCallback, useMemo, useState } from "react"; import { useAuth } from "@/components/auth-provider"; -import { Card } from "@/components/ui-antd"; import { useTopicSubscription } from "@/hooks/use-topic-subscription"; import { readApiError } from "@/lib/api"; import type { AuditLogItem, AuditLogListResponse } from "@/types/auth"; const PAGE_SIZE = 50; +const AntCard = Card as unknown as ComponentType; type Filters = { action: string; @@ -127,95 +129,104 @@ export default function AdminSyslogPage() { if (initializing || logsQuery.isLoading) { return ( - - - - 加载系统日志中... - - +
+ +
); } if (!user) { return ( - - - - - - +
+

请先登录后再访问系统日志页面。

+ + 返回首页 + +
); } if (!canRead) { return ( - - - - - - +
+

你没有访问该页面的权限(需要 `menu.read`)。

+ + 返回首页 + +
); } return ( - - {error ? : null} +
+ {error ? : null} - 常见动作:auth.login / auth.logout / auth.refresh}> + 常见动作:auth.login / auth.logout / auth.refresh}> 查看鉴权与会话类审计日志,支持按动作和用户筛选。 - - - setDraftFilters((prev) => ({ - ...prev, - action: event.target.value, - })) - } - /> - - setDraftFilters((prev) => ({ - ...prev, - user_id: event.target.value, - })) - } - /> - - - +
+ + + setDraftFilters((prev) => ({ + ...prev, + action: event.target.value, + })) + } + /> + + + + setDraftFilters((prev) => ({ + ...prev, + user_id: event.target.value, + })) + } + /> + + + + + + + +
-
+
共 {total} 条,当前第 {currentPage} 页 @@ -234,13 +245,14 @@ export default function AdminSyslogPage() { onChange: (page) => setOffset((page - 1) * PAGE_SIZE), showSizeChanger: false, showQuickJumper: false, + showTotal: (value) => `共 ${value} 条`, }} locale={{ emptyText: , }} scroll={{ x: 980 }} /> - - + +
); }