dev-tmp1
tangjie 2026-08-20 16:04:05 +08:00
parent 6199943ac1
commit 15847d7933
2 changed files with 38 additions and 1 deletions

View File

@ -1,6 +1,6 @@
评价人员任命及专家聘用书
根据市场部下达的评价项目为:                   任务,现任命       担任该安全评价项目组长(负责人)。
根据评价部项目组组建原则及风险分析记录情况,现任命       、      、     、     、     、      为该评价项目组成员;任命     为该评价报告主要编制人、    为该评价报告内部审核人、    为该评价报告技术负责人、   为该评价报告过程控制负责人;聘请所需技术专家    。
根据市场部下达的评价项目为:{projectName} {evalTypeText} 任务,现任命 {projectLeader} 担任该安全评价项目组长(负责人)。
根据评价部项目组组建原则及风险分析记录情况,现任命 {membersText} 为该评价项目组成员;任命 {compiler} 为该评价报告主要编制人、{auditor} 为该评价报告内部审核人、{techLead} 为该评价报告技术负责人、{processControlLead}为该评价报告过程控制负责人;聘请所需技术专家    。
备注事项:
部门经理或负责人:

View File

@ -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 && (
<LayoutFooterPortal slotId="pf-footer-slot">
<Flex justify="flex-end" gap={8}>
<Button onClick={handleExport}>导出Word</Button>
<Button
type="primary"
loading={memberSaveLoading || memberParticipantSaveLoading}