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/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..0bf6d9c 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,26 @@ const EvalProjectCreate = (props) => { setMapPickerVisible(false); }; + /** 按所选业务范围(配备标准)筛选人员能力,仅提交范围内所需的专业能力条目 */ + const filterCapacityByIndustry = (item, industryCodes) => { + const requiredCaps = industryCodes.flatMap( + (code) => INDUSTRY_REQUIRED_CAPABILITIES[code] || [], + ); + if (!requiredCaps.length || !Array.isArray(item.capabilityAssessment)) { + return item.capabilityAssessment?.length + ? renderCapabilityList(item.capabilityAssessment, {capFlag: true}) + : item.capacity; + } + const matched = item.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 +132,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 +373,18 @@ const EvalProjectCreate = (props) => { } > -