import { Connect } from "@cqsjjb/jjb-dva-runtime"; import { Button, Descriptions, Form, Input, message, Modal, Select, Space, Typography } from "antd"; import { useEffect, useState } from "react"; import Page from "zy-react-library/components/Page"; import Search from "zy-react-library/components/Search"; import Table from "zy-react-library/components/Table"; import useTable from "zy-react-library/hooks/useTable"; import { NS_STAFF_CHANGE_LOG, NS_STAFF_INFO } from "~/enumerate/namespace"; import { safeListRequest, safeRequest } from "~/utils"; import { CHANGE_COUNT_STYLE, formSelectField, getChangeCount, getEmploymentStatusLabel, getResignAuditStatusLabel } from "~/utils/enterpriseForm"; import PageHeader from "../components/PageHeader"; const EMPLOYMENT_STATUS = { 1: "在职", 2: "离职" }; const RESIGN_AUDIT_STATUS = { 0: "未审核", 1: "已审核", 2: "已退回" }; const SEARCH_COL = { xs: 24, sm: 12, md: 8, lg: 6 }; function PersonnelChangePage(props) { const [viewMode, setViewMode] = useState("list"); const [selectedStaff, setSelectedStaff] = useState(null); const [auditModalOpen, setAuditModalOpen] = useState(false); const [viewResignOpen, setViewResignOpen] = useState(false); const [resignInfo, setResignInfo] = useState({}); const [rejectReason, setRejectReason] = useState(""); const [searchForm] = Form.useForm(); const [logForm] = Form.useForm(); const { tableProps, getData } = useTable(safeListRequest(props.staffChangeLogStaffList), { form: searchForm, }); const { tableProps: logTableProps, getData: getLogData } = useTable( safeListRequest(props.staffChangeLogList), { form: logForm, transform: () => ({ eqStaffId: selectedStaff?.staffId }), }, ); useEffect(() => { getData(); }, []); useEffect(() => { if (viewMode === "log" && selectedStaff?.staffId) { getLogData(); } }, [viewMode, selectedStaff?.staffId]); const onDelete = (record) => { Modal.confirm({ title: "提示", content: "数据将会删除,您是否确认删除?", okText: "是", cancelText: "否", onOk: async () => { const res = await props.staffInfoRemove?.({ id: record.staffId || record.id }); if (res?.success !== false) { message.success("删除成功"); getData(); } else { message.error(res?.message || "删除失败"); } }, }); }; const openResignAudit = async (record) => { try { const res = await safeRequest(props.staffResignationInfo, { id: record.resignApplyId }); setResignInfo(res?.data || {}); setSelectedStaff(record); setRejectReason(""); setAuditModalOpen(true); } catch (err) { console.warn("[PersonnelChange] openResignAudit failed:", err); message.error("获取离职申请详情失败"); } }; const openResignView = async (record) => { try { const res = await safeRequest(props.staffResignationInfo, { id: record.resignApplyId }); setResignInfo(res?.data || {}); setViewResignOpen(true); } catch (err) { console.warn("[PersonnelChange] openResignView failed:", err); message.error("获取离职申请详情失败"); } }; const submitAudit = async (passed) => { if (!passed && !rejectReason?.trim()) { message.warning("请填写退回原因"); return; } try { const res = await props.staffResignationAudit({ id: resignInfo.id, auditStatus: passed ? 1 : 2, rejectReason: passed ? undefined : rejectReason, }); if (res?.success !== false) { message.success(passed ? "审核通过" : "已退回"); setAuditModalOpen(false); getData(); } else { message.error(res?.message || "审核操作失败"); } } catch (err) { console.warn("[PersonnelChange] submitAudit failed:", err); message.error("审核操作失败"); } }; if (viewMode === "log") { return (
人员: {selectedStaff?.staffName}
); } return ( ({ label, value: Number(value) })), { colProps: SEARCH_COL }, ), formSelectField( "resignAuditStatus", "复核状态", Object.entries(RESIGN_AUDIT_STATUS).map(([value, label]) => ({ label, value: Number(value) })), { colProps: SEARCH_COL, placeholder: "请选择复核状态" }, ), ]} onFinish={getData} />
{ const n = getChangeCount(record); const style = n > 0 ? CHANGE_COUNT_STYLE.active : CHANGE_COUNT_STYLE.zero; if (n <= 0) { return {n}; } return ( { setSelectedStaff(record); setViewMode("log"); }} > {n} ); }, }, { title: "就职状态", dataIndex: "employmentStatusName", width: 90, render: (_, record) => getEmploymentStatusLabel(record), }, { title: "离职申请审核状态", dataIndex: "resignAuditStatus", width: 140, render: (_, record) => getResignAuditStatusLabel(record), }, { title: "操作", width: 220, fixed: "right", render: (_, record) => ( {record.resignApplyId && Number(record.resignAuditStatus) === 0 && ( )} ), }, ]} {...tableProps} /> )} onCancel={() => setAuditModalOpen(false)} > {resignInfo.applicantName} {resignInfo.applyTime} {resignInfo.expectedLeaveDate} {resignInfo.leaveReason} {resignInfo.remark} setRejectReason(e.target.value)} /> setViewResignOpen(false)} > {resignInfo.applicantName} {resignInfo.applyTime} {resignInfo.expectedLeaveDate} {resignInfo.leaveReason} {resignInfo.remark} ); } export default Connect([NS_STAFF_CHANGE_LOG, NS_STAFF_INFO], true)(PersonnelChangePage);