import { useEffect, useState } from "react"; import { Form, Input, Select, Button, App as AntApp } from "antd"; import { PlusOutlined, EditOutlined, DeleteOutlined, SaveOutlined, CloseOutlined, KeyOutlined, } from "@ant-design/icons"; import { createUser, updateUser, type UserDTO } from "@/api/user"; import { USER_TYPES, LANGUAGE_OPTIONS } from "@/utils/data"; import { useAppDispatch, useAppSelector } from "@/store"; import { closeTab, setActiveTab } from "@/store/tabsSlice"; import { fmtDateTime } from "@/utils/format"; type Mode = "view" | "edit" | "new"; interface Props { userId?: number; mode: Mode; } interface FormShape { sUserNo: string; sUserName: string; staffName?: string; department?: string; sUserType: string; sLanguage: string; bCanModifyDocs: "全部允许" | "仅本人单据" | "仅查看"; } export default function UserDetail({ userId, mode: initialMode }: Props) { const [form] = Form.useForm(); const [mode, setMode] = useState(initialMode); const [submitting, setSubmitting] = useState(false); const dispatch = useAppDispatch(); const { message } = AntApp.useApp(); const tabs = useAppSelector((s) => s.tabs.tabs); const activeTabId = useAppSelector((s) => s.tabs.activeTabId); const tab = tabs.find((t) => t.id === activeTabId); const snapshot = tab?.meta?.snapshot as | { sUserNo: string; sUserName: string; staffName: string | null; department: string | null; sUserType: string; sLanguage: string; bCanModifyDocs?: boolean; tCreateDate?: string; sCreatedBy?: string; } | undefined; useEffect(() => { if (mode === "new") { form.setFieldsValue({ sUserNo: "", sUserName: "", staffName: "", department: "", sUserType: "普通用户", sLanguage: "zh", bCanModifyDocs: "仅查看", }); } else if (snapshot) { form.setFieldsValue({ sUserNo: snapshot.sUserNo, sUserName: snapshot.sUserName, staffName: snapshot.staffName ?? "", department: snapshot.department ?? "", sUserType: snapshot.sUserType, sLanguage: snapshot.sLanguage, bCanModifyDocs: snapshot.bCanModifyDocs ? "全部允许" : "仅查看", }); } }, [snapshot, mode, form]); const disabled = mode === "view"; const startEdit = () => setMode("edit"); const startNew = () => setMode("new"); const cancel = () => { if (mode === "new") { dispatch(closeTab(activeTabId)); dispatch(setActiveTab("userlist")); } else { setMode("view"); } }; const save = async () => { try { const values = await form.validateFields(); const dto: UserDTO = { sUserNo: values.sUserNo, sUserName: values.sUserName, sUserType: values.sUserType, sLanguage: values.sLanguage, bCanModifyDocs: values.bCanModifyDocs === "全部允许", // iStaffId omitted: prototype has no staff picker; backend treats as null. }; setSubmitting(true); if (mode === "new") { await createUser(dto); message.success("新增成功"); dispatch(closeTab(activeTabId)); dispatch(setActiveTab("userlist")); } else if (userId) { await updateUser(userId, dto); message.success("保存成功"); setMode("view"); } } catch { // validation or interceptor } finally { setSubmitting(false); } }; return (
{mode === "view" ? "只读" : mode === "new" ? "新增中" : "编辑中"}
); }