diff --git a/public/评价人员任命及专家聘用书(空白模板).docx b/public/评价人员任命及专家聘用书(空白模板).docx index 56f7552..2b940e1 100644 --- a/public/评价人员任命及专家聘用书(空白模板).docx +++ b/public/评价人员任命及专家聘用书(空白模板).docx @@ -1,6 +1,6 @@ 评价人员任命及专家聘用书 - 根据市场部下达的评价项目为:                   任务,现任命       担任该安全评价项目组长(负责人)。 - 根据评价部项目组组建原则及风险分析记录情况,现任命       、      、     、     、     、      为该评价项目组成员;任命     为该评价报告主要编制人、    为该评价报告内部审核人、    为该评价报告技术负责人、   为该评价报告过程控制负责人;聘请所需技术专家    。 + 根据市场部下达的评价项目为:{projectName} {evalTypeText} 任务,现任命 {projectLeader} 担任该安全评价项目组长(负责人)。 + 根据评价部项目组组建原则及风险分析记录情况,现任命 {membersText} 为该评价项目组成员;任命 {compiler} 为该评价报告主要编制人、{auditor} 为该评价报告内部审核人、{techLead} 为该评价报告技术负责人、{processControlLead}为该评价报告过程控制负责人;聘请所需技术专家    。 备注事项: 部门经理或负责人: diff --git a/src/pages/Container/SafetyEvalBusiness/ProjectFlow/TeamContent.js b/src/pages/Container/SafetyEvalBusiness/ProjectFlow/TeamContent.js index 0060ce0..f00bdf8 100644 --- a/src/pages/Container/SafetyEvalBusiness/ProjectFlow/TeamContent.js +++ b/src/pages/Container/SafetyEvalBusiness/ProjectFlow/TeamContent.js @@ -16,12 +16,15 @@ import { import { Connect } from "@cqsjjb/jjb-dva-runtime"; import { NS_SAFETY_EVAL_BUSINESS } from "~/enumerate/namespace"; import { tools } from "@cqsjjb/jjb-common-lib"; -import { ROLE_DEFINITIONS } from "~/enumerate/constant"; +import { ROLE_DEFINITIONS, EVAL_TYPE_MAP } from "~/enumerate/constant"; import StatCardGroup from "~/components/StatCardGroup"; import LayoutFooterPortal from "~/components/LayoutFooterPortal"; +import { fillDocxTemplate } from "~/utils/fillDocxTemplate"; const { router } = tools; +const TEAM_TEMPLATE_URL = "/评价人员任命及专家聘用书(空白模板).docx"; + const TeamContent = ({ readOnly, ...props }) => { const { safetyEvalBusiness, @@ -225,6 +228,39 @@ const TeamContent = ({ readOnly, ...props }) => { setSigners((prev) => prev.filter((s) => s.personnelId !== personnelId)); }; + // 导出Word:按当前项目组配置填充模板(聘请所需技术专家、备注事项、部门经理或负责人、年月日保留空白) + const handleExport = async () => { + const namesByRole = (role) => + teamMembers + .filter((m) => m.roles.some((r) => r.role === role)) + .map((m) => m.personnelName) + .join("、"); + const data = { + projectName: evalProjectDetailData?.projectName || "", + evalTypeText: EVAL_TYPE_MAP[evalProjectDetailData?.evalTypeCode] || "", + projectLeader: namesByRole("PROJECT_LEAD"), + membersText: teamMembers + .filter((m) => !m.roles.some((r) => r.role === "PROJECT_LEAD")) + .map((m) => m.personnelName) + .join("、"), + compiler: namesByRole("REPORT_COMPILER"), + auditor: namesByRole("INTERNAL_AUDITOR"), + techLead: namesByRole("TECHNICAL_LEAD"), + processControlLead: namesByRole("PROCESS_CONTROL_LEAD"), + }; + try { + await fillDocxTemplate( + TEAM_TEMPLATE_URL, + data, + `评价人员任命及专家聘用书${data.projectName ? `-${data.projectName}` : ""}.docx`, + { download: true }, + ); + message.success("导出成功"); + } catch { + message.error("导出失败,请重试"); + } + }; + const handleSave = async () => { const allRoles = teamMembers.flatMap((m) => m.roles.map((r) => r.role)); const requiredRoles = [ @@ -523,6 +559,7 @@ const TeamContent = ({ readOnly, ...props }) => { {!readOnly && ( +