import { useState, useEffect } from 'react'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '@/components/ui/dialog'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select'; import { User } from 'lucide-react'; import { userApi } from '@/api'; import type { JsonData } from '@/types/common'; export interface UserFormData { username: string; nickname: string; email: string; phone: string; role: string; password: string; status: number; } interface UserFormDialogProps { open: boolean; onOpenChange: (open: boolean) => void; editingUser: JsonData | null; form: UserFormData; setForm: React.Dispatch>; saving: boolean; onSubmit: () => void; } export function UserFormDialog({ open, onOpenChange, editingUser, form, setForm, saving, onSubmit, }: UserFormDialogProps) { const [roles, setRoles] = useState<{ id: string; name: string }[]>([]); // 对话框打开时拉取角色列表 // Logan.Li useEffect(() => { if (!open) return; let cancelled = false; (async () => { try { const resp = await userApi.getRoles(); if (cancelled) return; const list = resp?.list ?? []; setRoles( list.map((r: JsonData) => ({ id: String(r.id ?? ''), name: r.name ?? r.code ?? '', })) ); } catch { if (!cancelled) setRoles([]); } })(); return () => { cancelled = true; }; }, [open]); return ( {editingUser ? '编辑用户' : '新建用户'} {editingUser ? '修改用户信息' : '创建新的系统用户'}
setForm({ ...form, username: e.target.value })} disabled={!!editingUser} className="bg-slate-800/50 border-slate-700 text-slate-200 placeholder:text-slate-500" placeholder="登录用户名" />
setForm({ ...form, nickname: e.target.value })} className="bg-slate-800/50 border-slate-700 text-slate-200 placeholder:text-slate-500" placeholder="显示昵称" />
setForm({ ...form, email: e.target.value })} className="bg-slate-800/50 border-slate-700 text-slate-200 placeholder:text-slate-500" placeholder="user@example.com" />
setForm({ ...form, phone: e.target.value })} className="bg-slate-800/50 border-slate-700 text-slate-200 placeholder:text-slate-500" placeholder="可选" />
setForm({ ...form, password: e.target.value })} className="bg-slate-800/50 border-slate-700 text-slate-200 placeholder:text-slate-500" placeholder={editingUser ? '留空则不修改' : '设置初始密码'} />
); }