import { Connect } from "@cqsjjb/jjb-dva-runtime"; import { Button, DatePicker, Descriptions, Form, Input, message, Modal, Select } from "antd"; import { useEffect, useState } from "react"; import AddIcon from "zy-react-library/components/Icon/AddIcon"; 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 Upload from "zy-react-library/components/Upload"; import useTable from "zy-react-library/hooks/useTable"; import { asId } from "~/api/enterpriseInfo/idUtil"; import { NS_STAFF_INFO, NS_STAFF_RESIGNATION_APPLY } from "~/enumerate/namespace"; import { safeListRequest, safeRequest } from "~/utils"; import { formSelectField, getResignAuditStatusLabel } from "~/utils/enterpriseForm"; import { DEFAULT_UPLOAD_FILE_URL, mockUploadFileList, resolveUploadFileId } from "~/utils/mockUpload"; import PageHeader from "../components/PageHeader"; const RESIGN_AUDIT_STATUS = { 0: "未审核", 1: "已审核", 2: "已退回" }; function ResignationApplyPage(props) { const [addModalOpen, setAddModalOpen] = useState(false); const [viewModalOpen, setViewModalOpen] = useState(false); const [currentId, setCurrentId] = useState(""); const [staffOptions, setStaffOptions] = useState([]); const [searchForm] = Form.useForm(); const { tableProps, getData } = useTable(safeListRequest(props.staffResignationApplyList), { form: searchForm }); useEffect(() => { getData(); }, []); useEffect(() => { let cancelled = false; props.staffInfoList?.({ pageIndex: 1, pageSize: 500 }).then((res) => { if (!cancelled) { setStaffOptions((res?.data || []).map((s) => ({ label: `${s.staffName}(${s.account})`, value: asId(s.id), staffName: s.staffName, account: s.account, }))); } }).catch((err) => { console.warn("[ResignationApply] load staff options failed:", err); }); return () => { cancelled = true; }; }, []); return ( ({ label, value: Number(value) })), { colProps: { xs: 24, sm: 12, md: 8, lg: 8 }, placeholder: "请选择审核状态" }, ), ]} onFinish={getData} /> ( )} columns={[ { title: "账户", dataIndex: "account" }, { title: "姓名", dataIndex: "applicantName" }, { title: "部门", dataIndex: "deptName" }, { title: "申请时间", dataIndex: "applyTime" }, { title: "离职申请审核状态", dataIndex: "auditStatus", render: (_, record) => getResignAuditStatusLabel(record), }, { title: "操作", width: 100, render: (_, record) => ( ), }, ]} {...tableProps} /> {addModalOpen && ( setAddModalOpen(false)} onSuccess={getData} /> )} {viewModalOpen && ( { setViewModalOpen(false); setCurrentId(""); }} /> )} ); } function AddModal({ open, staffOptions, requestAdd, onCancel, onSuccess }) { const [form] = Form.useForm(); const [submitting, setSubmitting] = useState(false); const handleCancel = () => { form.resetFields(); onCancel(); }; const onApplicantChange = (personnelId) => { const staff = staffOptions.find((s) => String(s.value) === String(personnelId)); form.setFieldsValue({ applicantName: staff?.staffName || "", }); }; const handleSubmit = async (values) => { try { setSubmitting(true); values.attachmentId = resolveUploadFileId(values.resignReport); const res = await requestAdd(values); if (res?.success !== false) { message.success("提交成功"); handleCancel(); onSuccess(); } else { message.error(res?.message || "提交失败"); } } finally { setSubmitting(false); } }; return (
e?.fileList} initialValue={mockUploadFileList("离职通知报告.pdf")} >
); } function ViewModal({ open, currentId, requestDetails, onCancel }) { const [info, setInfo] = useState({}); const [detailLoading, setDetailLoading] = useState(false); useEffect(() => { if (!open || !currentId) { setInfo({}); return; } let cancelled = false; setDetailLoading(true); safeRequest(requestDetails, { id: currentId }).then((res) => { if (!cancelled) { const data = res?.data || {}; setInfo({ ...data, resignReport: data.attachmentId ? [{ name: "离职通知报告.pdf", fileName: "离职通知报告.pdf", url: data.attachmentId || DEFAULT_UPLOAD_FILE_URL }] : [], }); } }).finally(() => { if (!cancelled) { setDetailLoading(false); } }); return () => { cancelled = true; }; }, [open, currentId]); return ( {info.applicantName} {info.applyTime} {info.expectedLeaveDate} {info.leaveReason} {info.remark} {info.resignReport?.[0]?.fileName || info.resignReport?.[0]?.name || "-"} ); } export default Connect([NS_STAFF_RESIGNATION_APPLY, NS_STAFF_INFO], true)(ResignationApplyPage);