import { useCallback, useEffect, useState } from 'react' import { ChevronLeft, ChevronRight, ChevronsLeft, ChevronsRight, RefreshCw } from 'lucide-react' import { AuditLog, getAuditLogs } from '../services/api' import { actionLabel } from '../utils/labels' const PAGE_SIZE = 10 export default function AuditLogs() { const [logs, setLogs] = useState([]) const [loading, setLoading] = useState(true) const [page, setPage] = useState(1) const fetchData = useCallback(async () => { try { const res = await getAuditLogs() setLogs(res.data.data || []) } catch (err) { console.error(err) } finally { setLoading(false) } }, []) useEffect(() => { fetchData() const timer = window.setInterval(fetchData, 10000) return () => window.clearInterval(timer) }, [fetchData]) if (loading) { return (
) } const totalPages = Math.max(1, Math.ceil(logs.length / PAGE_SIZE)) const pageLogs = logs.slice((page - 1) * PAGE_SIZE, page * PAGE_SIZE) return (

操作日志

共 {logs.length} 条操作记录

{logs.length === 0 ? (
暂无操作日志
) : ( <>
{pageLogs.map((log, index) => ( ))}
时间 用户 操作 目标 详情
{log.time} {log.user === 'admin' ? ( 管理员 ) : log.user?.startsWith('user:') ? ( 用户 ) : ( {log.user || '-'} )} {actionLabel(log.action)} {log.target || '-'} {log.detail || '-'}
{logs.length > PAGE_SIZE && (
第 {page}/{totalPages} 页
{getPageNumbers(page, totalPages).map(n => ( ))}
)} )}
) } function getPageNumbers(current: number, total: number): number[] { if (total <= 5) return Array.from({ length: total }, (_, i) => i + 1) let start = Math.max(1, current - 2) if (start + 4 > total) start = total - 4 return Array.from({ length: 5 }, (_, i) => start + i) }