diff --git a/src/components/StaffViewModal/index.js b/src/components/StaffViewModal/index.js index 524bec0..a9fc888 100644 --- a/src/components/StaffViewModal/index.js +++ b/src/components/StaffViewModal/index.js @@ -5,6 +5,7 @@ import { REGISTER_ENGINEER_CATEGORY_MAP, ABILITY_SOURCE_MAP, TITLE_LEVEL_MAP, + QUALIFICATION_INDUSTRY_OPTIONS_MAP, } from "~/enumerate/enterpriseOptions"; import { CERT_LEVEL_LABEL_BY_TYPE, @@ -88,6 +89,7 @@ export default function StaffViewModal({ const capabilityList = Array.isArray(info.capabilityAssessment) ? info.capabilityAssessment.map((item) => ({ + industryCode: item.industryCode, capabilityName: CAPABILITY_MAP[item.professionalCapabilityCode] || item.professionalCapabilityCode || @@ -264,7 +266,20 @@ export default function StaffViewModal({ dataSource={capabilityList} locale={{ emptyText: "暂无专业能力信息" }} columns={[ - { title: "专业能力", dataIndex: "capabilityName" }, + { + title: "行业", + dataIndex: "industryCode", + width: 220, + ellipsis: true, + render: (code) => + QUALIFICATION_INDUSTRY_OPTIONS_MAP[code] || code || "-", + }, + { + title: "专业能力", + dataIndex: "capabilityName", + width: 80, + ellipsis: true, + }, { title: "来源", dataIndex: "sourceName", width: 280 }, ]} /> diff --git a/src/pages/Container/EnterpriseInfo/PersonnelInfo/List/index.js b/src/pages/Container/EnterpriseInfo/PersonnelInfo/List/index.js index 08265a0..e46f47d 100644 --- a/src/pages/Container/EnterpriseInfo/PersonnelInfo/List/index.js +++ b/src/pages/Container/EnterpriseInfo/PersonnelInfo/List/index.js @@ -36,7 +36,8 @@ import { ABILITY_SOURCE_OPTIONS, EVALUATOR_OPTIONS, TITLE_LEVEL_OPTIONS, - TITLE_LEVEL_MAP + TITLE_LEVEL_MAP, + QUALIFICATION_INDUSTRY_OPTIONS, } from "~/enumerate/enterpriseOptions"; import { CERT_LEVEL_OPTIONS_BY_TYPE, @@ -501,6 +502,28 @@ function StaffFormModal({ const watchedEvaluatorFlag = Form.useWatch("evaluatorFlag", form); const wasOpenRef = useRef(false); const inflightDeptRef = useRef(null); + const [capOptionsCache, setCapOptionsCache] = useState({}); + const watchedCapList = Form.useWatch("capabilityAssessment", form); + + const loadCapOptions = async (code) => { + if (!code || capOptionsCache[code]) return; + try { + const res = await Get("/safetyEval/industry-professional-standards", { + industryCode: code, + pageSize: 999, + }); + const list = res?.data || []; + setCapOptionsCache((prev) => ({ + ...prev, + [code]: list.map((item) => ({ + label: item.professionalCapabilityName, + value: item.professionalCapabilityCode, + })), + })); + } catch { + // ignore + } + }; const loadPositionsByDept = async (deptId) => { const id = deptId; @@ -543,6 +566,7 @@ function StaffFormModal({ if (!currentId) { form.resetFields(); setDeptPositionOptions([]); + setCapOptionsCache({}); form.setFieldsValue({ registerEngineerFlag: 2, }); @@ -550,6 +574,7 @@ function StaffFormModal({ } if (!open) { setDeptPositionOptions([]); + setCapOptionsCache({}); } wasOpenRef.current = open; }, [open, currentId, form]); @@ -610,6 +635,18 @@ function StaffFormModal({ } form.setFieldsValue(setFields); + + // 从已有的专业能力数据中恢复各行的行业选项 + if (Array.isArray(setFields.capabilityAssessment)) { + const codes = [ + ...new Set( + setFields.capabilityAssessment + .map((item) => item.industryCode) + .filter(Boolean), + ), + ]; + codes.forEach((code) => loadCapOptions(code)); + } }) .finally(() => { if (!cancelled) setDetailLoading(false); @@ -1159,22 +1196,54 @@ function StaffFormModal({ bordered columns={[ { - title: "专业能力", + title: "行业", + width: 200, render: (_, field) => ( + + ); + }, + }, { title: "来源", width: 280, diff --git a/src/pages/Container/QualApplication/FilingForm/components/OrgPersonnelSelectModal.jsx b/src/pages/Container/QualApplication/FilingForm/components/OrgPersonnelSelectModal.jsx index f6fa939..84f3ab5 100644 --- a/src/pages/Container/QualApplication/FilingForm/components/OrgPersonnelSelectModal.jsx +++ b/src/pages/Container/QualApplication/FilingForm/components/OrgPersonnelSelectModal.jsx @@ -2,6 +2,7 @@ import { Button, Form, Input, Modal, Table, Tag, Space } from "antd"; import { useEffect, useState } from "react"; import { apiGet } from "~/utils/enterpriseInfo/http"; import { CAPABILITY_MAP, CERT_TYPE_MAP } from "~/enumerate/constant"; +import { QUALIFICATION_INDUSTRY_OPTIONS_MAP } from "~/enumerate/enterpriseOptions"; import StaffViewModal from "~/components/StaffViewModal"; export default function OrgPersonnelSelectModal(props) { @@ -121,7 +122,7 @@ export default function OrgPersonnelSelectModal(props) { showTotal: (t) => `共 ${t} 条`, onChange: (page, pageSize) => getData(page, pageSize), }} - scroll={{ x: 800, y: 400 }} + scroll={{ x: 1000, y: 400 }} columns={[ { title: "姓名", @@ -145,15 +146,28 @@ export default function OrgPersonnelSelectModal(props) { { title: "专业能力", dataIndex: "capabilityAssessment", + ellipsis: true, + width: 260, render: (list) => { if (!Array.isArray(list) || !list.length) return "-"; - return list.map((item) => CAPABILITY_MAP[item.professionalCapabilityCode] ).join("、"); + return list + .map((item) => { + const cap = + CAPABILITY_MAP[item.professionalCapabilityCode]; + if (!cap) return null; + const industry = item.industryCode + ? QUALIFICATION_INDUSTRY_OPTIONS_MAP[item.industryCode] + : null; + return industry ? `${industry}【${cap}】` : cap; + }) + .filter(Boolean) + .join("、"); }, }, { title: "证照名称", dataIndex: "personnelCertFilingPageCOList", - width: 200, + render: (list) => { if (!Array.isArray(list) || !list.length) return "-"; const colorMap = { @@ -161,7 +175,7 @@ export default function OrgPersonnelSelectModal(props) { evaluator: "green", }; return ( - + {list.map((item) => ( {CERT_TYPE_MAP[item.certTypeCode] || item.certTypeCode} diff --git a/src/pages/Container/QualApplication/FilingForm/components/PersonnelStep.jsx b/src/pages/Container/QualApplication/FilingForm/components/PersonnelStep.jsx index e2c8e57..d660e5f 100644 --- a/src/pages/Container/QualApplication/FilingForm/components/PersonnelStep.jsx +++ b/src/pages/Container/QualApplication/FilingForm/components/PersonnelStep.jsx @@ -3,6 +3,7 @@ import { useState } from "react"; import { CAPABILITY_MAP, CERT_LEVEL_LABEL_BY_TYPE } from "~/enumerate/constant"; import { TITLE_LEVEL_MAP, + QUALIFICATION_INDUSTRY_OPTIONS_MAP, } from "~/enumerate/enterpriseOptions"; import StaffViewModal from "~/components/StaffViewModal"; import OrgPersonnelSelectModal from "./OrgPersonnelSelectModal"; @@ -113,11 +114,17 @@ const PersonnelStep = ({ personnelList = [], disabled, onAdd, onRemove, manageme render: (list) => { if (!Array.isArray(list) || !list.length) return "-"; return list - .map( - (item) => + .map((item) => { + const cap = CAPABILITY_MAP[item.professionalCapabilityCode] || - item.professionalCapabilityCode, - ) + item.professionalCapabilityCode; + if (!cap) return null; + const industry = item.industryCode + ? QUALIFICATION_INDUSTRY_OPTIONS_MAP[item.industryCode] + : null; + return industry ? `${industry}【${cap}】` : cap; + }) + .filter(Boolean) .join("、"); }, }, diff --git a/src/pages/Container/QualificationReview/FilingTabs/index.js b/src/pages/Container/QualificationReview/FilingTabs/index.js index 602f8b6..01e0b3a 100644 --- a/src/pages/Container/QualificationReview/FilingTabs/index.js +++ b/src/pages/Container/QualificationReview/FilingTabs/index.js @@ -203,12 +203,24 @@ const FilingTabs = ({ capList = []; } } - const codes = - r.professionalCapabilityCodeList || - (Array.isArray(capList) - ? capList.map((c) => (typeof c === "string" ? c : c?.professionalCapabilityCode)).filter(Boolean) - : []) || - []; + // 优先使用 capabilityAssessment 对象(含行业信息) + if (Array.isArray(capList) && capList.length) { + const labels = capList + .map((c) => { + if (typeof c === "string") { + return CAPABILITY_MAP[c] || c; + } + const cap = CAPABILITY_MAP[c?.professionalCapabilityCode] || c?.professionalCapabilityCode; + if (!cap) return null; + const industry = c?.industryCode + ? QUALIFICATION_INDUSTRY_OPTIONS_MAP[c.industryCode] + : null; + return industry ? `${industry}【${cap}】` : cap; + }) + .filter(Boolean); + if (labels.length) return labels.join("、"); + } + const codes = r.professionalCapabilityCodeList || []; return codes.length ? codes.map((code) => CAPABILITY_MAP[code] || code).join("、") : "-"; diff --git a/src/pages/Container/SafetyEvalBusiness/EvalReportLibrary/index.js b/src/pages/Container/SafetyEvalBusiness/EvalReportLibrary/index.js index 5d6273d..74e19d1 100644 --- a/src/pages/Container/SafetyEvalBusiness/EvalReportLibrary/index.js +++ b/src/pages/Container/SafetyEvalBusiness/EvalReportLibrary/index.js @@ -218,7 +218,7 @@ const EvalReportLibrary = (props) => { uploadForm.setFieldsValue({ reportYear: dayjs().year(), evalTypeCode: "PRE", - + secretLevelCode: "NORMAL", issueDate: dayjs(), submitToRegulator: 0, @@ -1108,7 +1108,6 @@ const EvalReportLibrary = (props) => { 报告编号不得重复 报告须完成签字盖章 分类信息用于监管抽查检索 - 涉密内容须先完成脱密处理 diff --git a/src/utils/index.js b/src/utils/index.js index 19ea7db..fb87129 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -1,13 +1,23 @@ import { useEffect, useRef, useState } from "react"; import { CAPABILITY_MAP } from "~/enumerate/constant"; +import { QUALIFICATION_INDUSTRY_OPTIONS_MAP } from "~/enumerate/enterpriseOptions"; /** 渲染专业能力列表,供表格 column render 使用 */ export function renderCapabilityList(list) { if (!Array.isArray(list) || !list.length) return "-"; - return list - .map((item) => CAPABILITY_MAP[item.professionalCapabilityCode]) - .filter(Boolean) - .join("、") || "-"; + return ( + list + .map((item) => { + const cap = CAPABILITY_MAP[item.professionalCapabilityCode]; + if (!cap) return null; + const industry = item.industryCode + ? QUALIFICATION_INDUSTRY_OPTIONS_MAP[item.industryCode] + : null; + return industry ? `${industry}【${cap}】` : cap; + }) + .filter(Boolean) + .join("、") || "-" + ); } /**