"use client" import { useState, useEffect } from "react" import { Button } from "@/components/ui/button" import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from "@/components/ui/dialog" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { Textarea } from "@/components/ui/textarea" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" import { Plus, Upload, AlertTriangle, Loader2 } from "lucide-react" import { Switch } from "@/components/ui/switch" import type { HomeDecor } from "./home-decor-detail-dialog" type AddHomeDecorDialogProps = { mode?: "create" | "edit" initialDecor?: HomeDecor open?: boolean onOpenChange?: (open: boolean) => void onSave?: (decor: HomeDecor) => void } export function AddHomeDecorDialog({ mode = "create", initialDecor, open: controlledOpen, onOpenChange: setControlledOpen, onSave, }: AddHomeDecorDialogProps) { const [open, setOpen] = useState(false) const [isSubmitting, setIsSubmitting] = useState(false) // 表单状态 const [name, setName] = useState("") const [decorType, setDecorType] = useState("") const [rarity, setRarity] = useState("") const [description, setDescription] = useState("") const [isLimited, setIsLimited] = useState(false) const [previewId, setPreviewId] = useState( "DEC" + Math.floor(Math.random() * 1000) .toString() .padStart(3, "0"), ) // 当编辑模式且有装饰数据时,初始化表单 useEffect(() => { if (mode === "edit" && initialDecor) { setName(initialDecor.name) setDecorType(initialDecor.type) setRarity(initialDecor.rarity) setDescription(initialDecor.description) setIsLimited(initialDecor.type.includes("限定")) setPreviewId(initialDecor.id) } }, [mode, initialDecor]) // 处理受控和非受控开关状态 useEffect(() => { if (controlledOpen !== undefined) { setOpen(controlledOpen) } }, [controlledOpen]) // 处理对话框关闭 const handleOpenChange = (newOpen: boolean) => { setOpen(newOpen) if (setControlledOpen) { setControlledOpen(newOpen) } // 如果关闭对话框,重置表单(仅在创建模式下) if (!newOpen && mode === "create") { resetForm() } } // 重置表单 const resetForm = () => { if (mode === "create") { setName("") setDecorType("") setRarity("") setDescription("") setIsLimited(false) setPreviewId( "DEC" + Math.floor(Math.random() * 1000) .toString() .padStart(3, "0"), ) } } const handleSubmit = async () => { // 表单验证 if (!name || !decorType || !rarity || !description) { alert("请填写所有必填字段!") return } setIsSubmitting(true) try { // 构建装饰对象 const decor: HomeDecor = { id: initialDecor?.id || previewId, name, type: isLimited ? `限定${decorType}` : decorType, rarity, description, releaseDate: initialDecor?.releaseDate || "", status: initialDecor?.status || "未发布", activatedCount: initialDecor?.activatedCount || 0, // 不使用外部图片URL,避免加载错误 image: undefined, } // 模拟API请求 await new Promise((resolve) => setTimeout(resolve, 1500)) // 调用保存回调 if (onSave) { onSave(decor) } // 关闭对话框 handleOpenChange(false) } catch (error) { console.error(mode === "create" ? "创建家居装饰失败:" : "更新家居装饰失败:", error) alert(mode === "create" ? "创建家居装饰失败,请重试!" : "更新家居装饰失败,请重试!") } finally { setIsSubmitting(false) } } return ( {mode === "create" && ( )} {mode === "create" ? "添加新家居装饰" : "编辑家居装饰"} {mode === "create" ? "填写家居装饰信息以创建新的装饰卡牌。创建后将生成唯一的卡牌ID。" : "修改家居装饰信息。"}
setName(e.target.value)} required />