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'; import { useTranslation } from 'react-i18next'; 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 { t } = useTranslation(); 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 ? t('system.editUser') : '新建用户'} {editingUser ? t('system.editUserDesc') : t('system.createUserDesc')}
setForm({ ...form, username: e.target.value })} disabled={!!editingUser} className="dg-input" placeholder={t('system.loginUsername')} />
setForm({ ...form, nickname: e.target.value })} className="dg-input" placeholder={t('system.userShowNickname')} />
setForm({ ...form, email: e.target.value })} className="dg-input" placeholder="user@example.com" />
setForm({ ...form, phone: e.target.value })} className="dg-input" placeholder={t('common.optional')} />
setForm({ ...form, password: e.target.value })} className="dg-input" placeholder={editingUser ? t('system.passwordLeaveBlank') : t('system.setInitialPassword')} />
); }