"use client" import { useState, useEffect } from "react" import { Sidebar } from "@/components/sidebar" import { Button } from "@/components/ui/button" import { Card, CardContent } from "@/components/ui/card" import { Badge } from "@/components/ui/badge" import { Input } from "@/components/ui/input" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" import { FileText, Calendar, Search, Eye, Download, Trash2, Loader2 } from "lucide-react" import Link from "next/link" // 歷史記錄數據類型 interface HistoryItem { id: string; title: string; type: string; score: number; grade: string; date: string; status: 'completed' | 'processing'; evaluation_id?: number; description?: string; created_at: string; updated_at: string; } // 統計數據類型 interface StatsData { totalProjects: number; completedProjects: number; processingProjects: number; averageScore: number; } export default function HistoryPage() { const [searchTerm, setSearchTerm] = useState("") const [filterType, setFilterType] = useState("all") const [filterStatus, setFilterStatus] = useState("all") const [historyData, setHistoryData] = useState([]) const [statsData, setStatsData] = useState({ totalProjects: 0, completedProjects: 0, processingProjects: 0, averageScore: 0 }) const [loading, setLoading] = useState(true) const [error, setError] = useState(null) // 載入歷史記錄數據 useEffect(() => { const loadHistoryData = async () => { try { setLoading(true); setError(null); // 並行獲取歷史記錄和統計數據 const [historyResponse, statsResponse] = await Promise.all([ fetch('/api/history'), fetch('/api/history/stats') ]); if (!historyResponse.ok || !statsResponse.ok) { throw new Error('獲取數據失敗'); } const historyResult = await historyResponse.json(); const statsResult = await statsResponse.json(); if (historyResult.success && statsResult.success) { setHistoryData(historyResult.data); setStatsData(statsResult.data); } else { throw new Error(historyResult.error || statsResult.error || '數據載入失敗'); } } catch (err) { console.error('載入歷史記錄失敗:', err); setError(err instanceof Error ? err.message : '載入數據時發生錯誤'); } finally { setLoading(false); } }; loadHistoryData(); }, []); const filteredHistory = historyData.filter((item) => { const matchesSearch = item.title.toLowerCase().includes(searchTerm.toLowerCase()); const matchesType = filterType === "all" || item.type === filterType; const matchesStatus = filterStatus === "all" || item.status === filterStatus; return matchesSearch && matchesType && matchesStatus; }); const getGradeColor = (grade: string) => { if (grade.startsWith("A")) return "bg-green-100 text-green-800"; if (grade.startsWith("B")) return "bg-blue-100 text-blue-800"; if (grade.startsWith("C")) return "bg-yellow-100 text-yellow-800"; return "bg-gray-100 text-gray-800"; }; const getTypeIcon = (type: string) => { switch (type) { case "PPT": return ; case "Video": return ; case "Website": return ; default: return ; } }; return (
{/* Header */}

歷史記錄

查看您的所有評審記錄和結果

{/* Filters */}
setSearchTerm(e.target.value)} className="pl-10" />
{/* Statistics */}
{statsData.totalProjects}
總評審數
{statsData.completedProjects}
已完成
{statsData.averageScore}
平均分數
{statsData.processingProjects}
處理中
{/* Loading State */} {loading && (

載入歷史記錄中...

請稍候片刻

)} {/* Error State */} {error && (

載入失敗

{error}

)} {/* History List */} {!loading && !error && (
{filteredHistory.map((item) => (
{getTypeIcon(item.type)}

{item.title}

{item.date}
{item.type} {item.status === "completed" ? "已完成" : "處理中"}
{item.status === "completed" && (
{item.score}
{item.grade}
)}
{item.status === "completed" ? ( <> ) : ( )}
))} {filteredHistory.length === 0 && (

沒有找到相關記錄

嘗試調整搜尋條件或篩選器

)}
)}
) }