import { Connect } from "@cqsjjb/jjb-dva-runtime"; import { Button, Descriptions, Form, message, Modal, Table, Upload, } 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 PageLayout from "@cqsjjb/jjb-react-admin-component/PageLayout"; import SearchForm from "@cqsjjb/jjb-react-admin-component/SearchForm"; import ControlWrapper from "@cqsjjb/jjb-react-admin-component/ControlWrapper"; import TableAction from "@cqsjjb/jjb-react-admin-component/TableAction"; import { AntdTableFuncControl } from "@cqsjjb/jjb-common-decorator/antd"; import { tools } from "@cqsjjb/jjb-common-lib"; import { FORM_ITEM_RENDER_ENUM } from "zy-react-library/enum/formItemRender"; import useGetFile from "zy-react-library/hooks/useGetFile"; import CertPreviewImg, { CertTooltipPreviewImg, } from "~/components/CertPreviewImg"; import { NS_ORG_QUALIFICATION_CERT } from "~/enumerate/namespace"; import { QUALIFICATION_INDUSTRY_OPTIONS } from "~/enumerate/enterpriseOptions"; import { formSelectField } from "~/utils/enterpriseForm"; import { isQualificationEnabled } from "~/api/enterpriseInfo/adapter"; import { safeGetFiles, safeRequest } from "~/utils"; import { toDayjs } from "~/utils/dateFormat"; import { mockUploadFileList, resolveUploadFileId } from "~/utils/mockUpload"; import { dateRangeRule } from "~/utils/validators"; const { router } = tools; function QualificationCertPage(props) { const [addModalOpen, setAddModalOpen] = useState(false); const [viewModalOpen, setViewModalOpen] = useState(false); const [currentId, setCurrentId] = useState(""); const [form] = Form.useForm(); const [loading, setLoading] = useState(false); const [dataSource, setDataSource] = useState([]); const [total, setTotal] = useState(0); const getData = async () => { setLoading(true); try { const params = { ...router.query, current: router.query.current || 1, pageSize: router.query.pageSize || 10, }; const res = await props.orgQualificationCertList(params); if (res?.success !== false) { setDataSource(res?.data?.records || res?.data || []); setTotal(res?.data?.total || 0); } } catch (err) { console.warn("[QualificationCert] list failed:", err); } finally { setLoading(false); } }; const handleReset = (values) => { router.query = { ...router.query, ...values, current: 1, pageSize: 10 }; getData(); }; useEffect(() => { form.setFieldsValue(router.query); getData(); }, []); const onDelete = (id) => { Modal.confirm({ title: "提示", content: "数据将会删除,您是否确认删除?", okText: "是", cancelText: "否", onOk: async () => { const res = await props.orgQualificationCertRemove({ id }); if (res?.success !== false) { message.success("删除成功"); getData(); } }, }); }; const onDisable = (id) => { Modal.confirm({ title: "提示", content: "是否停用该证书?", okText: "是", cancelText: "否", onOk: async () => { const res = await props.orgQualificationCertDisable({ id }); if (res?.success !== false) { message.success("操作成功"); await getData(); } else { message.error(res?.message || "操作失败"); } }, }); }; const onEnable = (id) => { Modal.confirm({ title: "提示", content: "是否启用该证书?", okText: "是", cancelText: "否", onOk: async () => { const res = await props.orgQualificationCertEnable({ id }); if (res?.success !== false) { message.success("操作成功"); await getData(); } else { message.error(res?.message || "操作失败"); } }, }); }; return ( 安全评价资质证书管理
机构需将自身拥有的安全评价资质证书信息录入系统,包括资质等级、发证机关、发证日期、有效期等。
} extra={ } > , , ]} onReset={handleReset} onFinish={(values) => { router.query = { ...router.query, ...values, current: 1, pageSize: 10, }; getData(); }} /> `${record.validStartDate ?? ""} ~ ${record.validEndDate ?? ""}`, }, { title: "证书编号", dataIndex: "certNo" }, { title: "状态", width: 80, render: (_, record) => isQualificationEnabled(record) ? "启用" : "禁用", }, { title: "照片", width: 100, render: (_, record) => record.certImgFiles?.length ? ( ) : ( ), }, { title: "操作", width: 200, fixed: "right", render: (_, record) => ( {isQualificationEnabled(record) ? ( ) : ( )} ), }, ]} dataSource={dataSource} scroll={{ y: props.scrollY }} loading={loading} pagination={{ total, showSizeChanger: true, showQuickJumper: true, showTotal: (t) => `共 ${t} 条`, current: router.query.current || 1, pageSize: router.query.pageSize || 10, onChange: (page, pageSize) => { router.query = { ...router.query, current: page, pageSize }; getData(); }, }} /> {addModalOpen && ( { setAddModalOpen(false); setCurrentId(""); }} onSuccess={getData} /> )} {viewModalOpen && ( { setViewModalOpen(false); setCurrentId(""); }} /> )} ); } function CertFormModal({ open, 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.issueDate = toDayjs(data.issueDate); data.validDate = [ toDayjs(data.validStartDate), toDayjs(data.validEndDate), ]; data.certImgs = data.certImgFiles?.length ? data.certImgFiles : mockUploadFileList("证书图片.jpg"); form.setFieldsValue(data); setDetailLoading(false); const files = await safeGetFiles( getFile, { eqType: "org_cert", eqForeignKey: data.id }, data.certImgFiles || [], ); if (!cancelled && files.length) { form.setFieldValue("certImgs", files); } } catch (err) { console.warn("[QualificationCert] 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.certImageUrl = resolveUploadFileId(values.certImgs); if (currentId) { values.id = currentId; } const request = currentId ? requestEdit : requestAdd; const res = await request(values); if (res?.success !== false) { message.success(currentId ? "编辑成功" : "添加成功"); handleCancel(); onSuccess(); } } finally { setSubmitting(false); } }; return (
严谨在本互联网非涉密平台处理、传输国家秘密和工作秘密,请确认扫描、传输的文件资料不涉及国家秘密和工作秘密
, }, ]} labelCol={{ span: 8 }} />
); } function CertViewModal({ 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: "org_cert", eqForeignKey: data.id }, data.certImgFiles || [], ); if (!cancelled && files.length) { setInfo((prev) => ({ ...prev, certImgs: files })); } } catch (err) { console.warn("[QualificationCert] load view failed:", err); } finally { if (!cancelled) { setDetailLoading(false); } } })(); return () => { cancelled = true; }; }, [open, currentId]); return ( {info.certType} {info.certName} {info.certNo} {info.issueOrg} {info.issueDate} {`${info.validStartDate ?? ""} ~ ${info.validEndDate ?? ""}`} {info.remark || "-"} ); } export default Connect( [NS_ORG_QUALIFICATION_CERT], true, )(AntdTableFuncControl(QualificationCertPage));