"use client"; import { TrendingUp } from "lucide-react"; import { Bar, BarChart, XAxis, YAxis, LabelList, CartesianGrid } from "recharts"; import { Button } from "@/components/ui/button"; import { useState, useEffect } from "react"; import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, } from "@/components/ui/card"; import { ChartConfig, ChartContainer, ChartTooltip, ChartTooltipContent, } from "@/components/ui/chart"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { getDashboardStats, ProblemCompletionData, DifficultProblemData } from "@/actions/teacher-dashboard"; const ITEMS_PER_PAGE = 5; // 每页显示的题目数量 const chartConfig = { completed: { label: "已完成", color: "#4CAF50", // 使用更鲜明的颜色 }, uncompleted: { label: "未完成", color: "#FFA726", // 使用更鲜明的颜色 }, } satisfies ChartConfig; export default function TeacherDashboard() { const [currentPage, setCurrentPage] = useState(1); const [chartData, setChartData] = useState([]); const [difficultProblems, setDifficultProblems] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { const fetchData = async () => { try { setLoading(true); const data = await getDashboardStats(); setChartData(data.problemData); setDifficultProblems(data.difficultProblems); } catch (err) { setError(err instanceof Error ? err.message : '获取数据失败'); console.error('Failed to fetch dashboard data:', err); } finally { setLoading(false); } }; fetchData(); }, []); const totalPages = Math.ceil(chartData.length / ITEMS_PER_PAGE); // 获取当前页的数据 const currentPageData = chartData.slice( (currentPage - 1) * ITEMS_PER_PAGE, currentPage * ITEMS_PER_PAGE ); if (loading) { return (

教师仪表板

加载中...
); } if (error) { return (

教师仪表板

错误: {error}
); } return (

教师仪表板

{/* 题目完成情况模块 */} 题目完成情况 各题目完成及未完成人数图表 {chartData.length === 0 ? (
暂无数据
) : ( <> `${value}%`} /> } /> `${value}人`} /> `${value}人`} /> {/* 分页控制 */} {totalPages > 1 && (
第 {currentPage} 页,共 {totalPages} 页
)} )}
完成度趋势
显示各题目完成情况(已完成/未完成)
{/* 学生易错题模块 */} 学生易错题 各班级易错题数量及列表
出错率较高题目数量:{difficultProblems.length}
{difficultProblems.length === 0 ? (
暂无易错题数据
) : ( 题目编号 题目名称 错误次数 {difficultProblems.map((problem) => ( {problem.problemDisplayId || problem.id.substring(0, 8)} {problem.problemTitle} {problem.problemCount} ))}
)}
); }