"use client" import type React from "react" import { useState } 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 { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table" import { Badge } from "@/components/ui/badge" import { Alert, AlertDescription } from "@/components/ui/alert" import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" import { ArrowLeft, Upload, Download, Brain, Lightbulb, FileSpreadsheet, CheckCircle, AlertCircle, Info, } from "lucide-react" import Link from "next/link" import { logicQuestions } from "@/lib/questions/logic-questions" import { creativeQuestions } from "@/lib/questions/creative-questions" import { parseExcelFile, type ImportResult } from "@/lib/utils/excel-parser" export default function QuestionsManagementPage() { return ( ) } function QuestionsManagementContent() { const [activeTab, setActiveTab] = useState("logic") const [isImporting, setIsImporting] = useState(false) const [importResult, setImportResult] = useState(null) const [selectedFile, setSelectedFile] = useState(null) const [importType, setImportType] = useState<"logic" | "creative">("logic") const handleFileSelect = (event: React.ChangeEvent) => { const file = event.target.files?.[0] if (file) { if ( file.type === "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" || file.type === "application/vnd.ms-excel" || file.name.endsWith(".xlsx") || file.name.endsWith(".xls") ) { setSelectedFile(file) setImportResult(null) } else { setImportResult({ success: false, message: "請選擇 Excel 檔案 (.xlsx 或 .xls)", }) } } } const handleImport = async () => { if (!selectedFile) { setImportResult({ success: false, message: "請先選擇要匯入的 Excel 檔案", }) return } setIsImporting(true) try { const result = await parseExcelFile(selectedFile, importType) setImportResult(result) if (result.success) { setSelectedFile(null) // 重置檔案輸入 const fileInput = document.getElementById("file-input") as HTMLInputElement if (fileInput) fileInput.value = "" } } catch (error) { setImportResult({ success: false, message: "匯入失敗,請檢查檔案格式是否正確", errors: [error instanceof Error ? error.message : "未知錯誤"], }) } finally { setIsImporting(false) } } const downloadTemplate = (type: "logic" | "creative") => { let csvContent = "" if (type === "logic") { csvContent = [ ["題目ID", "題目內容", "選項A", "選項B", "選項C", "選項D", "正確答案", "解釋"], [ "1", "範例題目:如果所有A都是B,所有B都是C,那麼?", "所有A都是C", "所有C都是A", "有些A不是C", "無法確定", "A", "根據邏輯推理...", ], ["2", "在序列 2, 4, 8, 16, ? 中,下一個數字是?", "24", "32", "30", "28", "B", "每個數字都是前一個數字的2倍"], ] .map((row) => row.join(",")) .join("\n") } else { csvContent = [ ["題目ID", "陳述內容", "類別", "是否反向計分"], ["1", "我經常能想出創新的解決方案", "innovation", "否"], ["2", "我更喜歡按照既定規則工作", "flexibility", "是"], ["3", "我喜歡嘗試新的做事方法", "innovation", "否"], ] .map((row) => row.join(",")) .join("\n") } const blob = new Blob(["\uFEFF" + csvContent], { type: "text/csv;charset=utf-8;" }) const link = document.createElement("a") const url = URL.createObjectURL(blob) link.setAttribute("href", url) link.setAttribute("download", `${type === "logic" ? "邏輯思維" : "創意能力"}題目範本.csv`) link.style.visibility = "hidden" document.body.appendChild(link) link.click() document.body.removeChild(link) } return (
{/* Header */}

題目管理

管理測試題目和匯入新題目

{/* Import Section */} Excel 檔案匯入 上傳 Excel 檔案來批量匯入測試題目。支援邏輯思維測試和創意能力測試題目。 {/* File Upload */}
{selectedFile && (
已選擇:{selectedFile.name}
)}
{/* Import Result */} {importResult && ( {importResult.success ? : } {importResult.message} {importResult.errors && (
    {importResult.errors.map((error, index) => (
  • {error}
  • ))}
)}
)} {/* Template Download */}
下載範本檔案
{/* Current Questions */} 現有題目管理 查看和管理系統中的測試題目 邏輯思維 ({logicQuestions.length}) 創意能力 ({creativeQuestions.length})

邏輯思維測試題目

{logicQuestions.length} 道題目
題目ID 題目內容 選項數量 正確答案 {logicQuestions.slice(0, 10).map((question) => ( {question.id} {question.question} {question.options.length} {question.correctAnswer} ))}

創意能力測試題目

{creativeQuestions.length} 道題目
題目ID 陳述內容 類別 反向計分 {creativeQuestions.slice(0, 10).map((question) => ( {question.id} {question.statement} {question.category} {question.isReverse ? ( ) : ( )} ))}
) }