'use client'; import { useEffect, useState } from 'react'; import { Button } from '@/components/ui/button'; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, } from '@/components/ui/dialog'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Switch } from '@/components/ui/switch'; import { useAdminUsers } from '@/contexts/admin-users-context'; import type { CreateUserRequest } from '@/lib/services/admin'; const emptyForm: CreateUserRequest = { username: '', password: '', nickname: '', email: '', is_active: true, is_admin: false, }; export function CreateUserModal({ isOpen, onClose, }: { isOpen: boolean; onClose: () => void; }) { const { createUser } = useAdminUsers(); const [form, setForm] = useState(emptyForm); const [saving, setSaving] = useState(false); const [errors, setErrors] = useState>({}); useEffect(() => { if (isOpen) { setForm(emptyForm); setErrors({}); } else { setSaving(false); } }, [isOpen]); const validate = () => { const newErrors: Record = {}; if (!form.username.trim()) { newErrors.username = '用户名不能为空'; } else if (form.username.trim().length < 3) { newErrors.username = '用户名长度不能少于 3 位'; } if (!form.email.trim()) { newErrors.email = '邮箱不能为空'; } else if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(form.email.trim())) { newErrors.email = '邮箱格式不正确'; } if (!form.password) { newErrors.password = '密码不能为空'; } else if (form.password.length < 8) { newErrors.password = '密码长度不能少于 8 位'; } setErrors(newErrors); return Object.keys(newErrors).length === 0; }; const handleSave = async (e: React.FormEvent) => { e.preventDefault(); if (!validate()) return; setSaving(true); try { await createUser({ ...form, username: form.username.trim(), nickname: form.nickname?.trim() || undefined, email: form.email.trim(), }); onClose(); } catch { // Errors are already handled by context toast notifications } finally { setSaving(false); } }; return ( !open && onClose()}> 新增用户 直接创建一个本地密码登录的新账户。
setForm((prev) => ({ ...prev, username: e.target.value })) } placeholder='请输入用户名 (至少 3 位)' /> {errors.username && (

{errors.username}

)}
setForm((prev) => ({ ...prev, nickname: e.target.value })) } placeholder='请输入昵称' />
setForm((prev) => ({ ...prev, email: e.target.value })) } placeholder='请输入邮箱地址' /> {errors.email && (

{errors.email}

)}
setForm((prev) => ({ ...prev, password: e.target.value })) } placeholder='请输入登录密码 (至少 8 位)' /> {errors.password && (

{errors.password}

)}
启用账户
禁用后此账号将无法登录系统。
setForm((prev) => ({ ...prev, is_active: checked })) } />
管理员权限
开启后此账号将拥有后台管理权限。
setForm((prev) => ({ ...prev, is_admin: checked })) } />
); }