import { zodResolver } from "@hookform/resolvers/zod" import { useState } from "react" import { Controller, useForm } from "react-hook-form" import { toast } from "sonner" import z from "zod" import { createRole } from "@/actions/role" import { Button } from "@/components/ui/button" import { Dialog, DialogClose, DialogContent, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from "@/components/ui/dialog" import { Field, FieldError, FieldGroup, FieldLabel, } from "@/components/ui/field" import { Input } from "@/components/ui/input" import { Textarea } from "@/components/ui/textarea" const schema = z.object({ name: z.string().min(1, "请输入角色名称"), description: z.string().optional(), }) export function CreateRole(props: { onSuccess?: () => void }) { const form = useForm({ resolver: zodResolver(schema), defaultValues: { name: "", description: "", }, }) const onSubmit = async (data: z.infer) => { try { const resp = await createRole(data) if (resp.success) { form.reset() toast.success("角色创建成功") props.onSuccess?.() setOpen(false) } else { toast.error(resp.message) } } catch (error) { const message = error instanceof Error ? error.message : error toast.error(`接口请求错误: ${message}`) } } const [open, setOpen] = useState(false) return ( 创建角色
( 名称 {fieldState.invalid && ( )} )} /> ( 描述