diff --git a/public/QAPJ-CX-2-JL02 评价人员任命及专家聘用书.docx b/public/QAPJ-CX-2-JL02 评价人员任命及专家聘用书.docx
new file mode 100644
index 0000000..e9c2522
--- /dev/null
+++ b/public/QAPJ-CX-2-JL02 评价人员任命及专家聘用书.docx
@@ -0,0 +1,49 @@
+ 评价人员任命及专家聘用书
+
+ 根据市场部下达的评价项目为: {projectName} {evalTypeText} 评价任务,结合项目的特性,现任命 {projectLeader} 担任该安全评价项目组长(负责人), {compiler} 担任该项目报告编制人。
+ 根据评价部项目组组建原则及风险分析记录情况,项目组成员如下:
+
+ 人员组成
+ 姓名
+ 专业
+ 项目负责人
+ {projectLeaderName}
+ {projectLeaderCapacity}
+
+ 项目组成员
+ {firstMemberName}
+ {firstMemberMajor}
+
+ {#memberRows}{name}
+ {major}{/memberRows}
+ 报告编制人
+ {firstCompilerName}
+ {firstCompilerCapacity}
+
+ {#compilerRows}{compilerName}
+ {compilerCapacity}{/compilerRows}
+ 内审人员
+ {firstAuditorName}
+ {firstAuditorCapacity}
+
+ {#auditorRows}{auditorName}
+ {auditorCapacity}{/auditorRows}
+ 技术负责人
+ {firstTechLeadName}
+ {firstTechLeadCapacity}
+
+ {#techLeadRows}{techLeadName}
+ {techLeadCapacity}{/techLeadRows}
+ 过程控制负责人
+ {processControlLeadName}
+ {processControlLeadCapacity}
+ 聘用专家组成员
+
+
+
+
+
+
+ 评价部经理:
+ 年 月 日
+
diff --git a/src/api/safetyEvalBusiness/index.js b/src/api/safetyEvalBusiness/index.js
index daaad93..63a2553 100644
--- a/src/api/safetyEvalBusiness/index.js
+++ b/src/api/safetyEvalBusiness/index.js
@@ -181,7 +181,7 @@ export const evalProjectMemberPage = declareRequest(
export const evalProjectEstablishedAttachSave = declareRequest(
"projectEstablishedAttachSaveLoading",
- "Post > /safetyEval/institution/eval-project-member/saveProjectEstablishedAttach",
+ "Post > @/safetyEval/institution/eval-project-member/saveProjectEstablishedAttach",
);
export const evalProjectEstablishedAttachGet = declareRequest(
diff --git a/src/api/staffInfo/index.js b/src/api/staffInfo/index.js
index 06c0df3..492219e 100644
--- a/src/api/staffInfo/index.js
+++ b/src/api/staffInfo/index.js
@@ -8,6 +8,12 @@ export const staffInfoList = declareRequest(
"staffInfoList: [] | res.data || [] & staffInfoTotal: 0 | res.total || 0",
);
+export const staffInfoRegulationPage = declareRequest(
+ "staffInfoLoading",
+ "Get > /safetyEval/org-personnel/regulationPage",
+ "staffInfoList: [] | res.data || [] & staffInfoTotal: 0 | res.total || 0",
+);
+
export const staffInfoDeptPersonCount = declareRequest(
"staffInfoLoading",
"Get > /safetyEval/org-personnel/deptPersonCount",
@@ -46,4 +52,4 @@ export const queryBasicDisciplineMajor = declareRequest(
"staffInfoLoading",
"Get > /safetyEval/basic-discipline-major",
"basicDisciplineMajorList: [] | res.data || []",
-);
\ No newline at end of file
+);
diff --git a/src/enumerate/constant/index.js b/src/enumerate/constant/index.js
index 655a538..238f47a 100644
--- a/src/enumerate/constant/index.js
+++ b/src/enumerate/constant/index.js
@@ -600,6 +600,17 @@ export const CAPABILITY_MAP = CAPABILITY_OPTIONS.reduce((acc, cur) => {
return acc;
}, {});
+/** 业务范围与所需专业能力配备标准对照(依据《安全评价机构资质条件》应急〔2026〕60号附件) */
+export const INDUSTRY_REQUIRED_CAPABILITIES = {
+ COAL_MINING: ["SAFETY", "MECHANICAL", "ELECTRICAL", "MINING", "VENTILATION", "GEOLOGY", "MINE_CONSTRUCTION"],
+ METAL_NONMETAL_MINING: ["SAFETY", "MECHANICAL", "ELECTRICAL", "MINING", "VENTILATION", "GEOLOGY", "HYDRAULIC_STRUCTURE"],
+ ONSHORE_OIL_GAS: ["SAFETY", "MECHANICAL", "ELECTRICAL", "OIL_PRODUCTION", "STORAGE_AND_TRANSPORT"],
+ ONSHORE_OIL_GAS_PIPELINE: ["OIL_GAS_STORAGE_TRANSPORT", "EQUIPMENT", "INSTRUMENT", "ELECTRICAL", "ANTICORROSION", "SAFETY"],
+ PETROCHEMICAL_CHEMICAL_PHARMACEUTICAL: ["CHEMICAL_PROCESS", "CHEMICAL_MECHANICAL", "AUTOMATION_INSTRUMENT", "ELECTRICAL", "SAFETY"],
+ FIREWORKS_FIRECRACKERS: ["EXPLOSIVES", "EXPLOSION_TECHNOLOGY", "MECHANICAL", "ELECTRICAL", "SAFETY"],
+ METAL_SMELTING: ["SAFETY", "MECHANICAL", "ELECTRICAL", "METALLURGY", "NONFERROUS_METAL"],
+};
+
/** 专业(职称信息) */
export const PROFESSIONAL_MAJOR_OPTIONS = [
{ label: "安全工程", value: "SAFETY_ENGINEERING" },
diff --git a/src/pages/Container/SafetyEvalBusiness/EvalProject/Create/index.js b/src/pages/Container/SafetyEvalBusiness/EvalProject/Create/index.js
index 16186e8..9d46a44 100644
--- a/src/pages/Container/SafetyEvalBusiness/EvalProject/Create/index.js
+++ b/src/pages/Container/SafetyEvalBusiness/EvalProject/Create/index.js
@@ -21,7 +21,7 @@ import { Connect } from "@cqsjjb/jjb-dva-runtime";
import useIndustryOptions from "~/hooks/useIndustryOptions";
import BaiduMapPicker from "~/components/BaiduMapPicker";
import { district } from "~/enumerate/constant";
-import {REGISTER_ENGINEER_CATEGORY_OPTIONS} from '~/enumerate/enterpriseOptions';
+import {QUALIFICATION_INDUSTRY_OPTIONS} from '~/enumerate/enterpriseOptions';
import { phoneRule } from "~/utils/validators";
import { renderCapabilityList } from "~/utils";
import StaffPickerModal from "./StaffPickerModal";
@@ -29,6 +29,7 @@ import StaffPickerModal from "./StaffPickerModal";
import {
EVAL_TYPE_OPTIONS,
CHECKIN_RADIUS_OPTIONS,
+ INDUSTRY_REQUIRED_CAPABILITIES,
} from "~/enumerate/constant";
const { router } = tools;
@@ -102,9 +103,27 @@ const EvalProjectCreate = (props) => {
setMapPickerVisible(false);
};
+ /** 按所选业务范围(配备标准)筛选人员能力,仅提交范围内所需的专业能力条目 */
+ const filterCapacityByIndustry = (item, industryCodes) => {
+ const requiredCaps = industryCodes.flatMap(
+ (code) => INDUSTRY_REQUIRED_CAPABILITIES[code] || [],
+ );
+ const capabilityAssessment= (item.capabilityAssessment || []).filter(item=>item.industryCode === industryCodes[0]) || [];
+ if (!requiredCaps.length || !Array.isArray(capabilityAssessment)) {
+ return capabilityAssessment?.length
+ ? renderCapabilityList(capabilityAssessment, {capFlag: true})
+ : item.capacity;
+ }
+ const matched = capabilityAssessment.filter((cap) =>
+ requiredCaps.includes(cap.professionalCapabilityCode),
+ );
+ return matched.length ? renderCapabilityList(matched, {capFlag: true}) : item.capacity;
+ };
+
const handleSubmit = () => {
form.validateFields().then(async (values) => {
const { planStartDate, planEndDate, ...rest } = values;
+ const industryCodes = String(values.industryCode || "").split(",");
const params = {
...rest,
planStartDate: planStartDate?.format("YYYY-MM-DD"),
@@ -114,9 +133,7 @@ const EvalProjectCreate = (props) => {
name: item.userName,
deptName: item.deptName,
posName: item.postName,
- capacity: item.capabilityAssessment
- ? renderCapabilityList(item.capabilityAssessment)
- : item.capacity,
+ capacity: filterCapacityByIndustry(item, industryCodes),
})),
};
if (projectId) {
@@ -357,18 +374,18 @@ const EvalProjectCreate = (props) => {
}
>
-
+ {/*
-
+ */}
diff --git a/src/pages/Container/SafetyEvalBusiness/ProjectFlow/RiskAnalysisContent.js b/src/pages/Container/SafetyEvalBusiness/ProjectFlow/RiskAnalysisContent.js
index 77b76a2..47f021c 100644
--- a/src/pages/Container/SafetyEvalBusiness/ProjectFlow/RiskAnalysisContent.js
+++ b/src/pages/Container/SafetyEvalBusiness/ProjectFlow/RiskAnalysisContent.js
@@ -304,7 +304,7 @@ const RiskAnalysisContent = ({ readOnly, ...props }) => {
Array.isArray(value) ? value.join(",") : value
}
>
-