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..510ca0a 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,
@@ -322,6 +323,8 @@ function PersonnelInfoPage(props) {
{
title: "专业能力",
dataIndex: "capabilityAssessment",
+
+ ellipsis: true,
render: renderCapabilityList,
},
{
@@ -501,6 +504,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 +568,7 @@ function StaffFormModal({
if (!currentId) {
form.resetFields();
setDeptPositionOptions([]);
+ setCapOptionsCache({});
form.setFieldsValue({
registerEngineerFlag: 2,
});
@@ -550,6 +576,7 @@ function StaffFormModal({
}
if (!open) {
setDeptPositionOptions([]);
+ setCapOptionsCache({});
}
wasOpenRef.current = open;
}, [open, currentId, form]);
@@ -610,6 +637,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 +1198,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] || []
+ : [];
+ 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/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/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) => {