From 36e71978a92ee64375b2c339e5e05d47b6b23fba Mon Sep 17 00:00:00 2001
From: 马宇豪 <978517621@qq.com>
Date: 星期五, 14 四月 2023 15:18:58 +0800
Subject: [PATCH] 修改接口和页面
---
src/api/analyse/assessApply/index.ts | 40 +
src/views/analyse/applyReview/components/reportDialog.vue | 583 ++++++++++++++
src/views/analyse/assessApply/index.vue | 35
src/views/analyse/evaluate/components/evaluateDialog.vue | 75 +
src/views/experiment/developing/index.vue | 2
src/views/analyse/applyReview/index.ts | 22
src/api/analyse/plan/index.ts | 8
src/views/analyse/plan/components/planDialog.vue | 13
src/stores/userInfo.ts | 2
src/views/analyse/plan/index.vue | 214 ++++-
src/views/analyse/plan/index.ts | 12
src/views/loginPage/component/accountLogin.vue | 1
src/views/experiment/project/index.vue | 2
src/layout/navMenu/vertical.vue | 4
src/theme/element.scss | 8
src/views/analyse/identify/index.vue | 2
src/views/analyse/assessApply/index.ts | 26
src/views/analyse/applyReview/index.vue | 375 +++++++++
src/views/analyse/evaluate/index.vue | 11
src/theme/app.scss | 5
src/views/analyse/assessApply/components/reportDialog.vue | 329 +++++---
src/views/analyse/applyReview/components/selectDanger.vue | 191 ++++
src/views/analyse/assessApply/components/riskDialog.vue | 6
src/views/analyse/assessApply/components/riskUnitDialog.vue | 318 ++++----
src/views/analyse/assessApply/components/selectDanger.vue | 51
25 files changed, 1,913 insertions(+), 422 deletions(-)
diff --git a/src/api/analyse/assessApply/index.ts b/src/api/analyse/assessApply/index.ts
index 5da7169..ef094b5 100644
--- a/src/api/analyse/assessApply/index.ts
+++ b/src/api/analyse/assessApply/index.ts
@@ -9,5 +9,45 @@
data: params
});
},
+
+ getRiskReportPage: (params: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + '/report/select/selectRiskReportPage',
+ method: 'post',
+ data: params
+ });
+ },
+
+ toRiskReport: (params: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + '/report/insert/insertRiskReport',
+ method: 'post',
+ data: params
+ });
+ },
+
+ updateRiskReport: (params: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + '/report/update/updateRiskReport',
+ method: 'post',
+ data: params
+ });
+ },
+
+ updateRiskReportInfo: (params: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + '/report/update/updateRiskReportInfo',
+ method: 'post',
+ data: params
+ });
+ },
+
+ uploadReport: (params: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + '/report/update/report',
+ method: 'post',
+ data: params
+ });
+ },
};
}
diff --git a/src/api/analyse/plan/index.ts b/src/api/analyse/plan/index.ts
index 2e01c70..ebfbbc2 100644
--- a/src/api/analyse/plan/index.ts
+++ b/src/api/analyse/plan/index.ts
@@ -72,6 +72,14 @@
method: 'post',
data: params
});
+ },
+
+ reSendJob: (params: object)=>{
+ return request({
+ url: import.meta.env.VITE_API_URL + '/risk/update/appoint',
+ method: 'post',
+ data: params
+ });
}
};
}
diff --git a/src/layout/navMenu/vertical.vue b/src/layout/navMenu/vertical.vue
index bfd7d2d..df202f8 100644
--- a/src/layout/navMenu/vertical.vue
+++ b/src/layout/navMenu/vertical.vue
@@ -2,10 +2,12 @@
<el-menu
router
:default-active="defaultActive"
- background-color="transparent"
:collapse="isCollapse"
:unique-opened="true"
:collapse-transition="false"
+ active-text-color="#6ff8ff"
+ background-color="transparent"
+ text-color="#fff"
>
<template v-for="val in menuLists">
<el-sub-menu :index="val.path" v-if="val.children && val.children.length > 0" :key="val.path">
diff --git a/src/stores/userInfo.ts b/src/stores/userInfo.ts
index edbe1ed..b91560b 100644
--- a/src/stores/userInfo.ts
+++ b/src/stores/userInfo.ts
@@ -25,7 +25,7 @@
async setUserInfos(value: any) {
this.userInfos.userName = value.realName;
this.userInfos.uid = value.uid;
- this.userInfos.roles = value.role;
+ this.userInfos.roles = value.roles;
this.userInfos.depId = value.depId
// const userName = Cookies.get('userName');
// // 模拟数据
diff --git a/src/theme/app.scss b/src/theme/app.scss
index 4c75296..431c504 100644
--- a/src/theme/app.scss
+++ b/src/theme/app.scss
@@ -47,7 +47,8 @@
width: 100%;
height: 100%;
.layout-aside {
- background: var(--next-bg-menuBar);
+ //background: var(--next-bg-menuBar);
+ background: #384358;
box-shadow: 2px 0 6px rgb(0 21 41 / 1%);
height: inherit;
position: relative;
@@ -86,6 +87,8 @@
.layout-aside-pc-220 {
width: 220px !important;
transition: width 0.3s ease;
+ border-radius: 0 8px 8px 0;
+ box-shadow: 5px 0 10px rgba(0,0,0,.15);
}
.layout-aside-pc-64 {
width: 64px !important;
diff --git a/src/theme/element.scss b/src/theme/element.scss
index 6e71c98..979f6a8 100644
--- a/src/theme/element.scss
+++ b/src/theme/element.scss
@@ -62,10 +62,12 @@
.el-menu {
border-right: none !important;
width: 220px;
+ padding: 0 5px 0 0;
}
.el-menu-item {
height: 56px !important;
line-height: 56px !important;
+ border-radius: 8px !important;;
}
.el-menu-item,
.el-sub-menu__title {
@@ -91,6 +93,12 @@
@include generalIcon;
}
// 水平菜单、横向菜单高亮 背景色,鼠标 hover 时,有子级菜单的背景色
+.el-menu-item.is-active{
+ padding: 0 10px;
+ box-sizing: border-box;
+ border-radius: 8px;
+ border: 1px solid rgba(111,248,255,.2);
+}
.el-menu-item.is-active,
.el-sub-menu.is-active .el-sub-menu__title,
.el-sub-menu:not(.is-opened):hover .el-sub-menu__title {
diff --git a/src/views/analyse/applyReview/components/reportDialog.vue b/src/views/analyse/applyReview/components/reportDialog.vue
new file mode 100644
index 0000000..5724dfa
--- /dev/null
+++ b/src/views/analyse/applyReview/components/reportDialog.vue
@@ -0,0 +1,583 @@
+<template>
+ <div class="system-menu-dialog-container">
+ <el-dialog :title="reportDialogState.title" v-model="reportDialogState.reportDialogVisible" width="80%">
+ <div style="text-align: center;font-size: 20px;font-weight: bolder;color: #0c4995">{{reportDialogState.reportForm.experimentName}}实验安全风险评估报告表(带<span style="color: red">*</span>为填写内容)</div>
+ <el-form ref="reportFormRef" :rules="reportDialogState.reportFormRules" :model="reportDialogState.reportForm" size="default" label-width="0">
+ <table class="report-table">
+ <th class="m-color b-font" style="text-align: center">实验基本信息</th>
+ <tr>
+ <td class="w-25 m-color">实验名称</td>
+ <td class="w-75 m-color">
+ <el-form-item prop="experimentName">
+ <el-input readonly v-model="reportDialogState.reportForm.experimentName" placeholder="请输入实验名称" />
+ </el-form-item>
+ </td>
+ </tr>
+ <tr>
+ <td class="w-25 m-color">实验类型</td>
+ <td class="w-75" style="text-align: left;padding-left: 11px">
+<!-- <el-radio-group style="text-align: center" disabled v-model="reportDialogState.reportForm.experimentType">-->
+<!-- <el-radio :label="1">化学类</el-radio>-->
+<!-- <el-radio :label="2">生物类</el-radio>-->
+<!-- <el-radio :label="3">辐射类</el-radio>-->
+<!-- <el-radio :label="4">机电类</el-radio>-->
+<!-- <el-radio :label="5">特种设备类</el-radio>-->
+<!-- <el-radio :label="6">其他类</el-radio>-->
+<!-- </el-radio-group>-->
+ {{reportDialogState.experimentTypeList.find(i=>i.id === reportDialogState.reportForm.experimentType)?.name}}
+ </td>
+ </tr>
+ <tr>
+ <td class="w-25 m-color">负责人</td>
+ <td class="w-25 m-color">
+<!-- <el-select style="width: 100%" disabled v-model="reportDialogState.reportForm.liabilityUserId" clearable filterable @change="getLiabilityUserPhone($event)">-->
+<!-- <el-option-->
+<!-- v-for="item in reportDialogState.systemPersonList"-->
+<!-- :key="item.id"-->
+<!-- :value="item.id"-->
+<!-- :label="item.realName"-->
+<!-- ></el-option>-->
+<!-- </el-select>-->
+ <el-input readonly v-model="reportDialogState.reportForm.personUser" />
+ </td>
+ <td class="w-25 m-color">电话</td>
+ <td class="w-25 m-color">
+ <el-input disabled v-model="reportDialogState.reportForm.personUserPhone" />
+ </td>
+ </tr>
+ <tr>
+ <td class="w-25 m-color">安全负责人</td>
+ <td class="w-25 m-color">
+<!-- <el-select v-if="reportDialogState.reportForm.safeLiabilityUserId" style="width: 100%" disabled v-model="reportDialogState.reportForm.safeLiabilityUserId" @change="getSafeLiabilityUserPhone($event)" clearable filterable>-->
+<!-- <el-option-->
+<!-- v-for="item in reportDialogState.allPersonList"-->
+<!-- :key="item.id"-->
+<!-- :value="item.id"-->
+<!-- :label="item.personName"-->
+<!-- ></el-option>-->
+<!-- </el-select>-->
+ <el-input disabled v-model="reportDialogState.reportForm.safePersonUser" />
+ </td>
+ <td class="w-25 m-color">电话</td>
+ <td class="w-25 m-color">
+ <el-input readonly v-model="reportDialogState.reportForm.safePersonUserPhone" />
+ </td>
+ </tr>
+ <tr>
+ <td class="w-25 m-color">部门</td>
+ <td class="w-75 m-color">
+ <el-input readonly v-model="reportDialogState.reportForm.dep" />
+ </td>
+ </tr>
+ <tr class="m-color b-font" style="text-align: center">实验场所</tr>
+ <tr>
+ <td class="w-14 m-color">场所名称</td>
+ <td class="w-14 m-color">所在楼栋</td>
+ <td class="w-14 m-color">房间</td>
+ <td class="w-14 m-color">有无消防设施</td>
+ <td class="w-14 m-color">有无隔断</td>
+ <td class="w-14 m-color">场所性质</td>
+ </tr>
+ <tr v-for="(item,index) in reportDialogState.reportForm.experimentSite" :key="index">
+ <td class="w-14">
+<!-- <el-select disabled filterable v-model="item.siteId">-->
+<!-- <el-option-->
+<!-- v-for="item in reportDialogState.allRoomList"-->
+<!-- :key="item.id"-->
+<!-- :value="item.id"-->
+<!-- :label="item.siteName"-->
+<!-- >-->
+<!-- </el-option>-->
+<!-- </el-select>-->
+ <el-input disabled v-model="item.siteName" />
+ </td>
+ <td class="w-14">
+ <el-input disabled v-model="item.floor" />
+ </td>
+ <td class="w-14">
+ <el-input disabled v-model="item.room" />
+ </td>
+ <td class="w-14">
+ <div>{{item.fireFacilities== 1 ? '有' : item.fireFacilities== 2 ? '无' : ''}}</div>
+ </td>
+ <td class="w-14">
+ <div>{{item.partitionStatus == 1 ? '有' : item.partitionStatus == 2 ? '无' : ''}}</div>
+ </td>
+ <td class="w-14">
+ <div>{{item.siteType}}</div>
+ </td>
+ </tr>
+ <tr>
+ <td class="w-25 m-color required">评估人</td>
+ <td class="w-75 m-color">
+<!-- <el-select style="width: 100%" :disabled="reportDialogState.disabled" v-model="reportDialogState.reportForm.assessPerson" clearable filterable>-->
+<!-- <el-option-->
+<!-- v-for="item in reportDialogState.allPersonList"-->
+<!-- :key="item.id"-->
+<!-- :value="item.id"-->
+<!-- :label="item.personName"-->
+<!-- ></el-option>-->
+<!-- </el-select>-->
+ <el-input :disabled="reportDialogState.disabled" v-model="reportDialogState.reportForm.assessPerson" placeholder="评估人" />
+ </td>
+<!-- <td class="w-25 m-color required">评估时间</td>-->
+<!-- <td class="w-25 m-color">-->
+<!-- <el-date-picker :disabled="reportDialogState.disabled" type="datetime" format="YYYY/MM/DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" v-model="reportDialogState.reportForm.assessTime" />-->
+<!-- </td>-->
+ </tr>
+
+ <tr class="m-color b-font" style="text-align: center">实验概况</tr>
+ <tr>
+ <el-input type="textarea" :autosize="{ minRows: 3}" disabled v-model="reportDialogState.reportForm.experimentDesc" placeholder="(简要描述实验原理、实验步骤、所用试剂或材料设备等)" />
+ </tr>
+ <tr class="m-color b-font" style="text-align: center">实验涉及的危险源</tr>
+ <tr>
+ <td class="w-25 m-color">危险源种类</td>
+ <td class="w-75 m-color">
+<!-- <el-radio-group disabled v-model="reportDialogState.reportForm.dangerSource">-->
+<!-- <el-radio :label="1">化学安全</el-radio>-->
+<!-- <el-radio :label="2">辐射安全</el-radio>-->
+<!-- <el-radio :label="3">特种设备安全</el-radio>-->
+<!-- <el-radio :label="4">机电安全</el-radio>-->
+<!-- <el-radio :label="5">电气安全</el-radio>-->
+<!-- <el-radio :label="6">生物安全</el-radio>-->
+<!-- <el-radio :label="7">激光安全</el-radio>-->
+<!-- <el-radio :label="8">其他安全</el-radio>-->
+<!-- </el-radio-group>-->
+ <el-checkbox-group disabled>
+ <el-checkbox v-for="item in reportDialogState.reportForm.riskSourceType" :label="item.riskSourceType" :checked="item.status==1?true:false"/>
+ </el-checkbox-group>
+ </td>
+ </tr>
+ <select-danger ref="selectDangerRef" v-model:data="reportDialogState.reportForm.riskSource" v-model:disabled="reportDialogState.disabled"></select-danger>
+ <tr class="m-color b-font required" style="text-align: center">安全风险分析(总结)</tr>
+ <tr>
+ <el-input type="textarea" :autosize="{ minRows: 3}" :disabled="reportDialogState.disabled" v-model="reportDialogState.reportForm.safeRiskAnalysis" placeholder="1.实验过程中是否有爆炸、火灾、腐蚀、中毒风险、产生危险废弃物等(根据危险源清单,分析实验过程中可能对人身安全、人体健康、实验室环境和周边环境等带来的负面影响)" />
+ </tr>
+ <tr class="m-color b-font" style="text-align: center">拟采取的防护和应急措施</tr>
+ <tr>
+ <el-input type="textarea" :autosize="{ minRows: 3}" disabled v-model="reportDialogState.reportForm.emergencyMeasure" placeholder="" />
+ </tr>
+ <tr class="m-color b-font required" style="text-align: center">实验和实验项目综合风险等级评定</tr>
+ <tr>
+ <td class="m-color" style="width: 100%">
+ <el-radio-group :disabled="reportDialogState.disabled" v-model="reportDialogState.reportForm.assessLevel">
+ <el-radio :label="1">低风险(一级)</el-radio>
+ <el-radio :label="2">一般风险(二级)</el-radio>
+ <el-radio :label="3">较大风险(三级)</el-radio>
+ <el-radio :label="4">重大风险(四级)</el-radio>
+ </el-radio-group>
+ </td>
+ </tr>
+ <tr>
+ <el-input type="textarea" :autosize="{ minRows: 3}" :disabled="reportDialogState.disabled" v-model="reportDialogState.reportForm.description" placeholder="评定依据(必填)" />
+ </tr>
+ <tr v-if="reportDialogState.reportForm.person?.length>0" class="m-color b-font" style="text-align: center">审批内容</tr>
+ <template v-if="reportDialogState.reportForm.person?.length>0" v-for="item in reportDialogState.reportForm.person">
+ <tr>
+ <td class="w-25 m-color">{{item.approveStage}}</td>
+ <td class="w-25">{{item.approvePerson}}</td>
+ <td class="w-25 m-color">审批结果</td>
+ <td class="w-25">{{item.approveStatus==1?'未审批':item.approveStatus==2?'通过':'未通过'}}</td>
+ </tr>
+ <tr>
+ <td class="w-25 m-color autoheight">审批意见</td>
+ <td class="w-75 autoheight l-border">
+ {{ item.approveDesc }}
+ </td>
+ </tr>
+ </template>
+ </table>
+ </el-form>
+ <template #footer>
+ <span class="dialog-footer" style="padding-top:10px;text-align: center !important;">
+ <el-button @click="reportDialogState.reportDialogVisible = !reportDialogState.reportDialogVisible" size="default">取 消</el-button>
+ <el-button type="primary" v-if="!reportDialogState.disabled" @click="onSubmitProject()" size="default">提交审批</el-button>
+ </span>
+ </template>
+ </el-dialog>
+ </div>
+</template>
+
+<script setup lang="ts">
+import {defineAsyncComponent, nextTick, onMounted, reactive, ref} from "vue";
+import {ElMessage} from "element-plus";
+import {projectApi} from "/@/api/experiment/project";
+import {personApi} from "/@/api/basic/person";
+import {userApi} from "/@/api/systemManage/user";
+import {roomApi} from "/@/api/basic/room";
+import {assessApplyApi} from "/@/api/analyse/assessApply";
+
+const SelectDanger = defineAsyncComponent(() => import('./selectDanger.vue'))
+const selectDangerRef = ref()
+const reportFormRef = ref()
+const reportDialogState = reactive<ReportDialogType>({
+ title: '',
+ disabled: false,
+ reportDialogVisible: false,
+ reportForm: {
+ id: null,
+ experimentName: "",
+ experimentType: null,
+ personUser: '',
+ personUserId: null,
+ personUserPhone: '',
+ safePersonUserId: null,
+ safePersonUser: '',
+ safePersonUserPhone: '',
+ dep: "",
+ experimentSite: [],
+ experimentDesc: '',
+ emergencyMeasure: '',
+ assessPerson:'',
+ safeRiskAnalysis: '',
+ assessLevel:null,
+ riskSource: [],
+ riskSourceType: [],
+ description: '',
+ person: []
+ },
+ reportFormRules: {
+ assessPerson: [{ required: true, message: '请填写评估人员', trigger: 'blur' }],
+ safeRiskAnalysis: [{ required: true, message: '请填写安全风险分析', trigger: 'blur' }],
+ assessLevel: [{ required: true, message: '请选择风险等级评定', trigger: 'blur' }],
+ description: [{ required: true, message: '请填写风险等级评定依据', trigger: 'blur' }],
+ },
+ allPersonList: [],
+ allRoomList: [],
+ systemPersonList: [],
+ experimentTypeList: [
+ {id: 1, name: '化学类'},
+ {id: 2, name: '生物类'},
+ {id: 3, name: '辐射类'},
+ {id: 4, name: '机电类'},
+ {id: 5, name: '特种设备类'},
+ {id: 6, name: '其它类'}
+ ]
+})
+
+const showReportDialog = (title: string, value: ProjectType, allRoomList: RoomType []) => {
+ getReportData(value.experimentId)
+ reportDialogState.reportDialogVisible = true;
+ reportDialogState.allRoomList = allRoomList
+ setTimeout(() => {
+ reportFormRef.value.clearValidate();
+ });
+ if(title === '提交'){
+ reportDialogState.title = '提交报告';
+ reportDialogState.disabled = false
+ // for(let i in reportDialogState.reportForm) {
+ // if(isValidKey(i, reportDialogState.reportForm)) {
+ // reportDialogState.reportForm[i] = value[i];
+ // }
+ // }
+ }else if(title === '修改'){
+ reportDialogState.title = '修改报告';
+ reportDialogState.disabled = false
+ }else{
+ reportDialogState.title = '查看';
+ reportDialogState.disabled = true
+ // for(let i in reportDialogState.reportForm) {
+ // if(isValidKey(i, reportDialogState.reportForm)) {
+ // reportDialogState.reportForm[i] = value[i];
+ // }
+ // }
+ }
+};
+
+const isValidKey = (key: string | number | symbol, object:object): key is keyof typeof object =>{
+ return key in object;
+};
+
+const getReportData = async (id:number|null|undefined) => {
+ let res = await assessApplyApi().getRiskReportPage({
+ experimentId: id,
+ pageIndex: 1,
+ pageSize: 10,
+ tag: 3
+ });
+ if(res.data.code === 100){
+ for(let i in reportDialogState.reportForm) {
+ if(isValidKey(i, reportDialogState.reportForm)) {
+ reportDialogState.reportForm[i] = res.data.data[0][i];
+ }
+ }
+ console.log(reportDialogState.reportForm,'reportDialogState.reportForm')
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+};
+
+// const getLiabilityUserPhone = (value: number)=>{
+// const data = reportDialogState.systemPersonList.find(item => item.id === value) as AllPersonListType
+// reportDialogState.reportForm.liabilityUserPhone = data.phone
+// }
+//
+// const getSafeLiabilityUserPhone = (value: number)=>{
+// const data = reportDialogState.allPersonList.find(item => item.id === value) as AllPersonListType
+// reportDialogState.reportForm.safeLiabilityUserPhone = data.phone
+// }
+
+// const hasSafeSystem = (value: number) =>{
+// if(value == 2){
+// reportDialogState.reportForm.safeInformationSystem = ''
+// }
+// }
+
+const onSubmitProject = () => {
+ reportFormRef.value.validate(async(valid: boolean) => {
+ if(valid){
+ const { id,assessPerson,safeRiskAnalysis,assessLevel,description } = reportDialogState.reportForm
+ const data = { id,assessPerson,safeRiskAnalysis,assessLevel,description }
+ if(reportDialogState.title === '提交报告'){
+ let res = await assessApplyApi().updateRiskReport(data);
+ if(res.data.code === 100){
+ emit('refresh')
+ reportDialogState.reportDialogVisible = false;
+ ElMessage({
+ type: 'success',
+ message: '提交报告成功'
+ })
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg,
+ });
+ }
+ }else{
+ let res = await assessApplyApi().updateRiskReportInfo(data)
+ if(res.data.code === 100){
+ emit('refresh')
+ reportDialogState.reportDialogVisible = false;
+ ElMessage({
+ type: 'success',
+ message: '修改报告成功'
+ })
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg,
+ });
+ }
+ }
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: '请完善基本信息',
+ });
+ }
+ })
+};
+
+const getPersonList = async () => {
+ let res = await userApi().getUserList({
+ roleId: 1,
+ usePage: false,
+ pageIndex: 1,
+ pageSize: 10
+ });
+ if(res.data.code === 100){
+ reportDialogState.systemPersonList = JSON.parse(JSON.stringify(res.data.data));
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ })
+ }
+};
+
+const getAllPersonList = async () => {
+ let res = await personApi().getAllPerson();
+ if(res.data.code === 100){
+ reportDialogState.allPersonList = JSON.parse(JSON.stringify(res.data.data));
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ })
+ }
+};
+
+const emit = defineEmits(['refresh']);
+
+defineExpose({
+ showReportDialog,
+});
+
+onMounted(() => {
+ getAllPersonList();
+ getPersonList()
+});
+</script>
+
+<style scoped lang="scss">
+.site-layout-background {
+ background: #fff;
+}
+
+.report-table {
+ width: 100%;
+ border-collapse: collapse;
+ border: 1px solid #337ecc;
+ margin: 20px 0;
+
+th {
+ padding: 10px 0;
+ border: 1px solid #337ecc;
+ border-left: none;
+}
+
+tr {
+ width: 100%;
+ height: 44px;
+ line-height: 42px;
+ border-bottom: 1px solid #ccc;
+
+ &.required {
+ &::before {
+ content: "*";
+ display: inline-block;
+ color: red;
+ }
+ }
+
+&:last-of-type {
+ border-bottom: none;
+ }
+
+ td {
+ border-right: 1px solid #ccc;
+ display: inline-block;
+ height: 44px;
+ vertical-align: middle;
+ text-align: center;
+ line-height: 42px;
+
+ :deep(.el-input__wrapper ){
+ box-shadow: none;
+ margin-top: 6px;
+ }
+
+ &:last-of-type {
+ border-right: none;
+ }
+
+ &.required {
+ &::before {
+ content: "*";
+ display: inline-block;
+ color: red;
+ }
+ }
+
+ &.w-14 {
+ width: calc((100/7)/100 * 100%);
+ }
+
+ &.w-16 {
+ width: calc((100/6)/100 * 100%);
+ }
+
+ &.w-18 {
+ width: 16.59%;
+ }
+
+ &.w-20 {
+ width: 20%;
+ }
+
+ &.w-25 {
+ width: 25%;
+ }
+
+ &.w-50 {
+ width: 50%;
+ }
+
+ &.w-75 {
+ width: 75%;
+ }
+
+ &.autoheight {
+ min-height: 44px;
+ height: auto;
+ }
+
+ &.l-border{
+ border-left: 1px solid #ccc;
+ }
+
+ .ant-input {
+ height: 100%;
+ border: none;
+ background: #f5f7fa;
+ }
+
+ .ant-picker {
+ width: 100%;
+ height: 100%;
+ }
+ }
+}
+
+.b-font {
+ font-size: 16px;
+ font-weight: bolder;
+}
+}
+
+.m-color {
+ color: #0c4995;
+}
+
+.roomSelect{
+ ::v-deep(.el-popper){
+ .el-select-dropdown__item{
+ height: auto;
+ padding: 0;
+
+ .roomTable{
+ width: 100%;
+ display: flex;
+ border-bottom: 1px solid #ebeef5;
+
+ &:last-of-type{
+ border-bottom: none;
+ }
+
+ &>div{
+ width: 25%;
+ border-right: 1px dashed #ebeef5;
+ &:last-of-type{
+ border-right: none;
+ }
+
+ div{
+ width: 100%;
+ }
+ .roomTit{
+ border-bottom: 1px solid #ebeef5;
+ }
+ }
+ }
+ }
+ .el-select-dropdown__item.selected{
+ .roomTit{
+ color: #606266;
+ font-weight: normal;
+ }
+ }
+ }
+}
+
+:deep(.el-dialog__footer){
+ padding-top: 20px;
+ display: flex;
+ justify-content: center;
+}
+
+
+</style>
diff --git a/src/views/analyse/applyReview/components/selectDanger.vue b/src/views/analyse/applyReview/components/selectDanger.vue
new file mode 100644
index 0000000..3094ea6
--- /dev/null
+++ b/src/views/analyse/applyReview/components/selectDanger.vue
@@ -0,0 +1,191 @@
+<template>
+ <tr class="m-color b-font" style="text-align: center">主要危险源或有害因素</tr>
+ <tr>
+ <td class="w-20 m-color">序号</td>
+ <td class="w-20 m-color">危险源或有害因素</td>
+ <td class="w-20 m-color">危险特性</td>
+ <td class="w-20 m-color">数量</td>
+ <td class="w-20 m-color">其他说明</td>
+<!-- <td class="w-18 m-color">操作</td>-->
+ </tr>
+ <tr v-for="(item,index) in dangerSourceState.dangerList" :key="index">
+ <td class="w-20">
+ {{ index + 1 }}
+ </td>
+ <td class="w-20">
+ <el-input disabled v-model="item.riskSource"></el-input>
+ </td>
+ <td class="w-20">
+ <el-input disabled v-model="item.riskCharacteristic"></el-input>
+ </td>
+ <td class="w-20">
+ <el-input disabled type="number" v-model="item.number"></el-input>
+ </td>
+ <td class="w-20">
+ <el-input disabled v-model="item.description"></el-input>
+ </td>
+<!-- <td class="w-18">-->
+<!-- <el-button disabled type="danger" @click="deleteDangerItem(index)">删除</el-button>-->
+<!-- </td>-->
+ </tr>
+<!-- <tr style="text-align: center">-->
+<!-- <el-button :disabled="dangerSourceState.disabled" type="primary" shape="round" @click="addDangerItem()">-->
+<!-- 添加行-->
+<!-- </el-button>-->
+<!-- </tr>-->
+</template>
+
+<script setup lang="ts">
+import {reactive, watchEffect} from "vue";
+
+let props = defineProps({
+ disabled: Boolean,
+ data: Array<DangerListType>
+});
+
+const dangerSourceState = reactive<DangerSourceType>({
+ disabled: false,
+ dangerList: [],
+ classifyList:[
+ {id:1, name: '有机'},
+ {id:2, name: '酸'},
+ {id:3, name: '碱性'},
+ {id:4, name: '固体废弃物'},
+ {id:5, name: '医疗废弃物'},
+ {id:6, name: '过期化学品'},
+ {id:7, name: '其他'}
+ ],
+ wasteStorageList: [
+ {id:1, name: '吨袋'},
+ {id:2, name: '吨桶'},
+ {id:3, name: '小桶'},
+ {id:4, name: '托盘'},
+ {id:5, name: '其他'},
+ ]
+})
+
+watchEffect(() => {
+ dangerSourceState.dangerList = props.data as Array<DangerListType>
+ dangerSourceState.disabled = props.disabled
+});
+
+const addDangerItem = () => {
+ dangerSourceState.dangerList.push({riskSource: '', riskCharacteristic: '', number: null, description: ''});
+};
+
+const deleteDangerItem = (index: number) => {
+ dangerSourceState.dangerList.splice(index,1);
+};
+
+const formatList = (formatList: Array<DangerListType>) => {
+ dangerSourceState.dangerList = formatList
+}
+
+defineExpose({
+ formatList,
+ dataList: dangerSourceState.dangerList,
+});
+
+</script>
+
+<style scoped lang="scss">
+.site-layout-background {
+ background: #fff;
+}
+
+.report-table {
+ width: 100%;
+ border-collapse: collapse;
+ border: 1px solid #337ecc;
+ margin: 20px 0;
+
+ th {
+ padding: 10px 0;
+ border: 1px solid #337ecc;
+ border-left: none;
+ }
+
+ tr {
+ width: 100%;
+ height: 44px;
+ line-height: 42px;
+ border-bottom: 1px solid #ccc;
+
+ &:last-of-type {
+ border-bottom: none;
+ }
+
+ td {
+ border-right: 1px solid #ccc;
+ display: inline-block;
+ height: 44px;
+ vertical-align: middle;
+ text-align: center;
+ line-height: 42px;
+
+ &:last-of-type {
+ border-right: none;
+ }
+
+ &.required {
+ &::before {
+ content: "*";
+ display: inline-block;
+ color: red;
+ }
+ }
+
+ &.w-14 {
+ width: calc((100/7)/100 * 100%);
+ }
+
+ &.w-16 {
+ width: calc((100/6)/100 * 100%);
+ }
+
+ &.w-18 {
+ width: 16.59%;
+ }
+
+ &.w-20 {
+ width: 20%;
+ }
+
+ &.w-25 {
+ width: 25%;
+ }
+
+ &.w-50 {
+ width: 50%;
+ }
+
+ &.w-75 {
+ width: 75%;
+ }
+
+ .ant-input {
+ height: 100%;
+ border: none;
+ background: #f5f7fa;
+ }
+
+ .ant-picker {
+ width: 100%;
+ height: 100%;
+ }
+ }
+ }
+
+ .b-font {
+ font-size: 16px;
+ font-weight: bolder;
+ }
+}
+
+.m-color {
+ color: #0c4995;
+}
+:deep(.el-input__wrapper ){
+ box-shadow: none;
+}
+</style>
diff --git a/src/views/analyse/applyReview/index.ts b/src/views/analyse/applyReview/index.ts
new file mode 100644
index 0000000..54ff4ce
--- /dev/null
+++ b/src/views/analyse/applyReview/index.ts
@@ -0,0 +1,22 @@
+declare interface reportReviewStateType {
+ developData?: Array<ProjectType>
+ searchQuery: {
+ pageIndex: number | null,
+ pageSize: number | null,
+ tag: number | null,
+ experimentName: string,
+ experimentType: null | number,
+ },
+ total: 0,
+ experimentTypeList: Type []
+ allRoomList: RoomType [],
+ reviewDialogVisible: boolean,
+ reviewForm:{
+ id: number | null
+ approveStatus: null | number
+ approveDesc: string
+ },
+ rules:object,
+ isManage: boolean
+ isLeader: boolean
+}
\ No newline at end of file
diff --git a/src/views/analyse/applyReview/index.vue b/src/views/analyse/applyReview/index.vue
new file mode 100644
index 0000000..3ece568
--- /dev/null
+++ b/src/views/analyse/applyReview/index.vue
@@ -0,0 +1,375 @@
+<template>
+ <div class="home-container">
+ <div style="height: 100%">
+ <el-row class="homeCard">
+ <div class="basic-line">
+ <span>实验名称:</span>
+ <el-input v-model="developState.searchQuery.experimentName" clearable filterable class="input-box" placeholder="实验名称">
+ </el-input>
+ </div>
+<!-- <div class="basic-line">-->
+<!-- <span>实验类型:</span>-->
+<!-- <el-select v-model="developState.searchQuery.experimentType" clearable filterable class="input-box" placeholder="实验类型">-->
+<!-- <el-option v-for="item in developState.experimentTypeList" :key="item.id" :label="item.name" :value="item.id"></el-option>-->
+<!-- </el-select>-->
+<!-- </div>-->
+ <div style="padding-bottom: 10px">
+ <el-button type="primary" @click="getReportData">查询</el-button>
+ <el-button plain @click="reset">重置</el-button>
+ </div>
+ </el-row>
+ <div class="homeCard">
+ <div class="main-card">
+ <el-row class="cardTop">
+ </el-row>
+ <el-table ref="multipleTableRef" :data="developState.developData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }">
+ <el-table-column prop="experimentCode" label="实验编号"/>
+ <el-table-column prop="experimentName" label="实验名称"/>
+ <el-table-column prop="createExperimentTime" label="评价时间">
+ <template #default="scope">
+ <span>{{scope.row.evaluateTime?scope.row.evaluateTime.substring(0,16):'--'}}</span>
+ </template>
+ </el-table-column>
+ <el-table-column prop="startTime" label="报告提交时间" show-overflow-tooltip>
+ <template #default="scope">
+ <span>{{scope.row.updateTime?scope.row.updateTime.substring(0,16):'--'}}</span>
+ </template>
+ </el-table-column>
+<!-- <el-table-column prop="experimentSite" label="实验场所" show-overflow-tooltip>-->
+<!-- <template #default="scope">-->
+<!-- <span>{{scope.row.experimentSite?.map(i=>i.siteName).join(',')}}</span>-->
+<!-- </template>-->
+<!-- </el-table-column>-->
+<!-- <el-table-column prop="experimentType" label="实验类别">-->
+<!-- <template #default="scope">-->
+<!-- <span>{{developState.experimentTypeList.find(i=>i.id == scope.row.experimentType)?.name}}</span>-->
+<!-- </template>-->
+<!-- </el-table-column>-->
+ <el-table-column label="操作" width="250" fixed="right">
+ <template #default="scope">
+ <el-button size="small" text type="primary" v-if="(developState.isManage == true && !scope.row.person?.find(i=>i.approveIndex == 1))||(developState.isLeader == true && !scope.row.person?.find(i=>i.approveIndex == 2))" :icon="Edit" @click="openRiskDialog(scope.row)">审批</el-button>
+ <el-button size="small" text type="primary" :icon="Edit" @click="openReportDialog('查看',scope.row)">查看评估报告</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <div class="pageBtn">
+ <el-pagination @size-change="onHandleSizeChange" @current-change="onHandleCurrentChange" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="developState.searchQuery.pageIndex" background v-model:page-size="developState.searchQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="developState.total" class="page-position"> </el-pagination>
+ </div>
+ </div>
+ </div>
+ </div>
+ <report-dialog ref="ReportDialogRef" @refresh="getReportData"></report-dialog>
+ <el-dialog title="报告审批" v-model="developState.reviewDialogVisible" width="50%">
+ <el-form ref="ruleFormRef" :rules="developState.rules" :model="developState.reviewForm" label-width="120px">
+ <el-form-item label="审批结果" prop="approveStatus">
+ <el-radio-group style="text-align: center" v-model="developState.reviewForm.approveStatus">
+ <el-radio :label="2">通过</el-radio>
+ <el-radio :label="3">不通过</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ <el-form-item label="意见填报" prop="approveDesc">
+ <el-input v-model="developState.reviewForm.approveDesc" type="textarea" :autosize="{ minRows: 3 }" />
+ </el-form-item>
+ </el-form>
+ <template #footer>
+ <span class="dialog-footer" style="padding-top:10px;text-align: center !important;">
+ <el-button @click="developState.reviewDialogVisible = !developState.reviewDialogVisible" size="default">取 消</el-button>
+ <el-button type="primary" @click="onSubmitReview(ruleFormRef)" size="default">提交审批</el-button>
+ </span>
+ </template>
+ </el-dialog>
+ </div>
+</template>
+
+<script setup lang="ts">
+import {defineAsyncComponent, onMounted, reactive, ref} from "vue";
+import {projectApi} from "/@/api/experiment/project";
+import {ElMessage, ElMessageBox} from "element-plus";
+import type { FormInstance, FormRules } from 'element-plus'
+import { View,Edit, Plus, RefreshLeft } from '@element-plus/icons-vue';
+import {roomApi} from "/@/api/basic/room";
+import {assessApplyApi} from "/@/api/analyse/assessApply";
+import {useUserInfo} from "/@/stores/userInfo";
+import {storeToRefs} from "pinia";
+const userInfo = useUserInfo();
+const { userInfos } = storeToRefs(userInfo);
+const ReportDialog = defineAsyncComponent(() => import('./components/reportDialog.vue'));
+
+const ReportDialogRef = ref();
+const ruleFormRef = ref<FormInstance>()
+const developState = reactive<reportReviewStateType>({
+ developData: [],
+ searchQuery: {
+ pageIndex: 1,
+ pageSize: 10,
+ experimentName: '',
+ experimentType: null,
+ tag: 2
+ },
+ total: 0,
+ experimentTypeList: [
+ {id: 1, name: '化学类'},
+ {id: 2, name: '生物类'},
+ {id: 3, name: '辐射类'},
+ {id: 4, name: '机电类'},
+ {id: 5, name: '特种设备类'},
+ {id: 6, name: '其它类'},
+ ],
+ allRoomList: [],
+ reviewDialogVisible: false,
+ reviewForm:{
+ id: null,
+ approveStatus: null,
+ approveDesc: ''
+ },
+ isManage: false,
+ isLeader: false,
+ rules: {
+ approveDesc: [{ required: true, message: '请输入审批意见', trigger: 'blur' }],
+ approveStatus: [{ required: true, message: '请选择审批结果', trigger: 'blur' }]
+ }
+})
+
+const getReportData = async () => {
+ let res = await assessApplyApi().getRiskReportPage(developState.searchQuery);
+ if(res.data.code === 100){
+ developState.developData = res.data.data;
+ developState.total = res.data.total;
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+};
+
+
+const getAllRoom = async () => {
+ let res = await roomApi().getAllRoom();
+ if(res.data.code === 100){
+ developState.allRoomList = JSON.parse(JSON.stringify(res.data.data));
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ })
+ }
+};
+
+const openReportDialog = (title: string,value: ProjectType) =>{
+ ReportDialogRef.value.showReportDialog(title, value, developState.allRoomList);
+}
+
+const onSubmitReview = async (formEl: FormInstance | undefined) => {
+ if (!formEl) return
+ await formEl.validate(async(valid, fields) => {
+ if (valid) {
+ let res = await assessApplyApi().uploadReport(developState.reviewForm);
+ if(res.data.code === 100){
+ ElMessage({
+ type: 'success',
+ message: '审批提交成功'
+ });
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ developState.reviewForm = {
+ id: null,
+ approveStatus: null,
+ approveDesc: ''
+ },
+ developState.reviewDialogVisible = false
+ getReportData()
+ } else {
+ console.log('error submit!', fields)
+ }
+ })
+}
+
+const openRiskDialog = (val)=>{
+ developState.reviewForm.id = val.id
+ developState.reviewDialogVisible = true
+}
+
+const onHandleSizeChange = (val: number) => {
+ developState.searchQuery.pageSize = val;
+ getReportData();
+};
+
+const onHandleCurrentChange = (val: number) => {
+ developState.searchQuery.pageIndex = val;
+ getReportData();
+};
+
+const reset = () => {
+ developState.searchQuery = {
+ pageIndex: 1,
+ pageSize: 10,
+ experimentName: '',
+ experimentType: null,
+ tag: 2
+ }
+};
+
+onMounted(() => {
+ getReportData()
+ getAllRoom()
+ if(userInfos.value.roles?.find(i=>i.roleId == '4')){
+ developState.isManage = true
+ }
+ if(userInfos.value.roles?.find(i=>i.roleId == '6')){
+ developState.isLeader = true
+ }
+ console.log(developState.isManage,userInfos.value.roles)
+})
+
+</script>
+
+<style scoped lang="scss">
+$homeNavLengh: 8;
+.home-container {
+ height: calc(100vh - 144px);
+ box-sizing: border-box;
+ overflow: hidden;
+ .homeCard {
+ width: 100%;
+ padding: 20px;
+ box-sizing: border-box;
+ background: #fff;
+ border-radius: 4px;
+
+ .main-card {
+ width: 100%;
+ height: 100%;
+ .cardTop {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin-bottom: 20px;
+ .mainCardBtn {
+ margin: 0;
+ }
+ }
+ .pageBtn {
+ height: 60px;
+ display: flex;
+ align-items: center;
+ justify-content: right;
+
+ .demo-pagination-block + .demo-pagination-block {
+ margin-top: 10px;
+ }
+ .demo-pagination-block .demonstration {
+ margin-bottom: 16px;
+ }
+ }
+ }
+ &:last-of-type {
+ height: calc(100% - 100px);
+ }
+ }
+ .el-row {
+ display: flex;
+ align-items: center;
+ margin-bottom: 20px;
+ &:last-child {
+ margin-bottom: 0;
+ }
+ .grid-content {
+ align-items: center;
+ min-height: 36px;
+ }
+
+ .topInfo {
+ display: flex;
+ align-items: center;
+ font-size: 16px;
+ font-weight: bold;
+
+ & > div {
+ white-space: nowrap;
+ margin-right: 20px;
+ }
+ }
+ }
+}
+.stepItem {
+ width: 100%;
+ display: flex;
+ align-items: flex-start;
+ margin-bottom: 30px;
+ margin-left: 30px;
+ padding-bottom: 30px;
+ border-left: 2px solid #ccc;
+ &:first-of-type {
+ margin-top: 30px;
+ }
+ &:last-of-type {
+ margin-bottom: 0;
+ border-left: none;
+ }
+ .stepNum {
+ width: 30px;
+ height: 30px;
+ border-radius: 15px;
+ box-sizing: border-box;
+ color: #333;
+ border: 1px solid #999;
+ line-height: 28px;
+ text-align: center;
+ margin-right: 10px;
+ margin-left: -16px;
+ margin-top: -30px;
+ }
+ .stepCard {
+ width: 100%;
+ margin-top: -30px;
+
+ .box-card {
+ width: 100%;
+ &:deep(.el-card__header) {
+ padding: 10px 15px;
+ }
+ .card-header {
+ width: 100%;
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ & > div:first-of-type {
+ margin-right: 80px;
+ font-size: 18px;
+ font-weight: bold;
+ }
+ }
+ }
+ }
+ &:hover .card-header {
+ color: #0098f5;
+ }
+ &:hover .stepNum {
+ border: 2px solid #0098f5;
+ color: #0098f5;
+ }
+}
+
+:deep(.el-date-editor) {
+ width: 100%;
+}
+.el-select {
+ width: 100%;
+}
+:deep(.el-textarea.is-disabled .el-textarea__inner) {
+ background-color: var(--el-card-bg-color);
+ color: var(--el-input-text-color, var(--el-text-color-regular));
+}
+:deep(.el-input.is-disabled .el-input__inner) {
+ color: var(--el-input-text-color, var(--el-text-color-regular));
+}
+:deep(.el-input.is-disabled .el-input__wrapper) {
+ background-color: var(--el-card-bg-color);
+ box-shadow: none;
+}
+</style>
diff --git a/src/views/analyse/assessApply/components/reportDialog.vue b/src/views/analyse/assessApply/components/reportDialog.vue
index ae84a4e..95b484d 100644
--- a/src/views/analyse/assessApply/components/reportDialog.vue
+++ b/src/views/analyse/assessApply/components/reportDialog.vue
@@ -1,11 +1,12 @@
<template>
<div class="system-menu-dialog-container">
<el-dialog :title="reportDialogState.title" v-model="reportDialogState.reportDialogVisible" width="80%">
+ <div style="text-align: center;font-size: 20px;font-weight: bolder;color: #0c4995">{{reportDialogState.reportForm.experimentName}}实验安全风险评估报告表(带<span style="color: red">*</span>为填写内容)</div>
<el-form ref="reportFormRef" :rules="reportDialogState.reportFormRules" :model="reportDialogState.reportForm" size="default" label-width="0">
<table class="report-table">
<th class="m-color b-font" style="text-align: center">实验基本信息</th>
<tr>
- <td class="w-25 m-color required">实验名称</td>
+ <td class="w-25 m-color">实验名称</td>
<td class="w-75 m-color">
<el-form-item prop="experimentName">
<el-input readonly v-model="reportDialogState.reportForm.experimentName" placeholder="请输入实验名称" />
@@ -13,79 +14,82 @@
</td>
</tr>
<tr>
- <td class="w-25 m-color required">实验类型</td>
- <td class="w-75 m-color">
- <el-radio-group style="text-align: center" disabled v-model="reportDialogState.reportForm.experimentType">
- <el-radio :label="1">化学类</el-radio>
- <el-radio :label="2">生物类</el-radio>
- <el-radio :label="3">辐射类</el-radio>
- <el-radio :label="4">机电类</el-radio>
- <el-radio :label="5">特种设备类</el-radio>
- <el-radio :label="6">其他类</el-radio>
- </el-radio-group>
+ <td class="w-25 m-color">实验类型</td>
+ <td class="w-75" style="text-align: left;padding-left: 11px">
+<!-- <el-radio-group style="text-align: center" disabled v-model="reportDialogState.reportForm.experimentType">-->
+<!-- <el-radio :label="1">化学类</el-radio>-->
+<!-- <el-radio :label="2">生物类</el-radio>-->
+<!-- <el-radio :label="3">辐射类</el-radio>-->
+<!-- <el-radio :label="4">机电类</el-radio>-->
+<!-- <el-radio :label="5">特种设备类</el-radio>-->
+<!-- <el-radio :label="6">其他类</el-radio>-->
+<!-- </el-radio-group>-->
+ {{reportDialogState.experimentTypeList.find(i=>i.id === reportDialogState.reportForm.experimentType)?.name}}
</td>
</tr>
<tr>
- <td class="w-25 m-color required">负责人</td>
+ <td class="w-25 m-color">负责人</td>
<td class="w-25 m-color">
- <el-select style="width: 100%" disabled v-model="reportDialogState.reportForm.liabilityUserId" clearable filterable @change="getLiabilityUserPhone($event)">
- <el-option
- v-for="item in reportDialogState.systemPersonList"
- :key="item.id"
- :value="item.id"
- :label="item.realName"
- ></el-option>
- </el-select>
+<!-- <el-select style="width: 100%" disabled v-model="reportDialogState.reportForm.liabilityUserId" clearable filterable @change="getLiabilityUserPhone($event)">-->
+<!-- <el-option-->
+<!-- v-for="item in reportDialogState.systemPersonList"-->
+<!-- :key="item.id"-->
+<!-- :value="item.id"-->
+<!-- :label="item.realName"-->
+<!-- ></el-option>-->
+<!-- </el-select>-->
+ <el-input readonly v-model="reportDialogState.reportForm.personUser" />
</td>
- <td class="w-25 m-color required">电话</td>
+ <td class="w-25 m-color">电话</td>
<td class="w-25 m-color">
- <el-input readonly v-model="reportDialogState.reportForm.liabilityUserPhone" />
+ <el-input disabled v-model="reportDialogState.reportForm.personUserPhone" />
</td>
</tr>
<tr>
- <td class="w-25 m-color required">安全负责人</td>
+ <td class="w-25 m-color">安全负责人</td>
<td class="w-25 m-color">
- <el-select v-if="reportDialogState.reportForm.safeLiabilityUserId" style="width: 100%" disabled v-model="reportDialogState.reportForm.safeLiabilityUserId" @change="getSafeLiabilityUserPhone($event)" clearable filterable>
- <el-option
- v-for="item in reportDialogState.allPersonList"
- :key="item.id"
- :value="item.id"
- :label="item.personName"
- ></el-option>
- </el-select>
- <el-input v-else disabled v-model="reportDialogState.reportForm.safeLiabilityUser" />
+<!-- <el-select v-if="reportDialogState.reportForm.safeLiabilityUserId" style="width: 100%" disabled v-model="reportDialogState.reportForm.safeLiabilityUserId" @change="getSafeLiabilityUserPhone($event)" clearable filterable>-->
+<!-- <el-option-->
+<!-- v-for="item in reportDialogState.allPersonList"-->
+<!-- :key="item.id"-->
+<!-- :value="item.id"-->
+<!-- :label="item.personName"-->
+<!-- ></el-option>-->
+<!-- </el-select>-->
+ <el-input disabled v-model="reportDialogState.reportForm.safePersonUser" />
</td>
- <td class="w-25 m-color required">电话</td>
+ <td class="w-25 m-color">电话</td>
<td class="w-25 m-color">
- <el-input readonly v-model="reportDialogState.reportForm.safeLiabilityUserPhone" />
+ <el-input readonly v-model="reportDialogState.reportForm.safePersonUserPhone" />
</td>
</tr>
<tr>
- <td class="w-25 m-color required">部门</td>
+ <td class="w-25 m-color">部门</td>
<td class="w-75 m-color">
<el-input readonly v-model="reportDialogState.reportForm.dep" />
</td>
</tr>
<tr class="m-color b-font" style="text-align: center">实验场所</tr>
<tr>
- <td class="w-14 m-color required">场所名称</td>
+ <td class="w-14 m-color">场所名称</td>
<td class="w-14 m-color">所在楼栋</td>
<td class="w-14 m-color">房间</td>
<td class="w-14 m-color">有无消防设施</td>
<td class="w-14 m-color">有无隔断</td>
<td class="w-14 m-color">场所性质</td>
</tr>
- <tr v-for="(item,index) in reportDialogState.reportForm.siteList" :key="index">
+ <tr v-for="(item,index) in reportDialogState.reportForm.experimentSite" :key="index">
<td class="w-14">
- <el-select disabled filterable v-model="item.siteId">
- <el-option
- v-for="item in reportDialogState.allRoomList"
- :key="item.id"
- :value="item.id"
- :label="item.siteName"
- >
- </el-option>
- </el-select>
+<!-- <el-select disabled filterable v-model="item.siteId">-->
+<!-- <el-option-->
+<!-- v-for="item in reportDialogState.allRoomList"-->
+<!-- :key="item.id"-->
+<!-- :value="item.id"-->
+<!-- :label="item.siteName"-->
+<!-- >-->
+<!-- </el-option>-->
+<!-- </el-select>-->
+ <el-input disabled v-model="item.siteName" />
</td>
<td class="w-14">
<el-input disabled v-model="item.floor" />
@@ -105,71 +109,75 @@
</tr>
<tr>
<td class="w-25 m-color required">评估人</td>
- <td class="w-25 m-color">
- <el-select style="width: 100%" :disabled="reportDialogState.disabled" v-model="reportDialogState.reportForm.assessUserId" clearable filterable>
- <el-option
- v-for="item in reportDialogState.allPersonList"
- :key="item.id"
- :value="item.id"
- :label="item.personName"
- ></el-option>
- </el-select>
+ <td class="w-75 m-color">
+<!-- <el-select style="width: 100%" :disabled="reportDialogState.disabled" v-model="reportDialogState.reportForm.assessPerson" clearable filterable>-->
+<!-- <el-option-->
+<!-- v-for="item in reportDialogState.allPersonList"-->
+<!-- :key="item.id"-->
+<!-- :value="item.id"-->
+<!-- :label="item.personName"-->
+<!-- ></el-option>-->
+<!-- </el-select>-->
+ <el-input :disabled="reportDialogState.disabled" v-model="reportDialogState.reportForm.assessPerson" placeholder="评估人" />
</td>
- <td class="w-25 m-color required">评估时间</td>
- <td class="w-25 m-color">
- <el-date-picker :disabled="reportDialogState.disabled" type="datetime" format="YYYY/MM/DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" v-model="reportDialogState.reportForm.assessTime" />
- </td>
+<!-- <td class="w-25 m-color required">评估时间</td>-->
+<!-- <td class="w-25 m-color">-->
+<!-- <el-date-picker :disabled="reportDialogState.disabled" type="datetime" format="YYYY/MM/DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" v-model="reportDialogState.reportForm.assessTime" />-->
+<!-- </td>-->
</tr>
<tr class="m-color b-font" style="text-align: center">实验概况</tr>
<tr>
- <el-input type="textarea" :autosize="{ minRows: 3}" :disabled="reportDialogState.disabled" v-model="reportDialogState.reportForm.experimentDesc" placeholder="(简要描述实验原理、实验步骤、所用试剂或材料设备等)" />
+ <el-input type="textarea" :autosize="{ minRows: 3}" disabled v-model="reportDialogState.reportForm.experimentDesc" placeholder="(简要描述实验原理、实验步骤、所用试剂或材料设备等)" />
</tr>
<tr class="m-color b-font" style="text-align: center">实验涉及的危险源</tr>
<tr>
- <td class="w-25 m-color required">危险源种类</td>
+ <td class="w-25 m-color">危险源种类</td>
<td class="w-75 m-color">
- <el-radio-group :disabled="reportDialogState.disabled" v-model="reportDialogState.reportForm.dangerSource">
- <el-radio :label="1">化学安全</el-radio>
- <el-radio :label="2">辐射安全</el-radio>
- <el-radio :label="3">特种设备安全</el-radio>
- <el-radio :label="4">机电安全</el-radio>
- <el-radio :label="5">电气安全</el-radio>
- <el-radio :label="6">生物安全</el-radio>
- <el-radio :label="7">激光安全</el-radio>
- <el-radio :label="8">其他安全</el-radio>
- </el-radio-group>
+<!-- <el-radio-group disabled v-model="reportDialogState.reportForm.dangerSource">-->
+<!-- <el-radio :label="1">化学安全</el-radio>-->
+<!-- <el-radio :label="2">辐射安全</el-radio>-->
+<!-- <el-radio :label="3">特种设备安全</el-radio>-->
+<!-- <el-radio :label="4">机电安全</el-radio>-->
+<!-- <el-radio :label="5">电气安全</el-radio>-->
+<!-- <el-radio :label="6">生物安全</el-radio>-->
+<!-- <el-radio :label="7">激光安全</el-radio>-->
+<!-- <el-radio :label="8">其他安全</el-radio>-->
+<!-- </el-radio-group>-->
+ <el-checkbox-group disabled>
+ <el-checkbox v-for="item in reportDialogState.reportForm.riskSourceType" :label="item.riskSourceType" :checked="item.status==1?true:false"/>
+ </el-checkbox-group>
</td>
</tr>
<select-danger ref="selectDangerRef" v-model:data="reportDialogState.reportForm.riskSource" v-model:disabled="reportDialogState.disabled"></select-danger>
- <tr class="m-color b-font" style="text-align: center">安全风险分析(总结)</tr>
+ <tr class="m-color b-font required" style="text-align: center">安全风险分析(总结)</tr>
<tr>
<el-input type="textarea" :autosize="{ minRows: 3}" :disabled="reportDialogState.disabled" v-model="reportDialogState.reportForm.safeRiskAnalysis" placeholder="1.实验过程中是否有爆炸、火灾、腐蚀、中毒风险、产生危险废弃物等(根据危险源清单,分析实验过程中可能对人身安全、人体健康、实验室环境和周边环境等带来的负面影响)" />
</tr>
<tr class="m-color b-font" style="text-align: center">拟采取的防护和应急措施</tr>
<tr>
- <el-input type="textarea" :autosize="{ minRows: 3}" :disabled="reportDialogState.disabled" v-model="reportDialogState.reportForm.emergencyMeasure" placeholder="" />
+ <el-input type="textarea" :autosize="{ minRows: 3}" disabled v-model="reportDialogState.reportForm.emergencyMeasure" placeholder="" />
</tr>
- <tr class="m-color b-font" style="text-align: center">实验和实验项目综合风险等级评定</tr>
+ <tr class="m-color b-font required" style="text-align: center">实验和实验项目综合风险等级评定</tr>
<tr>
<td class="m-color" style="width: 100%">
<el-radio-group :disabled="reportDialogState.disabled" v-model="reportDialogState.reportForm.assessLevel">
- <el-radio :label="4">重大风险(一级)</el-radio>
- <el-radio :label="3">较大风险(二级)</el-radio>
- <el-radio :label="2">一般风险(三级)</el-radio>
- <el-radio :label="1">低风险(四级)</el-radio>
+ <el-radio :label="1">低风险(一级)</el-radio>
+ <el-radio :label="2">一般风险(二级)</el-radio>
+ <el-radio :label="3">较大风险(三级)</el-radio>
+ <el-radio :label="4">重大风险(四级)</el-radio>
</el-radio-group>
</td>
</tr>
<tr>
- <el-input type="textarea" :autosize="{ minRows: 3}" :disabled="reportDialogState.disabled" v-model="reportDialogState.reportForm.reskLevelReason" placeholder="请输入评定依据" />
+ <el-input type="textarea" :autosize="{ minRows: 3}" :disabled="reportDialogState.disabled" v-model="reportDialogState.reportForm.description" placeholder="评定依据(必填)" />
</tr>
</table>
</el-form>
<template #footer>
<span class="dialog-footer" style="padding-top:10px;text-align: center !important;">
<el-button @click="reportDialogState.reportDialogVisible = !reportDialogState.reportDialogVisible" size="default">取 消</el-button>
- <el-button type="primary" v-if="!reportDialogState.disabled" @click="onSubmitProject" size="default">提交审批</el-button>
+ <el-button type="primary" v-if="!reportDialogState.disabled" @click="onSubmitProject()" size="default">提交审批</el-button>
</span>
</template>
</el-dialog>
@@ -183,6 +191,7 @@
import {personApi} from "/@/api/basic/person";
import {userApi} from "/@/api/systemManage/user";
import {roomApi} from "/@/api/basic/room";
+import {assessApplyApi} from "/@/api/analyse/assessApply";
const SelectDanger = defineAsyncComponent(() => import('./selectDanger.vue'))
const selectDangerRef = ref()
@@ -191,30 +200,49 @@
title: '',
disabled: false,
reportDialogVisible: false,
- reportForm: {
+ reportForm: {
id: null,
experimentName: "",
experimentType: null,
- liabilityUserId: null,
- liabilityUserPhone: '',
- safeLiabilityUserId: null,
- safeLiabilityUser: '',
- safeLiabilityUserPhone: '',
+ personUser: '',
+ personUserId: null,
+ personUserPhone: '',
+ safePersonUserId: null,
+ safePersonUser: '',
+ safePersonUserPhone: '',
dep: "",
- siteList: [],
+ experimentSite: [],
experimentDesc: '',
- safeRiskAnalysis: '',
emergencyMeasure: '',
+ assessPerson:'',
+ safeRiskAnalysis: '',
assessLevel:null,
- riskSource: []
+ riskSource: [],
+ riskSourceType: [],
+ description: '',
+ person:[]
},
- reportFormRules: {},
+ reportFormRules: {
+ assessPerson: [{ required: true, message: '请填写评估人员', trigger: 'blur' }],
+ safeRiskAnalysis: [{ required: true, message: '请填写安全风险分析', trigger: 'blur' }],
+ assessLevel: [{ required: true, message: '请选择风险等级评定', trigger: 'blur' }],
+ description: [{ required: true, message: '请填写风险等级评定依据', trigger: 'blur' }],
+ },
allPersonList: [],
allRoomList: [],
systemPersonList: [],
+ experimentTypeList: [
+ {id: 1, name: '化学类'},
+ {id: 2, name: '生物类'},
+ {id: 3, name: '辐射类'},
+ {id: 4, name: '机电类'},
+ {id: 5, name: '特种设备类'},
+ {id: 6, name: '其它类'}
+ ]
})
const showReportDialog = (title: string, value: ProjectType, allRoomList: RoomType []) => {
+ getReportData(value.id)
reportDialogState.reportDialogVisible = true;
reportDialogState.allRoomList = allRoomList
setTimeout(() => {
@@ -223,19 +251,22 @@
if(title === '提交'){
reportDialogState.title = '提交报告';
reportDialogState.disabled = false
- for(let i in reportDialogState.reportForm) {
- if(isValidKey(i, reportDialogState.reportForm)) {
- reportDialogState.reportForm[i] = value[i];
- }
- }
+ // for(let i in reportDialogState.reportForm) {
+ // if(isValidKey(i, reportDialogState.reportForm)) {
+ // reportDialogState.reportForm[i] = value[i];
+ // }
+ // }
+ }else if(title === '修改'){
+ reportDialogState.title = '修改报告';
+ reportDialogState.disabled = false
}else{
reportDialogState.title = '查看';
reportDialogState.disabled = true
- for(let i in reportDialogState.reportForm) {
- if(isValidKey(i, reportDialogState.reportForm)) {
- reportDialogState.reportForm[i] = value[i];
- }
- }
+ // for(let i in reportDialogState.reportForm) {
+ // if(isValidKey(i, reportDialogState.reportForm)) {
+ // reportDialogState.reportForm[i] = value[i];
+ // }
+ // }
}
};
@@ -243,33 +274,85 @@
return key in object;
};
-const getLiabilityUserPhone = (value: number)=>{
- const data = reportDialogState.systemPersonList.find(item => item.id === value) as AllPersonListType
- reportDialogState.reportForm.liabilityUserPhone = data.phone
-}
-
-const getSafeLiabilityUserPhone = (value: number)=>{
- const data = reportDialogState.allPersonList.find(item => item.id === value) as AllPersonListType
- reportDialogState.reportForm.safeLiabilityUserPhone = data.phone
-}
-
-const hasSafeSystem = (value: number) =>{
- if(value == 2){
- reportDialogState.reportForm.safeInformationSystem = ''
+const getReportData = async (id:number|null|undefined) => {
+ let res = await assessApplyApi().getRiskReportPage({
+ experimentId: id,
+ pageIndex: 1,
+ pageSize: 10,
+ tag: 3
+ });
+ if(res.data.code === 100){
+ reportDialogState.reportForm = {
+ id: null,
+ experimentName: "",
+ experimentType: null,
+ personUser: '',
+ personUserId: null,
+ personUserPhone: '',
+ safePersonUserId: null,
+ safePersonUser: '',
+ safePersonUserPhone: '',
+ dep: "",
+ experimentSite: [],
+ experimentDesc: '',
+ emergencyMeasure: '',
+ assessPerson:'',
+ safeRiskAnalysis: '',
+ assessLevel:null,
+ riskSource: [],
+ riskSourceType: [],
+ description: '',
+ person:[]
+ }
+ if(res.data.data&&res.data.data.length==0){
+ ElMessage({
+ type: 'warning',
+ message: '暂时无法获取实验信息,可能与用户身份有关'
+ });
+ }else{
+ for(let i in reportDialogState.reportForm) {
+ if(isValidKey(i, reportDialogState.reportForm)) {
+ reportDialogState.reportForm[i] = res.data.data[0][i];
+ }
+ }
+ }
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
}
-}
+};
+
+// const getLiabilityUserPhone = (value: number)=>{
+// const data = reportDialogState.systemPersonList.find(item => item.id === value) as AllPersonListType
+// reportDialogState.reportForm.liabilityUserPhone = data.phone
+// }
+//
+// const getSafeLiabilityUserPhone = (value: number)=>{
+// const data = reportDialogState.allPersonList.find(item => item.id === value) as AllPersonListType
+// reportDialogState.reportForm.safeLiabilityUserPhone = data.phone
+// }
+
+// const hasSafeSystem = (value: number) =>{
+// if(value == 2){
+// reportDialogState.reportForm.safeInformationSystem = ''
+// }
+// }
const onSubmitProject = () => {
reportFormRef.value.validate(async(valid: boolean) => {
if(valid){
- if(reportDialogState.title === '新增'){
- let res = await projectApi().addDevelop(reportDialogState.reportForm);
+ const { id,assessPerson,safeRiskAnalysis,assessLevel,description } = reportDialogState.reportForm
+ const data = { id,assessPerson,safeRiskAnalysis,assessLevel,description }
+ if(reportDialogState.title === '提交报告'){
+ let res = await assessApplyApi().updateRiskReport(data);
if(res.data.code === 100){
emit('refresh')
reportDialogState.reportDialogVisible = false;
ElMessage({
type: 'success',
- message: '新增成功'
+ message: '提交报告成功'
})
}else{
ElMessage({
@@ -278,13 +361,13 @@
});
}
}else{
- let res = await projectApi().modProject(reportDialogState.reportForm)
+ let res = await assessApplyApi().updateRiskReportInfo(data)
if(res.data.code === 100){
emit('refresh')
reportDialogState.reportDialogVisible = false;
ElMessage({
type: 'success',
- message: '整改已提交'
+ message: '修改报告成功'
})
}else{
ElMessage({
@@ -366,6 +449,14 @@
line-height: 42px;
border-bottom: 1px solid #ccc;
+ &.required {
+ &::before {
+ content: "*";
+ display: inline-block;
+ color: red;
+ }
+ }
+
&:last-of-type {
border-bottom: none;
}
diff --git a/src/views/analyse/assessApply/components/riskDialog.vue b/src/views/analyse/assessApply/components/riskDialog.vue
index 76d9b06..bbe6901 100644
--- a/src/views/analyse/assessApply/components/riskDialog.vue
+++ b/src/views/analyse/assessApply/components/riskDialog.vue
@@ -64,15 +64,15 @@
assessApplyDialogState.assessApplyDialogVisible = true;
assessApplyDialogState.id = <number>value.id
assessApplyDialogState.liabilityUserId = <number>value.liabilityUserId
- getRiskData(<number>value.id)
+ getRiskData()
};
const addUnit = (id: number, value: RiskUnitType) => {
riskUnitDialogRef.value.showRiskUnitDialog(assessApplyDialogState.id, assessApplyDialogState.liabilityUserId, assessApplyDialogState.basicUnitList, assessApplyDialogState.allPersonList, assessApplyDialogState.allRiskTypeList);
};
-const getRiskData = async (id: number|null) => {
- let res = await riskUnitApi().getRiskUnitByList({pageIndex: 1,pageSize: 9999,riskCode: '',riskName: '',experimentId: id});
+const getRiskData = async () => {
+ let res = await riskUnitApi().getRiskUnitByList({pageIndex: 1,pageSize: 9999,riskCode: '',riskName: '',experimentId: assessApplyDialogState.id});
if(res.data.code === 100){
assessApplyDialogState.riskUnitData = JSON.parse(JSON.stringify(res.data.data));
}else{
diff --git a/src/views/analyse/assessApply/components/riskUnitDialog.vue b/src/views/analyse/assessApply/components/riskUnitDialog.vue
index 22aee6c..fe72aae 100644
--- a/src/views/analyse/assessApply/components/riskUnitDialog.vue
+++ b/src/views/analyse/assessApply/components/riskUnitDialog.vue
@@ -1,59 +1,59 @@
<template>
- <div class="system-menu-dialog-container">
- <el-dialog :title="riskUnitDialogState.title" v-model="riskUnitDialogState.riskUnitDialogVisible" width="600px">
- <el-form ref="riskUnitFormRef" :rules="riskUnitDialogState.riskUnitFormRules" :model="riskUnitDialogState.riskUnitForm" size="default" label-width="120px">
- <el-row :gutter="35">
- <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
- <el-form-item label="风险单元编号" prop="riskCode">
- <el-input v-model="riskUnitDialogState.riskUnitForm.riskCode" placeholder="风险单元编号" clearable class="input-length"></el-input>
- </el-form-item>
- </el-col>
- <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
- <el-form-item label="风险单元名称" prop="riskName">
- <el-input v-model="riskUnitDialogState.riskUnitForm.riskName" placeholder="风险单元名称" clearable class="input-length"></el-input>
- </el-form-item>
- </el-col>
- <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
- <el-form-item label="风险单元类型" prop="riskUnitTypeId">
- <el-select v-model="riskUnitDialogState.riskUnitForm.riskUnitTypeId" placeholder="风险单元类型" clearable class="input-length">
- <el-option v-for="item in riskUnitDialogState.riskTypeList" :key="item.id" :label="item.riskType" :value="item.id"></el-option>
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
- <el-form-item label="负责人" prop="liabilityUserId">
- <el-select v-model="riskUnitDialogState.riskUnitForm.liabilityUserId" placeholder="负责人" clearable class="input-length">
- <el-option v-for="item in riskUnitDialogState.allPersonList" :key="item.id" :label="item.personName" :value="item.id"></el-option>
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
- <el-form-item label="负责部门" prop="liabilityDep">
- <el-input v-model="riskUnitDialogState.riskUnitForm.liabilityDep" placeholder="负责部门" clearable class="input-length"></el-input>
- </el-form-item>
- </el-col>
- <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="riskUnitDialogState.experimentType === 1">
- <el-form-item label="基础风险单元" prop="basicRiskUnitId">
- <el-select v-model="riskUnitDialogState.riskUnitForm.basicRiskUnitId" placeholder="基础风险单元" clearable class="input-length">
- <el-option v-for="item in riskUnitDialogState.basicUnitList" :key="item.id" :label="item.riskName" :value="item.id"></el-option>
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
- <el-form-item label="风险单元描述">
- <el-input type="textarea" :rows="3" v-model="riskUnitDialogState.riskUnitForm.description" placeholder="风险单元描述" clearable class="input-length"></el-input>
- </el-form-item>
- </el-col>
- </el-row>
- </el-form>
- <template #footer>
+ <div class="system-menu-dialog-container">
+ <el-dialog :title="riskUnitDialogState.title" v-model="riskUnitDialogState.riskUnitDialogVisible" width="600px">
+ <el-form ref="riskUnitFormRef" :rules="riskUnitDialogState.riskUnitFormRules" :model="riskUnitDialogState.riskUnitForm" size="default" label-width="120px">
+ <el-row :gutter="35">
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="风险单元编号" prop="riskCode">
+ <el-input v-model="riskUnitDialogState.riskUnitForm.riskCode" placeholder="风险单元编号" clearable class="input-length"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="风险单元名称" prop="riskName">
+ <el-input v-model="riskUnitDialogState.riskUnitForm.riskName" placeholder="风险单元名称" clearable class="input-length"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="风险单元类型" prop="riskUnitTypeId">
+ <el-select v-model="riskUnitDialogState.riskUnitForm.riskUnitTypeId" placeholder="风险单元类型" clearable class="input-length">
+ <el-option v-for="item in riskUnitDialogState.riskTypeList" :key="item.id" :label="item.riskType" :value="item.id"></el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="负责人" prop="liabilityUserId">
+ <el-select v-model="riskUnitDialogState.riskUnitForm.liabilityUserId" placeholder="负责人" clearable class="input-length">
+ <el-option v-for="item in riskUnitDialogState.allPersonList" :key="item.id" :label="item.personName" :value="item.id"></el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="负责部门" prop="liabilityDep">
+ <el-input v-model="riskUnitDialogState.riskUnitForm.liabilityDep" placeholder="负责部门" clearable class="input-length"></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="riskUnitDialogState.experimentType === 1">
+ <el-form-item label="基础风险单元" prop="basicRiskUnitId">
+ <el-select v-model="riskUnitDialogState.riskUnitForm.basicRiskUnitId" placeholder="基础风险单元" clearable class="input-length">
+ <el-option v-for="item in riskUnitDialogState.basicUnitList" :key="item.id" :label="item.riskName" :value="item.id"></el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="风险单元描述">
+ <el-input type="textarea" :rows="3" v-model="riskUnitDialogState.riskUnitForm.description" placeholder="风险单元描述" clearable class="input-length"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <template #footer>
<span class="dialog-footer">
<el-button @click="riskUnitDialogState.riskUnitDialogVisible = !riskUnitDialogState.riskUnitDialogVisible" size="default">取 消</el-button>
<el-button type="primary" @click="onSubmitRiskUnit" size="default">确定</el-button>
</span>
- </template>
- </el-dialog>
- </div>
+ </template>
+ </el-dialog>
+ </div>
</template>
<script setup lang="ts">
@@ -65,128 +65,128 @@
const riskUnitFormRef = ref()
const riskUnitDialogState = reactive<RiskUnitDialogType>({
- title: '新增',
- experimentType: 2,
- riskUnitDialogVisible: false,
- riskUnitForm: {
- experimentId: null,
- riskCode: '',
- riskName: '',
- riskUnitTypeId: null,
- liabilityUserId: null,
- liabilityDep: '',
- description: '',
- basicRiskUnitId: null,
- },
- riskUnitFormRules: {
- riskCode: [{ required: true, message: '请填写风险单元编号', trigger: 'blur' }],
- riskName: [{ required: true, message: '请填写风险单元名称', trigger: 'blur' }],
- riskUnitTypeId: [{ required: true, message: '请选择风险单元类型', trigger: 'blur' }],
- liabilityUserId: [{ required: true, message: '请选择负责人', trigger: 'change' }],
- basicRiskUnitId: [{ required: true, message: '请选择基础风险单元', trigger: 'change' }]
- },
- specialDeviceList: [],
- deviceUnitList: [
- {id:1, name: '台'},
- {id:2, name: '个'},
- {id:3, name: '件'}
- ],
- riskTypeList: [],
- basicUnitList: [],
- allPersonList: [],
- allExperimentList: [],
- experimentTypeList: [
- {id: 2, name: '实验风险'},
- {id: 1, name: '固有风险'},
- ],
+ title: '新增',
+ experimentType: 2,
+ riskUnitDialogVisible: false,
+ riskUnitForm: {
+ experimentId: null,
+ riskCode: '',
+ riskName: '',
+ riskUnitTypeId: null,
+ liabilityUserId: null,
+ liabilityDep: '',
+ description: '',
+ basicRiskUnitId: null,
+ },
+ riskUnitFormRules: {
+ riskCode: [{ required: true, message: '请填写风险单元编号', trigger: 'blur' }],
+ riskName: [{ required: true, message: '请填写风险单元名称', trigger: 'blur' }],
+ riskUnitTypeId: [{ required: true, message: '请选择风险单元类型', trigger: 'blur' }],
+ liabilityUserId: [{ required: true, message: '请选择负责人', trigger: 'change' }],
+ basicRiskUnitId: [{ required: true, message: '请选择基础风险单元', trigger: 'change' }]
+ },
+ specialDeviceList: [],
+ deviceUnitList: [
+ {id:1, name: '台'},
+ {id:2, name: '个'},
+ {id:3, name: '件'}
+ ],
+ riskTypeList: [],
+ basicUnitList: [],
+ allPersonList: [],
+ allExperimentList: [],
+ experimentTypeList: [
+ {id: 2, name: '实验风险'},
+ {id: 1, name: '固有风险'},
+ ],
})
const showRiskUnitDialog = (id: number, liabilityUserId: number, basicUnitList: UnitType [], allPersonList: AllPersonListType [], allRiskTypeList: RiskType []) => {
- riskUnitDialogState.riskUnitDialogVisible = true;
- riskUnitDialogState.basicUnitList = basicUnitList
- riskUnitDialogState.allPersonList = allPersonList
- riskUnitDialogState.riskTypeList = allRiskTypeList
- setTimeout(() => {
- riskUnitFormRef.value.clearValidate();
- });
- riskUnitDialogState.riskUnitForm = {
- experimentId: id,
- riskCode: '',
- riskName: '',
- riskUnitTypeId: null,
- liabilityUserId: liabilityUserId,
- liabilityDep: '',
- description: '',
- basicRiskUnitId: null,
- };
+ riskUnitDialogState.riskUnitDialogVisible = true;
+ riskUnitDialogState.basicUnitList = basicUnitList
+ riskUnitDialogState.allPersonList = allPersonList
+ riskUnitDialogState.riskTypeList = allRiskTypeList
+ setTimeout(() => {
+ riskUnitFormRef.value.clearValidate();
+ });
+ riskUnitDialogState.riskUnitForm = {
+ experimentId: id,
+ riskCode: '',
+ riskName: '',
+ riskUnitTypeId: null,
+ liabilityUserId: liabilityUserId,
+ liabilityDep: '',
+ description: '',
+ basicRiskUnitId: null,
+ };
};
const onSubmitRiskUnit = () => {
- riskUnitFormRef.value.validate(async(valid: boolean) => {
- if(valid){
- if(riskUnitDialogState.title === '新增' && riskUnitDialogState.experimentType === 1){
- let { experimentId,basicRiskUnitId} = riskUnitDialogState.riskUnitForm
- let query = { experimentId,basicRiskUnitId }
- let res = await riskUnitApi().addBasicRiskUnit(query);
- if(res.data.code === 100){
- emit('refresh')
- riskUnitDialogState.riskUnitDialogVisible = false;
- ElMessage({
- type: 'success',
- message: '新增成功'
- })
- }else{
- ElMessage({
- type: 'warning',
- message: res.data.msg,
- });
- }
- }else if(riskUnitDialogState.title === '新增' && riskUnitDialogState.experimentType === 2){
- let { basicRiskUnitId, ...query} = riskUnitDialogState.riskUnitForm
- let res = await riskUnitApi().addRiskUnit(query);
- if(res.data.code === 100){
- emit('refresh')
- riskUnitDialogState.riskUnitDialogVisible = false;
- ElMessage({
- type: 'success',
- message: '新增成功'
- })
- }else{
- ElMessage({
- type: 'warning',
- message: res.data.msg,
- });
- }
- }else{
- let res = await riskUnitApi().modRiskUnit(riskUnitDialogState.riskUnitForm)
- if(res.data.code === 100){
- emit('refresh')
- riskUnitDialogState.riskUnitDialogVisible = false;
- ElMessage({
- type: 'success',
- message: '编辑成功'
- })
- }else{
- ElMessage({
- type: 'warning',
- message: res.data.msg,
- });
- }
- }
+ riskUnitFormRef.value.validate(async(valid: boolean) => {
+ if(valid){
+ if(riskUnitDialogState.title === '新增' && riskUnitDialogState.experimentType === 1){
+ let { experimentId,basicRiskUnitId} = riskUnitDialogState.riskUnitForm
+ let query = { experimentId,basicRiskUnitId }
+ let res = await riskUnitApi().addBasicRiskUnit(query);
+ if(res.data.code === 100){
+ emit('refresh')
+ riskUnitDialogState.riskUnitDialogVisible = false;
+ ElMessage({
+ type: 'success',
+ message: '新增成功'
+ })
}else{
- ElMessage({
- type: 'warning',
- message: '请完善基本信息',
- });
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg,
+ });
}
- })
+ }else if(riskUnitDialogState.title === '新增' && riskUnitDialogState.experimentType === 2){
+ let { basicRiskUnitId, ...query} = riskUnitDialogState.riskUnitForm
+ let res = await riskUnitApi().addRiskUnit(query);
+ if(res.data.code === 100){
+ emit('refresh')
+ riskUnitDialogState.riskUnitDialogVisible = false;
+ ElMessage({
+ type: 'success',
+ message: '新增成功'
+ })
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg,
+ });
+ }
+ }else{
+ let res = await riskUnitApi().modRiskUnit(riskUnitDialogState.riskUnitForm)
+ if(res.data.code === 100){
+ emit('refresh')
+ riskUnitDialogState.riskUnitDialogVisible = false;
+ ElMessage({
+ type: 'success',
+ message: '编辑成功'
+ })
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg,
+ });
+ }
+ }
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: '请完善基本信息',
+ });
+ }
+ })
}
const emit = defineEmits(['refresh'])
defineExpose({
- showRiskUnitDialog
+ showRiskUnitDialog
})
</script>
diff --git a/src/views/analyse/assessApply/components/selectDanger.vue b/src/views/analyse/assessApply/components/selectDanger.vue
index 67739bb..3094ea6 100644
--- a/src/views/analyse/assessApply/components/selectDanger.vue
+++ b/src/views/analyse/assessApply/components/selectDanger.vue
@@ -1,38 +1,38 @@
<template>
<tr class="m-color b-font" style="text-align: center">主要危险源或有害因素</tr>
<tr>
- <td class="w-18 m-color">序号</td>
- <td class="w-18 m-color required">危险源或有害因素</td>
- <td class="w-18 m-color required">危险特性</td>
- <td class="w-18 m-color required">数量</td>
- <td class="w-18 m-color required">其他说明</td>
- <td class="w-18 m-color">操作</td>
+ <td class="w-20 m-color">序号</td>
+ <td class="w-20 m-color">危险源或有害因素</td>
+ <td class="w-20 m-color">危险特性</td>
+ <td class="w-20 m-color">数量</td>
+ <td class="w-20 m-color">其他说明</td>
+<!-- <td class="w-18 m-color">操作</td>-->
</tr>
<tr v-for="(item,index) in dangerSourceState.dangerList" :key="index">
- <td class="w-18">
+ <td class="w-20">
{{ index + 1 }}
</td>
- <td class="w-18">
- <el-input :disabled="dangerSourceState.disabled" v-model="item.dangerFactor"></el-input>
+ <td class="w-20">
+ <el-input disabled v-model="item.riskSource"></el-input>
</td>
- <td class="w-18">
- <el-input :disabled="dangerSourceState.disabled" v-model="item.feature"></el-input>
+ <td class="w-20">
+ <el-input disabled v-model="item.riskCharacteristic"></el-input>
</td>
- <td class="w-18">
- <el-input :disabled="dangerSourceState.disabled" type="number" v-model="item.amount"></el-input>
+ <td class="w-20">
+ <el-input disabled type="number" v-model="item.number"></el-input>
</td>
- <td class="w-18">
- <el-input :disabled="dangerSourceState.disabled" v-model="item.info"></el-input>
+ <td class="w-20">
+ <el-input disabled v-model="item.description"></el-input>
</td>
- <td class="w-18">
- <el-button :disabled="dangerSourceState.disabled" type="danger" @click="deleteDangerItem(index)">删除</el-button>
- </td>
+<!-- <td class="w-18">-->
+<!-- <el-button disabled type="danger" @click="deleteDangerItem(index)">删除</el-button>-->
+<!-- </td>-->
</tr>
- <tr style="text-align: center">
- <el-button :disabled="dangerSourceState.disabled" type="primary" shape="round" @click="addDangerItem()">
- 添加行
- </el-button>
- </tr>
+<!-- <tr style="text-align: center">-->
+<!-- <el-button :disabled="dangerSourceState.disabled" type="primary" shape="round" @click="addDangerItem()">-->
+<!-- 添加行-->
+<!-- </el-button>-->
+<!-- </tr>-->
</template>
<script setup lang="ts">
@@ -45,8 +45,7 @@
const dangerSourceState = reactive<DangerSourceType>({
disabled: false,
- dangerList: [
- ],
+ dangerList: [],
classifyList:[
{id:1, name: '有机'},
{id:2, name: '酸'},
@@ -71,7 +70,7 @@
});
const addDangerItem = () => {
- dangerSourceState.dangerList.push({dangerFactor: '', feature: '', amount: null, info: ''});
+ dangerSourceState.dangerList.push({riskSource: '', riskCharacteristic: '', number: null, description: ''});
};
const deleteDangerItem = (index: number) => {
diff --git a/src/views/analyse/assessApply/index.ts b/src/views/analyse/assessApply/index.ts
index 7948ebb..6eeeb97 100644
--- a/src/views/analyse/assessApply/index.ts
+++ b/src/views/analyse/assessApply/index.ts
@@ -6,11 +6,33 @@
title: string
disabled: boolean
reportDialogVisible: boolean
- reportForm: object
+ reportForm: {
+ id: null | number,
+ experimentName: string,
+ experimentType: null | number,
+ personUser: string,
+ personUserId: null | number,
+ personUserPhone: string,
+ safePersonUserId: null | number,
+ safePersonUser: string,
+ safePersonUserPhone: string,
+ dep: string,
+ experimentSite: [],
+ experimentDesc: string,
+ emergencyMeasure: string,
+ assessPerson: string,
+ safeRiskAnalysis: string,
+ assessLevel: null | number,
+ riskSource: [],
+ riskSourceType: [],
+ description: string,
+ person: []
+ }
reportFormRules: object
allPersonList: Array<AllPersonListType>
systemPersonList: Array<AllPersonListType>
- allRoomList: Array<RoomType>
+ allRoomList: Array<RoomType>,
+ experimentTypeList: Array<Type>
}
declare interface DangerSourceType {
diff --git a/src/views/analyse/assessApply/index.vue b/src/views/analyse/assessApply/index.vue
index 3f6b536..aca3df3 100644
--- a/src/views/analyse/assessApply/index.vue
+++ b/src/views/analyse/assessApply/index.vue
@@ -58,15 +58,17 @@
<el-table-column prop="stage" label="评估状态">
<template #default="scope">
<el-tag :type="scope.row.stage == 4?'success':scope.row.stage == 1?'info':''">
- {{scope.row.stage == 1?'未评估':scope.row.status == 2?'评估中':scope.row.status == 3?'评估完成':scope.row.status == 4?'生成报告':'--'}}
+ {{scope.row.stage == 1?'未评估':scope.row.stage == 2?'评估中':scope.row.stage == 3?'评估完成':scope.row.stage == 4?'生成报告':'--'}}
</el-tag>
</template>
</el-table-column>
<el-table-column label="操作" width="250" fixed="right">
<template #default="scope">
+ <el-button size="small" v-if="scope.row.stage == 3" text type="primary" :icon="Edit" @click="toReport(scope.row)">生成评估报告</el-button>
<el-button size="small" text type="primary" :icon="Edit" @click="openRiskDialog(scope.row)">管理实验现实风险</el-button>
- <el-button size="small" text type="primary" :icon="View" @click="openReportDialog('提交', scope.row)">提交综合评估报告审批</el-button>
- <el-button size="small" :disabled="scope.row.status == 2 ? true : false" text type="primary" :icon="Edit" @click="openReportDialog('查看',scope.row)">查看评估报告</el-button>
+ <el-button size="small" v-if="scope.row.stage == 4 && !scope.row.assessPerson" text type="primary" :icon="View" @click="openReportDialog('提交', scope.row)">提交审批</el-button>
+ <el-button size="small" v-if="scope.row.stage == 4 && scope.row.assessPerson" text type="primary" :icon="View" @click="openReportDialog('修改', scope.row)">修改</el-button>
+ <el-button size="small" v-if="scope.row.stage == 4 && scope.row.assessPerson" text type="primary" :icon="Edit" @click="openReportDialog('查看',scope.row)">查看</el-button>
</template>
</el-table-column>
</el-table>
@@ -130,6 +132,32 @@
}
};
+const toReport = (val: ProjectType)=>{
+ ElMessageBox.confirm(`此操作将对该实验生成风险评估报告:“${val.experimentName}”,是否继续?`, '提示', {
+ confirmButtonText: '确认',
+ cancelButtonText: '取消',
+ type: 'warning'
+ })
+ .then(async () => {
+ let res = await assessApplyApi().toRiskReport({ id: val.id });
+ if (res.data.code === 100) {
+ ElMessage({
+ type: 'success',
+ duration: 2000,
+ message: '生成报告成功'
+ });
+ await getAssessData();
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ })
+ .catch((error) => {
+ });
+}
+
const getAllRoom = async () => {
let res = await roomApi().getAllRoom();
if(res.data.code === 100){
@@ -157,7 +185,6 @@
type: 'warning'
})
.then(async () => {
- debugger
let res = await projectApi().deleteProjectById({ id: val.id });
if (res.data.code === 100) {
ElMessage({
diff --git a/src/views/analyse/evaluate/components/evaluateDialog.vue b/src/views/analyse/evaluate/components/evaluateDialog.vue
index 966aac5..3844ef9 100644
--- a/src/views/analyse/evaluate/components/evaluateDialog.vue
+++ b/src/views/analyse/evaluate/components/evaluateDialog.vue
@@ -148,7 +148,7 @@
<el-option v-for="item in evaluateDialogState.evaluateMethodList" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
- <el-button size="default" type="primary" @click="openChangeMethod()">修改评价方法</el-button>
+ <el-button :disabled="evaluateDialogState.disabled" size="default" type="primary" @click="openChangeMethod()">修改评价方法</el-button>
</el-col>
<div class="evaluateCard">
@@ -618,6 +618,7 @@
import {isValidKey, numFloat} from "/@/utils/methods";
import { BigNumber } from 'bignumber.js';
import {identifyApi} from "/@/api/analyse/identify";
+import {ElMessageBox} from "element-plus/es";
const evaluateFormRef = ref()
@@ -801,21 +802,15 @@
setTimeout(() => {
evaluateFormRef.value.clearValidate();
});
- if( value.riskValue){
+ if( title === '评价'){
+ if(value.riskValue){
evaluateDialogState.title = '编辑评价';
for(let i in evaluateDialogState.evaluateForm){
- if(isValidKey(i, evaluateDialogState.evaluateForm)){
- evaluateDialogState.evaluateForm[i] = value[i]
- }
+ if(isValidKey(i, evaluateDialogState.evaluateForm)){
+ evaluateDialogState.evaluateForm[i] = value[i]
+ }
}
- }else if(title === '查看'){
- evaluateDialogState.disabled = true
- for(let i in evaluateDialogState.evaluateForm){
- if(isValidKey(i, evaluateDialogState.evaluateForm)){
- evaluateDialogState.evaluateForm[i] = value[i]
- }
- }
- }else{
+ }else{
evaluateDialogState.title = '评价'
evaluateDialogState.evaluateForm = {
id: null,
@@ -868,6 +863,15 @@
adviseEmergencyMeasure: '',
evaluateDesc: ''
};
+ }
+ }else {
+ evaluateDialogState.title = '查看'
+ evaluateDialogState.disabled = true
+ for(let i in evaluateDialogState.evaluateForm){
+ if(isValidKey(i, evaluateDialogState.evaluateForm)){
+ evaluateDialogState.evaluateForm[i] = value[i]
+ }
+ }
}
evaluateDialogState.evaluateForm.id = value.id as number
evaluateDialogState.evaluateForm.evaluateMethod = value.evaluateMethod as number
@@ -880,24 +884,33 @@
}
const conFirmChange = async () =>{
- let res = await evaluateApi().modEvaluateMethod({
- id: evaluateDialogState.evaluateForm.id,
- evaluateMethodId: evaluateDialogState.evaluateForm.evaluateMethod
- });
- if(res.data.code === 100){
- ElMessage({
- type: 'success',
- message: '评价方法修改成功'
- })
- emit('refresh')
- }else{
- ElMessage({
- type: 'warning',
- message: res.data.msg
- })
- }
- evaluateDialogState.evaluateMethodVisible = false
- evaluateDialogState.evaluateDialogVisible = false
+ ElMessageBox.confirm(`此操作将修改该评价计划的评价方法并清除之前的所有评价信息,是否继续?`, '提示', {
+ confirmButtonText: '确认',
+ cancelButtonText: '取消',
+ type: 'warning'
+ })
+ .then(async () => {
+ let res = await evaluateApi().modEvaluateMethod({
+ id: evaluateDialogState.evaluateForm.id,
+ evaluateMethodId: evaluateDialogState.evaluateForm.evaluateMethod
+ });
+ if(res.data.code === 100){
+ ElMessage({
+ type: 'success',
+ message: '评价方法修改成功'
+ })
+ emit('refresh')
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ })
+ }
+ evaluateDialogState.evaluateMethodVisible = false
+ evaluateDialogState.evaluateDialogVisible = false
+ })
+ .catch((error) => {
+ });
}
const onSubmitEvaluate = () => {
diff --git a/src/views/analyse/evaluate/index.vue b/src/views/analyse/evaluate/index.vue
index 1833e58..5266682 100644
--- a/src/views/analyse/evaluate/index.vue
+++ b/src/views/analyse/evaluate/index.vue
@@ -57,10 +57,11 @@
<el-table-column v-if="scope.row.identificationMethod == 5" prop="analogyReference" label="类比参照" show-overflow-tooltip align="center"></el-table-column>
<el-table-column v-if="scope.row.identificationMethod == 5" prop="analogyRiskFactor" label="存在风险因素" show-overflow-tooltip align="center"></el-table-column>
<el-table-column v-if="scope.row.identificationMethod == 5" prop="analogyResult" label="可能存在后果" show-overflow-tooltip align="center"></el-table-column>
- <el-table-column label="操作" width="250">
- <template #default="scope">
- <el-button size="small" text type="primary" :icon="Plus" @click="openEvaluateDialog('评价', scope.row)">评价</el-button>
- </template>
+ <el-table-column label="操作" width="250" >
+ <template #default="scope2">
+ <el-button size="small" v-if="scope.row.planExecStatus === 3" text type="primary" :icon="Plus" @click="openEvaluateDialog('评价', scope2.row)">评价</el-button>
+ <el-button size="small" v-if="scope2.row.riskValue" text type="primary" :icon="View" @click="openEvaluateDialog('查看', scope2.row)">查看</el-button>
+ </template>
</el-table-column>
</el-table>
</template>
@@ -241,7 +242,7 @@
};
const accessEvaluate = (val: IdentifyType) => {
- ElMessageBox.confirm(`此操作将提交该评价计划:“${val.assessPlanName}”,是否继续?`, '提示', {
+ ElMessageBox.confirm(`此操作将提交该评价计划:“${val.assessPlanName}”的评价信息,是否继续?`, '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning'
diff --git a/src/views/analyse/identify/index.vue b/src/views/analyse/identify/index.vue
index eb0ce8e..ab50465 100644
--- a/src/views/analyse/identify/index.vue
+++ b/src/views/analyse/identify/index.vue
@@ -203,7 +203,7 @@
const accessIdentify = (val: IdentifyType) => {
if(val.factorQueryDTOList?.length > 0){
- ElMessageBox.confirm(`此操作将派发该计划:“${val.assessPlanName}”,是否继续?`, '提示', {
+ ElMessageBox.confirm(`此操作将提交该计划:“${val.assessPlanName}”的辨识信息,是否继续?`, '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning'
diff --git a/src/views/analyse/plan/components/planDialog.vue b/src/views/analyse/plan/components/planDialog.vue
index 3aed91e..a8b570f 100644
--- a/src/views/analyse/plan/components/planDialog.vue
+++ b/src/views/analyse/plan/components/planDialog.vue
@@ -121,35 +121,34 @@
}else if(title === '查看'){
planDialogState.title = '查看';
planDialogState.disabled = true
- planDialogState.planForm.assessTime = [value.assessStartTime, value.assessEndTime]
for(let i in planDialogState.planForm){
if(isValidKey(i, planDialogState.planForm)){
planDialogState.planForm[i] = value[i]
}
}
+ planDialogState.planForm.assessTime=[value.assessStartTime, value.assessEndTime]
+ console.log(value,planDialogState.planForm.assessTime,'time')
}else{
planDialogState.title = '编辑';
planDialogState.planForm.id = value.id
- planDialogState.planForm.assessTime=[value.assessStartTime, value.assessEndTime]
- console.log(planDialogState.planForm.assessTime,'5')
- formatTime()
- console.log(planDialogState.planForm.assessTime,'6 ')
for(let i in planDialogState.planForm){
if(isValidKey(i, planDialogState.planForm)){
planDialogState.planForm[i] = value[i]
}
}
+ planDialogState.planForm.assessTime=[value.assessStartTime, value.assessEndTime]
}
};
const formatTime = () => {
- planDialogState.planForm.assessStartTime = planDialogState.planForm.assessTime === null ? '' : planDialogState.planForm.assessTime[0]
- planDialogState.planForm.assessEndTime = planDialogState.planForm.assessTime === null ? '' : planDialogState.planForm.assessTime[1]
+ planDialogState.planForm.assessStartTime = planDialogState.planForm.assessTime == [] ? '' : planDialogState.planForm.assessTime[0]
+ planDialogState.planForm.assessEndTime = planDialogState.planForm.assessTime == [] ? '' : planDialogState.planForm.assessTime[1]
};
const onSubmitPlan = () => {
planFormRef.value.validate(async(valid: boolean) => {
if(valid){
+ formatTime()
delete planDialogState.planForm.assessTime
if(planDialogState.title === '新增'){
let res = await planApi().addPlan(planDialogState.planForm);
diff --git a/src/views/analyse/plan/index.ts b/src/views/analyse/plan/index.ts
index 7f8001a..c64f94f 100644
--- a/src/views/analyse/plan/index.ts
+++ b/src/views/analyse/plan/index.ts
@@ -11,7 +11,15 @@
identificationMethodList: Array<Type>,
evaluateMethodList: Array<Type>
riskUnitList: Array<RiskUnitType>
- personList: Array<SystemPersonType>
+ personList: Array<SystemPersonType>,
+ reSendTitle:string
+ reSendDialogVisible: boolean
+ reSendForm: {
+ id: null | number,
+ identificationUserId: null | number,
+ evaluateUserId: null | number,
+ },
+ rules: object
}
declare interface SystemPersonType {
@@ -46,7 +54,7 @@
riskUnitId: number | null,
planUserId: number | null,
assessPlanName: string,
- assessTime?: string[],
+ assessTime: string[],
assessStartTime: string,
assessEndTime: string,
identificationUserId: number | null,
diff --git a/src/views/analyse/plan/index.vue b/src/views/analyse/plan/index.vue
index 2417088..3aa9c99 100644
--- a/src/views/analyse/plan/index.vue
+++ b/src/views/analyse/plan/index.vue
@@ -70,7 +70,9 @@
<el-button v-if="scope.row.planSellStatus === 1" size="small" text type="primary" :icon="Edit" @click="openPlanDialog('修改', scope.row)">编辑</el-button>
<el-button v-if="scope.row.identificationUserId == planState.user" size="small" text type="primary" :icon="Edit" @click="refuseIdentify(scope.row)">拒绝辨识</el-button>
<el-button v-if="scope.row.evaluateUserId == planState.user" size="small" text type="primary" :icon="Edit" @click="refuseEvaluate(scope.row)">拒绝评价</el-button>
- <el-button v-if="scope.row.sceneUserId == planState.user" size="small" text type="primary" :icon="Edit" @click="refuseScene(scope.row)">拒绝现场</el-button>
+<!-- <el-button v-if="scope.row.sceneUserId == planState.user" size="small" text type="primary" :icon="Edit" @click="refuseScene(scope.row)">拒绝现场</el-button>-->
+ <el-button v-if="scope.row.identificationUserId == null" size="small" text type="primary" :icon="Edit" @click="reSendJob(scope.row,'identification')">重新指派辨识</el-button>
+ <el-button v-if="scope.row.evaluateUserId == null" size="small" text type="primary" :icon="Edit" @click="reSendJob(scope.row,'evaluate')">重新指派评价</el-button>
<el-button v-if="scope.row.planSellStatus === 1" size="small" text type="danger" :icon="Delete" @click="onDelPlan(scope.row)">删除</el-button>
</template>
</el-table-column>
@@ -82,19 +84,42 @@
</div>
</div>
<plan-dialog ref="planDialogRef" @refresh="getPlanData"></plan-dialog>
+
+ <el-dialog :title="planState.reSendTitle" v-model="planState.reSendDialogVisible" width="50%">
+ <el-form ref="ruleFormRef" :rules="planState.rules" :model="planState.reSendForm" label-width="120px">
+ <el-form-item v-if="planState.reSendTitle == '指派辨识专家'" label="选择辨识专家" prop="identificationUserId">
+ <el-select v-model="planState.reSendForm.identificationUserId" style="width:100%" placeholder="辨识专家" clearable>
+ <el-option v-for="item in planState.personList" :key="item.id" :label="item.realName" :value="item.id"></el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item v-if="planState.reSendTitle == '指派评价专家'" label="选择评价专家" prop="evaluateUserId">
+ <el-select v-model="planState.reSendForm.evaluateUserId" style="width:100%" placeholder="评价专家" clearable>
+ <el-option v-for="item in planState.personList" :key="item.id" :label="item.realName" :value="item.id"></el-option>
+ </el-select>
+ </el-form-item>
+ </el-form>
+ <template #footer>
+ <span class="dialog-footer" style="padding-top:10px;text-align: center !important;">
+ <el-button @click="planState.reSendDialogVisible = !planState.reSendDialogVisible" size="default">取 消</el-button>
+ <el-button type="primary" @click="onSubmitReSend(ruleFormRef)" size="default">确认指派</el-button>
+ </span>
+ </template>
+ </el-dialog>
+
</div>
</template>
<script setup lang="ts">
import {defineAsyncComponent, onMounted, reactive, ref} from "vue";
import {planApi} from "/@/api/analyse/plan";
-import {ElMessage, ElMessageBox} from "element-plus";
+import {ElMessage, ElMessageBox, FormInstance} from "element-plus";
import { Edit, View, Plus, Delete } from '@element-plus/icons-vue';
import {riskUnitApi} from "/@/api/analyse/riskUnit";
import {personApi} from "/@/api/basic/person";
import {useUserInfo} from "/@/stores/userInfo";
import { storeToRefs } from 'pinia';
import {userApi} from "/@/api/systemManage/user";
+import {assessApplyApi} from "/@/api/analyse/assessApply";
const PlanDialog = defineAsyncComponent(() => import('./components/planDialog.vue'));
@@ -102,7 +127,7 @@
const planDialogRef = ref();
const userInfo = useUserInfo();
const { userInfos } = storeToRefs(userInfo);
-
+const ruleFormRef = ref<FormInstance>()
const planState = reactive<PlanStateType>({
planData: [],
user: null,
@@ -117,18 +142,29 @@
],
personList: [],
identificationMethodList: [
- {id:1, name: 'PHA'},
- {id:2, name: 'JHA'},
- {id:3, name: 'SCL'},
- {id:4, name: 'HAZOP'},
- {id:5, name: '类比法'},
-],
- evaluateMethodList: [
- {id:1, name: 'LEC'},
- {id:2, name: 'LS'},
- {id:3, name: 'MES'},
- {id:4, name: 'RS'},
-]
+ {id:1, name: 'PHA'},
+ {id:2, name: 'JHA'},
+ {id:3, name: 'SCL'},
+ {id:4, name: 'HAZOP'},
+ {id:5, name: '类比法'},
+ ],
+ evaluateMethodList: [
+ {id:1, name: 'LEC'},
+ {id:2, name: 'LS'},
+ {id:3, name: 'MES'},
+ {id:4, name: 'RS'},
+ ],
+ reSendTitle:'',
+ reSendDialogVisible: false,
+ reSendForm: {
+ id: null,
+ identificationUserId: null,
+ evaluateUserId: null
+ },
+ rules: {
+ identificationUserId: [{ required: true, message: '请选择辨识专家', trigger: 'blur' }],
+ evaluateUserId: [{ required: true, message: '请选择评价专家', trigger: 'blur' }]
+ }
// deviceUnitList: [
// {id:1, name: '台'},
// {id:2, name: '个'},
@@ -183,55 +219,117 @@
};
const refuseIdentify = async(val: PlanType)=>{
- let res = await planApi().refuseIdentify({ id: val.id });
- if (res.data.code === 100) {
- ElMessage({
- type: 'success',
- duration: 2000,
- message: '拒绝成功'
- });
- await getPlanData();
- } else {
- ElMessage({
- type: 'warning',
- message: res.data.msg
- });
+ ElMessageBox.confirm(`此操作将拒绝作为该计划:“${val.assessPlanName}”的辨识专家,是否继续?`, '提示', {
+ confirmButtonText: '确认',
+ cancelButtonText: '取消',
+ type: 'warning'
+ })
+ .then(async () => {
+ let res = await planApi().refuseIdentify({ id: val.id });
+ if (res.data.code === 100) {
+ ElMessage({
+ type: 'success',
+ duration: 2000,
+ message: '拒绝成功'
+ });
+ await getPlanData();
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ })
+ .catch((error) => {
+ });
+}
+
+const reSendJob= async(val: PlanType,type:string)=>{
+ planState.reSendForm = {
+ id: val.id,
+ identificationUserId: null,
+ evaluateUserId: null
}
+ if(type=='identification'){
+ planState.reSendTitle = '指派辨识专家'
+ }else{
+ planState.reSendTitle = '指派评价专家'
+ }
+ planState.reSendDialogVisible = true
+}
+
+const onSubmitReSend = async (formEl: FormInstance | undefined) => {
+ if (!formEl) return
+ await formEl.validate(async(valid, fields) => {
+ if (valid) {
+ let res = await planApi().reSendJob(planState.reSendForm);
+ if(res.data.code === 100){
+ ElMessage({
+ type: 'success',
+ message: '重新指派成功'
+ });
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+
+ planState.reSendForm = {
+ id: null,
+ identificationUserId: null,
+ evaluateUserId: null
+ },
+ planState.reSendDialogVisible = false
+ getPlanData()
+ } else {
+ console.log('error submit!', fields)
+ }
+ })
}
const refuseEvaluate = async(val: PlanType)=>{
- let res = await planApi().refuseEvaluate({ id: val.id });
- if (res.data.code === 100) {
- ElMessage({
- type: 'success',
- duration: 2000,
- message: '拒绝成功'
- });
- await getPlanData();
- } else {
- ElMessage({
- type: 'warning',
- message: res.data.msg
- });
- }
+ ElMessageBox.confirm(`此操作将拒绝作为该计划:“${val.assessPlanName}”的评价专家,是否继续?`, '提示', {
+ confirmButtonText: '确认',
+ cancelButtonText: '取消',
+ type: 'warning'
+ })
+ .then(async () => {
+ let res = await planApi().refuseEvaluate({ id: val.id });
+ if (res.data.code === 100) {
+ ElMessage({
+ type: 'success',
+ duration: 2000,
+ message: '拒绝成功'
+ });
+ await getPlanData();
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ })
+ .catch((error) => {
+ });
}
-const refuseScene = async(val: PlanType)=>{
- let res = await planApi().refuseScene({ id: val.id });
- if (res.data.code === 100) {
- ElMessage({
- type: 'success',
- duration: 2000,
- message: '拒绝成功'
- });
- await getPlanData();
- } else {
- ElMessage({
- type: 'warning',
- message: res.data.msg
- });
- }
-}
+// const refuseScene = async(val: PlanType)=>{
+// let res = await planApi().refuseScene({ id: val.id });
+// if (res.data.code === 100) {
+// ElMessage({
+// type: 'success',
+// duration: 2000,
+// message: '拒绝成功'
+// });
+// await getPlanData();
+// } else {
+// ElMessage({
+// type: 'warning',
+// message: res.data.msg
+// });
+// }
+// }
const onDelPlan = (val: PlanType) => {
ElMessageBox.confirm(`此操作将永久删除该计划:“${val.assessPlanName}”,是否继续?`, '提示', {
diff --git a/src/views/experiment/developing/index.vue b/src/views/experiment/developing/index.vue
index 624062d..8ee6f9d 100644
--- a/src/views/experiment/developing/index.vue
+++ b/src/views/experiment/developing/index.vue
@@ -64,7 +64,7 @@
<el-table-column prop="stage" label="评估状态">
<template #default="scope">
<el-tag :type="scope.row.stage == 4?'success':scope.row.stage == 1?'info':''">
- {{scope.row.stage == 1?'未评估':scope.row.status == 2?'评估中':scope.row.status == 3?'评估完成':scope.row.status == 4?'生成报告':'--'}}
+ {{scope.row.stage == 1?'未评估':scope.row.stage == 2?'评估中':scope.row.stage == 3?'评估完成':scope.row.stage == 4?'生成报告':'--'}}
</el-tag>
</template>
</el-table-column>
diff --git a/src/views/experiment/project/index.vue b/src/views/experiment/project/index.vue
index 74c5922..c56d58a 100644
--- a/src/views/experiment/project/index.vue
+++ b/src/views/experiment/project/index.vue
@@ -64,7 +64,7 @@
<el-table-column prop="stage" label="评估状态">
<template #default="scope">
<el-tag :type="scope.row.stage == 4?'success':scope.row.stage == 1?'info':''">
- {{scope.row.stage == 1?'未评估':scope.row.status == 2?'评估中':scope.row.status == 3?'评估完成':scope.row.status == 4?'生成报告':'--'}}
+ {{scope.row.stage == 1?'未评估':scope.row.stage == 2?'评估中':scope.row.stage == 3?'评估完成':scope.row.stage == 4?'生成报告':'--'}}
</el-tag>
</template>
</el-table-column>
diff --git a/src/views/loginPage/component/accountLogin.vue b/src/views/loginPage/component/accountLogin.vue
index e0c49dd..8f5c014 100644
--- a/src/views/loginPage/component/accountLogin.vue
+++ b/src/views/loginPage/component/accountLogin.vue
@@ -189,6 +189,7 @@
// 存储 token 到浏览器缓存
let res = await useLoginApi().signIn(state.ruleForm);
if (res.data.code === 100) {
+ console.log(res.data.data,'user')
await userInfo.setUserInfos(res.data.data);
Cookies.set('token', res.data.data.tk);
Cookies.set('uid', res.data.data.uid);
--
Gitblit v1.9.2