'use client' import { useState, useEffect } from 'react' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { Label } from '@/components/ui/label' import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '@/components/ui/dialog' import { Spinner } from '@/components/ui/spinner' import { User, UserFormData } from '@/types' interface UserDialogProps { open: boolean onOpenChange: (open: boolean) => void user?: User | null onSubmit: (data: UserFormData) => Promise } const defaultFormData: UserFormData = { email: '', password: '', name: '', } export function UserDialog({ open, onOpenChange, user, onSubmit }: UserDialogProps) { const [formData, setFormData] = useState(defaultFormData) const [isLoading, setIsLoading] = useState(false) const [error, setError] = useState('') // Reset form when dialog opens/closes or user changes useEffect(() => { if (open) { if (user) { setFormData({ email: user.email, password: '', name: user.name || '', }) } else { setFormData(defaultFormData) } setError('') } }, [open, user]) const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() setError('') if (!formData.email.trim()) { setError('请输入邮箱') return } if (!user && !formData.password) { setError('请输入密码') return } if (formData.password && formData.password.length < 6) { setError('密码至少需要6个字符') return } setIsLoading(true) try { await onSubmit(formData) onOpenChange(false) } catch (err) { setError(err instanceof Error ? err.message : '操作失败,请稍后重试') } finally { setIsLoading(false) } } return ( {user ? '编辑用户' : '添加用户'} {user ? '修改用户信息,密码留空则不修改' : '创建新的平台用户'}
{error && (
{error}
)}
setFormData((prev) => ({ ...prev, email: e.target.value })) } placeholder="请输入邮箱" required />
setFormData((prev) => ({ ...prev, password: e.target.value })) } placeholder={user ? '留空则不修改密码' : '请输入密码'} required={!user} />
setFormData((prev) => ({ ...prev, name: e.target.value })) } placeholder="请输入姓名" />
) }