import { useEffect, useState } from "react"; import { api, ApiError } from "../api"; import type { AuditLogRow } from "../types"; import { ScrollText } from "lucide-react"; const ACTION_LABEL: Record = { create: "新建", update: "修改", delete: "删除", add_image: "添加图片", delete_image: "删除图片", bulk_status: "批量改状态", bulk_category: "批量改分类", }; const ENTITY_LABEL: Record = { product: "商品", category: "分类", brand: "品牌", }; export default function AuditLogPage() { const [rows, setRows] = useState([]); const [total, setTotal] = useState(0); const [page, setPage] = useState(1); const size = 30; const [error, setError] = useState(""); useEffect(() => { setError(""); api .auditLog(page, size) .then((r) => { setRows(r.items); setTotal(r.total); }) .catch((e) => setError(e instanceof ApiError ? e.message : "加载失败")); }, [page]); const pages = Math.max(1, Math.ceil(total / size)); return (

操作日志 共 {total} 条

{error && (
{error}
)}
{rows.length === 0 ? ( ) : ( rows.map((e) => ( )) )}
时间 操作人 动作 对象 字段
暂无记录
{new Date(e.created_at).toLocaleString()} {e.actor} {ACTION_LABEL[e.action] || e.action} {ENTITY_LABEL[e.entity] || e.entity} {e.fields.length ? e.fields.join(", ") : "—"}
{page} / {pages}
); }