import { zodResolver } from "@hookform/resolvers/zod" import { Eye, EyeOff } from "lucide-react" import { useEffect, useState } from "react" import { Controller, useForm } from "react-hook-form" import { z } from "zod" import { Button } from "@/components/ui/button" import { Dialog, DialogContent, DialogHeader, DialogTitle, } from "@/components/ui/dialog" import { FieldError } from "@/components/ui/field" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" export type EditInfoValues = { username: string taobao: string password: string email: string wechat: string qq: string } const editInfoSchema = z.object({ username: z.string().trim().min(1, "请输入用户名"), taobao: z.string(), password: z.string().min(1, "请输入密码"), email: z .string() .refine( v => !v || /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(v), "请输入正确的邮箱", ), wechat: z.string(), qq: z.string(), }) interface EditInfoDialogProps { open: boolean onOpenChange: (open: boolean) => void initialData?: EditInfoValues onSave?: (data: EditInfoValues) => void } const DEFAULT_INITIAL_DATA: EditInfoValues = { username: "191****1234", taobao: "191****1234", password: "********", email: "123456123@qq.com", wechat: "", qq: "", } export function EditInfoDialog({ open, onOpenChange, initialData = DEFAULT_INITIAL_DATA, onSave, }: EditInfoDialogProps) { const [showPassword, setShowPassword] = useState(false) const form = useForm({ resolver: zodResolver(editInfoSchema), defaultValues: initialData, }) useEffect(() => { if (open) { form.reset(initialData) } }, [open, initialData, form]) const onSubmit = (data: EditInfoValues) => { onSave?.(data) onOpenChange(false) } return ( 编辑信息
( <> {fieldState.error?.message} )} />
( )} />
( <>
{fieldState.error?.message} )} />
( <> {fieldState.error?.message} )} />
( )} />
( )} />
) }