import { Connect } from "@cqsjjb/jjb-dva-runtime"; import { Button, Descriptions, Form, message, Modal, Space } from "antd"; import { useEffect, useState } from "react"; import FormBuilder from "zy-react-library/components/FormBuilder"; import AddIcon from "zy-react-library/components/Icon/AddIcon"; import Page from "zy-react-library/components/Page"; import CertPreviewImg from "~/components/CertPreviewImg"; 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 { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender"; import useGetFile from "zy-react-library/hooks/useGetFile"; import useGetUrlQuery from "zy-react-library/hooks/useGetUrlQuery"; import useTable from "zy-react-library/hooks/useTable"; import { NS_STAFF_CERTIFICATE } from "~/enumerate/namespace"; import { safeGetFiles, safeListRequest, safeRequest } from "~/utils"; import { mockUploadFileList, resolveUploadFileId } from "~/utils/mockUpload"; import { dateRangeRule } from "~/utils/validators"; import PageHeader from "../../components/PageHeader"; function StaffCertificatePage(props) { const query = useGetUrlQuery(); const staffId = query.staffId; const staffName = query.staffName; const [addModalOpen, setAddModalOpen] = useState(false); const [viewModalOpen, setViewModalOpen] = useState(false); const [currentId, setCurrentId] = useState(""); const [form] = Form.useForm(); const { tableProps, getData } = useTable(safeListRequest(props.staffCertificateList), { form, transform: (formData) => ({ ...formData, eqStaffId: staffId, }), }); useEffect(() => { if (staffId) { getData(); } }, [staffId]); const goBack = () => { window.location.href = window.location.pathname.replace(/\/Certificate.*$/, "/List"); }; const onDelete = (id) => { Modal.confirm({ title: "提示", content: "数据将会删除,您是否确认删除?", okText: "是", cancelText: "否", onOk: async () => { const res = await props.staffCertificateRemove({ id }); if (res?.success !== false) { message.success("删除成功"); getData(); } }, }); }; return ( ( )} columns={[ { title: "证书类型", dataIndex: "certCategory" }, { title: "证书作业类别", dataIndex: "certWorkCategory" }, { title: "证书编号", dataIndex: "certNo" }, { title: "操作", width: 200, render: (_, record) => ( ), }, ]} {...tableProps} /> {addModalOpen && ( { setAddModalOpen(false); setCurrentId(""); }} onSuccess={getData} /> )} {viewModalOpen && ( { setViewModalOpen(false); setCurrentId(""); }} /> )} ); } function CertModal({ open, staffId, currentId, requestAdd, requestEdit, requestDetails, onCancel, onSuccess, }) { const [form] = Form.useForm(); const [submitting, setSubmitting] = useState(false); const [detailLoading, setDetailLoading] = useState(false); const { getFile } = useGetFile(); useEffect(() => { if (!open) { return; } if (!currentId) { form.resetFields(); form.setFieldsValue({ certImgs: mockUploadFileList("证书附件.jpg") }); return; } let cancelled = false; (async () => { setDetailLoading(true); try { const res = await safeRequest(requestDetails, { id: currentId }); if (cancelled || !res?.data) { return; } const data = { ...res.data }; data.validDate = [data.validStartDate, data.validEndDate]; data.certImgs = data.certImgFiles?.length ? data.certImgFiles : mockUploadFileList("证书附件.jpg"); form.setFieldsValue(data); setDetailLoading(false); const files = await safeGetFiles( getFile, { eqType: "staff_cert", eqForeignKey: data.id }, data.certImgFiles || [], ); if (!cancelled && files.length) { form.setFieldValue("certImgs", files); } } catch (err) { console.warn("[StaffCertificate] load detail failed:", err); } finally { if (!cancelled) { setDetailLoading(false); } } })(); return () => { cancelled = true; }; }, [open, currentId]); const handleCancel = () => { form.resetFields(); onCancel(); }; const handleSubmit = async (values) => { try { setSubmitting(true); values.validStartDate = values.validDate?.[0]; values.validEndDate = values.validDate?.[1]; values.staffId = staffId; values.certAttachmentUrl = resolveUploadFileId(values.certImgs); const request = currentId ? requestEdit : requestAdd; if (currentId) { values.id = currentId; } const res = await request(values); if (res?.success !== false) { message.success(currentId ? "编辑成功" : "添加成功"); handleCancel(); onSuccess(); } } finally { setSubmitting(false); } }; return ( setDeleteFiles(prev => [...prev, file])} /> ), }, ]} labelCol={{ span: 24 }} wrapperCol={{ span: 24 }} /> ); } function ViewModal({ open, currentId, requestDetails, onCancel }) { const [info, setInfo] = useState({}); const [detailLoading, setDetailLoading] = useState(false); const { getFile } = useGetFile(); useEffect(() => { if (!open || !currentId) { setInfo({}); return; } let cancelled = false; (async () => { setDetailLoading(true); try { const res = await safeRequest(requestDetails, { id: currentId }); if (cancelled || !res?.data) { return; } const data = { ...res.data }; data.certImgs = data.certImgFiles || []; setInfo(data); setDetailLoading(false); const files = await safeGetFiles( getFile, { eqType: "staff_cert", eqForeignKey: data.id }, data.certImgFiles || [], ); if (!cancelled && files.length) { setInfo((prev) => ({ ...prev, certImgs: files })); } } catch (err) { console.warn("[StaffCertificate] load view failed:", err); } finally { if (!cancelled) { setDetailLoading(false); } } })(); return () => { cancelled = true; }; }, [open, currentId]); return ( {info.certName} {info.certCategory} {info.certNo} {info.issueOrg} {info.validStartDate} {info.validEndDate} {info.reviewDate} ); } export default Connect([NS_STAFF_CERTIFICATE], true)(StaffCertificatePage);