马宇豪
2025-05-27 d0d78b9fbe144326f136ee048bb59d314413032e
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>