import { Button, Card, Form, Spin, Table, Tabs, Tag, message } from "antd"; import { useEffect, useMemo, useState } from "react"; import FormBuilder from "zy-react-library/components/FormBuilder"; import PageLayout from "@cqsjjb/jjb-react-admin-component/PageLayout"; import FilePreviewModal from "~/components/FilePreviewModal"; import { fetchRegisteredOrgDetail, fetchRegisteredOrgPersonnelCertDetail, fetchRegisteredOrgPersonnelCertList, fetchRegisteredOrgPersonnelDetail, fetchRegisteredOrgPersonnelList, fetchRegisteredOrgQualificationGroups, } from "~/api/regulatorOrgInfo"; import { buildOrgInfoFormOptions } from "../../../../EnterpriseInfo/OrgInfo/formOptions"; import StaffViewModal from "../../../../EnterpriseInfo/PersonnelInfo/StaffViewModal"; const LIST_PATH = "/container/supervision/basicInfo/registeredOrg/list"; const ORG_INFO_FORM_OPTIONS = buildOrgInfoFormOptions(); function parseQueryId(location) { const search = location?.search || window.location.search || ""; return new URLSearchParams(search).get("id"); } function resolvePreviewUrl(raw) { if (!raw) return ""; const u = String(raw); if (/^https?:\/\//i.test(u)) return u; const base = window.fileUrl || ""; return base ? `${base}${u}` : u; } function isImageUrl(url) { return /\.(jpe?g|png|gif|webp|bmp)(\?|#|$)/i.test(String(url || "").toLowerCase()); } function MaterialsTab({ materialGroups, loading, onPreview }) { if (loading) { return ; } return (
该机构共申请 {materialGroups.length} 个业务范围资质,以下为各范围对应的申请材料清单
{materialGroups.map((group) => ( 证书有效期: {group.expireDate} {group.expireWarning ? "(即将到期)" : ""} )} > ( ), }, ]} /> ))} ); } function PersonnelTab({ personnel, loading, onView }) { if (loading) { return ; } return (
index + 1 }, { title: "姓名", dataIndex: "name", width: 90 }, { title: "性别", dataIndex: "gender", width: 60 }, { title: "岗位", dataIndex: "position", width: 110 }, { title: "资质范围", dataIndex: "qualScope", width: 90 }, { title: "学历", dataIndex: "education", width: 80 }, { title: "注册安全工程师", width: 120, render: (_, record) => ( {record.registerEngineer === 1 ? "是" : "否"} ), }, { title: "操作", width: 80, render: (_, record) => ( ), }, ]} /> ); } function RegisteredOrgDetailPage(props) { const id = useMemo(() => parseQueryId(props.location), [props.location?.search]); const [form] = Form.useForm(); const [orgLoading, setOrgLoading] = useState(Boolean(parseQueryId(props.location))); const [extrasLoading, setExtrasLoading] = useState(Boolean(parseQueryId(props.location))); const [orgName, setOrgName] = useState(""); const [materialGroups, setMaterialGroups] = useState([]); const [personnel, setPersonnel] = useState([]); const [filePreview, setFilePreview] = useState(null); const [viewPersonnelId, setViewPersonnelId] = useState(""); useEffect(() => { if (!id) { setOrgLoading(false); setExtrasLoading(false); return; } let cancelled = false; setOrgLoading(true); setExtrasLoading(true); (async () => { try { const [orgRes, groups, staffList] = await Promise.all([ fetchRegisteredOrgDetail(id), fetchRegisteredOrgQualificationGroups(id).catch((err) => { console.warn("[RegisteredOrgDetail] qualification load failed:", err); message.error(err?.message || "加载申请材料失败"); return []; }), fetchRegisteredOrgPersonnelList(id).catch((err) => { console.warn("[RegisteredOrgDetail] personnel load failed:", err); message.error(err?.message || "加载人员信息失败"); return []; }), ]); if (cancelled) { return; } if (orgRes?.data) { form.setFieldsValue(orgRes.data); setOrgName(orgRes.data.orgName || ""); } setMaterialGroups(groups || []); setPersonnel(staffList || []); } catch (err) { if (!cancelled) { console.warn("[RegisteredOrgDetail] load failed:", err); message.error("加载机构详情失败"); } } finally { if (!cancelled) { setOrgLoading(false); setExtrasLoading(false); } } })(); return () => { cancelled = true; }; }, [id]); const goBack = () => { if (props.history?.goBack && props.history.length > 1) { props.history.goBack(); return; } if (props.history?.push) { props.history.push(LIST_PATH); return; } window.location.href = `/certificate${LIST_PATH}`; }; if (!id) { return ( 返回}>

缺少机构 ID 参数

); } const tabItems = [ { key: "info", label: "备案信息", children: ( ), }, { key: "materials", label: "申请清单材料", children: ( { const url = resolvePreviewUrl(record?.previewUrl); if (!url) { message.warning("该材料暂无可预览的附件"); return; } if (isImageUrl(url)) { setFilePreview(record); } else { window.open(url, "_blank"); } }} /> ), }, { key: "personnel", label: "人员信息", children: ( setViewPersonnelId(record.id)} /> ), }, ]; return ( ← 返回}>

{orgName || undefined}

setFilePreview(null)} /> {viewPersonnelId && ( setViewPersonnelId("")} /> )}
); } export default RegisteredOrgDetailPage;