"use client" import { useState, useEffect } from "react" import { ProtectedRoute } from "@/components/protected-route" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" import { Button } from "@/components/ui/button" import { Progress } from "@/components/ui/progress" import { Badge } from "@/components/ui/badge" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" import { Brain, Lightbulb, BarChart3, ArrowLeft, TrendingUp, Users, Award, Target } from "lucide-react" import Link from "next/link" import { useAuth, type User } from "@/lib/hooks/use-auth" interface DepartmentStats { department: string totalUsers: number participatedUsers: number participationRate: number averageLogicScore: number averageCreativeScore: number averageCombinedScore: number overallAverage: number topPerformer: string | null testCounts: { logic: number creative: number combined: number } } interface TestResult { userId: string userName: string userDepartment: string type: "logic" | "creative" | "combined" score: number completedAt: string } export default function AnalyticsPage() { return ( ) } function AnalyticsContent() { const { user } = useAuth() const [departmentStats, setDepartmentStats] = useState([]) const [selectedDepartment, setSelectedDepartment] = useState("all") const [overallStats, setOverallStats] = useState({ totalUsers: 0, totalParticipants: 0, overallParticipationRate: 0, averageScore: 0, totalTests: 0, }) useEffect(() => { loadAnalyticsData() }, []) const loadAnalyticsData = async () => { try { const response = await fetch('/api/admin/analytics/departments') const data = await response.json() if (data.success) { setDepartmentStats(data.data.departmentStats) setOverallStats(data.data.overallStats) } else { console.error('獲取部門分析數據失敗:', data.message) } } catch (error) { console.error('獲取部門分析數據錯誤:', error) } } const getScoreColor = (score: number) => { if (score >= 90) return "text-green-600" if (score >= 80) return "text-blue-600" if (score >= 70) return "text-yellow-600" if (score >= 60) return "text-orange-600" return "text-red-600" } const getParticipationColor = (rate: number) => { if (rate >= 80) return "text-green-600" if (rate >= 60) return "text-blue-600" if (rate >= 40) return "text-yellow-600" return "text-red-600" } const filteredStats = selectedDepartment === "all" ? departmentStats : departmentStats.filter((stat) => stat.department === selectedDepartment) return ( {/* Header */} 返回儀表板 部門分析 查看各部門的測試結果統計和分析 {/* Overall Statistics */} {overallStats.totalUsers} 總用戶數 {overallStats.totalParticipants} 參與用戶 {overallStats.overallParticipationRate}% 參與率 {overallStats.averageScore} 平均分數 {overallStats.totalTests} 總測試次數 {/* Department Filter */} 部門篩選 所有部門 {departmentStats.map((stat) => ( {stat.department} ))} {/* Department Statistics */} {filteredStats.map((stat) => ( {stat.department} {stat.participatedUsers}/{stat.totalUsers} 人參與 參與率: {stat.participationRate}% {/* Participation Rate */} 參與率 {stat.participationRate}% {/* Test Scores */} {stat.averageLogicScore || "-"} 邏輯思維 ({stat.testCounts.logic} 次) {stat.averageCreativeScore || "-"} 創意能力 ({stat.testCounts.creative} 次) {stat.averageCombinedScore || "-"} 綜合能力 ({stat.testCounts.combined} 次) {/* Overall Average */} 部門平均分數 {stat.overallAverage || "-"} {/* Top Performer */} {stat.topPerformer && ( 表現最佳 {stat.topPerformer} )} ))} {filteredStats.length === 0 && ( {selectedDepartment === "all" ? "暫無部門數據" : "該部門暫無數據"} )} ) }
查看各部門的測試結果統計和分析