feat(admin): 新增「操作审计」页面 + 收敛前端角色判断
- pages/admin/AdminAuditLogPage.tsx:审计日志查询页。支持操作人/模块/动作/ 结果状态/日期区间筛选,表格按时间倒序,行内「详情」抽屉展示完整 URL、 UA、request_id、错误信息与变更详情。 中文标签(模块/动作)由服务端下发,前端不维护枚举映射 —— 与 constants/task.ts 里状态映射的既有做法一致,避免两端各写一份开始漂移。 - services/auditApi.ts:审计接口客户端与类型定义。 - 路由 /admin/audit + 侧边栏「操作审计」入口。 - AdminProductsPage 里手写的角色判断改为复用 isAdminRole():这是同一份 「管理员角色」规则的第 4 处副本,本次一并对齐(另一处 TaskFlowView 已在用)。 constants/task.ts 的注释同步指向后端新位置 core/roles.py。 验证:tsc --noEmit 通过;vite build 通过(产出独立 chunk AdminAuditLogPage-*.js);对接真实后端校验响应字段与 TS 接口定义逐字段一致。
This commit is contained in:
@ -13,7 +13,7 @@ import {
|
||||
} from "../../services/printApi";
|
||||
import { useToast } from "../../components/ui/Toast";
|
||||
import { useAuth } from "../../contexts/AuthContext";
|
||||
import { getStatusConfig, lifecycleBadge } from "../../constants/task";
|
||||
import { getStatusConfig, lifecycleBadge, isAdminRole } from "../../constants/task";
|
||||
import { extractErrorMessage } from "../../utils/errorMessage";
|
||||
|
||||
const QR_BASE = "/api/v1/products/qrcode";
|
||||
@ -31,7 +31,7 @@ interface ProductGroup { groupKey: string; products: ProductResponse[]; allInWar
|
||||
export default function AdminProductsPage() {
|
||||
const { toast } = useToast();
|
||||
const { user: authUser } = useAuth();
|
||||
const isAdmin = authUser?.role === "SUPER_ADMIN" || authUser?.role === "SUPERVISOR";
|
||||
const isAdmin = isAdminRole(authUser?.role);
|
||||
const [products, setProducts] = useState<ProductResponse[]>([]);
|
||||
const [loading, setLoading] = useState(true);
|
||||
const [error, setError] = useState<string | null>(null);
|
||||
|
||||
Reference in New Issue
Block a user