import { useEffect, useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { FileText, Flag, MessageSquare } from 'lucide-react'; import { Spinner } from '@/components/ui/spinner'; import { Badge } from '@/components/ui/badge'; import { api } from '../../api/client'; import { useAdminGuard } from '../../layouts/AdminLayout'; import type { AdminDashboard } from '../../api/types'; import { cn } from '@/lib/utils'; export default function AdminDashboardPage() { const nav = useNavigate(); const { ready } = useAdminGuard(); const [data, setData] = useState(null); const [loading, setLoading] = useState(true); useEffect(() => { if (!ready) return; api.adminDashboard() .then(setData) .finally(() => setLoading(false)); }, [ready]); if (!ready || loading) { return
; } if (!data) return null; const pendingPosts = data.pending_posts ?? 0; const pendingComments = data.pending_comments ?? 0; const pendingReports = data.pending_reports ?? 0; const pendingTotal = pendingPosts + pendingComments + pendingReports; const stats = [ { label: '注册用户', value: data.users }, { label: '帖子总数', value: data.posts }, { label: '板块数量', value: data.boards }, { label: '评论总数', value: data.comments }, ]; const queues = [ { key: 'posts', label: '待审帖子', count: pendingPosts, hint: '新帖与修改待审核', to: '/admin/posts', icon: FileText, }, { key: 'comments', label: '待审评论', count: pendingComments, hint: '评论与回复待审核', to: '/admin/comments', icon: MessageSquare, }, { key: 'reports', label: '待处理举报', count: pendingReports, hint: '用户举报需人工处理', to: '/admin/reports', icon: Flag, }, ]; return (

仪表盘

优先处理待办,再查看运行概览

待处理 {pendingTotal > 0 ? ( {pendingTotal} 项 ) : ( 暂无积压 )}
{queues.map(q => { const Icon = q.icon; const hasWork = q.count > 0; return ( ); })}
运行概览
{stats.map(s => (
{s.value}
{s.label}
))}
最新帖子
{data.recent_posts.map(p => ( ))}
ID 标题 作者 标记 时间
{p.id} {p.user?.id ? ( ) : '—'} {p.featured ? 精华 : null} {p.pinned ? 置顶 : null} {!p.featured && !p.pinned ? '—' : null} {new Date(p.created_at).toLocaleString('zh-CN')}
{data.recent_posts.length === 0 &&
暂无帖子
}
); }