From 5e04ffd4c43341ad5d21aa4c3ef95ee140a2329b Mon Sep 17 00:00:00 2001 From: tangjie <122778500@qq.com> Date: Fri, 14 Aug 2026 14:27:44 +0800 Subject: [PATCH 1/4] fix --- .../Container/QualApplication/FilingForm/index.js | 2 +- .../Container/QualificationReview/FilingTabs/index.js | 10 ++-------- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/src/pages/Container/QualApplication/FilingForm/index.js b/src/pages/Container/QualApplication/FilingForm/index.js index bfcee83..dfb8b14 100644 --- a/src/pages/Container/QualApplication/FilingForm/index.js +++ b/src/pages/Container/QualApplication/FilingForm/index.js @@ -49,7 +49,7 @@ function FilingFormPage(props) { const readOnly = query.readOnly; const saveActionHint = - mode === FILING_FORM_MODE.FILED + mode === FILING_FORM_MODE.CHANGE ? "请点击提交后保存" : "请点击暂存或提交后保存"; diff --git a/src/pages/Container/QualificationReview/FilingTabs/index.js b/src/pages/Container/QualificationReview/FilingTabs/index.js index 500ed07..88dee6f 100644 --- a/src/pages/Container/QualificationReview/FilingTabs/index.js +++ b/src/pages/Container/QualificationReview/FilingTabs/index.js @@ -126,16 +126,10 @@ const FilingTabs = ({ [detail.personnelList], ); - /** - * 管理人员判定:technicalDirectorFlag(技术负责人) 或 processControlLeaderFlag(过程控制负责人) 为 true; - * 法定代表人/负责人按岗位名兜底归入管理人员。 - * 备案变更详情人员 CO(QualFilingPersonnelChangeInfoCO)暂未返回 flag 字段,靠岗位名兜底判断(待后端补充 flag)。 - * 变更时间:2026-08-10(按后端人员标识字段拆分) - */ + const isManager = (item) => item.technicalDirectorFlag === true || - item.processControlLeaderFlag === true || - /法定代表人|负责人/.test(item.positionName || ""); + item.processControlLeaderFlag === true ; const managerRows = useMemo(() => { return personnelRows.filter(isManager); From c91abbf6a83db7b15f823fe1fc7ad28a32a5ecf9 Mon Sep 17 00:00:00 2001 From: luotaiqian <1147642922@qq.com> Date: Fri, 14 Aug 2026 14:40:46 +0800 Subject: [PATCH 2/4] bug fix --- src/components/StaffViewModal/index.js | 17 +++- .../PersonnelInfo/List/index.js | 81 +++++++++++++++++-- .../components/OrgPersonnelSelectModal.jsx | 22 ++++- .../FilingForm/components/PersonnelStep.jsx | 15 +++- .../QualificationReview/FilingTabs/index.js | 24 ++++-- .../EvalReportLibrary/index.js | 3 +- src/utils/index.js | 18 ++++- 7 files changed, 153 insertions(+), 27 deletions(-) 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("、") || "-" + ); } /** From d783c826757932a11cf0185237315e7d8cbfc40d Mon Sep 17 00:00:00 2001 From: zhanglei Date: Fri, 14 Aug 2026 15:52:27 +0800 Subject: [PATCH 3/4] =?UTF-8?q?bug=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../QualApplication/SiteReviewNotice/index.js | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/pages/Container/QualApplication/SiteReviewNotice/index.js b/src/pages/Container/QualApplication/SiteReviewNotice/index.js index 4486b4f..4368fb1 100644 --- a/src/pages/Container/QualApplication/SiteReviewNotice/index.js +++ b/src/pages/Container/QualApplication/SiteReviewNotice/index.js @@ -129,7 +129,7 @@ const SiteReviewNotice = (props) => {