import { useEffect, useState } from 'react' import { Drawer, Form, Input, Select, Checkbox, Button, message, Table } from 'antd' import type { ColumnsType } from 'antd/es/table' import { getStaffs, getPermissionGroups, createUser, updateUser, StaffVO, PermissionGroupVO, UserCreateReq, UserUpdateReq } from '../../api/usr' interface InitialData { userType: string language: string canEditDoc: boolean isDisabled: boolean employeeId?: string | null permGroupIds?: string[] } interface Props { open: boolean onClose: () => void onSuccess: () => void userId?: string initialData?: InitialData } export default function UserFormDrawer({ open, onClose, onSuccess, userId, initialData }: Props) { const [form] = Form.useForm() const [staffs, setStaffs] = useState([]) const [permGroups, setPermGroups] = useState([]) const [selectedPermIds, setSelectedPermIds] = useState([]) const [submitting, setSubmitting] = useState(false) const isEditMode = !!userId useEffect(() => { if (open) { getStaffs().then(setStaffs).catch(() => {}) getPermissionGroups().then(setPermGroups).catch(() => {}) if (isEditMode && initialData) { form.setFieldsValue({ userType: initialData.userType, language: initialData.language, canEditDoc: initialData.canEditDoc, isDisabled: initialData.isDisabled, employeeId: initialData.employeeId ?? null, }) setSelectedPermIds(initialData.permGroupIds ?? []) } else { form.resetFields() setSelectedPermIds([]) } } }, [open]) const permColumns: ColumnsType = [ { title: '', key: 'select', width: 40, render: (_, record) => ( { setSelectedPermIds(prev => e.target.checked ? [...prev, record.sId] : prev.filter(id => id !== record.sId) ) }} /> ) }, { title: '权限组', dataIndex: 'sGroupName' }, { title: '分类', dataIndex: 'sCategory' } ] async function handleSubmit() { try { const values = await form.validateFields() setSubmitting(true) if (isEditMode) { const req: UserUpdateReq = { userType: values.userType, language: values.language, canEditDoc: values.canEditDoc ?? false, isDisabled: values.isDisabled ?? false, employeeId: values.employeeId ?? null, permGroupIds: selectedPermIds } await updateUser(userId, req) message.success('修改用户成功') } else { const req: UserCreateReq = { userCode: values.userCode, username: values.username, userType: values.userType, language: values.language, canEditDoc: values.canEditDoc ?? false, employeeId: values.employeeId ?? null, permGroupIds: selectedPermIds } await createUser(req) message.success('新增用户成功') } form.resetFields() setSelectedPermIds([]) onSuccess() } catch (e: unknown) { if (e instanceof Error) { message.error(e.message) } } finally { setSubmitting(false) } } return ( } >
{!isEditMode && ( <> )} 可编辑文档 {isEditMode && ( 作废 )}