'use client' import { useState, useRef, useEffect } from 'react' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { Textarea } from '@/components/ui/textarea' import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '@/components/ui/dialog' import { Spinner } from '@/components/ui/spinner' import { Level, LevelFormData } from '@/types' import { ImageUploader } from './image-uploader' import { Upload } from 'lucide-react' interface LevelDialogProps { open: boolean onOpenChange: (open: boolean) => void level?: Level | null onSubmit: (data: LevelFormData) => Promise } const defaultFormData: LevelFormData = { imageUrl: '', answer: '', hint1: '', hint2: '', hint3: '', } export function LevelDialog({ open, onOpenChange, level, onSubmit }: LevelDialogProps) { const [formData, setFormData] = useState(defaultFormData) const [isLoading, setIsLoading] = useState(false) const [error, setError] = useState('') const fileInputRef = useRef(null) // Reset form when dialog opens/closes or level changes useEffect(() => { if (open) { if (level) { setFormData({ imageUrl: level.imageUrl, answer: level.answer, hint1: level.hint1 || '', hint2: level.hint2 || '', hint3: level.hint3 || '', }) } else { setFormData(defaultFormData) } setError('') } }, [open, level]) const handleImageUpload = (url: string) => { setFormData((prev) => ({ ...prev, imageUrl: url })) } const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() setError('') if (!formData.imageUrl) { setError('请上传关卡图片') return } if (!formData.answer.trim()) { setError('请输入答案') return } setIsLoading(true) try { await onSubmit(formData) onOpenChange(false) } catch (err) { setError(err instanceof Error ? err.message : '操作失败,请稍后重试') } finally { setIsLoading(false) } } return ( {level ? '编辑关卡' : '添加关卡'} {level ? '修改关卡信息' : '创建新的关卡'}
{error && (
{error}
)}
setFormData((prev) => ({ ...prev, answer: e.target.value })) } placeholder="请输入答案" required />
setFormData((prev) => ({ ...prev, hint1: e.target.value })) } placeholder="请输入提示1" />
setFormData((prev) => ({ ...prev, hint2: e.target.value })) } placeholder="请输入提示2" />
setFormData((prev) => ({ ...prev, hint3: e.target.value })) } placeholder="请输入提示3" />
) }