| | |
| | | data: params |
| | | }); |
| | | }, |
| | | |
| | | getRiskReportPage: (params: object) => { |
| | | return request({ |
| | | url: import.meta.env.VITE_API_URL + '/report/select/selectRiskReportPage', |
| | | method: 'post', |
| | | data: params |
| | | }); |
| | | }, |
| | | |
| | | toRiskReport: (params: object) => { |
| | | return request({ |
| | | url: import.meta.env.VITE_API_URL + '/report/insert/insertRiskReport', |
| | | method: 'post', |
| | | data: params |
| | | }); |
| | | }, |
| | | |
| | | updateRiskReport: (params: object) => { |
| | | return request({ |
| | | url: import.meta.env.VITE_API_URL + '/report/update/updateRiskReport', |
| | | method: 'post', |
| | | data: params |
| | | }); |
| | | }, |
| | | |
| | | updateRiskReportInfo: (params: object) => { |
| | | return request({ |
| | | url: import.meta.env.VITE_API_URL + '/report/update/updateRiskReportInfo', |
| | | method: 'post', |
| | | data: params |
| | | }); |
| | | }, |
| | | |
| | | uploadReport: (params: object) => { |
| | | return request({ |
| | | url: import.meta.env.VITE_API_URL + '/report/update/report', |
| | | method: 'post', |
| | | data: params |
| | | }); |
| | | }, |
| | | }; |
| | | } |
| | |
| | | method: 'post', |
| | | data: params |
| | | }); |
| | | }, |
| | | |
| | | reSendJob: (params: object)=>{ |
| | | return request({ |
| | | url: import.meta.env.VITE_API_URL + '/risk/update/appoint', |
| | | method: 'post', |
| | | data: params |
| | | }); |
| | | } |
| | | }; |
| | | } |
| | |
| | | <el-menu |
| | | router |
| | | :default-active="defaultActive" |
| | | background-color="transparent" |
| | | :collapse="isCollapse" |
| | | :unique-opened="true" |
| | | :collapse-transition="false" |
| | | active-text-color="#6ff8ff" |
| | | background-color="transparent" |
| | | text-color="#fff" |
| | | > |
| | | <template v-for="val in menuLists"> |
| | | <el-sub-menu :index="val.path" v-if="val.children && val.children.length > 0" :key="val.path"> |
| | |
| | | async setUserInfos(value: any) { |
| | | this.userInfos.userName = value.realName; |
| | | this.userInfos.uid = value.uid; |
| | | this.userInfos.roles = value.role; |
| | | this.userInfos.roles = value.roles; |
| | | this.userInfos.depId = value.depId |
| | | // const userName = Cookies.get('userName'); |
| | | // // 模拟数据 |
| | |
| | | width: 100%; |
| | | height: 100%; |
| | | .layout-aside { |
| | | background: var(--next-bg-menuBar); |
| | | //background: var(--next-bg-menuBar); |
| | | background: #384358; |
| | | box-shadow: 2px 0 6px rgb(0 21 41 / 1%); |
| | | height: inherit; |
| | | position: relative; |
| | |
| | | .layout-aside-pc-220 { |
| | | width: 220px !important; |
| | | transition: width 0.3s ease; |
| | | border-radius: 0 8px 8px 0; |
| | | box-shadow: 5px 0 10px rgba(0,0,0,.15); |
| | | } |
| | | .layout-aside-pc-64 { |
| | | width: 64px !important; |
| | |
| | | .el-menu { |
| | | border-right: none !important; |
| | | width: 220px; |
| | | padding: 0 5px 0 0; |
| | | } |
| | | .el-menu-item { |
| | | height: 56px !important; |
| | | line-height: 56px !important; |
| | | border-radius: 8px !important;; |
| | | } |
| | | .el-menu-item, |
| | | .el-sub-menu__title { |
| | |
| | | @include generalIcon; |
| | | } |
| | | // 水平菜单、横向菜单高亮 背景色,鼠标 hover 时,有子级菜单的背景色 |
| | | .el-menu-item.is-active{ |
| | | padding: 0 10px; |
| | | box-sizing: border-box; |
| | | border-radius: 8px; |
| | | border: 1px solid rgba(111,248,255,.2); |
| | | } |
| | | .el-menu-item.is-active, |
| | | .el-sub-menu.is-active .el-sub-menu__title, |
| | | .el-sub-menu:not(.is-opened):hover .el-sub-menu__title { |
对比新文件 |
| | |
| | | <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">实验名称</td> |
| | | <td class="w-75 m-color"> |
| | | <el-form-item prop="experimentName"> |
| | | <el-input readonly v-model="reportDialogState.reportForm.experimentName" placeholder="请输入实验名称" /> |
| | | </el-form-item> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <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.experimentType)?.name}} |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <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-input readonly v-model="reportDialogState.reportForm.personUser" /> |
| | | </td> |
| | | <td class="w-25 m-color">电话</td> |
| | | <td class="w-25 m-color"> |
| | | <el-input disabled v-model="reportDialogState.reportForm.personUserPhone" /> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <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 disabled v-model="reportDialogState.reportForm.safePersonUser" /> |
| | | </td> |
| | | <td class="w-25 m-color">电话</td> |
| | | <td class="w-25 m-color"> |
| | | <el-input readonly v-model="reportDialogState.reportForm.safePersonUserPhone" /> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <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">场所名称</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.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-input disabled v-model="item.siteName" /> |
| | | </td> |
| | | <td class="w-14"> |
| | | <el-input disabled v-model="item.floor" /> |
| | | </td> |
| | | <td class="w-14"> |
| | | <el-input disabled v-model="item.room" /> |
| | | </td> |
| | | <td class="w-14"> |
| | | <div>{{item.fireFacilities== 1 ? '有' : item.fireFacilities== 2 ? '无' : ''}}</div> |
| | | </td> |
| | | <td class="w-14"> |
| | | <div>{{item.partitionStatus == 1 ? '有' : item.partitionStatus == 2 ? '无' : ''}}</div> |
| | | </td> |
| | | <td class="w-14"> |
| | | <div>{{item.siteType}}</div> |
| | | </td> |
| | | </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 class="m-color b-font" style="text-align: center">实验概况</tr> |
| | | <tr> |
| | | <el-input type="textarea" :autosize="{ minRows: 3}" disabled v-model="reportDialogState.reportForm.experimentDesc" placeholder="(简要描述实验原理、实验步骤、所用试剂或材料设备等)" /> |
| | | </tr> |
| | | <tr class="m-color b-font" style="text-align: center">实验涉及的危险源</tr> |
| | | <tr> |
| | | <td class="w-25 m-color">危险源种类</td> |
| | | <td class="w-75 m-color"> |
| | | <!-- <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> |
| | | <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 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 v-model="reportDialogState.reportForm.emergencyMeasure" placeholder="" /> |
| | | </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="1">低风险(一级)</el-radio> |
| | | <el-radio :label="2">一般风险(二级)</el-radio> |
| | | <el-radio :label="3">较大风险(三级)</el-radio> |
| | | <el-radio :label="4">重大风险(四级)</el-radio> |
| | | </el-radio-group> |
| | | </td> |
| | | </tr> |
| | | <tr> |
| | | <el-input type="textarea" :autosize="{ minRows: 3}" :disabled="reportDialogState.disabled" v-model="reportDialogState.reportForm.description" placeholder="评定依据(必填)" /> |
| | | </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" 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">{{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> |
| | | </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> |
| | | </span> |
| | | </template> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import {defineAsyncComponent, nextTick, onMounted, reactive, ref} from "vue"; |
| | | 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 SelectDanger = defineAsyncComponent(() => import('./selectDanger.vue')) |
| | | const selectDangerRef = ref() |
| | | const reportFormRef = ref() |
| | | const reportDialogState = reactive<ReportDialogType>({ |
| | | title: '', |
| | | disabled: false, |
| | | reportDialogVisible: false, |
| | | 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: [] |
| | | }, |
| | | 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: [], |
| | | systemPersonList: [], |
| | | experimentTypeList: [ |
| | | {id: 1, name: '化学类'}, |
| | | {id: 2, name: '生物类'}, |
| | | {id: 3, name: '辐射类'}, |
| | | {id: 4, name: '机电类'}, |
| | | {id: 5, name: '特种设备类'}, |
| | | {id: 6, name: '其它类'} |
| | | ] |
| | | }) |
| | | |
| | | const showReportDialog = (title: string, value: ProjectType, allRoomList: RoomType []) => { |
| | | getReportData(value.experimentId) |
| | | reportDialogState.reportDialogVisible = true; |
| | | reportDialogState.allRoomList = allRoomList |
| | | setTimeout(() => { |
| | | reportFormRef.value.clearValidate(); |
| | | }); |
| | | if(title === '提交'){ |
| | | reportDialogState.title = '提交报告'; |
| | | reportDialogState.disabled = false |
| | | // for(let i in reportDialogState.reportForm) { |
| | | // if(isValidKey(i, reportDialogState.reportForm)) { |
| | | // reportDialogState.reportForm[i] = value[i]; |
| | | // } |
| | | // } |
| | | }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]; |
| | | // } |
| | | // } |
| | | } |
| | | }; |
| | | |
| | | const isValidKey = (key: string | number | symbol, object:object): key is keyof typeof object =>{ |
| | | return key in object; |
| | | }; |
| | | |
| | | const getReportData = async (id:number|null|undefined) => { |
| | | let res = await assessApplyApi().getRiskReportPage({ |
| | | experimentId: id, |
| | | pageIndex: 1, |
| | | pageSize: 10, |
| | | tag: 3 |
| | | }); |
| | | if(res.data.code === 100){ |
| | | for(let i in reportDialogState.reportForm) { |
| | | if(isValidKey(i, reportDialogState.reportForm)) { |
| | | reportDialogState.reportForm[i] = res.data.data[0][i]; |
| | | } |
| | | } |
| | | console.log(reportDialogState.reportForm,'reportDialogState.reportForm') |
| | | }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){ |
| | | const { id,assessPerson,safeRiskAnalysis,assessLevel,description } = reportDialogState.reportForm |
| | | const data = { id,assessPerson,safeRiskAnalysis,assessLevel,description } |
| | | if(reportDialogState.title === '提交报告'){ |
| | | let res = await assessApplyApi().updateRiskReport(data); |
| | | if(res.data.code === 100){ |
| | | emit('refresh') |
| | | reportDialogState.reportDialogVisible = false; |
| | | ElMessage({ |
| | | type: 'success', |
| | | message: '提交报告成功' |
| | | }) |
| | | }else{ |
| | | ElMessage({ |
| | | type: 'warning', |
| | | message: res.data.msg, |
| | | }); |
| | | } |
| | | }else{ |
| | | let res = await assessApplyApi().updateRiskReportInfo(data) |
| | | if(res.data.code === 100){ |
| | | emit('refresh') |
| | | reportDialogState.reportDialogVisible = false; |
| | | ElMessage({ |
| | | type: 'success', |
| | | message: '修改报告成功' |
| | | }) |
| | | }else{ |
| | | ElMessage({ |
| | | type: 'warning', |
| | | message: res.data.msg, |
| | | }); |
| | | } |
| | | } |
| | | }else{ |
| | | ElMessage({ |
| | | type: 'warning', |
| | | message: '请完善基本信息', |
| | | }); |
| | | } |
| | | }) |
| | | }; |
| | | |
| | | const getPersonList = async () => { |
| | | let res = await userApi().getUserList({ |
| | | roleId: 1, |
| | | usePage: false, |
| | | pageIndex: 1, |
| | | pageSize: 10 |
| | | }); |
| | | if(res.data.code === 100){ |
| | | reportDialogState.systemPersonList = JSON.parse(JSON.stringify(res.data.data)); |
| | | }else{ |
| | | ElMessage({ |
| | | type: 'warning', |
| | | message: res.data.msg |
| | | }) |
| | | } |
| | | }; |
| | | |
| | | const getAllPersonList = async () => { |
| | | let res = await personApi().getAllPerson(); |
| | | if(res.data.code === 100){ |
| | | reportDialogState.allPersonList = JSON.parse(JSON.stringify(res.data.data)); |
| | | }else{ |
| | | ElMessage({ |
| | | type: 'warning', |
| | | message: res.data.msg |
| | | }) |
| | | } |
| | | }; |
| | | |
| | | const emit = defineEmits(['refresh']); |
| | | |
| | | defineExpose({ |
| | | showReportDialog, |
| | | }); |
| | | |
| | | onMounted(() => { |
| | | getAllPersonList(); |
| | | getPersonList() |
| | | }); |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |
| | | .site-layout-background { |
| | | background: #fff; |
| | | } |
| | | |
| | | .report-table { |
| | | width: 100%; |
| | | border-collapse: collapse; |
| | | border: 1px solid #337ecc; |
| | | margin: 20px 0; |
| | | |
| | | th { |
| | | padding: 10px 0; |
| | | border: 1px solid #337ecc; |
| | | border-left: none; |
| | | } |
| | | |
| | | tr { |
| | | width: 100%; |
| | | height: 44px; |
| | | line-height: 42px; |
| | | border-bottom: 1px solid #ccc; |
| | | |
| | | &.required { |
| | | &::before { |
| | | content: "*"; |
| | | display: inline-block; |
| | | color: red; |
| | | } |
| | | } |
| | | |
| | | &:last-of-type { |
| | | border-bottom: none; |
| | | } |
| | | |
| | | td { |
| | | border-right: 1px solid #ccc; |
| | | display: inline-block; |
| | | height: 44px; |
| | | vertical-align: middle; |
| | | text-align: center; |
| | | line-height: 42px; |
| | | |
| | | :deep(.el-input__wrapper ){ |
| | | box-shadow: none; |
| | | margin-top: 6px; |
| | | } |
| | | |
| | | &:last-of-type { |
| | | border-right: none; |
| | | } |
| | | |
| | | &.required { |
| | | &::before { |
| | | content: "*"; |
| | | display: inline-block; |
| | | color: red; |
| | | } |
| | | } |
| | | |
| | | &.w-14 { |
| | | width: calc((100/7)/100 * 100%); |
| | | } |
| | | |
| | | &.w-16 { |
| | | width: calc((100/6)/100 * 100%); |
| | | } |
| | | |
| | | &.w-18 { |
| | | width: 16.59%; |
| | | } |
| | | |
| | | &.w-20 { |
| | | width: 20%; |
| | | } |
| | | |
| | | &.w-25 { |
| | | width: 25%; |
| | | } |
| | | |
| | | &.w-50 { |
| | | width: 50%; |
| | | } |
| | | |
| | | &.w-75 { |
| | | width: 75%; |
| | | } |
| | | |
| | | &.autoheight { |
| | | min-height: 44px; |
| | | height: auto; |
| | | } |
| | | |
| | | &.l-border{ |
| | | border-left: 1px solid #ccc; |
| | | } |
| | | |
| | | .ant-input { |
| | | height: 100%; |
| | | border: none; |
| | | background: #f5f7fa; |
| | | } |
| | | |
| | | .ant-picker { |
| | | width: 100%; |
| | | height: 100%; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .b-font { |
| | | font-size: 16px; |
| | | font-weight: bolder; |
| | | } |
| | | } |
| | | |
| | | .m-color { |
| | | color: #0c4995; |
| | | } |
| | | |
| | | .roomSelect{ |
| | | ::v-deep(.el-popper){ |
| | | .el-select-dropdown__item{ |
| | | height: auto; |
| | | padding: 0; |
| | | |
| | | .roomTable{ |
| | | width: 100%; |
| | | display: flex; |
| | | border-bottom: 1px solid #ebeef5; |
| | | |
| | | &:last-of-type{ |
| | | border-bottom: none; |
| | | } |
| | | |
| | | &>div{ |
| | | width: 25%; |
| | | border-right: 1px dashed #ebeef5; |
| | | &:last-of-type{ |
| | | border-right: none; |
| | | } |
| | | |
| | | div{ |
| | | width: 100%; |
| | | } |
| | | .roomTit{ |
| | | border-bottom: 1px solid #ebeef5; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | .el-select-dropdown__item.selected{ |
| | | .roomTit{ |
| | | color: #606266; |
| | | font-weight: normal; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | :deep(.el-dialog__footer){ |
| | | padding-top: 20px; |
| | | display: flex; |
| | | justify-content: center; |
| | | } |
| | | |
| | | |
| | | </style> |
对比新文件 |
| | |
| | | <template> |
| | | <tr class="m-color b-font" style="text-align: center">主要危险源或有害因素</tr> |
| | | <tr> |
| | | <td class="w-20 m-color">序号</td> |
| | | <td class="w-20 m-color">危险源或有害因素</td> |
| | | <td class="w-20 m-color">危险特性</td> |
| | | <td class="w-20 m-color">数量</td> |
| | | <td class="w-20 m-color">其他说明</td> |
| | | <!-- <td class="w-18 m-color">操作</td>--> |
| | | </tr> |
| | | <tr v-for="(item,index) in dangerSourceState.dangerList" :key="index"> |
| | | <td class="w-20"> |
| | | {{ index + 1 }} |
| | | </td> |
| | | <td class="w-20"> |
| | | <el-input disabled v-model="item.riskSource"></el-input> |
| | | </td> |
| | | <td class="w-20"> |
| | | <el-input disabled v-model="item.riskCharacteristic"></el-input> |
| | | </td> |
| | | <td class="w-20"> |
| | | <el-input disabled type="number" v-model="item.number"></el-input> |
| | | </td> |
| | | <td class="w-20"> |
| | | <el-input disabled v-model="item.description"></el-input> |
| | | </td> |
| | | <!-- <td class="w-18">--> |
| | | <!-- <el-button disabled type="danger" @click="deleteDangerItem(index)">删除</el-button>--> |
| | | <!-- </td>--> |
| | | </tr> |
| | | <!-- <tr style="text-align: center">--> |
| | | <!-- <el-button :disabled="dangerSourceState.disabled" type="primary" shape="round" @click="addDangerItem()">--> |
| | | <!-- 添加行--> |
| | | <!-- </el-button>--> |
| | | <!-- </tr>--> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import {reactive, watchEffect} from "vue"; |
| | | |
| | | let props = defineProps({ |
| | | disabled: Boolean, |
| | | data: Array<DangerListType> |
| | | }); |
| | | |
| | | const dangerSourceState = reactive<DangerSourceType>({ |
| | | disabled: false, |
| | | dangerList: [], |
| | | 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: '其他'}, |
| | | ] |
| | | }) |
| | | |
| | | watchEffect(() => { |
| | | dangerSourceState.dangerList = props.data as Array<DangerListType> |
| | | dangerSourceState.disabled = props.disabled |
| | | }); |
| | | |
| | | const addDangerItem = () => { |
| | | dangerSourceState.dangerList.push({riskSource: '', riskCharacteristic: '', number: null, description: ''}); |
| | | }; |
| | | |
| | | const deleteDangerItem = (index: number) => { |
| | | dangerSourceState.dangerList.splice(index,1); |
| | | }; |
| | | |
| | | const formatList = (formatList: Array<DangerListType>) => { |
| | | dangerSourceState.dangerList = formatList |
| | | } |
| | | |
| | | defineExpose({ |
| | | formatList, |
| | | dataList: dangerSourceState.dangerList, |
| | | }); |
| | | |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |
| | | .site-layout-background { |
| | | background: #fff; |
| | | } |
| | | |
| | | .report-table { |
| | | width: 100%; |
| | | border-collapse: collapse; |
| | | border: 1px solid #337ecc; |
| | | margin: 20px 0; |
| | | |
| | | th { |
| | | padding: 10px 0; |
| | | border: 1px solid #337ecc; |
| | | border-left: none; |
| | | } |
| | | |
| | | tr { |
| | | width: 100%; |
| | | height: 44px; |
| | | line-height: 42px; |
| | | border-bottom: 1px solid #ccc; |
| | | |
| | | &:last-of-type { |
| | | border-bottom: none; |
| | | } |
| | | |
| | | td { |
| | | border-right: 1px solid #ccc; |
| | | display: inline-block; |
| | | height: 44px; |
| | | vertical-align: middle; |
| | | text-align: center; |
| | | line-height: 42px; |
| | | |
| | | &:last-of-type { |
| | | border-right: none; |
| | | } |
| | | |
| | | &.required { |
| | | &::before { |
| | | content: "*"; |
| | | display: inline-block; |
| | | color: red; |
| | | } |
| | | } |
| | | |
| | | &.w-14 { |
| | | width: calc((100/7)/100 * 100%); |
| | | } |
| | | |
| | | &.w-16 { |
| | | width: calc((100/6)/100 * 100%); |
| | | } |
| | | |
| | | &.w-18 { |
| | | width: 16.59%; |
| | | } |
| | | |
| | | &.w-20 { |
| | | width: 20%; |
| | | } |
| | | |
| | | &.w-25 { |
| | | width: 25%; |
| | | } |
| | | |
| | | &.w-50 { |
| | | width: 50%; |
| | | } |
| | | |
| | | &.w-75 { |
| | | width: 75%; |
| | | } |
| | | |
| | | .ant-input { |
| | | height: 100%; |
| | | border: none; |
| | | background: #f5f7fa; |
| | | } |
| | | |
| | | .ant-picker { |
| | | width: 100%; |
| | | height: 100%; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .b-font { |
| | | font-size: 16px; |
| | | font-weight: bolder; |
| | | } |
| | | } |
| | | |
| | | .m-color { |
| | | color: #0c4995; |
| | | } |
| | | :deep(.el-input__wrapper ){ |
| | | box-shadow: none; |
| | | } |
| | | </style> |
对比新文件 |
| | |
| | | declare interface reportReviewStateType { |
| | | developData?: Array<ProjectType> |
| | | searchQuery: { |
| | | pageIndex: number | null, |
| | | pageSize: number | null, |
| | | tag: number | null, |
| | | experimentName: string, |
| | | experimentType: null | number, |
| | | }, |
| | | total: 0, |
| | | experimentTypeList: Type [] |
| | | allRoomList: RoomType [], |
| | | reviewDialogVisible: boolean, |
| | | reviewForm:{ |
| | | id: number | null |
| | | approveStatus: null | number |
| | | approveDesc: string |
| | | }, |
| | | rules:object, |
| | | isManage: boolean |
| | | isLeader: boolean |
| | | } |
对比新文件 |
| | |
| | | <template> |
| | | <div class="home-container"> |
| | | <div style="height: 100%"> |
| | | <el-row class="homeCard"> |
| | | <div class="basic-line"> |
| | | <span>实验名称:</span> |
| | | <el-input v-model="developState.searchQuery.experimentName" clearable filterable class="input-box" placeholder="实验名称"> |
| | | </el-input> |
| | | </div> |
| | | <!-- <div class="basic-line">--> |
| | | <!-- <span>实验类型:</span>--> |
| | | <!-- <el-select v-model="developState.searchQuery.experimentType" clearable filterable class="input-box" placeholder="实验类型">--> |
| | | <!-- <el-option v-for="item in developState.experimentTypeList" :key="item.id" :label="item.name" :value="item.id"></el-option>--> |
| | | <!-- </el-select>--> |
| | | <!-- </div>--> |
| | | <div style="padding-bottom: 10px"> |
| | | <el-button type="primary" @click="getReportData">查询</el-button> |
| | | <el-button plain @click="reset">重置</el-button> |
| | | </div> |
| | | </el-row> |
| | | <div class="homeCard"> |
| | | <div class="main-card"> |
| | | <el-row class="cardTop"> |
| | | </el-row> |
| | | <el-table ref="multipleTableRef" :data="developState.developData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }"> |
| | | <el-table-column prop="experimentCode" label="实验编号"/> |
| | | <el-table-column prop="experimentName" label="实验名称"/> |
| | | <el-table-column prop="createExperimentTime" label="评价时间"> |
| | | <template #default="scope"> |
| | | <span>{{scope.row.evaluateTime?scope.row.evaluateTime.substring(0,16):'--'}}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="startTime" label="报告提交时间" show-overflow-tooltip> |
| | | <template #default="scope"> |
| | | <span>{{scope.row.updateTime?scope.row.updateTime.substring(0,16):'--'}}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <!-- <el-table-column prop="experimentSite" label="实验场所" show-overflow-tooltip>--> |
| | | <!-- <template #default="scope">--> |
| | | <!-- <span>{{scope.row.experimentSite?.map(i=>i.siteName).join(',')}}</span>--> |
| | | <!-- </template>--> |
| | | <!-- </el-table-column>--> |
| | | <!-- <el-table-column prop="experimentType" label="实验类别">--> |
| | | <!-- <template #default="scope">--> |
| | | <!-- <span>{{developState.experimentTypeList.find(i=>i.id == scope.row.experimentType)?.name}}</span>--> |
| | | <!-- </template>--> |
| | | <!-- </el-table-column>--> |
| | | <el-table-column label="操作" width="250" fixed="right"> |
| | | <template #default="scope"> |
| | | <el-button size="small" text type="primary" v-if="(developState.isManage == true && !scope.row.person?.find(i=>i.approveIndex == 1))||(developState.isLeader == true && !scope.row.person?.find(i=>i.approveIndex == 2))" :icon="Edit" @click="openRiskDialog(scope.row)">审批</el-button> |
| | | <el-button size="small" text type="primary" :icon="Edit" @click="openReportDialog('查看',scope.row)">查看评估报告</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <div class="pageBtn"> |
| | | <el-pagination @size-change="onHandleSizeChange" @current-change="onHandleCurrentChange" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="developState.searchQuery.pageIndex" background v-model:page-size="developState.searchQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="developState.total" class="page-position"> </el-pagination> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <report-dialog ref="ReportDialogRef" @refresh="getReportData"></report-dialog> |
| | | <el-dialog title="报告审批" v-model="developState.reviewDialogVisible" width="50%"> |
| | | <el-form ref="ruleFormRef" :rules="developState.rules" :model="developState.reviewForm" label-width="120px"> |
| | | <el-form-item label="审批结果" prop="approveStatus"> |
| | | <el-radio-group style="text-align: center" v-model="developState.reviewForm.approveStatus"> |
| | | <el-radio :label="2">通过</el-radio> |
| | | <el-radio :label="3">不通过</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <el-form-item label="意见填报" prop="approveDesc"> |
| | | <el-input v-model="developState.reviewForm.approveDesc" type="textarea" :autosize="{ minRows: 3 }" /> |
| | | </el-form-item> |
| | | </el-form> |
| | | <template #footer> |
| | | <span class="dialog-footer" style="padding-top:10px;text-align: center !important;"> |
| | | <el-button @click="developState.reviewDialogVisible = !developState.reviewDialogVisible" size="default">取 消</el-button> |
| | | <el-button type="primary" @click="onSubmitReview(ruleFormRef)" size="default">提交审批</el-button> |
| | | </span> |
| | | </template> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import {defineAsyncComponent, onMounted, reactive, ref} from "vue"; |
| | | import {projectApi} from "/@/api/experiment/project"; |
| | | import {ElMessage, ElMessageBox} from "element-plus"; |
| | | import type { FormInstance, FormRules } from 'element-plus' |
| | | import { View,Edit, Plus, RefreshLeft } from '@element-plus/icons-vue'; |
| | | import {roomApi} from "/@/api/basic/room"; |
| | | import {assessApplyApi} from "/@/api/analyse/assessApply"; |
| | | import {useUserInfo} from "/@/stores/userInfo"; |
| | | import {storeToRefs} from "pinia"; |
| | | const userInfo = useUserInfo(); |
| | | const { userInfos } = storeToRefs(userInfo); |
| | | const ReportDialog = defineAsyncComponent(() => import('./components/reportDialog.vue')); |
| | | |
| | | const ReportDialogRef = ref(); |
| | | const ruleFormRef = ref<FormInstance>() |
| | | const developState = reactive<reportReviewStateType>({ |
| | | developData: [], |
| | | searchQuery: { |
| | | pageIndex: 1, |
| | | pageSize: 10, |
| | | experimentName: '', |
| | | experimentType: null, |
| | | tag: 2 |
| | | }, |
| | | total: 0, |
| | | experimentTypeList: [ |
| | | {id: 1, name: '化学类'}, |
| | | {id: 2, name: '生物类'}, |
| | | {id: 3, name: '辐射类'}, |
| | | {id: 4, name: '机电类'}, |
| | | {id: 5, name: '特种设备类'}, |
| | | {id: 6, name: '其它类'}, |
| | | ], |
| | | allRoomList: [], |
| | | reviewDialogVisible: false, |
| | | reviewForm:{ |
| | | id: null, |
| | | approveStatus: null, |
| | | approveDesc: '' |
| | | }, |
| | | isManage: false, |
| | | isLeader: false, |
| | | rules: { |
| | | approveDesc: [{ required: true, message: '请输入审批意见', trigger: 'blur' }], |
| | | approveStatus: [{ required: true, message: '请选择审批结果', trigger: 'blur' }] |
| | | } |
| | | }) |
| | | |
| | | const getReportData = async () => { |
| | | let res = await assessApplyApi().getRiskReportPage(developState.searchQuery); |
| | | if(res.data.code === 100){ |
| | | developState.developData = res.data.data; |
| | | developState.total = res.data.total; |
| | | }else{ |
| | | ElMessage({ |
| | | type: 'warning', |
| | | message: res.data.msg |
| | | }); |
| | | } |
| | | }; |
| | | |
| | | |
| | | const getAllRoom = async () => { |
| | | let res = await roomApi().getAllRoom(); |
| | | if(res.data.code === 100){ |
| | | developState.allRoomList = JSON.parse(JSON.stringify(res.data.data)); |
| | | }else{ |
| | | ElMessage({ |
| | | type: 'warning', |
| | | message: res.data.msg |
| | | }) |
| | | } |
| | | }; |
| | | |
| | | const openReportDialog = (title: string,value: ProjectType) =>{ |
| | | ReportDialogRef.value.showReportDialog(title, value, developState.allRoomList); |
| | | } |
| | | |
| | | const onSubmitReview = async (formEl: FormInstance | undefined) => { |
| | | if (!formEl) return |
| | | await formEl.validate(async(valid, fields) => { |
| | | if (valid) { |
| | | let res = await assessApplyApi().uploadReport(developState.reviewForm); |
| | | if(res.data.code === 100){ |
| | | ElMessage({ |
| | | type: 'success', |
| | | message: '审批提交成功' |
| | | }); |
| | | }else{ |
| | | ElMessage({ |
| | | type: 'warning', |
| | | message: res.data.msg |
| | | }); |
| | | } |
| | | developState.reviewForm = { |
| | | id: null, |
| | | approveStatus: null, |
| | | approveDesc: '' |
| | | }, |
| | | developState.reviewDialogVisible = false |
| | | getReportData() |
| | | } else { |
| | | console.log('error submit!', fields) |
| | | } |
| | | }) |
| | | } |
| | | |
| | | const openRiskDialog = (val)=>{ |
| | | developState.reviewForm.id = val.id |
| | | developState.reviewDialogVisible = true |
| | | } |
| | | |
| | | const onHandleSizeChange = (val: number) => { |
| | | developState.searchQuery.pageSize = val; |
| | | getReportData(); |
| | | }; |
| | | |
| | | const onHandleCurrentChange = (val: number) => { |
| | | developState.searchQuery.pageIndex = val; |
| | | getReportData(); |
| | | }; |
| | | |
| | | const reset = () => { |
| | | developState.searchQuery = { |
| | | pageIndex: 1, |
| | | pageSize: 10, |
| | | experimentName: '', |
| | | experimentType: null, |
| | | tag: 2 |
| | | } |
| | | }; |
| | | |
| | | onMounted(() => { |
| | | getReportData() |
| | | getAllRoom() |
| | | if(userInfos.value.roles?.find(i=>i.roleId == '4')){ |
| | | developState.isManage = true |
| | | } |
| | | if(userInfos.value.roles?.find(i=>i.roleId == '6')){ |
| | | developState.isLeader = true |
| | | } |
| | | console.log(developState.isManage,userInfos.value.roles) |
| | | }) |
| | | |
| | | </script> |
| | | |
| | | <style scoped lang="scss"> |
| | | $homeNavLengh: 8; |
| | | .home-container { |
| | | height: calc(100vh - 144px); |
| | | box-sizing: border-box; |
| | | overflow: hidden; |
| | | .homeCard { |
| | | width: 100%; |
| | | padding: 20px; |
| | | box-sizing: border-box; |
| | | background: #fff; |
| | | border-radius: 4px; |
| | | |
| | | .main-card { |
| | | width: 100%; |
| | | height: 100%; |
| | | .cardTop { |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: space-between; |
| | | margin-bottom: 20px; |
| | | .mainCardBtn { |
| | | margin: 0; |
| | | } |
| | | } |
| | | .pageBtn { |
| | | height: 60px; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: right; |
| | | |
| | | .demo-pagination-block + .demo-pagination-block { |
| | | margin-top: 10px; |
| | | } |
| | | .demo-pagination-block .demonstration { |
| | | margin-bottom: 16px; |
| | | } |
| | | } |
| | | } |
| | | &:last-of-type { |
| | | height: calc(100% - 100px); |
| | | } |
| | | } |
| | | .el-row { |
| | | display: flex; |
| | | align-items: center; |
| | | margin-bottom: 20px; |
| | | &:last-child { |
| | | margin-bottom: 0; |
| | | } |
| | | .grid-content { |
| | | align-items: center; |
| | | min-height: 36px; |
| | | } |
| | | |
| | | .topInfo { |
| | | display: flex; |
| | | align-items: center; |
| | | font-size: 16px; |
| | | font-weight: bold; |
| | | |
| | | & > div { |
| | | white-space: nowrap; |
| | | margin-right: 20px; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | .stepItem { |
| | | width: 100%; |
| | | display: flex; |
| | | align-items: flex-start; |
| | | margin-bottom: 30px; |
| | | margin-left: 30px; |
| | | padding-bottom: 30px; |
| | | border-left: 2px solid #ccc; |
| | | &:first-of-type { |
| | | margin-top: 30px; |
| | | } |
| | | &:last-of-type { |
| | | margin-bottom: 0; |
| | | border-left: none; |
| | | } |
| | | .stepNum { |
| | | width: 30px; |
| | | height: 30px; |
| | | border-radius: 15px; |
| | | box-sizing: border-box; |
| | | color: #333; |
| | | border: 1px solid #999; |
| | | line-height: 28px; |
| | | text-align: center; |
| | | margin-right: 10px; |
| | | margin-left: -16px; |
| | | margin-top: -30px; |
| | | } |
| | | .stepCard { |
| | | width: 100%; |
| | | margin-top: -30px; |
| | | |
| | | .box-card { |
| | | width: 100%; |
| | | &:deep(.el-card__header) { |
| | | padding: 10px 15px; |
| | | } |
| | | .card-header { |
| | | width: 100%; |
| | | display: flex; |
| | | justify-content: space-between; |
| | | align-items: center; |
| | | & > div:first-of-type { |
| | | margin-right: 80px; |
| | | font-size: 18px; |
| | | font-weight: bold; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | &:hover .card-header { |
| | | color: #0098f5; |
| | | } |
| | | &:hover .stepNum { |
| | | border: 2px solid #0098f5; |
| | | color: #0098f5; |
| | | } |
| | | } |
| | | |
| | | :deep(.el-date-editor) { |
| | | width: 100%; |
| | | } |
| | | .el-select { |
| | | width: 100%; |
| | | } |
| | | :deep(.el-textarea.is-disabled .el-textarea__inner) { |
| | | background-color: var(--el-card-bg-color); |
| | | color: var(--el-input-text-color, var(--el-text-color-regular)); |
| | | } |
| | | :deep(.el-input.is-disabled .el-input__inner) { |
| | | color: var(--el-input-text-color, var(--el-text-color-regular)); |
| | | } |
| | | :deep(.el-input.is-disabled .el-input__wrapper) { |
| | | background-color: var(--el-card-bg-color); |
| | | box-shadow: none; |
| | | } |
| | | </style> |
| | |
| | | <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="请输入实验名称" /> |
| | |
| | | </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.experimentType)?.name}} |
| | | </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" /> |
| | |
| | | </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 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> |
| | | <!-- <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="(简要描述实验原理、实验步骤、所用试剂或材料设备等)" /> |
| | | </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> |
| | | <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" 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> |
| | | <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-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> |
| | | </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> |
| | | </span> |
| | | </template> |
| | | </el-dialog> |
| | |
| | | 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 SelectDanger = defineAsyncComponent(() => import('./selectDanger.vue')) |
| | | const selectDangerRef = ref() |
| | |
| | | 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:[] |
| | | }, |
| | | 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: [], |
| | | systemPersonList: [], |
| | | experimentTypeList: [ |
| | | {id: 1, name: '化学类'}, |
| | | {id: 2, name: '生物类'}, |
| | | {id: 3, name: '辐射类'}, |
| | | {id: 4, name: '机电类'}, |
| | | {id: 5, name: '特种设备类'}, |
| | | {id: 6, name: '其它类'} |
| | | ] |
| | | }) |
| | | |
| | | const showReportDialog = (title: string, value: ProjectType, allRoomList: RoomType []) => { |
| | | getReportData(value.id) |
| | | reportDialogState.reportDialogVisible = true; |
| | | reportDialogState.allRoomList = allRoomList |
| | | setTimeout(() => { |
| | |
| | | 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]; |
| | | // } |
| | | // } |
| | | }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]; |
| | | // } |
| | | // } |
| | | } |
| | | }; |
| | | |
| | |
| | | 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 |
| | | }); |
| | | 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:[] |
| | | } |
| | | 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]; |
| | | } |
| | | } |
| | | } |
| | | }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); |
| | | const { id,assessPerson,safeRiskAnalysis,assessLevel,description } = reportDialogState.reportForm |
| | | const data = { id,assessPerson,safeRiskAnalysis,assessLevel,description } |
| | | if(reportDialogState.title === '提交报告'){ |
| | | let res = await assessApplyApi().updateRiskReport(data); |
| | | if(res.data.code === 100){ |
| | | emit('refresh') |
| | | reportDialogState.reportDialogVisible = false; |
| | | ElMessage({ |
| | | type: 'success', |
| | | message: '新增成功' |
| | | message: '提交报告成功' |
| | | }) |
| | | }else{ |
| | | ElMessage({ |
| | |
| | | }); |
| | | } |
| | | }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({ |
| | |
| | | line-height: 42px; |
| | | border-bottom: 1px solid #ccc; |
| | | |
| | | &.required { |
| | | &::before { |
| | | content: "*"; |
| | | display: inline-block; |
| | | color: red; |
| | | } |
| | | } |
| | | |
| | | &:last-of-type { |
| | | border-bottom: none; |
| | | } |
| | |
| | | assessApplyDialogState.assessApplyDialogVisible = true; |
| | | assessApplyDialogState.id = <number>value.id |
| | | assessApplyDialogState.liabilityUserId = <number>value.liabilityUserId |
| | | getRiskData(<number>value.id) |
| | | getRiskData() |
| | | }; |
| | | |
| | | const addUnit = (id: number, value: RiskUnitType) => { |
| | | riskUnitDialogRef.value.showRiskUnitDialog(assessApplyDialogState.id, assessApplyDialogState.liabilityUserId, assessApplyDialogState.basicUnitList, assessApplyDialogState.allPersonList, assessApplyDialogState.allRiskTypeList); |
| | | }; |
| | | |
| | | const getRiskData = async (id: number|null) => { |
| | | let res = await riskUnitApi().getRiskUnitByList({pageIndex: 1,pageSize: 9999,riskCode: '',riskName: '',experimentId: id}); |
| | | const getRiskData = async () => { |
| | | let res = await riskUnitApi().getRiskUnitByList({pageIndex: 1,pageSize: 9999,riskCode: '',riskName: '',experimentId: assessApplyDialogState.id}); |
| | | if(res.data.code === 100){ |
| | | assessApplyDialogState.riskUnitData = JSON.parse(JSON.stringify(res.data.data)); |
| | | }else{ |
| | |
| | | <template> |
| | | <div class="system-menu-dialog-container"> |
| | | <el-dialog :title="riskUnitDialogState.title" v-model="riskUnitDialogState.riskUnitDialogVisible" width="600px"> |
| | | <el-form ref="riskUnitFormRef" :rules="riskUnitDialogState.riskUnitFormRules" :model="riskUnitDialogState.riskUnitForm" size="default" label-width="120px"> |
| | | <el-row :gutter="35"> |
| | | <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> |
| | | <el-form-item label="风险单元编号" prop="riskCode"> |
| | | <el-input v-model="riskUnitDialogState.riskUnitForm.riskCode" placeholder="风险单元编号" clearable class="input-length"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> |
| | | <el-form-item label="风险单元名称" prop="riskName"> |
| | | <el-input v-model="riskUnitDialogState.riskUnitForm.riskName" placeholder="风险单元名称" clearable class="input-length"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> |
| | | <el-form-item label="风险单元类型" prop="riskUnitTypeId"> |
| | | <el-select v-model="riskUnitDialogState.riskUnitForm.riskUnitTypeId" placeholder="风险单元类型" clearable class="input-length"> |
| | | <el-option v-for="item in riskUnitDialogState.riskTypeList" :key="item.id" :label="item.riskType" :value="item.id"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> |
| | | <el-form-item label="负责人" prop="liabilityUserId"> |
| | | <el-select v-model="riskUnitDialogState.riskUnitForm.liabilityUserId" placeholder="负责人" clearable class="input-length"> |
| | | <el-option v-for="item in riskUnitDialogState.allPersonList" :key="item.id" :label="item.personName" :value="item.id"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> |
| | | <el-form-item label="负责部门" prop="liabilityDep"> |
| | | <el-input v-model="riskUnitDialogState.riskUnitForm.liabilityDep" placeholder="负责部门" clearable class="input-length"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="riskUnitDialogState.experimentType === 1"> |
| | | <el-form-item label="基础风险单元" prop="basicRiskUnitId"> |
| | | <el-select v-model="riskUnitDialogState.riskUnitForm.basicRiskUnitId" placeholder="基础风险单元" clearable class="input-length"> |
| | | <el-option v-for="item in riskUnitDialogState.basicUnitList" :key="item.id" :label="item.riskName" :value="item.id"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> |
| | | <el-form-item label="风险单元描述"> |
| | | <el-input type="textarea" :rows="3" v-model="riskUnitDialogState.riskUnitForm.description" placeholder="风险单元描述" clearable class="input-length"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <template #footer> |
| | | <div class="system-menu-dialog-container"> |
| | | <el-dialog :title="riskUnitDialogState.title" v-model="riskUnitDialogState.riskUnitDialogVisible" width="600px"> |
| | | <el-form ref="riskUnitFormRef" :rules="riskUnitDialogState.riskUnitFormRules" :model="riskUnitDialogState.riskUnitForm" size="default" label-width="120px"> |
| | | <el-row :gutter="35"> |
| | | <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> |
| | | <el-form-item label="风险单元编号" prop="riskCode"> |
| | | <el-input v-model="riskUnitDialogState.riskUnitForm.riskCode" placeholder="风险单元编号" clearable class="input-length"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> |
| | | <el-form-item label="风险单元名称" prop="riskName"> |
| | | <el-input v-model="riskUnitDialogState.riskUnitForm.riskName" placeholder="风险单元名称" clearable class="input-length"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> |
| | | <el-form-item label="风险单元类型" prop="riskUnitTypeId"> |
| | | <el-select v-model="riskUnitDialogState.riskUnitForm.riskUnitTypeId" placeholder="风险单元类型" clearable class="input-length"> |
| | | <el-option v-for="item in riskUnitDialogState.riskTypeList" :key="item.id" :label="item.riskType" :value="item.id"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> |
| | | <el-form-item label="负责人" prop="liabilityUserId"> |
| | | <el-select v-model="riskUnitDialogState.riskUnitForm.liabilityUserId" placeholder="负责人" clearable class="input-length"> |
| | | <el-option v-for="item in riskUnitDialogState.allPersonList" :key="item.id" :label="item.personName" :value="item.id"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> |
| | | <el-form-item label="负责部门" prop="liabilityDep"> |
| | | <el-input v-model="riskUnitDialogState.riskUnitForm.liabilityDep" placeholder="负责部门" clearable class="input-length"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="riskUnitDialogState.experimentType === 1"> |
| | | <el-form-item label="基础风险单元" prop="basicRiskUnitId"> |
| | | <el-select v-model="riskUnitDialogState.riskUnitForm.basicRiskUnitId" placeholder="基础风险单元" clearable class="input-length"> |
| | | <el-option v-for="item in riskUnitDialogState.basicUnitList" :key="item.id" :label="item.riskName" :value="item.id"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> |
| | | <el-form-item label="风险单元描述"> |
| | | <el-input type="textarea" :rows="3" v-model="riskUnitDialogState.riskUnitForm.description" placeholder="风险单元描述" clearable class="input-length"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <template #footer> |
| | | <span class="dialog-footer"> |
| | | <el-button @click="riskUnitDialogState.riskUnitDialogVisible = !riskUnitDialogState.riskUnitDialogVisible" size="default">取 消</el-button> |
| | | <el-button type="primary" @click="onSubmitRiskUnit" size="default">确定</el-button> |
| | | </span> |
| | | </template> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | |
| | | const riskUnitFormRef = ref() |
| | | |
| | | const riskUnitDialogState = reactive<RiskUnitDialogType>({ |
| | | title: '新增', |
| | | experimentType: 2, |
| | | riskUnitDialogVisible: false, |
| | | riskUnitForm: { |
| | | experimentId: null, |
| | | riskCode: '', |
| | | riskName: '', |
| | | riskUnitTypeId: null, |
| | | liabilityUserId: null, |
| | | liabilityDep: '', |
| | | description: '', |
| | | basicRiskUnitId: null, |
| | | }, |
| | | riskUnitFormRules: { |
| | | riskCode: [{ required: true, message: '请填写风险单元编号', trigger: 'blur' }], |
| | | riskName: [{ required: true, message: '请填写风险单元名称', trigger: 'blur' }], |
| | | riskUnitTypeId: [{ required: true, message: '请选择风险单元类型', trigger: 'blur' }], |
| | | liabilityUserId: [{ required: true, message: '请选择负责人', trigger: 'change' }], |
| | | basicRiskUnitId: [{ required: true, message: '请选择基础风险单元', trigger: 'change' }] |
| | | }, |
| | | specialDeviceList: [], |
| | | deviceUnitList: [ |
| | | {id:1, name: '台'}, |
| | | {id:2, name: '个'}, |
| | | {id:3, name: '件'} |
| | | ], |
| | | riskTypeList: [], |
| | | basicUnitList: [], |
| | | allPersonList: [], |
| | | allExperimentList: [], |
| | | experimentTypeList: [ |
| | | {id: 2, name: '实验风险'}, |
| | | {id: 1, name: '固有风险'}, |
| | | ], |
| | | title: '新增', |
| | | experimentType: 2, |
| | | riskUnitDialogVisible: false, |
| | | riskUnitForm: { |
| | | experimentId: null, |
| | | riskCode: '', |
| | | riskName: '', |
| | | riskUnitTypeId: null, |
| | | liabilityUserId: null, |
| | | liabilityDep: '', |
| | | description: '', |
| | | basicRiskUnitId: null, |
| | | }, |
| | | riskUnitFormRules: { |
| | | riskCode: [{ required: true, message: '请填写风险单元编号', trigger: 'blur' }], |
| | | riskName: [{ required: true, message: '请填写风险单元名称', trigger: 'blur' }], |
| | | riskUnitTypeId: [{ required: true, message: '请选择风险单元类型', trigger: 'blur' }], |
| | | liabilityUserId: [{ required: true, message: '请选择负责人', trigger: 'change' }], |
| | | basicRiskUnitId: [{ required: true, message: '请选择基础风险单元', trigger: 'change' }] |
| | | }, |
| | | specialDeviceList: [], |
| | | deviceUnitList: [ |
| | | {id:1, name: '台'}, |
| | | {id:2, name: '个'}, |
| | | {id:3, name: '件'} |
| | | ], |
| | | riskTypeList: [], |
| | | basicUnitList: [], |
| | | allPersonList: [], |
| | | allExperimentList: [], |
| | | experimentTypeList: [ |
| | | {id: 2, name: '实验风险'}, |
| | | {id: 1, name: '固有风险'}, |
| | | ], |
| | | }) |
| | | |
| | | const showRiskUnitDialog = (id: number, liabilityUserId: number, basicUnitList: UnitType [], allPersonList: AllPersonListType [], allRiskTypeList: RiskType []) => { |
| | | |
| | | riskUnitDialogState.riskUnitDialogVisible = true; |
| | | riskUnitDialogState.basicUnitList = basicUnitList |
| | | riskUnitDialogState.allPersonList = allPersonList |
| | | riskUnitDialogState.riskTypeList = allRiskTypeList |
| | | setTimeout(() => { |
| | | riskUnitFormRef.value.clearValidate(); |
| | | }); |
| | | riskUnitDialogState.riskUnitForm = { |
| | | experimentId: id, |
| | | riskCode: '', |
| | | riskName: '', |
| | | riskUnitTypeId: null, |
| | | liabilityUserId: liabilityUserId, |
| | | liabilityDep: '', |
| | | description: '', |
| | | basicRiskUnitId: null, |
| | | }; |
| | | riskUnitDialogState.riskUnitDialogVisible = true; |
| | | riskUnitDialogState.basicUnitList = basicUnitList |
| | | riskUnitDialogState.allPersonList = allPersonList |
| | | riskUnitDialogState.riskTypeList = allRiskTypeList |
| | | setTimeout(() => { |
| | | riskUnitFormRef.value.clearValidate(); |
| | | }); |
| | | riskUnitDialogState.riskUnitForm = { |
| | | experimentId: id, |
| | | riskCode: '', |
| | | riskName: '', |
| | | riskUnitTypeId: null, |
| | | liabilityUserId: liabilityUserId, |
| | | liabilityDep: '', |
| | | description: '', |
| | | basicRiskUnitId: null, |
| | | }; |
| | | }; |
| | | |
| | | const onSubmitRiskUnit = () => { |
| | | riskUnitFormRef.value.validate(async(valid: boolean) => { |
| | | if(valid){ |
| | | if(riskUnitDialogState.title === '新增' && riskUnitDialogState.experimentType === 1){ |
| | | let { experimentId,basicRiskUnitId} = riskUnitDialogState.riskUnitForm |
| | | let query = { experimentId,basicRiskUnitId } |
| | | let res = await riskUnitApi().addBasicRiskUnit(query); |
| | | if(res.data.code === 100){ |
| | | emit('refresh') |
| | | riskUnitDialogState.riskUnitDialogVisible = false; |
| | | ElMessage({ |
| | | type: 'success', |
| | | message: '新增成功' |
| | | }) |
| | | }else{ |
| | | ElMessage({ |
| | | type: 'warning', |
| | | message: res.data.msg, |
| | | }); |
| | | } |
| | | }else if(riskUnitDialogState.title === '新增' && riskUnitDialogState.experimentType === 2){ |
| | | let { basicRiskUnitId, ...query} = riskUnitDialogState.riskUnitForm |
| | | let res = await riskUnitApi().addRiskUnit(query); |
| | | if(res.data.code === 100){ |
| | | emit('refresh') |
| | | riskUnitDialogState.riskUnitDialogVisible = false; |
| | | ElMessage({ |
| | | type: 'success', |
| | | message: '新增成功' |
| | | }) |
| | | }else{ |
| | | ElMessage({ |
| | | type: 'warning', |
| | | message: res.data.msg, |
| | | }); |
| | | } |
| | | }else{ |
| | | let res = await riskUnitApi().modRiskUnit(riskUnitDialogState.riskUnitForm) |
| | | if(res.data.code === 100){ |
| | | emit('refresh') |
| | | riskUnitDialogState.riskUnitDialogVisible = false; |
| | | ElMessage({ |
| | | type: 'success', |
| | | message: '编辑成功' |
| | | }) |
| | | }else{ |
| | | ElMessage({ |
| | | type: 'warning', |
| | | message: res.data.msg, |
| | | }); |
| | | } |
| | | } |
| | | riskUnitFormRef.value.validate(async(valid: boolean) => { |
| | | if(valid){ |
| | | if(riskUnitDialogState.title === '新增' && riskUnitDialogState.experimentType === 1){ |
| | | let { experimentId,basicRiskUnitId} = riskUnitDialogState.riskUnitForm |
| | | let query = { experimentId,basicRiskUnitId } |
| | | let res = await riskUnitApi().addBasicRiskUnit(query); |
| | | if(res.data.code === 100){ |
| | | emit('refresh') |
| | | riskUnitDialogState.riskUnitDialogVisible = false; |
| | | ElMessage({ |
| | | type: 'success', |
| | | message: '新增成功' |
| | | }) |
| | | }else{ |
| | | ElMessage({ |
| | | type: 'warning', |
| | | message: '请完善基本信息', |
| | | }); |
| | | ElMessage({ |
| | | type: 'warning', |
| | | message: res.data.msg, |
| | | }); |
| | | } |
| | | }) |
| | | }else if(riskUnitDialogState.title === '新增' && riskUnitDialogState.experimentType === 2){ |
| | | let { basicRiskUnitId, ...query} = riskUnitDialogState.riskUnitForm |
| | | let res = await riskUnitApi().addRiskUnit(query); |
| | | if(res.data.code === 100){ |
| | | emit('refresh') |
| | | riskUnitDialogState.riskUnitDialogVisible = false; |
| | | ElMessage({ |
| | | type: 'success', |
| | | message: '新增成功' |
| | | }) |
| | | }else{ |
| | | ElMessage({ |
| | | type: 'warning', |
| | | message: res.data.msg, |
| | | }); |
| | | } |
| | | }else{ |
| | | let res = await riskUnitApi().modRiskUnit(riskUnitDialogState.riskUnitForm) |
| | | if(res.data.code === 100){ |
| | | emit('refresh') |
| | | riskUnitDialogState.riskUnitDialogVisible = false; |
| | | ElMessage({ |
| | | type: 'success', |
| | | message: '编辑成功' |
| | | }) |
| | | }else{ |
| | | ElMessage({ |
| | | type: 'warning', |
| | | message: res.data.msg, |
| | | }); |
| | | } |
| | | } |
| | | }else{ |
| | | ElMessage({ |
| | | type: 'warning', |
| | | message: '请完善基本信息', |
| | | }); |
| | | } |
| | | }) |
| | | } |
| | | |
| | | const emit = defineEmits(['refresh']) |
| | | |
| | | defineExpose({ |
| | | showRiskUnitDialog |
| | | showRiskUnitDialog |
| | | }) |
| | | </script> |
| | | |
| | |
| | | <template> |
| | | <tr class="m-color b-font" style="text-align: center">主要危险源或有害因素</tr> |
| | | <tr> |
| | | <td class="w-18 m-color">序号</td> |
| | | <td class="w-18 m-color required">危险源或有害因素</td> |
| | | <td class="w-18 m-color required">危险特性</td> |
| | | <td class="w-18 m-color required">数量</td> |
| | | <td class="w-18 m-color required">其他说明</td> |
| | | <td class="w-18 m-color">操作</td> |
| | | <td class="w-20 m-color">序号</td> |
| | | <td class="w-20 m-color">危险源或有害因素</td> |
| | | <td class="w-20 m-color">危险特性</td> |
| | | <td class="w-20 m-color">数量</td> |
| | | <td class="w-20 m-color">其他说明</td> |
| | | <!-- <td class="w-18 m-color">操作</td>--> |
| | | </tr> |
| | | <tr v-for="(item,index) in dangerSourceState.dangerList" :key="index"> |
| | | <td class="w-18"> |
| | | <td class="w-20"> |
| | | {{ index + 1 }} |
| | | </td> |
| | | <td class="w-18"> |
| | | <el-input :disabled="dangerSourceState.disabled" v-model="item.dangerFactor"></el-input> |
| | | <td class="w-20"> |
| | | <el-input disabled v-model="item.riskSource"></el-input> |
| | | </td> |
| | | <td class="w-18"> |
| | | <el-input :disabled="dangerSourceState.disabled" v-model="item.feature"></el-input> |
| | | <td class="w-20"> |
| | | <el-input disabled v-model="item.riskCharacteristic"></el-input> |
| | | </td> |
| | | <td class="w-18"> |
| | | <el-input :disabled="dangerSourceState.disabled" type="number" v-model="item.amount"></el-input> |
| | | <td class="w-20"> |
| | | <el-input disabled type="number" v-model="item.number"></el-input> |
| | | </td> |
| | | <td class="w-18"> |
| | | <el-input :disabled="dangerSourceState.disabled" v-model="item.info"></el-input> |
| | | <td class="w-20"> |
| | | <el-input disabled v-model="item.description"></el-input> |
| | | </td> |
| | | <td class="w-18"> |
| | | <el-button :disabled="dangerSourceState.disabled" type="danger" @click="deleteDangerItem(index)">删除</el-button> |
| | | </td> |
| | | <!-- <td class="w-18">--> |
| | | <!-- <el-button disabled type="danger" @click="deleteDangerItem(index)">删除</el-button>--> |
| | | <!-- </td>--> |
| | | </tr> |
| | | <tr style="text-align: center"> |
| | | <el-button :disabled="dangerSourceState.disabled" type="primary" shape="round" @click="addDangerItem()"> |
| | | 添加行 |
| | | </el-button> |
| | | </tr> |
| | | <!-- <tr style="text-align: center">--> |
| | | <!-- <el-button :disabled="dangerSourceState.disabled" type="primary" shape="round" @click="addDangerItem()">--> |
| | | <!-- 添加行--> |
| | | <!-- </el-button>--> |
| | | <!-- </tr>--> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | |
| | | |
| | | const dangerSourceState = reactive<DangerSourceType>({ |
| | | disabled: false, |
| | | dangerList: [ |
| | | ], |
| | | dangerList: [], |
| | | classifyList:[ |
| | | {id:1, name: '有机'}, |
| | | {id:2, name: '酸'}, |
| | |
| | | }); |
| | | |
| | | const addDangerItem = () => { |
| | | dangerSourceState.dangerList.push({dangerFactor: '', feature: '', amount: null, info: ''}); |
| | | dangerSourceState.dangerList.push({riskSource: '', riskCharacteristic: '', number: null, description: ''}); |
| | | }; |
| | | |
| | | const deleteDangerItem = (index: number) => { |
| | |
| | | title: string |
| | | disabled: boolean |
| | | reportDialogVisible: boolean |
| | | reportForm: object |
| | | reportForm: { |
| | | id: null | number, |
| | | experimentName: string, |
| | | experimentType: null | number, |
| | | personUser: string, |
| | | personUserId: null | number, |
| | | personUserPhone: string, |
| | | safePersonUserId: null | number, |
| | | safePersonUser: string, |
| | | safePersonUserPhone: string, |
| | | dep: string, |
| | | experimentSite: [], |
| | | experimentDesc: string, |
| | | emergencyMeasure: string, |
| | | assessPerson: string, |
| | | safeRiskAnalysis: string, |
| | | assessLevel: null | number, |
| | | riskSource: [], |
| | | riskSourceType: [], |
| | | description: string, |
| | | person: [] |
| | | } |
| | | reportFormRules: object |
| | | allPersonList: Array<AllPersonListType> |
| | | systemPersonList: Array<AllPersonListType> |
| | | allRoomList: Array<RoomType> |
| | | allRoomList: Array<RoomType>, |
| | | experimentTypeList: Array<Type> |
| | | } |
| | | |
| | | declare interface DangerSourceType { |
| | |
| | | <el-table-column prop="stage" label="评估状态"> |
| | | <template #default="scope"> |
| | | <el-tag :type="scope.row.stage == 4?'success':scope.row.stage == 1?'info':''"> |
| | | {{scope.row.stage == 1?'未评估':scope.row.status == 2?'评估中':scope.row.status == 3?'评估完成':scope.row.status == 4?'生成报告':'--'}} |
| | | {{scope.row.stage == 1?'未评估':scope.row.stage == 2?'评估中':scope.row.stage == 3?'评估完成':scope.row.stage == 4?'生成报告':'--'}} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="操作" width="250" fixed="right"> |
| | | <template #default="scope"> |
| | | <el-button size="small" v-if="scope.row.stage == 3" text type="primary" :icon="Edit" @click="toReport(scope.row)">生成评估报告</el-button> |
| | | <el-button size="small" text type="primary" :icon="Edit" @click="openRiskDialog(scope.row)">管理实验现实风险</el-button> |
| | | <el-button size="small" text type="primary" :icon="View" @click="openReportDialog('提交', scope.row)">提交综合评估报告审批</el-button> |
| | | <el-button size="small" :disabled="scope.row.status == 2 ? true : false" text type="primary" :icon="Edit" @click="openReportDialog('查看',scope.row)">查看评估报告</el-button> |
| | | <el-button size="small" v-if="scope.row.stage == 4 && !scope.row.assessPerson" text type="primary" :icon="View" @click="openReportDialog('提交', scope.row)">提交审批</el-button> |
| | | <el-button size="small" v-if="scope.row.stage == 4 && scope.row.assessPerson" text type="primary" :icon="View" @click="openReportDialog('修改', scope.row)">修改</el-button> |
| | | <el-button size="small" v-if="scope.row.stage == 4 && scope.row.assessPerson" text type="primary" :icon="Edit" @click="openReportDialog('查看',scope.row)">查看</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | |
| | | } |
| | | }; |
| | | |
| | | const toReport = (val: ProjectType)=>{ |
| | | ElMessageBox.confirm(`此操作将对该实验生成风险评估报告:“${val.experimentName}”,是否继续?`, '提示', { |
| | | confirmButtonText: '确认', |
| | | cancelButtonText: '取消', |
| | | type: 'warning' |
| | | }) |
| | | .then(async () => { |
| | | let res = await assessApplyApi().toRiskReport({ id: val.id }); |
| | | if (res.data.code === 100) { |
| | | ElMessage({ |
| | | type: 'success', |
| | | duration: 2000, |
| | | message: '生成报告成功' |
| | | }); |
| | | await getAssessData(); |
| | | } else { |
| | | ElMessage({ |
| | | type: 'warning', |
| | | message: res.data.msg |
| | | }); |
| | | } |
| | | }) |
| | | .catch((error) => { |
| | | }); |
| | | } |
| | | |
| | | const getAllRoom = async () => { |
| | | let res = await roomApi().getAllRoom(); |
| | | if(res.data.code === 100){ |
| | |
| | | type: 'warning' |
| | | }) |
| | | .then(async () => { |
| | | debugger |
| | | let res = await projectApi().deleteProjectById({ id: val.id }); |
| | | if (res.data.code === 100) { |
| | | ElMessage({ |
| | |
| | | <el-option v-for="item in evaluateDialogState.evaluateMethodList" :key="item.id" :label="item.name" :value="item.id"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-button size="default" type="primary" @click="openChangeMethod()">修改评价方法</el-button> |
| | | <el-button :disabled="evaluateDialogState.disabled" size="default" type="primary" @click="openChangeMethod()">修改评价方法</el-button> |
| | | </el-col> |
| | | |
| | | <div class="evaluateCard"> |
| | |
| | | import {isValidKey, numFloat} from "/@/utils/methods"; |
| | | import { BigNumber } from 'bignumber.js'; |
| | | import {identifyApi} from "/@/api/analyse/identify"; |
| | | import {ElMessageBox} from "element-plus/es"; |
| | | |
| | | const evaluateFormRef = ref() |
| | | |
| | |
| | | setTimeout(() => { |
| | | evaluateFormRef.value.clearValidate(); |
| | | }); |
| | | if( value.riskValue){ |
| | | if( title === '评价'){ |
| | | if(value.riskValue){ |
| | | evaluateDialogState.title = '编辑评价'; |
| | | for(let i in evaluateDialogState.evaluateForm){ |
| | | if(isValidKey(i, evaluateDialogState.evaluateForm)){ |
| | | evaluateDialogState.evaluateForm[i] = value[i] |
| | | } |
| | | if(isValidKey(i, evaluateDialogState.evaluateForm)){ |
| | | evaluateDialogState.evaluateForm[i] = value[i] |
| | | } |
| | | } |
| | | }else if(title === '查看'){ |
| | | evaluateDialogState.disabled = true |
| | | for(let i in evaluateDialogState.evaluateForm){ |
| | | if(isValidKey(i, evaluateDialogState.evaluateForm)){ |
| | | evaluateDialogState.evaluateForm[i] = value[i] |
| | | } |
| | | } |
| | | }else{ |
| | | }else{ |
| | | evaluateDialogState.title = '评价' |
| | | evaluateDialogState.evaluateForm = { |
| | | id: null, |
| | |
| | | adviseEmergencyMeasure: '', |
| | | evaluateDesc: '' |
| | | }; |
| | | } |
| | | }else { |
| | | evaluateDialogState.title = '查看' |
| | | evaluateDialogState.disabled = true |
| | | for(let i in evaluateDialogState.evaluateForm){ |
| | | if(isValidKey(i, evaluateDialogState.evaluateForm)){ |
| | | evaluateDialogState.evaluateForm[i] = value[i] |
| | | } |
| | | } |
| | | } |
| | | evaluateDialogState.evaluateForm.id = value.id as number |
| | | evaluateDialogState.evaluateForm.evaluateMethod = value.evaluateMethod as number |
| | |
| | | } |
| | | |
| | | const conFirmChange = async () =>{ |
| | | let res = await evaluateApi().modEvaluateMethod({ |
| | | id: evaluateDialogState.evaluateForm.id, |
| | | evaluateMethodId: evaluateDialogState.evaluateForm.evaluateMethod |
| | | }); |
| | | if(res.data.code === 100){ |
| | | ElMessage({ |
| | | type: 'success', |
| | | message: '评价方法修改成功' |
| | | }) |
| | | emit('refresh') |
| | | }else{ |
| | | ElMessage({ |
| | | type: 'warning', |
| | | message: res.data.msg |
| | | }) |
| | | } |
| | | evaluateDialogState.evaluateMethodVisible = false |
| | | evaluateDialogState.evaluateDialogVisible = false |
| | | ElMessageBox.confirm(`此操作将修改该评价计划的评价方法并清除之前的所有评价信息,是否继续?`, '提示', { |
| | | confirmButtonText: '确认', |
| | | cancelButtonText: '取消', |
| | | type: 'warning' |
| | | }) |
| | | .then(async () => { |
| | | let res = await evaluateApi().modEvaluateMethod({ |
| | | id: evaluateDialogState.evaluateForm.id, |
| | | evaluateMethodId: evaluateDialogState.evaluateForm.evaluateMethod |
| | | }); |
| | | if(res.data.code === 100){ |
| | | ElMessage({ |
| | | type: 'success', |
| | | message: '评价方法修改成功' |
| | | }) |
| | | emit('refresh') |
| | | }else{ |
| | | ElMessage({ |
| | | type: 'warning', |
| | | message: res.data.msg |
| | | }) |
| | | } |
| | | evaluateDialogState.evaluateMethodVisible = false |
| | | evaluateDialogState.evaluateDialogVisible = false |
| | | }) |
| | | .catch((error) => { |
| | | }); |
| | | } |
| | | |
| | | const onSubmitEvaluate = () => { |
| | |
| | | <el-table-column v-if="scope.row.identificationMethod == 5" prop="analogyReference" label="类比参照" show-overflow-tooltip align="center"></el-table-column> |
| | | <el-table-column v-if="scope.row.identificationMethod == 5" prop="analogyRiskFactor" label="存在风险因素" show-overflow-tooltip align="center"></el-table-column> |
| | | <el-table-column v-if="scope.row.identificationMethod == 5" prop="analogyResult" label="可能存在后果" show-overflow-tooltip align="center"></el-table-column> |
| | | <el-table-column label="操作" width="250"> |
| | | <template #default="scope"> |
| | | <el-button size="small" text type="primary" :icon="Plus" @click="openEvaluateDialog('评价', scope.row)">评价</el-button> |
| | | </template> |
| | | <el-table-column label="操作" width="250" > |
| | | <template #default="scope2"> |
| | | <el-button size="small" v-if="scope.row.planExecStatus === 3" text type="primary" :icon="Plus" @click="openEvaluateDialog('评价', scope2.row)">评价</el-button> |
| | | <el-button size="small" v-if="scope2.row.riskValue" text type="primary" :icon="View" @click="openEvaluateDialog('查看', scope2.row)">查看</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </template> |
| | |
| | | }; |
| | | |
| | | const accessEvaluate = (val: IdentifyType) => { |
| | | ElMessageBox.confirm(`此操作将提交该评价计划:“${val.assessPlanName}”,是否继续?`, '提示', { |
| | | ElMessageBox.confirm(`此操作将提交该评价计划:“${val.assessPlanName}”的评价信息,是否继续?`, '提示', { |
| | | confirmButtonText: '确认', |
| | | cancelButtonText: '取消', |
| | | type: 'warning' |
| | |
| | | |
| | | const accessIdentify = (val: IdentifyType) => { |
| | | if(val.factorQueryDTOList?.length > 0){ |
| | | ElMessageBox.confirm(`此操作将派发该计划:“${val.assessPlanName}”,是否继续?`, '提示', { |
| | | ElMessageBox.confirm(`此操作将提交该计划:“${val.assessPlanName}”的辨识信息,是否继续?`, '提示', { |
| | | confirmButtonText: '确认', |
| | | cancelButtonText: '取消', |
| | | type: 'warning' |
| | |
| | | }else if(title === '查看'){ |
| | | planDialogState.title = '查看'; |
| | | planDialogState.disabled = true |
| | | planDialogState.planForm.assessTime = [value.assessStartTime, value.assessEndTime] |
| | | for(let i in planDialogState.planForm){ |
| | | if(isValidKey(i, planDialogState.planForm)){ |
| | | planDialogState.planForm[i] = value[i] |
| | | } |
| | | } |
| | | planDialogState.planForm.assessTime=[value.assessStartTime, value.assessEndTime] |
| | | console.log(value,planDialogState.planForm.assessTime,'time') |
| | | }else{ |
| | | planDialogState.title = '编辑'; |
| | | planDialogState.planForm.id = value.id |
| | | planDialogState.planForm.assessTime=[value.assessStartTime, value.assessEndTime] |
| | | console.log(planDialogState.planForm.assessTime,'5') |
| | | formatTime() |
| | | console.log(planDialogState.planForm.assessTime,'6 ') |
| | | for(let i in planDialogState.planForm){ |
| | | if(isValidKey(i, planDialogState.planForm)){ |
| | | planDialogState.planForm[i] = value[i] |
| | | } |
| | | } |
| | | planDialogState.planForm.assessTime=[value.assessStartTime, value.assessEndTime] |
| | | } |
| | | }; |
| | | |
| | | const formatTime = () => { |
| | | planDialogState.planForm.assessStartTime = planDialogState.planForm.assessTime === null ? '' : planDialogState.planForm.assessTime[0] |
| | | planDialogState.planForm.assessEndTime = planDialogState.planForm.assessTime === null ? '' : planDialogState.planForm.assessTime[1] |
| | | planDialogState.planForm.assessStartTime = planDialogState.planForm.assessTime == [] ? '' : planDialogState.planForm.assessTime[0] |
| | | planDialogState.planForm.assessEndTime = planDialogState.planForm.assessTime == [] ? '' : planDialogState.planForm.assessTime[1] |
| | | }; |
| | | |
| | | const onSubmitPlan = () => { |
| | | planFormRef.value.validate(async(valid: boolean) => { |
| | | if(valid){ |
| | | formatTime() |
| | | delete planDialogState.planForm.assessTime |
| | | if(planDialogState.title === '新增'){ |
| | | let res = await planApi().addPlan(planDialogState.planForm); |
| | |
| | | identificationMethodList: Array<Type>, |
| | | evaluateMethodList: Array<Type> |
| | | riskUnitList: Array<RiskUnitType> |
| | | personList: Array<SystemPersonType> |
| | | personList: Array<SystemPersonType>, |
| | | reSendTitle:string |
| | | reSendDialogVisible: boolean |
| | | reSendForm: { |
| | | id: null | number, |
| | | identificationUserId: null | number, |
| | | evaluateUserId: null | number, |
| | | }, |
| | | rules: object |
| | | } |
| | | |
| | | declare interface SystemPersonType { |
| | |
| | | riskUnitId: number | null, |
| | | planUserId: number | null, |
| | | assessPlanName: string, |
| | | assessTime?: string[], |
| | | assessTime: string[], |
| | | assessStartTime: string, |
| | | assessEndTime: string, |
| | | identificationUserId: number | null, |
| | |
| | | <el-button v-if="scope.row.planSellStatus === 1" size="small" text type="primary" :icon="Edit" @click="openPlanDialog('修改', scope.row)">编辑</el-button> |
| | | <el-button v-if="scope.row.identificationUserId == planState.user" size="small" text type="primary" :icon="Edit" @click="refuseIdentify(scope.row)">拒绝辨识</el-button> |
| | | <el-button v-if="scope.row.evaluateUserId == planState.user" size="small" text type="primary" :icon="Edit" @click="refuseEvaluate(scope.row)">拒绝评价</el-button> |
| | | <el-button v-if="scope.row.sceneUserId == planState.user" size="small" text type="primary" :icon="Edit" @click="refuseScene(scope.row)">拒绝现场</el-button> |
| | | <!-- <el-button v-if="scope.row.sceneUserId == planState.user" size="small" text type="primary" :icon="Edit" @click="refuseScene(scope.row)">拒绝现场</el-button>--> |
| | | <el-button v-if="scope.row.identificationUserId == null" size="small" text type="primary" :icon="Edit" @click="reSendJob(scope.row,'identification')">重新指派辨识</el-button> |
| | | <el-button v-if="scope.row.evaluateUserId == null" size="small" text type="primary" :icon="Edit" @click="reSendJob(scope.row,'evaluate')">重新指派评价</el-button> |
| | | <el-button v-if="scope.row.planSellStatus === 1" size="small" text type="danger" :icon="Delete" @click="onDelPlan(scope.row)">删除</el-button> |
| | | </template> |
| | | </el-table-column> |
| | |
| | | </div> |
| | | </div> |
| | | <plan-dialog ref="planDialogRef" @refresh="getPlanData"></plan-dialog> |
| | | |
| | | <el-dialog :title="planState.reSendTitle" v-model="planState.reSendDialogVisible" width="50%"> |
| | | <el-form ref="ruleFormRef" :rules="planState.rules" :model="planState.reSendForm" label-width="120px"> |
| | | <el-form-item v-if="planState.reSendTitle == '指派辨识专家'" label="选择辨识专家" prop="identificationUserId"> |
| | | <el-select v-model="planState.reSendForm.identificationUserId" style="width:100%" placeholder="辨识专家" clearable> |
| | | <el-option v-for="item in planState.personList" :key="item.id" :label="item.realName" :value="item.id"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item v-if="planState.reSendTitle == '指派评价专家'" label="选择评价专家" prop="evaluateUserId"> |
| | | <el-select v-model="planState.reSendForm.evaluateUserId" style="width:100%" placeholder="评价专家" clearable> |
| | | <el-option v-for="item in planState.personList" :key="item.id" :label="item.realName" :value="item.id"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-form> |
| | | <template #footer> |
| | | <span class="dialog-footer" style="padding-top:10px;text-align: center !important;"> |
| | | <el-button @click="planState.reSendDialogVisible = !planState.reSendDialogVisible" size="default">取 消</el-button> |
| | | <el-button type="primary" @click="onSubmitReSend(ruleFormRef)" size="default">确认指派</el-button> |
| | | </span> |
| | | </template> |
| | | </el-dialog> |
| | | |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import {defineAsyncComponent, onMounted, reactive, ref} from "vue"; |
| | | import {planApi} from "/@/api/analyse/plan"; |
| | | import {ElMessage, ElMessageBox} from "element-plus"; |
| | | import {ElMessage, ElMessageBox, FormInstance} from "element-plus"; |
| | | import { Edit, View, Plus, Delete } from '@element-plus/icons-vue'; |
| | | import {riskUnitApi} from "/@/api/analyse/riskUnit"; |
| | | import {personApi} from "/@/api/basic/person"; |
| | | import {useUserInfo} from "/@/stores/userInfo"; |
| | | import { storeToRefs } from 'pinia'; |
| | | import {userApi} from "/@/api/systemManage/user"; |
| | | import {assessApplyApi} from "/@/api/analyse/assessApply"; |
| | | |
| | | |
| | | const PlanDialog = defineAsyncComponent(() => import('./components/planDialog.vue')); |
| | |
| | | const planDialogRef = ref(); |
| | | const userInfo = useUserInfo(); |
| | | const { userInfos } = storeToRefs(userInfo); |
| | | |
| | | const ruleFormRef = ref<FormInstance>() |
| | | const planState = reactive<PlanStateType>({ |
| | | planData: [], |
| | | user: null, |
| | |
| | | ], |
| | | personList: [], |
| | | identificationMethodList: [ |
| | | {id:1, name: 'PHA'}, |
| | | {id:2, name: 'JHA'}, |
| | | {id:3, name: 'SCL'}, |
| | | {id:4, name: 'HAZOP'}, |
| | | {id:5, name: '类比法'}, |
| | | ], |
| | | evaluateMethodList: [ |
| | | {id:1, name: 'LEC'}, |
| | | {id:2, name: 'LS'}, |
| | | {id:3, name: 'MES'}, |
| | | {id:4, name: 'RS'}, |
| | | ] |
| | | {id:1, name: 'PHA'}, |
| | | {id:2, name: 'JHA'}, |
| | | {id:3, name: 'SCL'}, |
| | | {id:4, name: 'HAZOP'}, |
| | | {id:5, name: '类比法'}, |
| | | ], |
| | | evaluateMethodList: [ |
| | | {id:1, name: 'LEC'}, |
| | | {id:2, name: 'LS'}, |
| | | {id:3, name: 'MES'}, |
| | | {id:4, name: 'RS'}, |
| | | ], |
| | | reSendTitle:'', |
| | | reSendDialogVisible: false, |
| | | reSendForm: { |
| | | id: null, |
| | | identificationUserId: null, |
| | | evaluateUserId: null |
| | | }, |
| | | rules: { |
| | | identificationUserId: [{ required: true, message: '请选择辨识专家', trigger: 'blur' }], |
| | | evaluateUserId: [{ required: true, message: '请选择评价专家', trigger: 'blur' }] |
| | | } |
| | | // deviceUnitList: [ |
| | | // {id:1, name: '台'}, |
| | | // {id:2, name: '个'}, |
| | |
| | | }; |
| | | |
| | | const refuseIdentify = async(val: PlanType)=>{ |
| | | let res = await planApi().refuseIdentify({ id: val.id }); |
| | | if (res.data.code === 100) { |
| | | ElMessage({ |
| | | type: 'success', |
| | | duration: 2000, |
| | | message: '拒绝成功' |
| | | }); |
| | | await getPlanData(); |
| | | } else { |
| | | ElMessage({ |
| | | type: 'warning', |
| | | message: res.data.msg |
| | | }); |
| | | ElMessageBox.confirm(`此操作将拒绝作为该计划:“${val.assessPlanName}”的辨识专家,是否继续?`, '提示', { |
| | | confirmButtonText: '确认', |
| | | cancelButtonText: '取消', |
| | | type: 'warning' |
| | | }) |
| | | .then(async () => { |
| | | let res = await planApi().refuseIdentify({ id: val.id }); |
| | | if (res.data.code === 100) { |
| | | ElMessage({ |
| | | type: 'success', |
| | | duration: 2000, |
| | | message: '拒绝成功' |
| | | }); |
| | | await getPlanData(); |
| | | } else { |
| | | ElMessage({ |
| | | type: 'warning', |
| | | message: res.data.msg |
| | | }); |
| | | } |
| | | }) |
| | | .catch((error) => { |
| | | }); |
| | | } |
| | | |
| | | const reSendJob= async(val: PlanType,type:string)=>{ |
| | | planState.reSendForm = { |
| | | id: val.id, |
| | | identificationUserId: null, |
| | | evaluateUserId: null |
| | | } |
| | | if(type=='identification'){ |
| | | planState.reSendTitle = '指派辨识专家' |
| | | }else{ |
| | | planState.reSendTitle = '指派评价专家' |
| | | } |
| | | planState.reSendDialogVisible = true |
| | | } |
| | | |
| | | const onSubmitReSend = async (formEl: FormInstance | undefined) => { |
| | | if (!formEl) return |
| | | await formEl.validate(async(valid, fields) => { |
| | | if (valid) { |
| | | let res = await planApi().reSendJob(planState.reSendForm); |
| | | if(res.data.code === 100){ |
| | | ElMessage({ |
| | | type: 'success', |
| | | message: '重新指派成功' |
| | | }); |
| | | }else{ |
| | | ElMessage({ |
| | | type: 'warning', |
| | | message: res.data.msg |
| | | }); |
| | | } |
| | | |
| | | planState.reSendForm = { |
| | | id: null, |
| | | identificationUserId: null, |
| | | evaluateUserId: null |
| | | }, |
| | | planState.reSendDialogVisible = false |
| | | getPlanData() |
| | | } else { |
| | | console.log('error submit!', fields) |
| | | } |
| | | }) |
| | | } |
| | | |
| | | const refuseEvaluate = async(val: PlanType)=>{ |
| | | let res = await planApi().refuseEvaluate({ id: val.id }); |
| | | if (res.data.code === 100) { |
| | | ElMessage({ |
| | | type: 'success', |
| | | duration: 2000, |
| | | message: '拒绝成功' |
| | | }); |
| | | await getPlanData(); |
| | | } else { |
| | | ElMessage({ |
| | | type: 'warning', |
| | | message: res.data.msg |
| | | }); |
| | | } |
| | | ElMessageBox.confirm(`此操作将拒绝作为该计划:“${val.assessPlanName}”的评价专家,是否继续?`, '提示', { |
| | | confirmButtonText: '确认', |
| | | cancelButtonText: '取消', |
| | | type: 'warning' |
| | | }) |
| | | .then(async () => { |
| | | let res = await planApi().refuseEvaluate({ id: val.id }); |
| | | if (res.data.code === 100) { |
| | | ElMessage({ |
| | | type: 'success', |
| | | duration: 2000, |
| | | message: '拒绝成功' |
| | | }); |
| | | await getPlanData(); |
| | | } else { |
| | | ElMessage({ |
| | | type: 'warning', |
| | | message: res.data.msg |
| | | }); |
| | | } |
| | | }) |
| | | .catch((error) => { |
| | | }); |
| | | } |
| | | |
| | | const refuseScene = async(val: PlanType)=>{ |
| | | let res = await planApi().refuseScene({ id: val.id }); |
| | | if (res.data.code === 100) { |
| | | ElMessage({ |
| | | type: 'success', |
| | | duration: 2000, |
| | | message: '拒绝成功' |
| | | }); |
| | | await getPlanData(); |
| | | } else { |
| | | ElMessage({ |
| | | type: 'warning', |
| | | message: res.data.msg |
| | | }); |
| | | } |
| | | } |
| | | // const refuseScene = async(val: PlanType)=>{ |
| | | // let res = await planApi().refuseScene({ id: val.id }); |
| | | // if (res.data.code === 100) { |
| | | // ElMessage({ |
| | | // type: 'success', |
| | | // duration: 2000, |
| | | // message: '拒绝成功' |
| | | // }); |
| | | // await getPlanData(); |
| | | // } else { |
| | | // ElMessage({ |
| | | // type: 'warning', |
| | | // message: res.data.msg |
| | | // }); |
| | | // } |
| | | // } |
| | | |
| | | const onDelPlan = (val: PlanType) => { |
| | | ElMessageBox.confirm(`此操作将永久删除该计划:“${val.assessPlanName}”,是否继续?`, '提示', { |
| | |
| | | <el-table-column prop="stage" label="评估状态"> |
| | | <template #default="scope"> |
| | | <el-tag :type="scope.row.stage == 4?'success':scope.row.stage == 1?'info':''"> |
| | | {{scope.row.stage == 1?'未评估':scope.row.status == 2?'评估中':scope.row.status == 3?'评估完成':scope.row.status == 4?'生成报告':'--'}} |
| | | {{scope.row.stage == 1?'未评估':scope.row.stage == 2?'评估中':scope.row.stage == 3?'评估完成':scope.row.stage == 4?'生成报告':'--'}} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | |
| | | <el-table-column prop="stage" label="评估状态"> |
| | | <template #default="scope"> |
| | | <el-tag :type="scope.row.stage == 4?'success':scope.row.stage == 1?'info':''"> |
| | | {{scope.row.stage == 1?'未评估':scope.row.status == 2?'评估中':scope.row.status == 3?'评估完成':scope.row.status == 4?'生成报告':'--'}} |
| | | {{scope.row.stage == 1?'未评估':scope.row.stage == 2?'评估中':scope.row.stage == 3?'评估完成':scope.row.stage == 4?'生成报告':'--'}} |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | |
| | | // 存储 token 到浏览器缓存 |
| | | let res = await useLoginApi().signIn(state.ruleForm); |
| | | if (res.data.code === 100) { |
| | | console.log(res.data.data,'user') |
| | | await userInfo.setUserInfos(res.data.data); |
| | | Cookies.set('token', res.data.data.tk); |
| | | Cookies.set('uid', res.data.data.uid); |