"use client" import { useState } from "react" import { Sidebar } from "@/components/sidebar" import { Button } from "@/components/ui/button" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { Textarea } from "@/components/ui/textarea" import { Slider } from "@/components/ui/slider" import { Badge } from "@/components/ui/badge" import { Plus, Trash2, Save, RotateCcw, FileText } from "lucide-react" import { useToast } from "@/hooks/use-toast" interface CriteriaItem { id: string name: string description: string weight: number maxScore: number } const defaultCriteria: CriteriaItem[] = [ { id: "1", name: "內容品質", description: "內容的準確性、完整性和專業度", weight: 25, maxScore: 10, }, { id: "2", name: "視覺設計", description: "版面設計、色彩搭配和視覺效果", weight: 20, maxScore: 10, }, { id: "3", name: "邏輯結構", description: "內容組織的邏輯性和條理性", weight: 20, maxScore: 10, }, { id: "4", name: "創新性", description: "創意思維和獨特觀點的展現", weight: 15, maxScore: 10, }, { id: "5", name: "實用性", description: "內容的實際應用價值和可操作性", weight: 20, maxScore: 10, }, ] export default function CriteriaPage() { const [criteria, setCriteria] = useState(defaultCriteria) const [templateName, setTemplateName] = useState("預設評分標準") const { toast } = useToast() const addCriteria = () => { const newCriteria: CriteriaItem = { id: Date.now().toString(), name: "", description: "", weight: 10, maxScore: 10, } setCriteria([...criteria, newCriteria]) } const removeCriteria = (id: string) => { setCriteria(criteria.filter((item) => item.id !== id)) } const updateCriteria = (id: string, field: keyof CriteriaItem, value: string | number) => { setCriteria(criteria.map((item) => (item.id === id ? { ...item, [field]: value } : item))) } const updateWeight = (id: string, weight: number[]) => { updateCriteria(id, "weight", weight[0]) } const totalWeight = criteria.reduce((sum, item) => sum + item.weight, 0) const saveCriteria = () => { if (totalWeight !== 100) { toast({ title: "權重設定錯誤", description: "所有評分項目的權重總和必須等於 100%", variant: "destructive", }) return } if (criteria.some((item) => !item.name.trim())) { toast({ title: "設定不完整", description: "請填寫所有評分項目的名稱", variant: "destructive", }) return } // 這裡會連接到後端 API 儲存評分標準 toast({ title: "儲存成功", description: "評分標準已成功儲存", }) } const resetToDefault = () => { setCriteria(defaultCriteria) setTemplateName("預設評分標準") toast({ title: "已重置", description: "評分標準已重置為預設值", }) } return (
{/* Header */}

評分標準設定

自定義評分項目和權重,建立符合您需求的評審標準

{/* Template Name */} 標準模板名稱 setTemplateName(e.target.value)} placeholder="輸入評分標準名稱" className="max-w-md" /> {/* Weight Summary */}
權重總計 {totalWeight}%
{totalWeight !== 100 &&

權重總和必須等於 100%

} {/* Criteria List */}
{criteria.map((item, index) => (
評分項目 {index + 1}
updateCriteria(item.id, "name", e.target.value)} placeholder="例如:內容品質" />
updateCriteria(item.id, "maxScore", Number.parseInt(e.target.value) || 10)} min="1" max="100" />