"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 }))} />
) }