From 8d14fec97344df49d58db115852c03b466482bc6 Mon Sep 17 00:00:00 2001
From: 马宇豪 <978517621@qq.com>
Date: Wed, 12 Apr 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