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: "专业能力",
+ render: (_, field) => {
+ const rowIndustryCode =
+ watchedCapList?.[field.name]?.industryCode;
+ const rowOptions = rowIndustryCode
+ ? capOptionsCache[rowIndustryCode] || []
+ : CAPABILITY_OPTIONS;
+ return (
+
+
+
+ );
+ },
+ },
{
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) => {