import React, { useState, useEffect } from 'react'; import { Plus, BookOpen, ChevronRight } from 'lucide-react'; import { apiClient } from '../../services/apiClient'; import { templateService } from '../../services/templateService'; import { AssessmentTemplate } from '../../types'; interface QuestionBank { id: string; name: string; description?: string; status: string; templateId?: string; createdAt: string; } export default function QuestionBankView() { const [banks, setBanks] = useState([]); const [loading, setLoading] = useState(false); const [error, setError] = useState(''); const [showDrawer, setShowDrawer] = useState(false); const [formData, setFormData] = useState({ name: '', description: '', templateId: '' }); const [saving, setSaving] = useState(false); const [templates, setTemplates] = useState([]); const [loadingTemplates, setLoadingTemplates] = useState(false); useEffect(() => { fetchData(); }, []); const fetchData = async () => { try { setLoading(true); const res = await apiClient.request('/question-banks', {}); if (!res.ok) throw new Error(res.status.toString()); const data = await res.json(); setBanks(Array.isArray(data) ? data : (data.data || [])); } catch (err: any) { setError(err.message || '加载失败'); } finally { setLoading(false); } }; const openDrawer = () => { setFormData({ name: '', description: '', templateId: '' }); setLoadingTemplates(true); templateService.getAll() .then(data => setTemplates(data)) .catch(err => console.error('加载模板失败:', err)) .finally(() => setLoadingTemplates(false)); setShowDrawer(true); }; const handleCreate = async (e: React.FormEvent) => { e.preventDefault(); if (!formData.name.trim()) return; setSaving(true); try { const payload: any = { name: formData.name, description: formData.description, }; if (formData.templateId) { payload.templateId = formData.templateId; } const res = await apiClient.request('/question-banks', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payload), }); if (!res.ok) throw new Error(res.status.toString()); setShowDrawer(false); fetchData(); } catch (err: any) { console.error('创建失败:', err); alert('创建失败: ' + (err.message || '未知错误')); } finally { setSaving(false); } }; return (

题库管理

{loading ? (
加载中...
) : error ? (
错误: {error}
) : banks.length === 0 ? (

暂无题库,点击上方按钮创建

) : (
{banks.map((bank) => (

{bank.name}

{bank.description}

状态: {bank.status}

))}
)} {/* Drawer */} <> {showDrawer && (
setShowDrawer(false)} /> )}

创建题库

setFormData({...formData, name: e.target.value})} className="w-full px-4 py-3 border rounded-xl focus:outline-none focus:ring-2 focus:ring-blue-500 bg-slate-50" placeholder="输入题库名称" required autoFocus />
setFormData({...formData, description: e.target.value})} className="w-full px-4 py-3 border rounded-xl focus:outline-none focus:ring-2 focus:ring-blue-500 bg-slate-50" placeholder="输入描述" />
{loadingTemplates && 加载中...}
); }