import { AlertTriangle, Loader2, Trash2, X } from 'lucide-react' import { FormEvent, useEffect, useState } from 'react' import { api } from '../api' import type { Course } from '../types' interface DeleteCourseModalProps { isOpen: boolean onClose: () => void course: Course onSuccess: () => void } export function DeleteCourseModal({ isOpen, onClose, course, onSuccess }: DeleteCourseModalProps) { const [confirmName, setConfirmName] = useState('') const [busy, setBusy] = useState(false) const [error, setError] = useState('') useEffect(() => { if (isOpen) { setConfirmName('') setError('') setBusy(false) } }, [isOpen]) // 监听 ESC 键关闭 useEffect(() => { function handleKeyDown(e: KeyboardEvent) { if (e.key === 'Escape' && isOpen && !busy) { onClose() } } window.addEventListener('keydown', handleKeyDown) return () => window.removeEventListener('keydown', handleKeyDown) }, [isOpen, busy, onClose]) if (!isOpen) return null const isMatch = confirmName.trim() === course.name.trim() async function handleSubmit(e: FormEvent) { e.preventDefault() if (!isMatch) { setError('输入的课程名称不一致,请核对后重试') return } setBusy(true) setError('') try { await api.deleteCourse(course.id) onSuccess() } catch (err) { setError((err as Error).message || '删除课程失败,请稍后重试') setBusy(false) } } return (