/** * Dashboard Page */ import React, { useState, useEffect } from 'react' import { useNavigate } from 'react-router-dom' import { examAPI, mistakeAPI } from '../api/client' import { useAuth } from '../context/AuthContext' import Layout from '../components/Layout' import { FolderOpen, XCircle, TrendingUp, BookOpen, ArrowRight, Settings, Shield } from 'lucide-react' import { getStatusColor, getStatusText, formatRelativeTime, calculateProgress } from '../utils/helpers' export const Dashboard = () => { const { user, isAdmin } = useAuth() const navigate = useNavigate() const [stats, setStats] = useState({ totalExams: 0, totalQuestions: 0, completedQuestions: 0, mistakeCount: 0 }) const [recentExams, setRecentExams] = useState([]) const [loading, setLoading] = useState(true) useEffect(() => { loadDashboardData() }, []) const loadDashboardData = async () => { try { const [examsRes, mistakesRes] = await Promise.all([ examAPI.getList(0, 5), mistakeAPI.getList(0, 1) ]) const exams = examsRes.data.exams // Calculate stats const totalQuestions = exams.reduce((sum, e) => sum + e.total_questions, 0) const completedQuestions = exams.reduce((sum, e) => sum + e.current_index, 0) setStats({ totalExams: exams.length, totalQuestions, completedQuestions, mistakeCount: mistakesRes.data.total }) setRecentExams(exams) } catch (error) { console.error('Failed to load dashboard:', error) } finally { setLoading(false) } } return (
{/* Welcome */}

欢迎回来,{user?.username}!

继续你的学习之旅

{/* Stats Cards */}
navigate('/exams')} >
{stats.totalExams}

题库总数

{stats.totalQuestions}

题目总数

{stats.completedQuestions}

已完成

navigate('/mistakes')} >
{stats.mistakeCount}

错题数量

{/* Recent Exams */}

最近的题库

{recentExams.length === 0 ? (

还没有题库,快去创建一个吧!

) : (
{recentExams.map((exam) => (
navigate(`/exams/${exam.id}`)} className="border border-gray-200 rounded-lg p-4 hover:border-primary-300 hover:bg-primary-50 transition-all cursor-pointer" >

{exam.title}

{getStatusText(exam.status)}
{exam.current_index} / {exam.total_questions} 题 {formatRelativeTime(exam.updated_at)}
{exam.total_questions > 0 && (
)}
))}
)}
{/* Admin Quick Access */} {isAdmin && (

管理员功能

用户管理、系统统计、配置设置

)}
) } export default Dashboard