"use client" import type React from "react" 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, Loader2, Award } from "lucide-react" import { Switch } from "@/components/ui/switch" // 定义好感度等级类型 export type AffinityLevel = { id: string level: number name: string minAffinity: number maxAffinity: number unlockContent: string rewardType: string rewardItems?: string rewardCurrency?: number isEnabled: boolean } type AffinityLevelDialogProps = { mode?: "create" | "edit" level?: AffinityLevel onSave?: (level: AffinityLevel) => void trigger?: React.ReactNode } export function AffinityLevelDialog({ mode = "create", level, onSave, trigger }: AffinityLevelDialogProps) { const [open, setOpen] = useState(false) const [isSubmitting, setIsSubmitting] = useState(false) // 表单状态 const [levelNumber, setLevelNumber] = useState("6") const [levelName, setLevelName] = useState("") const [minAffinity, setMinAffinity] = useState("101") const [maxAffinity, setMaxAffinity] = useState("120") const [unlockContent, setUnlockContent] = useState("") const [rewardType, setRewardType] = useState("unlock") const [rewardItems, setRewardItems] = useState("") const [rewardCurrency, setRewardCurrency] = useState("100") const [isEnabled, setIsEnabled] = useState(true) // 当编辑模式且有等级数据时,初始化表单 useEffect(() => { if (mode === "edit" && level) { setLevelNumber(String(level.level)) setLevelName(level.name) setMinAffinity(String(level.minAffinity)) setMaxAffinity(String(level.maxAffinity)) setUnlockContent(level.unlockContent) setRewardType(level.rewardType) setRewardItems(level.rewardItems || "") setRewardCurrency(String(level.rewardCurrency || 100)) setIsEnabled(level.isEnabled) } }, [mode, level, open]) // 重置表单 const resetForm = () => { if (mode === "create") { setLevelNumber("6") setLevelName("") setMinAffinity("101") setMaxAffinity("120") setUnlockContent("") setRewardType("unlock") setRewardItems("") setRewardCurrency("100") setIsEnabled(true) } } const handleSubmit = async () => { // 表单验证 if (!levelName || !unlockContent) { alert("请填写所有必填字段!") return } setIsSubmitting(true) try { // 构建等级对象 const updatedLevel: AffinityLevel = { id: level?.id || `level-${Date.now()}`, level: Number(levelNumber), name: levelName, minAffinity: Number(minAffinity), maxAffinity: Number(maxAffinity), unlockContent, rewardType, rewardItems: rewardItems || undefined, rewardCurrency: rewardType === "currency" ? Number(rewardCurrency) : undefined, isEnabled, } // 模拟API请求 await new Promise((resolve) => setTimeout(resolve, 1500)) // 调用保存回调 if (onSave) { onSave(updatedLevel) } // 成功提示 alert(mode === "create" ? "好感度等级创建成功!" : "好感度等级更新成功!") setOpen(false) resetForm() } catch (error) { // 错误处理 console.error(mode === "create" ? "创建好感度等级失败:" : "更新好感度等级失败:", error) alert(mode === "create" ? "创建好感度等级失败,请重试!" : "更新好感度等级失败,请重试!") } finally { setIsSubmitting(false) } } return ( { setOpen(newOpen) if (!newOpen) resetForm() }} > {trigger || ( )} {mode === "create" ? "添加好感度等级" : "编辑好感度等级"} {mode === "create" ? "设置新的好感度等级和对应奖励" : "修改好感度等级和对应奖励"}
setLevelNumber(e.target.value)} required />
setLevelName(e.target.value)} required />
setMinAffinity(e.target.value)} required />
setMaxAffinity(e.target.value)} required />