"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, Heart } from "lucide-react" import { Switch } from "@/components/ui/switch" // 定义互动规则类型 export type AffinityRule = { id: string name: string type: string description: string minChange: number maxChange: number singleCap: number dailyCap: number isNegative: boolean isEnabled: boolean } type AffinityRuleDialogProps = { mode?: "create" | "edit" rule?: AffinityRule onSave?: (rule: AffinityRule) => void trigger?: React.ReactNode } export function AffinityRuleDialog({ mode = "create", rule, onSave, trigger }: AffinityRuleDialogProps) { const [open, setOpen] = useState(false) const [isSubmitting, setIsSubmitting] = useState(false) // 表单状态 const [name, setName] = useState("") const [ruleType, setRuleType] = useState("") const [description, setDescription] = useState("") const [minChange, setMinChange] = useState("1") const [maxChange, setMaxChange] = useState("5") const [singleCap, setSingleCap] = useState("5") const [dailyCap, setDailyCap] = useState("15") const [isNegative, setIsNegative] = useState(false) const [isEnabled, setIsEnabled] = useState(true) // 当编辑模式且有规则数据时,初始化表单 useEffect(() => { if (mode === "edit" && rule) { setName(rule.name) setRuleType(rule.type) setDescription(rule.description) setMinChange(String(rule.minChange)) setMaxChange(String(rule.maxChange)) setSingleCap(String(rule.singleCap)) setDailyCap(String(rule.dailyCap)) setIsNegative(rule.isNegative) setIsEnabled(rule.isEnabled) } }, [mode, rule, open]) // 重置表单 const resetForm = () => { if (mode === "create") { setName("") setRuleType("") setDescription("") setMinChange("1") setMaxChange("5") setSingleCap("5") setDailyCap("15") setIsNegative(false) setIsEnabled(true) } } const handleSubmit = async () => { // 表单验证 if (!name || !ruleType || !description) { alert("请填写所有必填字段!") return } setIsSubmitting(true) try { // 构建规则对象 const updatedRule: AffinityRule = { id: rule?.id || `rule-${Date.now()}`, name, type: ruleType, description, minChange: Number(minChange), maxChange: Number(maxChange), singleCap: Number(singleCap), dailyCap: Number(dailyCap), isNegative, isEnabled, } // 模拟API请求 await new Promise((resolve) => setTimeout(resolve, 1500)) // 调用保存回调 if (onSave) { onSave(updatedRule) } // 成功提示 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" ? "设置新的互动行为对好感度的影响规则" : "修改互动行为对好感度的影响规则"}
setName(e.target.value)} required />