import { useId, useState } from 'react' import { zodResolver } from '@hookform/resolvers/zod' import { Controller, useForm } from 'react-hook-form' import { toast } from 'sonner' import z from 'zod' import { createSysApi, updateSysApi } from '@/api' import { Badge } from '@/components/ui/badge.tsx' import { Button } from '@/components/ui/button.tsx' import { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '@/components/ui/dialog.tsx' import { Field, FieldError, FieldGroup, FieldLabel } from '@/components/ui/field' import { Input } from '@/components/ui/input' import { Select, SelectContent, SelectGroup, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select.tsx' import { Spinner } from '@/components/ui/spinner.tsx' import { HttpMethod, HttpMethodClass } from '@/enum' import { SysApiFormSchema, type SysApi, type SysApiForm } from '@/schemas' interface Props { currentRow?: SysApi | null onClose: () => void onConfirm: () => void open: boolean } export function ActionsDialog({ open, currentRow, onClose, onConfirm }: Props) { const isEdit = !!currentRow?.id const formId = useId() const [loading, setLoading] = useState(false) const form = useForm>({ resolver: zodResolver(SysApiFormSchema), defaultValues: currentRow ? { ...currentRow } : { name: '', path: '', group_name: '', method: '' as HttpMethod, sort: 0, }, }) const onSubmit = async (values: SysApiForm) => { try { setLoading(true) if (values.id) { await updateSysApi(values.id, values) } else { await createSysApi(values) } toast('操作成功!') onConfirm() } finally { setLoading(false) } } return ( form.reset()}> {isEdit ? '编辑' : '创建'}接口
( 接口名称 {fieldState.invalid && } )} /> ( 分组名称 {fieldState.invalid && } )} /> ( 接口路径 {fieldState.invalid && } )} /> ( 接口方法 {fieldState.invalid && } )} /> ( 排序 {fieldState.invalid && } )} />
) }