From d0d78b9fbe144326f136ee048bb59d314413032e Mon Sep 17 00:00:00 2001 From: 马宇豪 <978517621@qq.com> Date: 星期二, 27 五月 2025 08:45:29 +0800 Subject: [PATCH] 修改导出 --- src/views/analyse/assessApply/components/reportDialog.vue | 634 +++++++++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 504 insertions(+), 130 deletions(-) diff --git a/src/views/analyse/assessApply/components/reportDialog.vue b/src/views/analyse/assessApply/components/reportDialog.vue index ae84a4e..66a32f6 100644 --- a/src/views/analyse/assessApply/components/reportDialog.vue +++ b/src/views/analyse/assessApply/components/reportDialog.vue @@ -1,11 +1,12 @@ <template> <div class="system-menu-dialog-container"> <el-dialog :title="reportDialogState.title" v-model="reportDialogState.reportDialogVisible" width="80%"> + <div style="text-align: center;font-size: 20px;font-weight: bolder;color: #0c4995">{{reportDialogState.reportForm.experimentName}}实验安全风险评估报告表(带<span style="color: red">*</span>为填写内容)</div> <el-form ref="reportFormRef" :rules="reportDialogState.reportFormRules" :model="reportDialogState.reportForm" size="default" label-width="0"> <table class="report-table"> <th class="m-color b-font" style="text-align: center">实验基本信息</th> <tr> - <td class="w-25 m-color required">实验名称</td> + <td class="w-25 m-color">实验名称</td> <td class="w-75 m-color"> <el-form-item prop="experimentName"> <el-input readonly v-model="reportDialogState.reportForm.experimentName" placeholder="请输入实验名称" /> @@ -13,79 +14,83 @@ </td> </tr> <tr> - <td class="w-25 m-color required">实验类型</td> - <td class="w-75 m-color"> - <el-radio-group style="text-align: center" disabled v-model="reportDialogState.reportForm.experimentType"> - <el-radio :label="1">化学类</el-radio> - <el-radio :label="2">生物类</el-radio> - <el-radio :label="3">辐射类</el-radio> - <el-radio :label="4">机电类</el-radio> - <el-radio :label="5">特种设备类</el-radio> - <el-radio :label="6">其他类</el-radio> - </el-radio-group> + <td class="w-25 m-color">实验类型</td> + <td class="w-75" style="text-align: left;padding-left: 11px"> +<!-- <el-radio-group style="text-align: center" disabled v-model="reportDialogState.reportForm.experimentType">--> +<!-- <el-radio :label="1">化学类</el-radio>--> +<!-- <el-radio :label="2">生物类</el-radio>--> +<!-- <el-radio :label="3">辐射类</el-radio>--> +<!-- <el-radio :label="4">机电类</el-radio>--> +<!-- <el-radio :label="5">特种设备类</el-radio>--> +<!-- <el-radio :label="6">其他类</el-radio>--> +<!-- </el-radio-group>--> +<!-- {{reportDialogState.experimentTypeList.find(i=>i.id === reportDialogState.reportForm.experimentAndType)?.name}}--> + {{typeValue}} </td> </tr> <tr> - <td class="w-25 m-color required">负责人</td> + <td class="w-25 m-color">负责人</td> <td class="w-25 m-color"> - <el-select style="width: 100%" disabled v-model="reportDialogState.reportForm.liabilityUserId" clearable filterable @change="getLiabilityUserPhone($event)"> - <el-option - v-for="item in reportDialogState.systemPersonList" - :key="item.id" - :value="item.id" - :label="item.realName" - ></el-option> - </el-select> +<!-- <el-select style="width: 100%" disabled v-model="reportDialogState.reportForm.liabilityUserId" clearable filterable @change="getLiabilityUserPhone($event)">--> +<!-- <el-option--> +<!-- v-for="item in reportDialogState.systemPersonList"--> +<!-- :key="item.id"--> +<!-- :value="item.id"--> +<!-- :label="item.realName"--> +<!-- ></el-option>--> +<!-- </el-select>--> + <el-input readonly v-model="reportDialogState.reportForm.personUser" /> </td> - <td class="w-25 m-color required">电话</td> + <td class="w-25 m-color">电话</td> <td class="w-25 m-color"> - <el-input readonly v-model="reportDialogState.reportForm.liabilityUserPhone" /> + <el-input disabled v-model="reportDialogState.reportForm.personUserPhone" /> </td> </tr> <tr> - <td class="w-25 m-color required">安全负责人</td> + <td class="w-25 m-color">安全负责人</td> <td class="w-25 m-color"> - <el-select v-if="reportDialogState.reportForm.safeLiabilityUserId" style="width: 100%" disabled v-model="reportDialogState.reportForm.safeLiabilityUserId" @change="getSafeLiabilityUserPhone($event)" clearable filterable> - <el-option - v-for="item in reportDialogState.allPersonList" - :key="item.id" - :value="item.id" - :label="item.personName" - ></el-option> - </el-select> - <el-input v-else disabled v-model="reportDialogState.reportForm.safeLiabilityUser" /> +<!-- <el-select v-if="reportDialogState.reportForm.safeLiabilityUserId" style="width: 100%" disabled v-model="reportDialogState.reportForm.safeLiabilityUserId" @change="getSafeLiabilityUserPhone($event)" clearable filterable>--> +<!-- <el-option--> +<!-- v-for="item in reportDialogState.allPersonList"--> +<!-- :key="item.id"--> +<!-- :value="item.id"--> +<!-- :label="item.personName"--> +<!-- ></el-option>--> +<!-- </el-select>--> + <el-input disabled v-model="reportDialogState.reportForm.safePersonUser" /> </td> - <td class="w-25 m-color required">电话</td> + <td class="w-25 m-color">电话</td> <td class="w-25 m-color"> - <el-input readonly v-model="reportDialogState.reportForm.safeLiabilityUserPhone" /> + <el-input readonly v-model="reportDialogState.reportForm.safePersonUserPhone" /> </td> </tr> <tr> - <td class="w-25 m-color required">部门</td> + <td class="w-25 m-color">部门</td> <td class="w-75 m-color"> <el-input readonly v-model="reportDialogState.reportForm.dep" /> </td> </tr> <tr class="m-color b-font" style="text-align: center">实验场所</tr> <tr> - <td class="w-14 m-color required">场所名称</td> + <td class="w-14 m-color">场所名称</td> <td class="w-14 m-color">所在楼栋</td> <td class="w-14 m-color">房间</td> <td class="w-14 m-color">有无消防设施</td> <td class="w-14 m-color">有无隔断</td> <td class="w-14 m-color">场所性质</td> </tr> - <tr v-for="(item,index) in reportDialogState.reportForm.siteList" :key="index"> + <tr v-for="(item,index) in reportDialogState.reportForm.experimentSite" :key="index"> <td class="w-14"> - <el-select disabled filterable v-model="item.siteId"> - <el-option - v-for="item in reportDialogState.allRoomList" - :key="item.id" - :value="item.id" - :label="item.siteName" - > - </el-option> - </el-select> +<!-- <el-select disabled filterable v-model="item.siteId">--> +<!-- <el-option--> +<!-- v-for="item in reportDialogState.allRoomList"--> +<!-- :key="item.id"--> +<!-- :value="item.id"--> +<!-- :label="item.siteName"--> +<!-- >--> +<!-- </el-option>--> +<!-- </el-select>--> + <el-input disabled v-model="item.siteName" /> </td> <td class="w-14"> <el-input disabled v-model="item.floor" /> @@ -103,73 +108,117 @@ <div>{{item.siteType}}</div> </td> </tr> - <tr> - <td class="w-25 m-color required">评估人</td> - <td class="w-25 m-color"> - <el-select style="width: 100%" :disabled="reportDialogState.disabled" v-model="reportDialogState.reportForm.assessUserId" clearable filterable> - <el-option - v-for="item in reportDialogState.allPersonList" - :key="item.id" - :value="item.id" - :label="item.personName" - ></el-option> - </el-select> - </td> - <td class="w-25 m-color required">评估时间</td> - <td class="w-25 m-color"> - <el-date-picker :disabled="reportDialogState.disabled" type="datetime" format="YYYY/MM/DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" v-model="reportDialogState.reportForm.assessTime" /> - </td> - </tr> <tr class="m-color b-font" style="text-align: center">实验概况</tr> <tr> - <el-input type="textarea" :autosize="{ minRows: 3}" :disabled="reportDialogState.disabled" v-model="reportDialogState.reportForm.experimentDesc" placeholder="(简要描述实验原理、实验步骤、所用试剂或材料设备等)" /> +<!-- <el-input type="textarea" :autosize="{ minRows: 3}" disabled v-model="reportDialogState.reportForm.experimentDesc" placeholder="(简要描述实验原理、实验步骤、所用试剂或材料设备等)" />--> + <el-input type="textarea" :autosize="{ minRows: 3}" disabled v-model="reportDialogState.reportForm.process" placeholder="(简要描述实验原理、实验步骤、所用试剂或材料设备等)" /> </tr> <tr class="m-color b-font" style="text-align: center">实验涉及的危险源</tr> <tr> - <td class="w-25 m-color required">危险源种类</td> + <td class="w-25 m-color">危险源种类</td> <td class="w-75 m-color"> - <el-radio-group :disabled="reportDialogState.disabled" v-model="reportDialogState.reportForm.dangerSource"> - <el-radio :label="1">化学安全</el-radio> - <el-radio :label="2">辐射安全</el-radio> - <el-radio :label="3">特种设备安全</el-radio> - <el-radio :label="4">机电安全</el-radio> - <el-radio :label="5">电气安全</el-radio> - <el-radio :label="6">生物安全</el-radio> - <el-radio :label="7">激光安全</el-radio> - <el-radio :label="8">其他安全</el-radio> - </el-radio-group> +<!-- <el-radio-group disabled v-model="reportDialogState.reportForm.dangerSource">--> +<!-- <el-radio :label="1">化学安全</el-radio>--> +<!-- <el-radio :label="2">辐射安全</el-radio>--> +<!-- <el-radio :label="3">特种设备安全</el-radio>--> +<!-- <el-radio :label="4">机电安全</el-radio>--> +<!-- <el-radio :label="5">电气安全</el-radio>--> +<!-- <el-radio :label="6">生物安全</el-radio>--> +<!-- <el-radio :label="7">激光安全</el-radio>--> +<!-- <el-radio :label="8">其他安全</el-radio>--> +<!-- </el-radio-group>--> + <el-checkbox-group disabled class="checkTip"> + <el-checkbox v-for="item in reportDialogState.reportForm.riskSourceType" :label="item.riskSourceType" :checked="item.status==1?true:false"/> + </el-checkbox-group> </td> </tr> + <select-danger ref="selectDangerRef" v-model:data="reportDialogState.reportForm.riskSource" v-model:disabled="reportDialogState.disabled"></select-danger> - <tr class="m-color b-font" style="text-align: center">安全风险分析(总结)</tr> + +<!-- <tr class="m-color b-font required" style="text-align: center">安全风险分析(总结)</tr>--> +<!-- <tr>--> +<!-- <el-input type="textarea" :autosize="{ minRows: 3}" :disabled="reportDialogState.disabled" v-model="reportDialogState.reportForm.safeRiskAnalysis" placeholder="1.实验过程中是否有爆炸、火灾、腐蚀、中毒风险、产生危险废弃物等(根据危险源清单,分析实验过程中可能对人身安全、人体健康、实验室环境和周边环境等带来的负面影响)" />--> +<!-- </tr>--> + + <tr class="m-color b-font required" style="text-align: center">安全风险分析(总结)</tr> <tr> <el-input type="textarea" :autosize="{ minRows: 3}" :disabled="reportDialogState.disabled" v-model="reportDialogState.reportForm.safeRiskAnalysis" placeholder="1.实验过程中是否有爆炸、火灾、腐蚀、中毒风险、产生危险废弃物等(根据危险源清单,分析实验过程中可能对人身安全、人体健康、实验室环境和周边环境等带来的负面影响)" /> </tr> <tr class="m-color b-font" style="text-align: center">拟采取的防护和应急措施</tr> <tr> - <el-input type="textarea" :autosize="{ minRows: 3}" :disabled="reportDialogState.disabled" v-model="reportDialogState.reportForm.emergencyMeasure" placeholder="" /> + <el-input type="textarea" :autosize="{ minRows: 3}" disabled v-model="reportDialogState.reportForm.emergencyMeasure" placeholder="" /> </tr> - <tr class="m-color b-font" style="text-align: center">实验和实验项目综合风险等级评定</tr> + <tr class="m-color b-font required" style="text-align: center">实验和实验项目综合风险等级评定</tr> <tr> - <td class="m-color" style="width: 100%"> - <el-radio-group :disabled="reportDialogState.disabled" v-model="reportDialogState.reportForm.assessLevel"> - <el-radio :label="4">重大风险(一级)</el-radio> - <el-radio :label="3">较大风险(二级)</el-radio> - <el-radio :label="2">一般风险(三级)</el-radio> - <el-radio :label="1">低风险(四级)</el-radio> + <td class="m-color" style="width: 100%;height: 65px"> + <el-radio-group :disabled="reportDialogState.disabled" v-model="reportDialogState.reportForm.assessLevel" class="checkTip"> + <div style="display: flex;justify-content: center"> + <div style="display: flex;flex-direction: column"> + <el-radio :label="1">重大风险(一级)</el-radio> + <el-tag v-if="reportDialogState.reportForm.assessLevel == 1" class="tag-style tag-bg1" /> + </div> + <div style="display: flex;flex-direction: column"> + <el-radio :label="2">较大风险(二级)</el-radio> + <el-tag v-if="reportDialogState.reportForm.assessLevel == 2" class="tag-style tag-bg2" /> + </div> + <div style="display: flex;flex-direction: column"> + <el-radio :label="3">一般风险(三级)</el-radio> + <el-tag v-if="reportDialogState.reportForm.assessLevel == 3" class="tag-style tag-bg3" /> + </div> + <div style="display: flex;flex-direction: column"> + <el-radio :label="4">低风险(四级)</el-radio> + <el-tag v-if="reportDialogState.reportForm.assessLevel == 4" style="width: 43px;margin-left: 20px;" class="tag-bg4" /> + </div> + </div> </el-radio-group> </td> </tr> <tr> - <el-input type="textarea" :autosize="{ minRows: 3}" :disabled="reportDialogState.disabled" v-model="reportDialogState.reportForm.reskLevelReason" placeholder="请输入评定依据" /> + <el-input type="textarea" :autosize="{ minRows: 3}" :disabled="reportDialogState.disabled" v-model="reportDialogState.reportForm.description" placeholder="评定依据(必填)" /> </tr> + <tr> + <td class="w-25 m-color required">评估人</td> + <td class="w-75 m-color"> + <!-- <el-select style="width: 100%" :disabled="reportDialogState.disabled" v-model="reportDialogState.reportForm.assessPerson" clearable filterable>--> + <!-- <el-option--> + <!-- v-for="item in reportDialogState.allPersonList"--> + <!-- :key="item.id"--> + <!-- :value="item.id"--> + <!-- :label="item.personName"--> + <!-- ></el-option>--> + <!-- </el-select>--> + <el-input :disabled="reportDialogState.disabled" v-model="reportDialogState.reportForm.assessPerson" placeholder="评估人" /> + </td> + <!-- <td class="w-25 m-color required">评估时间</td>--> + <!-- <td class="w-25 m-color">--> + <!-- <el-date-picker :disabled="reportDialogState.disabled" type="datetime" format="YYYY/MM/DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" v-model="reportDialogState.reportForm.assessTime" />--> + <!-- </td>--> + </tr> + <tr v-if="reportDialogState.reportForm.person?.length>0" class="m-color b-font" style="text-align: center">审批内容</tr> + <template v-if="reportDialogState.reportForm.person?.length > 0"> + <template v-for="item in reportDialogState.reportForm.person"> + <tr> + <td class="w-25 m-color">{{item.approveStage}}</td> + <td class="w-25">{{item.approvePerson}}</td> + <td class="w-25 m-color">审批结果</td> + <td class="w-25" :class="item.approveStatus==3?'redTit':''">{{item.approveStatus==1?'未审批':item.approveStatus==2?'通过':'未通过'}}</td> + </tr> + <tr> + <td class="w-25 m-color autoheight">审批意见</td> + <td class="w-75 autoheight l-border"> + {{ item.approveDesc }} + </td> + </tr> + </template> + </template> </table> </el-form> <template #footer> <span class="dialog-footer" style="padding-top:10px;text-align: center !important;"> <el-button @click="reportDialogState.reportDialogVisible = !reportDialogState.reportDialogVisible" size="default">取 消</el-button> - <el-button type="primary" v-if="!reportDialogState.disabled" @click="onSubmitProject" size="default">提交审批</el-button> + <el-button type="primary" v-if="!reportDialogState.disabled" @click="onSubmitProject()" size="default">提交审批</el-button> + <el-button type="primary" v-if="reportDialogState.disabled" @click="startGeneration()" size="default">导出评估报告</el-button> </span> </template> </el-dialog> @@ -178,12 +227,14 @@ <script setup lang="ts"> import {defineAsyncComponent, nextTick, onMounted, reactive, ref} from "vue"; +import {generateWordDocument} from "/@/views/experiment/developing/components/exportWord.js"; import {ElMessage} from "element-plus"; import {projectApi} from "/@/api/experiment/project"; import {personApi} from "/@/api/basic/person"; import {userApi} from "/@/api/systemManage/user"; import {roomApi} from "/@/api/basic/room"; - +import {assessApplyApi} from "/@/api/analyse/assessApply"; +const typeValue = ref([]) const SelectDanger = defineAsyncComponent(() => import('./selectDanger.vue')) const selectDangerRef = ref() const reportFormRef = ref() @@ -191,30 +242,101 @@ title: '', disabled: false, reportDialogVisible: false, - reportForm: { + reportForm: { id: null, experimentName: "", experimentType: null, - liabilityUserId: null, - liabilityUserPhone: '', - safeLiabilityUserId: null, - safeLiabilityUser: '', - safeLiabilityUserPhone: '', + personUser: '', + personUserId: null, + personUserPhone: '', + safePersonUserId: null, + safePersonUser: '', + safePersonUserPhone: '', dep: "", - siteList: [], + experimentSite: [], experimentDesc: '', - safeRiskAnalysis: '', emergencyMeasure: '', + assessPerson:'', + safeRiskAnalysis: '', assessLevel:null, - riskSource: [] + riskSource: [], + riskSourceType: [], + description: '', + person:[], + process: '', + experimentAndType: [], + oldRiskAssess: [] }, - reportFormRules: {}, + reportFormRules: { + assessPerson: [{ required: true, message: '请填写评估人员', trigger: 'blur' }], + safeRiskAnalysis: [{ required: true, message: '请填写安全风险分析', trigger: 'blur' }], + assessLevel: [{ required: true, message: '请选择风险等级评定', trigger: 'blur' }], + description: [{ required: true, message: '请填写风险等级评定依据', trigger: 'blur' }], + }, allPersonList: [], allRoomList: [], + phaList: [], + details: {}, systemPersonList: [], + experimentTypeList: [ + {id: 1, name: '化学类'}, + {id: 2, name: '生物类'}, + {id: 3, name: '辐射类'}, + {id: 4, name: '机电类'}, + {id: 5, name: '特种设备类'}, + {id: 6, name: '其它类'} + ], + stuffTypeList: [ + {id: 1, name: '化学试剂'}, + {id:2, name: '基础材料'} + ], + stuffStorageList: [ + {id:1, name: '智能试剂柜'}, + {id:2, name: '普通储存柜'}, + ], + stuffUnitList: [ + {id:1, name: 'g'}, + {id:2, name: 'kg'}, + {id:3, name: 'ml'}, + {id:4, name: 'l'}, + ], + classifyList:[ + {id:1, name: '有机'}, + {id:2, name: '酸'}, + {id:3, name: '碱性'}, + {id:4, name: '固体废弃物'}, + {id:5, name: '医疗废弃物'}, + {id:6, name: '过期化学品'}, + {id:7, name: '其他'} + ], + wasteStorageList: [ + {id:1, name: '吨袋'}, + {id:2, name: '吨桶'}, + {id:3, name: '小桶'}, + {id:4, name: '托盘'}, + {id:5, name: '其他'}, + ], + riskSourceTypeList: [ + {id: 1, name: '化学安全'}, + {id: 2, name: '辐射安全'}, + {id: 3, name: '生物安全'}, + {id: 4, name: '机电安全'}, + {id: 5, name: '电气安全'}, + {id: 6, name: '激光安全'}, + {id: 7, name: '特种设备安全'}, + {id: 8, name: '其他安全'}, + ], + riskLevelList: [ + {id: 1, name: '重大风险(一级)'}, + {id: 2, name: '较大风险(二级)'}, + {id: 3, name: '一般风险(三级)'}, + {id: 4, name: '低风险(四级)'}, + ], }) const showReportDialog = (title: string, value: ProjectType, allRoomList: RoomType []) => { + getReportData(value.id) + reportDialogState.details = value reportDialogState.reportDialogVisible = true; reportDialogState.allRoomList = allRoomList setTimeout(() => { @@ -223,19 +345,26 @@ if(title === '提交'){ reportDialogState.title = '提交报告'; reportDialogState.disabled = false - for(let i in reportDialogState.reportForm) { - if(isValidKey(i, reportDialogState.reportForm)) { - reportDialogState.reportForm[i] = value[i]; - } - } + // for(let i in reportDialogState.reportForm) { + // if(isValidKey(i, reportDialogState.reportForm)) { + // reportDialogState.reportForm[i] = value[i]; + // } + // } + reportDialogState.reportForm.riskSource = [] + setTimeout(()=>{ + selectDangerRef.value.dangerSourceState.dangerList = [] + },2000) + }else if(title === '修改'){ + reportDialogState.title = '修改报告'; + reportDialogState.disabled = false }else{ reportDialogState.title = '查看'; reportDialogState.disabled = true - for(let i in reportDialogState.reportForm) { - if(isValidKey(i, reportDialogState.reportForm)) { - reportDialogState.reportForm[i] = value[i]; - } - } + // for(let i in reportDialogState.reportForm) { + // if(isValidKey(i, reportDialogState.reportForm)) { + // reportDialogState.reportForm[i] = value[i]; + // } + // } } }; @@ -243,33 +372,97 @@ return key in object; }; -const getLiabilityUserPhone = (value: number)=>{ - const data = reportDialogState.systemPersonList.find(item => item.id === value) as AllPersonListType - reportDialogState.reportForm.liabilityUserPhone = data.phone -} - -const getSafeLiabilityUserPhone = (value: number)=>{ - const data = reportDialogState.allPersonList.find(item => item.id === value) as AllPersonListType - reportDialogState.reportForm.safeLiabilityUserPhone = data.phone -} - -const hasSafeSystem = (value: number) =>{ - if(value == 2){ - reportDialogState.reportForm.safeInformationSystem = '' +const getReportData = async (id:number|null|undefined) => { + let res = await assessApplyApi().getRiskReportPage({ + experimentId: id, + pageIndex: 1, + pageSize: 10, + tag: 3, + exportTag:true + }); + if(res.data.code === 100){ + reportDialogState.reportForm = { + id: null, + experimentName: "", + experimentType: null, + personUser: '', + personUserId: null, + personUserPhone: '', + safePersonUserId: null, + safePersonUser: '', + safePersonUserPhone: '', + dep: "", + experimentSite: [], + experimentDesc: '', + emergencyMeasure: '', + assessPerson:'', + safeRiskAnalysis: '', + assessLevel:null, + riskSource: [], + riskSourceType: [], + description: '', + person:[], + process: '', + experimentAndType: [], + oldRiskAssess: [] + } + if(res.data.data&&res.data.data.length==0){ + ElMessage({ + type: 'warning', + message: '暂时无法获取实验信息,可能评估流程未完成,用户无法查看' + }); + }else{ + for(let i in reportDialogState.reportForm) { + if(isValidKey(i, reportDialogState.reportForm)) { + reportDialogState.reportForm[i] = res.data.data[0][i]; + } + } + reportDialogState.phaList = res.data.data[0].riskPlanMethodBO ?res.data.data[0].riskPlanMethodBO: [] + const arr = reportDialogState.reportForm.experimentAndType.map(item => item.type.experimentType) + typeValue.value = arr.join(',') + } + }else{ + ElMessage({ + type: 'warning', + message: res.data.msg + }); } -} +}; + +// const getLiabilityUserPhone = (value: number)=>{ +// const data = reportDialogState.systemPersonList.find(item => item.id === value) as AllPersonListType +// reportDialogState.reportForm.liabilityUserPhone = data.phone +// } +// +// const getSafeLiabilityUserPhone = (value: number)=>{ +// const data = reportDialogState.allPersonList.find(item => item.id === value) as AllPersonListType +// reportDialogState.reportForm.safeLiabilityUserPhone = data.phone +// } + +// const hasSafeSystem = (value: number) =>{ +// if(value == 2){ +// reportDialogState.reportForm.safeInformationSystem = '' +// } +// } const onSubmitProject = () => { reportFormRef.value.validate(async(valid: boolean) => { if(valid){ - if(reportDialogState.title === '新增'){ - let res = await projectApi().addDevelop(reportDialogState.reportForm); + reportDialogState.reportForm.riskSource = selectDangerRef.value.dangerSourceState.dangerList + const { id,assessPerson,riskSource,safeRiskAnalysis,assessLevel,description } = reportDialogState.reportForm + const data = { id,assessPerson,riskSource,safeRiskAnalysis,assessLevel,description } + if(reportDialogState.title === '提交报告'){ + for(let i in data.riskSource){ + riskSource[i].reportId = data.id + riskSource[i].riskSourceIndex = i + 1 + } + let res = await assessApplyApi().updateRiskReport(data); if(res.data.code === 100){ emit('refresh') reportDialogState.reportDialogVisible = false; ElMessage({ type: 'success', - message: '新增成功' + message: '提交报告成功' }) }else{ ElMessage({ @@ -278,13 +471,13 @@ }); } }else{ - let res = await projectApi().modProject(reportDialogState.reportForm) + let res = await assessApplyApi().updateRiskReportInfo(data) if(res.data.code === 100){ emit('refresh') reportDialogState.reportDialogVisible = false; ElMessage({ type: 'success', - message: '整改已提交' + message: '修改报告成功' }) }else{ ElMessage({ @@ -304,10 +497,13 @@ const getPersonList = async () => { let res = await userApi().getUserList({ - roleId: 1, - usePage: false, pageIndex: 1, - pageSize: 10 + pageSize: 99999, + searchParams:{ + roleId: null, + name: '', + realName: '' + } }); if(res.data.code === 100){ reportDialogState.systemPersonList = JSON.parse(JSON.stringify(res.data.data)); @@ -329,6 +525,122 @@ message: res.data.msg }) } +}; + +const templatePath = '/static/exampleScience.docx' + +const startGeneration = async () => { + let data = JSON.parse(JSON.stringify(reportDialogState.reportForm)) + const experimentTypeNameList = data.experimentAndType.map(item => { + return { + id: item.type.id, + experimentType: item.type.experimentType + } + }) + + const experimentTypeListExample = JSON.parse(JSON.stringify(reportDialogState.experimentTypeList)) + experimentTypeListExample.forEach(item => { + if(experimentTypeNameList.some(i => i.experimentType == item.name)){ + item.label = item.name + item.checked = false + }else { + item.label = item.name + item.checked = true + } + }) + data.typeList = experimentTypeListExample + data.depNameList = data.dep + const siteTest = data.experimentSite.map(item => item.siteName) + data.siteList = siteTest.join(',') + + const riskType = data.riskSourceType.filter(item => item.status == 1) + const riskListExample = reportDialogState.riskSourceTypeList + riskListExample.forEach(item => { + if(riskType.some(i => i.riskSourceType === item.name)){ + item.label = item.name + item.checked = false + }else { + item.label = item.name + item.checked = true + } + }) + data.riskList = riskListExample + + const level = data.assessLevel.toString().split(',') + const levelExample = JSON.parse(JSON.stringify(reportDialogState.riskLevelList)) + levelExample.forEach(item => { + if(level.some(i => i == item.id)){ + item.label = item.name + item.checked = false + }else { + item.label = item.name + item.checked = true + } + }) + data.riskLevel = levelExample + data.tableData = data.oldRiskAssess ?data.oldRiskAssess: [] + data.phaData = reportDialogState.phaList?reportDialogState.phaList.map(item=>{ + return { + ...item, + riskLevelName: item.riskLevel == 1?'低风险':item.riskLevel == 2?'一般风险':item.riskLevel == 3?'较大风险':item.riskLevel == 4?'重大风险':'--' + } + }):[] + data.siteData = data.experimentSite?data.experimentSite.map(item=>{ + return { + ...item, + hasFireFacilities: item.fireFacilities== 1 ? '有' : item.fireFacilities== 2 ? '无' : '', + hasPartitionStatus: item.partitionStatus == 1 ? '有' : item.partitionStatus == 2 ? '无' : '' + } + }):[] + data.materialData = reportDialogState.details.stuffList?reportDialogState.details.stuffList.map(item=>{ + return { + ...item, + typeName: reportDialogState.stuffTypeList.find(i=>i.id == item.stuffType)?.name, + storageName: reportDialogState.stuffStorageList.find(i=>i.id == item.stuffStorage)?.name, + unitName: reportDialogState.stuffUnitList.find(i=>i.id == item.stuffUnit)?.name + } + }):[] + data.equipData = reportDialogState.details.deviceList?reportDialogState.details.deviceList.map(item=>{ + return { + ...item, + isSpecial: item.specialDevice == 1 ? '是' : item.specialDevice == 2 ? '否' : '' + } + }):[] + data.dangerData = reportDialogState.details.hazardousWasteList?reportDialogState.details.hazardousWasteList.map((item,index)=>{ + return { + ...item, + sort: index + 1, + classifyName: reportDialogState.classifyList.find(i=>i.id == item.classify)?.name, + wasteStorageName: reportDialogState.wasteStorageList.find(i=>i.id == item.wasteStorage)?.name + } + }):[] + data.peopleData = reportDialogState.details.persons?reportDialogState.details.persons.map((item,index)=>{ + return { + ...item, + sex: item.personGender == 1 ? '男' : item.personGender == 2 ? '女' : '' + } + }):[] + data.emergyData = reportDialogState.details.emergencyList?reportDialogState.details.emergencyList:[] + const {experimentStep,experimentMethod,process,keyProcess,measure,timeout,timeoutManager,closed,unclosedManager,explosionProof,fireProof,poisonProof} = reportDialogState.details + data = {...data,experimentStep,experimentMethod,process,keyProcess,measure,timeout:timeout == 1?'存在':timeout == 2?'不存在':'',timeoutManager,closed:closed == 1?'存在':closed == 2?'不存在':'',unclosedManager,explosionProof,fireProof,poisonProof} + + data.riskSource = data.riskSource ? data.riskSource.map(item => { + return { + ...item, + description: item.description ? item.description: '' + } + }) : [] + + data.safeRiskAnalysis = data.safeRiskAnalysis ?data.safeRiskAnalysis : '' + + try { + generateWordDocument(templatePath, data, `材料科学姑苏实验室安全风险评估表---${data.experimentName}.docx`); + } catch (error){ + ElMessage({ + type: 'warning', + message: '失败' + }); + } }; const emit = defineEmits(['refresh']); @@ -365,6 +677,14 @@ height: 44px; line-height: 42px; border-bottom: 1px solid #ccc; + + &.required { + &::before { + content: "*"; + display: inline-block; + color: red; + } + } &:last-of-type { border-bottom: none; @@ -423,6 +743,10 @@ width: 75%; } +&.redTit{ + color: red; +} + .ant-input { height: 100%; border: none; @@ -445,7 +769,22 @@ .m-color { color: #0c4995; } - +.tag-style{ + width: 58px; + margin-left: 20px; +} +.tag-bg1 { + background: rgba(255,0,0,0.65); +} +.tag-bg2 { + background: rgba(248,82,8,0.65); +} +.tag-bg3 { + background: rgba(247,255,0,0.65); +} +.tag-bg4 { + background: rgba(0,112,192,0.65); +} .roomSelect{ ::v-deep(.el-popper){ .el-select-dropdown__item{ @@ -491,6 +830,41 @@ display: flex; justify-content: center; } +:deep(.el-tag){ + border: none; +} </style> +<style> +.checkTip{ + .is-disabled{ + .el-checkbox__label{ + color: #606266 !important + } + .el-radio__label{ + color: #606266 !important + } + &.is-checked{ + .el-checkbox__label{ + color: #409eff !important + } + .el-radio__label{ + color: #409eff !important + } + .el-checkbox__inner{ + background-color: #409eff; + &::after{ + border-color: #fff !important + } + } + .el-radio__inner{ + background-color: #409eff !important; + &::after{ + background-color: #fff !important + } + } + } + } +} +</style> \ No newline at end of file -- Gitblit v1.9.2