From 8d14fec97344df49d58db115852c03b466482bc6 Mon Sep 17 00:00:00 2001 From: 马宇豪 <978517621@qq.com> Date: 星期三, 12 四月 2023 14:47:21 +0800 Subject: [PATCH] 设备、场所、部门接口 --- src/api/analyse/assessApply/index.ts | 13 src/views/experiment/project/index.ts | 64 src/api/analyse/identify/index.ts | 11 src/views/analyse/assessApply/index.vue | 352 +++ src/views/analyse/evaluate/components/evaluateDialog.vue | 1092 +++++++++- src/views/analyse/evaluate/index.ts | 50 src/views/analyse/riskUnit/index.ts | 8 src/views/experiment/developing/index.vue | 145 + src/views/experiment/project/components/selectMaterial.vue | 71 src/api/analyse/plan/index.ts | 24 src/views/analyse/plan/components/planDialog.vue | 67 src/views/experiment/project/components/applyDialog.vue | 13 src/views/analyse/riskUnit/components/riskUnitDialog.vue | 23 src/views/analyse/plan/index.vue | 81 src/views/analyse/plan/index.ts | 8 src/views/experiment/developing/components/developDialog.vue | 638 ++++++ src/views/loginPage/component/accountLogin.vue | 2 src/views/experiment/project/components/selectDanger.vue | 14 src/views/experiment/project/index.vue | 60 src/layout/navBars/breadcrumb/user.vue | 11 src/views/analyse/identify/index.ts | 51 src/views/experiment/project/components/selectEquipment.vue | 75 src/views/analyse/identify/components/identifyDialog.vue | 497 +++- src/views/analyse/riskUnit/index.vue | 17 src/views/experiment/project/components/selectRoom.vue | 268 ++ src/api/analyse/evaluate/index.ts | 77 src/views/analyse/identify/index.vue | 63 src/api/basic/unit/index.ts | 7 src/views/analyse/assessApply/index.ts | 46 src/views/analyse/evaluate/index.vue | 111 src/views/analyse/identify/components/identifyQuery.vue | 167 + src/layout/navBars/tagsView/tagsView.vue | 2 /dev/null | 533 ----- src/views/analyse/assessApply/components/reportDialog.vue | 496 ++++ src/views/analyse/assessApply/components/riskDialog.vue | 137 + src/api/experiment/project/index.ts | 26 src/views/analyse/assessApply/components/riskUnitDialog.vue | 195 + src/views/experiment/project/components/projectDialog.vue | 251 + src/views/analyse/assessApply/components/selectDanger.vue | 192 + src/views/experiment/project/components/selectPerson.vue | 50 40 files changed, 4,798 insertions(+), 1,210 deletions(-) diff --git a/src/api/analyse/assessApply/index.ts b/src/api/analyse/assessApply/index.ts new file mode 100644 index 0000000..5da7169 --- /dev/null +++ b/src/api/analyse/assessApply/index.ts @@ -0,0 +1,13 @@ +import request from '/@/utils/request'; + +export function assessApplyApi() { + return { + getData: (params: object) => { + return request({ + url: import.meta.env.VITE_API_URL + '/experimentInfo/list/page/apply/evaluation', + method: 'post', + data: params + }); + }, + }; +} diff --git a/src/api/analyse/evaluate/index.ts b/src/api/analyse/evaluate/index.ts index 66c5166..3bdd354 100644 --- a/src/api/analyse/evaluate/index.ts +++ b/src/api/analyse/evaluate/index.ts @@ -19,6 +19,14 @@ }); }, + modEvaluateMethod: (params: object) => { + return request({ + url: import.meta.env.VITE_API_URL + '/risk/update/evaluateUpdateMethod', + method: 'post', + data: params + }); + }, + deleteEvaluateById: (params: object) => { return request({ url: import.meta.env.VITE_API_URL + '/risk/delete/deleteIdentification', @@ -35,5 +43,74 @@ }); }, + getListLecL: () => { + return request({ + url: import.meta.env.VITE_API_URL + '/basic/select/listLecL', + method: 'get' + }); + }, + + getListLecE: () => { + return request({ + url: import.meta.env.VITE_API_URL + '/basic/select/listLecE', + method: 'get' + }); + }, + + getListLecC: () => { + return request({ + url: import.meta.env.VITE_API_URL + '/basic/select/listLecC', + method: 'get' + }); + }, + + getListLsL: () => { + return request({ + url: import.meta.env.VITE_API_URL + '/basic/select/listLsL', + method: 'get' + }); + }, + + getListLsS: () => { + return request({ + url: import.meta.env.VITE_API_URL + '/basic/select/listLsS', + method: 'get' + }); + }, + + getListRsR: () => { + return request({ + url: import.meta.env.VITE_API_URL + '/basic/select/listRsR', + method: 'get' + }); + }, + + getListRsS: () => { + return request({ + url: import.meta.env.VITE_API_URL + '/basic/select/listRsS', + method: 'get' + }); + }, + + getListMesM: () => { + return request({ + url: import.meta.env.VITE_API_URL + '/basic/select/listMesM', + method: 'get' + }); + }, + + getListMesE: () => { + return request({ + url: import.meta.env.VITE_API_URL + '/basic/select/listMesE', + method: 'get' + }); + }, + + getListMesS: () => { + return request({ + url: import.meta.env.VITE_API_URL + '/basic/select/listMesS', + method: 'get' + }); + }, }; } diff --git a/src/api/analyse/identify/index.ts b/src/api/analyse/identify/index.ts index 1a19b1e..282da3f 100644 --- a/src/api/analyse/identify/index.ts +++ b/src/api/analyse/identify/index.ts @@ -18,7 +18,6 @@ }); }, - modIdentify: (params: object) => { return request({ url: import.meta.env.VITE_API_URL + '/risk/update/updateIdentification', @@ -27,6 +26,16 @@ }); }, + // 修改辨识方法 + + UpdateIdentifyMethod: (params: object) => { + return request({ + url: import.meta.env.VITE_API_URL + '/risk/update/identificationUpdateMethod', + method: 'post', + data: params + }); + }, + deleteIdentifyById: (params: object) => { return request({ url: import.meta.env.VITE_API_URL + '/risk/delete/deleteIdentification', diff --git a/src/api/analyse/plan/index.ts b/src/api/analyse/plan/index.ts index 8c1ef58..2e01c70 100644 --- a/src/api/analyse/plan/index.ts +++ b/src/api/analyse/plan/index.ts @@ -49,5 +49,29 @@ method: 'get', }); }, + + refuseIdentify: (params: object)=>{ + return request({ + url: import.meta.env.VITE_API_URL + '/risk/update/identificationRefuse', + method: 'post', + data: params + }); + }, + + refuseEvaluate: (params: object)=>{ + return request({ + url: import.meta.env.VITE_API_URL + '/risk/update/evaluateRefuse', + method: 'post', + data: params + }); + }, + + refuseScene: (params: object)=>{ + return request({ + url: import.meta.env.VITE_API_URL + '/risk/update/sceneRefuse', + method: 'post', + data: params + }); + } }; } diff --git a/src/api/basic/unit/index.ts b/src/api/basic/unit/index.ts index 3ee1df3..209f332 100644 --- a/src/api/basic/unit/index.ts +++ b/src/api/basic/unit/index.ts @@ -41,5 +41,12 @@ }); }, + getAllUnitType: () => { + return request({ + url: import.meta.env.VITE_API_URL + '/basic/select/listRiskUnitType', + method: 'get', + }); + }, + }; } diff --git a/src/api/experiment/project/index.ts b/src/api/experiment/project/index.ts index 594e863..27efbb2 100644 --- a/src/api/experiment/project/index.ts +++ b/src/api/experiment/project/index.ts @@ -10,6 +10,14 @@ }); }, + getDevelopByList: (params: object) => { + return request({ + url: import.meta.env.VITE_API_URL + '/experimentInfo/list/page/develop', + method: 'post', + data: params + }); + }, + addProject: (params: object) => { return request({ url: import.meta.env.VITE_API_URL + '/experimentInfo/save', @@ -18,9 +26,17 @@ }); }, + addDevelop: (params: object) => { + return request({ + url: import.meta.env.VITE_API_URL + '/experimentInfo/develop/save', + method: 'post', + data: params + }); + }, + modProject: (params: object) => { return request({ - url: import.meta.env.VITE_API_URL + '/experimentInfo/mod', + url: import.meta.env.VITE_API_URL + '/experimentInfo/rectify/save', method: 'post', data: params }); @@ -42,6 +58,14 @@ }); }, + cancelProject: (params: object) => { + return request({ + url: import.meta.env.VITE_API_URL + '/experimentInfo/update/revoke/apply/evaluation', + method: 'post', + data: params + }); + }, + deleteProjectById: (params: object) => { return request({ url: import.meta.env.VITE_API_URL + '/experimentInfo/delete', diff --git a/src/layout/navBars/breadcrumb/user.vue b/src/layout/navBars/breadcrumb/user.vue index b6245f3..590ad2c 100644 --- a/src/layout/navBars/breadcrumb/user.vue +++ b/src/layout/navBars/breadcrumb/user.vue @@ -1,8 +1,9 @@ <template> <div class="layout-navbars-breadcrumb-user pr15" :style="{ flex: layoutUserFlexNum }"> <div class="logo"> - <img @click="toHome" src="../../../assets/menu/company.png" /> - <span>{{ systemName }}</span> +<!-- <img @click="toHome" src="../../../assets/menu/company.png" />--> + <img src="../../../assets/menu/company.png" /> +<!-- <span>{{ systemName }}</span>--> </div> <div style="display: flex; align-items: center; padding-right: 5px"> <!-- <div @click="backToMenu()" class="backBtn">返回首页</div>--> @@ -301,7 +302,7 @@ .logo{ img { height: 100%; - cursor: pointer; + //cursor: pointer; } span{ font-size: 32px; @@ -326,7 +327,7 @@ .logo{ img { height: 90%; - cursor: pointer; + //cursor: pointer; } span{ font-size: 28px; @@ -352,7 +353,7 @@ img { width: 60%; height: auto; - cursor: pointer; + //cursor: pointer; } span{ font-size: 22px; diff --git a/src/layout/navBars/tagsView/tagsView.vue b/src/layout/navBars/tagsView/tagsView.vue index d0558d5..64c78dc 100644 --- a/src/layout/navBars/tagsView/tagsView.vue +++ b/src/layout/navBars/tagsView/tagsView.vue @@ -530,7 +530,7 @@ // 监听布局配置开启 TagsView 共用,为了演示还原默认值 proxy.mittBus.on('openShareTagsView', () => { if (getThemeConfig.value.isShareTagsView) { - router.push('/home'); + router.push('/project'); state.tagsViewList = []; state.tagsViewRoutesList.map((v: any) => { if (v.meta.isAffix && !v.meta.isHide) { diff --git a/src/views/analyse/assessApply/components/reportDialog.vue b/src/views/analyse/assessApply/components/reportDialog.vue new file mode 100644 index 0000000..ae84a4e --- /dev/null +++ b/src/views/analyse/assessApply/components/reportDialog.vue @@ -0,0 +1,496 @@ +<template> + <div class="system-menu-dialog-container"> + <el-dialog :title="reportDialogState.title" v-model="reportDialogState.reportDialogVisible" width="80%"> + <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-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 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> + </tr> + <tr> + <td class="w-25 m-color required">负责人</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> + </td> + <td class="w-25 m-color required">电话</td> + <td class="w-25 m-color"> + <el-input readonly v-model="reportDialogState.reportForm.liabilityUserPhone" /> + </td> + </tr> + <tr> + <td class="w-25 m-color required">安全负责人</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" /> + </td> + <td class="w-25 m-color required">电话</td> + <td class="w-25 m-color"> + <el-input readonly v-model="reportDialogState.reportForm.safeLiabilityUserPhone" /> + </td> + </tr> + <tr> + <td class="w-25 m-color required">部门</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> + </tr> + <tr v-for="(item,index) in reportDialogState.reportForm.siteList" :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> + </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-25 m-color"> + <el-select style="width: 100%" :disabled="reportDialogState.disabled" v-model="reportDialogState.reportForm.assessUserId" clearable filterable> + <el-option + v-for="item in reportDialogState.allPersonList" + :key="item.id" + :value="item.id" + :label="item.personName" + ></el-option> + </el-select> + </td> + <td class="w-25 m-color required">评估时间</td> + <td class="w-25 m-color"> + <el-date-picker :disabled="reportDialogState.disabled" type="datetime" format="YYYY/MM/DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" v-model="reportDialogState.reportForm.assessTime" /> + </td> + </tr> + + <tr class="m-color b-font" style="text-align: center">实验概况</tr> + <tr> + <el-input type="textarea" :autosize="{ minRows: 3}" :disabled="reportDialogState.disabled" v-model="reportDialogState.reportForm.experimentDesc" placeholder="(简要描述实验原理、实验步骤、所用试剂或材料设备等)" /> + </tr> + <tr class="m-color b-font" style="text-align: center">实验涉及的危险源</tr> + <tr> + <td class="w-25 m-color required">危险源种类</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> + </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> + <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="" /> + </tr> + <tr class="m-color b-font" 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-group> + </td> + </tr> + <tr> + <el-input type="textarea" :autosize="{ minRows: 3}" :disabled="reportDialogState.disabled" v-model="reportDialogState.reportForm.reskLevelReason" 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> + </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"; + +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, + liabilityUserId: null, + liabilityUserPhone: '', + safeLiabilityUserId: null, + safeLiabilityUser: '', + safeLiabilityUserPhone: '', + dep: "", + siteList: [], + experimentDesc: '', + safeRiskAnalysis: '', + emergencyMeasure: '', + assessLevel:null, + riskSource: [] + }, + reportFormRules: {}, + allPersonList: [], + allRoomList: [], + systemPersonList: [], +}) + +const showReportDialog = (title: string, value: ProjectType, allRoomList: RoomType []) => { + 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{ + 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 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); + 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 projectApi().modProject(reportDialogState.reportForm) + 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; + +&: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%; + } + +.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> diff --git a/src/views/analyse/assessApply/components/riskDialog.vue b/src/views/analyse/assessApply/components/riskDialog.vue new file mode 100644 index 0000000..76d9b06 --- /dev/null +++ b/src/views/analyse/assessApply/components/riskDialog.vue @@ -0,0 +1,137 @@ +<template> + <div class="system-menu-dialog-container"> + <el-dialog title="管理实验现实风险" v-model="assessApplyDialogState.assessApplyDialogVisible" width="60%"> + <div> + <el-button @click="addUnit()" type="primary" style="margin-bottom: 20px" size="default">增加风险分析单元</el-button> + </div> + <el-table ref="multipleTableRef" :data="assessApplyDialogState.riskUnitData" style="width: 100%" :header-cell-style="{ background: '#fafafa' }"> + <el-table-column prop="riskCode" label="风险单元编号"/> + <el-table-column prop="riskName" label="风险单元名称"/> + <el-table-column prop="riskType" label="风险类型"> + <template #default="scope"> + <span>{{`${assessApplyDialogState.riskList.find(item =>item.id === scope.row.riskType)?.name || ''}`}}</span> + </template> + </el-table-column> + <el-table-column prop="riskUnitType" label="风险单元类型"/> + <el-table-column prop="riskUnitType" label="负责人"> + <template #default="scope"> + <span>{{`${assessApplyDialogState.allPersonList.find(item =>item.id === scope.row.liabilityUserId)?.personName || ''}`}}</span> + </template> + </el-table-column> + <el-table-column prop="evaluateStatus" label="是否评价"> + <template #default="scope"> + <span>{{scope.row.evaluateStatus == 1?'未评价':scope.row.evaluateStatus == 2?'已评价':'--'}}</span> + </template> + </el-table-column> + </el-table> + <template #footer> + <span class="dialog-footer"> + <el-button @click="assessApplyDialogState.assessApplyDialogVisible = !assessApplyDialogState.assessApplyDialogVisible" type="primary" size="default">确定</el-button> + </span> + </template> + <risk-unit-dialog ref="riskUnitDialogRef" @refresh="getRiskData"></risk-unit-dialog> + </el-dialog> + </div> +</template> + +<script setup lang="ts"> +import {defineAsyncComponent, onMounted, reactive, ref} from "vue"; +import {ElMessage} from "element-plus"; +import {projectApi} from "/@/api/experiment/project"; +import {personApi} from "/@/api/basic/person"; +import {riskUnitApi} from "/@/api/analyse/riskUnit"; +import {unitApi} from "/@/api/basic/unit"; +const RiskUnitDialog = defineAsyncComponent(() => import('./riskUnitDialog.vue')); + +const assessApplyDialogState = reactive<AssessApplyDialogStateType>({ + title: '', + riskUnitData: [], + assessApplyDialogVisible: false, + id: null, + liabilityUserId: null, + riskList: [ + {id: 1, name: '固有风险'}, + {id:2, name: '实验风险'} + ], + basicUnitList: [], + allPersonList: [], + allRiskTypeList: [] +}) + +const riskUnitDialogRef = ref() + +const showRiskDialog = (value: ProjectType) => { + assessApplyDialogState.assessApplyDialogVisible = true; + assessApplyDialogState.id = <number>value.id + assessApplyDialogState.liabilityUserId = <number>value.liabilityUserId + getRiskData(<number>value.id) +}; + +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}); + if(res.data.code === 100){ + assessApplyDialogState.riskUnitData = JSON.parse(JSON.stringify(res.data.data)); + }else{ + ElMessage({ + type: 'warning', + message: res.data.msg + }) + } +}; + +const getAllBasicUnitList = async () => { + let res = await unitApi().getAllUnit(); + if(res.data.code === 100){ + assessApplyDialogState.basicUnitList = 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){ + assessApplyDialogState.allPersonList = JSON.parse(JSON.stringify(res.data.data)); + }else{ + ElMessage({ + type: 'warning', + message: res.data.msg + }) + } +}; + +const getAllTypeList = async () =>{ + let res = await unitApi().getAllUnitType() + if(res.data.code === 100){ + assessApplyDialogState.allRiskTypeList = JSON.parse(JSON.stringify(res.data.data)); + }else{ + ElMessage({ + type: 'warning', + message: res.data.msg + }) + } +} + +const emit = defineEmits(['refresh']) + +defineExpose({ + showRiskDialog +}) + +onMounted(() => { + getAllBasicUnitList() + getAllPersonList() + getAllTypeList() +}) +</script> + +<style scoped> + +</style> diff --git a/src/views/analyse/assessApply/components/riskUnitDialog.vue b/src/views/analyse/assessApply/components/riskUnitDialog.vue new file mode 100644 index 0000000..22aee6c --- /dev/null +++ b/src/views/analyse/assessApply/components/riskUnitDialog.vue @@ -0,0 +1,195 @@ +<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> + <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> + +<script setup lang="ts"> +import { reactive, ref } from "vue"; +import { isValidKey } from "/@/utils/methods"; +import {ElMessage} from "element-plus"; +import {riskUnitApi} from "/@/api/analyse/riskUnit"; + +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: '固有风险'}, + ], +}) + +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, + }; +}; + +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, + }); + } + } + }else{ + ElMessage({ + type: 'warning', + message: '请完善基本信息', + }); + } + }) +} + +const emit = defineEmits(['refresh']) + +defineExpose({ + showRiskUnitDialog +}) +</script> + +<style scoped> + +</style> diff --git a/src/views/analyse/assessApply/components/selectDanger.vue b/src/views/analyse/assessApply/components/selectDanger.vue new file mode 100644 index 0000000..67739bb --- /dev/null +++ b/src/views/analyse/assessApply/components/selectDanger.vue @@ -0,0 +1,192 @@ +<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> + </tr> + <tr v-for="(item,index) in dangerSourceState.dangerList" :key="index"> + <td class="w-18"> + {{ index + 1 }} + </td> + <td class="w-18"> + <el-input :disabled="dangerSourceState.disabled" v-model="item.dangerFactor"></el-input> + </td> + <td class="w-18"> + <el-input :disabled="dangerSourceState.disabled" v-model="item.feature"></el-input> + </td> + <td class="w-18"> + <el-input :disabled="dangerSourceState.disabled" type="number" v-model="item.amount"></el-input> + </td> + <td class="w-18"> + <el-input :disabled="dangerSourceState.disabled" v-model="item.info"></el-input> + </td> + <td class="w-18"> + <el-button :disabled="dangerSourceState.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({dangerFactor: '', feature: '', amount: null, info: ''}); +}; + +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> diff --git a/src/views/analyse/assessApply/index.ts b/src/views/analyse/assessApply/index.ts new file mode 100644 index 0000000..7948ebb --- /dev/null +++ b/src/views/analyse/assessApply/index.ts @@ -0,0 +1,46 @@ +declare interface ReportStateType { + +} + +declare interface ReportDialogType { + title: string + disabled: boolean + reportDialogVisible: boolean + reportForm: object + reportFormRules: object + allPersonList: Array<AllPersonListType> + systemPersonList: Array<AllPersonListType> + allRoomList: Array<RoomType> +} + +declare interface DangerSourceType { + disabled: boolean + dangerList: Array<DangerListType> + classifyList: Array<Type> + wasteStorageList: Array<Type> +} + + +declare interface DangerListType { + dangerFactor: string + feature: string + amount: null | number + info: string +} + +declare interface AssessApplyDialogStateType { + title: string, + assessApplyDialogVisible: boolean, + id: number | null, + liabilityUserId: number | null, + riskUnitData: Array<any>, + riskList: Array<type>, + basicUnitList: Array<UnitType> + allPersonList: Array<AllPersonListType> + allRiskTypeList: Array<RiskType> +} + +declare interface type { + id: number, + name: string +} \ No newline at end of file diff --git a/src/views/analyse/assessApply/index.vue b/src/views/analyse/assessApply/index.vue new file mode 100644 index 0000000..3f6b536 --- /dev/null +++ b/src/views/analyse/assessApply/index.vue @@ -0,0 +1,352 @@ +<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.searchParams.experimentName" clearable filterable class="input-box" placeholder="实验名称"> + </el-input> + </div> + <div class="basic-line"> + <span>实验类型:</span> + <el-select v-model="developState.searchQuery.searchParams.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="getAssessData">查询</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.createExperimentTime?scope.row.createExperimentTime.substring(0,16):'--'}}</span> + </template> + </el-table-column> + <el-table-column prop="startTime" label="开展时间" show-overflow-tooltip> + <template #default="scope"> + <span>{{scope.row.startTime?scope.row.startTime.substring(0,16):'--'}}</span> + </template> + </el-table-column> + <el-table-column prop="siteList" label="实验场所" show-overflow-tooltip> + <template #default="scope"> + <span>{{scope.row.siteList.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 prop="status" label="评估申请"> + <template #default="scope"> + <span>{{scope.row.status == 1?'未申请':scope.row.status == 2?'已申请':'--'}}</span> + </template> + </el-table-column> + <el-table-column prop="status" label="评估申请时间" show-overflow-tooltip> + <template #default="scope"> + <span>{{scope.row.assessApplyTime?scope.row.assessApplyTime.substring(0,16):'--'}}</span> + </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?'生成报告':'--'}} + </el-tag> + </template> + </el-table-column> + <el-table-column label="操作" width="250" fixed="right"> + <template #default="scope"> + <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> + </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> + <risk-dialog ref="RiskDialogRef" @refresh="getAssessData"></risk-dialog> + <report-dialog ref="ReportDialogRef" @refresh="getAssessData"></report-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 { View,Edit, Plus, RefreshLeft } from '@element-plus/icons-vue'; +import {roomApi} from "/@/api/basic/room"; +import {assessApplyApi} from "/@/api/analyse/assessApply"; + +const RiskDialog = defineAsyncComponent(() => import('./components/riskDialog.vue')); +const ReportDialog = defineAsyncComponent(() => import('./components/reportDialog.vue')); + +const RiskDialogRef = ref(); + +const ReportDialogRef = ref(); +const developState = reactive<ProjectStateType>({ + developData: [], + searchQuery: { + pageIndex: 1, + pageSize: 10, + searchParams: { + experimentName: '', + experimentType: null, + } + }, + total: 0, + experimentTypeList: [ + {id: 1, name: '化学类'}, + {id: 2, name: '生物类'}, + {id: 3, name: '辐射类'}, + {id: 4, name: '机电类'}, + {id: 5, name: '特种设备类'}, + {id: 6, name: '其它类'}, + ], + allRoomList: [] +}) + +const getAssessData = async () => { + let res = await assessApplyApi().getData(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 openRiskDialog = (value: ProjectType) => { + RiskDialogRef.value.showRiskDialog(value); +}; + +const openReportDialog = (title: string,value: ProjectType) =>{ + ReportDialogRef.value.showReportDialog(title, value, developState.allRoomList); +} + +const onDelProject = (val: ProjectType) => { + ElMessageBox.confirm(`此操作将永久删除该实验:“${val.experimentCode}”,是否继续?`, '提示', { + confirmButtonText: '确认', + cancelButtonText: '取消', + type: 'warning' + }) + .then(async () => { + debugger + let res = await projectApi().deleteProjectById({ 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 onHandleSizeChange = (val: number) => { + developState.searchQuery.pageSize = val; + getAssessData(); +}; + +const onHandleCurrentChange = (val: number) => { + developState.searchQuery.pageIndex = val; + getAssessData(); +}; + +const reset = () => { + developState.searchQuery = { + pageIndex: 1, + pageSize: 10, + searchParams: { + experimentName: '', + experimentType: null, + } + } +}; + +onMounted(() => { + getAssessData() + getAllRoom() +}) + +</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> diff --git a/src/views/analyse/evaluate/components/evaluateDialog.vue b/src/views/analyse/evaluate/components/evaluateDialog.vue index 2fb58e0..966aac5 100644 --- a/src/views/analyse/evaluate/components/evaluateDialog.vue +++ b/src/views/analyse/evaluate/components/evaluateDialog.vue @@ -1,6 +1,6 @@ <template> <div class="system-menu-dialog-container"> - <el-dialog :title="evaluateDialogState.title" v-model="evaluateDialogState.evaluateDialogVisible" width="600px"> + <el-dialog :title="evaluateDialogState.title" v-model="evaluateDialogState.evaluateDialogVisible" width="70%"> <el-form ref="evaluateFormRef" :rules="evaluateDialogState.evaluateFormRules" :model="evaluateDialogState.evaluateForm" size="default" label-width="140px"> <el-row :gutter="35"> <!-- <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">--> @@ -16,126 +16,608 @@ <!-- </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="riskLevelValue"> - <el-select class="input-length" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.riskLevelValue" style="width:100%" placeholder="风险等级" clearable> - <el-option v-for="item in evaluateDialogState.riskLevelValueList" :key="item.id" :label="item.name" :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="riskLevel"> - <el-select class="input-length" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.riskLevel" style="width:100%" placeholder="风险级别" clearable> - <el-option v-for="item in evaluateDialogState.riskLevelList" :key="item.id" :label="item.name" :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="riskColor"> - <el-select class="input-length" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.riskColor" style="width:100%" placeholder="风险色" clearable> - <el-option v-for="item in evaluateDialogState.riskColorList" :key="item.id" :label="item.name" :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="manageLevel"> - <el-select class="input-length" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.manageLevel" style="width:100%" placeholder="管理层级" clearable> - <el-option v-for="item in evaluateDialogState.manageLevelList" :key="item.id" :label="item.name" :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="identificationMethod"> - <el-select class="input-length" :disabled="true" v-model="evaluateDialogState.evaluateMethod" style="width:100%" placeholder="评价方法" clearable> - <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-col> - - <div style="width: 100%" v-if="evaluateDialogState.evaluateMethod === 1"> + <div class="evaluateCard"> + <div class="cardTit"> + <span v-if="evaluateDialogState.evaluateForm.identificationMethod === 1">PHA辨识法</span> + <span v-if="evaluateDialogState.evaluateForm.identificationMethod === 2">JHA辨识法</span> + <span v-if="evaluateDialogState.evaluateForm.identificationMethod === 3">SCL辨识法</span> + <span v-if="evaluateDialogState.evaluateForm.identificationMethod === 4">HAZOP辨识法</span> + <span v-if="evaluateDialogState.evaluateForm.identificationMethod === 5">类比辨识法</span> + </div> + <div v-if="evaluateDialogState.evaluateForm.identificationMethod === 1"> <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="LEC_L" prop="lecL"> - <el-input type="number" class="input-length" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.lecL" placeholder="LEC_L" clearable></el-input> - </el-form-item> + <el-form-item label="检查项目"> + <el-input class="input-length" disabled v-model="evaluateDialogState.evaluateInfo.phaCheckItem" placeholder="检查项目" clearable></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="LEC_E" prop="lecE"> - <el-input type="number" class="input-length" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.lecE" placeholder="LEC_E" clearable></el-input> - </el-form-item> + <el-form-item label="存在风险因素"> + <el-input class="input-length" disabled v-model="evaluateDialogState.evaluateInfo.phaRiskFactor" placeholder="存在风险因素" clearable></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="LEC_C" prop="lecC"> - <el-input type="number" class="input-length" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.lecC" placeholder="LEC_C" clearable></el-input> - </el-form-item> + <el-form-item label="可能产生的后果"> + <el-input class="input-length" disabled v-model="evaluateDialogState.evaluateInfo.phaResult" placeholder="可能产生的后果" clearable></el-input> + </el-form-item> </el-col> + </div> + <div v-if="evaluateDialogState.evaluateForm.identificationMethod === 2"> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="作业步骤"> + <el-input class="input-length" disabled v-model="evaluateDialogState.evaluateInfo.jhaCheckItem" placeholder="作业步骤" clearable></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="危险源或潜在事件"> + <el-input class="input-length" disabled v-model="evaluateDialogState.evaluateInfo.jhaRiskFactor" placeholder="危险源或潜在事件" clearable></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="可能产生的后果"> + <el-input class="input-length" disabled v-model="evaluateDialogState.evaluateInfo.jhaResult" placeholder="可能产生的后果" clearable></el-input> + </el-form-item> + </el-col> + </div> + <div v-if="evaluateDialogState.evaluateForm.identificationMethod === 3"> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="检查项目"> + <el-input class="input-length" disabled v-model="evaluateDialogState.evaluateInfo.sclCheckItem" placeholder="检查项目" clearable></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="检查标准"> + <el-input class="input-length" disabled v-model="evaluateDialogState.evaluateInfo.sclCheckStandard" placeholder="检查标准" clearable></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="不符合标准情况"> + <el-input class="input-length" disabled v-model="evaluateDialogState.evaluateInfo.sclCheckUnstandard" placeholder="不符合标准情况" clearable></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="主要后果"> + <el-input class="input-length" disabled v-model="evaluateDialogState.evaluateInfo.sclCheckResult" placeholder="主要后果" clearable></el-input> + </el-form-item> + </el-col> + </div> + <div v-if="evaluateDialogState.evaluateForm.identificationMethod === 4"> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="节点"> + <el-input class="input-length" disabled v-model="evaluateDialogState.evaluateInfo.hazopNode" placeholder="HAZOP_节点" clearable></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="参数"> + <el-input class="input-length" disabled v-model="evaluateDialogState.evaluateInfo.hazopParam" placeholder="HAZOP_参数" clearable></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="参数描述"> + <el-input class="input-length" disabled v-model="evaluateDialogState.evaluateInfo.hazopParamDesc" placeholder="HAZOP_参数描述" clearable></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="引导词"> + <el-input class="input-length" disabled v-model="evaluateDialogState.evaluateInfo.hazopGuide" placeholder="HAZOP_引导词" clearable></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="偏差"> + <el-input class="input-length" disabled v-model="evaluateDialogState.evaluateInfo.hazopDeviation" placeholder="HAZOP_偏差" clearable></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="可能原因"> + <el-input class="input-length" disabled v-model="evaluateDialogState.evaluateInfo.hazopPossibleCauses" placeholder="HAZOP_可能原因" clearable></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="主要后果"> + <el-input class="input-length" disabled v-model="evaluateDialogState.evaluateInfo.hazopResult" placeholder="HAZOP_主要后果" clearable></el-input> + </el-form-item> + </el-col> + </div> + <div v-if="evaluateDialogState.evaluateForm.identificationMethod === 5"> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="检查项目" prop="analogyCheckItem"> + <el-input class="input-length" disabled v-model="evaluateDialogState.evaluateInfo.analogyCheckItem" placeholder="检查项目" clearable></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="analogyReference"> + <el-input class="input-length" disabled v-model="evaluateDialogState.evaluateInfo.analogyReference" placeholder="类比参照" clearable></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="analogyRiskFactor"> + <el-input class="input-length" disabled v-model="evaluateDialogState.evaluateInfo.analogyRiskFactor" placeholder="存在风险因素" clearable></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="analogyResult"> + <el-input class="input-length" disabled v-model="evaluateDialogState.evaluateInfo.analogyResult" placeholder="可能产生的后果" clearable></el-input> + </el-form-item> + </el-col> + </div> </div> - <div style="width: 100%" v-if="evaluateDialogState.evaluateMethod === 2"> + <el-col style="display: flex;align-items: center" :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="评价方法" style="width: 80% !important;"> + <el-select class="input-length" disabled v-model="evaluateDialogState.evaluateForm.evaluateMethod" style="width:100%" placeholder="评价方法" clearable> + <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-col> + + <div class="evaluateCard"> + <div class="cardTit"> + <span>固有风险评分</span> + </div> + <div class="valueSelect" v-if="evaluateDialogState.evaluateMethod === 1"> <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="LS_L" prop="lsL"> - <el-input type="number" class="input-length" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.lsL" placeholder="LS_L " clearable></el-input> - </el-form-item> + <el-form-item label="LEC_L" prop="originalLecL"> + <el-select class="input-length" :teleported="false" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.originalLecL" @change="calcOriginScore('lec')" style="width:100%" placeholder="LEC_L的数值" clearable> + <el-option v-for="item in evaluateDialogState.listLecL" :key="item.value" :label="item.value" :value="item.value"> + <div class="valueTable"> + <div><div>分值:</div><span>{{item.value}}</span></div> + <div><div>标准:</div><span>{{item.desc}}</span></div> + </div> + </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="LS_S" prop="lsS"> - <el-input type="number" class="input-length" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.lsS" placeholder="LS_S" clearable></el-input> - </el-form-item> + <el-form-item label="LEC_E" prop="originalLecE"> + <el-select class="input-length" :teleported="false" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.originalLecE" @change="calcOriginScore('lec')" style="width:100%" placeholder="LEC_E的数值" clearable> + <el-option v-for="item in evaluateDialogState.listLecE" :key="item.value" :label="item.value" :value="item.value"> + <div class="valueTable"> + <div><div>分值:</div><span>{{item.value}}</span></div> + <div><div>标准:</div><span>{{item.desc}}</span></div> + </div> + </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="LEC_C" prop="originalLecC"> + <el-select class="input-length" :teleported="false" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.originalLecC" @change="calcOriginScore('lec')" style="width:100%" placeholder="LEC_C的数值" clearable> + <el-option v-for="item in evaluateDialogState.listLecC" :key="item.value" :label="item.value" :value="item.value"> + <div class="valueTable"> + <div class="longTit"><div>分值:</div><span>{{item.value}}</span></div> + <div class="longTit"><div>人员伤亡:</div><span>{{item.person}}</span></div> + <div class="longTit"><div>直接经济损失:</div><span>{{item.money}}</span></div> + <div class="longTit"><div>停工情况:</div><span>{{item.stopWork}}</span></div> + <div class="longTit"><div>企业形象:</div><span>{{item.company}}</span></div> + <div class="longTit"><div>法律,法规及其它要求:</div><span>{{item.desc}}</span></div> + </div> + </el-option> + </el-select> + </el-form-item> + </el-col> + </div> + <div class="valueSelect" v-if="evaluateDialogState.evaluateMethod === 2"> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="LS_L" prop="originalLsL"> + <el-select class="input-length" :teleported="false" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.originalLsL" @change="calcOriginScore('ls')" style="width:100%" placeholder="LS_L的数值" clearable> + <el-option v-for="item in evaluateDialogState.listLsL" :key="item.value" :label="item.value" :value="item.value"> + <div class="valueTable"> + <div><div>分值:</div><span>{{item.value}}</span></div> + <div><div>标准:</div><span>{{item.desc}}</span></div> + </div> + </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="LS_S" prop="originalLsS"> + <el-select class="input-length" :teleported="false" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.originalLsS" @change="calcOriginScore('ls')" style="width:100%" placeholder="LS_S的数值" clearable> + <el-option v-for="item in evaluateDialogState.listLsS" :key="item.value" :label="item.value" :value="item.value"> + <div class="valueTable"> + <div class="longTit"><div>分值:</div><span>{{item.value}}</span></div> + <div class="longTit"><div>人员伤亡:</div><span>{{item.person}}</span></div> + <div class="longTit"><div>直接经济损失:</div><span>{{item.money}}</span></div> + <div class="longTit"><div>停工情况:</div><span>{{item.stopWork}}</span></div> + <div class="longTit"><div>企业形象:</div><span>{{item.company}}</span></div> + <div class="longTit"><div>法律,法规及其它要求:</div><span>{{item.desc}}</span></div> + </div> + </el-option> + </el-select> + </el-form-item> + </el-col> + </div> + <div class="valueSelect" v-if="evaluateDialogState.evaluateMethod === 3"> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="MES_M" prop="originalMesM"> + <el-select class="input-length" :teleported="false" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.originalMesM" @change="calcOriginScore('mes')" style="width:100%" placeholder="MES_M的数值" clearable> + <el-option v-for="item in evaluateDialogState.listMesM" :key="item.value" :label="item.value" :value="item.value"> + <div class="valueTable"> + <div><div>分值:</div><span>{{item.value}}</span></div> + <div><div>标准:</div><span>{{item.desc}}</span></div> + </div> + </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="MES_E" prop="originalMesE"> + <el-select class="input-length" :teleported="false" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.originalMesE" @change="calcOriginScore('mes')" style="width:100%" placeholder="MES_E的数值" clearable> + <el-option v-for="item in evaluateDialogState.listMesE" :key="item.value" :label="item.value" :value="item.value"> + <div class="valueTable"> + <div><div>分值:</div><span>{{item.value}}</span></div> + <div><div>e1标准:</div><span>{{item.e1Desc}}</span></div> + <div><div>e2标准:</div><span>{{item.e2Desc}}</span></div> + </div> + </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="MES_S" prop="originalMesS"> + <el-select class="input-length" :teleported="false" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.originalMesS" @change="calcOriginScore('mes')" style="width:100%" placeholder="MES_S的数值" clearable> + <el-option v-for="item in evaluateDialogState.listMesS" :key="item.value" :label="item.value" :value="item.value"> + <div class="valueTable"> + <div class="longTit"><div>分值:</div><span>{{item.value}}</span></div> + <div class="longTit"><div>人员伤亡:</div><span>{{item.person}}</span></div> + <div class="longTit"><div>直接经济损失:</div><span>{{item.money}}</span></div> + <div class="longTit"><div>停工情况:</div><span>{{item.stopWork}}</span></div> + <div class="longTit"><div>法律,法规及其它要求:</div><span>{{item.desc}}</span></div> + </div> + </el-option> + </el-select> + </el-form-item> + </el-col> + </div> + <div class="valueSelect" v-if="evaluateDialogState.evaluateMethod === 4"> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="RS_R" prop="originalRsR"> + <el-select class="input-length" :teleported="false" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.originalRsR" @change="calcOriginScore('rs')" style="width:100%" placeholder="RS_R的数值" clearable> + <el-option v-for="item in evaluateDialogState.listRsR" :key="item.value" :label="item.value" :value="item.value"> + <div class="valueTable"> + <div class="longTit"><div>分值:</div><span>{{item.value}}</span></div> + <div class="longTit"><div>区间,定量描述:</div><span>{{item.section}}</span></div> + <div class="longTit"><div>标准:</div><span>{{item.desc}}</span></div> + </div> + </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="RS_S" prop="originalRsS"> + <el-select class="input-length" :teleported="false" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.originalRsS" @change="calcOriginScore('rs')" style="width:100%" placeholder="RS_S的数值" clearable> + <el-option v-for="item in evaluateDialogState.listRsS" :key="item.value" :label="item.value" :value="item.value"> + <div class="valueTable"> + <div><div>分值:</div><span>{{item.value}}</span></div> + <div><div>人员伤亡:</div><span>{{item.person}}</span></div> + <div><div>直接经济损失:</div><span>{{item.money}}</span></div> + <div><div>标准:</div><span>{{item.desc}}</span></div> + </div> + </el-option> + </el-select> + </el-form-item> + </el-col> + </div> </div> - <div style="width: 100%" v-if="evaluateDialogState.evaluateMethod === 3"> + <div class="evaluateCard"> + <div class="cardTit"> + <span>固有风险分值</span> + </div> + <div> <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="MES_M" prop="mesM"> - <el-input type="number" class="input-length" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.mesM" placeholder="MES_M" clearable></el-input> - </el-form-item> + <el-form-item label="风险值" prop="originalRiskValue"> + <el-input type="number" class="input-length" disabled v-model="evaluateDialogState.evaluateForm.originalRiskValue" placeholder="风险数值" clearable></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="MES_E" prop="mesE"> - <el-input type="number" class="input-length" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.mesE" placeholder="MES_E" clearable></el-input> - </el-form-item> + <el-form-item label="风险等级值" prop="originalRiskLevelValue"> + <el-select class="input-length" disabled v-model="evaluateDialogState.evaluateForm.originalRiskLevelValue" style="width:100%" placeholder="风险等级值" clearable> + <el-option v-for="item in evaluateDialogState.riskLevelValueList" :key="item.id" :label="item.name" :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="MES_S" prop="mesS"> - <el-input type="number" class="input-length" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.mesS" placeholder="MES_S" clearable></el-input> - </el-form-item> + <el-form-item label="风险级别" prop="originalRiskLevel"> + <el-select class="input-length" disabled v-model="evaluateDialogState.evaluateForm.originalRiskLevel" style="width:100%" placeholder="风险级别" clearable> + <el-option v-for="item in evaluateDialogState.riskLevelList" :key="item.id" :label="item.name" :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="originalRiskColor"> + <el-select class="input-length" disabled v-model="evaluateDialogState.evaluateForm.originalRiskColor" style="width:100%" placeholder="风险色" clearable> + <el-option v-for="item in evaluateDialogState.riskColorList" :key="item.id" :label="item.name" :value="item.id"></el-option> + </el-select> + </el-form-item> + </el-col> + </div> </div> - <div style="width: 100%" v-if="evaluateDialogState.evaluateMethod === 4"> + <div class="evaluateCard"> + <div class="cardTit"> + <span>现有措施</span> + </div> + <div> <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="RS_R" prop="rsR"> - <el-input type="number" class="input-length" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.rsR" placeholder="RS_R" clearable></el-input> - </el-form-item> + <el-form-item label="技术措施" prop="technologyMeasure"> + <el-input type="textarea" class="input-length" :autosize="{ minRows:1 }" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.technologyMeasure" placeholder="技术措施" clearable></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="RS_S" prop="rsS"> - <el-input type="number" class="input-length" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.rsS" placeholder="RS_S" clearable></el-input> - </el-form-item> + <el-form-item label="管理措施" prop="manageMeasure"> + <el-input type="textarea" class="input-length" :autosize="{ minRows:1 }" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.manageMeasure" placeholder="管理措施" clearable></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="educationMeasure"> + <el-input type="textarea" class="input-length" :autosize="{ minRows:1 }" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.educationMeasure" placeholder="教育措施" clearable></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="personalProtectionMeasure"> + <el-input type="textarea" class="input-length" :autosize="{ minRows:1 }" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.personalProtectionMeasure" placeholder="个体防护措施" clearable></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="emergencyMeasure"> + <el-input type="textarea" class="input-length" :autosize="{ minRows:1 }" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.emergencyMeasure" placeholder="应急措施" clearable></el-input> + </el-form-item> + </el-col> + </div> </div> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="风险数值" prop="rsS"> - <el-input type="number" class="input-length" :disabled="true" v-model="numValue" placeholder="风险数值" clearable></el-input> - </el-form-item> + + <div class="evaluateCard"> + <div class="cardTit"> + <span>现有风险评分</span> + </div> + <div class="valueSelect" v-if="evaluateDialogState.evaluateMethod === 1"> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="LEC_L" prop="lecL"> + <el-select class="input-length" :teleported="false" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.lecL" @change="calcScore('lec')" style="width:100%" placeholder="LEC_L的数值" clearable> + <el-option v-for="item in evaluateDialogState.listLecL" :key="item.value" :label="item.value" :value="item.value"> + <div class="valueTable"> + <div><div>分值:</div><span>{{item.value}}</span></div> + <div><div>标准:</div><span>{{item.desc}}</span></div> + </div> + </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="LEC_E" prop="lecE"> + <el-select class="input-length" :teleported="false" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.lecE" @change="calcScore('lec')" style="width:100%" placeholder="LEC_E的数值" clearable> + <el-option v-for="item in evaluateDialogState.listLecE" :key="item.value" :label="item.value" :value="item.value"> + <div class="valueTable"> + <div><div>分值:</div><span>{{item.value}}</span></div> + <div><div>标准:</div><span>{{item.desc}}</span></div> + </div> + </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="LEC_C" prop="lecC"> + <el-select class="input-length" :teleported="false" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.lecC" @change="calcScore('lec')" style="width:100%" placeholder="LEC_C的数值" clearable> + <el-option v-for="item in evaluateDialogState.listLecC" :key="item.value" :label="item.value" :value="item.value"> + <div class="valueTable"> + <div class="longTit"><div>分值:</div><span>{{item.value}}</span></div> + <div class="longTit"><div>人员伤亡:</div><span>{{item.person}}</span></div> + <div class="longTit"><div>直接经济损失:</div><span>{{item.money}}</span></div> + <div class="longTit"><div>停工情况:</div><span>{{item.stopWork}}</span></div> + <div class="longTit"><div>企业形象:</div><span>{{item.company}}</span></div> + <div class="longTit"><div>法律,法规及其它要求:</div><span>{{item.desc}}</span></div> + </div> + </el-option> + </el-select> + </el-form-item> + </el-col> + </div> + <div class="valueSelect" v-if="evaluateDialogState.evaluateMethod === 2"> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="LS_L" prop="lsL"> + <el-select class="input-length" :teleported="false" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.lsL" @change="calcScore('ls')" style="width:100%" placeholder="LS_L的数值" clearable> + <el-option v-for="item in evaluateDialogState.listLsL" :key="item.value" :label="item.value" :value="item.value"> + <div class="valueTable"> + <div><div>分值:</div><span>{{item.value}}</span></div> + <div><div>标准:</div><span>{{item.desc}}</span></div> + </div> + </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="LS_S" prop="lsS"> + <el-select class="input-length" :teleported="false" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.lsS" @change="calcScore('ls')" style="width:100%" placeholder="LS_S的数值" clearable> + <el-option v-for="item in evaluateDialogState.listLsS" :key="item.value" :label="item.value" :value="item.value"> + <div class="valueTable"> + <div class="longTit"><div>分值:</div><span>{{item.value}}</span></div> + <div class="longTit"><div>人员伤亡:</div><span>{{item.person}}</span></div> + <div class="longTit"><div>直接经济损失:</div><span>{{item.money}}</span></div> + <div class="longTit"><div>停工情况:</div><span>{{item.stopWork}}</span></div> + <div class="longTit"><div>企业形象:</div><span>{{item.company}}</span></div> + <div class="longTit"><div>法律,法规及其它要求:</div><span>{{item.desc}}</span></div> + </div> + </el-option> + </el-select> + </el-form-item> + </el-col> + </div> + <div class="valueSelect" v-if="evaluateDialogState.evaluateMethod === 3"> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="MES_M" prop="mesM"> + <el-select class="input-length" :teleported="false" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.mesM" @change="calcScore('mes')" style="width:100%" placeholder="MES_M的数值" clearable> + <el-option v-for="item in evaluateDialogState.listMesM" :key="item.value" :label="item.value" :value="item.value"> + <div class="valueTable"> + <div><div>分值:</div><span>{{item.value}}</span></div> + <div><div>标准:</div><span>{{item.desc}}</span></div> + </div> + </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="MES_E" prop="mesE"> + <el-select class="input-length" :teleported="false" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.mesE" @change="calcScore('mes')" style="width:100%" placeholder="MES_E的数值" clearable> + <el-option v-for="item in evaluateDialogState.listMesE" :key="item.value" :label="item.value" :value="item.value"> + <div class="valueTable"> + <div><div>分值:</div><span>{{item.value}}</span></div> + <div><div>e1标准:</div><span>{{item.e1Desc}}</span></div> + <div><div>e2标准:</div><span>{{item.e2Desc}}</span></div> + </div> + </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="MES_S" prop="mesS"> + <el-select class="input-length" :teleported="false" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.mesS" @change="calcScore('mes')" style="width:100%" placeholder="MES_S的数值" clearable> + <el-option v-for="item in evaluateDialogState.listMesS" :key="item.value" :label="item.value" :value="item.value"> + <div class="valueTable"> + <div class="longTit"><div>分值:</div><span>{{item.value}}</span></div> + <div class="longTit"><div>人员伤亡:</div><span>{{item.person}}</span></div> + <div class="longTit"><div>直接经济损失:</div><span>{{item.money}}</span></div> + <div class="longTit"><div>停工情况:</div><span>{{item.stopWork}}</span></div> + <div class="longTit"><div>法律,法规及其它要求:</div><span>{{item.desc}}</span></div> + </div> + </el-option> + </el-select> + </el-form-item> + </el-col> + </div> + <div class="valueSelect" v-if="evaluateDialogState.evaluateMethod === 4"> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="RS_R" prop="rsR"> + <el-select class="input-length" :teleported="false" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.rsR" @change="calcScore('rs')" style="width:100%" placeholder="RS_R的数值" clearable> + <el-option v-for="item in evaluateDialogState.listRsR" :key="item.value" :label="item.value" :value="item.value"> + <div class="valueTable"> + <div class="longTit"><div>分值:</div><span>{{item.value}}</span></div> + <div class="longTit"><div>区间,定量描述:</div><span>{{item.section}}</span></div> + <div class="longTit"><div>标准:</div><span>{{item.desc}}</span></div> + </div> + </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="RS_S" prop="rsS"> + <el-select class="input-length" :teleported="false" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.rsS" @change="calcScore('rs')" style="width:100%" placeholder="RS_S的数值" clearable> + <el-option v-for="item in evaluateDialogState.listRsS" :key="item.value" :label="item.value" :value="item.value"> + <div class="valueTable"> + <div><div>分值:</div><span>{{item.value}}</span></div> + <div><div>人员伤亡:</div><span>{{item.person}}</span></div> + <div><div>直接经济损失:</div><span>{{item.money}}</span></div> + <div><div>标准:</div><span>{{item.desc}}</span></div> + </div> + </el-option> + </el-select> + </el-form-item> + </el-col> + </div> + </div> + + <div class="evaluateCard"> + <div class="cardTit"> + <span>现有风险分值</span> + </div> + <div> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="风险值" prop="riskValue"> + <el-input type="number" class="input-length" disabled v-model="evaluateDialogState.evaluateForm.riskValue" placeholder="风险数值" clearable></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="riskLevelValue"> + <el-select class="input-length" disabled v-model="evaluateDialogState.evaluateForm.riskLevelValue" style="width:100%" placeholder="风险等级值" clearable> + <el-option v-for="item in evaluateDialogState.riskLevelValueList" :key="item.id" :label="item.name" :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="riskLevel"> + <el-select class="input-length" disabled v-model="evaluateDialogState.evaluateForm.riskLevel" style="width:100%" placeholder="风险级别" clearable> + <el-option v-for="item in evaluateDialogState.riskLevelList" :key="item.id" :label="item.name" :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="riskColor"> + <el-select class="input-length" disabled v-model="evaluateDialogState.evaluateForm.riskColor" style="width:100%" placeholder="风险色" clearable> + <el-option v-for="item in evaluateDialogState.riskColorList" :key="item.id" :label="item.name" :value="item.id"></el-option> + </el-select> + </el-form-item> + </el-col> + </div> + </div> + + <div class="evaluateCard"> + <div class="cardTit"> + <span>建议措施</span> + </div> + <div> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="技术措施" prop="adviseTechnologyMeasure"> + <el-input type="textarea" class="input-length" :autosize="{ minRows:1 }" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.adviseTechnologyMeasure" placeholder="技术措施" clearable></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="adviseManageMeasure"> + <el-input type="textarea" class="input-length" :autosize="{ minRows:1 }" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.adviseManageMeasure" placeholder="管理措施" clearable></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="adviseEducationMeasure"> + <el-input type="textarea" class="input-length" :autosize="{ minRows:1 }" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.adviseEducationMeasure" placeholder="教育措施" clearable></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="advisePersonalProtectionMeasure"> + <el-input type="textarea" class="input-length" :autosize="{ minRows:1 }" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.advisePersonalProtectionMeasure" placeholder="个体防护措施" clearable></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="adviseEmergencyMeasure"> + <el-input type="textarea" class="input-length" :autosize="{ minRows:1 }" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.adviseEmergencyMeasure" placeholder="应急措施" clearable></el-input> + </el-form-item> + </el-col> + </div> + </div> + + <el-col style="display: flex;align-items: center" :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="评价专家意见" prop="evaluateDesc" style="width: 100% !important;"> + <el-input type="textarea" class="input-length" :autosize="{ minRows:2 }" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.evaluateDesc" placeholder="评价专家意见" clearable></el-input> + </el-form-item> </el-col> </el-row> </el-form> + <el-dialog title="修改评价方法" v-model="evaluateDialogState.evaluateMethodVisible" width="30%"> + <el-select class="input-length" v-model="evaluateDialogState.evaluateForm.evaluateMethod" style="width:100%" placeholder="评价方法" clearable> + <el-option v-for="item in evaluateDialogState.evaluateMethodList" :key="item.id" :label="item.name" :value="item.id"></el-option> + </el-select> + <template #footer> + <span class="Query-footer"> + <el-button @click="evaluateDialogState.evaluateMethodVisible = false" size="default">取 消</el-button> + <el-button type="primary" @click="conFirmChange()" size="default">确定</el-button> + </span> + </template> + </el-dialog> <template #footer> - <span class="dialog-footer"> - <el-button @click="evaluateDialogState.evaluateDialogVisible = !evaluateDialogState.evaluateDialogVisible" size="default">取 消</el-button> - <el-button v-if="!evaluateDialogState.disabled" type="primary" @click="onSubmitEvaluate" size="default">确定</el-button> - </span> + <span class="dialog-footer"> + <el-button @click="evaluateDialogState.evaluateDialogVisible = !evaluateDialogState.evaluateDialogVisible" size="default">取 消</el-button> + <el-button v-if="!evaluateDialogState.disabled" type="primary" @click="onSubmitEvaluate" size="default">提交</el-button> + </span> </template> </el-dialog> </div> </template> <script setup lang="ts"> -import {computed, reactive, ref} from "vue"; +import {computed, onMounted, reactive, ref} from "vue"; import {ElMessage} from "element-plus"; import {evaluateApi} from "/@/api/analyse/evaluate"; import {isValidKey, numFloat} from "/@/utils/methods"; +import { BigNumber } from 'bignumber.js'; +import {identifyApi} from "/@/api/analyse/identify"; const evaluateFormRef = ref() @@ -144,15 +626,51 @@ time:[], disabled: false, evaluateDialogVisible: false, - evaluateMethod: 1, + evaluateMethodVisible:false, + evaluateMethod: null, + evaluateInfo: { + id: null, + identificationMethod: null, + result: null, + identificationDesc: '', + analogyCheckItem: '', + analogyRiskFactor: '', + analogyResult: '', + analogyReference: '', + hazopNode: '', + hazopParam: '', + hazopParamDesc: '', + hazopGuide: '', + hazopDeviation: '', + hazopPossibleCauses: '', + hazopResult: '', + jhaCheckItem: '', + jhaRiskFactor: '', + jhaResult: '', + phaCheckItem: '', + phaRiskFactor: '', + phaResult: '', + sclCheckItem: '', + sclCheckStandard: '', + sclCheckUnstandard: '', + sclCheckResult: '', + hazopId: null, + jhaId: null, + phaId: null, + sclId: null, + analogyId: null + }, evaluateForm: { id: null, + evaluateMethod: null, + identificationMethod: null, identificationId: null, + manageLevel: 1, + originalManageLevel: 1, riskValue: null, riskLevelValue: null, riskLevel: null, riskColor: null, - manageLevel: null, lecL: null, lecE: null, lecC: null, @@ -167,10 +685,45 @@ lsId: null, mesId: null, rsId: null, + originalLecL: null, + originalLecE: null, + originalLecC: null, + originalLsL: null, + originalLsS: null, + originalMesM: null, + originalMesE: null, + originalMesS: null, + originalRsR: null, + originalRsS: null, + originalRiskValue: null, + originalRiskLevelValue: null, + originalRiskLevel: null, + originalRiskColor: null, + technologyMeasure: '', + manageMeasure: '', + educationMeasure: '', + personalProtectionMeasure: '', + emergencyMeasure: '', + adviseTechnologyMeasure: '', + adviseManageMeasure: '', + adviseEducationMeasure: '', + advisePersonalProtectionMeasure: '', + adviseEmergencyMeasure: '', + evaluateDesc: '' }, evaluateFormRules: { }, + listLecL: [], + listLecE: [], + listLecC: [], + listLsL:[], + listLsS:[], + listRsR:[], + listRsS:[], + listMesM:[], + listMesE:[], + listMesS:[], manageLevelList: [ {id:1, name: '院所级'}, {id:2, name: '部门级'}, @@ -210,28 +763,45 @@ ] }) -const numValue = computed( () => { +const numOriginValue = computed( () => { return numFloat( - evaluateDialogState.evaluateForm.lecE, - evaluateDialogState.evaluateForm.lecL, - evaluateDialogState.evaluateForm.lecC, - evaluateDialogState.evaluateForm.mesE, - evaluateDialogState.evaluateForm.mesM, - evaluateDialogState.evaluateForm.mesS, - evaluateDialogState.evaluateForm.rsS, - evaluateDialogState.evaluateForm.rsR, - evaluateDialogState.evaluateForm.lsS, - evaluateDialogState.evaluateForm.lsL) + evaluateDialogState.evaluateForm.originalLecL, + evaluateDialogState.evaluateForm.originalLecE, + evaluateDialogState.evaluateForm.originalLecC, + evaluateDialogState.evaluateForm.originalLsL, + evaluateDialogState.evaluateForm.originalLsS, + evaluateDialogState.evaluateForm.originalMesM, + evaluateDialogState.evaluateForm.originalMesE, + evaluateDialogState.evaluateForm.originalMesS, + evaluateDialogState.evaluateForm.originalRsR, + evaluateDialogState.evaluateForm.originalRsS + ) }) -const showEvaluateDialog = (title: string, value: EvaluateType ) => { +const numValue = computed( () => { + return numFloat( + evaluateDialogState.evaluateForm.lecL, + evaluateDialogState.evaluateForm.lecE, + evaluateDialogState.evaluateForm.lecC, + evaluateDialogState.evaluateForm.lsL, + evaluateDialogState.evaluateForm.lsS, + evaluateDialogState.evaluateForm.mesM, + evaluateDialogState.evaluateForm.mesE, + evaluateDialogState.evaluateForm.mesS, + evaluateDialogState.evaluateForm.rsR, + evaluateDialogState.evaluateForm.rsS + ) +}) + +const showEvaluateDialog = (title: string, value: IdentifyType ) => { evaluateDialogState.evaluateDialogVisible = true; evaluateDialogState.disabled = false evaluateDialogState.evaluateMethod = value.evaluateMethod as number + evaluateDialogState.evaluateInfo = value setTimeout(() => { evaluateFormRef.value.clearValidate(); }); - if( value.lecId || value.lsId || value.mesId || value.rsId){ + if( value.riskValue){ evaluateDialogState.title = '编辑评价'; for(let i in evaluateDialogState.evaluateForm){ if(isValidKey(i, evaluateDialogState.evaluateForm)){ @@ -246,41 +816,97 @@ } } }else{ - evaluateDialogState.title = '评价'; + evaluateDialogState.title = '评价' evaluateDialogState.evaluateForm = { - id: null, - identificationId: null, - riskValue: null, - riskLevelValue: null, - riskLevel: null, - riskColor: null, - manageLevel: null, - lecL: null, - lecE: null, - lecC: null, - lsL: null, - lsS: null, - mesM: null, - mesE: null, - mesS: null, - rsR: null, - rsS: null, - lecId: null, - lsId: null, - mesId: null, - rsId: null, + id: null, + evaluateMethod: null, + identificationMethod: null, + identificationId: null, + manageLevel: 1, + originalManageLevel: 1, + riskValue: null, + riskLevelValue: null, + riskLevel: null, + riskColor: null, + lecL: null, + lecE: null, + lecC: null, + lsL: null, + lsS: null, + mesM: null, + mesE: null, + mesS: null, + rsR: null, + rsS: null, + lecId: null, + lsId: null, + mesId: null, + rsId: null, + originalLecL: null, + originalLecE: null, + originalLecC: null, + originalLsL: null, + originalLsS: null, + originalMesM: null, + originalMesE: null, + originalMesS: null, + originalRsR: null, + originalRsS: null, + originalRiskValue: null, + originalRiskLevelValue: null, + originalRiskLevel: null, + originalRiskColor: null, + technologyMeasure: '', + manageMeasure: '', + educationMeasure: '', + personalProtectionMeasure: '', + emergencyMeasure: '', + adviseTechnologyMeasure: '', + adviseManageMeasure: '', + adviseEducationMeasure: '', + advisePersonalProtectionMeasure: '', + adviseEmergencyMeasure: '', + evaluateDesc: '' }; } evaluateDialogState.evaluateForm.id = value.id as number + evaluateDialogState.evaluateForm.evaluateMethod = value.evaluateMethod as number + evaluateDialogState.evaluateForm.identificationMethod = value.phaId?1:value.jhaId?2:value.sclId?3:value.hazopId?4:5 evaluateDialogState.evaluateForm.identificationId = (value.hazopId || value.jhaId || value.phaId || value.sclId || value.analogyId) as number }; + +const openChangeMethod = ()=>{ + evaluateDialogState.evaluateMethodVisible = true +} + +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 +} const onSubmitEvaluate = () => { evaluateFormRef.value.validate(async(valid: boolean) => { if(valid){ - evaluateDialogState.evaluateForm.riskValue = Number(numValue.value) + // evaluateDialogState.evaluateForm.riskValue = Number(numOriginValue.value) if(evaluateDialogState.title === '评价'){ let { lecId, lsId, mesId, rsId, ...data} = evaluateDialogState.evaluateForm + console.log(data,'要评价') let res = await evaluateApi().addEvaluate(data); if(res.data.code === 100){ emit('refresh') @@ -296,6 +922,7 @@ }); } }else{ + console.log(evaluateDialogState.evaluateForm,'要编辑') let res = await evaluateApi().modEvaluate(evaluateDialogState.evaluateForm) if(res.data.code === 100){ emit('refresh') @@ -320,13 +947,240 @@ }) } +const getListLecL = async() =>{ + let res = await evaluateApi().getListLecL() + if(res.data.code === 100){ + evaluateDialogState.listLecL = res.data.data + }else{ + ElMessage({ + type: 'warning', + message: res.data.msg, + }); + } +} + +const getListLecE = async() =>{ + let res = await evaluateApi().getListLecE() + if(res.data.code === 100){ + evaluateDialogState.listLecE = res.data.data + }else{ + ElMessage({ + type: 'warning', + message: res.data.msg, + }); + } +} + +const getListLecC = async() =>{ + let res = await evaluateApi().getListLecC() + if(res.data.code === 100){ + evaluateDialogState.listLecC = res.data.data + }else{ + ElMessage({ + type: 'warning', + message: res.data.msg, + }); + } +} + +const getListLsL = async() =>{ + let res = await evaluateApi().getListLsL() + if(res.data.code === 100){ + evaluateDialogState.listLsL = res.data.data + }else{ + ElMessage({ + type: 'warning', + message: res.data.msg, + }); + } +} + +const getListLsS = async() =>{ + let res = await evaluateApi().getListLsS() + if(res.data.code === 100){ + evaluateDialogState.listLsS = res.data.data + }else{ + ElMessage({ + type: 'warning', + message: res.data.msg, + }); + } +} + +const getListRsR = async() =>{ + let res = await evaluateApi().getListRsR() + if(res.data.code === 100){ + evaluateDialogState.listRsR = res.data.data + }else{ + ElMessage({ + type: 'warning', + message: res.data.msg, + }); + } +} + +const getListRsS = async() =>{ + let res = await evaluateApi().getListRsS() + if(res.data.code === 100){ + evaluateDialogState.listRsS = res.data.data + }else{ + ElMessage({ + type: 'warning', + message: res.data.msg, + }); + } +} + +const getListMesM = async() =>{ + let res = await evaluateApi().getListMesM() + if(res.data.code === 100){ + evaluateDialogState.listMesM = res.data.data + }else{ + ElMessage({ + type: 'warning', + message: res.data.msg, + }); + } +} +const getListMesE = async() =>{ + let res = await evaluateApi().getListMesE() + if(res.data.code === 100){ + evaluateDialogState.listMesE = res.data.data + }else{ + ElMessage({ + type: 'warning', + message: res.data.msg, + }); + } +} +const getListMesS = async() =>{ + let res = await evaluateApi().getListMesS() + if(res.data.code === 100){ + evaluateDialogState.listMesS = res.data.data + }else{ + ElMessage({ + type: 'warning', + message: res.data.msg, + }); + } +} + +const calcOriginScore=(i:string)=>{ + if((i == 'lec' && (evaluateDialogState.evaluateForm.originalLecL && evaluateDialogState.evaluateForm.originalLecE && evaluateDialogState.evaluateForm.originalLecC))||(i == 'ls' && (evaluateDialogState.evaluateForm.originalLsL && evaluateDialogState.evaluateForm.originalLsS))||(i == 'mes' &&(evaluateDialogState.evaluateForm.originalMesM && evaluateDialogState.evaluateForm.originalMesE && evaluateDialogState.evaluateForm.originalMesS))||(i == 'rs' && (evaluateDialogState.evaluateForm.originalRsR && evaluateDialogState.evaluateForm.originalRsS))){ + evaluateDialogState.evaluateForm.originalRiskValue = Number(numOriginValue.value) + if(evaluateDialogState.evaluateForm.originalRiskValue<=0.5){ + evaluateDialogState.evaluateForm.originalRiskLevelValue = 1 + evaluateDialogState.evaluateForm.originalRiskLevel = 1 + evaluateDialogState.evaluateForm.originalRiskColor = 1 + }else if(evaluateDialogState.evaluateForm.originalRiskValue>0.5&&evaluateDialogState.evaluateForm.originalRiskValue<1){ + evaluateDialogState.evaluateForm.originalRiskLevelValue = 2 + evaluateDialogState.evaluateForm.originalRiskLevel = 2 + evaluateDialogState.evaluateForm.originalRiskColor = 2 + }else{ + evaluateDialogState.evaluateForm.originalRiskLevelValue = 3 + evaluateDialogState.evaluateForm.originalRiskLevel = 3 + evaluateDialogState.evaluateForm.originalRiskColor = 3 + } + } +} + +const calcScore=(i:string)=>{ + if((i == 'lec' && (evaluateDialogState.evaluateForm.lecL && evaluateDialogState.evaluateForm.lecE && evaluateDialogState.evaluateForm.lecC))||(i == 'ls' && (evaluateDialogState.evaluateForm.lsL && evaluateDialogState.evaluateForm.lsS))||(i == 'mes' &&(evaluateDialogState.evaluateForm.mesM && evaluateDialogState.evaluateForm.mesE && evaluateDialogState.evaluateForm.mesS))||(i == 'rs' && (evaluateDialogState.evaluateForm.rsR && evaluateDialogState.evaluateForm.rsS))){ + evaluateDialogState.evaluateForm.riskValue = Number(numValue.value) + if(evaluateDialogState.evaluateForm.riskValue<=0.5){ + evaluateDialogState.evaluateForm.riskLevelValue = 1 + evaluateDialogState.evaluateForm.riskLevel = 1 + evaluateDialogState.evaluateForm.riskColor = 1 + }else if(evaluateDialogState.evaluateForm.riskValue>0.5&&evaluateDialogState.evaluateForm.riskValue<1){ + evaluateDialogState.evaluateForm.riskLevelValue = 2 + evaluateDialogState.evaluateForm.riskLevel = 2 + evaluateDialogState.evaluateForm.riskColor = 2 + }else{ + evaluateDialogState.evaluateForm.riskLevelValue = 3 + evaluateDialogState.evaluateForm.riskLevel = 3 + evaluateDialogState.evaluateForm.riskColor = 3 + } + } +} + const emit = defineEmits(['refresh']); + +onMounted(()=>{ + getListLecL() + getListLecE() + getListLecC() + getListLsL() + getListLsS() + getListRsR() + getListRsS() + getListMesM() + getListMesE() + getListMesS() +}) defineExpose({ showEvaluateDialog }); </script> -<style scoped> +<style lang="scss" scoped> +.evaluateCard{ + width: 100%; + margin: 0 40px 20px; + border: 1px solid #ccc; + border-radius: 4px; + background: #fff; + .cardTit{ + width: 100%; + padding: 10px 20px; + background: #f5f5f5; + border-bottom: 1px solid #ccc; + margin-bottom: 20px; + } + + .valueSelect{ + ::v-deep(.el-popper){ + .el-select-dropdown__item{ + width: 100%; + height: auto; + white-space: normal; + word-break: break-all; + word-wrap: break-word; + overflow: auto; + padding: 10px 25px; + border-bottom: 1px solid #ccc; + + .valueTable{ + &>div{ + line-height: 1.5; + margin-bottom: 6px; + padding-bottom: 6px; + display: flex; + align-items: center; + + div{ + width: 8%; + } + span{ + width: 92%; + } + + &:last-of-type{ + margin-bottom: 0; + } + } + .longTit{ + div{ + width: 15%; + } + span{ + width: 85%; + } + } + } + } + } + } +} </style> diff --git a/src/views/analyse/evaluate/index.ts b/src/views/analyse/evaluate/index.ts index 7fedbac..b536372 100644 --- a/src/views/analyse/evaluate/index.ts +++ b/src/views/analyse/evaluate/index.ts @@ -6,6 +6,7 @@ assessPlanName: string, experimentName: string, tag: number, + planExecStatus: number | null } total: number identificationMethodList: Array<Type>, @@ -19,7 +20,8 @@ riskLevelValue: null | number, riskLevel: null | number, riskColor: null | number, - manageLevel: null | number, + manageLevel?: null | number, + originalManageLevel?: null | number, identificationId: null | number, lecL: null | number, lecE: null | number, @@ -37,6 +39,32 @@ rsId: null | number, evaluateMethod?: null | number, evaluateStatus?: null | number, + identificationMethod: null | number, + originalLecL: null | number, + originalLecE: null | number, + originalLecC: null | number, + originalLsL: null | number, + originalLsS: null | number, + originalMesM: null | number, + originalMesE: null | number, + originalMesS: null | number, + originalRsR: null | number, + originalRsS: null | number, + originalRiskValue: null | number, + originalRiskLevelValue: null | number, + originalRiskLevel: null | number, + originalRiskColor: null | number, + technologyMeasure: string, + manageMeasure: string, + educationMeasure: string, + personalProtectionMeasure: string, + emergencyMeasure: string, + adviseTechnologyMeasure: string, + adviseManageMeasure: string, + adviseEducationMeasure: string, + advisePersonalProtectionMeasure: string, + adviseEmergencyMeasure: string, + evaluateDesc: string } declare interface EvaluateDialogType { @@ -44,7 +72,9 @@ time: string [], disabled: boolean, evaluateDialogVisible: boolean, - evaluateMethod: number, + evaluateMethodVisible:boolean + evaluateMethod: number | null, + evaluateInfo: IdentifyType, evaluateForm: EvaluateType, evaluateFormRules: { @@ -55,4 +85,20 @@ riskLevelList: Array<Type> riskColorList: Array<Type> manageLevelList: Array<Type> + listLecL: Array<evaluateSelectType> + listLecE: Array<evaluateSelectType> + listLecC: Array<evaluateSelectType> + listLsL: Array<evaluateSelectType> + listLsS: Array<evaluateSelectType> + listRsR: Array<evaluateSelectType> + listRsS: Array<evaluateSelectType> + listMesM: Array<evaluateSelectType> + listMesE: Array<evaluateSelectType> + listMesS: Array<evaluateSelectType> } + +declare interface evaluateSelectType { + id: number | null + value: number | null + desc: string +} \ No newline at end of file diff --git a/src/views/analyse/evaluate/index.vue b/src/views/analyse/evaluate/index.vue index e2c0177..1833e58 100644 --- a/src/views/analyse/evaluate/index.vue +++ b/src/views/analyse/evaluate/index.vue @@ -28,32 +28,40 @@ <el-table-column type="expand"> <template #default="scope"> <el-table :data="scope.row.factorQueryDTOList" style="width: 100%"> - <el-table-column type="index" label="序号" width="80" /> - <el-table-column prop="technologyMeasure" label="技术措施" show-overflow-tooltip align="center"></el-table-column> - <el-table-column prop="manageMeasure" label="管理措施" show-overflow-tooltip align="center"></el-table-column> - <el-table-column prop="educationMeasure" label="教育措施" show-overflow-tooltip align="center"></el-table-column> - <el-table-column prop="personalProtectionMeasure" label="防护措施" show-overflow-tooltip align="center"></el-table-column> - <el-table-column prop="evaluateStatus" label="防护措施" show-overflow-tooltip align="center"> - <template #default="scope"> - <div> - <div v-if="scope.row.evaluateStatus === 0"> - <el-tag :type="'info'"> - {{ '未评价' }} - </el-tag> - </div> - <div v-if="scope.row.evaluateStatus === 1"> - <el-tag :type="'success'"> - {{ '已评价' }} - </el-tag> - </div> - </div> - </template> - </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> + <el-table-column type="index" label="序号" width="80" /> + <el-table-column prop="evaluateMethod" label="评价方法" align="center"> + <template #default="scope"> + {{ evaluateState.evaluateMethodList.find(i=>i.id === scope.row.evaluateMethod)?.name }} + </template> + </el-table-column> + <el-table-column prop="itemIdentificationTime" label="辨识添加时间" show-overflow-tooltip align="center"></el-table-column> + <el-table-column v-if="scope.row.identificationMethod == 1" prop="phaCheckItem" label="检查项目" show-overflow-tooltip align="center"></el-table-column> + <el-table-column v-if="scope.row.identificationMethod == 1" prop="phaRiskFactor" label="存在风险因素" show-overflow-tooltip align="center"></el-table-column> + <el-table-column v-if="scope.row.identificationMethod == 1" prop="phaResult" label="可能存在后果" show-overflow-tooltip align="center"></el-table-column> + <el-table-column v-if="scope.row.identificationMethod == 2" prop="jhaCheckItem" label="作业步骤" show-overflow-tooltip align="center"></el-table-column> + <el-table-column v-if="scope.row.identificationMethod == 2" prop="jhaRiskFactor" label="存在风险因素" show-overflow-tooltip align="center"></el-table-column> + <el-table-column v-if="scope.row.identificationMethod == 2" prop="jhaResult" label="可能存在后果" show-overflow-tooltip align="center"></el-table-column> + <el-table-column v-if="scope.row.identificationMethod == 3" prop="sclCheckItem" label="检查项目" show-overflow-tooltip align="center"></el-table-column> + <el-table-column v-if="scope.row.identificationMethod == 3" prop="sclCheckStandard" label="检查标准" show-overflow-tooltip align="center"></el-table-column> + <el-table-column v-if="scope.row.identificationMethod == 3" prop="sclCheckUnstandard" label="不符合标准情况" show-overflow-tooltip align="center"></el-table-column> + <el-table-column v-if="scope.row.identificationMethod == 3" prop="sclCheckResult" label="主要后果" show-overflow-tooltip align="center"></el-table-column> + <el-table-column v-if="scope.row.identificationMethod == 4" prop="hazopNode" label="节点" show-overflow-tooltip align="center"></el-table-column> + <el-table-column v-if="scope.row.identificationMethod == 4" prop="hazopParam" label="参数" show-overflow-tooltip align="center"></el-table-column> + <el-table-column v-if="scope.row.identificationMethod == 4" prop="hazopParamDesc" label="参数描述" show-overflow-tooltip align="center"></el-table-column> + <el-table-column v-if="scope.row.identificationMethod == 4" prop="hazopNode" label="节点" show-overflow-tooltip align="center"></el-table-column> + <el-table-column v-if="scope.row.identificationMethod == 4" prop="hazopGuide" label="引导词" show-overflow-tooltip align="center"></el-table-column> + <el-table-column v-if="scope.row.identificationMethod == 4" prop="hazopDeviation" label="偏差" show-overflow-tooltip align="center"></el-table-column> + <el-table-column v-if="scope.row.identificationMethod == 4" prop="hazopPossibleCauses" label="可能原因" show-overflow-tooltip align="center"></el-table-column> + <el-table-column v-if="scope.row.identificationMethod == 4" prop="hazopResult" label="可能存在后果" show-overflow-tooltip align="center"></el-table-column> + <el-table-column v-if="scope.row.identificationMethod == 5" prop="analogyCheckItem" label="检查项目" show-overflow-tooltip align="center"></el-table-column> + <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> </el-table> </template> </el-table-column> @@ -64,32 +72,43 @@ <span>{{`${evaluateState.identificationMethodList.find(item =>item.id === scope.row.identificationMethod)?.name}`}}</span> </template> </el-table-column> + <el-table-column prop="riskUnitName" label="风险单元" /> <el-table-column prop="identificationUser" label="计划负责人" /> <el-table-column prop="evaluateUser" label="评价专家" /> <el-table-column prop="createTime" label="创建时间" show-overflow-tooltip></el-table-column> <el-table-column prop="createByUserName" label="创建人" show-overflow-tooltip></el-table-column> <el-table-column prop="updateTime" label="最后修改时间" show-overflow-tooltip></el-table-column> <el-table-column prop="updateByUserName" label="最后修改人" show-overflow-tooltip></el-table-column> - <el-table-column prop="planExecStatus" label="状态" show-overflow-tooltip> - <template #default="scope"> - <div> - <div v-if="scope.row.planExecStatus === 3"> - <el-tag :type="'info'"> - {{ '未提交' }} - </el-tag> - </div> - <div v-if="scope.row.planExecStatus === 4"> - <el-tag :type="'success'"> - {{ '已提交' }} - </el-tag> - </div> - </div> - </template> + <el-table-column prop="evaluateStatus" label="执行状态" show-overflow-tooltip align="center"> + <template #default="scope"> + <div> + <div v-if="scope.row.planExecStatus === 1"> + <el-tag :type="'info'"> + {{ '未开始' }} + </el-tag> + </div> + <div v-if="scope.row.planExecStatus === 2"> + <el-tag :type="'info'"> + {{ '辨识阶段' }} + </el-tag> + </div> + <div v-if="scope.row.planExecStatus === 3"> + <el-tag :type="'primary'"> + {{ '评价阶段' }} + </el-tag> + </div> + <div v-if="scope.row.planExecStatus === 4"> + <el-tag :type="'success'"> + {{ '完成阶段' }} + </el-tag> + </div> + </div> + </template> </el-table-column> <el-table-column label="操作" width="250"> - <template #default="scope"> - <el-button size="small" text type="primary" @click="accessEvaluate(scope.row)">提交</el-button> - </template> + <template #default="scope"> + <el-button size="small" v-if="scope.row.planExecStatus===3" text type="primary" @click="accessEvaluate(scope.row)">提交</el-button> + </template> </el-table-column> </el-table> <div class="pageBtn"> @@ -123,6 +142,7 @@ assessPlanName: '', experimentName: '', tag: 2, + planExecStatus: 5 }, total: 0, planList: [ @@ -221,7 +241,7 @@ }; const accessEvaluate = (val: IdentifyType) => { - ElMessageBox.confirm(`此操作将派发该计划:“${val.assessPlanName}”,是否继续?`, '提示', { + ElMessageBox.confirm(`此操作将提交该评价计划:“${val.assessPlanName}”,是否继续?`, '提示', { confirmButtonText: '确认', cancelButtonText: '取消', type: 'warning' @@ -263,6 +283,7 @@ assessPlanName: '', experimentName: '', tag: 2, + planExecStatus: 5 } }; diff --git a/src/views/analyse/identify/components/identifyDialog.vue b/src/views/analyse/identify/components/identifyDialog.vue index 416ac32..2fd7b26 100644 --- a/src/views/analyse/identify/components/identifyDialog.vue +++ b/src/views/analyse/identify/components/identifyDialog.vue @@ -1,158 +1,294 @@ <template> <div class="system-menu-dialog-container"> <el-dialog :title="identifyDialogState.title" v-model="identifyDialogState.identifyDialogVisible" width="600px"> - <el-form ref="identifyFormRef" :rules="identifyDialogState.identifyFormRules" :model="identifyDialogState.identifyForm" size="default" label-width="140px"> + <el-form ref="identifyFormRef" :rules="identifyDialogState.identifyFormRules" :model="identifyDialogState.identifyForm" size="default" label-width="160px"> <el-row :gutter="35"> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="技术措施" prop="technologyMeasure"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.technologyMeasure" placeholder="技术措施" clearable></el-input> +<!-- <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">--> +<!-- <el-form-item label="辨识方法" prop="identificationMethod">--> +<!-- <el-select class="input-length" :disabled="true" v-model="identifyDialogState.identifyForm.identificationMethod" style="width:100%" placeholder="辨识方法" clearable>--> +<!-- <el-option v-for="item in identifyDialogState.identificationMethodList" :key="item.id" :label="item.name" :value="item.id"></el-option>--> +<!-- </el-select>--> +<!-- </el-form-item>--> +<!-- </el-col>--> + + <div style="width: 100%" v-if="identifyDialogState.method === 1"> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="PHA_检查项目" prop="phaCheckItem"> + <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.phaCheckItem" placeholder="检查项目" clearable></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="manageMeasure"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.manageMeasure" placeholder="管理措施" clearable></el-input> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="PHA_存在风险因素" prop="phaRiskFactor"> + <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.phaRiskFactor" placeholder="存在风险因素" clearable></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="educationMeasure"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.educationMeasure" placeholder="教育措施" clearable></el-input> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="PHA_可能产生的后果" prop="phaResult"> + <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.phaResult" placeholder="可能产生的后果" clearable></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="personalProtectionMeasure"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.personalProtectionMeasure" placeholder="防护措施" clearable></el-input> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="分配评价方法"> + <el-select disabled class="input-length" v-model="identifyDialogState.evaluateMethod" style="width:100%" placeholder="" clearable> + <el-option v-for="item in identifyDialogState.evaluateMethodList" :key="item.id" :label="item.name" :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="emergencyMeasure"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.emergencyMeasure" placeholder="应急措施" clearable></el-input> + </el-col> +<!-- <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">--> +<!-- <el-form-item label="评价专家" prop="phaEvaluateUser">--> +<!-- <el-select class="input-length" v-model="identifyDialogState.identifyForm.phaEvaluateUser" style="width:100%" placeholder="" clearable>--> +<!-- <el-option v-for="item in identifyDialogState.personList" :key="item.id" :label="item.name" :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 class="input-length" disabled v-model="identifyDialogState.evaluateUser" placeholder="暂无评价专家" clearable></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="identificationMethod"> - <el-select class="input-length" :disabled="true" v-model="identifyDialogState.identifyForm.identificationMethod" style="width:100%" placeholder="辨识方法" clearable> - <el-option v-for="item in identifyDialogState.identificationMethodList" :key="item.id" :label="item.name" :value="item.id"></el-option> - </el-select> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="辨识结果" prop="result"> + <el-radio-group v-model="identifyDialogState.identifyForm.result" :disabled="identifyDialogState.disabled"> + <el-radio :label="1">有风险</el-radio> + <el-radio :label="2">无风险</el-radio> + </el-radio-group> </el-form-item> - </el-col> - <div style="width: 100%" v-if="identifyDialogState.identifyForm.identificationMethod === 5"> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="检查项目" prop="analogyCheckItem"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.analogyCheckItem" placeholder="检查项目" clearable></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="analogyRiskFactor"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.analogyRiskFactor" placeholder="存在风险因素" clearable></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="analogyResult"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.analogyResult" placeholder="可能产生的后果" clearable></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="analogyReference"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.analogyReference" placeholder="类比参照" clearable></el-input> - </el-form-item> - </el-col> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="辨识专家建议" prop="identificationDesc"> + <el-input class="input-length" type="textarea" :autosize="{ minRows: 3}" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.identificationDesc" placeholder="辨识专家建议" clearable></el-input> + </el-form-item> + </el-col> </div> - <div style="width: 100%" v-if="identifyDialogState.identifyForm.identificationMethod === 4"> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="节点" prop="hazopNode"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.hazopNode" placeholder="节点" clearable></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="hazopParam"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.hazopParam" placeholder="参数" clearable></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="hazopParamDesc"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.hazopParamDesc" placeholder="参数描述" clearable></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="hazopGuide"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.hazopGuide" placeholder="引导词" clearable></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="hazopDeviation"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.hazopDeviation" placeholder="偏差" clearable></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="hazopPossibleCauses"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.hazopPossibleCauses" placeholder="可能原因" clearable></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="hazopResult"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.hazopResult" placeholder="主要后果" clearable></el-input> - </el-form-item> - </el-col> + <div style="width: 100%" v-if="identifyDialogState.method === 2"> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="JHA_作业步骤" prop="jhaCheckItem"> + <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.jhaCheckItem" placeholder="作业步骤" clearable></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="JHA_危险源或潜在事件" prop="jhaRiskFactor"> + <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.jhaRiskFactor" placeholder="危险源或潜在事件" clearable></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="JHA_可能产生的后果" prop="jhaResult"> + <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.jhaResult" placeholder="可能产生的后果" clearable></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="分配评价方法"> + <el-select disabled class="input-length" v-model="identifyDialogState.evaluateMethod" style="width:100%" placeholder="" clearable> + <el-option v-for="item in identifyDialogState.evaluateMethodList" :key="item.id" :label="item.name" :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="jhaEvaluateUser">--> +<!-- <el-select class="input-length" v-model="identifyDialogState.identifyForm.jhaEvaluateUser" style="width:100%" placeholder="" clearable>--> +<!-- <el-option v-for="item in identifyDialogState.personList" :key="item.id" :label="item.name" :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 class="input-length" disabled v-model="identifyDialogState.evaluateUser" placeholder="暂无评价专家" clearable></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="result"> + <el-radio-group v-model="identifyDialogState.identifyForm.result" :disabled="identifyDialogState.disabled"> + <el-radio :label="1">有风险</el-radio> + <el-radio :label="2">无风险</el-radio> + </el-radio-group> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="辨识专家建议" prop="identificationDesc"> + <el-input class="input-length" type="textarea" :autosize="{ minRows: 3}" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.identificationDesc" placeholder="辨识专家建议" clearable></el-input> + </el-form-item> + </el-col> </div> - <div style="width: 100%" v-if="identifyDialogState.identifyForm.identificationMethod === 2"> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="作业步骤" prop="jhaCheckItem"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.jhaCheckItem" placeholder="作业步骤" clearable></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="jhaRiskFactor"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.jhaRiskFactor" placeholder="危险源或潜在事件" clearable></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="jhaResult"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.jhaResult" placeholder="可能发生的事故" clearable></el-input> - </el-form-item> - </el-col> + <div style="width: 100%" v-if="identifyDialogState.method === 3"> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="SCL_检查项目" prop="sclCheckItem"> + <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.sclCheckItem" placeholder="检查项目" clearable></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="SCL_检查标准" prop="sclCheckStandard"> + <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.sclCheckStandard" placeholder="检查标准" clearable></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="SCL_不符合标准情况" prop="sclCheckUnstandard"> + <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.sclCheckUnstandard" placeholder="不符合标准情况" clearable></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="SCL_主要后果" prop="sclCheckResult"> + <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.sclCheckResult" placeholder="主要后果" clearable></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="分配评价方法"> + <el-select disabled class="input-length" v-model="identifyDialogState.evaluateMethod" style="width:100%" placeholder="" clearable> + <el-option v-for="item in identifyDialogState.evaluateMethodList" :key="item.id" :label="item.name" :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="sclEvaluateUser">--> +<!-- <el-select class="input-length" v-model="identifyDialogState.identifyForm.sclEvaluateUser" style="width:100%" placeholder="" clearable>--> +<!-- <el-option v-for="item in identifyDialogState.personList" :key="item.id" :label="item.name" :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 class="input-length" disabled v-model="identifyDialogState.evaluateUser" placeholder="暂无评价专家" clearable></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="result"> + <el-radio-group v-model="identifyDialogState.identifyForm.result" :disabled="identifyDialogState.disabled"> + <el-radio :label="1">有风险</el-radio> + <el-radio :label="2">无风险</el-radio> + </el-radio-group> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="辨识专家建议" prop="identificationDesc"> + <el-input class="input-length" type="textarea" :autosize="{ minRows: 3}" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.identificationDesc" placeholder="辨识专家建议" clearable></el-input> + </el-form-item> + </el-col> </div> - <div style="width: 100%" v-if="identifyDialogState.identifyForm.identificationMethod === 1"> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="检查项目" prop="phaCheckItem"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.phaCheckItem" placeholder="检查项目" clearable></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="phaRiskFactor"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.phaRiskFactor" placeholder="存在风险因素" clearable></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="phaResult"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.phaResult" placeholder="可能产生的后果" clearable></el-input> - </el-form-item> - </el-col> + <div style="width: 100%" v-if="identifyDialogState.method === 4"> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="HAZOP_节点" prop="hazopNode"> + <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.hazopNode" placeholder="HAZOP_节点" clearable></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="HAZOP_参数" prop="hazopParam"> + <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.hazopParam" placeholder="HAZOP_参数" clearable></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="HAZOP_参数描述" prop="hazopParamDesc"> + <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.hazopParamDesc" placeholder="HAZOP_参数描述" clearable></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="HAZOP_引导词" prop="hazopGuide"> + <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.hazopGuide" placeholder="HAZOP_引导词" clearable></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="HAZOP_偏差" prop="hazopDeviation"> + <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.hazopDeviation" placeholder="HAZOP_偏差" clearable></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="HAZOP_可能原因" prop="hazopPossibleCauses"> + <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.hazopPossibleCauses" placeholder="HAZOP_可能原因" clearable></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="HAZOP_主要后果" prop="hazopResult"> + <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.hazopResult" placeholder="HAZOP_主要后果" clearable></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="分配评价方法"> + <el-select disabled class="input-length" v-model="identifyDialogState.evaluateMethod" style="width:100%" placeholder="" clearable> + <el-option v-for="item in identifyDialogState.evaluateMethodList" :key="item.id" :label="item.name" :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="hazopEvaluateUser">--> +<!-- <el-select class="input-length" v-model="identifyDialogState.identifyForm.hazopEvaluateUser" style="width:100%" placeholder="" clearable>--> +<!-- <el-option v-for="item in identifyDialogState.personList" :key="item.id" :label="item.name" :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 class="input-length" disabled v-model="identifyDialogState.evaluateUser" placeholder="暂无评价专家" clearable></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="result"> + <el-radio-group v-model="identifyDialogState.identifyForm.result" :disabled="identifyDialogState.disabled"> + <el-radio :label="1">有风险</el-radio> + <el-radio :label="2">无风险</el-radio> + </el-radio-group> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="辨识专家建议" prop="identificationDesc"> + <el-input class="input-length" type="textarea" :autosize="{ minRows: 3}" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.identificationDesc" placeholder="辨识专家建议" clearable></el-input> + </el-form-item> + </el-col> </div> - <div style="width: 100%" v-if="identifyDialogState.identifyForm.identificationMethod === 3"> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="检查项目" prop="sclCheckItem"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.sclCheckItem" placeholder="检查项目" clearable></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="sclCheckStandard"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.sclCheckStandard" placeholder="检查标准" clearable></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="sclCheckUnstandard"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.sclCheckUnstandard" placeholder="不符合标准情况" clearable></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="sclCheckResult"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.sclCheckResult" placeholder="主要后果" clearable></el-input> - </el-form-item> - </el-col> + <div style="width: 100%" v-if="identifyDialogState.method === 5"> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="类比法_检查项目" prop="analogyCheckItem"> + <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.analogyCheckItem" placeholder="检查项目" clearable></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="analogyReference"> + <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.analogyReference" placeholder="类比参照" clearable></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="analogyRiskFactor"> + <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.analogyRiskFactor" placeholder="存在风险因素" clearable></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="analogyResult"> + <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.analogyResult" placeholder="可能产生的后果" clearable></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="分配评价方法"> + <el-select disabled class="input-length" v-model="identifyDialogState.evaluateMethod" style="width:100%" placeholder="" clearable> + <el-option v-for="item in identifyDialogState.evaluateMethodList" :key="item.id" :label="item.name" :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="analogyEvaluateUser">--> +<!-- <el-select class="input-length" v-model="identifyDialogState.identifyForm.analogyEvaluateUser" style="width:100%" placeholder="" clearable>--> +<!-- <el-option v-for="item in identifyDialogState.personList" :key="item.id" :label="item.name" :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 class="input-length" disabled v-model="identifyDialogState.evaluateUser" placeholder="暂无评价专家" clearable></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="result"> + <el-radio-group v-model="identifyDialogState.identifyForm.result" :disabled="identifyDialogState.disabled"> + <el-radio :label="1">有风险</el-radio> + <el-radio :label="2">无风险</el-radio> + </el-radio-group> + </el-form-item> + </el-col> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-form-item label="辨识专家建议" prop="identificationDesc"> + <el-input class="input-length" type="textarea" :autosize="{ minRows: 3}" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.identificationDesc" placeholder="辨识专家建议" clearable></el-input> + </el-form-item> + </el-col> </div> </el-row> </el-form> @@ -176,17 +312,17 @@ const identifyDialogState = reactive<IdentifyDialogType>({ title: '', + method: null, time:[], disabled: false, + evaluateMethod: null, + evaluateUser: '', identifyDialogVisible: false, identifyForm: { id: null, - technologyMeasure: '', - manageMeasure: '', - educationMeasure: '', - personalProtectionMeasure: '', - emergencyMeasure: '', identificationMethod: null, + result: null, + identificationDesc: '', analogyCheckItem: '', analogyRiskFactor: '', analogyResult: '', @@ -212,18 +348,32 @@ jhaId: null, phaId: null, sclId: null, - analogyId: null, + analogyId: null }, identifyFormRules: { - deviceCode: [{ required: true, message: '请填写设备编号', trigger: 'blur' }], - deviceName: [{ required: true, message: '请填写设备名称', trigger: 'blur' }], - devicePower: [{ required: true, message: '请填写设备功率', trigger: 'blur' }], - riskUnitId: [{ required: true, message: '请选择风险分析单元', trigger: 'change' }], - identifyUserId: [{ required: true, message: '请选择计划制定人', trigger: 'change' }], - identificationMethod: [{ required: true, message: '请选择辨识方法', trigger: 'change' }], - identificationUserId: [{ required: true, message: '请选择负责人', trigger: 'change' }], - evaluateMethod: [{ required: true, message: '请选择推荐评价方法', trigger: 'change' }], - evaluateUserId: [{ required: true, message: '请选择评价专家', trigger: 'change' }], + result: [{ required: true, message: '请选择辨识结果', trigger: 'blur' }], + identificationDesc: [{ required: true, message: '请输入辨识专家建议', trigger: 'blur' }], + analogyCheckItem: [{ required: true, message: '请输入检查项目', trigger: 'blur' }], + analogyRiskFactor: [{ required: true, message: '请输入存在风险因素', trigger: 'blur' }], + analogyResult: [{ required: true, message: '请输入可能产生的后果', trigger: 'blur' }], + analogyReference: [{ required: true, message: '请输入类比参照', trigger: 'blur' }], + hazopNode: [{ required: true, message: '请输入节点', trigger: 'blur' }], + hazopParam: [{ required: true, message: '请输入参数', trigger: 'blur' }], + hazopParamDesc: [{ required: true, message: '请输入参数描述', trigger: 'blur' }], + hazopGuide: [{ required: true, message: '请输入引导词', trigger: 'blur' }], + hazopDeviation: [{ required: true, message: '请输入偏差', trigger: 'blur' }], + hazopPossibleCauses: [{ required: true, message: '请输入可能原因', trigger: 'blur' }], + hazopResult: [{ required: true, message: '请输入主要后果', trigger: 'blur' }], + jhaCheckItem: [{ required: true, message: '请输入作业步骤', trigger: 'blur' }], + jhaRiskFactor: [{ required: true, message: '请输入危险源或潜在事件', trigger: 'blur' }], + jhaResult: [{ required: true, message: '请输入可能产生的后果', trigger: 'blur' }], + phaCheckItem: [{ required: true, message: '请输入检查项目', trigger: 'blur' }], + phaRiskFactor: [{ required: true, message: '请输入存在风险因素', trigger: 'blur' }], + phaResult: [{ required: true, message: '请输入可能产生的后果', trigger: 'blur' }], + sclCheckItem: [{ required: true, message: '请输入检查项目', trigger: 'blur' }], + sclCheckStandard: [{ required: true, message: '请输入检查标准', trigger: 'blur' }], + sclCheckUnstandard: [{ required: true, message: '请输入不符合标准情况', trigger: 'blur' }], + sclCheckResult: [{ required: true, message: '请输入主要后果', trigger: 'blur' }] }, planList: [], personList: [], @@ -242,22 +392,23 @@ ] }) -const showIdentifyDialog = (title: string, value: IdentifyType, identifyQueryForm: IdentifyType) => { +const showIdentifyDialog = (title: string, value: IdentifyType, identifyQueryForm: identifyQueryFormType,idenForm: IdentifyType,personList: Array<NewPersonListType>) => { + identifyDialogState.method = identifyQueryForm.identificationMethod identifyDialogState.identifyDialogVisible = true; identifyDialogState.disabled = false + identifyDialogState.evaluateMethod = idenForm.evaluateMethod + identifyDialogState.evaluateUser = idenForm.evaluateUser + identifyDialogState.personList = personList setTimeout(() => { identifyFormRef.value.clearValidate(); }); if(title === '新增'){ identifyDialogState.title = '新增'; identifyDialogState.identifyForm = { - id: null, - technologyMeasure: '', - manageMeasure: '', - educationMeasure: '', - personalProtectionMeasure: '', - emergencyMeasure: '', - identificationMethod: null, + id: identifyQueryForm.id, + identificationMethod: identifyQueryForm.identificationMethod, + result: null, + identificationDesc: '', analogyCheckItem: '', analogyRiskFactor: '', analogyResult: '', @@ -287,27 +438,28 @@ }; }else if(title === '查看'){ identifyDialogState.title = '查看'; + console.log(value,'value') identifyDialogState.disabled = true for(let i in identifyDialogState.identifyForm){ if(isValidKey(i, identifyDialogState.identifyForm)){ - identifyDialogState.identifyForm[i] = identifyQueryForm[i]; + identifyDialogState.identifyForm[i] = value[i]; } } }else{ identifyDialogState.title = '编辑'; - identifyDialogState.identifyForm.hazopId = identifyQueryForm.hazopId; - identifyDialogState.identifyForm.jhaId = identifyQueryForm.jhaId; - identifyDialogState.identifyForm.phaId = identifyQueryForm.phaId; - identifyDialogState.identifyForm.sclId = identifyQueryForm.sclId; - identifyDialogState.identifyForm.analogyId = identifyQueryForm.analogyId; + // identifyDialogState.identifyForm.hazopId = identifyQueryForm.hazopId; + // identifyDialogState.identifyForm.jhaId = identifyQueryForm.jhaId; + // identifyDialogState.identifyForm.phaId = identifyQueryForm.phaId; + // identifyDialogState.identifyForm.sclId = identifyQueryForm.sclId; + // identifyDialogState.identifyForm.analogyId = identifyQueryForm.analogyId; for(let i in identifyDialogState.identifyForm){ - if(isValidKey(i, identifyDialogState.identifyForm)){ - identifyDialogState.identifyForm[i] = identifyQueryForm[i]; - } + if(isValidKey(i, identifyDialogState.identifyForm)){ + identifyDialogState.identifyForm[i] = value[i]; + } } + identifyDialogState.identifyForm.identificationMethod = identifyQueryForm.identificationMethod + console.log(identifyDialogState.identifyForm,'identifyDialogState.identifyForm') } - identifyDialogState.identifyForm.id = value.id; - identifyDialogState.identifyForm.identificationMethod = value.identificationMethod; }; const onSubmitIdentify = () => { @@ -323,6 +475,7 @@ type: 'success', message: '新增成功' }) + }else{ ElMessage({ type: 'warning', @@ -330,9 +483,11 @@ }); } }else{ + console.log(identifyDialogState.identifyForm,'identifyDialogState.identifyForm') let res = await identifyApi().modIdentify(identifyDialogState.identifyForm) if(res.data.code === 100){ emit('refresh',2,identifyDialogState.identifyForm) + identifyDialogState.identifyDialogVisible = false; ElMessage({ type: 'success', diff --git a/src/views/analyse/identify/components/identifyQuery.vue b/src/views/analyse/identify/components/identifyQuery.vue index 6bf8d78..6c7100f 100644 --- a/src/views/analyse/identify/components/identifyQuery.vue +++ b/src/views/analyse/identify/components/identifyQuery.vue @@ -1,21 +1,37 @@ <template> <div class="system-menu-dialog-container"> - <el-dialog :title="identifyQueryState.title" v-model="identifyQueryState.identifyQueryVisible" :close-on-click-modal="false" width="800px"> - <el-form ref="identifyFormRef" :rules="identifyQueryState.identifyFormRules" :model="identifyQueryState.identifyQueryForm" size="default" label-width="100px"> + <el-dialog :title="identifyQueryState.title" v-model="identifyQueryState.identifyQueryVisible" :close-on-click-modal="false" width="800px" @close="resetData()"> + <el-form ref="identifyFormRef" :model="identifyQueryState.identifyQueryForm" size="default" label-width="160px"> <el-row :gutter="35"> <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="评估计划" prop="id"> - <el-select class="input-length" :disabled="true" v-model="identifyQueryState.identifyQueryForm.id" style="width:100%" placeholder="评估计划" clearable> + <el-form-item label="风险评价计划名称" prop="id"> + <el-select class="input-length" :disabled="true" v-model="identifyQueryState.identifyQueryForm.id" style="width:100%" placeholder="风险评价计划名称" clearable> <el-option v-for="item in identifyQueryState.planList" :key="item.id" :label="item.assessPlanName" :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 v-model="identifyQueryState.identifyQueryForm.assessType" readonly></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="计划开始评价时间"> + <el-input v-model="identifyQueryState.identifyQueryForm.assessStartTime" readonly></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="评价风险分析单元"> + <el-input v-model="identifyQueryState.identifyQueryForm.riskUnitName" readonly placeholder="暂无风险分析单元"></el-input> + </el-form-item> + </el-col> + <el-col style="display: flex;align-items: center" :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> <el-form-item label="辨识方法" prop="identificationMethod"> - <el-select class="input-length" :disabled="identifyQueryState.disabled" v-model="identifyQueryState.identifyQueryForm.identificationMethod" style="width:100%" placeholder="辨识方法" clearable> + <el-select class="input-length" disabled v-model="identifyQueryState.identifyQueryForm.identificationMethod" style="width:100%" placeholder="辨识方法" clearable> <el-option v-for="item in identifyQueryState.identificationMethodList" :key="item.id" :label="item.name" :value="item.id"></el-option> </el-select> </el-form-item> + <el-button size="default" v-if="identifyQueryState.identifyForm.planExecStatus == 2" type="primary" @click="openChangeMethod()">修改辨识方法</el-button> </el-col> </el-row> </el-form> @@ -33,10 +49,33 @@ <el-table :data="identifyQueryState.list" border fit highlight-current-row style="width: 100%"> <el-table-column type="index" label="序号" width="80" /> - <el-table-column prop="technologyMeasure" label="技术措施" show-overflow-tooltip align="center"></el-table-column> - <el-table-column prop="manageMeasure" label="管理措施" show-overflow-tooltip align="center"></el-table-column> - <el-table-column prop="educationMeasure" label="教育措施" show-overflow-tooltip align="center"></el-table-column> - <el-table-column prop="personalProtectionMeasure" label="防护措施" show-overflow-tooltip align="center"></el-table-column> + <el-table-column v-if="identifyQueryState.identifyForm.identificationMethod == 1" prop="phaCheckItem" label="检查项目" show-overflow-tooltip align="center"></el-table-column> + <el-table-column v-if="identifyQueryState.identifyForm.identificationMethod == 1" prop="phaRiskFactor" label="存在风险因素" show-overflow-tooltip align="center"></el-table-column> + <el-table-column v-if="identifyQueryState.identifyForm.identificationMethod == 1" prop="phaResult" label="可能存在后果" show-overflow-tooltip align="center"></el-table-column> + <el-table-column v-if="identifyQueryState.identifyForm.identificationMethod == 2" prop="jhaCheckItem" label="作业步骤" show-overflow-tooltip align="center"></el-table-column> + <el-table-column v-if="identifyQueryState.identifyForm.identificationMethod == 2" prop="jhaRiskFactor" label="存在风险因素" show-overflow-tooltip align="center"></el-table-column> + <el-table-column v-if="identifyQueryState.identifyForm.identificationMethod == 2" prop="jhaResult" label="可能存在后果" show-overflow-tooltip align="center"></el-table-column> + <el-table-column v-if="identifyQueryState.identifyForm.identificationMethod == 3" prop="sclCheckItem" label="检查项目" show-overflow-tooltip align="center"></el-table-column> + <el-table-column v-if="identifyQueryState.identifyForm.identificationMethod == 3" prop="sclCheckStandard" label="检查标准" show-overflow-tooltip align="center"></el-table-column> + <el-table-column v-if="identifyQueryState.identifyForm.identificationMethod == 3" prop="sclCheckUnstandard" label="不符合标准情况" show-overflow-tooltip align="center"></el-table-column> + <el-table-column v-if="identifyQueryState.identifyForm.identificationMethod == 3" prop="sclCheckResult" label="主要后果" show-overflow-tooltip align="center"></el-table-column> + <el-table-column v-if="identifyQueryState.identifyForm.identificationMethod == 4" prop="hazopNode" label="节点" show-overflow-tooltip align="center"></el-table-column> + <el-table-column v-if="identifyQueryState.identifyForm.identificationMethod == 4" prop="hazopParam" label="参数" show-overflow-tooltip align="center"></el-table-column> + <el-table-column v-if="identifyQueryState.identifyForm.identificationMethod == 4" prop="hazopParamDesc" label="参数描述" show-overflow-tooltip align="center"></el-table-column> + <el-table-column v-if="identifyQueryState.identifyForm.identificationMethod == 4" prop="hazopNode" label="节点" show-overflow-tooltip align="center"></el-table-column> + <el-table-column v-if="identifyQueryState.identifyForm.identificationMethod == 4" prop="hazopGuide" label="引导词" show-overflow-tooltip align="center"></el-table-column> + <el-table-column v-if="identifyQueryState.identifyForm.identificationMethod == 4" prop="hazopDeviation" label="偏差" show-overflow-tooltip align="center"></el-table-column> + <el-table-column v-if="identifyQueryState.identifyForm.identificationMethod == 4" prop="hazopPossibleCauses" label="可能原因" show-overflow-tooltip align="center"></el-table-column> + <el-table-column v-if="identifyQueryState.identifyForm.identificationMethod == 4" prop="hazopResult" label="可能存在后果" show-overflow-tooltip align="center"></el-table-column> + <el-table-column v-if="identifyQueryState.identifyForm.identificationMethod == 5" prop="analogyCheckItem" label="检查项目" show-overflow-tooltip align="center"></el-table-column> + <el-table-column v-if="identifyQueryState.identifyForm.identificationMethod == 5" prop="analogyReference" label="类比参照" show-overflow-tooltip align="center"></el-table-column> + <el-table-column v-if="identifyQueryState.identifyForm.identificationMethod == 5" prop="analogyRiskFactor" label="存在风险因素" show-overflow-tooltip align="center"></el-table-column> + <el-table-column v-if="identifyQueryState.identifyForm.identificationMethod == 5" prop="analogyResult" label="可能存在后果" show-overflow-tooltip align="center"></el-table-column> + <el-table-column prop="result" label="辨识结果" show-overflow-tooltip align="center"> + <template #default="scope"> + <span>{{scope.row.result == 1?'有风险':scope.row.result == 2?'无风险':'--'}}</span> + </template> + </el-table-column> <el-table-column label="操作" width="150" align="center"> <template #default="scope"> <el-button size="default" text type="primary" @click="openIdentifyDialog('查看', scope.row)">查看</el-button> @@ -49,13 +88,24 @@ </el-tabs> </div> <template #footer> - <span class="Query-footer"> - <el-button @click="identifyQueryState.identifyQueryVisible = !identifyQueryState.identifyQueryVisible" size="default">取 消</el-button> - <el-button v-if="identifyQueryState.identifyForm.planExecStatus === 2" type="primary" @click="identifyQueryState.identifyQueryVisible = !identifyQueryState.identifyQueryVisible" size="default">确定</el-button> - </span> + <span class="Query-footer"> + <el-button @click="identifyQueryState.identifyQueryVisible = !identifyQueryState.identifyQueryVisible" size="default">取 消</el-button> + <el-button v-if="identifyQueryState.identifyForm.planExecStatus === 2" type="primary" @click="identifyQueryState.identifyQueryVisible = !identifyQueryState.identifyQueryVisible" size="default">确定</el-button> + </span> </template> </el-dialog> - <identify-dialog ref="identifyDialogRef" @refresh="refreshList"></identify-dialog> + <el-dialog title="修改辨识方法" v-model="identifyQueryState.identifyMethodVisible" width="30%"> + <el-select class="input-length" v-model="identifyQueryState.currentMethod" style="width:100%" placeholder="辨识方法" clearable> + <el-option v-for="item in identifyQueryState.identificationMethodList" :key="item.id" :label="item.name" :value="item.id"></el-option> + </el-select> + <template #footer> + <span class="Query-footer"> + <el-button @click="identifyQueryState.identifyMethodVisible = false" size="default">取 消</el-button> + <el-button type="primary" @click="conFirmChange()" size="default">确定</el-button> + </span> + </template> + </el-dialog> + <identify-dialog ref="identifyDialogRef" @refresh="getIdentifyData"></identify-dialog> </div> </template> @@ -64,6 +114,7 @@ import {ElMessage, ElMessageBox} from "element-plus"; import {identifyApi} from "/@/api/analyse/identify"; import {isValidKey} from "/@/utils/methods"; +import {userApi} from "/@/api/systemManage/user"; const identifyDialogRef = ref() const IdentifyDialog = defineAsyncComponent(() => import('./identifyDialog.vue')) @@ -73,9 +124,14 @@ activeName: 'identify', list: [], identifyQueryVisible: false, + identifyMethodVisible: false, + currentMethod: null, identifyQueryForm: { id: null, identificationMethod: null, + assessType: null, + assessStartTime: '', + riskUnitName: '' }, identifyForm: {}, identificationMethodList: [ @@ -86,38 +142,101 @@ {id:5, name: '类比法'}, ], planList: [], + personList: [] }) -const showIdentifyQuery = (title: string, value: IdentifyType, planList: PlanType [], personList: SystemPersonType []) => { +// const getAssessInfo =(value: number|null)=>{ +// const data = identifyQueryState.planList.find(item => item.id === value) as PlanType +// } + +const showIdentifyQuery = (title: string, value: IdentifyType, planList: PlanType [], personList: AllPersonListType []) => { identifyQueryState.identifyQueryVisible = true; identifyQueryState.identifyForm = value; + identifyQueryState.list = value.factorQueryDTOList identifyQueryState.planList = planList; + identifyQueryState.personList = personList identifyQueryState.list = value.factorQueryDTOList; + // getAssessInfo(identifyQueryState.identifyQueryForm.id); for(let i in identifyQueryState.identifyQueryForm){ if(isValidKey(i, identifyQueryState.identifyQueryForm)){ identifyQueryState.identifyQueryForm[i] = value[i] } } - if(title === '编辑'){ - identifyQueryState.title = '编辑'; + + if(title === '辨识'){ + identifyQueryState.title = '辨识'; }else { identifyQueryState.title = '查看'; } }; const openIdentifyDialog = (title: string, value: IdentifyType) => { - identifyDialogRef.value.showIdentifyDialog(title, identifyQueryState.identifyForm, value); + identifyDialogRef.value.showIdentifyDialog(title, value, identifyQueryState.identifyQueryForm,identifyQueryState.identifyForm, identifyQueryState.personList); }; -const refreshList = (type: number, data: IdentifyType) => { - if(type === 1){ - identifyQueryState.list?.push(data) - }else{ - (<Array<IdentifyType>>identifyQueryState.list)[identifyQueryState.list?.findIndex(item => item.id === data.id) as number] = data - } +const openChangeMethod = ()=>{ + identifyQueryState.currentMethod = identifyQueryState.identifyQueryForm.identificationMethod + identifyQueryState.identifyMethodVisible = true +} + +const conFirmChange = async () =>{ + let res = await identifyApi().UpdateIdentifyMethod({ + id: identifyQueryState.identifyQueryForm.id, + identificationMethodId: identifyQueryState.currentMethod + }); + if(res.data.code === 100){ + ElMessage({ + type: 'success', + message: '辨识方法修改成功' + }) + identifyQueryState.identifyQueryForm.identificationMethod = identifyQueryState.currentMethod, + identifyQueryState.currentMethod = identifyQueryState.currentMethod, + emit('refresh') + getIdentifyData() + }else{ + ElMessage({ + type: 'warning', + message: res.data.msg + }) + } + identifyQueryState.identifyMethodVisible = false +} + +const resetData = ()=>{ + emit('refresh') +} + +// const refreshList = (type: number, data: IdentifyType) => { +// if(type === 1){ +// identifyQueryState.list?.push(data) +// }else{ +// (<Array<IdentifyType>>identifyQueryState.list)[identifyQueryState.list?.findIndex(item => item.id === data.id) as number] = data +// } +// }; + +const getIdentifyData = async () => { + let res = await identifyApi().getIdentifyByList( +{ + pageIndex: 1, + pageSize: 10, + assessPlanName: '', + experimentName: '', + tag: 1, + assessPlanId: identifyQueryState.identifyForm.id + } + ); + if(res.data.code === 100){ + identifyQueryState.list = res.data.data[0].factorQueryDTOList + }else{ + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } }; const onDelIdentifyQuery = (index: number, val: IdentifyType) => { + console.log(val,'val') ElMessageBox.confirm(`此操作将永久删除该辨识,是否继续?`, '提示', { confirmButtonText: '确认', cancelButtonText: '取消', diff --git a/src/views/analyse/identify/index.ts b/src/views/analyse/identify/index.ts index c99a614..713bb9b 100644 --- a/src/views/analyse/identify/index.ts +++ b/src/views/analyse/identify/index.ts @@ -19,28 +19,32 @@ activeName: string, list?: IdentifyType [], identifyQueryVisible: boolean, - identifyQueryForm: { - id: null | number, - identificationMethod: null | number, - }, - identifyForm: {}, + identifyMethodVisible: boolean + currentMethod: number | null + identifyQueryForm: identifyQueryFormType, + identifyForm: IdentifyType, identificationMethodList: Array<Type>, planList: Array<PlanType> + personList: Array<AllPersonListType> } -declare interface SystemPersonType { - id: number, - realName: string, +declare interface identifyQueryFormType { + id: null | number, + identificationMethod: null | number, + assessType: null | number, + assessStartTime: string, + riskUnitName: string } + declare interface IdentifyType { id: number | null, - technologyMeasure: string, - assessPlanName: string, - manageMeasure: string, - educationMeasure: string, - personalProtectionMeasure: string, - emergencyMeasure: string, + technologyMeasure?: string, + assessPlanName?: string, + manageMeasure?: string, + educationMeasure?: string, + personalProtectionMeasure?: string, + emergencyMeasure?: string, identificationMethod: number | null, hazopId?: number | null, jhaId?: number | null, @@ -68,9 +72,12 @@ sclCheckStandard: string, sclCheckUnstandard: string, sclCheckResult: string, - planExecStatus: number, - evaluateMethod: number, + planExecStatus?: number, + evaluateMethod?: number, factorQueryDTOList?: IdentifyType [], + evaluateUser?: string, + result?: number | null, + identificationDesc: string } declare interface Type { @@ -80,17 +87,17 @@ declare interface IdentifyDialogType { title: string, + method: null | number, + evaluateMethod: null | number, + evaluateUser?: string, time: string [], disabled: boolean, identifyDialogVisible: boolean, identifyForm: { id: number | null, - technologyMeasure: string, - manageMeasure: string, - educationMeasure: string, - personalProtectionMeasure: string, - emergencyMeasure: string, identificationMethod: number | null, + result: null | number, + identificationDesc: string, hazopId?: number | null, jhaId?: number | null, phaId?: number | null, @@ -124,5 +131,5 @@ identificationMethodList: Array<Type>, evaluateMethodList: Array<Type> planList: Array<PlanType> - personList: Array<SystemPersonType> + personList?: Array<NewPersonListType> } diff --git a/src/views/analyse/identify/index.vue b/src/views/analyse/identify/index.vue index 320da4a..eb0ce8e 100644 --- a/src/views/analyse/identify/index.vue +++ b/src/views/analyse/identify/index.vue @@ -39,18 +39,28 @@ <el-table-column prop="createByUserName" label="创建人" show-overflow-tooltip></el-table-column> <el-table-column prop="updateTime" label="最后修改时间" show-overflow-tooltip></el-table-column> <el-table-column prop="updateByUserName" label="最后修改人" show-overflow-tooltip></el-table-column> - <el-table-column prop="planExecStatus" label="状态" show-overflow-tooltip> + <el-table-column prop="planExecStatus" label="执行状态" show-overflow-tooltip> <template #default="scope"> <div> + <div v-if="scope.row.planExecStatus === 1"> + <el-tag :type="'info'"> + {{ '未开始' }} + </el-tag> + </div> <div v-if="scope.row.planExecStatus === 2"> <el-tag :type="'info'"> - {{ '未辨识' }} + {{ '辨识阶段' }} </el-tag> </div> <div v-if="scope.row.planExecStatus === 3"> - <el-tag :type="'success'"> - {{ '已辨识' }} + <el-tag :type="'primary'"> + {{ '评价阶段' }} </el-tag> + </div> + <div v-if="scope.row.planExecStatus === 4"> + <el-tag :type="'success'"> + {{ '完成阶段' }} + </el-tag> </div> </div> </template> @@ -58,9 +68,9 @@ <el-table-column label="操作" width="250"> <template #default="scope"> <el-button size="small" text type="primary" v-if="scope.row.planExecStatus === 2" @click="accessIdentify(scope.row)">提交</el-button> - <el-button size="small" text type="primary" :icon="View" @click="openIdentifyQuery('查看', scope.row)">查看</el-button> - <el-button size="small" text type="primary" v-if="scope.row.planExecStatus === 2" :icon="Edit" @click="openIdentifyQuery('编辑', scope.row)">编辑</el-button> - <el-button size="small" text type="danger" :icon="Delete" @click="onDelIdentify(scope.row)">删除</el-button> + <el-button size="small" text type="primary" v-if="scope.row.planExecStatus === 3 || scope.row.planExecStatus === 4" :icon="View" @click="openIdentifyQuery('查看', scope.row)">查看</el-button> + <el-button size="small" text type="primary" v-if="scope.row.planExecStatus === 2" :icon="Edit" @click="openIdentifyQuery('辨识', scope.row)">辨识</el-button> +<!-- <el-button size="small" text type="primary" v-if="scope.row.planExecStatus === 2" :icon="Edit" @click="openIdentifyQuery('编辑', scope.row)">编辑</el-button>--> </template> </el-table-column> </el-table> @@ -192,29 +202,36 @@ }; const accessIdentify = (val: IdentifyType) => { - ElMessageBox.confirm(`此操作将派发该计划:“${val.assessPlanName}”,是否继续?`, '提示', { + if(val.factorQueryDTOList?.length > 0){ + ElMessageBox.confirm(`此操作将派发该计划:“${val.assessPlanName}”,是否继续?`, '提示', { confirmButtonText: '确认', cancelButtonText: '取消', type: 'warning' - }) - .then(async () => { + }) + .then(async () => { let res = await identifyApi().submitIdentify({ id: val.id}); if (res.data.code === 100) { - ElMessage({ - type: 'success', - duration: 2000, - message: '提交成功' - }); - await getIdentifyData(); + ElMessage({ + type: 'success', + duration: 2000, + message: '提交成功' + }); + await getIdentifyData(); } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); + ElMessage({ + type: 'warning', + message: res.data.msg + }); } - }) - .catch((error) => { - }); + }) + .catch((error) => { + }); + }else{ + ElMessage({ + type: 'warning', + message: '请先添加辨识信息' + }); + } }; const onHandleSizeChange = (val: number) => { diff --git a/src/views/analyse/plan/components/planDialog.vue b/src/views/analyse/plan/components/planDialog.vue index 2ee4fe9..3aed91e 100644 --- a/src/views/analyse/plan/components/planDialog.vue +++ b/src/views/analyse/plan/components/planDialog.vue @@ -23,11 +23,11 @@ </el-form-item> </el-col> <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="评估时间" prop="assessPlanName"> + <el-form-item label="评估时间" prop="assessTime"> <el-date-picker :disabled="planDialogState.disabled" type="datetimerange" - v-model="planDialogState.time" + v-model="planDialogState.planForm.assessTime" start-placeholder="开始时间" end-placeholder="结束时间" format="YYYY-MM-DD HH:mm:ss" @@ -37,23 +37,9 @@ </el-form-item> </el-col> <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="辨识方法" prop="identificationMethod"> - <el-select :disabled="planDialogState.disabled" v-model="planDialogState.planForm.identificationMethod" style="width:100%" placeholder="辨识方法" clearable> - <el-option v-for="item in planDialogState.identificationMethodList" :key="item.id" :label="item.name" :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="identificationUserId"> + <el-form-item label="辨识专家" prop="identificationUserId"> <el-select :disabled="planDialogState.disabled" v-model="planDialogState.planForm.identificationUserId" style="width:100%" placeholder="负责人" clearable> <el-option v-for="item in planDialogState.personList" :key="item.id" :label="item.realName" :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="evaluateMethod"> - <el-select :disabled="planDialogState.disabled" v-model="planDialogState.planForm.evaluateMethod" style="width:100%" placeholder="推荐评价方法" clearable> - <el-option v-for="item in planDialogState.evaluateMethodList" :key="item.id" :label="item.name" :value="item.id"></el-option> </el-select> </el-form-item> </el-col> @@ -77,7 +63,7 @@ </template> <script setup lang="ts"> -import { reactive, ref } from "vue"; +import { reactive, ref, getCurrentInstance } from "vue"; import {ElMessage} from "element-plus"; import {planApi} from "/@/api/analyse/plan"; import {isValidKey} from "/@/utils/methods"; @@ -86,46 +72,29 @@ const planDialogState = reactive<PlanDialogType>({ title: '', - time:[], disabled: false, planDialogVisible: false, planForm: { riskUnitId: null, planUserId: null, assessPlanName: '', + assessTime: [], assessStartTime: '', assessEndTime: '', - identificationMethod: null, identificationUserId: null, - evaluateMethod: null, evaluateUserId: null, + riskType: 2 }, planFormRules: { - deviceCode: [{ required: true, message: '请填写设备编号', trigger: 'blur' }], - deviceName: [{ required: true, message: '请填写设备名称', trigger: 'blur' }], - devicePower: [{ required: true, message: '请填写设备功率', trigger: 'blur' }], riskUnitId: [{ required: true, message: '请选择风险分析单元', trigger: 'change' }], + assessPlanName: [{ required: true, message: '请填写评估计划名称', trigger: 'blur' }], + assessTime: [{ required: true, message: '请选择评估时间', trigger: 'blur' }], planUserId: [{ required: true, message: '请选择计划制定人', trigger: 'change' }], - identificationMethod: [{ required: true, message: '请选择辨识方法', trigger: 'change' }], - identificationUserId: [{ required: true, message: '请选择负责人', trigger: 'change' }], - evaluateMethod: [{ required: true, message: '请选择推荐评价方法', trigger: 'change' }], + identificationUserId: [{ required: true, message: '请选择辨识专家', trigger: 'change' }], evaluateUserId: [{ required: true, message: '请选择评价专家', trigger: 'change' }], }, riskUnitList: [], - 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'}, - ] + personList: [] }) const showPlanDialog = (title: string, value: PlanType, riskUnitList: RiskUnitType [], personList: SystemPersonType []) => { @@ -142,17 +111,17 @@ riskUnitId: null, planUserId: null, assessPlanName: '', + assessTime: [], assessStartTime: '', assessEndTime: '', - identificationMethod: null, identificationUserId: null, - evaluateMethod: null, evaluateUserId: null, + riskType: 2 }; }else if(title === '查看'){ planDialogState.title = '查看'; planDialogState.disabled = true - planDialogState.time = [value.assessStartTime, value.assessEndTime] + planDialogState.planForm.assessTime = [value.assessStartTime, value.assessEndTime] for(let i in planDialogState.planForm){ if(isValidKey(i, planDialogState.planForm)){ planDialogState.planForm[i] = value[i] @@ -161,7 +130,10 @@ }else{ planDialogState.title = '编辑'; planDialogState.planForm.id = value.id - planDialogState.time = [value.assessStartTime, value.assessEndTime] + 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] @@ -171,13 +143,14 @@ }; const formatTime = () => { - planDialogState.planForm.assessStartTime = planDialogState.time === null ? '' : planDialogState.time[0] - planDialogState.planForm.assessEndTime = planDialogState.time === null ? '' : planDialogState.time[1] + planDialogState.planForm.assessStartTime = planDialogState.planForm.assessTime === null ? '' : planDialogState.planForm.assessTime[0] + planDialogState.planForm.assessEndTime = planDialogState.planForm.assessTime === null ? '' : planDialogState.planForm.assessTime[1] }; const onSubmitPlan = () => { planFormRef.value.validate(async(valid: boolean) => { if(valid){ + delete planDialogState.planForm.assessTime if(planDialogState.title === '新增'){ let res = await planApi().addPlan(planDialogState.planForm); if(res.data.code === 100){ diff --git a/src/views/analyse/plan/index.ts b/src/views/analyse/plan/index.ts index 2b6cddd..7f8001a 100644 --- a/src/views/analyse/plan/index.ts +++ b/src/views/analyse/plan/index.ts @@ -1,5 +1,6 @@ declare interface PlanStateType { planData: Array<PlanType> + user: number | null, searchQuery: { pageIndex: number, pageSize: number, @@ -38,7 +39,6 @@ declare interface PlanDialogType { title: string, - time: string [], disabled: boolean, planDialogVisible: boolean, planForm: { @@ -46,18 +46,16 @@ riskUnitId: number | null, planUserId: number | null, assessPlanName: string, + assessTime?: string[], assessStartTime: string, assessEndTime: string, - identificationMethod: number | null, identificationUserId: number | null, - evaluateMethod: number | null, evaluateUserId: number | null, + riskType: number | null }, planFormRules: { }, - identificationMethodList: Array<Type>, - evaluateMethodList: Array<Type> riskUnitList: Array<RiskUnitType> personList: Array<SystemPersonType> } diff --git a/src/views/analyse/plan/index.vue b/src/views/analyse/plan/index.vue index c71f044..2417088 100644 --- a/src/views/analyse/plan/index.vue +++ b/src/views/analyse/plan/index.vue @@ -30,18 +30,19 @@ <el-table-column prop="assessPlanName" label="评估计划名称"/> <el-table-column prop="riskUnitName" label="风险单元名称" /> <el-table-column prop="planUserName" label="计划制定人" /> - <el-table-column prop="identificationMethod" label="辨识方法" show-overflow-tooltip> - <template #default="scope"> - <span>{{`${planState.identificationMethodList.find(item =>item.id === scope.row.identificationMethod)?.name}`}}</span> - </template> + <el-table-column prop="assessStartTime" label="评估开始时间"> + <template #default="scope"> + <span>{{scope.row.assessStartTime?scope.row.assessStartTime.substring(0,16):'--'}}</span> + </template> </el-table-column> - <el-table-column prop="identificationUser" label="计划负责人" /> - <el-table-column prop="evaluateMethod" label="推荐评价方法" show-overflow-tooltip> - <template #default="scope"> - <span>{{`${planState.evaluateMethodList.find(item =>item.id === scope.row.evaluateMethod)?.name}`}}</span> - </template> + <el-table-column prop="assessEndTime" label="评估结束时间"> + <template #default="scope"> + <span>{{scope.row.assessEndTime?scope.row.assessEndTime.substring(0,16):'--'}}</span> + </template> </el-table-column> + <el-table-column prop="identificationUser" label="辨识专家" /> <el-table-column prop="evaluateUser" label="评价专家" /> + <el-table-column prop="sceneUser" label="现场专家" /> <el-table-column prop="createTime" label="创建时间" show-overflow-tooltip></el-table-column> <el-table-column prop="createByUserName" label="创建人" show-overflow-tooltip></el-table-column> <el-table-column prop="updateTime" label="最后修改时间" show-overflow-tooltip></el-table-column> @@ -64,9 +65,12 @@ </el-table-column> <el-table-column label="操作" width="250"> <template #default="scope"> - <el-button size="small" text type="primary" @click="accessPlan(scope.row)">派发</el-button> + <el-button size="small" text type="primary" v-if="scope.row.planSellStatus === 1" @click="accessPlan(scope.row)">派发</el-button> <el-button size="small" text type="primary" :icon="View" @click="openPlanDialog('查看', scope.row)">查看</el-button> <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.planSellStatus === 1" size="small" text type="danger" :icon="Delete" @click="onDelPlan(scope.row)">删除</el-button> </template> </el-table-column> @@ -89,14 +93,19 @@ 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"; + const PlanDialog = defineAsyncComponent(() => import('./components/planDialog.vue')); const planDialogRef = ref(); +const userInfo = useUserInfo(); +const { userInfos } = storeToRefs(userInfo); const planState = reactive<PlanStateType>({ planData: [], + user: null, searchQuery: { pageIndex: 1, pageSize: 10, @@ -173,6 +182,57 @@ planDialogRef.value.showPlanDialog(title, value, planState.riskUnitList, planState.personList); }; +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 + }); + } +} + +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 + }); + } +} + +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}”,是否继续?`, '提示', { confirmButtonText: '确认', @@ -248,6 +308,7 @@ getPlanData(); getAllRiskUnitList(); getPersonList(); + planState.user = userInfos.value.uid }) </script> diff --git a/src/views/analyse/riskUnit/components/riskUnitDialog.vue b/src/views/analyse/riskUnit/components/riskUnitDialog.vue index 9ae8873..d916b3b 100644 --- a/src/views/analyse/riskUnit/components/riskUnitDialog.vue +++ b/src/views/analyse/riskUnit/components/riskUnitDialog.vue @@ -28,6 +28,13 @@ </el-form-item> </el-col> <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="riskUnitDialogState.experimentType === 2"> + <el-form-item label="风险单元类型" prop="experimentId"> + <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" v-if="riskUnitDialogState.experimentType === 2"> <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> @@ -79,6 +86,7 @@ experimentId: null, riskCode: '', riskName: '', + riskUnitTypeId: null, liabilityUserId: null, liabilityDep: '', description: '', @@ -88,6 +96,7 @@ experimentId: [{ required: true, message: '请选择实验', trigger: 'change' }], 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' }] }, @@ -97,6 +106,7 @@ {id:2, name: '个'}, {id:3, name: '件'} ], + riskTypeList: [], basicUnitList: [], allPersonList: [], allExperimentList: [], @@ -106,11 +116,12 @@ ], }) -const showRiskUnitDialog = (title: string, value: RiskUnitType, basicUnitList: UnitType [], allPersonList: AllPersonListType [], allExperimentList: ProjectType []) => { +const showRiskUnitDialog = (title: string, value: RiskUnitType, basicUnitList: UnitType [], allPersonList: AllPersonListType [], allExperimentList: ProjectType [],allRiskTypeList: RiskType []) => { riskUnitDialogState.riskUnitDialogVisible = true; riskUnitDialogState.basicUnitList = basicUnitList riskUnitDialogState.allPersonList = allPersonList riskUnitDialogState.allExperimentList = allExperimentList + riskUnitDialogState.riskTypeList = allRiskTypeList setTimeout(() => { riskUnitFormRef.value.clearValidate(); }); @@ -120,6 +131,7 @@ experimentId: null, riskCode: '', riskName: '', + riskUnitTypeId: null, liabilityUserId: null, liabilityDep: '', description: '', @@ -141,8 +153,9 @@ riskUnitFormRef.value.validate(async(valid: boolean) => { if(valid){ if(riskUnitDialogState.title === '新增' && riskUnitDialogState.experimentType === 1){ - let { basicRiskUnitId, ...query} = riskUnitDialogState.riskUnitForm - let res = await riskUnitApi().addRiskUnit(query); + 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; @@ -157,8 +170,8 @@ }); } }else if(riskUnitDialogState.title === '新增' && riskUnitDialogState.experimentType === 2){ - let { riskCode, riskName, liabilityUserId, liabilityDep, description, ...query} = riskUnitDialogState.riskUnitForm - let res = await riskUnitApi().addBasicRiskUnit(query); + let { basicRiskUnitId, ...query} = riskUnitDialogState.riskUnitForm + let res = await riskUnitApi().addRiskUnit(query); if(res.data.code === 100){ emit('refresh') riskUnitDialogState.riskUnitDialogVisible = false; diff --git a/src/views/analyse/riskUnit/index.ts b/src/views/analyse/riskUnit/index.ts index aecbf82..eba58ba 100644 --- a/src/views/analyse/riskUnit/index.ts +++ b/src/views/analyse/riskUnit/index.ts @@ -7,6 +7,7 @@ riskName: string, } total: number + allRiskTypeList: Array<RiskType> riskList: Array<Type>, riskSourceList: Array<Type> evaluateStatusList: Array<Type> @@ -32,6 +33,11 @@ name: string, } +declare interface RiskType { + id: number, + riskType: string +} + declare interface RiskUnitDialogType { title: string, experimentType: number | null, @@ -41,6 +47,7 @@ experimentId: number | null, riskCode: string, riskName: string, + riskUnitTypeId: number | null, liabilityDep: string, liabilityUserId: number | null, description: string, @@ -50,6 +57,7 @@ riskUnitFormRules: { }, + riskTypeList: Array<RiskType>, specialDeviceList: Array<Type>, deviceUnitList: Array<Type>, basicUnitList: Array<UnitType>, diff --git a/src/views/analyse/riskUnit/index.vue b/src/views/analyse/riskUnit/index.vue index c6d1221..2ea936f 100644 --- a/src/views/analyse/riskUnit/index.vue +++ b/src/views/analyse/riskUnit/index.vue @@ -39,6 +39,7 @@ <span>{{`${riskUnitState.riskList.find(item =>item.id === scope.row.riskType)?.name || ''}`}}</span> </template> </el-table-column> + <el-table-column prop="riskUnitType" label="风险单元类型"/> <el-table-column prop="evaluateStatus" label="是否评价" show-overflow-tooltip> <template #default="scope"> <span>{{`${riskUnitState.evaluateStatusList.find(item =>item.id === scope.row.evaluateStatus)?.name}`}}</span> @@ -100,6 +101,7 @@ {id:2, name: '设施设备'}, {id:3, name: '固定工艺节点'} ], + allRiskTypeList: [], basicUnitList: [], allPersonList: [], allExperimentList: [], @@ -142,6 +144,18 @@ } }; +const getAllTypeList = async () =>{ + let res = await unitApi().getAllUnitType() + if(res.data.code === 100){ + riskUnitState.allRiskTypeList = JSON.parse(JSON.stringify(res.data.data)); + }else{ + ElMessage({ + type: 'warning', + message: res.data.msg + }) + } +} + const getAllExperimentList = async () => { let res = await projectApi().getAllExperiment() if(res.data.code === 100){ @@ -155,7 +169,7 @@ }; const openRiskUnitDialog = (title: string, value: RiskUnitType) => { - riskUnitDialogRef.value.showRiskUnitDialog(title, value, riskUnitState.basicUnitList, riskUnitState.allPersonList, riskUnitState.allExperimentList); + riskUnitDialogRef.value.showRiskUnitDialog(title, value, riskUnitState.basicUnitList, riskUnitState.allPersonList, riskUnitState.allExperimentList, riskUnitState.allRiskTypeList); }; const onDelRiskUnit = (val: RiskUnitType) => { @@ -207,6 +221,7 @@ getRiskUnitData(); getAllBasicUnitList(); getAllPersonList(); + getAllTypeList(); getAllExperimentList(); }) diff --git a/src/views/experiment/developing/components/developDialog.vue b/src/views/experiment/developing/components/developDialog.vue new file mode 100644 index 0000000..e963df5 --- /dev/null +++ b/src/views/experiment/developing/components/developDialog.vue @@ -0,0 +1,638 @@ +<template> + <div class="system-menu-dialog-container"> + <el-dialog :title="projectDialogState.title" v-model="projectDialogState.projectDialogVisible" width="80%"> + <el-form ref="ProjectFormRef" :rules="projectDialogState.projectFormRules" :model="projectDialogState.projectForm" size="default" label-width="0"> + <table class="report-table"> + <th class="m-color b-font" style="text-align: center">***研究所/***大学<br />科学研究实验项目安全风险基础信息录入表(已开展 + )(带*为必填项)</th> + <tr> + <td class="w-25 m-color required">实验名称</td> + <td class="w-75 m-color"> + <el-form-item prop="experimentName"> + <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.experimentName" placeholder="请输入实验名称" /> + </el-form-item> + </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="projectDialogState.disabled" v-model="projectDialogState.projectForm.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> + </tr> + <tr> + <td class="w-25 m-color required">部门</td> + <td class="w-75 m-color"> + <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.dep" /> + </td> + </tr> + <tr> + <td class="w-25 m-color required">负责人</td> + <td class="w-25 m-color"> + <el-select style="width: 100%" disabled v-model="projectDialogState.projectForm.liabilityUserId" clearable filterable> + <el-option :key="userInfos.uid" :value="userInfos.uid" :label="userInfos.userName"></el-option> + </el-select> + <!-- <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.liabilityUserId"/>--> + </td> + <td class="w-25 m-color required">电话</td> + <td class="w-25 m-color"> + <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.liabilityUserPhone" /> + </td> + </tr> + <tr> + <td class="w-25 m-color required">安全负责人</td> + <td class="w-25 m-color"> +<!-- <el-select style="width: 100%" :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.safeLiabilityUser" @change="getSafeLiabilityUserPhone($event)" clearable filterable>--> +<!-- <el-option--> +<!-- v-for="item in projectDialogState.allPersonList"--> +<!-- :key="item.id"--> +<!-- :value="item.id"--> +<!-- :label="item.personName"--> +<!-- ></el-option>--> +<!-- </el-select>--> + <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.safeLiabilityUser"/> + </td> + <td class="w-25 m-color required">电话</td> + <td class="w-25 m-color"> + <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.safeLiabilityUserPhone" /> + </td> + </tr> + <tr> + <td class="w-25 m-color required">立项时间</td> + <td class="w-25 m-color"> + <el-date-picker :disabled="projectDialogState.disabled" type="datetime" format="YYYY/MM/DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" v-model="projectDialogState.projectForm.createExperimentTime" /> + </td> + <td class="w-25 m-color required">开展时间</td> + <td class="w-25 m-color"> + <el-date-picker :disabled="projectDialogState.disabled" type="datetime" format="YYYY/MM/DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" v-model="projectDialogState.projectForm.startTime" /> + </td> + </tr> + <tr> + <td class="w-25 m-color required">是否是安全化信息系统</td> + <td class="w-25 m-color"> + <el-radio-group :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.sisStatus" @change="hasSafeSystem"> + <el-radio :label="1">是</el-radio> + <el-radio :label="2">否</el-radio> + </el-radio-group> + </td> + <td class="w-25 m-color" :class="projectDialogState.projectForm.sisStatus==1?'required':''">安全信息化系统</td> + <td class="w-25 m-color"> + <el-input :disabled="projectDialogState.disabled" :readonly="projectDialogState.projectForm.sisStatus!==1" v-model="projectDialogState.projectForm.safeInformationSystem" /> + </td> + </tr> + <select-room ref="selectRoomRef" v-model:disabled="projectDialogState.disabled" v-model:data="projectDialogState.projectForm.siteList"></select-room> + <select-material ref="selectMaterialRef" v-model:disabled="projectDialogState.disabled" v-model:data="projectDialogState.projectForm.stuffList"></select-material> + <select-equipment ref="selectEquipmentRef" v-model:disabled="projectDialogState.disabled" v-model:data="projectDialogState.projectForm.deviceList"></select-equipment> + <tr> + <td class="w-25 m-color required">实验步骤</td> + <td class="w-75 m-color"> + <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.experimentStep" placeholder="请输入实验步骤" /> + </td> + </tr> + <tr> + <td class="w-25 m-color required">操作方法</td> + <td class="w-75 m-color"> + <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.experimentMethod" placeholder="请输入操作方法" /> + </td> + </tr> + <tr> + <td class="w-25 m-color required">工艺过程</td> + <td class="w-75 m-color"> + <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.process" placeholder="请输入工艺过程" /> + </td> + </tr> + <tr> + <td class="w-25 m-color required">特殊/关键过程</td> + <td class="w-75 m-color"> + <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.keyProcess" placeholder="请输入特殊/关键过程" /> + </td> + </tr> + <tr> + <td class="w-25 m-color required">预防措施</td> + <td class="w-75 m-color"> + <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.measure" placeholder="请输入预防措施" /> + </td> + </tr> + <tr> + <td class="w-25 m-color required">是否存在过夜、老化实验</td> + <td class="w-25 m-color"> + <el-radio-group :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.timeout"> + <el-radio :label="1">存在</el-radio> + <el-radio :label="2">不存在</el-radio> + </el-radio-group> + </td> + <td class="w-25 m-color required">过夜、老化保障措施</td> + <td class="w-25 m-color"> + <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.timeoutManager" /> + </td> + </tr> + <tr> + <td class="w-25 m-color required">是否在封闭条件下</td> + <td class="w-25 m-color"> + <el-radio-group :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.closed"> + <el-radio :label="1">存在</el-radio> + <el-radio :label="2">不存在</el-radio> + </el-radio-group> + </td> + <td class="w-25 m-color required">封闭条件保障措施</td> + <td class="w-25 m-color"> + <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.unclosedManager" /> + </td> + </tr> + <tr> + <td class="w-25 m-color required">实验场所防爆措施条件和设施情况</td> + <td class="w-75 m-color"> + <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.explosionProof" placeholder="请输入" /> + </td> + </tr> + <tr> + <td class="w-25 m-color required">实验场所防火措施条件和设施情况</td> + <td class="w-75 m-color"> + <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.fireProof" placeholder="请输入" /> + </td> + </tr> + <tr> + <td class="w-25 m-color required">实验场所防中毒措施条件和设施情况</td> + <td class="w-75 m-color"> + <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.poisonProof" placeholder="请输入" /> + </td> + </tr> + + + <select-danger ref="selectDangerRef" v-model:data="projectDialogState.projectForm.hazardousWasteList" v-model:disabled="projectDialogState.disabled"></select-danger> + <select-person ref="selectPersonRef" v-model:data="projectDialogState.projectForm.persons" v-model:disabled="projectDialogState.disabled"></select-person> + <tr> + <td class="w-25 m-color required">安全管理制度</td> + <td class="w-75 m-color"> + <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.safeManagerMethod" placeholder="请输入" /> + </td> + </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 required">预案名称</td> + <td class="w-25 m-color required">是否演练</td> + <td class="w-25 m-color required">演练情况</td> + </tr> + <tr> + <td class="w-25 m-color"> + <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.emergencyPlan" /> + </td> + <td class="w-25 m-color"> + <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.emergencyPlanName" /> + </td> + <td class="w-25 m-color"> + <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.emergencyDrillStatus" /> + </td> + <td class="w-25 m-color"> + <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.emergencyDrill" /> + </td> + </tr> + <tr class="m-color b-font" style=" text-align: center">其他信息</tr> + <tr> + <td class="w-25 m-color required">实验场所是否需要分区隔断</td> + <td class="w-75 m-color"> + <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.partitionCondition" placeholder="请输入" /> + </td> + </tr> + <tr> + <td class="w-25 m-color">其它基础信息(详细描述)</td> + <td class="w-75 m-color"> + <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.note" placeholder="请输入" /> + </td> + </tr> + </table> + </el-form> + <template #footer> + <span class="dialog-footer" style="padding-top:10px;text-align: center !important;"> + <el-button @click="projectDialogState.projectDialogVisible = !projectDialogState.projectDialogVisible" size="default">取 消</el-button> + <el-button type="primary" v-if="!projectDialogState.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 SelectRoom from "/@/views/experiment/project/components/selectRoom.vue"; +import {useUserInfo} from "/@/stores/userInfo"; +import {storeToRefs} from "pinia"; +const SelectEquipment = defineAsyncComponent(() => import('../../project/components/selectEquipment.vue')) +const SelectMaterial = defineAsyncComponent(() => import('../../project/components/selectMaterial.vue')) +const SelectDanger = defineAsyncComponent(() => import('../../project/components/selectDanger.vue')) +const SelectPerson = defineAsyncComponent(() => import('../../project/components/selectPerson.vue')) +const ProjectFormRef = ref() +const selectPersonRef = ref() +const selectEquipmentRef = ref() +const selectRoomRef = ref() +const selectMaterialRef = ref() +const selectDangerRef = ref() + +const userInfo = useUserInfo(); +const { userInfos } = storeToRefs(userInfo); + +const projectDialogState = reactive<ProjectDialogType>({ + title: '', + disabled: false, + projectDialogVisible: false, + projectForm: { + id: null, + experimentName: "", + experimentType: null, + liabilityUserId: Number(userInfos.value.uid), + liabilityUserPhone: '', + safeLiabilityUser: '', + safeLiabilityUserPhone: '', + sisStatus: null, + safeInformationSystem: '', + dep: "", + experimentStep: "", + experimentMethod: "", + process: "", + keyProcess: "", + measure: "", + timeout: null, + timeoutManager: "", + closed: null, + unclosedManager: "", + explosionProof: "", + fireProof: "", + poisonProof: "", + hazardousWaste: null, + safeManagerMethod: "", + emergencyPlan: "", + emergencyDrill: "", + emergencyPlanName: "", + emergencyDrillStatus: "", + partitionCondition: "", + note: "", + createExperimentTime: '', + startTime: '', + persons: [ + ], + siteList: [], + deviceList: [ + ], + stuffList: [ + ], + hazardousWasteList: [ + ] + }, + projectFormRules: { + experimentName: [{ required: true, message: '请填写设备编号', trigger: 'blur' }], + deviceName: [{ required: true, message: '请填写设备名称', trigger: 'blur' }], + devicePower: [{ required: true, message: '请填写设备功率', trigger: 'blur' }], + deviceUnit: [{ required: true, message: '请选择计量单位', trigger: 'change' }] + }, + allPersonList: [], + allRoomList: [], + systemPersonList: [], +}) + +const showDevelopDialog = (title: string, value: ProjectType, allRoomList: RoomType []) => { + projectDialogState.projectDialogVisible = true; + projectDialogState.allRoomList = allRoomList + setTimeout(() => { + ProjectFormRef.value.clearValidate(); + }); + if(title === '新增'){ + projectDialogState.disabled = false + projectDialogState.title = '新增'; + projectDialogState.projectForm = { + id: null, + experimentName: "", + experimentType: null, + liabilityUserId: Number(userInfos.value.uid), + liabilityUserPhone: '', + safeLiabilityUser: '', + safeLiabilityUserPhone: '', + sisStatus: null, + safeInformationSystem: '', + dep: "", + experimentStep: "", + experimentMethod: "", + process: "", + keyProcess: "", + measure: "", + timeout: null, + timeoutManager: "", + closed: null, + unclosedManager: "", + explosionProof: "", + fireProof: "", + poisonProof: "", + hazardousWaste: 1, + safeManagerMethod: "", + emergencyPlan: "", + emergencyDrill: "", + emergencyPlanName: "", + emergencyDrillStatus: "", + partitionCondition: "", + note: "", + createExperimentTime: '', + startTime: '', + persons: [ + ], + siteList: [], + deviceList: [ + ], + stuffList: [ + ], + hazardousWasteList: [ + ] + }; + }else if(title === '整改'){ + projectDialogState.title = '整改'; + projectDialogState.disabled = false + for(let i in projectDialogState.projectForm) { + if(isValidKey(i, projectDialogState.projectForm)) { + projectDialogState.projectForm[i] = value[i]; + } + } + }else{ + projectDialogState.title = '查看'; + projectDialogState.disabled = true + for(let i in projectDialogState.projectForm) { + if(isValidKey(i, projectDialogState.projectForm)) { + projectDialogState.projectForm[i] = value[i]; + } + } + } +}; + +const isValidKey = (key: string | number | symbol, object:object): key is keyof typeof object =>{ + return key in object; +}; + +const getLiabilityUserPhone = (value: number)=>{ + const data = projectDialogState.systemPersonList.find(item => item.id === value) as AllPersonListType + projectDialogState.projectForm.liabilityUserPhone = data.phone +} + +const getSafeLiabilityUserPhone = (value: number)=>{ + const data = projectDialogState.allPersonList.find(item => item.id === value) as AllPersonListType + projectDialogState.projectForm.safeLiabilityUserPhone = data.phone +} + +const hasSafeSystem = (value: number) =>{ + if(value == 2){ + projectDialogState.projectForm.safeInformationSystem = '' + } +} + +const onSubmitProject = () => { + ProjectFormRef.value.validate(async(valid: boolean) => { + if(valid){ + if(projectDialogState.title === '新增'){ + projectDialogState.projectForm.persons = selectPersonRef.value.dataList + projectDialogState.projectForm.hazardousWasteList = selectDangerRef.value.dataList + projectDialogState.projectForm.siteList = selectRoomRef.value.dataList.map(({siteId}) => ({siteId})) + projectDialogState.projectForm.stuffList = selectMaterialRef.value.dataList + projectDialogState.projectForm.deviceList = selectEquipmentRef.value.dataList + let res = await projectApi().addDevelop(projectDialogState.projectForm); + if(res.data.code === 100){ + emit('refresh') + projectDialogState.projectDialogVisible = false; + ElMessage({ + type: 'success', + message: '新增成功' + }) + }else{ + ElMessage({ + type: 'warning', + message: res.data.msg, + }); + } + }else{ + projectDialogState.projectForm.siteList = selectRoomRef.value.dataList.map(({siteId}) => ({siteId})) + projectDialogState.projectForm.hazardousWasteList = selectDangerRef.value.dataList.map(obj => ({classify:obj.classify,wasteStorage:obj.wasteStorage,handAmount:obj.handAmount})) + let res = await projectApi().modProject(projectDialogState.projectForm) + if(res.data.code === 100){ + emit('refresh') + projectDialogState.projectDialogVisible = 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){ + projectDialogState.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){ + projectDialogState.allPersonList = JSON.parse(JSON.stringify(res.data.data)); + }else{ + ElMessage({ + type: 'warning', + message: res.data.msg + }) + } +}; + +const emit = defineEmits(['refresh']); + +defineExpose({ + showDevelopDialog, +}); + +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; + +&: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%; + } + +.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> diff --git a/src/views/experiment/developing/components/projectDialog.vue b/src/views/experiment/developing/components/projectDialog.vue deleted file mode 100644 index b621833..0000000 --- a/src/views/experiment/developing/components/projectDialog.vue +++ /dev/null @@ -1,533 +0,0 @@ -<template> - <div class="system-menu-dialog-container"> - <el-dialog :title="projectDialogState.title" v-model="projectDialogState.projectDialogVisible" width="70%"> - <el-form ref="ProjectFormRef" :rules="projectDialogState.projectFormRules" :model="projectDialogState.projectForm" size="default" label-width="0"> - <table class="report-table"> - <th class="m-color b-font" style="text-align: center">***研究所/***大学<br />科学研究实验项目安全风险基础信息录入表(已开展B)</th> - <tr> - <td class="w-25 m-color">实验名称</td> - <td class="w-75 m-color"> - <el-form-item prop="experimentName"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.experimentName" placeholder="请输入实验名称" /> - </el-form-item> - </td> - </tr> - <tr> - <td class="w-25 m-color">实验类型</td> - <td class="w-75 m-color"> - - <el-radio-group style="text-align: center" :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.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> - </tr> - <tr> - <td class="w-25 m-color">部门</td> - <td class="w-25 m-color"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.dep" /> - </td> - <td class="w-25 m-color">负责人</td> - <td class="w-16 m-color"> - <el-select :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.liabilityUserId" clearable filterable> - <el-option - v-for="item in projectDialogState.allPersonList" - :key="item.id" - :value="item.id" - :label="item.personName" - ></el-option> - </el-select> - </td> - </tr> - <tr> - <td class="w-25 m-color">立项时间</td> - <td class="w-25 m-color"> - <el-date-picker :disabled="projectDialogState.disabled" type="datetime" format="YYYY/MM/DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" v-model="projectDialogState.projectForm.expectStartTime" /> - </td> -<!-- <td class="w-16 m-color">开展时间</td>--> -<!-- <td class="w-16 m-color">--> -<!-- <el-date-picker v-model="projectDialogState.projectForm.startTime" />--> -<!-- </td>--> - <td class="w-25 m-color">安全负责人</td> - <td class="w-16 m-color"> - <el-select :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.safeLiabilityUserId" clearable filterable> - <el-option - v-for="item in projectDialogState.allPersonList" - :key="item.id" - :value="item.id" - :label="item.personName" - ></el-option> - </el-select> - </td> - </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-input v-model="projectDialogState.projectForm.building" placeholder="请输入楼栋名称" />--> -<!-- </td>--> -<!-- </tr>--> - <tr> - <td class="w-25 m-color">房间号</td> -<!-- <td class="w-75 m-color">--> - <td class="w-16 m-color"> - <el-select :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.siteId" placeholder="请输入房间号" > - <el-option - v-for="item in projectDialogState.allRoomList" - :key="item.id" - :value="item.id" - :label="item.room" - ></el-option> - </el-select> - </td> - </tr> - <select-material ref="selectMaterialRef" v-model:disabled="projectDialogState.disabled" v-model:data="projectDialogState.projectForm.stuffList"></select-material> - <select-equipment ref="selectEquipmentRef" v-model:disabled="projectDialogState.disabled" v-model:data="projectDialogState.projectForm.deviceList"></select-equipment> - <tr> - <td class="w-25 m-color">实验步骤</td> - <td class="w-75 m-color"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.experimentStep" placeholder="请输入实验步骤" /> - </td> - </tr> - <tr> - <td class="w-25 m-color">操作方法</td> - <td class="w-75 m-color"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.experimentMethod" placeholder="请输入操作方法" /> - </td> - </tr> - <tr> - <td class="w-25 m-color">工艺过程</td> - <td class="w-75 m-color"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.process" placeholder="请输入工艺过程" /> - </td> - </tr> - <tr> - <td class="w-25 m-color">特殊/关键过程</td> - <td class="w-75 m-color"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.keyProcess" placeholder="请输入特殊/关键过程" /> - </td> - </tr> - <tr> - <td class="w-25 m-color">是否存在过夜、老化实验</td> - <td class="w-25 m-color"> - <el-radio-group :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.timeout"> - <el-radio :label="1">存在</el-radio> - <el-radio :label="2">不存在</el-radio> - </el-radio-group> - </td> - <td class="w-25 m-color">过夜、老化保障措施</td> - <td class="w-25 m-color"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.timeoutManager" /> - </td> - </tr> - <tr> - <td class="w-25 m-color">是否在封闭条件下</td> - <td class="w-25 m-color"> - <el-radio-group :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.closed"> - <el-radio :label="1">存在</el-radio> - <el-radio :label="2">不存在</el-radio> - </el-radio-group> - </td> - <td class="w-25 m-color">封闭条件保障措施</td> - <td class="w-25 m-color"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.unclosedManager" /> - </td> - </tr> - <tr> - <td class="w-25 m-color">实验场所防爆措施条件和设施情况</td> - <td class="w-75 m-color"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.explosionProof" placeholder="请输入" /> - </td> - </tr> - <tr> - <td class="w-25 m-color">实验场所防火措施条件和设施情况</td> - <td class="w-75 m-color"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.fireProof" placeholder="请输入" /> - </td> - </tr> - <tr> - <td class="w-25 m-color">实验场所防中毒措施条件和设施情况</td> - <td class="w-75 m-color"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.poisonProof" placeholder="请输入" /> - </td> - </tr> - - - <select-danger ref="selectDangerRef" v-model:data="projectDialogState.projectForm.hazardousWasteList" v-model:disabled="projectDialogState.disabled"></select-danger> - <select-person ref="selectPersonRef" v-model:data="projectDialogState.projectForm.persons" v-model:disabled="projectDialogState.disabled"></select-person> - - -<!-- <tr>--> -<!-- <td class="w-25 m-color">安全信息化系统使用情况</td>--> -<!-- <td class="w-25 m-color">--> -<!-- <el-radio-group v-model="projectDialogState.projectForm.useIT">--> -<!-- <el-radio value="1">是</el-radio>--> -<!-- <el-radio value="2">否</el-radio>--> -<!-- </el-radio-group>--> -<!-- </td>--> -<!-- <td class="w-25 m-color">系统名称</td>--> -<!-- <td class="w-25 m-color">--> -<!-- <el-input v-model="projectDialogState.projectForm.systemName" placeholder="请输入" />--> -<!-- </td>--> -<!-- </tr>--> - <tr> - <td class="w-25 m-color">安全管理制度</td> - <td class="w-75 m-color"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.safeManagerMethod" placeholder="请输入" /> - </td> - </tr> - <tr class="m-color b-font" style="text-align: center">应急预案/应急演练</tr> - <tr> - <td class="w-25 m-color">有无预案</td> - <td class="w-25 m-color"> - 预案名称 - </td> - <td class="w-25 m-color">是否演练</td> - <td class="w-25 m-color"> - 演练情况 - </td> - </tr> - <tr> - <td class="w-25 m-color"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.emergencyPlan" /> - </td> - <td class="w-25 m-color"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.emergencyPlanName" /> - </td> - <td class="w-25 m-color"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.emergencyDrillStatus" /> - </td> - <td class="w-25 m-color"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.emergencyDrill" /> - </td> - </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-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.partitionCondition" placeholder="请输入" /> - </td> - </tr> - <tr> - <td class="w-25 m-color">其它基础信息(详细描述)</td> - <td class="w-75 m-color"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.note" placeholder="请输入" /> - </td> - </tr> - </table> - </el-form> - <template #footer> - <span class="dialog-footer" style="padding-top:10px;text-align: center !important;"> - <el-button @click="projectDialogState.projectDialogVisible = !projectDialogState.projectDialogVisible" size="default">取 消</el-button> - <el-button type="primary" v-if="!projectDialogState.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"; - -const SelectEquipment = defineAsyncComponent(() => import('./selectEquipment.vue')) -const SelectMaterial = defineAsyncComponent(() => import('./selectMaterial.vue')) -const SelectDanger = defineAsyncComponent(() => import('./selectDanger.vue')) -const SelectPerson = defineAsyncComponent(() => import('./selectPerson.vue')) -const ProjectFormRef = ref() -const selectPersonRef = ref() -const selectEquipmentRef = ref() -const selectMaterialRef = ref() -const selectDangerRef = ref() - -const projectDialogState = reactive<ProjectDialogType>({ - title: '', - disabled: false, - projectDialogVisible: false, - projectForm: { - id: null, - experimentName: "", - experimentType: null, - liabilityUserId: null, - safeLiabilityUserId: null, - dep: "", - siteId: null, - experimentStep: "", - experimentMethod: "", - process: "", - keyProcess: "", - timeout: null, - timeoutManager: "", - closed: null, - unclosedManager: "", - explosionProof: "", - fireProof: "", - poisonProof: "", - hazardousWaste: null, - safeManagerMethod: "", - emergencyPlan: "", - emergencyDrill: "", - emergencyPlanName: "", - emergencyDrillStatus: "", - partitionCondition: "", - note: "", - expectStartTime: null, - persons: [ - ], - deviceList: [ - ], - stuffList: [ - ], - hazardousWasteList: [ - ] - }, - projectFormRules: { - experimentName: [{ required: true, message: '请填写设备编号', trigger: 'blur' }], - deviceName: [{ required: true, message: '请填写设备名称', trigger: 'blur' }], - devicePower: [{ required: true, message: '请填写设备功率', trigger: 'blur' }], - deviceUnit: [{ required: true, message: '请选择计量单位', trigger: 'change' }] - }, - allPersonList: [], - allRoomList: [], -}) - -const showProjectDialog = (title: string, value: ProjectType, allRoomList: RoomType []) => { - projectDialogState.projectDialogVisible = true; - projectDialogState.allRoomList = allRoomList - setTimeout(() => { - ProjectFormRef.value.clearValidate(); - }); - if(title === '新增'){ - projectDialogState.disabled = false - projectDialogState.title = '新增'; - projectDialogState.projectForm = { - id: null, - experimentName: "", - experimentType: null, - liabilityUserId: null, - safeLiabilityUserId: null, - dep: "", - siteId: null, - experimentStep: "", - experimentMethod: "", - process: "", - keyProcess: "", - timeout: null, - timeoutManager: "", - closed: null, - unclosedManager: "", - explosionProof: "", - fireProof: "", - poisonProof: "", - hazardousWaste: 1, - safeManagerMethod: "", - emergencyPlan: "", - emergencyDrill: "", - emergencyPlanName: "", - emergencyDrillStatus: "", - partitionCondition: "", - note: "", - expectStartTime: null, - persons: [ - ], - deviceList: [ - ], - stuffList: [ - ], - hazardousWasteList: [ - ] - }; - }else{ - projectDialogState.title = '查看'; - projectDialogState.disabled = true - for(let i in projectDialogState.projectForm) { - if(isValidKey(i, projectDialogState.projectForm)) { - projectDialogState.projectForm[i] = value[i]; - } - } - } -}; - -const isValidKey = (key: string | number | symbol, object:object): key is keyof typeof object =>{ - return key in object; -}; - -const onSubmitProject = () => { - ProjectFormRef.value.validate(async(valid: boolean) => { - if(valid){ - if(projectDialogState.title === '新增'){ - projectDialogState.projectForm.persons = selectPersonRef.value.dataList - projectDialogState.projectForm.hazardousWasteList = selectDangerRef.value.dataList - projectDialogState.projectForm.stuffList = selectMaterialRef.value.dataList - projectDialogState.projectForm.deviceList = selectEquipmentRef.value.dataList - let res = await projectApi().addProject(projectDialogState.projectForm); - if(res.data.code === 100){ - emit('refresh') - projectDialogState.projectDialogVisible = false; - ElMessage({ - type: 'success', - message: '新增成功' - }) - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg, - }); - } - }else{ - let res = await projectApi().modProject(projectDialogState.projectForm) - if(res.data.code === 100){ - emit('refresh') - projectDialogState.projectDialogVisible = false; - ElMessage({ - type: 'success', - message: '编辑成功' - }) - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg, - }); - } - } - }else{ - ElMessage({ - type: 'warning', - message: '请完善基本信息', - }); - } - }) -}; - -const getAllPersonList = async () => { - let res = await personApi().getAllPerson(); - if(res.data.code === 100){ - projectDialogState.allPersonList = JSON.parse(JSON.stringify(res.data.data)); - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }) - } -}; - -const emit = defineEmits(['refresh']); - -defineExpose({ - showProjectDialog, -}); - -onMounted(() => { - getAllPersonList(); -}); -</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; - } - -&.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; - margin-top: 6px; -} -:deep(.el-dialog__footer){ - padding-top: 20px; - display: flex; - justify-content: center; -} - - -</style> diff --git a/src/views/experiment/developing/index.vue b/src/views/experiment/developing/index.vue index ba7ab0b..624062d 100644 --- a/src/views/experiment/developing/index.vue +++ b/src/views/experiment/developing/index.vue @@ -4,17 +4,17 @@ <el-row class="homeCard"> <div class="basic-line"> <span>实验名称:</span> - <el-input v-model="projectState.searchQuery.searchParams.experimentName" clearable filterable class="input-box" placeholder="实验名称"> + <el-input v-model="developState.searchQuery.searchParams.experimentName" clearable filterable class="input-box" placeholder="实验名称"> </el-input> </div> <div class="basic-line"> <span>实验类型:</span> - <el-select v-model="projectState.searchQuery.searchParams.experimentType" clearable filterable class="input-box" placeholder="实验类型"> - <el-option v-for="item in projectState.experimentTypeList" :key="item.id" :label="item.name" :value="item.id"></el-option> + <el-select v-model="developState.searchQuery.searchParams.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="getProjectData">查询</el-button> + <el-button type="primary" @click="getdevelopData">查询</el-button> <el-button plain @click="reset">重置</el-button> </div> </el-row> @@ -22,35 +22,81 @@ <div class="main-card"> <el-row class="cardTop"> <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="openProjectDialog('新增', {})">新增</el-button> + <el-button type="primary" :icon="Plus" size="default" @click="openProjectDialog('新增', {})">录入实验信息</el-button> <!-- <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button>--> </el-col> <!-- <el-button type="primary" :icon="Refresh" size="default" />--> </el-row> - <el-table ref="multipleTableRef" :data="projectState.projectData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }"> + <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="expectStartTime" label="立项时间" /> + <el-table-column prop="experimentName" label="实验名称"/> + <el-table-column prop="createExperimentTime" label="立项时间"> + <template #default="scope"> + <span>{{scope.row.createExperimentTime?scope.row.createExperimentTime.substring(0,16):'--'}}</span> + </template> + </el-table-column> + <el-table-column prop="startTime" label="开展时间" show-overflow-tooltip> + <template #default="scope"> + <span>{{scope.row.startTime?scope.row.startTime.substring(0,16):'--'}}</span> + </template> + </el-table-column> <el-table-column prop="liabilityUser" label="负责人"/> - <el-table-column prop="createTime" label="创建时间" show-overflow-tooltip></el-table-column> - <el-table-column prop="createByUserName" label="创建人" show-overflow-tooltip></el-table-column> - <el-table-column prop="updateTime" label="最后修改时间" show-overflow-tooltip></el-table-column> - <el-table-column prop="updateByUserName" label="最后修改人" show-overflow-tooltip></el-table-column> - <el-table-column label="操作" width="250"> + <el-table-column prop="siteList" label="实验场所" show-overflow-tooltip> + <template #default="scope"> + <span>{{scope.row.siteList.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 prop="status" label="评估申请"> + <template #default="scope"> + <span>{{scope.row.status == 1?'未申请':scope.row.status == 2?'已申请':'--'}}</span> + </template> + </el-table-column> + <el-table-column prop="status" label="评估申请时间" show-overflow-tooltip> + <template #default="scope"> + <span>{{scope.row.assessApplyTime?scope.row.assessApplyTime.substring(0,16):'--'}}</span> + </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?'生成报告':'--'}} + </el-tag> + </template> + </el-table-column> + <el-table-column prop="assessLevel" label="风险等级"> + <template #default="scope"> + <el-tag :type="scope.row.assessLevel == 4?'danger':scope.row.assessLevel == 3 || scope.row.assessLevel == 2?'warning':''"> + {{scope.row.assessLevel == 1?'低风险':scope.row.assessLevel == 2?'一般风险':scope.row.assessLevel == 3?'较大风险':scope.row.assessLevel == 4?'重大风险':'--'}} + </el-tag> + </template> + </el-table-column> +<!-- <el-table-column prop="createTime" label="创建时间" show-overflow-tooltip></el-table-column>--> +<!-- <el-table-column prop="createByUserName" label="创建人" show-overflow-tooltip></el-table-column>--> +<!-- <el-table-column prop="updateTime" label="最后修改时间" show-overflow-tooltip></el-table-column>--> +<!-- <el-table-column prop="updateByUserName" label="最后修改人" show-overflow-tooltip></el-table-column>--> + <el-table-column label="操作" width="250" fixed="right"> <template #default="scope"> <el-button size="small" text type="primary" :icon="View" @click="openProjectDialog('查看', scope.row)">查看</el-button> - <el-button size="small" text type="primary" :icon="Edit" @click="applyAccess( scope.row)">申请评估</el-button> + <el-button size="small" :disabled="scope.row.status == 2 ? true : false" text type="primary" :icon="Edit" @click="applyAccess( scope.row)">申请评估</el-button> + <el-button size="small" :disabled="(scope.row.status == 2 && scope.row.stage == 1) ? false : true" text type="warning" :icon="RefreshLeft" @click="cancelAccess( scope.row)">撤销评估</el-button> + <el-button size="small" type="warning" v-if="scope.row.rectifyStatus == 1" text :icon="Edit" @click="openProjectDialog('整改', 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="projectState.searchQuery.pageIndex" background v-model:page-size="projectState.searchQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="projectState.total" class="page-position"> </el-pagination> + <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> - <project-dialog ref="ProjectDialogRef" @refresh="getProjectData"></project-dialog> + <develop-dialog ref="DevelopDialogRef" @refresh="getdevelopData"></develop-dialog> <!-- <apply-start ref="ApplyStartRef"></apply-start>--> - <test ref="ApplyStartRef" @refresh="getProjectData"></test> + <test ref="ApplyStartRef" @refresh="getdevelopData"></test> </div> </template> @@ -58,17 +104,17 @@ import {defineAsyncComponent, onMounted, reactive, ref} from "vue"; import {projectApi} from "/@/api/experiment/project"; import {ElMessage, ElMessageBox} from "element-plus"; -import { View,Edit, Plus, Delete } from '@element-plus/icons-vue'; +import { View,Edit, Plus, RefreshLeft } from '@element-plus/icons-vue'; import {roomApi} from "/@/api/basic/room"; -const ProjectDialog = defineAsyncComponent(() => import('./components/projectDialog.vue')); +const DevelopDialog = defineAsyncComponent(() => import('./components/developDialog.vue')); const Test = defineAsyncComponent(() => import('./components/applyDialog.vue')) -const ProjectDialogRef = ref(); +const DevelopDialogRef = ref(); const ApplyStartRef = ref(); -const projectState = reactive<ProjectStateType>({ - projectData: [], +const developState = reactive<ProjectStateType>({ + developData: [], searchQuery: { pageIndex: 1, pageSize: 10, @@ -89,11 +135,11 @@ allRoomList: [] }) -const getProjectData = async () => { - let res = await projectApi().getProjectByList(projectState.searchQuery); +const getdevelopData = async () => { + let res = await projectApi().getDevelopByList(developState.searchQuery); if(res.data.code === 100){ - projectState.projectData = res.data.data; - projectState.total = res.data.total; + developState.developData = res.data.data; + developState.total = res.data.total; }else{ ElMessage({ type: 'warning', @@ -103,12 +149,11 @@ }; const openProjectDialog = (title: string, value: ProjectType) => { - ProjectDialogRef.value.showProjectDialog(title, value, projectState.allRoomList); + DevelopDialogRef.value.showDevelopDialog(title, value, developState.allRoomList); }; const applyAccess = (val: ProjectType) => { - debugger - ElMessageBox.confirm(`此操作将申请评估该实验:“${val.experimentCode}”,是否继续?`, '提示', { + ElMessageBox.confirm(`此操作将申请评估该实验:“${val.experimentName}”,是否继续?`, '提示', { confirmButtonText: '确认', cancelButtonText: '取消', type: 'warning' @@ -121,7 +166,7 @@ duration: 2000, message: '申请成功' }); - await getProjectData(); + await getdevelopData(); } else { ElMessage({ type: 'warning', @@ -131,6 +176,32 @@ }) .catch((error) => { }); +} + +const cancelAccess = (val: ProjectType) => { + ElMessageBox.confirm(`此操作将撤销评估该实验:“${val.experimentName}”,是否继续?`, '提示', { + confirmButtonText: '确认', + cancelButtonText: '取消', + type: 'warning' + }) + .then(async () => { + let res = await projectApi().cancelProject([val.id]); + if (res.data.code === 100) { + ElMessage({ + type: 'success', + duration: 2000, + message: '撤销成功' + }); + await getdevelopData(); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }) + .catch((error) => { + }); } const onDelProject = (val: ProjectType) => { @@ -148,7 +219,7 @@ duration: 2000, message: '删除成功' }); - await getProjectData(); + await getdevelopData(); } else { ElMessage({ type: 'warning', @@ -161,17 +232,17 @@ } const onHandleSizeChange = (val: number) => { - projectState.searchQuery.pageSize = val; - getProjectData(); + developState.searchQuery.pageSize = val; + getdevelopData(); }; const onHandleCurrentChange = (val: number) => { - projectState.searchQuery.pageIndex = val; - getProjectData(); + developState.searchQuery.pageIndex = val; + getdevelopData(); }; const reset = () => { - projectState.searchQuery = { + developState.searchQuery = { pageIndex: 1, pageSize: 10, searchParams: { @@ -184,7 +255,7 @@ const getRoomData = async () => { let res = await roomApi().getAllRoom(); if(res.data.code === 100){ - projectState.allRoomList = JSON.parse(JSON.stringify(res.data.data)); + developState.allRoomList = JSON.parse(JSON.stringify(res.data.data)); }else{ ElMessage({ type: 'warning', @@ -194,7 +265,7 @@ }; onMounted(() => { - getProjectData(); + getdevelopData(); getRoomData(); }) diff --git a/src/views/experiment/project/components/applyDialog.vue b/src/views/experiment/project/components/applyDialog.vue index b65f862..9317925 100644 --- a/src/views/experiment/project/components/applyDialog.vue +++ b/src/views/experiment/project/components/applyDialog.vue @@ -16,7 +16,7 @@ </el-radio-group> </el-form-item> </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> + <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="applyStartDialogState.applyStartForm.sisStatus==1"> <el-form-item label="安全信息化系统" prop="safeInformationSystem"> <el-input v-model="applyStartDialogState.applyStartForm.safeInformationSystem" placeholder="材料类型" class="input-length"> </el-input> @@ -42,7 +42,7 @@ const applyStartFormRef = ref() const applyStartDialogState = reactive<ApplyStartDialogType>({ - title: '', + title: '申请开展', applyStartDialogVisible: false, applyStartForm: { id: null, @@ -57,12 +57,21 @@ const showApplyStartDialog = (value: ProjectType) => { applyStartDialogState.applyStartDialogVisible = true; + applyStartDialogState.applyStartForm = { + id: null, + sisStatus: null, + safeInformationSystem: '', + startTime: '' + }, applyStartDialogState.applyStartForm.id = <number>value.id }; const onSubmitApplyStart = () => { applyStartFormRef.value.validate(async(valid: boolean) => { if(valid){ + if(applyStartDialogState.applyStartForm.sisStatus == 2){ + applyStartDialogState.applyStartForm.safeInformationSystem = '' + } let res = await projectApi().applyProject([applyStartDialogState.applyStartForm]); if(res.data.code === 100){ emit('refresh') diff --git a/src/views/experiment/project/components/projectDialog.vue b/src/views/experiment/project/components/projectDialog.vue index 102bdeb..fdbd79c 100644 --- a/src/views/experiment/project/components/projectDialog.vue +++ b/src/views/experiment/project/components/projectDialog.vue @@ -1,11 +1,11 @@ <template> <div class="system-menu-dialog-container"> - <el-dialog :title="projectDialogState.title" v-model="projectDialogState.projectDialogVisible" width="70%"> + <el-dialog :title="projectDialogState.title" v-model="projectDialogState.projectDialogVisible" width="80%"> <el-form ref="ProjectFormRef" :rules="projectDialogState.projectFormRules" :model="projectDialogState.projectForm" size="default" label-width="0"> <table class="report-table"> - <th class="m-color b-font" style="text-align: center">***研究所/***大学<br />科学研究实验项目安全风险基础信息录入表(已开展B)</th> + <th class="m-color b-font" style="text-align: center">***研究所/***大学<br />科学研究实验项目安全风险基础信息录入表(新立项)(带*为必填项)</th> <tr> - <td class="w-25 m-color">实验名称</td> + <td class="w-25 m-color required">实验名称</td> <td class="w-75 m-color"> <el-form-item prop="experimentName"> <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.experimentName" placeholder="请输入实验名称" /> @@ -13,7 +13,7 @@ </td> </tr> <tr> - <td class="w-25 m-color">实验类型</td> + <td class="w-25 m-color required">实验类型</td> <td class="w-75 m-color"> <el-radio-group style="text-align: center" :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.experimentType"> @@ -29,130 +29,119 @@ </td> </tr> <tr> - <td class="w-25 m-color">部门</td> + <td class="w-25 m-color required">部门</td> <td class="w-25 m-color"> <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.dep" /> </td> - <td class="w-25 m-color">负责人</td> - <td class="w-16 m-color"> - <el-select :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.liabilityUserId" clearable filterable> - <el-option - v-for="item in projectDialogState.systemPersonList" - :key="item.id" - :value="item.id" - :label="item.realName" - ></el-option> - </el-select> - </td> - </tr> - <tr> - <td class="w-25 m-color">立项时间</td> + <td class="w-25 m-color required">立项时间</td> <td class="w-25 m-color"> - <el-date-picker :disabled="projectDialogState.disabled" type="datetime" format="YYYY/MM/DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" v-model="projectDialogState.projectForm.expectStartTime" /> - </td> -<!-- <td class="w-16 m-color">开展时间</td>--> -<!-- <td class="w-16 m-color">--> -<!-- <el-date-picker v-model="projectDialogState.projectForm.startTime" />--> -<!-- </td>--> - <td class="w-25 m-color">安全负责人</td> - <td class="w-16 m-color"> - <el-select :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.safeLiabilityUserId" clearable filterable> - <el-option - v-for="item in projectDialogState.allPersonList" - :key="item.id" - :value="item.id" - :label="item.personName" - ></el-option> - </el-select> + <el-date-picker :disabled="projectDialogState.disabled" type="datetime" format="YYYY/MM/DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" v-model="projectDialogState.projectForm.createExperimentTime" /> </td> </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-input v-model="projectDialogState.projectForm.building" placeholder="请输入楼栋名称" />--> -<!-- </td>--> -<!-- </tr>--> <tr> - <td class="w-25 m-color">房间号</td> -<!-- <td class="w-75 m-color">--> - <td class="w-16 m-color"> - <el-select :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.siteId" placeholder="请输入房间号" > - <el-option - v-for="item in projectDialogState.allRoomList" - :key="item.id" - :value="item.id" - :label="item.room" - ></el-option> - </el-select> - </td> + <td class="w-25 m-color required">负责人</td> + <td class="w-25 m-color"> + <el-select style="width: 100%" disabled v-model="projectDialogState.projectForm.liabilityUserId" clearable filterable> + <el-option :key="userInfos.uid" :value="userInfos.uid" :label="userInfos.userName"></el-option> + </el-select> +<!-- <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.liabilityUserId"/>--> + </td> + <td class="w-25 m-color required">电话</td> + <td class="w-25 m-color"> + <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.liabilityUserPhone" /> + </td> </tr> + <tr> + <td class="w-25 m-color required">安全负责人</td> + <td class="w-25 m-color"> +<!-- <el-select style="width: 100%" :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.safeLiabilityUser" @change="getSafeLiabilityUserPhone($event)" clearable filterable>--> +<!-- <el-option--> +<!-- v-for="item in projectDialogState.allPersonList"--> +<!-- :key="item.id"--> +<!-- :value="item.id"--> +<!-- :label="item.personName"--> +<!-- ></el-option>--> +<!-- </el-select>--> + <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.safeLiabilityUser" /> + </td> + <td class="w-25 m-color required">电话</td> + <td class="w-25 m-color"> + <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.safeLiabilityUserPhone" /> + </td> + </tr> + <select-room ref="selectRoomRef" v-model:disabled="projectDialogState.disabled" v-model:data="projectDialogState.projectForm.siteList"></select-room> <select-material ref="selectMaterialRef" v-model:disabled="projectDialogState.disabled" v-model:data="projectDialogState.projectForm.stuffList"></select-material> <select-equipment ref="selectEquipmentRef" v-model:disabled="projectDialogState.disabled" v-model:data="projectDialogState.projectForm.deviceList"></select-equipment> <tr> - <td class="w-25 m-color">实验步骤</td> + <td class="w-25 m-color required">实验步骤</td> <td class="w-75 m-color"> <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.experimentStep" placeholder="请输入实验步骤" /> </td> </tr> <tr> - <td class="w-25 m-color">操作方法</td> + <td class="w-25 m-color required">操作方法</td> <td class="w-75 m-color"> <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.experimentMethod" placeholder="请输入操作方法" /> </td> </tr> <tr> - <td class="w-25 m-color">工艺过程</td> + <td class="w-25 m-color required">工艺过程</td> <td class="w-75 m-color"> <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.process" placeholder="请输入工艺过程" /> </td> </tr> <tr> - <td class="w-25 m-color">特殊/关键过程</td> + <td class="w-25 m-color required">特殊/关键过程</td> <td class="w-75 m-color"> <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.keyProcess" placeholder="请输入特殊/关键过程" /> </td> </tr> <tr> - <td class="w-25 m-color">是否存在过夜、老化实验</td> + <td class="w-25 m-color required">预防措施</td> + <td class="w-75 m-color"> + <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.measure" placeholder="请输入预防措施" /> + </td> + </tr> + <tr> + <td class="w-25 m-color required">是否存在过夜、老化实验</td> <td class="w-25 m-color"> <el-radio-group :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.timeout"> <el-radio :label="1">存在</el-radio> <el-radio :label="2">不存在</el-radio> </el-radio-group> </td> - <td class="w-25 m-color">过夜、老化保障措施</td> + <td class="w-25 m-color required">过夜、老化保障措施</td> <td class="w-25 m-color"> <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.timeoutManager" /> </td> </tr> <tr> - <td class="w-25 m-color">是否在封闭条件下</td> + <td class="w-25 m-color required">是否在封闭条件下</td> <td class="w-25 m-color"> <el-radio-group :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.closed"> <el-radio :label="1">存在</el-radio> <el-radio :label="2">不存在</el-radio> </el-radio-group> </td> - <td class="w-25 m-color">封闭条件保障措施</td> + <td class="w-25 m-color required">封闭条件保障措施</td> <td class="w-25 m-color"> <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.unclosedManager" /> </td> </tr> <tr> - <td class="w-25 m-color">实验场所防爆措施条件和设施情况</td> + <td class="w-25 m-color required">实验场所防爆措施条件和设施情况</td> <td class="w-75 m-color"> <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.explosionProof" placeholder="请输入" /> </td> </tr> <tr> - <td class="w-25 m-color">实验场所防火措施条件和设施情况</td> + <td class="w-25 m-color required">实验场所防火措施条件和设施情况</td> <td class="w-75 m-color"> <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.fireProof" placeholder="请输入" /> </td> </tr> <tr> - <td class="w-25 m-color">实验场所防中毒措施条件和设施情况</td> + <td class="w-25 m-color required">实验场所防中毒措施条件和设施情况</td> <td class="w-75 m-color"> <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.poisonProof" placeholder="请输入" /> </td> @@ -177,21 +166,17 @@ <!-- </td>--> <!-- </tr>--> <tr> - <td class="w-25 m-color">安全管理制度</td> + <td class="w-25 m-color required">安全管理制度</td> <td class="w-75 m-color"> <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.safeManagerMethod" placeholder="请输入" /> </td> </tr> <tr class="m-color b-font" style="text-align: center">应急预案/应急演练</tr> <tr> - <td class="w-25 m-color">有无预案</td> - <td class="w-25 m-color"> - 预案名称 - </td> - <td class="w-25 m-color">是否演练</td> - <td class="w-25 m-color"> - 演练情况 - </td> + <td class="w-25 m-color required">有无预案</td> + <td class="w-25 m-color required">预案名称</td> + <td class="w-25 m-color required">是否演练</td> + <td class="w-25 m-color required">演练情况</td> </tr> <tr> <td class="w-25 m-color"> @@ -207,9 +192,9 @@ <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.emergencyDrill" /> </td> </tr> - <tr class="m-color b-font" style=" text-align: center">实验人员</tr> + <tr class="m-color b-font" style=" text-align: center">其他信息</tr> <tr> - <td class="w-25 m-color">实验场所是否需要分区隔断</td> + <td class="w-25 m-color required">实验场所是否需要分区隔断</td> <td class="w-75 m-color"> <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.partitionCondition" placeholder="请输入" /> </td> @@ -238,6 +223,9 @@ import {projectApi} from "/@/api/experiment/project"; import {personApi} from "/@/api/basic/person"; import {userApi} from "/@/api/systemManage/user"; +import SelectRoom from "/@/views/experiment/project/components/selectRoom.vue"; +import {useUserInfo} from "/@/stores/userInfo"; +import {storeToRefs} from "pinia"; const SelectEquipment = defineAsyncComponent(() => import('./selectEquipment.vue')) const SelectMaterial = defineAsyncComponent(() => import('./selectMaterial.vue')) @@ -246,8 +234,12 @@ const ProjectFormRef = ref() const selectPersonRef = ref() const selectEquipmentRef = ref() +const selectRoomRef = ref() const selectMaterialRef = ref() const selectDangerRef = ref() + +const userInfo = useUserInfo(); +const { userInfos } = storeToRefs(userInfo); const projectDialogState = reactive<ProjectDialogType>({ title: '', @@ -257,14 +249,16 @@ id: null, experimentName: "", experimentType: null, - liabilityUserId: null, - safeLiabilityUserId: null, + liabilityUserId: Number(userInfos.value.uid), + liabilityUserPhone: '', + safeLiabilityUser: '', + safeLiabilityUserPhone: '', dep: "", - siteId: null, experimentStep: "", experimentMethod: "", process: "", keyProcess: "", + measure: "", timeout: null, timeoutManager: "", closed: null, @@ -280,9 +274,10 @@ emergencyDrillStatus: "", partitionCondition: "", note: "", - expectStartTime: null, + createExperimentTime: '', persons: [ ], + siteList: [], deviceList: [ ], stuffList: [ @@ -291,15 +286,22 @@ ] }, projectFormRules: { - experimentName: [{ required: true, message: '请填写设备编号', trigger: 'blur' }], - deviceName: [{ required: true, message: '请填写设备名称', trigger: 'blur' }], - devicePower: [{ required: true, message: '请填写设备功率', trigger: 'blur' }], - deviceUnit: [{ required: true, message: '请选择计量单位', trigger: 'change' }] + }, allPersonList: [], allRoomList: [], systemPersonList: [], }) + +const getLiabilityUserPhone = (value: number)=>{ + const data = projectDialogState.systemPersonList.find(item => item.id === value) as AllPersonListType + projectDialogState.projectForm.liabilityUserPhone = data.phone +} + +const getSafeLiabilityUserPhone = (value: number)=>{ + const data = projectDialogState.allPersonList.find(item => item.id === value) as AllPersonListType + projectDialogState.projectForm.safeLiabilityUserPhone = data.phone +} const showProjectDialog = (title: string, value: ProjectType, allRoomList: RoomType []) => { projectDialogState.projectDialogVisible = true; @@ -314,14 +316,16 @@ id: null, experimentName: "", experimentType: null, - liabilityUserId: null, - safeLiabilityUserId: null, + liabilityUserId: Number(userInfos.value.uid), + liabilityUserPhone: '', + safeLiabilityUser: '', + safeLiabilityUserPhone: '', dep: "", - siteId: null, experimentStep: "", experimentMethod: "", process: "", keyProcess: "", + measure: "", timeout: null, timeoutManager: "", closed: null, @@ -337,9 +341,10 @@ emergencyDrillStatus: "", partitionCondition: "", note: "", - expectStartTime: null, + createExperimentTime: '', persons: [ ], + siteList: [], deviceList: [ ], stuffList: [ @@ -347,6 +352,14 @@ hazardousWasteList: [ ] }; + }else if(title === '整改'){ + projectDialogState.title = '整改'; + projectDialogState.disabled = false + for(let i in projectDialogState.projectForm) { + if(isValidKey(i, projectDialogState.projectForm)) { + projectDialogState.projectForm[i] = value[i]; + } + } }else{ projectDialogState.title = '查看'; projectDialogState.disabled = true @@ -368,6 +381,7 @@ if(projectDialogState.title === '新增'){ projectDialogState.projectForm.persons = selectPersonRef.value.dataList projectDialogState.projectForm.hazardousWasteList = selectDangerRef.value.dataList + projectDialogState.projectForm.siteList = selectRoomRef.value.dataList.map(({siteId}) => ({siteId})) projectDialogState.projectForm.stuffList = selectMaterialRef.value.dataList projectDialogState.projectForm.deviceList = selectEquipmentRef.value.dataList let res = await projectApi().addProject(projectDialogState.projectForm); @@ -385,13 +399,15 @@ }); } }else{ + projectDialogState.projectForm.siteList = selectRoomRef.value.dataList.map(({siteId}) => ({siteId})) + projectDialogState.projectForm.hazardousWasteList = selectDangerRef.value.dataList.map(obj => ({classify:obj.classify,wasteStorage:obj.wasteStorage,handAmount:obj.handAmount})) let res = await projectApi().modProject(projectDialogState.projectForm) if(res.data.code === 100){ emit('refresh') projectDialogState.projectDialogVisible = false; ElMessage({ type: 'success', - message: '编辑成功' + message: '整改已提交' }) }else{ ElMessage({ @@ -447,6 +463,7 @@ onMounted(() => { getAllPersonList(); getPersonList(); + console.log(userInfos.value,typeof userInfos.value.uid,'u') }); </script> @@ -485,9 +502,22 @@ 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%); @@ -539,10 +569,47 @@ .m-color { color: #0c4995; } -:deep(.el-input__wrapper ){ - box-shadow: none; - margin-top: 6px; + +.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; diff --git a/src/views/experiment/project/components/selectDanger.vue b/src/views/experiment/project/components/selectDanger.vue index 8ef010c..340442b 100644 --- a/src/views/experiment/project/components/selectDanger.vue +++ b/src/views/experiment/project/components/selectDanger.vue @@ -2,9 +2,9 @@ <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 required">废弃物分类</td> + <td class="w-20 m-color required">存储方式</td> + <td class="w-20 m-color required">预估处理量</td> <td class="w-20 m-color">操作</td> </tr> <tr v-for="(item,index) in selectDangerState.wasteList" :key="index"> @@ -128,6 +128,14 @@ border-right: none; } + &.required { + &::before { + content: "*"; + display: inline-block; + color: red; + } + } + &.w-14 { width: calc((100/7)/100 * 100%); } diff --git a/src/views/experiment/project/components/selectEquipment.vue b/src/views/experiment/project/components/selectEquipment.vue index c86e11f..33b2527 100644 --- a/src/views/experiment/project/components/selectEquipment.vue +++ b/src/views/experiment/project/components/selectEquipment.vue @@ -1,16 +1,16 @@ <template> <tr class="m-color b-font" style="text-align: center">实验所用的仪器/设备</tr> <tr> - <td class="w-16 m-color">设备名称</td> + <td class="w-16 m-color required">设备名称</td> <td class="w-16 m-color">编号</td> <td class="w-16 m-color">设备功率</td> <td class="w-16 m-color">是否特种</td> - <td class="w-16 m-color">设备数量</td> + <td class="w-16 m-color required">设备数量</td> <td class="w-16 m-color">操作</td> </tr> <tr v-for="(item,index) in selectEquipmentState.equipmentList" :key="index"> <td class="w-16"> - <el-select :disabled="selectEquipmentState.disabled" filterable v-model="item.deviceId" @change="giveOtherEquipmentValue($event, index)"> + <el-select :disabled="selectEquipmentState.disabled" filterable v-model="item.deviceId" @change="giveOtherEquipmentValue($event, index)" @focus="checkAllEquipment($event, index)"> <el-option v-for="item in selectEquipmentState.allEquipmentList" :key="item.id" @@ -21,19 +21,20 @@ </el-select> </td> <td class="w-16"> - <el-input :disabled="selectEquipmentState.disabled" v-model="item.deviceCode" placeholder="请输入数量" /> + <el-input disabled v-model="item.deviceCode"/> </td> <td class="w-16"> - <el-input :disabled="selectEquipmentState.disabled" v-model="item.devicePower" /> + <el-input disabled v-model="item.devicePower" /> </td> <td class="w-16"> - <el-radio-group :disabled="selectEquipmentState.disabled" v-model="item.specialDevice"> - <el-radio :label="1">是</el-radio> - <el-radio :label="2">否</el-radio> - </el-radio-group> +<!-- <el-radio-group disabled v-model="item.specialDevice">--> +<!-- <el-radio :label="1">是</el-radio>--> +<!-- <el-radio :label="2">否</el-radio>--> +<!-- </el-radio-group>--> + <div>{{item.specialDevice == 1 ? '是' : item.specialDevice == 2 ? '否' : ''}}</div> </td> <td class="w-16"> - <el-input type="number" v-model="item.deviceUseCount" /> + <el-input :disabled="selectEquipmentState.disabled" type="number" v-model="item.deviceUseCount" /> </td> <td class="w-16"> <el-button :disabled="selectEquipmentState.disabled" type="danger" @click="deleteEquipmentItem(index)">删除</el-button> @@ -41,13 +42,17 @@ </tr> <tr style="text-align: center"> <el-button :disabled="selectEquipmentState.disabled" type="primary" shape="round" @click="addEquipmentItem()"> - 选择实验仪器 + 添加现有实验仪器/设备 + </el-button> + <el-button :disabled="selectEquipmentState.disabled" shape="round" @click="addNewEquipment('新增', {})"> + 新增实验仪器/设备配置 </el-button> </tr> + <equipment-dialog ref="equipmentDialogRef" :equipmentTypeList="selectEquipmentState.equipmentTypeList"></equipment-dialog> </template> <script setup lang="ts"> -import {onMounted, reactive, watchEffect} from "vue"; +import {defineAsyncComponent, onMounted, reactive, ref, watchEffect} from "vue"; import {ElMessage} from "element-plus"; import { equipmentApi } from "/@/api/basic/equipement"; @@ -55,11 +60,16 @@ disabled: Boolean, data: Array<AllEquipmentListType> }); - +const equipmentDialog = defineAsyncComponent(() => import('/@/views/basic/equipment/components/equipmentDialog.vue')); const selectEquipmentState = reactive<SelectEquipmentType>({ disabled: false, equipmentList: [], allEquipmentList: [], + equipmentTypeList: [], + specialDeviceList: [ + {id: 1, name: '是'}, + {id:2, name: '否'} + ] }); watchEffect(() => { @@ -67,9 +77,26 @@ selectEquipmentState.disabled = props.disabled }); +const equipmentDialogRef = ref(); + +const getAllType = async ()=>{ + const res = await equipmentApi().getAllType(); + if(res.data.code === 100){ + selectEquipmentState.equipmentTypeList = res.data.data + } +} + +const checkAllEquipment = () => { + getAllEquipmentList() +} + const addEquipmentItem = () => { - selectEquipmentState.equipmentList.push({deviceId: null, deviceUseCount: null, deviceCode: '', deviceName: '', devicePower: '', specialDevice: '',}); + selectEquipmentState.equipmentList.push({deviceId: null, deviceUseCount: null, deviceCode: '', deviceName: '', devicePower: '', specialDevice: '',deviceUnit: null, safeProtect: null}); }; + +const addNewEquipment = (title: string, value: EquipmentType) => { + equipmentDialogRef.value.showEquipmentDialog(title, value, selectEquipmentState.specialDeviceList); +} const deleteEquipmentItem = (index: number) => { selectEquipmentState.equipmentList.splice(index,1); @@ -95,7 +122,9 @@ deviceCode: data.deviceCode, deviceName: data.deviceName, devicePower: data.devicePower, - specialDevice: data.specialDevice + specialDevice: data.specialDevice, + deviceUnit: data.deviceUnit, + safeProtect: data.safeProtect, } }; @@ -109,6 +138,7 @@ }); onMounted(() => { + getAllType(); getAllEquipmentList(); }); </script> @@ -148,8 +178,20 @@ text-align: center; line-height: 42px; + :deep(.el-input__wrapper ){ + box-shadow: none; + } + &:last-of-type { border-right: none; + } + + &.required { + &::before { + content: "*"; + display: inline-block; + color: red; + } } &.w-14 { @@ -201,8 +243,5 @@ .m-color { color: #0c4995; -} -:deep(.el-input__wrapper ){ - box-shadow: none; } </style> diff --git a/src/views/experiment/project/components/selectMaterial.vue b/src/views/experiment/project/components/selectMaterial.vue index bb29d5f..6834a01 100644 --- a/src/views/experiment/project/components/selectMaterial.vue +++ b/src/views/experiment/project/components/selectMaterial.vue @@ -1,17 +1,17 @@ <template> <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 required">实验材料</td> <td class="w-14 m-color">耗材ID</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 required">使用数量</td> <td class="w-14 m-color">操作</td> </tr> <tr v-for="(item,index) in selectMaterialState.materialList" :key="index"> <td class="w-14"> - <el-select :disabled="selectMaterialState.disabled" filterable v-model="item.stuffId" @change="giveOtherMaterialValue($event, index)"> + <el-select :disabled="selectMaterialState.disabled" filterable v-model="item.stuffId" @change="giveOtherMaterialValue($event, index)" @focus="checkAllMaterial($event, index)"> <el-option v-for="item in selectMaterialState.allMaterialList" :key="item.id" @@ -22,19 +22,22 @@ </el-select> </td> <td class="w-14"> - <el-input :disabled="selectMaterialState.disabled" v-model="item.stuffCode" /> + <el-input disabled v-model="item.stuffCode" /> </td> <td class="w-14"> - <el-input :disabled="selectMaterialState.disabled" v-model="item.stuffType" /> +<!-- <el-input :disabled="selectMaterialState.disabled" v-model="item.stuffType" />--> + <div>{{selectMaterialState.stuffTypeList.find(i=>i.id == item.stuffType)?.name}}</div> </td> <td class="w-14"> - <el-input :disabled="selectMaterialState.disabled" v-model="item.stuffStorage" /> +<!-- <el-input :disabled="selectMaterialState.disabled" v-model="item.stuffStorage" />--> + <div>{{selectMaterialState.stuffStorageList.find(i=>i.id == item.stuffStorage)?.name}}</div> </td> <td class="w-14"> - <el-input :disabled="selectMaterialState.disabled" v-model="item.stuffUnit" /> +<!-- <el-input :disabled="selectMaterialState.disabled" v-model="item.stuffUnit" />--> + <div>{{selectMaterialState.stuffUnitList.find(i=>i.id == item.stuffUnit)?.name}}</div> </td> <td class="w-14"> - <el-input type="number" v-model="item.stuffUseCount" /> + <el-input type="number" :disabled="selectMaterialState.disabled" v-model="item.stuffUseCount" /> </td> <td class="w-14"> <el-button type="danger" :disabled="selectMaterialState.disabled" @click="deleteMaterialItem(index)">删除</el-button> @@ -42,31 +45,51 @@ </tr> <tr style="text-align: center"> <el-button :disabled="selectMaterialState.disabled" type="primary" shape="round" @click="addMaterialItem()"> - 选择实验材料 + 添加现有实验材料 + </el-button> + <el-button :disabled="selectMaterialState.disabled" shape="round" @click="addNewMaterial('新增', {})"> + 新增实验材料配置 </el-button> </tr> + <material-dialog ref="materialDialogRef"></material-dialog> </template> <script setup lang="ts"> -import {onMounted, reactive, watchEffect} from "vue"; +import {defineAsyncComponent, onMounted, reactive, ref, watchEffect} from "vue"; import { materialApi } from "/@/api/basic/material"; import {ElMessage} from "element-plus"; let props = defineProps({ disabled: Boolean, data: Array<AllMaterialListType> }); - +const MaterialDialog = defineAsyncComponent(() => import('/@/views/basic/material/components/materialDialog.vue')); const selectMaterialState = reactive<SelectMaterialType>({ disabled: false, materialList: [], allMaterialList: [], + stuffTypeList: [ + {id: 1, name: '化学试剂'}, + {id:2, name: '基础材料'} + ], + stuffStorageList: [ + {id:1, name: '智能试剂柜'}, + {id:2, name: '普通储存柜'}, + ], + stuffUnitList: [ + {id:1, name: 'g'}, + {id:2, name: 'kg'}, + {id:3, name: 'ml'}, + {id:4, name: 'l'}, + ] }) +const materialDialogRef = ref(); const addMaterialItem = () => { selectMaterialState.materialList.push({stuffId: null, stuffUseCount: null, stuffName: '',stuffCode:'',stuffType: '', stuffStorage: '', stuffUnit: ''}); }; watchEffect(() => { + console.log(selectMaterialState.materialList,'selectMaterialState.materialList') selectMaterialState.materialList = props.data as Array<AllMaterialListType> selectMaterialState.disabled = props.disabled }); @@ -75,7 +98,15 @@ selectMaterialState.materialList.splice(index,1); }; -const getAllPersonList = async () => { +const addNewMaterial = (title: string, value: MaterialType) => { + materialDialogRef.value.showMaterialDialog(title, value); +} + +const checkAllMaterial = () => { + getAllMaterial() +} + +const getAllMaterial = async () => { let res = await materialApi().getAllMaterial(); if(res.data.code === 100){ selectMaterialState.allMaterialList = JSON.parse(JSON.stringify(res.data.data)); @@ -111,7 +142,7 @@ onMounted(() => { - getAllPersonList(); + getAllMaterial(); }); </script> @@ -154,6 +185,14 @@ border-right: none; } + &.required { + &::before { + content: "*"; + display: inline-block; + color: red; + } + } + &.w-14 { width: calc((100/7)/100 * 100%); } @@ -192,6 +231,9 @@ width: 100%; height: 100%; } + :deep(.el-input__wrapper ){ + box-shadow: none; + } } } @@ -203,8 +245,5 @@ .m-color { color: #0c4995; -} -:deep(.el-input__wrapper ){ - box-shadow: none; } </style> diff --git a/src/views/experiment/project/components/selectPerson.vue b/src/views/experiment/project/components/selectPerson.vue index e0359b8..6677595 100644 --- a/src/views/experiment/project/components/selectPerson.vue +++ b/src/views/experiment/project/components/selectPerson.vue @@ -1,7 +1,7 @@ <template> <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 required">姓名</td> <td class="w-14 m-color">年龄</td> <td class="w-14 m-color">性别</td> <td class="w-14 m-color">专业</td> @@ -11,7 +11,7 @@ </tr> <tr v-for="(item,index) in selectPersonState.personList" :key="index"> <td class="w-14"> - <el-select filterable :disabled="selectPersonState.disabled" v-model="item.personId" @change="giveOtherPersonValue($event, index)"> + <el-select filterable :disabled="selectPersonState.disabled" v-model="item.personId" @change="giveOtherPersonValue($event, index)" @focus="checkAllPerson($event, index)"> <el-option v-for="item in selectPersonState.allPersonList" :key="item.id" @@ -22,19 +22,20 @@ </el-select> </td> <td class="w-14"> - <el-input :disabled="selectPersonState.disabled" v-model="item.personAge" /> + <el-input disabled v-model="item.personAge" /> </td> <td class="w-14"> - <el-input :disabled="selectPersonState.disabled" v-model="item.personGender" /> +<!-- <el-input disabled v-model="item.personGender" />--> + <div>{{item.personGender == 1 ? '男' : item.personGender == 2 ? '女' : ''}}</div> </td> <td class="w-14"> - <el-input :disabled="selectPersonState.disabled" v-model="item.personMajor" /> + <el-input disabled v-model="item.personMajor" /> </td> <td class="w-14"> - <el-input :disabled="selectPersonState.disabled" v-model="item.depName" /> + <el-input disabled v-model="item.depName" /> </td> <td class="w-14"> - <el-input :disabled="selectPersonState.disabled" v-model="item.aptitude" /> + <el-input disabled v-model="item.aptitude" /> </td> <td class="w-14"> <el-button type="danger" :disabled="selectPersonState.disabled" @click="deletePersonItem(index)">删除</el-button> @@ -42,13 +43,17 @@ </tr> <tr style="text-align: center"> <el-button :disabled="selectPersonState.disabled" type="primary" shape="round" @click="addPersonItem()"> - 选择实验人员 + 添加现有实验人员 + </el-button> + <el-button :disabled="selectPersonState.disabled" shape="round" @click="addNewPerson('新增', {})"> + 新增实验人员配置 </el-button> </tr> + <person-dialog ref="personDialogRef"></person-dialog> </template> <script setup lang="ts"> -import {nextTick, onMounted, reactive, watchEffect} from "vue"; +import {defineAsyncComponent, nextTick, onMounted, reactive, ref, watchEffect} from "vue"; import { personApi } from "/@/api/basic/person"; import {ElMessage} from "element-plus"; @@ -58,12 +63,16 @@ }); +const personDialog = defineAsyncComponent(() => import('/@/views/basic/person/components/personDialog.vue')); + const selectPersonState = reactive<SelectPersonType>({ disabled: false, personList: [], allPersonList: [ ], }); + +const personDialogRef = ref(); watchEffect(() => { selectPersonState.personList = props.data as Array<AllPersonListType> @@ -73,6 +82,14 @@ const addPersonItem = () => { selectPersonState.personList.push({personId: null, personName: null, personAge: null, personGender:'',personMajor:'',depName:'',phone:'',aptitude:'',training:''}); }; + +const addNewPerson = (title: string, value: PersonType) => { + personDialogRef.value.showPersonDialog(title, value); +} + +const checkAllPerson = () => { + getAllPersonList() +} const deletePersonItem = (index: number) => { selectPersonState.personList.splice(index,1); @@ -162,6 +179,18 @@ border-right: none; } + &.required { + &::before { + content: "*"; + display: inline-block; + color: red; + } + } + + :deep(.el-input__wrapper ){ + box-shadow: none; + } + &.w-14 { width: calc((100/7)/100 * 100%); } @@ -211,8 +240,5 @@ .m-color { color: #0c4995; -} -:deep(.el-input__wrapper ){ - box-shadow: none; } </style> diff --git a/src/views/experiment/project/components/selectRoom.vue b/src/views/experiment/project/components/selectRoom.vue new file mode 100644 index 0000000..918828e --- /dev/null +++ b/src/views/experiment/project/components/selectRoom.vue @@ -0,0 +1,268 @@ +<template> + <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 selectRoomState.roomList" :key="index"> + <td class="w-14"> + <el-select :disabled="selectRoomState.disabled" filterable v-model="item.siteId" @change="giveOtherMaterialValue($event, index)" @focus="checkAllRoom($event, index)"> + <el-option + v-for="item in selectRoomState.allRoomList" + :key="item.id" + :value="item.id" + :label="item.siteName" + > + </el-option> + </el-select> + </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"> +<!-- <el-input :disabled="selectRoomState.disabled" v-model="item.stuffStorage" />--> + <div>{{item.fireFacilities== 1 ? '有' : item.fireFacilities== 2 ? '无' : ''}}</div> + </td> + <td class="w-14"> +<!-- <el-input :disabled="selectRoomState.disabled" v-model="item.stuffUnit" />--> + <div>{{item.partitionStatus == 1 ? '有' : item.partitionStatus == 2 ? '无' : ''}}</div> + </td> + <td class="w-14"> +<!-- <el-input type="number" :disabled="selectRoomState.disabled" v-model="item.stuffUseCount" />--> + <div>{{item.siteType}}</div> + </td> + <td class="w-14"> + <el-button type="danger" :disabled="selectRoomState.disabled" @click="deleteRoomItem(index)">删除</el-button> + </td> + </tr> + <tr style="text-align: center"> + <el-button :disabled="selectRoomState.disabled" type="primary" shape="round" @click="addMaterialItem()"> + 添加现有实验场所 + </el-button> + <el-button :disabled="selectRoomState.disabled" shape="round" @click="addNewRoom('新增', {})"> + 新增实验场所配置 + </el-button> + </tr> + <room-dialog ref="roomDialogRef" :memberList="selectRoomState.memberList" :typeList="selectRoomState.typeList"></room-dialog> +</template> + +<script setup lang="ts"> +import {defineAsyncComponent, onMounted, reactive, ref, watchEffect} from "vue"; +import { materialApi } from "/@/api/basic/material"; +import {ElMessage} from "element-plus"; +import {roomApi} from "/@/api/basic/room"; +import {personApi} from "/@/api/basic/person"; +let props = defineProps({ + disabled: Boolean, + data: Array<roomListType> +}); +const roomDialog = defineAsyncComponent(() => import('/@/views/basic/room/components/roomDialog.vue')); +const selectRoomState = reactive<SelectRoomType>({ + disabled: false, + roomList: [], + allRoomList: [], + memberList: [], + typeList: [], + specialDeviceList: [ + {id: 1, name: '是'}, + {id:2, name: '否'} + ], + stuffStorageList: [ + {id:1, name: '智能试剂柜'}, + {id:2, name: '普通储存柜'}, + ], + stuffUnitList: [ + {id:1, name: 'g'}, + {id:2, name: 'kg'}, + {id:3, name: 'ml'}, + {id:4, name: 'l'}, + ] +}) +const roomDialogRef = ref(); + +const getAllMember = async ()=>{ + const res = await personApi().getAllPerson(); + if(res.data.code === 100){ + selectRoomState.memberList = res.data.data + } +} + +const getAllType = async ()=>{ + const res = await roomApi().getAllType(); + if(res.data.code === 100){ + selectRoomState.typeList = res.data.data + } +} + +const addMaterialItem = () => { + selectRoomState.roomList.push({siteId: null, siteName: '', floor: '',room:'',fireFacilities: null, partitionStatus: null, siteType: ''}); +}; + +watchEffect(() => { + selectRoomState.roomList = props.data as Array<roomListType> + selectRoomState.disabled = props.disabled +}); + +const deleteRoomItem = (index: number) => { + selectRoomState.roomList.splice(index,1); +}; + +const addNewRoom = (title: string, value: RoomType) => { + roomDialogRef.value.showroomDialog(title, value, selectRoomState.specialDeviceList); +} + +const checkAllRoom = () => { + getAllRoom() +} + +const getAllRoom = async () => { + let res = await roomApi().getAllRoom(); + if(res.data.code === 100){ + selectRoomState.allRoomList = JSON.parse(JSON.stringify(res.data.data)); + }else{ + ElMessage({ + type: 'warning', + message: res.data.msg + }) + } +}; + +const giveOtherMaterialValue = (value: number, index:number) => { + const data = selectRoomState.allRoomList.find(item => item.id === value) as roomListType + selectRoomState.roomList[index] = { + siteId: data.id, + siteName: data.siteName, + floor: data.floor, + room: data.room, + fireFacilities: data.fireFacilities, + partitionStatus: data.partitionStatus, + siteType: data.siteType + }; +}; + +const formatList = (formatList: Array<roomListType>) => { + selectRoomState.roomList = formatList +}; + +defineExpose({ + dataList: selectRoomState.roomList, + formatList +}); + + +onMounted(() => { + getAllMember() + getAllType() + getAllRoom() +}); +</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%; + } + :deep(.el-input__wrapper ){ + box-shadow: none; + } + } + } + + .b-font { + font-size: 16px; + font-weight: bolder; + } +} + +.m-color { + color: #0c4995; +} +</style> diff --git a/src/views/experiment/project/index.ts b/src/views/experiment/project/index.ts index 6ec1f48..188cb14 100644 --- a/src/views/experiment/project/index.ts +++ b/src/views/experiment/project/index.ts @@ -1,5 +1,6 @@ declare interface ProjectStateType { - projectData: Array<ProjectType> + projectData?: Array<ProjectType> + developData?: Array<ProjectType> searchQuery: { pageIndex: number, pageSize: number, @@ -15,6 +16,7 @@ declare interface ProjectType { id?: number | null, + liabilityUserId?: number | null, experimentCode: string, experimentName: string, } @@ -34,13 +36,17 @@ experimentName: string, experimentType: null | number, liabilityUserId: null | number, - safeLiabilityUserId: null | number, + safeLiabilityUser: string + liabilityUserPhone: string, + safeLiabilityUserPhone: string, + sisStatus?: null | number, + safeInformationSystem?: string, dep: string, - siteId: null | number, experimentStep: string, experimentMethod: string, process: string, keyProcess: string, + measure: string, timeout: null | number, timeoutManager: string, closed: null | number, @@ -56,8 +62,10 @@ emergencyDrillStatus: string, partitionCondition: string, note: string, - expectStartTime: null | number, + startTime?: string, + createExperimentTime: string persons: SelectPersonType [], + siteList: SelectRoomType [], deviceList: SelectEquipmentType [], stuffList: SelectMaterialType [], hazardousWasteList: SelectDangerType [] @@ -66,7 +74,7 @@ }, allPersonList: Array<AllPersonListType> - systemPersonList: Array<SystemPersonType> + systemPersonList: Array<AllPersonListType> allRoomList: Array<RoomType> } @@ -91,7 +99,7 @@ } declare interface AllPersonListType { - id: null | number, + id?: null | number, personId?: null | number, personName: null, personAge: null, @@ -103,10 +111,23 @@ training:'' } +declare interface NewPersonListType { + depId: number | null + depName: string + id: number + idSerial: string + idType: number | null + name: string + phone: string + realName: string +} + declare interface SelectEquipmentType { disabled: boolean equipmentList: Array<AllEquipmentListType>, allEquipmentList: Array<AllEquipmentListType>, + equipmentTypeList: Array<any>, + specialDeviceList: Array<Type> } declare interface AllEquipmentListType { @@ -117,6 +138,8 @@ deviceName: string, devicePower: string, specialDevice: string, + deviceUnit?: null | number, + safeProtect?: null | number } @@ -124,6 +147,35 @@ disabled: boolean materialList: Array<AllMaterialListType>, allMaterialList: Array<AllMaterialListType>, + stuffTypeList: Array<stuffType> + stuffStorageList: Array<stuffType> + stuffUnitList: Array<stuffType> +} + +declare interface SelectRoomType { + disabled: boolean + roomList: Array<roomListType>, + allRoomList: Array<roomListType>, + specialDeviceList: Array<stuffType> + memberList: Array<any> + typeList: Array<any> + stuffStorageList: Array<stuffType> + stuffUnitList: Array<stuffType> +} + +declare interface roomListType { + siteId?: null | number, + siteName?: string, + floor?: string, + room?: string, + fireFacilities?: null | number, + partitionStatus?: null | number, + siteType?: string, +} + +declare interface stuffType { + id: null | number, + name: string } declare interface AllMaterialListType { diff --git a/src/views/experiment/project/index.vue b/src/views/experiment/project/index.vue index 041467f..74c5922 100644 --- a/src/views/experiment/project/index.vue +++ b/src/views/experiment/project/index.vue @@ -22,7 +22,7 @@ <div class="main-card"> <el-row class="cardTop"> <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="openProjectDialog('新增', {})">新增</el-button> + <el-button type="primary" :icon="Plus" size="default" @click="openProjectDialog('新增', {})">录入实验信息</el-button> <!-- <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button>--> </el-col> <!-- <el-button type="primary" :icon="Refresh" size="default" />--> @@ -30,16 +30,60 @@ <el-table ref="multipleTableRef" :data="projectState.projectData" 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="expectStartTime" label="立项时间" /> + <el-table-column prop="createExperimentTime" label="立项时间" show-overflow-tooltip> + <template #default="scope"> + <span>{{scope.row.createExperimentTime?scope.row.createExperimentTime.substring(0,16):'--'}}</span> + </template> + </el-table-column> +<!-- <el-table-column prop="startTime" label="开展时间" show-overflow-tooltip>--> +<!-- <template #default="scope">--> +<!-- <span>{{scope.row.startTime?scope.row.startTime.substring(0,16):'--'}}</span>--> +<!-- </template>--> +<!-- </el-table-column>--> <el-table-column prop="liabilityUser" label="负责人"/> - <el-table-column prop="createTime" label="创建时间" show-overflow-tooltip></el-table-column> - <el-table-column prop="createByUserName" label="创建人" show-overflow-tooltip></el-table-column> - <el-table-column prop="updateTime" label="最后修改时间" show-overflow-tooltip></el-table-column> - <el-table-column prop="updateByUserName" label="最后修改人" show-overflow-tooltip></el-table-column> - <el-table-column label="操作" width="250"> + <el-table-column prop="siteList" label="实验场所" show-overflow-tooltip> + <template #default="scope"> + <span>{{scope.row.siteList.map(i=>i.siteName).join(',')}}</span> + </template> + </el-table-column> + <el-table-column prop="experimentType" label="实验类别"> + <template #default="scope"> + <span>{{projectState.experimentTypeList.find(i=>i.id == scope.row.experimentType)?.name}}</span> + </template> + </el-table-column> + <el-table-column prop="status" label="评估申请"> + <template #default="scope"> + <span>{{scope.row.status == 1?'未申请':scope.row.status == 2?'已申请':'--'}}</span> + </template> + </el-table-column> + <el-table-column prop="status" label="评估申请时间" show-overflow-tooltip> + <template #default="scope"> + <span>{{scope.row.assessApplyTime?scope.row.assessApplyTime.substring(0,16):'--'}}</span> + </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?'生成报告':'--'}} + </el-tag> + </template> + </el-table-column> + <el-table-column prop="assessLevel" label="风险等级"> + <template #default="scope"> + <el-tag :type="scope.row.assessLevel == 4?'danger':scope.row.assessLevel == 3 || scope.row.assessLevel == 2?'warning':''"> + {{scope.row.assessLevel == 1?'低风险':scope.row.assessLevel == 2?'一般风险':scope.row.assessLevel == 3?'较大风险':scope.row.assessLevel == 4?'重大风险':'--'}} + </el-tag> + </template> + </el-table-column> +<!-- <el-table-column prop="createTime" label="创建时间" show-overflow-tooltip></el-table-column>--> +<!-- <el-table-column prop="createByUserName" label="创建人" show-overflow-tooltip></el-table-column>--> +<!-- <el-table-column prop="updateTime" label="最后修改时间" show-overflow-tooltip></el-table-column>--> +<!-- <el-table-column prop="updateByUserName" label="最后修改人" show-overflow-tooltip></el-table-column>--> + <el-table-column label="操作" width="250" fixed="right"> <template #default="scope"> <el-button size="small" text type="primary" :icon="View" @click="openProjectDialog('查看', scope.row)">查看</el-button> <el-button size="small" text type="primary" :icon="Edit" @click="applyStart('申请开展', scope.row)">申请开展</el-button> + <el-button size="small" type="warning" v-if="scope.row.rectifyStatus == 1" text :icon="Edit" @click="openProjectDialog('整改', scope.row)">整改</el-button> <el-button size="small" text type="danger" :icon="Delete" @click="onDelProject(scope.row)">删除</el-button> </template> </el-table-column> @@ -113,7 +157,7 @@ }; const onDelProject = (val: ProjectType) => { - ElMessageBox.confirm(`此操作将永久删除该实验:“${val.experimentCode}”,是否继续?`, '提示', { + ElMessageBox.confirm(`此操作将永久删除该实验:“${val.experimentName}”,是否继续?`, '提示', { confirmButtonText: '确认', cancelButtonText: '取消', type: 'warning' diff --git a/src/views/loginPage/component/accountLogin.vue b/src/views/loginPage/component/accountLogin.vue index c8f421b..e0c49dd 100644 --- a/src/views/loginPage/component/accountLogin.vue +++ b/src/views/loginPage/component/accountLogin.vue @@ -233,7 +233,7 @@ // 登录成功,跳到转首页 // 如果是复制粘贴的路径,非首页/登录页,那么登录成功后重定向到对应的路径中 // if (route.json.query?.redirect) { - router.push('/home'); + router.push('/project'); // router.push({ // path: <string>route.json.query?.redirect, // query: Object.keys(<string>route.json.query?.params).length > 0 ? JSON.parse(<string>route.json.query?.params) : '', -- Gitblit v1.9.2