import { useId, useState } from 'react' import { zodResolver } from '@hookform/resolvers/zod' import { Controller, useForm } from 'react-hook-form' import { toast } from 'sonner' import { createSysUser, updateSysUser } from '@/api' import { FileUpload } from '@/components/file-upload' 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 { Spinner } from '@/components/ui/spinner.tsx' import { sysUserFormSchema, type SysUser, type SysUserFormInput, type SysUserFormOutput, } from '@/schemas' interface Props { currentRow?: SysUser | 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(sysUserFormSchema), defaultValues: currentRow ? { ...currentRow, avatar: currentRow.avatar_id ? [{ id: currentRow.avatar_id, file_path: currentRow.avatar_url }] : [], } : { username: '', account: '', password: '', confirmPassword: '', avatar: [], }, }) const onSubmit = async (values: SysUserFormOutput) => { try { setLoading(true) if (values.id) { await updateSysUser(values.id, values) } else { await createSysUser(values) } toast('操作成功!') onConfirm() } finally { setLoading(false) } } return ( form.reset()}> {isEdit ? '编辑' : '创建'}用户
{ return ( 用户头像 {fieldState.invalid && } ) }} /> ( 用户名称 {fieldState.invalid && } )} /> {!isEdit && ( <> ( 账户名称 {fieldState.invalid && } )} /> ( 用户密码 {fieldState.invalid && } )} /> ( 确认密码 {fieldState.invalid && } )} /> )}
) }