From 1536c360aad6a5c33dde3c29c7a83cd44c5c5b8a Mon Sep 17 00:00:00 2001 From: 马宇豪 <978517621@qq.com> Date: 星期三, 09 八月 2023 13:26:38 +0800 Subject: [PATCH] 删除修改 --- /dev/null | 967 -------------------------------------------------- src/views/system/role/index.vue | 14 src/views/system/user/index.vue | 12 src/views/system/home/index.vue | 2 src/views/bigScreen/index.vue | 39 ++ src/views/loginPage/component/accountLogin.vue | 7 src/views/system/user/component/userDialog.vue | 94 ---- 7 files changed, 55 insertions(+), 1,080 deletions(-) diff --git a/src/views/analyse/applyReview/components/reportDialog.vue b/src/views/analyse/applyReview/components/reportDialog.vue deleted file mode 100644 index 66e8843..0000000 --- a/src/views/analyse/applyReview/components/reportDialog.vue +++ /dev/null @@ -1,591 +0,0 @@ -<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 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> - <td class="w-25 m-color required">评估人</td> - <td class="w-75 m-color"> - <!-- <el-select style="width: 100%" :disabled="reportDialogState.disabled" v-model="reportDialogState.reportForm.assessPerson" clearable filterable>--> - <!-- <el-option--> - <!-- v-for="item in reportDialogState.allPersonList"--> - <!-- :key="item.id"--> - <!-- :value="item.id"--> - <!-- :label="item.personName"--> - <!-- ></el-option>--> - <!-- </el-select>--> - <el-input :disabled="reportDialogState.disabled" v-model="reportDialogState.reportForm.assessPerson" placeholder="评估人" /> - </td> - <!-- <td class="w-25 m-color required">评估时间</td>--> - <!-- <td class="w-25 m-color">--> - <!-- <el-date-picker :disabled="reportDialogState.disabled" type="datetime" format="YYYY/MM/DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" v-model="reportDialogState.reportForm.assessTime" />--> - <!-- </td>--> - </tr> - <tr v-if="reportDialogState.reportForm.person?.length>0" class="m-color b-font" style="text-align: center">审批内容</tr> - <template v-if="reportDialogState.reportForm.person?.length>0" 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>--> - <td class="w-25" :class="item.approveStatus==3?'redTit':''">{{item.approveStatus==1?'未审批':item.approveStatus==2?'通过':'未通过'}}</td> - </tr> - <tr> - <td class="w-25 m-color autoheight">审批意见</td> - <td class="w-75 autoheight l-border"> - {{ item.approveDesc }} - </td> - </tr> - </template> - </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({ - pageIndex: 1, - pageSize: 99999, - searchParams:{ - roleId: null, - name: '', - realName: '' - } - }); - 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%; - } - - &.redTit{ - color: red; - } - - &.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 deleted file mode 100644 index 4918cff..0000000 --- a/src/views/analyse/applyReview/components/selectDanger.vue +++ /dev/null @@ -1,181 +0,0 @@ -<template> - <tr class="m-color b-font required" 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: [], -}) - -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; - } - &.required { - &::before { - content: "*"; - display: inline-block; - color: red; - } - } - 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 deleted file mode 100644 index 03349c3..0000000 --- a/src/views/analyse/applyReview/index.ts +++ /dev/null @@ -1,21 +0,0 @@ -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, - isLeader: boolean -} \ No newline at end of file diff --git a/src/views/analyse/applyReview/index.vue b/src/views/analyse/applyReview/index.vue deleted file mode 100644 index e8a7215..0000000 --- a/src/views/analyse/applyReview/index.vue +++ /dev/null @@ -1,373 +0,0 @@ -<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.isLeader == true && (!scope.row.person||(scope.row.person && scope.row.person.length == 0))" :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: '' - }, - 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; - console.log(developState.developData,'developState.developData') - 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() - console.log(userInfos.value.roles,'roles') - 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 deleted file mode 100644 index 462a3c0..0000000 --- a/src/views/analyse/assessApply/components/reportDialog.vue +++ /dev/null @@ -1,612 +0,0 @@ -<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 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> - <td class="w-25 m-color required">评估人</td> - <td class="w-75 m-color"> - <!-- <el-select style="width: 100%" :disabled="reportDialogState.disabled" v-model="reportDialogState.reportForm.assessPerson" clearable filterable>--> - <!-- <el-option--> - <!-- v-for="item in reportDialogState.allPersonList"--> - <!-- :key="item.id"--> - <!-- :value="item.id"--> - <!-- :label="item.personName"--> - <!-- ></el-option>--> - <!-- </el-select>--> - <el-input :disabled="reportDialogState.disabled" v-model="reportDialogState.reportForm.assessPerson" placeholder="评估人" /> - </td> - <!-- <td class="w-25 m-color required">评估时间</td>--> - <!-- <td class="w-25 m-color">--> - <!-- <el-date-picker :disabled="reportDialogState.disabled" type="datetime" format="YYYY/MM/DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" v-model="reportDialogState.reportForm.assessTime" />--> - <!-- </td>--> - </tr> - <tr v-if="reportDialogState.reportForm.person?.length>0" class="m-color b-font" style="text-align: center">审批内容</tr> - <template v-if="reportDialogState.reportForm.person?.length>0" v-for="item in reportDialogState.reportForm.person"> - <tr> - <td class="w-25 m-color">{{item.approveStage}}</td> - <td class="w-25">{{item.approvePerson}}</td> - <td class="w-25 m-color">审批结果</td> - <td class="w-25" :class="item.approveStatus==3?'redTit':''">{{item.approveStatus==1?'未审批':item.approveStatus==2?'通过':'未通过'}}</td> - </tr> - <tr> - <td class="w-25 m-color autoheight">审批意见</td> - <td class="w-75 autoheight l-border"> - {{ item.approveDesc }} - </td> - </tr> - </template> - </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.id) - 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){ - 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){ - reportDialogState.reportForm.riskSource = selectDangerRef.value.dangerSourceState.dangerList - const { id,assessPerson,riskSource,safeRiskAnalysis,assessLevel,description } = reportDialogState.reportForm - const data = { id,assessPerson,riskSource,safeRiskAnalysis,assessLevel,description } - if(reportDialogState.title === '提交报告'){ - 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({ - pageIndex: 1, - pageSize: 99999, - searchParams:{ - roleId: null, - name: '', - realName: '' - } - }); - 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%; - } - -&.redTit{ - color: red; -} - -.ant-input { - height: 100%; - border: none; - background: #f5f7fa; -} - -.ant-picker { - width: 100%; - height: 100%; -} -} -} - -.b-font { - font-size: 16px; - font-weight: bolder; -} -} - -.m-color { - color: #0c4995; -} - -.roomSelect{ - ::v-deep(.el-popper){ - .el-select-dropdown__item{ - height: auto; - padding: 0; - - .roomTable{ - width: 100%; - display: flex; - border-bottom: 1px solid #ebeef5; - - &:last-of-type{ - border-bottom: none; - } - - &>div{ - width: 25%; - border-right: 1px dashed #ebeef5; - &:last-of-type{ - border-right: none; - } - - div{ - width: 100%; - } - .roomTit{ - border-bottom: 1px solid #ebeef5; - } - } - } - } - .el-select-dropdown__item.selected{ - .roomTit{ - color: #606266; - font-weight: normal; - } - } - } -} - -:deep(.el-dialog__footer){ - padding-top: 20px; - display: flex; - justify-content: center; -} - - -</style> diff --git a/src/views/analyse/assessApply/components/riskDialog.vue b/src/views/analyse/assessApply/components/riskDialog.vue deleted file mode 100644 index 9c38d2f..0000000 --- a/src/views/analyse/assessApply/components/riskDialog.vue +++ /dev/null @@ -1,175 +0,0 @@ -<template> - <div class="system-menu-dialog-container"> - <el-dialog title="管理实验现实风险" v-model="assessApplyDialogState.assessApplyDialogVisible" width="60%"> - <div> - <el-button @click="openUnitDialog('新增','', assessApplyDialogState.id)" type="primary" style="margin-bottom: 20px" size="default">增加风险分析单元</el-button> - </div> - <el-table ref="multipleTableRef" :data="assessApplyDialogState.riskUnitData" style="width: 100%" :header-cell-style="{ background: '#fafafa' }"> - <el-table-column prop="riskCode" label="风险单元编号"/> - <el-table-column prop="riskName" label="风险单元名称"/> - <el-table-column prop="riskType" label="风险类型"> - <template #default="scope"> - <span>{{`${assessApplyDialogState.riskList.find(item =>item.id === scope.row.riskType)?.name || ''}`}}</span> - </template> - </el-table-column> - <el-table-column prop="riskUnitType" label="风险单元类型"/> - <el-table-column prop="riskUnitType" label="负责人"> - <template #default="scope"> - <span>{{`${assessApplyDialogState.allPersonList.find(item =>item.id === scope.row.liabilityUserId)?.personName || ''}`}}</span> - </template> - </el-table-column> - <el-table-column prop="evaluateStatus" label="是否评价"> - <template #default="scope"> - <span>{{scope.row.evaluateStatus == 1?'未评价':scope.row.evaluateStatus == 2?'已评价':'--'}}</span> - </template> - </el-table-column> - <el-table-column label="操作" width="150" align="center"> - <template #default="scope"> - <el-button size="default" text type="primary" @click="openUnitDialog('查看', scope.row, assessApplyDialogState.id)">查看</el-button> - <el-button size="default" text type="primary" @click="openUnitDialog('编辑', scope.row, assessApplyDialogState.id)">编辑</el-button> - <el-button size="default" text type="danger" @click="deleteUnit(scope.$index, scope.row)">删除</el-button> - </template> - </el-table-column> - </el-table> - <template #footer> - <span class="dialog-footer"> - <el-button @click="assessApplyDialogState.assessApplyDialogVisible = !assessApplyDialogState.assessApplyDialogVisible" type="primary" size="default">确定</el-button> - </span> - </template> - <risk-unit-dialog ref="riskUnitDialogRef" @refresh="getRiskData"></risk-unit-dialog> - </el-dialog> - </div> -</template> - -<script setup lang="ts"> -import {defineAsyncComponent, onMounted, reactive, ref} from "vue"; -import {ElMessage} from "element-plus"; -import {projectApi} from "/@/api/experiment/project"; -import {personApi} from "/@/api/basic/person"; -import {riskUnitApi} from "/@/api/analyse/riskUnit"; -import {unitApi} from "/@/api/basic/unit"; -import {userApi} from "/@/api/systemManage/user"; -import {ElMessageBox} from "element-plus/es"; -import {identifyApi} from "/@/api/analyse/identify"; -const RiskUnitDialog = defineAsyncComponent(() => import('./riskUnitDialog.vue')); - -const assessApplyDialogState = reactive<AssessApplyDialogStateType>({ - title: '', - riskUnitData: [], - assessApplyDialogVisible: false, - id: null, - liabilityUserId: null, - riskList: [ - {id: 1, name: '固有风险'}, - {id:2, name: '实验风险'} - ], - basicUnitList: [], - allPersonList: [], - allRiskTypeList: [] -}) - -const riskUnitDialogRef = ref() - -const showRiskDialog = (value: ProjectType) => { - assessApplyDialogState.assessApplyDialogVisible = true; - assessApplyDialogState.id = <number>value.id - assessApplyDialogState.liabilityUserId = <number>value.liabilityUserId - getRiskData() -}; - -const openUnitDialog = (title: string, val, id: number) => { - riskUnitDialogRef.value.showRiskUnitDialog(title, val, id, assessApplyDialogState.basicUnitList, assessApplyDialogState.allPersonList, assessApplyDialogState.allRiskTypeList); -}; - -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{ - ElMessage({ - type: 'warning', - message: res.data.msg - }) - } -}; - -const getAllBasicUnitList = async () => { - let res = await unitApi().getAllUnit(); - if(res.data.code === 100){ - assessApplyDialogState.basicUnitList = JSON.parse(JSON.stringify(res.data.data)); - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }) - } -}; - -const getAllPersonList = async () => { - let res = await personApi().getAllPerson(); - if(res.data.code === 100){ - assessApplyDialogState.allPersonList = JSON.parse(JSON.stringify(res.data.data)); - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }) - } -}; - -const getAllTypeList = async () =>{ - let res = await unitApi().getAllUnitType() - if(res.data.code === 100){ - assessApplyDialogState.allRiskTypeList = JSON.parse(JSON.stringify(res.data.data)); - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }) - } -} - -const deleteUnit = (index: number, val: IdentifyType) => { - ElMessageBox.confirm(`此操作将永久删除该风险单元,是否继续?`, '提示', { - confirmButtonText: '确认', - cancelButtonText: '取消', - type: 'warning' - }) - .then(async () => { - let data = { id: val.id } - let res = await unitApi().deleteRiskUnitById(data); - if (res.data.code === 100) { - (<Array<IdentifyType>>assessApplyDialogState.riskUnitData).splice(index, 1) - ElMessage({ - type: 'success', - duration: 2000, - message: '删除成功' - }); - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - }) - .catch((error) => { - console.log(error); - }); -}; - -const emit = defineEmits(['refresh']) - -defineExpose({ - showRiskDialog -}) - -onMounted(() => { - getAllBasicUnitList() - getAllPersonList() - getAllTypeList() -}) -</script> - -<style scoped> - -</style> diff --git a/src/views/analyse/assessApply/components/riskUnitDialog.vue b/src/views/analyse/assessApply/components/riskUnitDialog.vue deleted file mode 100644 index edf1305..0000000 --- a/src/views/analyse/assessApply/components/riskUnitDialog.vue +++ /dev/null @@ -1,199 +0,0 @@ -<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" :disabled="riskUnitDialogState.disabled" 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" :disabled="riskUnitDialogState.disabled" 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" :disabled="riskUnitDialogState.disabled" 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" :disabled="riskUnitDialogState.disabled" 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" :disabled="riskUnitDialogState.disabled" 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" :disabled="riskUnitDialogState.disabled" 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" :disabled="riskUnitDialogState.disabled" 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" v-if="!riskUnitDialogState.disabled" size="default">确定</el-button> - </span> - </template> - </el-dialog> - </div> -</template> - -<script setup lang="ts"> -import { reactive, ref } from "vue"; -import { isValidKey } from "/@/utils/methods"; -import {ElMessage} from "element-plus"; -import {riskUnitApi} from "/@/api/analyse/riskUnit"; - -const riskUnitFormRef = ref() - -const riskUnitDialogState = reactive<RiskUnitDialogType>({ - title: '', - experimentType: 2, - disabled: false, - riskUnitDialogVisible: false, - riskUnitForm: { - id: null, - 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 = (title: string, val, id: number, basicUnitList: UnitType [], allPersonList: AllPersonListType [], allRiskTypeList: RiskType []) => { - riskUnitDialogState.riskUnitDialogVisible = true; - riskUnitDialogState.basicUnitList = basicUnitList - riskUnitDialogState.allPersonList = allPersonList - riskUnitDialogState.riskTypeList = allRiskTypeList - riskUnitDialogState.disabled = false - setTimeout(() => { - riskUnitFormRef.value.clearValidate(); - }); - if(title === '新增'){ - riskUnitDialogState.title = '新增'; - riskUnitDialogState.riskUnitForm = { - id: null, - experimentId: id, - riskCode: '', - riskName: '', - riskUnitTypeId: null, - liabilityUserId: null, - liabilityDep: '', - description: '', - basicRiskUnitId: null, - }; - }else if(title === '查看'){ - riskUnitDialogState.title = '查看'; - riskUnitDialogState.disabled = true - for(let i in riskUnitDialogState.riskUnitForm){ - if(isValidKey(i, riskUnitDialogState.riskUnitForm)){ - riskUnitDialogState.riskUnitForm[i] = val[i]; - } - } - }else{ - riskUnitDialogState.title = '编辑'; - for(let i in riskUnitDialogState.riskUnitForm){ - if(isValidKey(i, riskUnitDialogState.riskUnitForm)){ - riskUnitDialogState.riskUnitForm[i] = val[i]; - } - } - } -}; - -const onSubmitRiskUnit = () => { - riskUnitFormRef.value.validate(async(valid: boolean) => { - if(valid){ - if(riskUnitDialogState.title === '新增'){ - let { id, basicRiskUnitId, ...query} = riskUnitDialogState.riskUnitForm - let res = await riskUnitApi().addRiskUnit(query); - if(res.data.code === 100){ - emit('refresh') - riskUnitDialogState.riskUnitDialogVisible = false; - ElMessage({ - type: 'success', - message: '新增成功' - }) - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg, - }); - } - }else{ - let res = await riskUnitApi().modRiskUnit(riskUnitDialogState.riskUnitForm) - if(res.data.code === 100){ - emit('refresh') - riskUnitDialogState.riskUnitDialogVisible = false; - ElMessage({ - type: 'success', - message: '编辑成功' - }) - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg, - }); - } - } - }else{ - ElMessage({ - type: 'warning', - message: '请完善基本信息', - }); - } - }) -} - -const emit = defineEmits(['refresh']) - -defineExpose({ - showRiskUnitDialog -}) -</script> - -<style scoped> - -</style> diff --git a/src/views/analyse/assessApply/components/selectDanger.vue b/src/views/analyse/assessApply/components/selectDanger.vue deleted file mode 100644 index 3e051ef..0000000 --- a/src/views/analyse/assessApply/components/selectDanger.vue +++ /dev/null @@ -1,181 +0,0 @@ -<template> - <tr class="m-color b-font required" style="text-align: center">主要危险源或有害因素</tr> - <tr> - <td class="w-16 m-color">序号</td> - <td class="w-16 m-color">危险源或有害因素</td> - <td class="w-16 m-color">危险特性</td> - <td class="w-16 m-color">数量</td> - <td class="w-16 m-color">其他说明</td> - <td class="w-16 m-color">操作</td> - </tr> - <tr v-for="(item,index) in dangerSourceState.dangerList" :key="index"> - <td class="w-16"> - {{ index + 1 }} - </td> - <td class="w-16"> - <el-input :disabled="dangerSourceState.disabled" v-model="item.riskSource"></el-input> - </td> - <td class="w-16"> - <el-input :disabled="dangerSourceState.disabled" v-model="item.riskCharacteristic"></el-input> - </td> - <td class="w-16"> - <el-input :disabled="dangerSourceState.disabled" type="number" v-model="item.number"></el-input> - </td> - <td class="w-16"> - <el-input :disabled="dangerSourceState.disabled" v-model="item.description"></el-input> - </td> - <td class="w-16"> - <el-button :disabled="dangerSourceState.disabled" type="danger" @click="deleteDangerItem(index)">删除</el-button> - </td> - </tr> - <tr style="text-align: center"> - <el-button :disabled="dangerSourceState.disabled" type="primary" shape="round" @click="addDangerItem()"> - 添加行 - </el-button> - </tr> -</template> - -<script setup lang="ts"> -import {reactive, watchEffect} from "vue"; - -let props = defineProps({ - disabled: Boolean, - data: Array<DangerListType> -}); - -const dangerSourceState = reactive<DangerSourceType>({ - disabled: false, - dangerList: [] -}) - -watchEffect(() => { - dangerSourceState.dangerList = props.data as Array<DangerListType> - dangerSourceState.disabled = props.disabled - console.log(dangerSourceState.dangerList,'dangerSourceState.dangerList') -}); - -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({ - dangerSourceState -}); - -</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; - } - &.required { - &::before { - content: "*"; - display: inline-block; - color: red; - } - } - td { - border-right: 1px solid #ccc; - display: inline-block; - height: 44px; - vertical-align: middle; - text-align: center; - line-height: 42px; - - &:last-of-type { - border-right: none; - } - - &.required { - &::before { - content: "*"; - display: inline-block; - color: red; - } - } - - &.w-14 { - width: calc((100/7)/100 * 100%); - } - - &.w-16 { - width: calc((100/6)/100 * 100%); - } - - &.w-18 { - width: 16.59%; - } - - &.w-20 { - width: 20%; - } - - &.w-25 { - width: 25%; - } - - &.w-50 { - width: 50%; - } - - &.w-75 { - width: 75%; - } - - .ant-input { - height: 100%; - border: none; - background: #f5f7fa; - } - - .ant-picker { - width: 100%; - height: 100%; - } - } - } - - .b-font { - font-size: 16px; - font-weight: bolder; - } -} - -.m-color { - color: #0c4995; -} -:deep(.el-input__wrapper ){ - box-shadow: none; -} -</style> diff --git a/src/views/analyse/assessApply/index.ts b/src/views/analyse/assessApply/index.ts deleted file mode 100644 index 8e28d84..0000000 --- a/src/views/analyse/assessApply/index.ts +++ /dev/null @@ -1,66 +0,0 @@ -declare interface ReportStateType { - -} - -declare interface ReportDialogType { - title: string - disabled: boolean - reportDialogVisible: boolean - 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>, - experimentTypeList: Array<Type> -} - -declare interface DangerSourceType { - disabled: boolean - dangerList: Array<DangerListType> -} - - -declare interface DangerListType { - riskSource: string - riskCharacteristic: string - number: null | number - description: string -} - -declare interface AssessApplyDialogStateType { - title: string, - assessApplyDialogVisible: boolean, - id: number | null, - liabilityUserId: number | null, - riskUnitData: Array<any>, - riskList: Array<type>, - basicUnitList: Array<UnitType> - allPersonList: Array<AllPersonListType> - allRiskTypeList: Array<RiskType> -} - -declare interface type { - id: number, - name: string -} \ No newline at end of file diff --git a/src/views/analyse/assessApply/index.vue b/src/views/analyse/assessApply/index.vue deleted file mode 100644 index b593b5a..0000000 --- a/src/views/analyse/assessApply/index.vue +++ /dev/null @@ -1,379 +0,0 @@ -<template> - <div class="home-container"> - <div style="height: 100%"> - <el-row class="homeCard"> - <div class="basic-line"> - <span>实验名称:</span> - <el-input v-model="developState.searchQuery.searchParams.experimentName" clearable filterable class="input-box" placeholder="实验名称"> - </el-input> - </div> - <div class="basic-line"> - <span>实验类型:</span> - <el-select v-model="developState.searchQuery.searchParams.experimentType" clearable filterable class="input-box" placeholder="实验类型"> - <el-option v-for="item in developState.experimentTypeList" :key="item.id" :label="item.name" :value="item.id"></el-option> - </el-select> - </div> - <div style="padding-bottom: 10px"> - <el-button type="primary" @click="getAssessData">查询</el-button> - <el-button plain @click="reset">重置</el-button> - </div> - </el-row> - <div class="homeCard"> - <div class="main-card"> - <el-row class="cardTop"> - </el-row> - <el-table ref="multipleTableRef" :data="developState.developData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }"> - <el-table-column prop="experimentCode" label="实验编号"/> - <el-table-column prop="experimentName" label="实验名称"/> - <el-table-column prop="createExperimentTime" label="立项时间"> - <template #default="scope"> - <span>{{scope.row.createExperimentTime?scope.row.createExperimentTime.substring(0,16):'--'}}</span> - </template> - </el-table-column> - <el-table-column prop="startTime" label="开展时间" show-overflow-tooltip> - <template #default="scope"> - <span>{{scope.row.startTime?scope.row.startTime.substring(0,16):'--'}}</span> - </template> - </el-table-column> - <el-table-column prop="siteList" label="实验场所" show-overflow-tooltip> - <template #default="scope"> - <span>{{scope.row.siteList.map(i=>i.siteName).join(',')}}</span> - </template> - </el-table-column> - <el-table-column prop="experimentType" label="实验类别"> - <template #default="scope"> - <span>{{developState.experimentTypeList.find(i=>i.id == scope.row.experimentType)?.name}}</span> - </template> - </el-table-column> - <el-table-column prop="status" label="评估申请"> - <template #default="scope"> - <span>{{scope.row.status == 1?'未申请':scope.row.status == 2?'已申请':'--'}}</span> - </template> - </el-table-column> - <el-table-column prop="status" label="评估申请时间" show-overflow-tooltip> - <template #default="scope"> - <span>{{scope.row.assessApplyTime?scope.row.assessApplyTime.substring(0,16):'--'}}</span> - </template> - </el-table-column> - <el-table-column prop="stage" label="评估状态"> - <template #default="scope"> - <el-tag :type="scope.row.stage == 4?'success':scope.row.stage == 1?'info':''"> - {{scope.row.stage == 1?'未评估':scope.row.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" 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> - <div class="pageBtn"> - <el-pagination @size-change="onHandleSizeChange" @current-change="onHandleCurrentChange" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="developState.searchQuery.pageIndex" background v-model:page-size="developState.searchQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="developState.total" class="page-position"> </el-pagination> - </div> - </div> - </div> - </div> - <risk-dialog ref="RiskDialogRef" @refresh="getAssessData"></risk-dialog> - <report-dialog ref="ReportDialogRef" @refresh="getAssessData"></report-dialog> - </div> -</template> - -<script setup lang="ts"> -import {defineAsyncComponent, onMounted, reactive, ref} from "vue"; -import {projectApi} from "/@/api/experiment/project"; -import {ElMessage, ElMessageBox} from "element-plus"; -import { View,Edit, Plus, RefreshLeft } from '@element-plus/icons-vue'; -import {roomApi} from "/@/api/basic/room"; -import {assessApplyApi} from "/@/api/analyse/assessApply"; - -const RiskDialog = defineAsyncComponent(() => import('./components/riskDialog.vue')); -const ReportDialog = defineAsyncComponent(() => import('./components/reportDialog.vue')); - -const RiskDialogRef = ref(); - -const ReportDialogRef = ref(); -const developState = reactive<ProjectStateType>({ - developData: [], - searchQuery: { - pageIndex: 1, - pageSize: 10, - searchParams: { - experimentName: '', - experimentType: null, - } - }, - total: 0, - experimentTypeList: [ - {id: 1, name: '化学类'}, - {id: 2, name: '生物类'}, - {id: 3, name: '辐射类'}, - {id: 4, name: '机电类'}, - {id: 5, name: '特种设备类'}, - {id: 6, name: '其它类'}, - ], - allRoomList: [] -}) - -const getAssessData = async () => { - let res = await assessApplyApi().getData(developState.searchQuery); - if(res.data.code === 100){ - developState.developData = res.data.data; - developState.total = res.data.total; - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } -}; - -const 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){ - developState.allRoomList = JSON.parse(JSON.stringify(res.data.data)); - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }) - } -}; - -const openRiskDialog = (value: ProjectType) => { - RiskDialogRef.value.showRiskDialog(value); -}; - -const openReportDialog = (title: string,value: ProjectType) =>{ - ReportDialogRef.value.showReportDialog(title, value, developState.allRoomList); -} - -const onDelProject = (val: ProjectType) => { - ElMessageBox.confirm(`此操作将永久删除该实验:“${val.experimentCode}”,是否继续?`, '提示', { - confirmButtonText: '确认', - cancelButtonText: '取消', - type: 'warning' - }) - .then(async () => { - let res = await projectApi().deleteProjectById({ id: val.id }); - if (res.data.code === 100) { - ElMessage({ - type: 'success', - duration: 2000, - message: '删除成功' - }); - await getAssessData(); - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - }) - .catch((error) => { - }); -} - -const onHandleSizeChange = (val: number) => { - developState.searchQuery.pageSize = val; - getAssessData(); -}; - -const onHandleCurrentChange = (val: number) => { - developState.searchQuery.pageIndex = val; - getAssessData(); -}; - -const reset = () => { - developState.searchQuery = { - pageIndex: 1, - pageSize: 10, - searchParams: { - experimentName: '', - experimentType: null, - } - } -}; - -onMounted(() => { - getAssessData() - getAllRoom() -}) - -</script> - -<style scoped lang="scss"> -$homeNavLengh: 8; -.home-container { - height: calc(100vh - 144px); - box-sizing: border-box; - overflow: hidden; - .homeCard { - width: 100%; - padding: 20px; - box-sizing: border-box; - background: #fff; - border-radius: 4px; - - .main-card { - width: 100%; - height: 100%; - .cardTop { - display: flex; - align-items: center; - justify-content: space-between; - margin-bottom: 20px; - .mainCardBtn { - margin: 0; - } - } - .pageBtn { - height: 60px; - display: flex; - align-items: center; - justify-content: right; - - .demo-pagination-block + .demo-pagination-block { - margin-top: 10px; - } - .demo-pagination-block .demonstration { - margin-bottom: 16px; - } - } - } - &:last-of-type { - height: calc(100% - 100px); - } - } - .el-row { - display: flex; - align-items: center; - margin-bottom: 20px; - &:last-child { - margin-bottom: 0; - } - .grid-content { - align-items: center; - min-height: 36px; - } - - .topInfo { - display: flex; - align-items: center; - font-size: 16px; - font-weight: bold; - - & > div { - white-space: nowrap; - margin-right: 20px; - } - } - } -} -.stepItem { - width: 100%; - display: flex; - align-items: flex-start; - margin-bottom: 30px; - margin-left: 30px; - padding-bottom: 30px; - border-left: 2px solid #ccc; - &:first-of-type { - margin-top: 30px; - } - &:last-of-type { - margin-bottom: 0; - border-left: none; - } - .stepNum { - width: 30px; - height: 30px; - border-radius: 15px; - box-sizing: border-box; - color: #333; - border: 1px solid #999; - line-height: 28px; - text-align: center; - margin-right: 10px; - margin-left: -16px; - margin-top: -30px; - } - .stepCard { - width: 100%; - margin-top: -30px; - - .box-card { - width: 100%; - &:deep(.el-card__header) { - padding: 10px 15px; - } - .card-header { - width: 100%; - display: flex; - justify-content: space-between; - align-items: center; - & > div:first-of-type { - margin-right: 80px; - font-size: 18px; - font-weight: bold; - } - } - } - } - &:hover .card-header { - color: #0098f5; - } - &:hover .stepNum { - border: 2px solid #0098f5; - color: #0098f5; - } -} - -:deep(.el-date-editor) { - width: 100%; -} -.el-select { - width: 100%; -} -:deep(.el-textarea.is-disabled .el-textarea__inner) { - background-color: var(--el-card-bg-color); - color: var(--el-input-text-color, var(--el-text-color-regular)); -} -:deep(.el-input.is-disabled .el-input__inner) { - color: var(--el-input-text-color, var(--el-text-color-regular)); -} -:deep(.el-input.is-disabled .el-input__wrapper) { - background-color: var(--el-card-bg-color); - box-shadow: none; -} -</style> diff --git a/src/views/analyse/evaluate/components/evaluateDialog.vue b/src/views/analyse/evaluate/components/evaluateDialog.vue deleted file mode 100644 index 145d202..0000000 --- a/src/views/analyse/evaluate/components/evaluateDialog.vue +++ /dev/null @@ -1,1204 +0,0 @@ -<template> - <div class="system-menu-dialog-container"> - <el-dialog :title="evaluateDialogState.title" v-model="evaluateDialogState.evaluateDialogVisible" width="70%"> - <el-form ref="evaluateFormRef" :rules="evaluateDialogState.evaluateFormRules" :model="evaluateDialogState.evaluateForm" size="default" label-width="140px"> - <el-row :gutter="35"> -<!-- <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">--> -<!-- <el-form-item label="评估计划" prop="id">--> -<!-- <el-select class="input-length" :disabled="true" v-model="evaluateDialogState.evaluateForm.id" style="width:100%" placeholder="评估计划" clearable>--> -<!-- <el-option v-for="item in evaluateDialogState.planList" :key="item.id" :label="item.assessPlanName" :value="item.id"></el-option>--> -<!-- </el-select>--> -<!-- </el-form-item>--> -<!-- </el-col>--> -<!-- <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">--> -<!-- <el-form-item label="风险数值" prop="riskValue">--> -<!-- <el-input type="number" class="input-length" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.riskValue" style="width:100%" placeholder="风险数值">--> -<!-- </el-input>--> -<!-- </el-form-item>--> -<!-- </el-col>--> - - <div class="evaluateCard"> - <div class="cardTit"> - <span v-if="evaluateDialogState.evaluateForm.identificationMethod === 1">PHA辨识法</span> - <span v-if="evaluateDialogState.evaluateForm.identificationMethod === 2">JHA辨识法</span> - <span v-if="evaluateDialogState.evaluateForm.identificationMethod === 3">SCL辨识法</span> - <span v-if="evaluateDialogState.evaluateForm.identificationMethod === 4">HAZOP辨识法</span> - <span v-if="evaluateDialogState.evaluateForm.identificationMethod === 5">类比辨识法</span> - </div> - <div v-if="evaluateDialogState.evaluateForm.identificationMethod === 1"> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="检查项目"> - <el-input class="input-length" disabled v-model="evaluateDialogState.evaluateInfo.phaCheckItem" placeholder="检查项目" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="存在风险因素"> - <el-input class="input-length" disabled v-model="evaluateDialogState.evaluateInfo.phaRiskFactor" placeholder="存在风险因素" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="可能产生的后果"> - <el-input class="input-length" disabled v-model="evaluateDialogState.evaluateInfo.phaResult" placeholder="可能产生的后果" clearable></el-input> - </el-form-item> - </el-col> - </div> - <div v-if="evaluateDialogState.evaluateForm.identificationMethod === 2"> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="作业步骤"> - <el-input class="input-length" disabled v-model="evaluateDialogState.evaluateInfo.jhaCheckItem" placeholder="作业步骤" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="危险源或潜在事件"> - <el-input class="input-length" disabled v-model="evaluateDialogState.evaluateInfo.jhaRiskFactor" placeholder="危险源或潜在事件" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="可能产生的后果"> - <el-input class="input-length" disabled v-model="evaluateDialogState.evaluateInfo.jhaResult" placeholder="可能产生的后果" clearable></el-input> - </el-form-item> - </el-col> - </div> - <div v-if="evaluateDialogState.evaluateForm.identificationMethod === 3"> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="检查项目"> - <el-input class="input-length" disabled v-model="evaluateDialogState.evaluateInfo.sclCheckItem" placeholder="检查项目" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="检查标准"> - <el-input class="input-length" disabled v-model="evaluateDialogState.evaluateInfo.sclCheckStandard" placeholder="检查标准" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="不符合标准情况"> - <el-input class="input-length" disabled v-model="evaluateDialogState.evaluateInfo.sclCheckUnstandard" placeholder="不符合标准情况" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="主要后果"> - <el-input class="input-length" disabled v-model="evaluateDialogState.evaluateInfo.sclCheckResult" placeholder="主要后果" clearable></el-input> - </el-form-item> - </el-col> - </div> - <div v-if="evaluateDialogState.evaluateForm.identificationMethod === 4"> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="节点"> - <el-input class="input-length" disabled v-model="evaluateDialogState.evaluateInfo.hazopNode" placeholder="HAZOP_节点" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="参数"> - <el-input class="input-length" disabled v-model="evaluateDialogState.evaluateInfo.hazopParam" placeholder="HAZOP_参数" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="参数描述"> - <el-input class="input-length" disabled v-model="evaluateDialogState.evaluateInfo.hazopParamDesc" placeholder="HAZOP_参数描述" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="引导词"> - <el-input class="input-length" disabled v-model="evaluateDialogState.evaluateInfo.hazopGuide" placeholder="HAZOP_引导词" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="偏差"> - <el-input class="input-length" disabled v-model="evaluateDialogState.evaluateInfo.hazopDeviation" placeholder="HAZOP_偏差" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="可能原因"> - <el-input class="input-length" disabled v-model="evaluateDialogState.evaluateInfo.hazopPossibleCauses" placeholder="HAZOP_可能原因" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="主要后果"> - <el-input class="input-length" disabled v-model="evaluateDialogState.evaluateInfo.hazopResult" placeholder="HAZOP_主要后果" clearable></el-input> - </el-form-item> - </el-col> - </div> - <div v-if="evaluateDialogState.evaluateForm.identificationMethod === 5"> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="检查项目" prop="analogyCheckItem"> - <el-input class="input-length" disabled v-model="evaluateDialogState.evaluateInfo.analogyCheckItem" placeholder="检查项目" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="类比参照" prop="analogyReference"> - <el-input class="input-length" disabled v-model="evaluateDialogState.evaluateInfo.analogyReference" placeholder="类比参照" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="存在风险因素" prop="analogyRiskFactor"> - <el-input class="input-length" disabled v-model="evaluateDialogState.evaluateInfo.analogyRiskFactor" placeholder="存在风险因素" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="可能产生的后果" prop="analogyResult"> - <el-input class="input-length" disabled v-model="evaluateDialogState.evaluateInfo.analogyResult" placeholder="可能产生的后果" clearable></el-input> - </el-form-item> - </el-col> - </div> - </div> - - <el-col style="display: flex;align-items: center" :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="评价方法" style="width: 80% !important;"> - <el-select class="input-length" disabled v-model="evaluateDialogState.evaluateForm.evaluateMethod" style="width:100%" placeholder="评价方法" clearable> - <el-option v-for="item in evaluateDialogState.evaluateMethodList" :key="item.id" :label="item.name" :value="item.id"></el-option> - </el-select> - </el-form-item> - <el-button :disabled="evaluateDialogState.disabled" size="default" type="primary" @click="openChangeMethod()">修改评价方法</el-button> - </el-col> - - <div class="evaluateCard"> - <div class="cardTit"> - <span>固有风险评分</span> - </div> - <div class="valueSelect" v-if="evaluateDialogState.evaluateMethod === 1"> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="LEC_L" prop="originalLecL"> - <el-select class="input-length" :teleported="false" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.originalLecL" @change="calcOriginScore('lec')" style="width:100%" placeholder="LEC_L的数值" clearable> - <el-option v-for="item in evaluateDialogState.listLecL" :key="item.value" :label="item.value" :value="item.value"> - <div class="valueTable"> - <div><div>分值:</div><span>{{item.value}}</span></div> - <div><div>标准:</div><span>{{item.desc}}</span></div> - </div> - </el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="LEC_E" prop="originalLecE"> - <el-select class="input-length" :teleported="false" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.originalLecE" @change="calcOriginScore('lec')" style="width:100%" placeholder="LEC_E的数值" clearable> - <el-option v-for="item in evaluateDialogState.listLecE" :key="item.value" :label="item.value" :value="item.value"> - <div class="valueTable"> - <div><div>分值:</div><span>{{item.value}}</span></div> - <div><div>标准:</div><span>{{item.desc}}</span></div> - </div> - </el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="LEC_C" prop="originalLecC"> - <el-select class="input-length" :teleported="false" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.originalLecC" @change="calcOriginScore('lec')" style="width:100%" placeholder="LEC_C的数值" clearable> - <el-option v-for="item in evaluateDialogState.listLecC" :key="item.value" :label="item.value" :value="item.value"> - <div class="valueTable"> - <div class="longTit"><div>分值:</div><span>{{item.value}}</span></div> - <div class="longTit"><div>人员伤亡:</div><span>{{item.person}}</span></div> - <div class="longTit"><div>直接经济损失:</div><span>{{item.money}}</span></div> - <div class="longTit"><div>停工情况:</div><span>{{item.stopWork}}</span></div> - <div class="longTit"><div>企业形象:</div><span>{{item.company}}</span></div> - <div class="longTit"><div>法律,法规及其它要求:</div><span>{{item.desc}}</span></div> - </div> - </el-option> - </el-select> - </el-form-item> - </el-col> - </div> - <div class="valueSelect" v-if="evaluateDialogState.evaluateMethod === 2"> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="LS_L" prop="originalLsL"> - <el-select class="input-length" :teleported="false" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.originalLsL" @change="calcOriginScore('ls')" style="width:100%" placeholder="LS_L的数值" clearable> - <el-option v-for="item in evaluateDialogState.listLsL" :key="item.value" :label="item.value" :value="item.value"> - <div class="valueTable"> - <div><div>分值:</div><span>{{item.value}}</span></div> - <div><div>标准:</div><span>{{item.desc}}</span></div> - </div> - </el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="LS_S" prop="originalLsS"> - <el-select class="input-length" :teleported="false" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.originalLsS" @change="calcOriginScore('ls')" style="width:100%" placeholder="LS_S的数值" clearable> - <el-option v-for="item in evaluateDialogState.listLsS" :key="item.value" :label="item.value" :value="item.value"> - <div class="valueTable"> - <div class="longTit"><div>分值:</div><span>{{item.value}}</span></div> - <div class="longTit"><div>人员伤亡:</div><span>{{item.person}}</span></div> - <div class="longTit"><div>直接经济损失:</div><span>{{item.money}}</span></div> - <div class="longTit"><div>停工情况:</div><span>{{item.stopWork}}</span></div> - <div class="longTit"><div>企业形象:</div><span>{{item.company}}</span></div> - <div class="longTit"><div>法律,法规及其它要求:</div><span>{{item.desc}}</span></div> - </div> - </el-option> - </el-select> - </el-form-item> - </el-col> - </div> - <div class="valueSelect" v-if="evaluateDialogState.evaluateMethod === 3"> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="MES_M" prop="originalMesM"> - <el-select class="input-length" :teleported="false" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.originalMesM" @change="calcOriginScore('mes')" style="width:100%" placeholder="MES_M的数值" clearable> - <el-option v-for="item in evaluateDialogState.listMesM" :key="item.value" :label="item.value" :value="item.value"> - <div class="valueTable"> - <div><div>分值:</div><span>{{item.value}}</span></div> - <div><div>标准:</div><span>{{item.desc}}</span></div> - </div> - </el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="MES_E" prop="originalMesE"> - <el-select class="input-length" :teleported="false" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.originalMesE" @change="calcOriginScore('mes')" style="width:100%" placeholder="MES_E的数值" clearable> - <el-option v-for="item in evaluateDialogState.listMesE" :key="item.value" :label="item.value" :value="item.value"> - <div class="valueTable"> - <div><div>分值:</div><span>{{item.value}}</span></div> - <div><div>e1标准:</div><span>{{item.e1Desc}}</span></div> - <div><div>e2标准:</div><span>{{item.e2Desc}}</span></div> - </div> - </el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="MES_S" prop="originalMesS"> - <el-select class="input-length" :teleported="false" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.originalMesS" @change="calcOriginScore('mes')" style="width:100%" placeholder="MES_S的数值" clearable> - <el-option v-for="item in evaluateDialogState.listMesS" :key="item.value" :label="item.value" :value="item.value"> - <div class="valueTable"> - <div class="longTit"><div>分值:</div><span>{{item.value}}</span></div> - <div class="longTit"><div>人员伤亡:</div><span>{{item.person}}</span></div> - <div class="longTit"><div>直接经济损失:</div><span>{{item.money}}</span></div> - <div class="longTit"><div>停工情况:</div><span>{{item.stopWork}}</span></div> - <div class="longTit"><div>法律,法规及其它要求:</div><span>{{item.desc}}</span></div> - </div> - </el-option> - </el-select> - </el-form-item> - </el-col> - </div> - <div class="valueSelect" v-if="evaluateDialogState.evaluateMethod === 4"> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="RS_R" prop="originalRsR"> - <el-select class="input-length" :teleported="false" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.originalRsR" @change="calcOriginScore('rs')" style="width:100%" placeholder="RS_R的数值" clearable> - <el-option v-for="item in evaluateDialogState.listRsR" :key="item.value" :label="item.value" :value="item.value"> - <div class="valueTable"> - <div class="longTit"><div>分值:</div><span>{{item.value}}</span></div> - <div class="longTit"><div>区间,定量描述:</div><span>{{item.section}}</span></div> - <div class="longTit"><div>标准:</div><span>{{item.desc}}</span></div> - </div> - </el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="RS_S" prop="originalRsS"> - <el-select class="input-length" :teleported="false" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.originalRsS" @change="calcOriginScore('rs')" style="width:100%" placeholder="RS_S的数值" clearable> - <el-option v-for="item in evaluateDialogState.listRsS" :key="item.value" :label="item.value" :value="item.value"> - <div class="valueTable"> - <div><div>分值:</div><span>{{item.value}}</span></div> - <div><div>人员伤亡:</div><span>{{item.person}}</span></div> - <div><div>直接经济损失:</div><span>{{item.money}}</span></div> - <div><div>标准:</div><span>{{item.desc}}</span></div> - </div> - </el-option> - </el-select> - </el-form-item> - </el-col> - </div> - </div> - - <div class="evaluateCard"> - <div class="cardTit"> - <span>固有风险分值</span> - </div> - <div> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="风险值" prop="originalRiskValue"> - <el-input type="number" class="input-length" disabled v-model="evaluateDialogState.evaluateForm.originalRiskValue" placeholder="风险数值" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="风险等级值" prop="originalRiskLevelValue"> - <el-select class="input-length" disabled v-model="evaluateDialogState.evaluateForm.originalRiskLevelValue" style="width:100%" placeholder="风险等级值" clearable> - <el-option v-for="item in evaluateDialogState.riskLevelValueList" :key="item.id" :label="item.name" :value="item.id"></el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="风险级别" prop="originalRiskLevel"> - <el-select class="input-length" disabled v-model="evaluateDialogState.evaluateForm.originalRiskLevel" style="width:100%" placeholder="风险级别" clearable> - <el-option v-for="item in evaluateDialogState.riskLevelList" :key="item.id" :label="item.name" :value="item.id"></el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="风险色" prop="originalRiskColor"> - <el-select class="input-length" disabled v-model="evaluateDialogState.evaluateForm.originalRiskColor" style="width:100%" placeholder="风险色" clearable> - <el-option v-for="item in evaluateDialogState.riskColorList" :key="item.id" :label="item.name" :value="item.id"></el-option> - </el-select> - </el-form-item> - </el-col> - </div> - </div> - - <div class="evaluateCard"> - <div class="cardTit"> - <span>现有措施</span> - </div> - <div> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="技术措施" prop="technologyMeasure"> - <el-input type="textarea" class="input-length" :autosize="{ minRows:1 }" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.technologyMeasure" placeholder="技术措施" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="管理措施" prop="manageMeasure"> - <el-input type="textarea" class="input-length" :autosize="{ minRows:1 }" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.manageMeasure" placeholder="管理措施" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="教育措施" prop="educationMeasure"> - <el-input type="textarea" class="input-length" :autosize="{ minRows:1 }" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.educationMeasure" placeholder="教育措施" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="个体防护措施" prop="personalProtectionMeasure"> - <el-input type="textarea" class="input-length" :autosize="{ minRows:1 }" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.personalProtectionMeasure" placeholder="个体防护措施" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="应急措施" prop="emergencyMeasure"> - <el-input type="textarea" class="input-length" :autosize="{ minRows:1 }" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.emergencyMeasure" placeholder="应急措施" clearable></el-input> - </el-form-item> - </el-col> - </div> - </div> - - <div class="evaluateCard"> - <div class="cardTit"> - <span>现有风险评分</span> - </div> - <div class="valueSelect" v-if="evaluateDialogState.evaluateMethod === 1"> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="LEC_L" prop="lecL"> - <el-select class="input-length" :teleported="false" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.lecL" @change="calcScore('lec')" style="width:100%" placeholder="LEC_L的数值" clearable> - <el-option v-for="item in evaluateDialogState.listLecL" :key="item.value" :label="item.value" :value="item.value"> - <div class="valueTable"> - <div><div>分值:</div><span>{{item.value}}</span></div> - <div><div>标准:</div><span>{{item.desc}}</span></div> - </div> - </el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="LEC_E" prop="lecE"> - <el-select class="input-length" :teleported="false" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.lecE" @change="calcScore('lec')" style="width:100%" placeholder="LEC_E的数值" clearable> - <el-option v-for="item in evaluateDialogState.listLecE" :key="item.value" :label="item.value" :value="item.value"> - <div class="valueTable"> - <div><div>分值:</div><span>{{item.value}}</span></div> - <div><div>标准:</div><span>{{item.desc}}</span></div> - </div> - </el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="LEC_C" prop="lecC"> - <el-select class="input-length" :teleported="false" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.lecC" @change="calcScore('lec')" style="width:100%" placeholder="LEC_C的数值" clearable> - <el-option v-for="item in evaluateDialogState.listLecC" :key="item.value" :label="item.value" :value="item.value"> - <div class="valueTable"> - <div class="longTit"><div>分值:</div><span>{{item.value}}</span></div> - <div class="longTit"><div>人员伤亡:</div><span>{{item.person}}</span></div> - <div class="longTit"><div>直接经济损失:</div><span>{{item.money}}</span></div> - <div class="longTit"><div>停工情况:</div><span>{{item.stopWork}}</span></div> - <div class="longTit"><div>企业形象:</div><span>{{item.company}}</span></div> - <div class="longTit"><div>法律,法规及其它要求:</div><span>{{item.desc}}</span></div> - </div> - </el-option> - </el-select> - </el-form-item> - </el-col> - </div> - <div class="valueSelect" v-if="evaluateDialogState.evaluateMethod === 2"> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="LS_L" prop="lsL"> - <el-select class="input-length" :teleported="false" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.lsL" @change="calcScore('ls')" style="width:100%" placeholder="LS_L的数值" clearable> - <el-option v-for="item in evaluateDialogState.listLsL" :key="item.value" :label="item.value" :value="item.value"> - <div class="valueTable"> - <div><div>分值:</div><span>{{item.value}}</span></div> - <div><div>标准:</div><span>{{item.desc}}</span></div> - </div> - </el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="LS_S" prop="lsS"> - <el-select class="input-length" :teleported="false" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.lsS" @change="calcScore('ls')" style="width:100%" placeholder="LS_S的数值" clearable> - <el-option v-for="item in evaluateDialogState.listLsS" :key="item.value" :label="item.value" :value="item.value"> - <div class="valueTable"> - <div class="longTit"><div>分值:</div><span>{{item.value}}</span></div> - <div class="longTit"><div>人员伤亡:</div><span>{{item.person}}</span></div> - <div class="longTit"><div>直接经济损失:</div><span>{{item.money}}</span></div> - <div class="longTit"><div>停工情况:</div><span>{{item.stopWork}}</span></div> - <div class="longTit"><div>企业形象:</div><span>{{item.company}}</span></div> - <div class="longTit"><div>法律,法规及其它要求:</div><span>{{item.desc}}</span></div> - </div> - </el-option> - </el-select> - </el-form-item> - </el-col> - </div> - <div class="valueSelect" v-if="evaluateDialogState.evaluateMethod === 3"> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="MES_M" prop="mesM"> - <el-select class="input-length" :teleported="false" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.mesM" @change="calcScore('mes')" style="width:100%" placeholder="MES_M的数值" clearable> - <el-option v-for="item in evaluateDialogState.listMesM" :key="item.value" :label="item.value" :value="item.value"> - <div class="valueTable"> - <div><div>分值:</div><span>{{item.value}}</span></div> - <div><div>标准:</div><span>{{item.desc}}</span></div> - </div> - </el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="MES_E" prop="mesE"> - <el-select class="input-length" :teleported="false" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.mesE" @change="calcScore('mes')" style="width:100%" placeholder="MES_E的数值" clearable> - <el-option v-for="item in evaluateDialogState.listMesE" :key="item.value" :label="item.value" :value="item.value"> - <div class="valueTable"> - <div><div>分值:</div><span>{{item.value}}</span></div> - <div><div>e1标准:</div><span>{{item.e1Desc}}</span></div> - <div><div>e2标准:</div><span>{{item.e2Desc}}</span></div> - </div> - </el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="MES_S" prop="mesS"> - <el-select class="input-length" :teleported="false" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.mesS" @change="calcScore('mes')" style="width:100%" placeholder="MES_S的数值" clearable> - <el-option v-for="item in evaluateDialogState.listMesS" :key="item.value" :label="item.value" :value="item.value"> - <div class="valueTable"> - <div class="longTit"><div>分值:</div><span>{{item.value}}</span></div> - <div class="longTit"><div>人员伤亡:</div><span>{{item.person}}</span></div> - <div class="longTit"><div>直接经济损失:</div><span>{{item.money}}</span></div> - <div class="longTit"><div>停工情况:</div><span>{{item.stopWork}}</span></div> - <div class="longTit"><div>法律,法规及其它要求:</div><span>{{item.desc}}</span></div> - </div> - </el-option> - </el-select> - </el-form-item> - </el-col> - </div> - <div class="valueSelect" v-if="evaluateDialogState.evaluateMethod === 4"> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="RS_R" prop="rsR"> - <el-select class="input-length" :teleported="false" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.rsR" @change="calcScore('rs')" style="width:100%" placeholder="RS_R的数值" clearable> - <el-option v-for="item in evaluateDialogState.listRsR" :key="item.value" :label="item.value" :value="item.value"> - <div class="valueTable"> - <div class="longTit"><div>分值:</div><span>{{item.value}}</span></div> - <div class="longTit"><div>区间,定量描述:</div><span>{{item.section}}</span></div> - <div class="longTit"><div>标准:</div><span>{{item.desc}}</span></div> - </div> - </el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="RS_S" prop="rsS"> - <el-select class="input-length" :teleported="false" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.rsS" @change="calcScore('rs')" style="width:100%" placeholder="RS_S的数值" clearable> - <el-option v-for="item in evaluateDialogState.listRsS" :key="item.value" :label="item.value" :value="item.value"> - <div class="valueTable"> - <div><div>分值:</div><span>{{item.value}}</span></div> - <div><div>人员伤亡:</div><span>{{item.person}}</span></div> - <div><div>直接经济损失:</div><span>{{item.money}}</span></div> - <div><div>标准:</div><span>{{item.desc}}</span></div> - </div> - </el-option> - </el-select> - </el-form-item> - </el-col> - </div> - </div> - - <div class="evaluateCard"> - <div class="cardTit"> - <span>现有风险分值</span> - </div> - <div> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="风险值" prop="riskValue"> - <el-input type="number" class="input-length" disabled v-model="evaluateDialogState.evaluateForm.riskValue" placeholder="风险数值" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="风险等级值" prop="riskLevelValue"> - <el-select class="input-length" disabled v-model="evaluateDialogState.evaluateForm.riskLevelValue" style="width:100%" placeholder="风险等级值" clearable> - <el-option v-for="item in evaluateDialogState.riskLevelValueList" :key="item.id" :label="item.name" :value="item.id"></el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="风险级别" prop="riskLevel"> - <el-select class="input-length" disabled v-model="evaluateDialogState.evaluateForm.riskLevel" style="width:100%" placeholder="风险级别" clearable> - <el-option v-for="item in evaluateDialogState.riskLevelList" :key="item.id" :label="item.name" :value="item.id"></el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="风险色" prop="riskColor"> - <el-select class="input-length" disabled v-model="evaluateDialogState.evaluateForm.riskColor" style="width:100%" placeholder="风险色" clearable> - <el-option v-for="item in evaluateDialogState.riskColorList" :key="item.id" :label="item.name" :value="item.id"></el-option> - </el-select> - </el-form-item> - </el-col> - </div> - </div> - - <div class="evaluateCard"> - <div class="cardTit"> - <span>建议措施</span> - </div> - <div> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="技术措施" prop="adviseTechnologyMeasure"> - <el-input type="textarea" class="input-length" :autosize="{ minRows:1 }" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.adviseTechnologyMeasure" placeholder="技术措施" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="管理措施" prop="adviseManageMeasure"> - <el-input type="textarea" class="input-length" :autosize="{ minRows:1 }" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.adviseManageMeasure" placeholder="管理措施" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="教育措施" prop="adviseEducationMeasure"> - <el-input type="textarea" class="input-length" :autosize="{ minRows:1 }" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.adviseEducationMeasure" placeholder="教育措施" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="个体防护措施" prop="advisePersonalProtectionMeasure"> - <el-input type="textarea" class="input-length" :autosize="{ minRows:1 }" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.advisePersonalProtectionMeasure" placeholder="个体防护措施" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="应急措施" prop="adviseEmergencyMeasure"> - <el-input type="textarea" class="input-length" :autosize="{ minRows:1 }" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.adviseEmergencyMeasure" placeholder="应急措施" clearable></el-input> - </el-form-item> - </el-col> - </div> - </div> - - <el-col style="display: flex;align-items: center" :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="评价专家意见" prop="evaluateDesc" style="width: 100% !important;"> - <el-input type="textarea" class="input-length" :autosize="{ minRows:2 }" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.evaluateDesc" placeholder="评价专家意见" clearable></el-input> - </el-form-item> - </el-col> - <el-col style="display: flex;align-items: center" :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="安全风险分析" prop="evaluateDesc" style="width: 100% !important;"> - <el-input type="textarea" class="input-length" :autosize="{ minRows:2 }" :disabled="evaluateDialogState.disabled" v-model="evaluateDialogState.evaluateForm.safeRiskAnalysis" placeholder="安全风险分析" clearable></el-input> - </el-form-item> - </el-col> - </el-row> - </el-form> - <el-dialog title="修改评价方法" v-model="evaluateDialogState.evaluateMethodVisible" width="30%"> - <el-select class="input-length" v-model="evaluateDialogState.evaluateForm.evaluateMethod" style="width:100%" placeholder="评价方法" clearable> - <el-option v-for="item in evaluateDialogState.evaluateMethodList" :key="item.id" :label="item.name" :value="item.id"></el-option> - </el-select> - <template #footer> - <span class="Query-footer"> - <el-button @click="evaluateDialogState.evaluateMethodVisible = false" size="default">取 消</el-button> - <el-button type="primary" @click="conFirmChange()" size="default">确定</el-button> - </span> - </template> - </el-dialog> - <template #footer> - <span class="dialog-footer"> - <el-button @click="evaluateDialogState.evaluateDialogVisible = !evaluateDialogState.evaluateDialogVisible" size="default">取 消</el-button> - <el-button v-if="!evaluateDialogState.disabled" type="primary" @click="onSubmitEvaluate" size="default">提交</el-button> - </span> - </template> - </el-dialog> - </div> -</template> - -<script setup lang="ts"> -import {computed, onMounted, reactive, ref} from "vue"; -import {ElMessage} from "element-plus"; -import {evaluateApi} from "/@/api/analyse/evaluate"; -import {isValidKey, numFloat} from "/@/utils/methods"; -import { BigNumber } from 'bignumber.js'; -import {identifyApi} from "/@/api/analyse/identify"; -import {ElMessageBox} from "element-plus/es"; - -const evaluateFormRef = ref() - -const evaluateDialogState = reactive<EvaluateDialogType>({ - title: '', - time:[], - disabled: false, - evaluateDialogVisible: false, - evaluateMethodVisible:false, - evaluateMethod: null, - evaluateInfo: { - id: null, - identificationMethod: null, - result: null, - identificationDesc: '', - analogyCheckItem: '', - analogyRiskFactor: '', - analogyResult: '', - analogyReference: '', - hazopNode: '', - hazopParam: '', - hazopParamDesc: '', - hazopGuide: '', - hazopDeviation: '', - hazopPossibleCauses: '', - hazopResult: '', - jhaCheckItem: '', - jhaRiskFactor: '', - jhaResult: '', - phaCheckItem: '', - phaRiskFactor: '', - phaResult: '', - sclCheckItem: '', - sclCheckStandard: '', - sclCheckUnstandard: '', - sclCheckResult: '', - hazopId: null, - jhaId: null, - phaId: null, - sclId: null, - analogyId: null - }, - evaluateForm: { - id: null, - evaluateMethod: null, - identificationMethod: null, - identificationId: null, - manageLevel: 1, - originalManageLevel: 1, - riskValue: null, - riskLevelValue: null, - riskLevel: null, - riskColor: null, - lecL: null, - lecE: null, - lecC: null, - lsL: null, - lsS: null, - mesM: null, - mesE: null, - mesS: null, - rsR: null, - rsS: null, - lecId: null, - lsId: null, - mesId: null, - rsId: null, - originalLecL: null, - originalLecE: null, - originalLecC: null, - originalLsL: null, - originalLsS: null, - originalMesM: null, - originalMesE: null, - originalMesS: null, - originalRsR: null, - originalRsS: null, - originalRiskValue: null, - originalRiskLevelValue: null, - originalRiskLevel: null, - originalRiskColor: null, - technologyMeasure: '', - manageMeasure: '', - educationMeasure: '', - personalProtectionMeasure: '', - emergencyMeasure: '', - adviseTechnologyMeasure: '', - adviseManageMeasure: '', - adviseEducationMeasure: '', - advisePersonalProtectionMeasure: '', - adviseEmergencyMeasure: '', - evaluateDesc: '', - safeRiskAnalysis: '' - }, - evaluateFormRules: { - - }, - listLecL: [], - listLecE: [], - listLecC: [], - listLsL:[], - listLsS:[], - listRsR:[], - listRsS:[], - listMesM:[], - listMesE:[], - listMesS:[], - manageLevelList: [ - {id:1, name: '院所级'}, - {id:2, name: '部门级'}, - {id:3, name: '项目组级'}, - ], - riskColorList: [ - {id:1, name: '蓝色'}, - {id:2, name: '黄色'}, - {id:3, name: '橙色'}, - {id:4, name: '红色'}, - ], - riskLevelList: [ - {id:1, name: '低'}, - {id:2, name: '一般'}, - {id:3, name: '较大'}, - {id:4, name: '重大'}, - ], - riskLevelValueList: [ - {id:1, name: '1级'}, - {id:2, name: '2级'}, - {id:3, name: '3级'}, - {id:4, name: '4级'}, - {id:5, name: '5级'}, - ], - 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'}, - ] -}) - -const numOriginValue = computed( () => { - return numFloat( - evaluateDialogState.evaluateForm.originalLecL, - evaluateDialogState.evaluateForm.originalLecE, - evaluateDialogState.evaluateForm.originalLecC, - evaluateDialogState.evaluateForm.originalLsL, - evaluateDialogState.evaluateForm.originalLsS, - evaluateDialogState.evaluateForm.originalMesM, - evaluateDialogState.evaluateForm.originalMesE, - evaluateDialogState.evaluateForm.originalMesS, - evaluateDialogState.evaluateForm.originalRsR, - evaluateDialogState.evaluateForm.originalRsS - ) -}) - -const numValue = computed( () => { - return numFloat( - evaluateDialogState.evaluateForm.lecL, - evaluateDialogState.evaluateForm.lecE, - evaluateDialogState.evaluateForm.lecC, - evaluateDialogState.evaluateForm.lsL, - evaluateDialogState.evaluateForm.lsS, - evaluateDialogState.evaluateForm.mesM, - evaluateDialogState.evaluateForm.mesE, - evaluateDialogState.evaluateForm.mesS, - evaluateDialogState.evaluateForm.rsR, - evaluateDialogState.evaluateForm.rsS - ) -}) - -const showEvaluateDialog = (title: string, value: IdentifyType ) => { - evaluateDialogState.evaluateDialogVisible = true; - evaluateDialogState.disabled = false - evaluateDialogState.evaluateMethod = value.evaluateMethod as number - evaluateDialogState.evaluateInfo = value - setTimeout(() => { - evaluateFormRef.value.clearValidate(); - }); - if( title === '评价'){ - if(value.riskValue){ - evaluateDialogState.title = '编辑评价'; - for(let i in evaluateDialogState.evaluateForm){ - if(isValidKey(i, evaluateDialogState.evaluateForm)){ - evaluateDialogState.evaluateForm[i] = value[i] - } - } - }else{ - evaluateDialogState.title = '评价' - evaluateDialogState.evaluateForm = { - id: null, - evaluateMethod: null, - identificationMethod: null, - identificationId: null, - manageLevel: 1, - originalManageLevel: 1, - riskValue: null, - riskLevelValue: null, - riskLevel: null, - riskColor: null, - lecL: null, - lecE: null, - lecC: null, - lsL: null, - lsS: null, - mesM: null, - mesE: null, - mesS: null, - rsR: null, - rsS: null, - lecId: null, - lsId: null, - mesId: null, - rsId: null, - originalLecL: null, - originalLecE: null, - originalLecC: null, - originalLsL: null, - originalLsS: null, - originalMesM: null, - originalMesE: null, - originalMesS: null, - originalRsR: null, - originalRsS: null, - originalRiskValue: null, - originalRiskLevelValue: null, - originalRiskLevel: null, - originalRiskColor: null, - technologyMeasure: '', - manageMeasure: '', - educationMeasure: '', - personalProtectionMeasure: '', - emergencyMeasure: '', - adviseTechnologyMeasure: '', - adviseManageMeasure: '', - adviseEducationMeasure: '', - advisePersonalProtectionMeasure: '', - adviseEmergencyMeasure: '', - evaluateDesc: '', - safeRiskAnalysis: '' - }; - } - }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 - evaluateDialogState.evaluateForm.identificationMethod = value.phaId?1:value.jhaId?2:value.sclId?3:value.hazopId?4:5 - evaluateDialogState.evaluateForm.identificationId = (value.hazopId || value.jhaId || value.phaId || value.sclId || value.analogyId) as number -}; - -const openChangeMethod = ()=>{ - evaluateDialogState.evaluateMethodVisible = true -} - -const conFirmChange = async () =>{ - 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 = () => { - evaluateFormRef.value.validate(async(valid: boolean) => { - if(valid){ - // evaluateDialogState.evaluateForm.riskValue = Number(numOriginValue.value) - if(evaluateDialogState.title === '评价'){ - let { lecId, lsId, mesId, rsId, ...data} = evaluateDialogState.evaluateForm - let res = await evaluateApi().addEvaluate(data); - if(res.data.code === 100){ - emit('refresh') - evaluateDialogState.evaluateDialogVisible = false; - ElMessage({ - type: 'success', - message: '评价成功' - }) - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg, - }); - } - }else{ - let res = await evaluateApi().modEvaluate(evaluateDialogState.evaluateForm) - if(res.data.code === 100){ - emit('refresh') - evaluateDialogState.evaluateDialogVisible = false; - ElMessage({ - type: 'success', - message: '编辑成功' - }) - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg, - }); - } - } - }else{ - ElMessage({ - type: 'warning', - message: '请完善基本信息', - }); - } - }) -} - -const getListLecL = async() =>{ - let res = await evaluateApi().getListLecL() - if(res.data.code === 100){ - evaluateDialogState.listLecL = res.data.data - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg, - }); - } -} - -const getListLecE = async() =>{ - let res = await evaluateApi().getListLecE() - if(res.data.code === 100){ - evaluateDialogState.listLecE = res.data.data - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg, - }); - } -} - -const getListLecC = async() =>{ - let res = await evaluateApi().getListLecC() - if(res.data.code === 100){ - evaluateDialogState.listLecC = res.data.data - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg, - }); - } -} - -const getListLsL = async() =>{ - let res = await evaluateApi().getListLsL() - if(res.data.code === 100){ - evaluateDialogState.listLsL = res.data.data - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg, - }); - } -} - -const getListLsS = async() =>{ - let res = await evaluateApi().getListLsS() - if(res.data.code === 100){ - evaluateDialogState.listLsS = res.data.data - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg, - }); - } -} - -const getListRsR = async() =>{ - let res = await evaluateApi().getListRsR() - if(res.data.code === 100){ - evaluateDialogState.listRsR = res.data.data - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg, - }); - } -} - -const getListRsS = async() =>{ - let res = await evaluateApi().getListRsS() - if(res.data.code === 100){ - evaluateDialogState.listRsS = res.data.data - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg, - }); - } -} - -const getListMesM = async() =>{ - let res = await evaluateApi().getListMesM() - if(res.data.code === 100){ - evaluateDialogState.listMesM = res.data.data - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg, - }); - } -} -const getListMesE = async() =>{ - let res = await evaluateApi().getListMesE() - if(res.data.code === 100){ - evaluateDialogState.listMesE = res.data.data - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg, - }); - } -} -const getListMesS = async() =>{ - let res = await evaluateApi().getListMesS() - if(res.data.code === 100){ - evaluateDialogState.listMesS = res.data.data - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg, - }); - } -} - -const calcOriginScore=(i:string)=>{ - if((i == 'lec' && (evaluateDialogState.evaluateForm.originalLecL && evaluateDialogState.evaluateForm.originalLecE && evaluateDialogState.evaluateForm.originalLecC))||(i == 'ls' && (evaluateDialogState.evaluateForm.originalLsL && evaluateDialogState.evaluateForm.originalLsS))||(i == 'mes' &&(evaluateDialogState.evaluateForm.originalMesM && evaluateDialogState.evaluateForm.originalMesE && evaluateDialogState.evaluateForm.originalMesS))||(i == 'rs' && (evaluateDialogState.evaluateForm.originalRsR && evaluateDialogState.evaluateForm.originalRsS))){ - evaluateDialogState.evaluateForm.originalRiskValue = Number(numOriginValue.value) - if(evaluateDialogState.evaluateForm.originalRiskValue<=0.5){ - evaluateDialogState.evaluateForm.originalRiskLevelValue = 1 - evaluateDialogState.evaluateForm.originalRiskLevel = 1 - evaluateDialogState.evaluateForm.originalRiskColor = 1 - }else if(evaluateDialogState.evaluateForm.originalRiskValue>0.5&&evaluateDialogState.evaluateForm.originalRiskValue<1){ - evaluateDialogState.evaluateForm.originalRiskLevelValue = 2 - evaluateDialogState.evaluateForm.originalRiskLevel = 2 - evaluateDialogState.evaluateForm.originalRiskColor = 2 - }else{ - evaluateDialogState.evaluateForm.originalRiskLevelValue = 3 - evaluateDialogState.evaluateForm.originalRiskLevel = 3 - evaluateDialogState.evaluateForm.originalRiskColor = 3 - } - } -} - -const calcScore=(i:string)=>{ - if((i == 'lec' && (evaluateDialogState.evaluateForm.lecL && evaluateDialogState.evaluateForm.lecE && evaluateDialogState.evaluateForm.lecC))||(i == 'ls' && (evaluateDialogState.evaluateForm.lsL && evaluateDialogState.evaluateForm.lsS))||(i == 'mes' &&(evaluateDialogState.evaluateForm.mesM && evaluateDialogState.evaluateForm.mesE && evaluateDialogState.evaluateForm.mesS))||(i == 'rs' && (evaluateDialogState.evaluateForm.rsR && evaluateDialogState.evaluateForm.rsS))){ - evaluateDialogState.evaluateForm.riskValue = Number(numValue.value) - if(evaluateDialogState.evaluateForm.riskValue<=0.5){ - evaluateDialogState.evaluateForm.riskLevelValue = 1 - evaluateDialogState.evaluateForm.riskLevel = 1 - evaluateDialogState.evaluateForm.riskColor = 1 - }else if(evaluateDialogState.evaluateForm.riskValue>0.5&&evaluateDialogState.evaluateForm.riskValue<1){ - evaluateDialogState.evaluateForm.riskLevelValue = 2 - evaluateDialogState.evaluateForm.riskLevel = 2 - evaluateDialogState.evaluateForm.riskColor = 2 - }else{ - evaluateDialogState.evaluateForm.riskLevelValue = 3 - evaluateDialogState.evaluateForm.riskLevel = 3 - evaluateDialogState.evaluateForm.riskColor = 3 - } - } -} - -const emit = defineEmits(['refresh']); - -onMounted(()=>{ - getListLecL() - getListLecE() - getListLecC() - getListLsL() - getListLsS() - getListRsR() - getListRsS() - getListMesM() - getListMesE() - getListMesS() -}) - -defineExpose({ - showEvaluateDialog -}); -</script> - -<style lang="scss" scoped> -.evaluateCard{ - width: 100%; - margin: 0 40px 20px; - border: 1px solid #ccc; - border-radius: 4px; - background: #fff; - - .cardTit{ - width: 100%; - padding: 10px 20px; - background: #f5f5f5; - border-bottom: 1px solid #ccc; - margin-bottom: 20px; - } - - .valueSelect{ - ::v-deep(.el-popper){ - .el-select-dropdown__item{ - width: 100%; - height: auto; - white-space: normal; - word-break: break-all; - word-wrap: break-word; - overflow: auto; - padding: 10px 25px; - border-bottom: 1px solid #ccc; - - .valueTable{ - &>div{ - line-height: 1.5; - margin-bottom: 6px; - padding-bottom: 6px; - display: flex; - align-items: center; - - div{ - width: 8%; - } - span{ - width: 92%; - } - - &:last-of-type{ - margin-bottom: 0; - } - } - .longTit{ - div{ - width: 15%; - } - span{ - width: 85%; - } - } - } - } - } - } -} -</style> diff --git a/src/views/analyse/evaluate/index.ts b/src/views/analyse/evaluate/index.ts deleted file mode 100644 index ebf7b8d..0000000 --- a/src/views/analyse/evaluate/index.ts +++ /dev/null @@ -1,108 +0,0 @@ -declare interface EvaluateStateType { - evaluateData: Array<IdentifyType> - user: null| number - currentEvalute:{} - evaluateDialog:boolean - searchQuery: { - pageIndex: number, - pageSize: number, - assessPlanName: string, - experimentName: string, - tag: number, - planExecStatus: number | null - } - total: number - identificationMethodList: Array<Type>, - evaluateMethodList: Array<Type> - planList: Array<PlanType> - personList: Array<SystemPersonType> -} -declare interface EvaluateType { - id: null | number, - riskValue: null | number, - riskLevelValue: null | number, - riskLevel: null | number, - riskColor: null | number, - manageLevel?: null | number, - originalManageLevel?: null | number, - identificationId: null | number, - lecL: null | number, - lecE: null | number, - lecC: null | number, - lsL: null | number, - lsS: null | number, - mesM: null | number, - mesE: null | number, - mesS: null | number, - rsR: null | number, - rsS: null | number, - lecId: null | number, - lsId: null | number, - mesId: null | number, - rsId: null | number, - evaluateMethod?: null | number, - evaluateStatus?: null | number, - identificationMethod: null | number, - originalLecL: null | number, - originalLecE: null | number, - originalLecC: null | number, - originalLsL: null | number, - originalLsS: null | number, - originalMesM: null | number, - originalMesE: null | number, - originalMesS: null | number, - originalRsR: null | number, - originalRsS: null | number, - originalRiskValue: null | number, - originalRiskLevelValue: null | number, - originalRiskLevel: null | number, - originalRiskColor: null | number, - technologyMeasure: string, - manageMeasure: string, - educationMeasure: string, - personalProtectionMeasure: string, - emergencyMeasure: string, - adviseTechnologyMeasure: string, - adviseManageMeasure: string, - adviseEducationMeasure: string, - advisePersonalProtectionMeasure: string, - adviseEmergencyMeasure: string, - evaluateDesc: string, - safeRiskAnalysis: string -} - -declare interface EvaluateDialogType { - title: string, - time: string [], - disabled: boolean, - evaluateDialogVisible: boolean, - evaluateMethodVisible:boolean - evaluateMethod: number | null, - evaluateInfo: IdentifyType, - evaluateForm: EvaluateType, - evaluateFormRules: { - - }, - identificationMethodList: Array<Type>, - evaluateMethodList: Array<Type> - riskLevelValueList: Array<Type> - riskLevelList: Array<Type> - riskColorList: Array<Type> - manageLevelList: Array<Type> - listLecL: Array<evaluateSelectType> - listLecE: Array<evaluateSelectType> - listLecC: Array<evaluateSelectType> - listLsL: Array<evaluateSelectType> - listLsS: Array<evaluateSelectType> - listRsR: Array<evaluateSelectType> - listRsS: Array<evaluateSelectType> - listMesM: Array<evaluateSelectType> - listMesE: Array<evaluateSelectType> - listMesS: Array<evaluateSelectType> -} - -declare interface evaluateSelectType { - id: number | null - value: number | null - desc: string -} \ No newline at end of file diff --git a/src/views/analyse/evaluate/index.vue b/src/views/analyse/evaluate/index.vue deleted file mode 100644 index 41ec3e0..0000000 --- a/src/views/analyse/evaluate/index.vue +++ /dev/null @@ -1,452 +0,0 @@ -<template> - <div class="home-container"> - <div style="height: 100%"> - <el-row class="homeCard"> - <div class="basic-line"> - <span>评估计划名称:</span> - <el-input v-model="evaluateState.searchQuery.assessPlanName" clearable filterable class="input-box" placeholder="评估计划名称"> - </el-input> - </div> - <div class="basic-line"> - <span>实验名称:</span> - <el-input v-model="evaluateState.searchQuery.experimentName" clearable filterable class="input-box" placeholder="实验名称"> - </el-input> - </div> - <div style="padding-bottom: 10px"> - <el-button type="primary" @click="getEvaluateData">查询</el-button> - <el-button plain @click="reset">重置</el-button> - </div> - </el-row> - <div class="homeCard"> - <div class="main-card"> - <el-row class="cardTop"> -<!-- <el-col :span="12" class="mainCardBtn">--> -<!-- <el-button type="primary" :icon="Plus" size="default" @click="openevaluateDialog('新增', {})">新增</el-button>--> -<!-- </el-col>--> - </el-row> - <el-table ref="multipleTableRef" :data="evaluateState.evaluateData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }"> -<!-- <el-table-column type="expand">--> -<!-- <template #default="scope">--> -<!-- <el-table :data="scope.row.factorQueryDTOList" style="width: 100%">--> -<!-- <el-table-column type="index" label="序号" width="80" />--> -<!-- <el-table-column prop="evaluateMethod" label="评价方法" align="center">--> -<!-- <template #default="scope">--> -<!-- {{ evaluateState.evaluateMethodList.find(i=>i.id === scope.row.evaluateMethod)?.name }}--> -<!-- </template>--> -<!-- </el-table-column>--> -<!-- <el-table-column prop="itemIdentificationTime" label="辨识添加时间" show-overflow-tooltip align="center"></el-table-column>--> -<!-- <el-table-column v-if="scope.row.identificationMethod == 1" prop="phaCheckItem" label="检查项目" show-overflow-tooltip align="center"></el-table-column>--> -<!-- <el-table-column v-if="scope.row.identificationMethod == 1" prop="phaRiskFactor" label="存在风险因素" show-overflow-tooltip align="center"></el-table-column>--> -<!-- <el-table-column v-if="scope.row.identificationMethod == 1" prop="phaResult" label="可能存在后果" show-overflow-tooltip align="center"></el-table-column>--> -<!-- <el-table-column v-if="scope.row.identificationMethod == 2" prop="jhaCheckItem" label="作业步骤" show-overflow-tooltip align="center"></el-table-column>--> -<!-- <el-table-column v-if="scope.row.identificationMethod == 2" prop="jhaRiskFactor" label="存在风险因素" show-overflow-tooltip align="center"></el-table-column>--> -<!-- <el-table-column v-if="scope.row.identificationMethod == 2" prop="jhaResult" label="可能存在后果" show-overflow-tooltip align="center"></el-table-column>--> -<!-- <el-table-column v-if="scope.row.identificationMethod == 3" prop="sclCheckItem" label="检查项目" show-overflow-tooltip align="center"></el-table-column>--> -<!-- <el-table-column v-if="scope.row.identificationMethod == 3" prop="sclCheckStandard" label="检查标准" show-overflow-tooltip align="center"></el-table-column>--> -<!-- <el-table-column v-if="scope.row.identificationMethod == 3" prop="sclCheckUnstandard" label="不符合标准情况" show-overflow-tooltip align="center"></el-table-column>--> -<!-- <el-table-column v-if="scope.row.identificationMethod == 3" prop="sclCheckResult" label="主要后果" show-overflow-tooltip align="center"></el-table-column>--> -<!-- <el-table-column v-if="scope.row.identificationMethod == 4" prop="hazopNode" label="节点" show-overflow-tooltip align="center"></el-table-column>--> -<!-- <el-table-column v-if="scope.row.identificationMethod == 4" prop="hazopParam" label="参数" show-overflow-tooltip align="center"></el-table-column>--> -<!-- <el-table-column v-if="scope.row.identificationMethod == 4" prop="hazopParamDesc" label="参数描述" show-overflow-tooltip align="center"></el-table-column>--> -<!-- <el-table-column v-if="scope.row.identificationMethod == 4" prop="hazopNode" label="节点" show-overflow-tooltip align="center"></el-table-column>--> -<!-- <el-table-column v-if="scope.row.identificationMethod == 4" prop="hazopGuide" label="引导词" show-overflow-tooltip align="center"></el-table-column>--> -<!-- <el-table-column v-if="scope.row.identificationMethod == 4" prop="hazopDeviation" label="偏差" show-overflow-tooltip align="center"></el-table-column>--> -<!-- <el-table-column v-if="scope.row.identificationMethod == 4" prop="hazopPossibleCauses" label="可能原因" show-overflow-tooltip align="center"></el-table-column>--> -<!-- <el-table-column v-if="scope.row.identificationMethod == 4" prop="hazopResult" label="可能存在后果" show-overflow-tooltip align="center"></el-table-column>--> -<!-- <el-table-column v-if="scope.row.identificationMethod == 5" prop="analogyCheckItem" label="检查项目" show-overflow-tooltip align="center"></el-table-column>--> -<!-- <el-table-column v-if="scope.row.identificationMethod == 5" prop="analogyReference" label="类比参照" show-overflow-tooltip align="center"></el-table-column>--> -<!-- <el-table-column v-if="scope.row.identificationMethod == 5" prop="analogyRiskFactor" label="存在风险因素" show-overflow-tooltip align="center"></el-table-column>--> -<!-- <el-table-column v-if="scope.row.identificationMethod == 5" prop="analogyResult" label="可能存在后果" show-overflow-tooltip align="center"></el-table-column>--> -<!-- <el-table-column label="操作" width="250" >--> -<!-- <template #default="scope2">--> -<!-- <el-button size="small" v-if="scope.row.planExecStatus === 3 && scope.row.evaluateUserId == evaluateState.user" 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>--> -<!-- </el-table-column>--> - - <el-table-column prop="assessPlanName" label="评估计划名称"/> - <el-table-column prop="identificationMethod" label="辨识方法" show-overflow-tooltip> - <template #default="scope"> - <span>{{`${evaluateState.identificationMethodList.find(item =>item.id === scope.row.identificationMethod)?.name}`}}</span> - </template> - </el-table-column> - <el-table-column prop="riskUnitName" label="风险单元" /> - <el-table-column prop="identificationUser" label="计划负责人" /> - <el-table-column prop="identificationUser" label="辨识专家" /> - <el-table-column prop="evaluateUser" label="评价专家" /> - <el-table-column prop="createTime" label="创建时间" show-overflow-tooltip></el-table-column> - <el-table-column prop="createByUserName" label="创建人" show-overflow-tooltip></el-table-column> - <el-table-column prop="updateTime" label="最后修改时间" show-overflow-tooltip></el-table-column> - <el-table-column prop="updateByUserName" label="最后修改人" show-overflow-tooltip></el-table-column> - <el-table-column prop="evaluateStatus" label="执行状态" show-overflow-tooltip align="center"> - <template #default="scope"> - <div> - <div v-if="scope.row.planExecStatus === 1"> - <el-tag :type="'info'"> - {{ '未开始' }} - </el-tag> - </div> - <div v-if="scope.row.planExecStatus === 2"> - <el-tag :type="'info'"> - {{ '辨识阶段' }} - </el-tag> - </div> - <div v-if="scope.row.planExecStatus === 3"> - <el-tag :type="'primary'"> - {{ '评价阶段' }} - </el-tag> - </div> - <div v-if="scope.row.planExecStatus === 4"> - <el-tag :type="'success'"> - {{ '完成阶段' }} - </el-tag> - </div> - </div> - </template> - </el-table-column> - <el-table-column label="操作" width="250"> - <template #default="scope"> - <el-button size="small" v-if="scope.row.planExecStatus===3 && scope.row.evaluateUserId == evaluateState.user" text type="primary" :icon="DocumentChecked" @click="accessEvaluate(scope.row)">提交</el-button> - <el-button size="small" v-if="scope.row.planExecStatus===3 && scope.row.evaluateUserId == evaluateState.user" text type="primary" :icon="Edit" @click="openEvaluate(scope.row)">评价</el-button> - <el-button size="small" v-if="scope.row.planExecStatus===4" text :icon="View" type="primary" @click="openEvaluate(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="evaluateState.searchQuery.pageIndex" background v-model:page-size="evaluateState.searchQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="evaluateState.total" class="page-position"> </el-pagination> - </div> - </div> - </div> - </div> - - <el-dialog title="辨识信息评价" v-model="evaluateState.evaluateDialog" width="50%"> - <el-table :data="evaluateState.currentEvalute.factorQueryDTOList" style="width: 100%"> - <el-table-column type="index" label="序号" width="80"/> - <el-table-column prop="evaluateMethod" label="评价方法" align="center"> - <template #default="scope"> - {{ evaluateState.evaluateMethodList.find(i=>i.id === scope.row.evaluateMethod)?.name }} - </template> - </el-table-column> - <el-table-column prop="itemIdentificationTime" label="辨识添加时间" show-overflow-tooltip align="center"></el-table-column> - <el-table-column v-if="evaluateState.currentEvalute.identificationMethod == 1" prop="phaCheckItem" label="检查项目" show-overflow-tooltip align="center"></el-table-column> - <el-table-column v-if="evaluateState.currentEvalute.identificationMethod == 1" prop="phaRiskFactor" label="存在风险因素" show-overflow-tooltip align="center"></el-table-column> - <el-table-column v-if="evaluateState.currentEvalute.identificationMethod == 1" prop="phaResult" label="可能存在后果" show-overflow-tooltip align="center"></el-table-column> - <el-table-column v-if="evaluateState.currentEvalute.identificationMethod == 2" prop="jhaCheckItem" label="作业步骤" show-overflow-tooltip align="center"></el-table-column> - <el-table-column v-if="evaluateState.currentEvalute.identificationMethod == 2" prop="jhaRiskFactor" label="存在风险因素" show-overflow-tooltip align="center"></el-table-column> - <el-table-column v-if="evaluateState.currentEvalute.identificationMethod == 2" prop="jhaResult" label="可能存在后果" show-overflow-tooltip align="center"></el-table-column> - <el-table-column v-if="evaluateState.currentEvalute.identificationMethod == 3" prop="sclCheckItem" label="检查项目" show-overflow-tooltip align="center"></el-table-column> - <el-table-column v-if="evaluateState.currentEvalute.identificationMethod == 3" prop="sclCheckStandard" label="检查标准" show-overflow-tooltip align="center"></el-table-column> - <el-table-column v-if="evaluateState.currentEvalute.identificationMethod == 3" prop="sclCheckUnstandard" label="不符合标准情况" show-overflow-tooltip align="center"></el-table-column> - <el-table-column v-if="evaluateState.currentEvalute.identificationMethod == 3" prop="sclCheckResult" label="主要后果" show-overflow-tooltip align="center"></el-table-column> - <el-table-column v-if="evaluateState.currentEvalute.identificationMethod == 4" prop="hazopNode" label="节点" show-overflow-tooltip align="center"></el-table-column> - <el-table-column v-if="evaluateState.currentEvalute.identificationMethod == 4" prop="hazopParam" label="参数" show-overflow-tooltip align="center"></el-table-column> - <el-table-column v-if="evaluateState.currentEvalute.identificationMethod == 4" prop="hazopParamDesc" label="参数描述" show-overflow-tooltip align="center"></el-table-column> - <el-table-column v-if="evaluateState.currentEvalute.identificationMethod == 4" prop="hazopNode" label="节点" show-overflow-tooltip align="center"></el-table-column> - <el-table-column v-if="evaluateState.currentEvalute.identificationMethod == 4" prop="hazopGuide" label="引导词" show-overflow-tooltip align="center"></el-table-column> - <el-table-column v-if="evaluateState.currentEvalute.identificationMethod == 4" prop="hazopDeviation" label="偏差" show-overflow-tooltip align="center"></el-table-column> - <el-table-column v-if="evaluateState.currentEvalute.identificationMethod == 4" prop="hazopPossibleCauses" label="可能原因" show-overflow-tooltip align="center"></el-table-column> - <el-table-column v-if="evaluateState.currentEvalute.identificationMethod == 4" prop="hazopResult" label="可能存在后果" show-overflow-tooltip align="center"></el-table-column> - <el-table-column v-if="evaluateState.currentEvalute.identificationMethod == 5" prop="analogyCheckItem" label="检查项目" show-overflow-tooltip align="center"></el-table-column> - <el-table-column v-if="evaluateState.currentEvalute.identificationMethod == 5" prop="analogyReference" label="类比参照" show-overflow-tooltip align="center"></el-table-column> - <el-table-column v-if="evaluateState.currentEvalute.identificationMethod == 5" prop="analogyRiskFactor" label="存在风险因素" show-overflow-tooltip align="center"></el-table-column> - <el-table-column v-if="evaluateState.currentEvalute.identificationMethod == 5" prop="analogyResult" label="可能存在后果" show-overflow-tooltip align="center"></el-table-column> - <el-table-column label="操作"> - <template #default="scope"> - <el-button size="small" v-if="evaluateState.currentEvalute.planExecStatus === 3 && evaluateState.currentEvalute.evaluateUserId == evaluateState.user" text type="primary" :icon="Plus" @click="openEvaluateDialog('评价', scope.row)">评价</el-button> - <el-button size="small" v-if="scope.row.riskValue" text type="primary" :icon="View" @click="openEvaluateDialog('查看', scope.row)">查看</el-button> - </template> - </el-table-column> - </el-table> - </el-dialog> - - <evaluate-dialog ref="evaluateDialogRef" @refresh="getDataAndClose"></evaluate-dialog> - </div> -</template> - -<script setup lang="ts"> -import {defineAsyncComponent, onMounted, reactive, ref} from "vue"; -import {evaluateApi} from "/@/api/analyse/evaluate"; -import {identifyApi} from "/@/api/analyse/identify"; -import {ElMessage, ElMessageBox} from "element-plus"; -import { Edit, View, Plus, Delete, DocumentChecked } from '@element-plus/icons-vue'; -import {planApi} from "/@/api/analyse/plan"; -import {userApi} from "/@/api/systemManage/user"; -import {useUserInfo} from "/@/stores/userInfo"; -import {storeToRefs} from "pinia"; - -const EvaluateDialog = defineAsyncComponent(() => import('./components/evaluateDialog.vue')); - -const evaluateDialogRef = ref(); -const userInfo = useUserInfo(); -const { userInfos } = storeToRefs(userInfo); -const evaluateState = reactive<EvaluateStateType>({ - evaluateData: [], - user: null, - currentEvalute:{}, - evaluateDialog: false, - searchQuery: { - pageIndex: 1, - pageSize: 10, - assessPlanName: '', - experimentName: '', - tag: 2, - planExecStatus: 5 - }, - total: 0, - planList: [ - ], - 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'}, - ] - // deviceUnitList: [ - // {id:1, name: '台'}, - // {id:2, name: '个'}, - // {id:3, name: '件'} - // ] -}); - -const getEvaluateData = async () => { - let res = await identifyApi().getIdentifyByList(evaluateState.searchQuery); - if(res.data.code === 100){ - evaluateState.evaluateData = res.data.data; - evaluateState.total = res.data.total; - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } -}; - -const getDataAndClose =()=>{ - evaluateState.evaluateDialog = false - getEvaluateData() -} - -const getAllPlanList = async () => { - let res = await planApi().getAllPlan(); - if(res.data.code === 100){ - evaluateState.planList = JSON.parse(JSON.stringify(res.data.data)); - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } -}; - -const getPersonList = async () => { - let res = await userApi().getUserList({ - pageIndex: 1, - pageSize: 99999, - searchParams:{ - roleId: null, - name: '', - realName: '' - } - }); - if(res.data.code === 100){ - evaluateState.personList = JSON.parse(JSON.stringify(res.data.data)); - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }) - } -}; - -const openEvaluate = (value: IdentifyType) => { - evaluateState.evaluateDialog = true - evaluateState.currentEvalute = value -} - -const openEvaluateDialog = (title: string, value: IdentifyType) => { - evaluateDialogRef.value.showEvaluateDialog(title, value); -}; - -const onDelEvaluate = (val: IdentifyType) => { - ElMessageBox.confirm(`此操作将提交该计划:“${val.assessPlanName}”,是否继续?`, '提示', { - confirmButtonText: '确认', - cancelButtonText: '取消', - type: 'warning' - }) - .then(async () => { - let res = await evaluateApi().submitEvaluate({ id: val.id }); - if (res.data.code === 100) { - ElMessage({ - type: 'success', - duration: 2000, - message: '删除成功' - }); - await getEvaluateData(); - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - }) - .catch((error) => { - }); -}; - -const accessEvaluate = (val: IdentifyType) => { - ElMessageBox.confirm(`此操作将提交该评价计划:“${val.assessPlanName}”的评价信息,是否继续?`, '提示', { - confirmButtonText: '确认', - cancelButtonText: '取消', - type: 'warning' - }) - .then(async () => { - let res = await evaluateApi().submitEvaluate({ id: val.id }); - if (res.data.code === 100) { - ElMessage({ - type: 'success', - duration: 2000, - message: '提交成功' - }); - await getEvaluateData(); - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - }) - .catch((error) => { - }); -}; - -const onHandleSizeChange = (val: number) => { - evaluateState.searchQuery.pageSize = val; - getEvaluateData(); -}; - -const onHandleCurrentChange = (val: number) => { - evaluateState.searchQuery.pageIndex = val; - getEvaluateData(); -}; - -const reset = () => { - evaluateState.searchQuery = { - pageIndex: 1, - pageSize: 10, - assessPlanName: '', - experimentName: '', - tag: 2, - planExecStatus: 5 - } -}; - -onMounted(() => { - getEvaluateData(); - getAllPlanList(); - getPersonList(); - evaluateState.user = Number(userInfos.value.uid) -}); - -</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; - } - } - } -} - -: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); -} -:deep(.el-range-editor.is-disabled input){ - background-color: var(--el-card-bg-color); - color: var(--el-input-text-color, var(--el-text-color-regular)); -} -</style> diff --git a/src/views/analyse/identify/components/identifyDialog.vue b/src/views/analyse/identify/components/identifyDialog.vue deleted file mode 100644 index a764ab6..0000000 --- a/src/views/analyse/identify/components/identifyDialog.vue +++ /dev/null @@ -1,513 +0,0 @@ -<template> - <div class="system-menu-dialog-container"> - <el-dialog :title="identifyDialogState.title" v-model="identifyDialogState.identifyDialogVisible" width="600px"> - <el-form ref="identifyFormRef" :rules="identifyDialogState.identifyFormRules" :model="identifyDialogState.identifyForm" size="default" label-width="160px"> - <el-row :gutter="35"> -<!-- <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">--> -<!-- <el-form-item label="辨识方法" prop="identificationMethod">--> -<!-- <el-select class="input-length" :disabled="true" v-model="identifyDialogState.identifyForm.identificationMethod" style="width:100%" placeholder="辨识方法" clearable>--> -<!-- <el-option v-for="item in identifyDialogState.identificationMethodList" :key="item.id" :label="item.name" :value="item.id"></el-option>--> -<!-- </el-select>--> -<!-- </el-form-item>--> -<!-- </el-col>--> - - <div style="width: 100%" v-if="identifyDialogState.method === 1"> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="PHA_检查项目" prop="phaCheckItem"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.phaCheckItem" placeholder="检查项目" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="PHA_存在风险因素" prop="phaRiskFactor"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.phaRiskFactor" placeholder="存在风险因素" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="PHA_可能产生的后果" prop="phaResult"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.phaResult" placeholder="可能产生的后果" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="分配评价方法"> - <el-select disabled class="input-length" v-model="identifyDialogState.evaluateMethod" style="width:100%" placeholder="" clearable> - <el-option v-for="item in identifyDialogState.evaluateMethodList" :key="item.id" :label="item.name" :value="item.id"></el-option> - </el-select> - </el-form-item> - </el-col> -<!-- <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">--> -<!-- <el-form-item label="评价专家" prop="phaEvaluateUser">--> -<!-- <el-select class="input-length" v-model="identifyDialogState.identifyForm.phaEvaluateUser" style="width:100%" placeholder="" clearable>--> -<!-- <el-option v-for="item in identifyDialogState.personList" :key="item.id" :label="item.name" :value="item.id"></el-option>--> -<!-- </el-select>--> -<!-- </el-form-item>--> -<!-- </el-col>--> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="评价专家"> - <el-input class="input-length" disabled v-model="identifyDialogState.evaluateUser" placeholder="暂无评价专家" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="辨识结果" prop="result"> - <el-radio-group v-model="identifyDialogState.identifyForm.result" :disabled="identifyDialogState.disabled"> - <el-radio :label="1">有风险</el-radio> - <el-radio :label="2">无风险</el-radio> - </el-radio-group> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="辨识专家建议" prop="identificationDesc"> - <el-input class="input-length" type="textarea" :autosize="{ minRows: 3}" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.identificationDesc" placeholder="辨识专家建议" clearable></el-input> - </el-form-item> - </el-col> - </div> - - <div style="width: 100%" v-if="identifyDialogState.method === 2"> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="JHA_作业步骤" prop="jhaCheckItem"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.jhaCheckItem" placeholder="作业步骤" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="JHA_危险源或潜在事件" prop="jhaRiskFactor"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.jhaRiskFactor" placeholder="危险源或潜在事件" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="JHA_可能产生的后果" prop="jhaResult"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.jhaResult" placeholder="可能产生的后果" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="分配评价方法"> - <el-select disabled class="input-length" v-model="identifyDialogState.evaluateMethod" style="width:100%" placeholder="" clearable> - <el-option v-for="item in identifyDialogState.evaluateMethodList" :key="item.id" :label="item.name" :value="item.id"></el-option> - </el-select> - </el-form-item> - </el-col> -<!-- <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">--> -<!-- <el-form-item label="评价专家" prop="jhaEvaluateUser">--> -<!-- <el-select class="input-length" v-model="identifyDialogState.identifyForm.jhaEvaluateUser" style="width:100%" placeholder="" clearable>--> -<!-- <el-option v-for="item in identifyDialogState.personList" :key="item.id" :label="item.name" :value="item.id"></el-option>--> -<!-- </el-select>--> -<!-- </el-form-item>--> -<!-- </el-col>--> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="评价专家"> - <el-input class="input-length" disabled v-model="identifyDialogState.evaluateUser" placeholder="暂无评价专家" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="辨识结果" prop="result"> - <el-radio-group v-model="identifyDialogState.identifyForm.result" :disabled="identifyDialogState.disabled"> - <el-radio :label="1">有风险</el-radio> - <el-radio :label="2">无风险</el-radio> - </el-radio-group> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="辨识专家建议" prop="identificationDesc"> - <el-input class="input-length" type="textarea" :autosize="{ minRows: 3}" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.identificationDesc" placeholder="辨识专家建议" clearable></el-input> - </el-form-item> - </el-col> - </div> - - <div style="width: 100%" v-if="identifyDialogState.method === 3"> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="SCL_检查项目" prop="sclCheckItem"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.sclCheckItem" placeholder="检查项目" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="SCL_检查标准" prop="sclCheckStandard"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.sclCheckStandard" placeholder="检查标准" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="SCL_不符合标准情况" prop="sclCheckUnstandard"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.sclCheckUnstandard" placeholder="不符合标准情况" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="SCL_主要后果" prop="sclCheckResult"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.sclCheckResult" placeholder="主要后果" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="分配评价方法"> - <el-select disabled class="input-length" v-model="identifyDialogState.evaluateMethod" style="width:100%" placeholder="" clearable> - <el-option v-for="item in identifyDialogState.evaluateMethodList" :key="item.id" :label="item.name" :value="item.id"></el-option> - </el-select> - </el-form-item> - </el-col> -<!-- <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">--> -<!-- <el-form-item label="评价专家" prop="sclEvaluateUser">--> -<!-- <el-select class="input-length" v-model="identifyDialogState.identifyForm.sclEvaluateUser" style="width:100%" placeholder="" clearable>--> -<!-- <el-option v-for="item in identifyDialogState.personList" :key="item.id" :label="item.name" :value="item.id"></el-option>--> -<!-- </el-select>--> -<!-- </el-form-item>--> -<!-- </el-col>--> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="评价专家"> - <el-input class="input-length" disabled v-model="identifyDialogState.evaluateUser" placeholder="暂无评价专家" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="辨识结果" prop="result"> - <el-radio-group v-model="identifyDialogState.identifyForm.result" :disabled="identifyDialogState.disabled"> - <el-radio :label="1">有风险</el-radio> - <el-radio :label="2">无风险</el-radio> - </el-radio-group> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="辨识专家建议" prop="identificationDesc"> - <el-input class="input-length" type="textarea" :autosize="{ minRows: 3}" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.identificationDesc" placeholder="辨识专家建议" clearable></el-input> - </el-form-item> - </el-col> - </div> - - <div style="width: 100%" v-if="identifyDialogState.method === 4"> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="HAZOP_节点" prop="hazopNode"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.hazopNode" placeholder="HAZOP_节点" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="HAZOP_参数" prop="hazopParam"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.hazopParam" placeholder="HAZOP_参数" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="HAZOP_参数描述" prop="hazopParamDesc"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.hazopParamDesc" placeholder="HAZOP_参数描述" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="HAZOP_引导词" prop="hazopGuide"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.hazopGuide" placeholder="HAZOP_引导词" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="HAZOP_偏差" prop="hazopDeviation"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.hazopDeviation" placeholder="HAZOP_偏差" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="HAZOP_可能原因" prop="hazopPossibleCauses"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.hazopPossibleCauses" placeholder="HAZOP_可能原因" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="HAZOP_主要后果" prop="hazopResult"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.hazopResult" placeholder="HAZOP_主要后果" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="分配评价方法"> - <el-select disabled class="input-length" v-model="identifyDialogState.evaluateMethod" style="width:100%" placeholder="" clearable> - <el-option v-for="item in identifyDialogState.evaluateMethodList" :key="item.id" :label="item.name" :value="item.id"></el-option> - </el-select> - </el-form-item> - </el-col> -<!-- <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">--> -<!-- <el-form-item label="评价专家" prop="hazopEvaluateUser">--> -<!-- <el-select class="input-length" v-model="identifyDialogState.identifyForm.hazopEvaluateUser" style="width:100%" placeholder="" clearable>--> -<!-- <el-option v-for="item in identifyDialogState.personList" :key="item.id" :label="item.name" :value="item.id"></el-option>--> -<!-- </el-select>--> -<!-- </el-form-item>--> -<!-- </el-col>--> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="评价专家"> - <el-input class="input-length" disabled v-model="identifyDialogState.evaluateUser" placeholder="暂无评价专家" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="辨识结果" prop="result"> - <el-radio-group v-model="identifyDialogState.identifyForm.result" :disabled="identifyDialogState.disabled"> - <el-radio :label="1">有风险</el-radio> - <el-radio :label="2">无风险</el-radio> - </el-radio-group> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="辨识专家建议" prop="identificationDesc"> - <el-input class="input-length" type="textarea" :autosize="{ minRows: 3}" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.identificationDesc" placeholder="辨识专家建议" clearable></el-input> - </el-form-item> - </el-col> - </div> - - <div style="width: 100%" v-if="identifyDialogState.method === 5"> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="类比法_检查项目" prop="analogyCheckItem"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.analogyCheckItem" placeholder="检查项目" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="类比法_类比参照" prop="analogyReference"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.analogyReference" placeholder="类比参照" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="类比法_存在风险因素" prop="analogyRiskFactor"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.analogyRiskFactor" placeholder="存在风险因素" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="类比法_可能产生的后果" prop="analogyResult"> - <el-input class="input-length" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.analogyResult" placeholder="可能产生的后果" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="分配评价方法"> - <el-select disabled class="input-length" v-model="identifyDialogState.evaluateMethod" style="width:100%" placeholder="" clearable> - <el-option v-for="item in identifyDialogState.evaluateMethodList" :key="item.id" :label="item.name" :value="item.id"></el-option> - </el-select> - </el-form-item> - </el-col> -<!-- <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">--> -<!-- <el-form-item label="评价专家" prop="analogyEvaluateUser">--> -<!-- <el-select class="input-length" v-model="identifyDialogState.identifyForm.analogyEvaluateUser" style="width:100%" placeholder="" clearable>--> -<!-- <el-option v-for="item in identifyDialogState.personList" :key="item.id" :label="item.name" :value="item.id"></el-option>--> -<!-- </el-select>--> -<!-- </el-form-item>--> -<!-- </el-col>--> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="评价专家"> - <el-input class="input-length" disabled v-model="identifyDialogState.evaluateUser" placeholder="暂无评价专家" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="辨识结果" prop="result"> - <el-radio-group v-model="identifyDialogState.identifyForm.result" :disabled="identifyDialogState.disabled"> - <el-radio :label="1">有风险</el-radio> - <el-radio :label="2">无风险</el-radio> - </el-radio-group> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="辨识专家建议" prop="identificationDesc"> - <el-input class="input-length" type="textarea" :autosize="{ minRows: 3}" :disabled="identifyDialogState.disabled" v-model="identifyDialogState.identifyForm.identificationDesc" placeholder="辨识专家建议" clearable></el-input> - </el-form-item> - </el-col> - </div> - </el-row> - </el-form> - <template #footer> - <span class="dialog-footer"> - <el-button @click="identifyDialogState.identifyDialogVisible = !identifyDialogState.identifyDialogVisible" size="default">取 消</el-button> - <el-button v-if="!identifyDialogState.disabled" type="primary" @click="onSubmitIdentify" size="default">确定</el-button> - </span> - </template> - </el-dialog> - </div> -</template> - -<script setup lang="ts"> -import { reactive, ref } from "vue"; -import {ElMessage} from "element-plus"; -import {identifyApi} from "/@/api/analyse/identify"; -import {isValidKey} from "/@/utils/methods"; - -const identifyFormRef = ref() - -const identifyDialogState = reactive<IdentifyDialogType>({ - title: '', - method: null, - time:[], - disabled: false, - evaluateMethod: null, - evaluateUser: '', - identifyDialogVisible: false, - identifyForm: { - id: null, - identificationMethod: null, - result: null, - identificationDesc: '', - analogyCheckItem: '', - analogyRiskFactor: '', - analogyResult: '', - analogyReference: '', - hazopNode: '', - hazopParam: '', - hazopParamDesc: '', - hazopGuide: '', - hazopDeviation: '', - hazopPossibleCauses: '', - hazopResult: '', - jhaCheckItem: '', - jhaRiskFactor: '', - jhaResult: '', - phaCheckItem: '', - phaRiskFactor: '', - phaResult: '', - sclCheckItem: '', - sclCheckStandard: '', - sclCheckUnstandard: '', - sclCheckResult: '', - hazopId: null, - jhaId: null, - phaId: null, - sclId: null, - analogyId: null - }, - identifyFormRules: { - result: [{ required: true, message: '请选择辨识结果', trigger: 'blur' }], - identificationDesc: [{ required: true, message: '请输入辨识专家建议', trigger: 'blur' }], - analogyCheckItem: [{ required: true, message: '请输入检查项目', trigger: 'blur' }], - analogyRiskFactor: [{ required: true, message: '请输入存在风险因素', trigger: 'blur' }], - analogyResult: [{ required: true, message: '请输入可能产生的后果', trigger: 'blur' }], - analogyReference: [{ required: true, message: '请输入类比参照', trigger: 'blur' }], - hazopNode: [{ required: true, message: '请输入节点', trigger: 'blur' }], - hazopParam: [{ required: true, message: '请输入参数', trigger: 'blur' }], - hazopParamDesc: [{ required: true, message: '请输入参数描述', trigger: 'blur' }], - hazopGuide: [{ required: true, message: '请输入引导词', trigger: 'blur' }], - hazopDeviation: [{ required: true, message: '请输入偏差', trigger: 'blur' }], - hazopPossibleCauses: [{ required: true, message: '请输入可能原因', trigger: 'blur' }], - hazopResult: [{ required: true, message: '请输入主要后果', trigger: 'blur' }], - jhaCheckItem: [{ required: true, message: '请输入作业步骤', trigger: 'blur' }], - jhaRiskFactor: [{ required: true, message: '请输入危险源或潜在事件', trigger: 'blur' }], - jhaResult: [{ required: true, message: '请输入可能产生的后果', trigger: 'blur' }], - phaCheckItem: [{ required: true, message: '请输入检查项目', trigger: 'blur' }], - phaRiskFactor: [{ required: true, message: '请输入存在风险因素', trigger: 'blur' }], - phaResult: [{ required: true, message: '请输入可能产生的后果', trigger: 'blur' }], - sclCheckItem: [{ required: true, message: '请输入检查项目', trigger: 'blur' }], - sclCheckStandard: [{ required: true, message: '请输入检查标准', trigger: 'blur' }], - sclCheckUnstandard: [{ required: true, message: '请输入不符合标准情况', trigger: 'blur' }], - sclCheckResult: [{ required: true, message: '请输入主要后果', trigger: 'blur' }] - }, - planList: [], - personList: [], - 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'}, - ] -}) - -const showIdentifyDialog = (title: string, value: IdentifyType, identifyQueryForm: identifyQueryFormType,idenForm: IdentifyType,personList: Array<NewPersonListType>) => { - identifyDialogState.method = identifyQueryForm.identificationMethod - identifyDialogState.identifyDialogVisible = true; - identifyDialogState.disabled = false - identifyDialogState.evaluateMethod = idenForm.evaluateMethod - identifyDialogState.evaluateUser = idenForm.evaluateUser - identifyDialogState.personList = personList - setTimeout(() => { - identifyFormRef.value.clearValidate(); - }); - if(title === '新增'){ - identifyDialogState.title = '新增'; - identifyDialogState.identifyForm = { - id: identifyQueryForm.id, - identificationMethod: identifyQueryForm.identificationMethod, - result: null, - identificationDesc: '', - analogyCheckItem: '', - analogyRiskFactor: '', - analogyResult: '', - analogyReference: '', - hazopNode: '', - hazopParam: '', - hazopParamDesc: '', - hazopGuide: '', - hazopDeviation: '', - hazopPossibleCauses: '', - hazopResult: '', - jhaCheckItem: '', - jhaRiskFactor: '', - jhaResult: '', - phaCheckItem: '', - phaRiskFactor: '', - phaResult: '', - sclCheckItem: '', - sclCheckStandard: '', - sclCheckUnstandard: '', - sclCheckResult: '', - hazopId: null, - jhaId: null, - phaId: null, - sclId: null, - analogyId: null, - }; - }else if(title === '查看'){ - identifyDialogState.title = '查看'; - identifyDialogState.disabled = true - for(let i in identifyDialogState.identifyForm){ - if(isValidKey(i, identifyDialogState.identifyForm)){ - identifyDialogState.identifyForm[i] = value[i]; - } - } - }else{ - identifyDialogState.title = '编辑'; - for(let i in identifyDialogState.identifyForm){ - if(isValidKey(i, identifyDialogState.identifyForm)){ - identifyDialogState.identifyForm[i] = value[i]; - } - } - identifyDialogState.identifyForm.identificationMethod = identifyQueryForm.identificationMethod - console.log(identifyDialogState.identifyForm,'identifyDialogState.identifyForm') - } -}; - -const onSubmitIdentify = () => { - identifyFormRef.value.validate(async(valid: boolean) => { - if(valid){ - if(identifyDialogState.title === '新增'){ - let { hazopId, jhaId, phaId, sclId, analogyId, ...data } = identifyDialogState.identifyForm - let res = await identifyApi().addIdentify(data); - if(res.data.code === 100){ - emit('refresh',1,res.data.data) - identifyDialogState.identifyDialogVisible = false; - ElMessage({ - type: 'success', - message: '新增成功' - }) - - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg, - }); - } - }else{ - let res = await identifyApi().modIdentify(identifyDialogState.identifyForm) - if(res.data.code === 100){ - emit('refresh',2,identifyDialogState.identifyForm) - identifyDialogState.identifyDialogVisible = false; - ElMessage({ - type: 'success', - message: '编辑成功' - }) - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg, - }); - } - } - }else{ - ElMessage({ - type: 'warning', - message: '请完善基本信息', - }); - } - }) -} - -const emit = defineEmits(['refresh']) - -defineExpose({ - showIdentifyDialog -}) -</script> - -<style scoped> - -</style> diff --git a/src/views/analyse/identify/components/identifyQuery.vue b/src/views/analyse/identify/components/identifyQuery.vue deleted file mode 100644 index 7aed26a..0000000 --- a/src/views/analyse/identify/components/identifyQuery.vue +++ /dev/null @@ -1,275 +0,0 @@ -<template> - <div class="system-menu-dialog-container"> - <el-dialog :title="identifyQueryState.title" v-model="identifyQueryState.identifyQueryVisible" :close-on-click-modal="false" width="800px" @close="resetData()"> - <el-form ref="identifyFormRef" :model="identifyQueryState.identifyQueryForm" size="default" label-width="160px"> - <el-row :gutter="35"> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="风险评价计划名称" prop="id"> - <el-select class="input-length" :disabled="true" v-model="identifyQueryState.identifyQueryForm.id" style="width:100%" placeholder="风险评价计划名称" clearable> - <el-option v-for="item in identifyQueryState.planList" :key="item.id" :label="item.assessPlanName" :value="item.id"></el-option> - </el-select> - </el-form-item> - </el-col> -<!-- <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">--> -<!-- <el-form-item label="评价类型">--> -<!-- <el-input v-model="identifyQueryState.identifyQueryForm.assessType" readonly></el-input>--> -<!-- </el-form-item>--> -<!-- </el-col>--> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="计划开始评价时间"> - <el-input v-model="identifyQueryState.identifyQueryForm.assessStartTime" readonly></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="评价风险分析单元"> - <el-input v-model="identifyQueryState.identifyQueryForm.riskUnitName" readonly placeholder="暂无风险分析单元"></el-input> - </el-form-item> - </el-col> - <el-col style="display: flex;align-items: center" :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="辨识方法" prop="identificationMethod"> - <el-select class="input-length" disabled v-model="identifyQueryState.identifyQueryForm.identificationMethod" style="width:100%" placeholder="辨识方法" clearable> - <el-option v-for="item in identifyQueryState.identificationMethodList" :key="item.id" :label="item.name" :value="item.id"></el-option> - </el-select> - </el-form-item> - <el-button size="default" v-if="identifyQueryState.identifyForm.planExecStatus == 2" type="primary" @click="openChangeMethod()">修改辨识方法</el-button> - </el-col> - </el-row> - </el-form> - <div class="checkUnit-point"> - <el-tabs class="active" v-model="identifyQueryState.activeName"> - <el-tab-pane label="辨识信息" name="identify"> - <div style="padding-bottom: 10px" v-if="identifyQueryState.identifyForm.planExecStatus === 2"> - <el-button size="default" type="primary" @click="openIdentifyDialog('新增', '')"> - <el-icon> - <ele-FolderAdd /> - </el-icon> - 新增 - </el-button> - </div> - - <el-table :data="identifyQueryState.list" border fit highlight-current-row style="width: 100%"> - <el-table-column type="index" label="序号" width="80" /> - <el-table-column v-if="identifyQueryState.identifyForm.identificationMethod == 1" prop="phaCheckItem" label="检查项目" show-overflow-tooltip align="center"></el-table-column> - <el-table-column v-if="identifyQueryState.identifyForm.identificationMethod == 1" prop="phaRiskFactor" label="存在风险因素" show-overflow-tooltip align="center"></el-table-column> - <el-table-column v-if="identifyQueryState.identifyForm.identificationMethod == 1" prop="phaResult" label="可能存在后果" show-overflow-tooltip align="center"></el-table-column> - <el-table-column v-if="identifyQueryState.identifyForm.identificationMethod == 2" prop="jhaCheckItem" label="作业步骤" show-overflow-tooltip align="center"></el-table-column> - <el-table-column v-if="identifyQueryState.identifyForm.identificationMethod == 2" prop="jhaRiskFactor" label="存在风险因素" show-overflow-tooltip align="center"></el-table-column> - <el-table-column v-if="identifyQueryState.identifyForm.identificationMethod == 2" prop="jhaResult" label="可能存在后果" show-overflow-tooltip align="center"></el-table-column> - <el-table-column v-if="identifyQueryState.identifyForm.identificationMethod == 3" prop="sclCheckItem" label="检查项目" show-overflow-tooltip align="center"></el-table-column> - <el-table-column v-if="identifyQueryState.identifyForm.identificationMethod == 3" prop="sclCheckStandard" label="检查标准" show-overflow-tooltip align="center"></el-table-column> - <el-table-column v-if="identifyQueryState.identifyForm.identificationMethod == 3" prop="sclCheckUnstandard" label="不符合标准情况" show-overflow-tooltip align="center"></el-table-column> - <el-table-column v-if="identifyQueryState.identifyForm.identificationMethod == 3" prop="sclCheckResult" label="主要后果" show-overflow-tooltip align="center"></el-table-column> - <el-table-column v-if="identifyQueryState.identifyForm.identificationMethod == 4" prop="hazopNode" label="节点" show-overflow-tooltip align="center"></el-table-column> - <el-table-column v-if="identifyQueryState.identifyForm.identificationMethod == 4" prop="hazopParam" label="参数" show-overflow-tooltip align="center"></el-table-column> - <el-table-column v-if="identifyQueryState.identifyForm.identificationMethod == 4" prop="hazopParamDesc" label="参数描述" show-overflow-tooltip align="center"></el-table-column> - <el-table-column v-if="identifyQueryState.identifyForm.identificationMethod == 4" prop="hazopNode" label="节点" show-overflow-tooltip align="center"></el-table-column> - <el-table-column v-if="identifyQueryState.identifyForm.identificationMethod == 4" prop="hazopGuide" label="引导词" show-overflow-tooltip align="center"></el-table-column> - <el-table-column v-if="identifyQueryState.identifyForm.identificationMethod == 4" prop="hazopDeviation" label="偏差" show-overflow-tooltip align="center"></el-table-column> - <el-table-column v-if="identifyQueryState.identifyForm.identificationMethod == 4" prop="hazopPossibleCauses" label="可能原因" show-overflow-tooltip align="center"></el-table-column> - <el-table-column v-if="identifyQueryState.identifyForm.identificationMethod == 4" prop="hazopResult" label="可能存在后果" show-overflow-tooltip align="center"></el-table-column> - <el-table-column v-if="identifyQueryState.identifyForm.identificationMethod == 5" prop="analogyCheckItem" label="检查项目" show-overflow-tooltip align="center"></el-table-column> - <el-table-column v-if="identifyQueryState.identifyForm.identificationMethod == 5" prop="analogyReference" label="类比参照" show-overflow-tooltip align="center"></el-table-column> - <el-table-column v-if="identifyQueryState.identifyForm.identificationMethod == 5" prop="analogyRiskFactor" label="存在风险因素" show-overflow-tooltip align="center"></el-table-column> - <el-table-column v-if="identifyQueryState.identifyForm.identificationMethod == 5" prop="analogyResult" label="可能存在后果" show-overflow-tooltip align="center"></el-table-column> - <el-table-column prop="result" label="辨识结果" show-overflow-tooltip align="center"> - <template #default="scope"> - <span>{{scope.row.result == 1?'有风险':scope.row.result == 2?'无风险':'--'}}</span> - </template> - </el-table-column> - <el-table-column label="操作" width="150" align="center"> - <template #default="scope"> - <el-button size="default" text type="primary" @click="openIdentifyDialog('查看', scope.row)">查看</el-button> - <el-button size="default" text type="primary" v-if="identifyQueryState.identifyForm.planExecStatus === 2" @click="openIdentifyDialog('编辑', scope.row)">编辑</el-button> - <el-button size="default" text type="danger" v-if="identifyQueryState.identifyForm.planExecStatus === 2" @click="onDelIdentifyQuery(scope.$index, scope.row)">删除</el-button> - </template> - </el-table-column> - </el-table> - </el-tab-pane> - </el-tabs> - </div> - <template #footer> - <span class="Query-footer"> - <el-button @click="identifyQueryState.identifyQueryVisible = !identifyQueryState.identifyQueryVisible" size="default">取 消</el-button> - <el-button v-if="identifyQueryState.identifyForm.planExecStatus === 2" type="primary" @click="identifyQueryState.identifyQueryVisible = !identifyQueryState.identifyQueryVisible" size="default">确定</el-button> - </span> - </template> - </el-dialog> - <el-dialog title="修改辨识方法" v-model="identifyQueryState.identifyMethodVisible" width="30%"> - <el-select class="input-length" v-model="identifyQueryState.currentMethod" style="width:100%" placeholder="辨识方法" clearable> - <el-option v-for="item in identifyQueryState.identificationMethodList" :key="item.id" :label="item.name" :value="item.id"></el-option> - </el-select> - <template #footer> - <span class="Query-footer"> - <el-button @click="identifyQueryState.identifyMethodVisible = false" size="default">取 消</el-button> - <el-button type="primary" @click="conFirmChange()" size="default">确定</el-button> - </span> - </template> - </el-dialog> - <identify-dialog ref="identifyDialogRef" @refresh="getIdentifyData"></identify-dialog> - </div> -</template> - -<script setup lang="ts"> -import {defineAsyncComponent, reactive, ref} from "vue"; -import {ElMessage, ElMessageBox} from "element-plus"; -import {identifyApi} from "/@/api/analyse/identify"; -import {isValidKey} from "/@/utils/methods"; -import {userApi} from "/@/api/systemManage/user"; - -const identifyDialogRef = ref() -const IdentifyDialog = defineAsyncComponent(() => import('./identifyDialog.vue')) - -const identifyQueryState = reactive<IdentifyQueryType>({ - title: '', - activeName: 'identify', - list: [], - identifyQueryVisible: false, - identifyMethodVisible: false, - currentMethod: null, - identifyQueryForm: { - id: null, - identificationMethod: null, - assessType: null, - assessStartTime: '', - riskUnitName: '' - }, - identifyForm: {}, - identificationMethodList: [ - {id:1, name: 'PHA'}, - {id:2, name: 'JHA'}, - {id:3, name: 'SCL'}, - {id:4, name: 'HAZOP'}, - {id:5, name: '类比法'}, - ], - planList: [], - personList: [] -}) - -// const getAssessInfo =(value: number|null)=>{ -// const data = identifyQueryState.planList.find(item => item.id === value) as PlanType -// } - -const showIdentifyQuery = (title: string, value: IdentifyType, planList: PlanType [], personList: AllPersonListType []) => { - identifyQueryState.identifyQueryVisible = true; - identifyQueryState.identifyForm = value; - identifyQueryState.list = value.factorQueryDTOList - identifyQueryState.planList = planList; - identifyQueryState.personList = personList - identifyQueryState.list = value.factorQueryDTOList; - // getAssessInfo(identifyQueryState.identifyQueryForm.id); - for(let i in identifyQueryState.identifyQueryForm){ - if(isValidKey(i, identifyQueryState.identifyQueryForm)){ - identifyQueryState.identifyQueryForm[i] = value[i] - } - } - - if(title === '辨识'){ - identifyQueryState.title = '辨识'; - }else { - identifyQueryState.title = '查看'; - } -}; - -const openIdentifyDialog = (title: string, value: IdentifyType) => { - identifyDialogRef.value.showIdentifyDialog(title, value, identifyQueryState.identifyQueryForm,identifyQueryState.identifyForm, identifyQueryState.personList); -}; - -const openChangeMethod = ()=>{ - identifyQueryState.currentMethod = identifyQueryState.identifyQueryForm.identificationMethod - identifyQueryState.identifyMethodVisible = true -} - -const conFirmChange = async () =>{ - let res = await identifyApi().UpdateIdentifyMethod({ - id: identifyQueryState.identifyQueryForm.id, - identificationMethodId: identifyQueryState.currentMethod - }); - if(res.data.code === 100){ - ElMessage({ - type: 'success', - message: '辨识方法修改成功' - }) - identifyQueryState.identifyQueryForm.identificationMethod = identifyQueryState.currentMethod, - identifyQueryState.currentMethod = identifyQueryState.currentMethod, - emit('refresh') - getIdentifyData() - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }) - } - identifyQueryState.identifyMethodVisible = false -} - -const resetData = ()=>{ - emit('refresh') -} - -// const refreshList = (type: number, data: IdentifyType) => { -// if(type === 1){ -// identifyQueryState.list?.push(data) -// }else{ -// (<Array<IdentifyType>>identifyQueryState.list)[identifyQueryState.list?.findIndex(item => item.id === data.id) as number] = data -// } -// }; - -const getIdentifyData = async () => { - let res = await identifyApi().getIdentifyByList( -{ - pageIndex: 1, - pageSize: 10, - assessPlanName: '', - experimentName: '', - tag: 1, - assessPlanId: identifyQueryState.identifyForm.id - } - ); - if(res.data.code === 100){ - identifyQueryState.list = res.data.data[0].factorQueryDTOList - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } -}; - -const onDelIdentifyQuery = (index: number, val: IdentifyType) => { - ElMessageBox.confirm(`此操作将永久删除该辨识,是否继续?`, '提示', { - confirmButtonText: '确认', - cancelButtonText: '取消', - type: 'warning' - }) - .then(async () => { - let data = { id: val.id, analogyId: val.analogyId, hazopId: val.hazopId, jhaId: val.jhaId, phaId: val.phaId, sclId: val.sclId, } - let res = await identifyApi().deleteIdentifyById(data); - if (res.data.code === 100) { - (<Array<IdentifyType>>identifyQueryState.list).splice(index, 1) - ElMessage({ - type: 'success', - duration: 2000, - message: '删除成功' - }); - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - }) - .catch((error) => { - console.log(error); - }); -}; - -const emit = defineEmits(['refresh']) - -defineExpose({ - showIdentifyQuery -}) -</script> - -<style scoped> - -</style> diff --git a/src/views/analyse/identify/index.ts b/src/views/analyse/identify/index.ts deleted file mode 100644 index 66859ae..0000000 --- a/src/views/analyse/identify/index.ts +++ /dev/null @@ -1,136 +0,0 @@ -declare interface IdentifyStateType { - identifyData: Array<IdentifyType> - user: null | number - searchQuery: { - pageIndex: number, - pageSize: number, - assessPlanName: string, - experimentName: string, - tag: number, - } - total: number - identificationMethodList: Array<Type>, - evaluateMethodList: Array<Type> - planList: Array<PlanType> - personList: Array<SystemPersonType> -} - -declare interface IdentifyQueryType { - title: string, - activeName: string, - list?: IdentifyType [], - identifyQueryVisible: boolean, - identifyMethodVisible: boolean - currentMethod: number | null - identifyQueryForm: identifyQueryFormType, - identifyForm: IdentifyType, - identificationMethodList: Array<Type>, - planList: Array<PlanType> - personList: Array<AllPersonListType> -} - -declare interface identifyQueryFormType { - id: null | number, - identificationMethod: null | number, - assessType: null | number, - assessStartTime: string, - riskUnitName: string -} - - -declare interface IdentifyType { - id: number | null, - technologyMeasure?: string, - assessPlanName?: string, - manageMeasure?: string, - educationMeasure?: string, - personalProtectionMeasure?: string, - emergencyMeasure?: string, - identificationMethod: number | null, - hazopId?: number | null, - jhaId?: number | null, - phaId?: number | null, - sclId?: number | null, - analogyId?: number | null, - analogyCheckItem: string, - analogyRiskFactor: string, - analogyResult: string, - analogyReference: string, - hazopNode: string, - hazopParam: string, - hazopParamDesc: string, - hazopGuide: string, - hazopDeviation: string, - hazopPossibleCauses: string, - hazopResult: string, - jhaCheckItem: string, - jhaRiskFactor: string, - jhaResult: string, - phaCheckItem: string, - phaRiskFactor: string, - phaResult: string, - sclCheckItem: string, - sclCheckStandard: string, - sclCheckUnstandard: string, - sclCheckResult: string, - planExecStatus?: number, - evaluateMethod?: number, - factorQueryDTOList?: EvaluateType [], - evaluateUser?: string, - result?: number | null, - identificationDesc: string -} - -declare interface Type { - id: number, - name: string, -} - -declare interface IdentifyDialogType { - title: string, - method: null | number, - evaluateMethod: null | number, - evaluateUser?: string, - time: string [], - disabled: boolean, - identifyDialogVisible: boolean, - identifyForm: { - id: number | null, - identificationMethod: number | null, - result: null | number, - identificationDesc: string, - hazopId?: number | null, - jhaId?: number | null, - phaId?: number | null, - sclId?: number | null, - analogyId?: number | null, - analogyCheckItem: string, - analogyRiskFactor: string, - analogyResult: string, - analogyReference: string, - hazopNode: string, - hazopParam: string, - hazopParamDesc: string, - hazopGuide: string, - hazopDeviation: string, - hazopPossibleCauses: string, - hazopResult: string, - jhaCheckItem: string, - jhaRiskFactor: string, - jhaResult: string, - phaCheckItem: string, - phaRiskFactor: string, - phaResult: string, - sclCheckItem: string, - sclCheckStandard: string, - sclCheckUnstandard: string, - sclCheckResult: string, - }, - identifyFormRules: { - - }, - identificationMethodList: Array<Type>, - evaluateMethodList: Array<Type> - planList: Array<PlanType> - personList?: Array<NewPersonListType> -} diff --git a/src/views/analyse/identify/index.vue b/src/views/analyse/identify/index.vue deleted file mode 100644 index 62b0508..0000000 --- a/src/views/analyse/identify/index.vue +++ /dev/null @@ -1,364 +0,0 @@ -<template> - <div class="home-container"> - <div style="height: 100%"> - <el-row class="homeCard"> - <div class="basic-line"> - <span>评估计划名称:</span> - <el-input v-model="identifyState.searchQuery.assessPlanName" clearable filterable class="input-box" placeholder="评估计划名称"> - </el-input> - </div> - <div class="basic-line"> - <span>实验名称:</span> - <el-input v-model="identifyState.searchQuery.experimentName" clearable filterable class="input-box" placeholder="实验名称"> - </el-input> - </div> - <div style="padding-bottom: 10px"> - <el-button type="primary" @click="getIdentifyData">查询</el-button> - <el-button plain @click="reset">重置</el-button> - </div> - </el-row> - <div class="homeCard"> - <div class="main-card"> - <el-row class="cardTop"> - <el-col :span="12" class="mainCardBtn"> -<!-- <el-button type="primary" :icon="Plus" size="default" @click="openIdentifyQuery('新增', {})">新增</el-button>--> - <!-- <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button>--> - </el-col> - <!-- <el-button type="primary" :icon="Refresh" size="default" />--> - </el-row> - <el-table ref="multipleTableRef" :data="identifyState.identifyData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }"> - <el-table-column type="index" label="序号"/> - <el-table-column prop="assessPlanName" label="评估计划名称"/> - <el-table-column prop="identificationMethod" label="辨识方法" show-overflow-tooltip> - <template #default="scope"> - <span>{{`${identifyState.identificationMethodList.find(item =>item.id === scope.row.identificationMethod)?.name}`}}</span> - </template> - </el-table-column> - <el-table-column prop="identificationUser" label="计划负责人" /> - <el-table-column prop="identificationUser" label="辨识专家" /> - <el-table-column prop="evaluateUser" label="评价专家" /> - <el-table-column prop="createTime" label="创建时间" show-overflow-tooltip></el-table-column> - <el-table-column prop="createByUserName" label="创建人" show-overflow-tooltip></el-table-column> - <el-table-column prop="updateTime" label="最后修改时间" show-overflow-tooltip></el-table-column> - <el-table-column prop="updateByUserName" label="最后修改人" show-overflow-tooltip></el-table-column> - <el-table-column prop="planExecStatus" label="执行状态" show-overflow-tooltip> - <template #default="scope"> - <div> - <div v-if="scope.row.planExecStatus === 1"> - <el-tag :type="'info'"> - {{ '未开始' }} - </el-tag> - </div> - <div v-if="scope.row.planExecStatus === 2"> - <el-tag :type="'info'"> - {{ '辨识阶段' }} - </el-tag> - </div> - <div v-if="scope.row.planExecStatus === 3"> - <el-tag :type="'primary'"> - {{ '评价阶段' }} - </el-tag> - </div> - <div v-if="scope.row.planExecStatus === 4"> - <el-tag :type="'success'"> - {{ '完成阶段' }} - </el-tag> - </div> - </div> - </template> - </el-table-column> - <el-table-column label="操作" width="250"> - <template #default="scope"> - <el-button size="small" text type="primary" v-if="scope.row.planExecStatus === 2 && scope.row.identificationUserId == identifyState.user" @click="accessIdentify(scope.row)">提交</el-button> - <el-button size="small" text type="primary" v-if="scope.row.planExecStatus === 3 || scope.row.planExecStatus === 4" :icon="View" @click="openIdentifyQuery('查看', scope.row)">查看</el-button> - <el-button size="small" text type="primary" v-if="scope.row.planExecStatus === 2 && scope.row.identificationUserId == identifyState.user" :icon="Edit" @click="openIdentifyQuery('辨识', scope.row)">辨识</el-button> -<!-- <el-button size="small" text type="primary" v-if="scope.row.planExecStatus === 2" :icon="Edit" @click="openIdentifyQuery('编辑', scope.row)">编辑</el-button>--> - </template> - </el-table-column> - </el-table> - <div class="pageBtn"> - <el-pagination @size-change="onHandleSizeChange" @current-change="onHandleCurrentChange" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="identifyState.searchQuery.pageIndex" background v-model:page-size="identifyState.searchQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="identifyState.total" class="page-position"> </el-pagination> - </div> - </div> - </div> - </div> - <identify-query-dialog ref="identifyQueryDialogRef" @refresh="getIdentifyData"></identify-query-dialog> - </div> -</template> - -<script setup lang="ts"> -import {defineAsyncComponent, onMounted, reactive, ref} from "vue"; -import {identifyApi} from "/@/api/analyse/identify"; -import {ElMessage, ElMessageBox} from "element-plus"; -import { Edit, View, Plus, Delete } from '@element-plus/icons-vue'; -import {planApi} from "/@/api/analyse/plan"; -import {userApi} from "/@/api/systemManage/user"; -import {useUserInfo} from "/@/stores/userInfo"; -import {storeToRefs} from "pinia"; - -const IdentifyQueryDialog = defineAsyncComponent(() => import('./components/identifyQuery.vue')); - -const identifyQueryDialogRef = ref(); -const userInfo = useUserInfo(); -const { userInfos } = storeToRefs(userInfo); -const identifyState = reactive<IdentifyStateType>({ - identifyData: [], - user: null, - searchQuery: { - pageIndex: 1, - pageSize: 10, - assessPlanName: '', - experimentName: '', - tag: 1, - }, - total: 0, - planList: [ - ], - 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'}, - ] - // deviceUnitList: [ - // {id:1, name: '台'}, - // {id:2, name: '个'}, - // {id:3, name: '件'} - // ] -}); - -const getIdentifyData = async () => { - let res = await identifyApi().getIdentifyByList(identifyState.searchQuery); - if(res.data.code === 100){ - identifyState.identifyData = res.data.data; - identifyState.total = res.data.total; - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } -}; - -const getAllPlanList = async () => { - let res = await planApi().getAllPlan(); - if(res.data.code === 100){ - identifyState.planList = JSON.parse(JSON.stringify(res.data.data)); - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } -}; - -const getPersonList = async () => { - let res = await userApi().getUserList({ - pageIndex: 1, - pageSize: 99999, - searchParams:{ - roleId: null, - name: '', - realName: '' - } - }); - if(res.data.code === 100){ - identifyState.personList = JSON.parse(JSON.stringify(res.data.data)); - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }) - } -}; - -const openIdentifyQuery = (title: string, value: IdentifyType) => { - identifyQueryDialogRef.value.showIdentifyQuery(title, value, identifyState.planList, identifyState.personList); -}; - -const onDelIdentify = (val: IdentifyType) => { - ElMessageBox.confirm(`此操作将永久删除该辨识,是否继续?`, '提示', { - confirmButtonText: '确认', - cancelButtonText: '取消', - type: 'warning' - }) - .then(async () => { - let res = await identifyApi().deleteIdentifyById({ id: val.id }); - if (res.data.code === 100) { - ElMessage({ - type: 'success', - duration: 2000, - message: '删除成功' - }); - await getIdentifyData(); - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - }) - .catch((error) => { - }); -}; - -const accessIdentify = (val: IdentifyType) => { - if(val.factorQueryDTOList?.length > 0){ - ElMessageBox.confirm(`此操作将提交该计划:“${val.assessPlanName}”的辨识信息,是否继续?`, '提示', { - confirmButtonText: '确认', - cancelButtonText: '取消', - type: 'warning' - }) - .then(async () => { - let res = await identifyApi().submitIdentify({ id: val.id}); - if (res.data.code === 100) { - ElMessage({ - type: 'success', - duration: 2000, - message: '提交成功' - }); - await getIdentifyData(); - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - }) - .catch((error) => { - }); - }else{ - ElMessage({ - type: 'warning', - message: '请先添加辨识信息' - }); - } -}; - -const onHandleSizeChange = (val: number) => { - identifyState.searchQuery.pageSize = val; - getIdentifyData(); -}; - -const onHandleCurrentChange = (val: number) => { - identifyState.searchQuery.pageIndex = val; - getIdentifyData(); -}; - -const reset = () => { - identifyState.searchQuery = { - pageIndex: 1, - pageSize: 10, - assessPlanName: '', - experimentName: '', - tag: 1, - } -}; - -onMounted(() => { - getIdentifyData(); - getAllPlanList(); - getPersonList(); - identifyState.user = Number(userInfos.value.uid) -}); - -</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; - } - } - } -} - -: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); -} -:deep(.el-range-editor.is-disabled input){ - background-color: var(--el-card-bg-color); - color: var(--el-input-text-color, var(--el-text-color-regular)); -} -</style> diff --git a/src/views/analyse/plan/components/planDialog.vue b/src/views/analyse/plan/components/planDialog.vue deleted file mode 100644 index aab3fce..0000000 --- a/src/views/analyse/plan/components/planDialog.vue +++ /dev/null @@ -1,255 +0,0 @@ -<template> - <div class="system-menu-dialog-container"> - <el-dialog :title="planDialogState.title" v-model="planDialogState.planDialogVisible" width="600px"> - <el-form ref="planFormRef" :rules="planDialogState.planFormRules" :model="planDialogState.planForm" 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="riskUnitId"> - <el-select :disabled="planDialogState.disabled" v-model="planDialogState.planForm.riskUnitId" style="width:100%" placeholder="风险分析单元" clearable> - <el-option v-for="item in planDialogState.riskUnitList" :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="评估计划名称" prop="assessPlanName"> - <el-input :disabled="planDialogState.disabled" v-model="planDialogState.planForm.assessPlanName" placeholder="评估计划名称" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="评估时间" prop="assessTime"> - <el-date-picker - :disabled="planDialogState.disabled" - type="datetimerange" - v-model="planDialogState.planForm.assessTime" - start-placeholder="开始时间" - end-placeholder="结束时间" - format="YYYY-MM-DD HH:mm:ss" - value-format="YYYY-MM-DD HH:mm:ss" - popper-class="pickTime" - @change="formatTime"> - </el-date-picker> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="计划制定人" prop="planUserId"> - <el-select :disabled="planDialogState.disabled" v-model="planDialogState.planForm.planUserId" style="width:100%" placeholder="计划制定人" clearable> - <el-option v-for="item in planDialogState.personList" :key="item.id" :label="item.realName" :value="item.id"></el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20 valueSelect"> - <el-form-item label="辨识专家" prop="identificationUserId"> - <el-select :disabled="planDialogState.disabled" v-model="planDialogState.planForm.identificationUserId" style="width:100%" :teleported="false" placeholder="辨识专家" clearable> - <el-option v-for="item in planDialogState.bsExperts" :key="item.id" :label="item.realName" :value="item.id"> - <div class="valueTable"> - <div><div>姓名:</div><span>{{item.realName}}</span></div> - <div><div>专业:</div><span>{{item.userIdentities?.map(i=>i.userIdentity).join(',')}}</span></div> - </div> - </el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20 valueSelect"> - <el-form-item label="评价专家" prop="evaluateUserId"> - <el-select :disabled="planDialogState.disabled" v-model="planDialogState.planForm.evaluateUserId" style="width:100%" :teleported="false" placeholder="评价专家" clearable> - <el-option v-for="item in planDialogState.pjExperts" :key="item.id" :label="item.realName" :value="item.id"> - <div class="valueTable"> - <div><div>姓名:</div><span>{{item.realName}}</span></div> - <div><div>专业:</div><span>{{item.userIdentities?.map(i=>i.userIdentity).join(',')}}</span></div> - </div> - </el-option> - </el-select> - </el-form-item> - </el-col> - </el-row> - </el-form> - <template #footer> - <span class="dialog-footer"> - <el-button @click="planDialogState.planDialogVisible = !planDialogState.planDialogVisible" size="default">取 消</el-button> - <el-button v-if="!planDialogState.disabled" type="primary" @click="onSubmitPlan" size="default">确定</el-button> - </span> - </template> - </el-dialog> - </div> -</template> - -<script setup lang="ts"> -import { reactive, ref, getCurrentInstance } from "vue"; -import {ElMessage} from "element-plus"; -import {planApi} from "/@/api/analyse/plan"; -import {isValidKey} from "/@/utils/methods"; - -const planFormRef = ref() - -const planDialogState = reactive<PlanDialogType>({ - title: '', - disabled: false, - planDialogVisible: false, - planForm: { - riskUnitId: null, - planUserId: null, - assessPlanName: '', - assessTime: [], - assessStartTime: '', - assessEndTime: '', - identificationUserId: null, - evaluateUserId: null, - riskType: 2 - }, - planFormRules: { - riskUnitId: [{ required: true, message: '请选择风险分析单元', trigger: 'change' }], - assessPlanName: [{ required: true, message: '请填写评估计划名称', trigger: 'blur' }], - assessTime: [{ required: true, message: '请选择评估时间', trigger: 'blur' }], - planUserId: [{ required: true, message: '请选择计划制定人', trigger: 'change' }], - identificationUserId: [{ required: true, message: '请选择辨识专家', trigger: 'change' }], - evaluateUserId: [{ required: true, message: '请选择评价专家', trigger: 'change' }], - }, - riskUnitList: [], - personList: [], - bsExperts: [], - pjExperts: [] -}) - -const showPlanDialog = (title: string, value: PlanType, riskUnitList: RiskUnitType [], personList: SystemPersonType [],bsExperts:[],pjExperts:[]) => { - planDialogState.planDialogVisible = true; - planDialogState.riskUnitList = riskUnitList; - planDialogState.personList = personList; - planDialogState.bsExperts = bsExperts; - planDialogState.pjExperts = pjExperts; - planDialogState.disabled = false - setTimeout(() => { - planFormRef.value.clearValidate(); - }); - if(title === '新增'){ - planDialogState.title = '新增'; - planDialogState.planForm = { - riskUnitId: null, - planUserId: null, - assessPlanName: '', - assessTime: [], - assessStartTime: '', - assessEndTime: '', - identificationUserId: null, - evaluateUserId: null, - riskType: 2 - }; - }else if(title === '查看'){ - planDialogState.title = '查看'; - planDialogState.disabled = true - 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 - 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 == [] ? '' : 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); - if(res.data.code === 100){ - emit('refresh') - planDialogState.planDialogVisible = false; - ElMessage({ - type: 'success', - message: '新增成功' - }) - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg, - }); - } - }else{ - let res = await planApi().modPlan(planDialogState.planForm) - if(res.data.code === 100){ - emit('refresh') - planDialogState.planDialogVisible = false; - ElMessage({ - type: 'success', - message: '编辑成功' - }) - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg, - }); - } - } - }else{ - ElMessage({ - type: 'warning', - message: '请完善基本信息', - }); - } - }) -} - -const emit = defineEmits(['refresh']) - -defineExpose({ - showPlanDialog -}) -</script> - -<style lang="scss" scoped> - ::v-deep(.pickTime){ - position: absolute !important; - top: 0 !important; - } - .valueSelect{ - ::v-deep(.el-popper){ - .el-select-dropdown__item{ - width: 100%; - height: auto; - white-space: normal; - word-break: break-all; - word-wrap: break-word; - overflow: auto; - padding: 10px 25px; - border-bottom: 1px solid #ccc; - - .valueTable{ - &>div{ - line-height: 1.5; - margin-bottom: 6px; - display: flex; - align-items: center; - - div{ - color: #999; - } - - span{ - font-weight: bolder; - } - - &:last-of-type{ - margin-bottom: 0; - } - } - } - } - } - } -</style> diff --git a/src/views/analyse/plan/index.ts b/src/views/analyse/plan/index.ts deleted file mode 100644 index 405aac0..0000000 --- a/src/views/analyse/plan/index.ts +++ /dev/null @@ -1,73 +0,0 @@ -declare interface PlanStateType { - planData: Array<PlanType> - user: number | null, - searchQuery: { - pageIndex: number, - pageSize: number, - assessPlanName: string, - riskUnitName: string, - } - total: number - identificationMethodList: Array<Type>, - evaluateMethodList: Array<Type> - riskUnitList: Array<RiskUnitType> - personList: Array<SystemPersonType>, - bsExperts: [], - pjExperts: [], - reSendTitle:string - reSendDialogVisible: boolean - reSendForm: { - id: null | number, - identificationUserId: null | number, - evaluateUserId: null | number, - }, - rules: object -} - -declare interface SystemPersonType { - id: number, - realName: string, -} - -declare interface PlanType { - id: number | null, - riskUnitId: number | null, - planUserId: number | null, - assessPlanName: string, - assessStartTime: string, - assessEndTime: string, - identificationMethod: number | null, - identificationUserId: number | null, - evaluateMethod: number | null, - evaluateUserId: number | null, -} - -declare interface Type { - id: number, - name: string, -} - -declare interface PlanDialogType { - title: string, - disabled: boolean, - planDialogVisible: boolean, - planForm: { - id?: number | null, - riskUnitId: number | null, - planUserId: number | null, - assessPlanName: string, - assessTime: string[], - assessStartTime: string, - assessEndTime: string, - identificationUserId: number | null, - evaluateUserId: number | null, - riskType: number | null - }, - planFormRules: { - - }, - riskUnitList: Array<RiskUnitType> - personList: Array<SystemPersonType> - bsExperts: [] - pjExperts: [] -} diff --git a/src/views/analyse/plan/index.vue b/src/views/analyse/plan/index.vue deleted file mode 100644 index 8b4814d..0000000 --- a/src/views/analyse/plan/index.vue +++ /dev/null @@ -1,586 +0,0 @@ -<template> - <div class="home-container"> - <div style="height: 100%"> - <el-row class="homeCard"> - <div class="basic-line"> - <span>评估计划名称:</span> - <el-input v-model="planState.searchQuery.assessPlanName" clearable filterable class="input-box" placeholder="评估计划名称"> - </el-input> - </div> - <div class="basic-line"> - <span>风险单元名称:</span> - <el-input v-model="planState.searchQuery.riskUnitName" clearable filterable class="input-box" placeholder="风险单元名称"> - </el-input> - </div> - <div style="padding-bottom: 10px"> - <el-button type="primary" @click="getPlanData">查询</el-button> - <el-button plain @click="reset">重置</el-button> - </div> - </el-row> - <div class="homeCard"> - <div class="main-card"> - <el-row class="cardTop"> - <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="openPlanDialog('新增', {})">新增</el-button> - <!-- <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button>--> - </el-col> -<!-- <el-button type="primary" :icon="Refresh" size="default" />--> - </el-row> - <el-table ref="multipleTableRef" :data="planState.planData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }"> - <el-table-column prop="assessPlanName" label="评估计划名称"/> - <el-table-column prop="riskUnitName" label="风险单元名称" /> - <el-table-column prop="planUserName" label="计划制定人" /> - <el-table-column prop="assessStartTime" label="评估开始时间"> - <template #default="scope"> - <span>{{scope.row.assessStartTime?scope.row.assessStartTime.substring(0,16):'--'}}</span> - </template> - </el-table-column> - <el-table-column prop="assessEndTime" label="评估结束时间"> - <template #default="scope"> - <span>{{scope.row.assessEndTime?scope.row.assessEndTime.substring(0,16):'--'}}</span> - </template> - </el-table-column> - <el-table-column prop="identificationUser" label="辨识专家" /> - <el-table-column prop="evaluateUser" label="评价专家" /> -<!-- <el-table-column prop="sceneUser" label="现场专家" />--> - <el-table-column prop="createTime" label="创建时间" show-overflow-tooltip></el-table-column> - <el-table-column prop="createByUserName" label="创建人" show-overflow-tooltip></el-table-column> - <el-table-column prop="updateTime" label="最后修改时间" show-overflow-tooltip></el-table-column> - <el-table-column prop="updateByUserName" label="最后修改人" show-overflow-tooltip></el-table-column> - <el-table-column prop="planSellStatus" label="是否派发" show-overflow-tooltip> - <template #default="scope"> - <div> - <div v-if="scope.row.planSellStatus === 1"> - <el-tag :type="'info'"> - {{ '未派发' }} - </el-tag> - </div> - <div v-if="scope.row.planSellStatus === 2"> - <el-tag :type="'success'"> - {{ '已派发' }} - </el-tag> - </div> - </div> - </template> - </el-table-column> - <el-table-column label="操作" width="250"> - <template #default="scope"> - <el-button size="small" text type="primary" v-if="scope.row.planSellStatus === 1" @click="accessPlan(scope.row)">派发</el-button> - <el-button size="small" text type="primary" :icon="View" @click="openPlanDialog('查看', scope.row)">查看</el-button> - <el-button v-if="scope.row.planSellStatus === 1" size="small" text type="primary" :icon="Edit" @click="openPlanDialog('修改', scope.row)">编辑</el-button> - <el-button v-if="scope.row.identificationUserId == planState.user" size="small" text type="primary" :icon="Edit" @click="refuseIdentify(scope.row)">拒绝辨识</el-button> - <el-button v-if="scope.row.evaluateUserId == planState.user" size="small" text type="primary" :icon="Edit" @click="refuseEvaluate(scope.row)">拒绝评价</el-button> -<!-- <el-button v-if="scope.row.sceneUserId == planState.user" size="small" text type="primary" :icon="Edit" @click="refuseScene(scope.row)">拒绝现场</el-button>--> - <el-button v-if="scope.row.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> - </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="planState.searchQuery.pageIndex" background v-model:page-size="planState.searchQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="planState.total" class="page-position"> </el-pagination> - </div> - </div> - </div> - </div> - <plan-dialog ref="planDialogRef" @refresh="getPlanData"></plan-dialog> - - <el-dialog class="chooseExpert" :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" class="valueSelect"> - <el-select v-model="planState.reSendForm.identificationUserId" style="width:100%" :teleported="false" placeholder="辨识专家" clearable> - <el-option v-for="item in planState.bsExperts" :key="item.id" :label="item.realName" :value="item.id"> - <div class="valueTable"> - <div><div>姓名:</div><span>{{item.realName}}</span></div> - <div><div>专业:</div><span>{{item.userIdentities?.map(i=>i.userIdentity).join(',')}}</span></div> - </div> - </el-option> - </el-select> - </el-form-item> - <el-form-item v-if="planState.reSendTitle == '指派评价专家'" label="选择评价专家" prop="evaluateUserId" class="valueSelect"> - <el-select v-model="planState.reSendForm.evaluateUserId" style="width:100%" :teleported="false" placeholder="评价专家" clearable> - <el-option v-for="item in planState.pjExperts" :key="item.id" :label="item.realName" :value="item.id"> - <div class="valueTable"> - <div><div>姓名:</div><span>{{item.realName}}</span></div> - <div><div>专业:</div><span>{{item.userIdentities?.map(i=>i.userIdentity).join(',')}}</span></div> - </div> - </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, FormInstance} from "element-plus"; -import { Edit, View, Plus, Delete } from '@element-plus/icons-vue'; -import {riskUnitApi} from "/@/api/analyse/riskUnit"; -import {personApi} from "/@/api/basic/person"; -import {useUserInfo} from "/@/stores/userInfo"; -import { storeToRefs } from 'pinia'; -import {userApi} from "/@/api/systemManage/user"; -import {assessApplyApi} from "/@/api/analyse/assessApply"; - - -const PlanDialog = defineAsyncComponent(() => import('./components/planDialog.vue')); -const planDialogRef = ref(); -const userInfo = useUserInfo(); -const { userInfos } = storeToRefs(userInfo); -const ruleFormRef = ref<FormInstance>() -const planState = reactive<PlanStateType>({ - planData: [], - user: null, - searchQuery: { - pageIndex: 1, - pageSize: 10, - assessPlanName: '', - riskUnitName: '', - }, - total: 0, - riskUnitList: [ - ], - personList: [], - bsExperts: [], - pjExperts: [], - 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'}, - ], - 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: '个'}, - // {id:3, name: '件'} - // ] -}) - -const getPlanData = async () => { - let res = await planApi().getPlanByList(planState.searchQuery); - if(res.data.code === 100){ - planState.planData = res.data.data; - planState.total = res.data.total; - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } -}; - -const getAllRiskUnitList = async () => { - let res = await riskUnitApi().getAllRiskUnit(); - if(res.data.code === 100){ - planState.riskUnitList = JSON.parse(JSON.stringify(res.data.data)); - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } -}; - -const getPersonList = async () => { - let res = await userApi().getUserList({ - pageIndex: 1, - pageSize: 99999, - searchParams:{ - roleId: null, - name: '', - realName: '' - } - }); - if(res.data.code === 100){ - planState.personList = JSON.parse(JSON.stringify(res.data.data)); - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }) - } -}; - -const getAllExperts = async () => { - let res = await userApi().getExpertsList({ - pageIndex: 1, - pageSize: 99999, - searchParams:{ - userIndentityId: null - } - }); - if (res.data.code === 100) { - const expertsList = res.data.data; - for(let i of expertsList){ - if(i.roles?.find(obj=>obj.roleId == 2)){ - planState.bsExperts.push(i) - } - if(i.roles?.find(obj=>obj.roleId == 3)){ - planState.pjExperts.push(i) - } - } - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } -}; - -const openPlanDialog = (title: string, value: PlanType) => { - planDialogRef.value.showPlanDialog(title, value, planState.riskUnitList, planState.personList,planState.bsExperts,planState.pjExperts); -}; - -const refuseIdentify = async(val: PlanType)=>{ - 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)=>{ - 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 onDelPlan = (val: PlanType) => { - ElMessageBox.confirm(`此操作将永久删除该计划:“${val.assessPlanName}”,是否继续?`, '提示', { - confirmButtonText: '确认', - cancelButtonText: '取消', - type: 'warning' - }) - .then(async () => { - let res = await planApi().deletePlanById({ 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 accessPlan = (val: PlanType) => { - ElMessageBox.confirm(`此操作将派发该计划:“${val.assessPlanName}”,是否继续?`, '提示', { - confirmButtonText: '确认', - cancelButtonText: '取消', - type: 'warning' - }) - .then(async () => { - let res = await planApi().sellAssessPlan({ 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 onHandleSizeChange = (val: number) => { - planState.searchQuery.pageSize = val; - getPlanData(); -}; - -const onHandleCurrentChange = (val: number) => { - planState.searchQuery.pageIndex = val; - getPlanData(); -}; - -const reset = () => { - planState.searchQuery = { - pageIndex: 1, - pageSize: 10, - riskUnitName: '', - assessPlanName: '', - } -}; - -onMounted(() => { - getPlanData(); - getAllRiskUnitList(); - getAllExperts(); - getPersonList(); - planState.user = Number(userInfos.value.uid) -}) - -</script> - -<style scoped lang="scss"> -$homeNavLengh: 8; -::v-deep(.el-dialog){ - .el-dialog__body{ - overflow-y: visible !important; - overflow-x: visible !important; - } -} - -.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; - } - } - } -} - -.valueSelect{ - ::v-deep(.el-popper){ - .el-select-dropdown__item{ - width: 100%; - height: auto; - white-space: normal; - word-break: break-all; - word-wrap: break-word; - overflow: auto; - padding: 10px 25px; - border-bottom: 1px solid #ccc; - - .valueTable{ - &>div{ - line-height: 1.5; - margin-bottom: 6px; - display: flex; - align-items: center; - - div{ - color: #999; - } - - span{ - font-weight: bolder; - } - - &:last-of-type{ - margin-bottom: 0; - } - } - } - } - } -} -: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); -} -:deep(.el-range-editor.is-disabled input){ - background-color: var(--el-card-bg-color); - color: var(--el-input-text-color, var(--el-text-color-regular)); -} -</style> diff --git a/src/views/analyse/riskUnit/components/riskUnitDialog.vue b/src/views/analyse/riskUnit/components/riskUnitDialog.vue deleted file mode 100644 index d916b3b..0000000 --- a/src/views/analyse/riskUnit/components/riskUnitDialog.vue +++ /dev/null @@ -1,222 +0,0 @@ -<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="experimentType"> - <el-select :disabled="riskUnitDialogState.title === '编辑'" v-model="riskUnitDialogState.experimentType" placeholder="实验类型" clearable class="input-length"> - <el-option v-for="item in riskUnitDialogState.experimentTypeList" :key="item.id" :label="item.name" :value="item.id"></el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="实验名称" prop="experimentId"> - <el-select v-model="riskUnitDialogState.riskUnitForm.experimentId" placeholder="实验名称" clearable class="input-length"> - <el-option v-for="item in riskUnitDialogState.allExperimentList" :key="item.id" :label="item.experimentName" :value="item.id"></el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="riskUnitDialogState.experimentType === 2"> - <el-form-item label="风险单元编号" prop="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" v-if="riskUnitDialogState.experimentType === 2"> - <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" v-if="riskUnitDialogState.experimentType === 2"> - <el-form-item label="风险单元类型" prop="experimentId"> - <el-select v-model="riskUnitDialogState.riskUnitForm.riskUnitTypeId" placeholder="风险单元类型" clearable class="input-length"> - <el-option v-for="item in riskUnitDialogState.riskTypeList" :key="item.id" :label="item.riskType" :value="item.id"></el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="riskUnitDialogState.experimentType === 2"> - <el-form-item label="负责人" prop="liabilityUserId"> - <el-select v-model="riskUnitDialogState.riskUnitForm.liabilityUserId" placeholder="负责人" clearable class="input-length"> - <el-option v-for="item in riskUnitDialogState.allPersonList" :key="item.id" :label="item.personName" :value="item.id"></el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="riskUnitDialogState.experimentType === 2"> - <el-form-item label="负责部门" prop="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 === 2"> - <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-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-row> - </el-form> - <template #footer> - <span class="dialog-footer"> - <el-button @click="riskUnitDialogState.riskUnitDialogVisible = !riskUnitDialogState.riskUnitDialogVisible" size="default">取 消</el-button> - <el-button type="primary" @click="onSubmitRiskUnit" size="default">确定</el-button> - </span> - </template> - </el-dialog> - </div> -</template> - -<script setup lang="ts"> -import { reactive, ref } from "vue"; -import { isValidKey } from "/@/utils/methods"; -import {ElMessage} from "element-plus"; -import {riskUnitApi} from "/@/api/analyse/riskUnit"; - -const riskUnitFormRef = ref() - -const riskUnitDialogState = reactive<RiskUnitDialogType>({ - title: '', - experimentType: null, - riskUnitDialogVisible: false, - riskUnitForm: { - experimentId: null, - riskCode: '', - riskName: '', - riskUnitTypeId: null, - liabilityUserId: null, - liabilityDep: '', - description: '', - basicRiskUnitId: null, - }, - riskUnitFormRules: { - experimentId: [{ required: true, message: '请选择实验', trigger: 'change' }], - riskCode: [{ required: true, message: '请填写风险单元编号', trigger: 'blur' }], - riskName: [{ required: true, message: '请填写风险单元名称', trigger: 'blur' }], - riskUnitTypeId: [{ required: true, message: '请选择风险单元类型', trigger: 'blur' }], - liabilityUserId: [{ required: true, message: '请选择负责人', trigger: 'change' }], - basicRiskUnitId: [{ required: true, message: '请选择基础风险单元', trigger: 'change' }] - }, - specialDeviceList: [], - deviceUnitList: [ - {id:1, name: '台'}, - {id:2, name: '个'}, - {id:3, name: '件'} - ], - riskTypeList: [], - basicUnitList: [], - allPersonList: [], - allExperimentList: [], - experimentTypeList: [ - {id: 2, name: '实验风险'}, - {id: 1, name: '固有风险'}, - ], -}) - -const showRiskUnitDialog = (title: string, value: RiskUnitType, basicUnitList: UnitType [], allPersonList: AllPersonListType [], allExperimentList: ProjectType [],allRiskTypeList: RiskType []) => { - riskUnitDialogState.riskUnitDialogVisible = true; - riskUnitDialogState.basicUnitList = basicUnitList - riskUnitDialogState.allPersonList = allPersonList - riskUnitDialogState.allExperimentList = allExperimentList - riskUnitDialogState.riskTypeList = allRiskTypeList - setTimeout(() => { - riskUnitFormRef.value.clearValidate(); - }); - if(title === '新增'){ - riskUnitDialogState.title = '新增'; - riskUnitDialogState.riskUnitForm = { - experimentId: null, - riskCode: '', - riskName: '', - riskUnitTypeId: null, - liabilityUserId: null, - liabilityDep: '', - description: '', - basicRiskUnitId: null, - }; - }else{ - riskUnitDialogState.title = '编辑'; - riskUnitDialogState.experimentType = value.riskType as number - for(let i in riskUnitDialogState.riskUnitForm) { - if(isValidKey(i, riskUnitDialogState.riskUnitForm)) { - riskUnitDialogState.riskUnitForm[i] = value[i]; - } - } - riskUnitDialogState.riskUnitForm.id = value.id - } -}; - -const onSubmitRiskUnit = () => { - riskUnitFormRef.value.validate(async(valid: boolean) => { - if(valid){ - if(riskUnitDialogState.title === '新增' && riskUnitDialogState.experimentType === 1){ - let { experimentId,basicRiskUnitId} = riskUnitDialogState.riskUnitForm - let query = { experimentId,basicRiskUnitId } - let res = await riskUnitApi().addBasicRiskUnit(query); - if(res.data.code === 100){ - emit('refresh') - riskUnitDialogState.riskUnitDialogVisible = false; - ElMessage({ - type: 'success', - message: '新增成功' - }) - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg, - }); - } - }else if(riskUnitDialogState.title === '新增' && riskUnitDialogState.experimentType === 2){ - let { basicRiskUnitId, ...query} = riskUnitDialogState.riskUnitForm - let res = await riskUnitApi().addRiskUnit(query); - if(res.data.code === 100){ - emit('refresh') - riskUnitDialogState.riskUnitDialogVisible = false; - ElMessage({ - type: 'success', - message: '新增成功' - }) - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg, - }); - } - }else{ - let res = await riskUnitApi().modRiskUnit(riskUnitDialogState.riskUnitForm) - if(res.data.code === 100){ - emit('refresh') - riskUnitDialogState.riskUnitDialogVisible = false; - ElMessage({ - type: 'success', - message: '编辑成功' - }) - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg, - }); - } - } - }else{ - ElMessage({ - type: 'warning', - message: '请完善基本信息', - }); - } - }) -} - -const emit = defineEmits(['refresh']) - -defineExpose({ - showRiskUnitDialog -}) -</script> - -<style scoped> - -</style> diff --git a/src/views/analyse/riskUnit/index.ts b/src/views/analyse/riskUnit/index.ts deleted file mode 100644 index b1dde19..0000000 --- a/src/views/analyse/riskUnit/index.ts +++ /dev/null @@ -1,68 +0,0 @@ -declare interface RiskUnitStateType { - riskUnitData: RiskUnitType [], - searchQuery: { - pageIndex: number, - pageSize: number, - riskCode: string, - riskName: string, - } - total: number - allRiskTypeList: Array<RiskType> - riskList: Array<Type>, - riskSourceList: Array<Type> - evaluateStatusList: Array<Type> - basicUnitList: Array<UnitType> - allPersonList: Array<AllPersonListType> - allExperimentList: Array<ProjectType> -} - -declare interface RiskUnitType { - id?: number - experimentId: number | null, - riskCode: string, - riskName: string, - liabilityDep: string, - liabilityUserId: number | null, - description: string, - basicRiskUnitId: number | null, - riskType?: number, -} - -declare interface Type { - id: number, - name: string, -} - -declare interface RiskType { - id: number, - riskType: string -} - -declare interface RiskUnitDialogType { - title: string, - disabled: boolean - experimentType: number | null, - riskUnitDialogVisible: boolean, - riskUnitForm: { - id?: number | null - experimentId: number | null, - riskCode: string, - riskName: string, - riskUnitTypeId: number | null, - liabilityDep: string, - liabilityUserId: number | null, - description: string, - basicRiskUnitId: number | null, - riskType?: number, - }, - riskUnitFormRules: { - - }, - riskTypeList: Array<RiskType>, - specialDeviceList: Array<Type>, - deviceUnitList: Array<Type>, - basicUnitList: Array<UnitType>, - allPersonList: Array<AllPersonListType>, - allExperimentList: Array<ProjectType>, - experimentTypeList: Array<Type> -} diff --git a/src/views/analyse/riskUnit/index.vue b/src/views/analyse/riskUnit/index.vue deleted file mode 100644 index 2ea936f..0000000 --- a/src/views/analyse/riskUnit/index.vue +++ /dev/null @@ -1,373 +0,0 @@ -<template> - <div class="home-container"> - <div style="height: 100%"> - <el-row class="homeCard"> - <div class="basic-line"> - <span>风险编码:</span> - <el-input v-model="riskUnitState.searchQuery.riskCode" clearable filterable class="input-box" placeholder="风险编码"> - </el-input> - </div> - <div class="basic-line"> - <span>风险名称:</span> - <el-input v-model="riskUnitState.searchQuery.riskName" clearable filterable class="input-box" placeholder="风险名称"> - </el-input> - </div> - <div style="padding-bottom: 10px"> - <el-button type="primary" @click="getRiskUnitData">查询</el-button> - <el-button plain @click="reset">重置</el-button> - </div> - </el-row> - <div class="homeCard"> - <div class="main-card"> - <el-row class="cardTop"> - <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="openRiskUnitDialog('新增', {})">新增</el-button> - <!-- <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button>--> - </el-col> -<!-- <el-button type="primary" :icon="Refresh" size="default" />--> - </el-row> - <el-table ref="multipleTableRef" :data="riskUnitState.riskUnitData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }"> - <el-table-column prop="riskCode" label="风险编码"/> - <el-table-column prop="riskName" label="风险名称" /> - <el-table-column prop="riskSourceType" label="风险源风险类型"> - <template #default="scope"> - <span>{{`${riskUnitState.riskSourceList.find(item =>item.id === scope.row.riskSourceType)?.name || ''}`}}</span> - </template> - </el-table-column> - <el-table-column prop="riskType" label="风险类型"> - <template #default="scope"> - <span>{{`${riskUnitState.riskList.find(item =>item.id === scope.row.riskType)?.name || ''}`}}</span> - </template> - </el-table-column> - <el-table-column prop="riskUnitType" label="风险单元类型"/> - <el-table-column prop="evaluateStatus" label="是否评价" show-overflow-tooltip> - <template #default="scope"> - <span>{{`${riskUnitState.evaluateStatusList.find(item =>item.id === scope.row.evaluateStatus)?.name}`}}</span> - </template> - </el-table-column> - <el-table-column prop="createTime" label="创建时间" show-overflow-tooltip></el-table-column> - <el-table-column prop="createByUserName" label="创建人" show-overflow-tooltip></el-table-column> - <el-table-column prop="updateTime" label="最后修改时间" show-overflow-tooltip></el-table-column> - <el-table-column prop="updateByUserName" label="最后修改人" show-overflow-tooltip></el-table-column> - <el-table-column label="操作" width="150"> - <template #default="scope"> - <el-button size="small" text type="primary" :icon="Edit" @click="openRiskUnitDialog('修改', scope.row)" v-if="scope.row.riskType === 2">编辑</el-button> - <el-button size="small" text type="danger" :icon="Delete" @click="onDelRiskUnit(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="riskUnitState.searchQuery.pageIndex" background v-model:page-size="riskUnitState.searchQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="riskUnitState.total" class="page-position"> </el-pagination> - </div> - </div> - </div> - </div> - <risk-unit-dialog ref="riskUnitDialogRef" @refresh="getRiskUnitData"></risk-unit-dialog> - </div> -</template> - -<script setup lang="ts"> -import {defineAsyncComponent, onMounted, reactive, ref} from "vue"; -import {riskUnitApi} from "/@/api/analyse/riskUnit"; -import {ElMessage, ElMessageBox} from "element-plus"; -import { Edit, View, Plus, Delete } from '@element-plus/icons-vue'; -import { unitApi } from "/@/api/basic/unit"; -import {personApi} from "/@/api/basic/person"; -import { projectApi } from "/@/api/experiment/project"; - -const RiskUnitDialog = defineAsyncComponent(() => import('./components/riskUnitDialog.vue')); - -const riskUnitDialogRef = ref(); - -const riskUnitState = reactive<RiskUnitStateType>({ - riskUnitData: [], - searchQuery: { - pageIndex: 1, - pageSize: 10, - riskCode: '', - riskName: '', - }, - total: 0, - riskList: [ - {id: 1, name: '固有风险'}, - {id:2, name: '实验风险'} - ], - evaluateStatusList: [ - {id: 1, name: '未评价'}, - {id:2, name: '已评价'} - ], - riskSourceList: [ - {id:1, name: '区域、实验场所'}, - {id:2, name: '设施设备'}, - {id:3, name: '固定工艺节点'} - ], - allRiskTypeList: [], - basicUnitList: [], - allPersonList: [], - allExperimentList: [], -}) - -const getRiskUnitData = async () => { - let res = await riskUnitApi().getRiskUnitByList(riskUnitState.searchQuery); - if(res.data.code === 100){ - riskUnitState.riskUnitData = res.data.data; - riskUnitState.total = res.data.total; - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } -}; - -const getAllBasicUnitList = async () => { - let res = await unitApi().getAllUnit(); - if(res.data.code === 100){ - riskUnitState.basicUnitList = JSON.parse(JSON.stringify(res.data.data)); - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }) - } -}; - -const getAllPersonList = async () => { - let res = await personApi().getAllPerson(); - if(res.data.code === 100){ - riskUnitState.allPersonList = JSON.parse(JSON.stringify(res.data.data)); - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }) - } -}; - -const getAllTypeList = async () =>{ - let res = await unitApi().getAllUnitType() - if(res.data.code === 100){ - riskUnitState.allRiskTypeList = JSON.parse(JSON.stringify(res.data.data)); - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }) - } -} - -const getAllExperimentList = async () => { - let res = await projectApi().getAllExperiment() - if(res.data.code === 100){ - riskUnitState.allExperimentList = JSON.parse(JSON.stringify(res.data.data)); - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }) - } -}; - -const openRiskUnitDialog = (title: string, value: RiskUnitType) => { - riskUnitDialogRef.value.showRiskUnitDialog(title, value, riskUnitState.basicUnitList, riskUnitState.allPersonList, riskUnitState.allExperimentList, riskUnitState.allRiskTypeList); -}; - -const onDelRiskUnit = (val: RiskUnitType) => { - ElMessageBox.confirm(`此操作将永久删除该风险单元:“${val.riskName}”,是否继续?`, '提示', { - confirmButtonText: '确认', - cancelButtonText: '取消', - type: 'warning' - }) - .then(async () => { - let res = await riskUnitApi().deleteRiskUnitById({ id: val.id }); - if (res.data.code === 100) { - ElMessage({ - type: 'success', - duration: 2000, - message: '删除成功' - }); - await getRiskUnitData(); - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - }) - .catch((error) => { - }); -} - -const onHandleSizeChange = (val: number) => { - riskUnitState.searchQuery.pageSize = val; - getRiskUnitData(); -}; - -const onHandleCurrentChange = (val: number) => { - riskUnitState.searchQuery.pageIndex = val; - getRiskUnitData(); -}; - -const reset = () => { - riskUnitState.searchQuery = { - pageIndex: 1, - pageSize: 10, - riskCode: '', - riskName: '', - } -}; - -onMounted(() => { - getRiskUnitData(); - getAllBasicUnitList(); - getAllPersonList(); - getAllTypeList(); - getAllExperimentList(); -}) - -</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); -} -</style> diff --git a/src/views/basic/equipment/components/equipmentDialog.vue b/src/views/basic/equipment/components/equipmentDialog.vue deleted file mode 100644 index d20f00d..0000000 --- a/src/views/basic/equipment/components/equipmentDialog.vue +++ /dev/null @@ -1,236 +0,0 @@ -<template> - <div class="system-menu-dialog-container"> - <el-dialog :title="equipmentDialogState.title" v-model="equipmentDialogState.equipmentDialogVisible" :close-on-click-modal="false" width="600px"> - <el-form ref="EquipmentFormRef" :rules="equipmentDialogState.equipmentFormRules" :model="equipmentDialogState.equipmentForm" 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="deviceCode"> - <el-input v-model="equipmentDialogState.equipmentForm.deviceCode" 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="deviceName"> - <el-input v-model="equipmentDialogState.equipmentForm.deviceName" 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="deviceTypeId"> - <el-select v-model="equipmentDialogState.equipmentForm.deviceTypeId" placeholder="设备类型" clearable class="input-length"> - <el-option v-for="item in equipmentTypeList" :key="item.id" :label="item.deviceType" :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="deviceDesc"> - <el-input v-model="equipmentDialogState.equipmentForm.deviceDesc" 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="devicePower"> - <el-input v-model="equipmentDialogState.equipmentForm.devicePower" 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="deviceUnit"> - <el-select v-model="equipmentDialogState.equipmentForm.deviceUnit" placeholder="计量单位" clearable class="input-length"> - <el-option v-for="item in equipmentDialogState.deviceUnitList" :key="item.id" :label="item.name" :value="item.id"></el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="是否特种设备"> - <el-select v-model="equipmentDialogState.equipmentForm.specialDevice" placeholder="是否特种设备" clearable class="input-length"> - <el-option v-for="item in equipmentDialogState.specialDeviceList" :key="item.id" :label="item.name" :value="item.id"></el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="设备状态" prop="deviceStatus"> - <el-select v-model="equipmentDialogState.equipmentForm.deviceStatus" placeholder="设备状态" clearable class="input-length"> - <el-option :key="1" label="完好" :value="1"></el-option> - <el-option :key="2" label="异常" :value="2"></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="equipmentDialogState.equipmentForm.safeProtect" 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="buyTime"> - <el-date-picker - v-model="equipmentDialogState.equipmentForm.buyTime" - format="YYYY-MM-DD" - value-format="YYYY-MM-DD 00:00:00" - type="dateTime" - placeholder="购入时间" - /> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="校准时间" prop="adjustTime"> - <el-date-picker - v-model="equipmentDialogState.equipmentForm.adjustTime" - format="YYYY-MM-DD" - value-format="YYYY-MM-DD 00:00:00" - type="dateTime" - placeholder="校准时间" - /> - </el-form-item> - </el-col> - </el-row> - </el-form> - <template #footer> - <span class="dialog-footer"> - <el-button @click="equipmentDialogState.equipmentDialogVisible = !equipmentDialogState.equipmentDialogVisible" size="default">取 消</el-button> - <el-button type="primary" @click="onSubmitEquipment" size="default">确定</el-button> - </span> - </template> - </el-dialog> - </div> -</template> - -<script setup lang="ts"> -import { defineProps, reactive, ref } from "vue"; -import {useMenuApi} from "/@/api/systemManage/menu"; -import {ElMessage} from "element-plus"; -import {equipmentApi} from "/@/api/basic/equipement"; - -const EquipmentFormRef = ref() - -const equipmentDialogState = reactive<EquipmentDialogType>({ - title: '', - equipmentDialogVisible: false, - equipmentForm: { - id: null, - deviceCode: '', - deviceName: '', - devicePower: '', - deviceUnit: null, - specialDevice: null, - safeProtect: '', - deviceTypeId: null, - deviceDesc: '', - deviceStatus: null, - buyTime: '', - adjustTime: '' - }, - equipmentFormRules: { - deviceCode: [{ required: true, message: '请填写设备编号', trigger: 'blur' }], - deviceName: [{ required: true, message: '请填写设备名称', trigger: 'blur' }], - devicePower: [{ required: true, message: '请填写额定功率', trigger: 'blur' }], - deviceUnit: [{ required: true, message: '请选择计量单位', trigger: 'change' }], - deviceTypeId: [{ required: true, message: '请填写设备类型ID', trigger: 'blur' }], - deviceDesc: [{ required: true, message: '请填写设备型号', trigger: 'blur' }], - deviceStatus: [{ required: true, message: '请选择设备状态', trigger: 'blur' }], - buyTime: [{ required: true, message: '请选择购入时间', trigger: 'blur' }], - adjustTime: [{ required: true, message: '请选择校准时间', trigger: 'blur' }] - }, - specialDeviceList: [], - deviceUnitList: [ - {id:1, name: '台'}, - {id:2, name: '个'}, - {id:3, name: '件'} - ] -}) - -const showEquipmentDialog = (title: string, value: EquipmentType, specialDeviceList: Type []) => { - - equipmentDialogState.equipmentDialogVisible = true; - equipmentDialogState.specialDeviceList = specialDeviceList; - setTimeout(() => { - EquipmentFormRef.value.clearValidate(); - }); - if(title === '新增'){ - equipmentDialogState.title = '新增'; - equipmentDialogState.equipmentForm = { - deviceCode: '', - deviceName: '', - devicePower: '', - deviceUnit: null, - specialDevice: null, - safeProtect: '', - deviceTypeId: null, - deviceDesc: '', - deviceStatus: null, - buyTime: '', - adjustTime: '' - }; - }else{ - equipmentDialogState.title = '编辑' - equipmentDialogState.equipmentForm = { - id: value.id, - deviceCode: value.deviceCode, - deviceName: value.deviceName, - devicePower: value.devicePower, - deviceUnit: value.deviceUnit, - specialDevice: value.specialDevice, - safeProtect: value.safeProtect, - deviceTypeId:value.deviceTypeId, - deviceDesc: value.deviceDesc, - deviceStatus: value.deviceStatus, - buyTime: value.buyTime, - adjustTime: value.adjustTime - }; - } -}; - -const onSubmitEquipment = () => { - EquipmentFormRef.value.validate(async(valid: boolean) => { - if(valid){ - if(equipmentDialogState.title === '新增'){ - let res = await equipmentApi().addEquipment(equipmentDialogState.equipmentForm); - if(res.data.code === 100){ - emit('refresh') - equipmentDialogState.equipmentDialogVisible = false; - ElMessage({ - type: 'success', - message: '新增成功' - }) - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg, - }); - } - }else{ - console.log(equipmentDialogState.equipmentForm,'修改') - let res = await equipmentApi().modEquipment(equipmentDialogState.equipmentForm) - if(res.data.code === 100){ - emit('refresh') - equipmentDialogState.equipmentDialogVisible = false; - ElMessage({ - type: 'success', - message: '编辑成功' - }) - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg, - }); - } - } - }else{ - ElMessage({ - type: 'warning', - message: '请完善基本信息', - }); - } - }) -} - -const emit = defineEmits(['refresh']) - -defineProps({ - equipmentTypeList: Array -}) - -defineExpose({ - showEquipmentDialog -}) -</script> - -<style scoped> - -</style> diff --git a/src/views/basic/equipment/index.ts b/src/views/basic/equipment/index.ts deleted file mode 100644 index c708fa3..0000000 --- a/src/views/basic/equipment/index.ts +++ /dev/null @@ -1,62 +0,0 @@ -declare interface EquipmentStateType { - equipmentData: Array<EquipmentType> - equipmentTypeList: Array<deviceType> - searchQuery: { - pageIndex: number, - pageSize: number, - deviceCode: string, - deviceName: string, - devicePower: string, - specialDevice: number | null, - } - total: number - specialDeviceList: Array<Type>, - deviceUnitList: Array<Type> -} - -declare interface EquipmentType { - id: number | null, - deviceCode: string, - deviceName: string, - devicePower: string, - deviceUnit: number | null, - specialDevice: number | null, - safeProtect: string, - deviceTypeId: number | null, - deviceDesc: string, - deviceStatus: number | null, - buyTime: string, - adjustTime: string -} - -declare interface Type { - id: number, - name: string, -} -declare interface deviceType { - id: number, - deviceType: string, -} -declare interface EquipmentDialogType { - title: string, - equipmentDialogVisible: boolean, - equipmentForm: { - id?: number | null, - deviceCode: string, - deviceName: string, - devicePower: string, - deviceUnit: number | null, - specialDevice: number | null, - safeProtect: string, - deviceTypeId: number | null, - deviceDesc: string, - deviceStatus: number | null, - buyTime: string, - adjustTime: string - }, - equipmentFormRules: { - - }, - specialDeviceList: Array<Type>, - deviceUnitList: Array<Type> -} diff --git a/src/views/basic/equipment/index.vue b/src/views/basic/equipment/index.vue deleted file mode 100644 index 153359c..0000000 --- a/src/views/basic/equipment/index.vue +++ /dev/null @@ -1,345 +0,0 @@ -<template> - <div class="home-container"> - <div style="height: 100%"> - <el-row class="homeCard"> - <div class="basic-line"> - <span>设备编码:</span> - <el-input v-model="equipmentState.searchQuery.deviceCode" clearable filterable class="input-box" placeholder="设备编码"> - </el-input> - </div> - <div class="basic-line"> - <span>设备名称:</span> - <el-input v-model="equipmentState.searchQuery.deviceName" clearable filterable class="input-box" placeholder="设备名称"> - </el-input> - </div> - <div class="basic-line"> - <span>额定功率:</span> - <el-input v-model="equipmentState.searchQuery.devicePower" clearable filterable class="input-box" placeholder="额定功率"> - </el-input> - </div> - <div class="basic-line"> - <span>是否特种设备:</span> - <el-select v-model="equipmentState.searchQuery.specialDevice" clearable filterable class="input-box" placeholder="是否特种设备"> - <el-option v-for="item in equipmentState.specialDeviceList" :key="item.id" :label="item.name" :value="item.id"></el-option> - </el-select> - </div> - <div style="padding-bottom: 10px"> - <el-button type="primary" @click="getEquipmentData">查询</el-button> - <el-button plain @click="reset">重置</el-button> - </div> - </el-row> - <div class="homeCard"> - <div class="main-card"> - <el-row class="cardTop"> - <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="openEquipmentDialog('新增', {})">新增</el-button> - <!-- <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button>--> - </el-col> -<!-- <el-button type="primary" :icon="Refresh" size="default" />--> - </el-row> - <el-table ref="multipleTableRef" :data="equipmentState.equipmentData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }"> - <el-table-column prop="deviceCode" label="设备编号"/> - <el-table-column prop="deviceName" label="设备名称" /> - <el-table-column prop="deviceTypeId" label="设备类型" show-overflow-tooltip> - <template #default="scope"> - <span>{{equipmentState.equipmentTypeList.find(item =>item.id === scope.row.deviceTypeId)?.deviceType}}</span> - </template> - </el-table-column> - <el-table-column prop="deviceDesc" label="设备型号" /> - <el-table-column prop="devicePower" label="额定功率"> - <template #default="scope"> - <span>{{scope.row.devicePower}}</span> - </template> - </el-table-column> - <el-table-column prop="deviceStatus" label="设备状态"> - <template #default="scope"> - <span>{{scope.row.deviceStatus == 1?'完好':'异常'}}</span> - </template> - </el-table-column> - <el-table-column prop="deviceUnit" label="计量单位" show-overflow-tooltip> - <template #default="scope"> - <span>{{`${equipmentState.deviceUnitList.find(item =>item.id === scope.row.deviceUnit)?.name}`}}</span> - </template> - </el-table-column> - <el-table-column prop="specialDevice" label="是否特殊装备" show-overflow-tooltip> - <template #default="scope"> - <span>{{`${equipmentState.specialDeviceList.find(item =>item.id === scope.row.specialDevice)?.name}`}}</span> - </template> - </el-table-column> - <el-table-column prop="safeProtect" label="安全防护"/> - <el-table-column prop="createTime" label="创建时间" show-overflow-tooltip></el-table-column> - <el-table-column prop="createByUserName" label="创建人" show-overflow-tooltip></el-table-column> - <el-table-column prop="updateTime" label="最后修改时间" show-overflow-tooltip></el-table-column> - <el-table-column prop="updateByUserName" label="最后修改人" show-overflow-tooltip></el-table-column> - <el-table-column label="操作" width="150"> - <template #default="scope"> - <el-button size="small" text type="primary" :icon="Edit" @click="openEquipmentDialog('修改', scope.row)">编辑</el-button> - <el-button size="small" text type="danger" :icon="Delete" @click="onDelEquipment(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="equipmentState.searchQuery.pageIndex" background v-model:page-size="equipmentState.searchQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="equipmentState.total" class="page-position"> </el-pagination> - </div> - </div> - </div> - </div> - <equipment-dialog ref="equipmentDialogRef" @refresh="getEquipmentData" :equipmentTypeList="equipmentState.equipmentTypeList"></equipment-dialog> - </div> -</template> - -<script setup lang="ts"> -import {defineAsyncComponent, onMounted, reactive, ref} from "vue"; -import {equipmentApi} from "/@/api/basic/equipement"; -import {ElMessage, ElMessageBox} from "element-plus"; -import { Edit, View, Plus, Delete } from '@element-plus/icons-vue'; - -const EquipmentDialog = defineAsyncComponent(() => import('./components/equipmentDialog.vue')); - -const equipmentDialogRef = ref(); - -const equipmentState = reactive<EquipmentStateType>({ - equipmentData: [], - equipmentTypeList: [], - searchQuery: { - pageIndex: 1, - pageSize: 10, - deviceCode: '', - deviceName: '', - devicePower: '', - specialDevice: null, - }, - total: 0, - specialDeviceList: [ - {id: 1, name: '是'}, - {id:2, name: '否'} - ], - deviceUnitList: [ - {id:1, name: '台'}, - {id:2, name: '个'}, - {id:3, name: '件'} - ] -}) - -const getAllType = async ()=>{ - const res = await equipmentApi().getAllType(); - if(res.data.code === 100){ - equipmentState.equipmentTypeList = res.data.data - } -} - -const getEquipmentData = async () => { - let res = await equipmentApi().getEquipmentByList(equipmentState.searchQuery); - if(res.data.code === 100){ - equipmentState.equipmentData = res.data.data; - equipmentState.total = res.data.total - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } -}; - -const openEquipmentDialog = (title: string, value: EquipmentType) => { - equipmentDialogRef.value.showEquipmentDialog(title, value, equipmentState.specialDeviceList); -}; - -const onDelEquipment = (val: EquipmentType) => { - ElMessageBox.confirm(`此操作将永久删除该设备:“${val.deviceName}”,是否继续?`, '提示', { - confirmButtonText: '确认', - cancelButtonText: '取消', - type: 'warning' - }) - .then(async () => { - let res = await equipmentApi().deleteEquipmentById({ id: val.id }); - if (res.data.code === 100) { - ElMessage({ - type: 'success', - duration: 2000, - message: '删除成功' - }); - await getEquipmentData(); - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - }) - .catch((error) => { - }); -} - -const onHandleSizeChange = (val: number) => { - equipmentState.searchQuery.pageSize = val; - getEquipmentData(); -}; - -const onHandleCurrentChange = (val: number) => { - equipmentState.searchQuery.pageIndex = val; - getEquipmentData(); -}; - -const reset = () => { - equipmentState.searchQuery = { - pageIndex: 1, - pageSize: 10, - deviceCode: '', - deviceName: '', - devicePower: '', - specialDevice: null, - } -}; - -onMounted(() => { - getEquipmentData() - getAllType() -}) - -</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); -} -</style> diff --git a/src/views/basic/material/components/materialDialog.vue b/src/views/basic/material/components/materialDialog.vue deleted file mode 100644 index 4410290..0000000 --- a/src/views/basic/material/components/materialDialog.vue +++ /dev/null @@ -1,169 +0,0 @@ -<template> - <div class="system-menu-dialog-container"> - <el-dialog :title="materialDialogState.title" v-model="materialDialogState.materialDialogVisible" :close-on-click-modal="false" width="600px"> - <el-form ref="MaterialFormRef" :rules="materialDialogState.materialFormRules" :model="materialDialogState.materialForm" 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="stuffName"> - <el-input v-model="materialDialogState.materialForm.stuffName" 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="stuffCode"> - <el-input v-model="materialDialogState.materialForm.stuffCode" 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="stuffType"> - <el-select v-model="materialDialogState.materialForm.stuffType" placeholder="材料类型" clearable class="input-length"> - <el-option v-for="item in materialDialogState.stuffTypeList" :key="item.id" :label="item.name" :value="item.id"></el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="材料储存" prop="stuffStorage"> - <el-select v-model="materialDialogState.materialForm.stuffStorage" placeholder="材料储存" clearable class="input-length"> - <el-option v-for="item in materialDialogState.stuffStorageList" :key="item.id" :label="item.name" :value="item.id"></el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="计量单位" prop="stuffUnit"> - <el-select v-model="materialDialogState.materialForm.stuffUnit" placeholder="计量单位" clearable class="input-length"> - <el-option v-for="item in materialDialogState.stuffUnitList" :key="item.id" :label="item.name" :value="item.id"></el-option> - </el-select> - </el-form-item> - </el-col> - </el-row> - </el-form> - <template #footer> - <span class="dialog-footer"> - <el-button @click="materialDialogState.materialDialogVisible = !materialDialogState.materialDialogVisible" size="default">取 消</el-button> - <el-button type="primary" @click="onSubmitMaterial" size="default">确定</el-button> - </span> - </template> - </el-dialog> - </div> -</template> - -<script setup lang="ts"> -import { reactive, ref } from "vue"; -import {useMenuApi} from "/@/api/systemManage/menu"; -import {ElMessage} from "element-plus"; -import {materialApi} from "/@/api/basic/material"; - -const MaterialFormRef = ref() - -const materialDialogState = reactive<MaterialDialogType>({ - title: '', - materialDialogVisible: false, - materialForm: { - stuffCode: '', - stuffName: '', - stuffStorage: null, - stuffType: null, - stuffUnit: null, - }, - materialFormRules: { - stuffCode: [{ required: true, message: '请填写实验材料', trigger: 'blur' }], - stuffName: [{ required: true, message: '请填写编号', trigger: 'blur' }], - stuffStorage: [{ required: true, message: '请选择材料类型', trigger: 'change' }], - stuffType: [{ required: true, message: '请选择材料储存', trigger: 'change' }], - stuffUnit: [{ required: true, message: '请选择计量单位', trigger: 'change' }] - }, - stuffTypeList: [ - {id: 1, name: '化学试剂'}, - {id:2, name: '基础材料'} - ], - stuffStorageList: [ - {id:1, name: '智能试剂柜'}, - {id:2, name: '普通储存柜'}, - ], - stuffUnitList: [ - {id:1, name: 'g'}, - {id:2, name: 'kg'}, - {id:3, name: 'ml'}, - {id:4, name: 'l'}, - ] -}) - -const showMaterialDialog = (title: string, value: MaterialType) => { - materialDialogState.materialDialogVisible = true; - setTimeout(() => { - MaterialFormRef.value.clearValidate(); - }); - if(title === '新增'){ - materialDialogState.title = '新增'; - materialDialogState.materialForm = { - stuffName: '', - stuffCode: '', - stuffType: null, - stuffStorage: null, - stuffUnit: null, - }; - }else{ - materialDialogState.title = '编辑' - materialDialogState.materialForm = { - id: value.id, - stuffName: value.stuffName, - stuffCode: value.stuffCode, - stuffType: value.stuffType, - stuffStorage: value.stuffStorage, - stuffUnit: value.stuffUnit, - }; - } -}; - -const onSubmitMaterial = () => { - MaterialFormRef.value.validate(async(valid: boolean) => { - if(valid){ - if(materialDialogState.title === '新增'){ - let res = await materialApi().addMaterial(materialDialogState.materialForm); - if(res.data.code === 100){ - emit('refresh') - materialDialogState.materialDialogVisible = false; - ElMessage({ - type: 'success', - message: '新增成功' - }) - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg, - }); - } - }else{ - let res = await materialApi().modMaterial(materialDialogState.materialForm) - if(res.data.code === 100){ - emit('refresh') - materialDialogState.materialDialogVisible = false; - ElMessage({ - type: 'success', - message: '编辑成功' - }) - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg, - }); - } - } - }else{ - ElMessage({ - type: 'warning', - message: '请完善基本信息', - }); - } - }) -} - -const emit = defineEmits(['refresh']) - -defineExpose({ - showMaterialDialog -}) -</script> - -<style scoped> - -</style> diff --git a/src/views/basic/material/index.ts b/src/views/basic/material/index.ts deleted file mode 100644 index 8be5c9a..0000000 --- a/src/views/basic/material/index.ts +++ /dev/null @@ -1,48 +0,0 @@ -declare interface MaterialStateType{ - materialData: Array<MaterialType> - searchQuery: { - pageIndex: number, - pageSize: number, - stuffName: string, - stuffCode: string, - stuffType: number | null, - } - total: number, - stuffTypeList: Array<Type>, - stuffStorageList: Array<Type>, - stuffUnitList: Array<Type> -} - - -declare interface MaterialType { - id?: number | null, - stuffName: string, - stuffCode: string, - stuffType: number | null, - stuffStorage: number | null, - stuffUnit: number | null, -} - -declare interface Type { - id: number, - name: string, -} - -declare interface MaterialDialogType { - title: string, - materialDialogVisible: boolean, - materialForm: { - id?: number | null, - stuffName: string, - stuffCode: string, - stuffType: number | null, - stuffStorage: number | null, - stuffUnit: number | null, - }, - materialFormRules: { - - }, - stuffTypeList: Array<Type>, - stuffStorageList: Array<Type>, - stuffUnitList: Array<Type> -} diff --git a/src/views/basic/material/index.vue b/src/views/basic/material/index.vue deleted file mode 100644 index 7bde878..0000000 --- a/src/views/basic/material/index.vue +++ /dev/null @@ -1,322 +0,0 @@ -<template> - <div class="home-container"> - <div style="height: 100%"> - <el-row class="homeCard"> - <div class="basic-line"> - <span>实验材料:</span> - <el-input v-model="materialState.searchQuery.stuffName" clearable filterable class="input-box" placeholder="实验材料"> - </el-input> - </div> - <div class="basic-line"> - <span>耗材编号:</span> - <el-input v-model="materialState.searchQuery.stuffCode" clearable filterable class="input-box" placeholder="耗材编号"> - </el-input> - </div> - <div class="basic-line"> - <span>材料类型:</span> - <el-select v-model="materialState.searchQuery.stuffType" clearable filterable class="input-box" placeholder="材料类型"> - <el-option v-for="item in materialState.stuffTypeList" :key="item.id" :label="item.name" :value="item.id"></el-option> - </el-select> - </div> - <div style="padding-bottom: 10px"> - <el-button type="primary" @click="getMaterialData">查询</el-button> - <el-button plain @click="reset">重置</el-button> - </div> - </el-row> - <div class="homeCard"> - <div class="main-card"> - <el-row class="cardTop"> - <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="openMaterialDialog('新增', {})">新增</el-button> - <!-- <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button>--> - </el-col> -<!-- <el-button type="primary" :icon="Refresh" size="default" />--> - </el-row> - <el-table ref="multipleTableRef" :data="materialState.materialData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }"> - <el-table-column prop="stuffName" label="实验材料"/> - <el-table-column prop="stuffCode" label="编号" /> - <el-table-column prop="stuffType" label="材料类型"> - <template #default="scope"> - <span>{{`${materialState.stuffTypeList.find(item =>item.id === scope.row.stuffType)?.name || ''}`}}</span> - </template> - </el-table-column> - <el-table-column prop="stuffStorage" label="材料储存" show-overflow-tooltip> - <template #default="scope"> - <span>{{`${materialState.stuffStorageList.find(item =>item.id === scope.row.stuffStorage)?.name || ''}`}}</span> - </template> - </el-table-column> - <el-table-column prop="stuffUnit" label="计量单位" show-overflow-tooltip> - <template #default="scope"> - <span>{{`${materialState.stuffUnitList.find(item =>item.id === scope.row.stuffUnit)?.name || ''}`}}</span> - </template> - </el-table-column> - <el-table-column prop="createTime" label="创建时间" show-overflow-tooltip></el-table-column> - <el-table-column prop="createByUserName" label="创建人" show-overflow-tooltip></el-table-column> - <el-table-column prop="updateTime" label="最后修改时间" show-overflow-tooltip></el-table-column> - <el-table-column prop="updateByUserName" label="最后修改人" show-overflow-tooltip></el-table-column> - <el-table-column label="操作" width="150"> - <template #default="scope"> - <el-button size="small" text type="primary" :icon="Edit" @click="openMaterialDialog('修改', scope.row)">编辑</el-button> - <el-button size="small" text type="danger" :icon="Delete" @click="onDelMaterial(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="materialState.searchQuery.pageIndex" background v-model:page-size="materialState.searchQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="materialState.total" class="page-position"> </el-pagination> - </div> - </div> - </div> - </div> - <material-dialog ref="materialDialogRef" @refresh="getMaterialData"></material-dialog> - </div> -</template> - -<script setup lang="ts"> -import {defineAsyncComponent, onMounted, reactive, ref} from "vue"; -import { materialApi } from "/@/api/basic/material"; -import {ElMessage, ElMessageBox} from "element-plus"; -import { Edit, View, Plus, Delete } from '@element-plus/icons-vue'; - -const MaterialDialog = defineAsyncComponent(() => import('./components/materialDialog.vue')); - -const materialDialogRef = ref(); - -const materialState = reactive<MaterialStateType>({ - materialData: [], - searchQuery: { - pageIndex: 1, - pageSize: 10, - stuffName: '', - stuffCode: '', - stuffType: null, - }, - total: 0, - stuffTypeList: [ - {id: 1, name: '化学试剂'}, - {id:2, name: '基础材料'} - ], - stuffStorageList: [ - {id:1, name: '智能试剂柜'}, - {id:2, name: '普通储存柜'}, - ], - stuffUnitList: [ - {id:1, name: 'g'}, - {id:2, name: 'kg'}, - {id:3, name: 'ml'}, - {id:4, name: 'l'}, - ] -}) - -const getMaterialData = async () => { - let res = await materialApi().getMaterialByList(materialState.searchQuery); - if(res.data.code === 100){ - materialState.materialData = res.data.data; - materialState.total = res.data.total; - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } -}; - -const openMaterialDialog = (title: string, value: MaterialType) => { - materialDialogRef.value.showMaterialDialog(title, value); -}; - -const onDelMaterial = (val: MaterialType) => { - ElMessageBox.confirm(`此操作将永久删除该耗材:“${val.stuffName}”,是否继续?`, '提示', { - confirmButtonText: '确认', - cancelButtonText: '取消', - type: 'warning' - }) - .then(async () => { - let res = await materialApi().deleteMaterialById({ id: val.id }); - if (res.data.code === 100) { - ElMessage({ - type: 'success', - duration: 2000, - message: '删除成功' - }); - await getMaterialData(); - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - }) - .catch((error) => { - }); -} - -const onHandleSizeChange = (val: number) => { - materialState.searchQuery.pageSize = val; - getMaterialData(); -}; - -const onHandleCurrentChange = (val: number) => { - materialState.searchQuery.pageIndex = val; - getMaterialData(); -}; - -const reset = () => { - materialState.searchQuery = { - pageIndex: 1, - pageSize: 10, - stuffName: '', - stuffCode: '', - stuffType: null, - } -}; - -onMounted(() => { - getMaterialData() -}) - -</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); -} -</style> diff --git a/src/views/basic/person/components/personDialog.vue b/src/views/basic/person/components/personDialog.vue deleted file mode 100644 index 6817302..0000000 --- a/src/views/basic/person/components/personDialog.vue +++ /dev/null @@ -1,197 +0,0 @@ -<template> - <div class="system-menu-dialog-container"> - <el-dialog :title="personDialogState.title" v-model="personDialogState.personDialogVisible" :close-on-click-modal="false" width="600px"> - <el-form ref="PersonFormRef" :rules="personDialogState.personFormRules" :model="personDialogState.personForm" 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="personName"> - <el-input v-model="personDialogState.personForm.personName" 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="personAge"> - <el-input @input="onVerifiyNumberInteger($event, 'age')" v-model="personDialogState.personForm.personAge" 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="personGender"> - <el-select v-model="personDialogState.personForm.personGender" placeholder="人员性别" clearable class="input-length"> - <el-option v-for="item in personDialogState.personGenderList" :key="item.id" :label="item.name" :value="item.id"></el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="专业" prop="personMajor"> - <el-input v-model="personDialogState.personForm.personMajor" 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="depName"> - <el-input v-model="personDialogState.personForm.depName" 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="phone"> - <el-input @input="onVerifiyNumberInteger($event, 'phone')" v-model="personDialogState.personForm.phone" 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="aptitude"> - <el-input v-model="personDialogState.personForm.aptitude" 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="training"> - <el-select v-model="personDialogState.personForm.training" placeholder="培训情况" clearable class="input-length"> - <el-option v-for="item in personDialogState.trainingList" :key="item.id" :label="item.name" :value="item.id"></el-option> - </el-select> - </el-form-item> - </el-col> - </el-row> - </el-form> - <template #footer> - <span class="dialog-footer"> - <el-button @click="personDialogState.personDialogVisible = !personDialogState.personDialogVisible" size="default">取 消</el-button> - <el-button type="primary" @click="onSubmitPerson" size="default">确定</el-button> - </span> - </template> - </el-dialog> - </div> -</template> - -<script setup lang="ts"> -import { reactive, ref } from "vue"; -import {useMenuApi} from "/@/api/systemManage/menu"; -import {ElMessage} from "element-plus"; -import {personApi} from "/@/api/basic/person"; -import { verifiyNumberInteger } from '../../../../utils/toolsValidate' - -const PersonFormRef = ref() - -const personDialogState = reactive<PersonDialogType>({ - title: '', - personDialogVisible: false, - personForm: { - personName: '', - personAge: null, - personGender: null, - personMajor: '', - depName: '', - phone: null, - aptitude: '', - training: null, - }, - personFormRules: { - personName: [{ required: true, message: '请填写人员名称', trigger: 'blur' }], - personMajor: [{ required: true, message: '请填写专业', trigger: 'blur' }], - aptitude: [{ required: true, message: '请填写相关资质', trigger: 'blur' }], - personAge: [{ required: true, message: '请填写人员年龄', trigger: 'blur' }], - personGender: [{ required: true, message: '请选择人员性别', trigger: 'change' }], - phone: [{ required: true, message: '请填写手机号', trigger: 'blur' }], - training: [{ required: true, message: '请选择培训情况', trigger: 'change' }] - }, - personGenderList: [ - {id:1, name: '男'}, - {id:2, name: '女'}, - ], - trainingList: [ - {id:1, name: '已完成当期安全培训'}, - {id:2, name: '未完成当期安全培训'}, - ] -}) - -const showPersonDialog = (title: string, value: PersonType,) => { - - personDialogState.personDialogVisible = true; - setTimeout(() => { - PersonFormRef.value.clearValidate(); - }); - if(title === '新增'){ - personDialogState.title = '新增'; - personDialogState.personForm = { - personName: '', - personAge: null, - personGender: null, - personMajor: '', - depName: '', - phone: null, - aptitude: '', - training: null, - }; - }else{ - personDialogState.title = '编辑' - personDialogState.personForm = { - id: value.id, - personName: value.personName, - personAge: value.personAge, - personGender: value.personGender, - personMajor: value.personMajor, - depName: value.depName, - phone: value.phone, - aptitude: value.aptitude, - training: value.training, - }; - } -}; - -const onSubmitPerson = () => { - PersonFormRef.value.validate(async(valid: boolean) => { - if(valid){ - if(personDialogState.title === '新增'){ - let res = await personApi().addPerson(personDialogState.personForm); - if(res.data.code === 100){ - emit('refresh') - personDialogState.personDialogVisible = false; - ElMessage({ - type: 'success', - message: '新增成功' - }) - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg, - }); - } - }else{ - let res = await personApi().modPerson(personDialogState.personForm) - if(res.data.code === 100){ - emit('refresh') - personDialogState.personDialogVisible = false; - ElMessage({ - type: 'success', - message: '编辑成功' - }) - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg, - }); - } - } - }else{ - ElMessage({ - type: 'warning', - message: '请完善基本信息', - }); - } - }) -}; - -const onVerifiyNumberInteger = (val: number, title: string) => { - if (title === 'age') { - personDialogState.personForm.personAge = Number(verifiyNumberInteger(val.toString())) === 0 ? null : Number(verifiyNumberInteger(val.toString())); - } else if (title === 'phone') { - personDialogState.personForm.phone = Number(verifiyNumberInteger(val.toString())) === 0 ? null : Number(verifiyNumberInteger(val.toString())); - } -}; - -const emit = defineEmits(['refresh']); - -defineExpose({ - showPersonDialog -}); -</script> - -<style scoped> - -</style> diff --git a/src/views/basic/person/index.ts b/src/views/basic/person/index.ts deleted file mode 100644 index c1de227..0000000 --- a/src/views/basic/person/index.ts +++ /dev/null @@ -1,52 +0,0 @@ -declare interface PersonStateType extends PublicType{ - personData: Array<PersonType> - searchQuery: { - pageIndex: number, - pageSize: number, - personName: string, - training: number | null, - depName: string, - } - total: number -} - -declare interface PersonType { - id?: number | null, - personName: string, - personAge: number | null, - personGender: number | null, - personMajor: string, - depName: string, - phone: number | null, - aptitude: string, - training: number | null, -} - -declare interface PublicType { - personGenderList: Array<Type>, - trainingList: Array<Type> -} - -declare interface Type { - id: number, - name: string, -} - -declare interface PersonDialogType extends PublicType{ - title: string, - personDialogVisible: boolean, - personForm: { - id?: number | null, - personName: string, - personAge: number | null, - personGender: number | null, - personMajor: string, - depName: string, - phone: number | null, - aptitude: string, - training: number | null, - }, - personFormRules: { - - }, -} diff --git a/src/views/basic/person/index.vue b/src/views/basic/person/index.vue deleted file mode 100644 index 479ebb6..0000000 --- a/src/views/basic/person/index.vue +++ /dev/null @@ -1,315 +0,0 @@ -<template> - <div class="home-container"> - <div style="height: 100%"> - <el-row class="homeCard"> - <div class="basic-line"> - <span>人员名称:</span> - <el-input v-model="personState.searchQuery.personName" clearable filterable class="input-box" placeholder="人员名称"> - </el-input> - </div> - <div class="basic-line"> - <span>部门名称:</span> - <el-input v-model="personState.searchQuery.depName" clearable filterable class="input-box" placeholder="部门名称"> - </el-input> - </div> - <div class="basic-line"> - <span>培训情况:</span> - <el-select v-model="personState.searchQuery.training" clearable filterable class="input-box" placeholder="培训情况"> - <el-option v-for="item in personState.trainingList" :key="item.id" :label="item.name" :value="item.id"></el-option> - </el-select> - </div> - <div style="padding-bottom: 10px"> - <el-button type="primary" @click="getPersonData">查询</el-button> - <el-button plain @click="reset">重置</el-button> - </div> - </el-row> - <div class="homeCard"> - <div class="main-card"> - <el-row class="cardTop"> - <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="openPersonDialog('新增', {})">新增</el-button> - <!-- <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button>--> - </el-col> -<!-- <el-button type="primary" :icon="Refresh" size="default" />--> - </el-row> - <el-table ref="multipleTableRef" :data="personState.personData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }"> - <el-table-column prop="personName" label="人员名称"/> - <el-table-column prop="personAge" label="年龄" /> - <el-table-column prop="personGender" label="性别"> - <template #default="scope"> - <span>{{`${personState.personGenderList.find(item =>item.id === scope.row.personGender)?.name || ''}`}}</span> - </template> - </el-table-column> - <el-table-column prop="personMajor" label="专业" show-overflow-tooltip/> - <el-table-column prop="depName" label="部门名称" show-overflow-tooltip/> - <el-table-column prop="phone" label="手机号" show-overflow-tooltip/> - <el-table-column prop="aptitude" label="相关资质" show-overflow-tooltip/> - <el-table-column prop="training" label="培训情况" show-overflow-tooltip> - <template #default="scope"> - <span>{{`${personState.trainingList.find(item =>item.id === scope.row.training)?.name || ''}`}}</span> - </template> - </el-table-column> - <el-table-column prop="createTime" label="创建时间" show-overflow-tooltip></el-table-column> - <el-table-column prop="createByUserName" label="创建人" show-overflow-tooltip></el-table-column> - <el-table-column prop="updateTime" label="最后修改时间" show-overflow-tooltip></el-table-column> - <el-table-column prop="updateByUserName" label="最后修改人" show-overflow-tooltip></el-table-column> - <el-table-column label="操作" width="150"> - <template #default="scope"> - <el-button size="small" text type="primary" :icon="Edit" @click="openPersonDialog('修改', scope.row)">编辑</el-button> - <el-button size="small" text type="danger" :icon="Delete" @click="onDelPerson(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="personState.searchQuery.pageIndex" background v-model:page-size="personState.searchQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="personState.total" class="page-position"> </el-pagination> - </div> - </div> - </div> - </div> - <person-dialog ref="personDialogRef" @refresh="getPersonData"></person-dialog> - </div> -</template> - -<script setup lang="ts"> -import {defineAsyncComponent, onMounted, reactive, ref} from "vue"; -import {personApi} from "/@/api/basic/person"; -import {ElMessage, ElMessageBox} from "element-plus"; -import { Edit, View, Plus, Delete } from '@element-plus/icons-vue'; - -const PersonDialog = defineAsyncComponent(() => import('./components/personDialog.vue')); - -const personDialogRef = ref(); - -const personState = reactive<PersonStateType>({ - personData: [], - searchQuery: { - pageIndex: 1, - pageSize: 10, - personName: '', - training: null, - depName: '', - }, - total: 0, - personGenderList: [ - {id:1, name: '男'}, - {id:2, name: '女'}, - ], - trainingList: [ - {id: 1, name: '已完成当期安全培训'}, - {id:2, name: '未完成当期安全培训'} - ], -}) - -const getPersonData = async () => { - let res = await personApi().getPersonByList(personState.searchQuery); - if(res.data.code === 100){ - personState.personData = res.data.data; - personState.total = res.data.total; - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } -}; - -const openPersonDialog = (title: string, value: PersonType) => { - personDialogRef.value.showPersonDialog(title, value); -}; - -const onDelPerson = (val: PersonType) => { - ElMessageBox.confirm(`此操作将永久删除该用户:“${val.personName}”,是否继续?`, '提示', { - confirmButtonText: '确认', - cancelButtonText: '取消', - type: 'warning' - }) - .then(async () => { - let res = await personApi().deletePersonById({ id: val.id }); - if (res.data.code === 100) { - ElMessage({ - type: 'success', - duration: 2000, - message: '删除成功' - }); - await getPersonData(); - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - }) - .catch((error) => { - }); -} - -const onHandleSizeChange = (val: number) => { - personState.searchQuery.pageSize = val; - getPersonData(); -}; - -const onHandleCurrentChange = (val: number) => { - personState.searchQuery.pageIndex = val; - getPersonData(); -}; - -const reset = () => { - personState.searchQuery = { - pageIndex: 1, - pageSize: 10, - personName: '', - training: null, - depName: '', - } -}; - -onMounted(() => { - getPersonData() -}) - -</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); -} -</style> diff --git a/src/views/basic/room/components/roomDialog.vue b/src/views/basic/room/components/roomDialog.vue deleted file mode 100644 index bfa5291..0000000 --- a/src/views/basic/room/components/roomDialog.vue +++ /dev/null @@ -1,200 +0,0 @@ -<template> - <div class="system-menu-dialog-container"> - <el-dialog :title="roomDialogState.title" v-model="roomDialogState.roomDialogVisible" :close-on-click-modal="false" width="600px"> - <el-form ref="roomFormRef" :rules="roomDialogState.roomFormRules" :model="roomDialogState.roomForm" 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="siteName"> - <el-input v-model="roomDialogState.roomForm.siteName" 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="floor"> - <el-input v-model="roomDialogState.roomForm.floor" 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="room"> - <el-input v-model="roomDialogState.roomForm.room" 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="siteLiabilityPersonId"> - <el-select v-model="roomDialogState.roomForm.siteLiabilityPersonId" placeholder="场所责任人" clearable class="input-length"> - <el-option v-for="item in memberList" :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="safeLiabilityPersonId"> - <el-select v-model="roomDialogState.roomForm.safeLiabilityPersonId" placeholder="场所安全员" clearable class="input-length"> - <el-option v-for="item in memberList" :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="fireFacilities"> - <el-select v-model="roomDialogState.roomForm.fireFacilities" placeholder="有无消防设施" clearable class="input-length"> - <el-option :key="1" label="有" :value="1"></el-option> - <el-option :key="2" label="无" :value="2"></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="partitionStatus"> - <el-select v-model="roomDialogState.roomForm.partitionStatus" placeholder="有无隔断" clearable class="input-length"> - <el-option :key="1" label="有" :value="1"></el-option> - <el-option :key="2" label="无" :value="2"></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="siteTypeId"> - <el-select v-model="roomDialogState.roomForm.siteTypeId" placeholder="场所性质" clearable class="input-length"> - <el-option v-for="item in typeList" :key="item.id" :label="item.siteType" :value="item.id"></el-option> - </el-select> - </el-form-item> - </el-col> - </el-row> - </el-form> - <template #footer> - <span class="dialog-footer"> - <el-button @click="roomDialogState.roomDialogVisible = !roomDialogState.roomDialogVisible" size="default">取 消</el-button> - <el-button type="primary" @click="onSubmitRoom" size="default">确定</el-button> - </span> - </template> - </el-dialog> - </div> -</template> - -<script setup lang="ts"> -import { reactive, ref, defineProps} from "vue"; -import {ElMessage} from "element-plus"; -import {roomApi} from "/@/api/basic/room"; - -const roomFormRef = ref() - -const roomDialogState = reactive<RoomDialogType>({ - title: '', - roomDialogVisible: false, - roomForm: { - siteName: '', - floor: '', - room: '', - siteLiabilityPersonId: null, - safeLiabilityPersonId: null, - fireFacilities: null, - partitionStatus: null, - siteTypeId: null - }, - roomFormRules: { - siteName: [{ required: true, message: '请填写实验室名称', trigger: 'blur' }], - floor: [{ required: true, message: '请填写楼名称', trigger: 'blur' }], - room: [{ required: true, message: '请填写房间', trigger: 'blur' }], - siteLiabilityPersonId: [{ required: true, message: '请选择场所责任人', trigger: 'blur' }], - safeLiabilityPersonId: [{ required: true, message: '请选择场所安全员', trigger: 'blur' }], - fireFacilities: [{ required: true, message: '请选择有无消防设施', trigger: 'blur' }], - partitionStatus: [{ required: true, message: '请选择有无隔断', trigger: 'blur' }], - siteTypeId: [{ required: true, message: '请选择场所性质', trigger: 'blur' }] - }, - specialDeviceList: [], - deviceUnitList: [ - {id:1, name: '台'}, - {id:2, name: '个'}, - {id:3, name: '件'} - ] -}) - -const showroomDialog = (title: string, value: RoomType, specialDeviceList: Type []) => { - - roomDialogState.roomDialogVisible = true; - roomDialogState.specialDeviceList = specialDeviceList; - setTimeout(() => { - roomFormRef.value.clearValidate(); - }); - if(title === '新增'){ - roomDialogState.title = '新增'; - roomDialogState.roomForm = { - siteName: '', - floor: '', - room: '', - siteLiabilityPersonId: null, - safeLiabilityPersonId: null, - fireFacilities: null, - partitionStatus: null, - siteTypeId: null - }; - }else{ - roomDialogState.title = '编辑' - roomDialogState.roomForm = { - id: value.id, - siteName: value.siteName, - floor: value.floor, - room: value.room, - siteLiabilityPersonId: value.siteLiabilityPersonId, - safeLiabilityPersonId: value.safeLiabilityPersonId, - fireFacilities: value.fireFacilities, - partitionStatus: value.partitionStatus, - siteTypeId: value.siteTypeId - }; - } -}; - -const onSubmitRoom = () => { - roomFormRef.value.validate(async(valid: boolean) => { - if(valid){ - if(roomDialogState.title === '新增'){ - let res = await roomApi().addRoom(roomDialogState.roomForm); - if(res.data.code === 100){ - emit('refresh') - roomDialogState.roomDialogVisible = false; - ElMessage({ - type: 'success', - message: '新增成功' - }) - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg, - }); - } - }else{ - let res = await roomApi().modRoom(roomDialogState.roomForm) - if(res.data.code === 100){ - emit('refresh') - roomDialogState.roomDialogVisible = false; - ElMessage({ - type: 'success', - message: '编辑成功' - }) - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg, - }); - } - } - }else{ - ElMessage({ - type: 'warning', - message: '请完善基本信息', - }); - } - }) -} - -const emit = defineEmits(['refresh']) - -defineProps({ - memberList: Array, - typeList: Array -}) - -defineExpose({ - showroomDialog -}) -</script> - -<style scoped> - -</style> diff --git a/src/views/basic/room/index.ts b/src/views/basic/room/index.ts deleted file mode 100644 index 11634cf..0000000 --- a/src/views/basic/room/index.ts +++ /dev/null @@ -1,53 +0,0 @@ -declare interface RoomStateType { - roomData: Array<RoomType> - memberList: Array<any> - typeList: Array<any> - searchQuery: { - pageIndex: number, - pageSize: number, - siteName: string, - floor: string, - room: string, - } - total: number - specialDeviceList: Array<Type>, - deviceUnitList: Array<Type> -} - -declare interface RoomType { - id?: number | null, - siteName: string, - floor: string, - room: string, - siteLiabilityPersonId: number | null, - safeLiabilityPersonId: number | null, - fireFacilities: number | null, - partitionStatus: number | null, - siteTypeId: number | null -} - -declare interface Type { - id: number, - name: string, -} - -declare interface RoomDialogType { - title: string, - roomDialogVisible: boolean, - roomForm: { - id?: number | null, - siteName: string, - floor: string, - room: string, - siteLiabilityPersonId: number | null, - safeLiabilityPersonId: number | null, - fireFacilities: number | null, - partitionStatus: number | null, - siteTypeId: number | null - }, - roomFormRules: { - - }, - specialDeviceList: Array<Type>, - deviceUnitList: Array<Type> -} diff --git a/src/views/basic/room/index.vue b/src/views/basic/room/index.vue deleted file mode 100644 index dc3af1d..0000000 --- a/src/views/basic/room/index.vue +++ /dev/null @@ -1,335 +0,0 @@ -<template> - <div class="home-container"> - <div style="height: 100%"> - <el-row class="homeCard"> - <div class="basic-line"> - <span>场所名称:</span> - <el-input v-model="roomState.searchQuery.siteName" clearable filterable class="input-box" placeholder="场所名称"> - </el-input> - </div> - <div class="basic-line"> - <span>楼:</span> - <el-input v-model="roomState.searchQuery.floor" clearable filterable class="input-box" placeholder="楼"> - </el-input> - </div> - <div class="basic-line"> - <span>房间号:</span> - <el-input v-model="roomState.searchQuery.room" clearable filterable class="input-box" placeholder="房间号"> - </el-input> - </div> - <div style="padding-bottom: 10px"> - <el-button type="primary" @click="getRoomData">查询</el-button> - <el-button plain @click="reset">重置</el-button> - </div> - </el-row> - <div class="homeCard"> - <div class="main-card"> - <el-row class="cardTop"> - <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="openRoomDialog('新增', {})">新增</el-button> - <!-- <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button>--> - </el-col> -<!-- <el-button type="primary" :icon="Refresh" size="default" />--> - </el-row> - <el-table ref="multipleTableRef" :data="roomState.roomData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }"> - <el-table-column prop="siteName" label="场所名称"/> - <el-table-column prop="floor" label="实验室所在楼" /> - <el-table-column prop="room" label="实验室所在房间"/> - <el-table-column prop="siteLiabilityPerson" label="场所责任人"/> - <el-table-column prop="safeLiabilityPerson" label="场所安全员"/> - <el-table-column prop="fireFacilities" label="有无消防设施"> - <template #default="scope"> - <span>{{scope.row.fireFacilities == 1?'有':'无'}}</span> - </template> - </el-table-column> - <el-table-column prop="partitionStatus" label="有无隔断"> - <template #default="scope"> - <span>{{scope.row.partitionStatus == 1?'有':'无'}}</span> - </template> - </el-table-column> - <el-table-column prop="siteType" label="场所性质"/> - <el-table-column prop="createTime" label="创建时间" show-overflow-tooltip></el-table-column> - <el-table-column prop="createByUserName" label="创建人" show-overflow-tooltip></el-table-column> - <el-table-column prop="updateTime" label="最后修改时间" show-overflow-tooltip></el-table-column> - <el-table-column prop="updateByUserName" label="最后修改人" show-overflow-tooltip></el-table-column> - <el-table-column label="操作" width="150"> - <template #default="scope"> - <el-button size="small" text type="primary" :icon="Edit" @click="openRoomDialog('修改', scope.row)">编辑</el-button> - <el-button size="small" text type="danger" :icon="Delete" @click="onDelRoom(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="roomState.searchQuery.pageIndex" background v-model:page-size="roomState.searchQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="roomState.total" class="page-position"> </el-pagination> - </div> - </div> - </div> - </div> - <room-dialog ref="roomDialogRef" @refresh="getRoomData" :memberList="roomState.memberList" :typeList="roomState.typeList"></room-dialog> - </div> -</template> - -<script setup lang="ts"> -import {defineAsyncComponent, onMounted, reactive, ref} from "vue"; -import {roomApi} from "/@/api/basic/room"; -import {personApi} from "/@/api/basic/person"; -import {ElMessage, ElMessageBox} from "element-plus"; -import { Edit, View, Plus, Delete } from '@element-plus/icons-vue'; -import {equipmentApi} from "/@/api/basic/equipement"; - -const RoomDialog = defineAsyncComponent(() => import('./components/roomDialog.vue')); - -const roomDialogRef = ref(); - -const roomState = reactive<RoomStateType>({ - roomData: [], - memberList: [], - typeList: [], - searchQuery: { - pageIndex: 1, - pageSize: 10, - siteName: '', - floor: '', - room: '', - }, - total: 0, - specialDeviceList: [ - {id: 1, name: '是'}, - {id:2, name: '否'} - ], - deviceUnitList: [ - {id:1, name: '台'}, - {id:2, name: '个'}, - {id:3, name: '件'} - ] -}) - -const getAllMember = async ()=>{ - const res = await personApi().getAllPerson(); - if(res.data.code === 100){ - roomState.memberList = res.data.data - } -} - -const getAllType = async ()=>{ - const res = await roomApi().getAllType(); - if(res.data.code === 100){ - roomState.typeList = res.data.data - } -} - -const getRoomData = async () => { - let res = await roomApi().getRoomByList(roomState.searchQuery); - if(res.data.code === 100){ - roomState.roomData = res.data.data; - roomState.total = res.data.total; - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } -}; - -const openRoomDialog = (title: string, value: RoomType) => { - roomDialogRef.value.showroomDialog(title, value, roomState.specialDeviceList); -}; - -const onDelRoom = (val: RoomType) => { - ElMessageBox.confirm(`此操作将永久删除该场所:“${val.siteName}”,是否继续?`, '提示', { - confirmButtonText: '确认', - cancelButtonText: '取消', - type: 'warning' - }) - .then(async () => { - let res = await roomApi().deleteRoomById({ id: val.id }); - if (res.data.code === 100) { - ElMessage({ - type: 'success', - duration: 2000, - message: '删除成功' - }); - await getRoomData(); - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - }) - .catch((error) => { - }); -} - -const onHandleSizeChange = (val: number) => { - roomState.searchQuery.pageSize = val; - getRoomData(); -}; - -const onHandleCurrentChange = (val: number) => { - roomState.searchQuery.pageIndex = val; - getRoomData(); -}; - -const reset = () => { - roomState.searchQuery = { - pageIndex: 1, - pageSize: 10, - siteName: '', - floor: '', - room: '', - } -}; - -onMounted(() => { - getRoomData() - getAllMember() - getAllType() -}) - -</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); -} -</style> diff --git a/src/views/basic/unit/components/unitDialog.vue b/src/views/basic/unit/components/unitDialog.vue deleted file mode 100644 index 93a4dcd..0000000 --- a/src/views/basic/unit/components/unitDialog.vue +++ /dev/null @@ -1,185 +0,0 @@ -<template> - <div class="system-menu-dialog-container"> - <el-dialog :title="unitDialogState.title" v-model="unitDialogState.unitDialogVisible" :close-on-click-modal="false" width="600px"> - <el-form ref="UnitFormRef" :rules="unitDialogState.unitFormRules" :model="unitDialogState.unitForm" 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="unitDialogState.unitForm.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="unitDialogState.unitForm.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="riskSourceType"> - <el-select v-model="unitDialogState.unitForm.riskSourceType" @change="unitDialogState.unitForm.riskSourceId = null" placeholder="风险源风险类型" clearable class="input-length"> - <el-option v-for="item in unitDialogState.riskSourceTypeList" :key="item.id" :label="item.name" :value="item.id"></el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="风险源" prop="riskSourceId"> - <el-select v-model="unitDialogState.unitForm.riskSourceId" placeholder="风险源" clearable class="input-length"> - <el-option v-if="unitDialogState.unitForm.riskSourceType === 2" v-for="item in unitDialogState.allEquipmentList" :key="item.id" :label="item.deviceName" :value="item.id"></el-option> - <el-option v-if="unitDialogState.unitForm.riskSourceType === 1" v-for="item in unitDialogState.allRoomList" :key="item.id" :label="item.room" :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="unitDialogState.unitForm.liabilityUserId" placeholder="负责人" clearable class="input-length"> - <el-option v-for="item in unitDialogState.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="unitDialogState.unitForm.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"> - <el-form-item label="风险单元描述"> - <el-input type="textarea" :rows="3" v-model="unitDialogState.unitForm.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="unitDialogState.unitDialogVisible = !unitDialogState.unitDialogVisible" size="default">取 消</el-button> - <el-button type="primary" @click="onSubmitUnit" size="default">确定</el-button> - </span> - </template> - </el-dialog> - </div> -</template> - -<script setup lang="ts"> -import { reactive, ref } from "vue"; -import {ElMessage} from "element-plus"; -import {unitApi} from "/@/api/basic/unit"; - -const UnitFormRef = ref() - -const unitDialogState = reactive<UnitDialogType>({ - title: '', - unitDialogVisible: false, - unitForm: { - riskCode: '', - riskName: '', - riskSourceId: null, - riskSourceType: null, - liabilityUserId: null, - liabilityDep: '', - description: '', - }, - unitFormRules: { - riskCode: [{ required: true, message: '请填写风险单元编号', trigger: 'blur' }], - riskName: [{ required: true, message: '请填写风险单元名称', trigger: 'blur' }], - riskSourceId: [{ required: true, message: '请选择风险源风险类型', trigger: 'change' }], - riskSourceType: [{ required: true, message: '请选择风险源', trigger: 'change' }], - }, - riskSourceTypeList: [ - {id: 1, name: '区域、实验场所'}, - {id:2, name: '设施设备'}, - {id:3, name: '固定工艺节点'}, - ], - evaluateStatusList: [ - {id: 1, name: '未评价'}, - {id:2, name: '已评价'}, - ], - allRoomList: [], - allEquipmentList: [], - allPersonList: [], -}) - -const showUnitDialog = (title: string, value: UnitType, allEquipmentList: AllEquipmentListType [], allRoomList: RoomType [], allPersonList: AllPersonListType []) => { - unitDialogState.unitDialogVisible = true; - unitDialogState.allRoomList = allRoomList - unitDialogState.allEquipmentList = allEquipmentList - unitDialogState.allPersonList = allPersonList - setTimeout(() => { - UnitFormRef.value.clearValidate(); - }); - if(title === '新增'){ - unitDialogState.title = '新增'; - unitDialogState.unitForm = { - riskCode: '', - riskName: '', - riskSourceId: null, - riskSourceType: null, - liabilityUserId: null, - liabilityDep: '', - description: '', - }; - }else{ - unitDialogState.title = '编辑' - unitDialogState.unitForm = { - id: value.id, - riskCode: value.riskCode, - riskName: value.riskName, - riskSourceId: value.riskSourceId, - riskSourceType: value.riskSourceType, - liabilityUserId: value.liabilityUserId, - liabilityDep: value.liabilityDep, - description: value.description, - }; - } -}; - -const onSubmitUnit = () => { - UnitFormRef.value.validate(async(valid: boolean) => { - if(valid){ - if(unitDialogState.title === '新增'){ - let res = await unitApi().addUnit(unitDialogState.unitForm); - if(res.data.code === 100){ - emit('refresh') - unitDialogState.unitDialogVisible = false; - ElMessage({ - type: 'success', - message: '新增成功' - }) - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg, - }); - } - }else{ - let res = await unitApi().modUnit(unitDialogState.unitForm) - if(res.data.code === 100){ - emit('refresh') - unitDialogState.unitDialogVisible = false; - ElMessage({ - type: 'success', - message: '编辑成功' - }) - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg, - }); - } - } - }else{ - ElMessage({ - type: 'warning', - message: '请完善基本信息', - }); - } - }) -} - -const emit = defineEmits(['refresh']) - -defineExpose({ - showUnitDialog -}) -</script> - -<style scoped> - -</style> diff --git a/src/views/basic/unit/index.ts b/src/views/basic/unit/index.ts deleted file mode 100644 index f2eead4..0000000 --- a/src/views/basic/unit/index.ts +++ /dev/null @@ -1,55 +0,0 @@ -declare interface UnitStateType { - unitData: Array<UnitType> - searchQuery: { - pageIndex: number, - pageSize: number, - riskCode: string, - riskName: string, - riskSourceType: number | null, - } - total: number - riskSourceTypeList: Array<Type>, - evaluateStatusList: Array<Type>, - allRoomList: Array<RoomType>, - allEquipmentList: Array<AllEquipmentListType>, - allPersonList: Array<AllPersonListType>, -} - -declare interface UnitType { - id?: number | null, - riskCode: string, - riskName: string, - riskSourceId: number | null, - riskSourceType: number | null, - liabilityUserId: number | null, - liabilityDep: string, - description: string, -} - -declare interface Type { - id: number, - name: string, -} - -declare interface UnitDialogType { - title: string, - unitDialogVisible: boolean, - unitForm: { - id?: number | null, - riskCode: string, - riskName: string, - riskSourceId: number | null, - riskSourceType: number | null, - liabilityUserId: number | null, - liabilityDep: string, - description: string, - }, - unitFormRules: { - - }, - riskSourceTypeList: Array<Type>, - evaluateStatusList: Array<Type>, - allRoomList: Array<RoomType>, - allEquipmentList: Array<AllEquipmentListType>, - allPersonList: Array<AllPersonListType>, -} diff --git a/src/views/basic/unit/index.vue b/src/views/basic/unit/index.vue deleted file mode 100644 index 3ae75ed..0000000 --- a/src/views/basic/unit/index.vue +++ /dev/null @@ -1,358 +0,0 @@ -<template> - <div class="home-container"> - <div style="height: 100%"> - <el-row class="homeCard"> - <div class="basic-line"> - <span>风险单元编号:</span> - <el-input v-model="unitState.searchQuery.riskCode" clearable filterable class="input-box" placeholder="风险单元编号"> - </el-input> - </div> - <div class="basic-line"> - <span>风险单元名称:</span> - <el-input v-model="unitState.searchQuery.riskName" clearable filterable class="input-box" placeholder="风险单元名称"> - </el-input> - </div> - <div class="basic-line"> - <span>风险源风险类型:</span> - <el-select v-model="unitState.searchQuery.riskSourceType" clearable filterable class="input-box" placeholder="风险源风险类型"> - <el-option v-for="item in unitState.riskSourceTypeList" :key="item.id" :label="item.name" :value="item.id"></el-option> - </el-select> - </div> - <div style="padding-bottom: 10px"> - <el-button type="primary" @click="getUnitData">查询</el-button> - <el-button plain @click="reset">重置</el-button> - </div> - </el-row> - <div class="homeCard"> - <div class="main-card"> - <el-row class="cardTop"> - <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="openUnitDialog('新增', {})">新增</el-button> - <!-- <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button>--> - </el-col> -<!-- <el-button type="primary" :icon="Refresh" size="default" />--> - </el-row> - <el-table ref="multipleTableRef" :data="unitState.unitData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }"> - <el-table-column prop="riskCode" label="风险单元编号" show-overflow-tooltip/> - <el-table-column prop="riskName" label="风险单元名称" show-overflow-tooltip/> - <el-table-column prop="riskSourceType" label="风险源风险类型" show-overflow-tooltip> - <template #default="scope"> - <span>{{`${unitState.riskSourceTypeList.find(item =>item.id === scope.row.riskSourceType)?.name || ''}`}}</span> - </template> - </el-table-column> - <el-table-column prop="evaluateStatus" label="评价状态" show-overflow-tooltip> - <template #default="scope"> - <span>{{`${unitState.evaluateStatusList.find(item =>item.id === scope.row.evaluateStatus)?.name || ''}`}}</span> - </template> - </el-table-column> - <el-table-column prop="liabilityUserName" label="责任人" show-overflow-tooltip/> - <el-table-column prop="liabilityDep" label="责任部门" show-overflow-tooltip/> - <el-table-column prop="createTime" label="创建时间" show-overflow-tooltip></el-table-column> - <el-table-column prop="createByUserName" label="创建人" show-overflow-tooltip></el-table-column> - <el-table-column prop="updateTime" label="最后修改时间" show-overflow-tooltip></el-table-column> - <el-table-column prop="updateByUserName" label="最后修改人" show-overflow-tooltip></el-table-column> - <el-table-column label="操作" width="150"> - <template #default="scope"> - <el-button size="small" text type="primary" :icon="Edit" @click="openUnitDialog('修改', scope.row)">编辑</el-button> - <el-button size="small" text type="danger" :icon="Delete" @click="onDelUnit(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="unitState.searchQuery.pageIndex" background v-model:page-size="unitState.searchQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="unitState.total" class="page-position"> </el-pagination> - </div> - </div> - </div> - </div> - <unit-dialog ref="unitDialogRef" @refresh="getUnitData"></unit-dialog> - </div> -</template> - -<script setup lang="ts"> -import {defineAsyncComponent, onMounted, reactive, ref} from "vue"; -import {unitApi} from "/@/api/basic/unit"; -import {ElMessage, ElMessageBox} from "element-plus"; -import { Edit, View, Plus, Delete } from '@element-plus/icons-vue'; -import {roomApi} from "/@/api/basic/room"; -import {equipmentApi} from "/@/api/basic/equipement"; -import {personApi} from "/@/api/basic/person"; - -const UnitDialog = defineAsyncComponent(() => import('./components/unitDialog.vue')); - -const unitDialogRef = ref(); - -const unitState = reactive<UnitStateType>({ - unitData: [], - searchQuery: { - pageIndex: 1, - pageSize: 10, - riskCode: '', - riskName: '', - riskSourceType: null, - }, - total: 0, - riskSourceTypeList: [ - {id: 1, name: '区域、实验场所'}, - {id:2, name: '设施设备'}, - {id:3, name: '固定工艺节点'}, - ], - evaluateStatusList: [ - {id: 1, name: '未评价'}, - {id:2, name: '已评价'}, - ], - allRoomList: [], - allEquipmentList: [], - allPersonList: [], -}) - -const getUnitData = async () => { - let res = await unitApi().getUnitByList(unitState.searchQuery); - if(res.data.code === 100){ - unitState.unitData = res.data.data; - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } -}; - -const getRoomData = async () => { - let res = await roomApi().getAllRoom(); - if(res.data.code === 100){ - unitState.allRoomList = JSON.parse(JSON.stringify(res.data.data)); - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } -}; - -const getAllEquipmentList = async () => { - let res = await equipmentApi().getAllEquipment(); - if(res.data.code === 100){ - unitState.allEquipmentList = 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){ - unitState.allPersonList = JSON.parse(JSON.stringify(res.data.data)); - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }) - } -}; - -const openUnitDialog = (title: string, value: UnitType) => { - unitDialogRef.value.showUnitDialog(title, value, unitState.allEquipmentList, unitState.allRoomList, unitState.allPersonList); -}; - -const onDelUnit = (val: UnitType) => { - ElMessageBox.confirm(`此操作将永久删除该单元:“${val.riskName}”,是否继续?`, '提示', { - confirmButtonText: '确认', - cancelButtonText: '取消', - type: 'warning' - }) - .then(async () => { - let res = await unitApi().deleteUnitById({ id: val.id }); - if (res.data.code === 100) { - ElMessage({ - type: 'success', - duration: 2000, - message: '删除成功' - }); - await getUnitData(); - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - }) - .catch((error) => { - }); -} - -const onHandleSizeChange = (val: number) => { - unitState.searchQuery.pageSize = val; - getUnitData(); -}; - -const onHandleCurrentChange = (val: number) => { - unitState.searchQuery.pageIndex = val; - getUnitData(); -}; - -const reset = () => { - unitState.searchQuery = { - pageIndex: 1, - pageSize: 10, - riskCode: '', - riskName: '', - riskSourceType: null, - } -}; - -onMounted(() => { - getUnitData(); - getRoomData(); - getAllEquipmentList(); - getAllPersonList(); -}) - -</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); -} -</style> diff --git a/src/views/bigScreen/index.vue b/src/views/bigScreen/index.vue new file mode 100644 index 0000000..f7775c5 --- /dev/null +++ b/src/views/bigScreen/index.vue @@ -0,0 +1,39 @@ +<template> + <div class="system-role-container"> + 6666666 + </div> +</template> + +<script lang="ts"> +import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue'; + +// 定义接口来定义对象的类型 +interface TableData { + +} +interface TableDataState { + +} + +export default defineComponent({ + name: 'bigScreen', + components: { }, + setup() { + const roleDialogRef = ref(); + const state = reactive<TableDataState>({ + + }); + + // 页面加载时 + onMounted(() => { + + }); + return { + ...toRefs(state) + }; + } +}); +</script> +<style lang="scss" scoped> + +</style> \ No newline at end of file diff --git a/src/views/experiment/developing/components/applyDialog.vue b/src/views/experiment/developing/components/applyDialog.vue deleted file mode 100644 index 4f4b618..0000000 --- a/src/views/experiment/developing/components/applyDialog.vue +++ /dev/null @@ -1,98 +0,0 @@ -<template> - <div class="system-menu-dialog-container"> - <el-dialog :title="applyStartDialogState.title" v-model="applyStartDialogState.applyStartDialogVisible" width="600px"> - <el-form ref="applyStartFormRef" :rules="applyStartDialogState.applyStartFormRules" :model="applyStartDialogState.applyStartForm" size="default" label-width="160px"> - <el-row :gutter="35"> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="实验开始时间" prop="startTime"> - <el-date-picker type="datetime" format="YYYY/MM/DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" v-model="applyStartDialogState.applyStartForm.startTime" class="input-length"/> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="是否使用安全信息化系统" prop="sisStatus"> - <el-radio-group v-model="applyStartDialogState.applyStartForm.sisStatus"> - <el-radio :label="1">是</el-radio> - <el-radio :label="2">否</el-radio> - </el-radio-group> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="安全信息化系统" prop="safeInformationSystem"> - <el-input v-model="applyStartDialogState.applyStartForm.safeInformationSystem" placeholder="材料类型" class="input-length"> - </el-input> - </el-form-item> - </el-col> - </el-row> - </el-form> - <template #footer> - <span class="dialog-footer"> - <el-button @click="applyStartDialogState.applyStartDialogVisible = !applyStartDialogState.applyStartDialogVisible" size="default">取 消</el-button> - <el-button type="primary" @click="onSubmitApplyStart" size="default">确定</el-button> - </span> - </template> - </el-dialog> - </div> -</template> - -<script setup lang="ts"> -import { reactive, ref } from "vue"; -import {ElMessage} from "element-plus"; -import {projectApi} from "/@/api/experiment/project"; - -const applyStartFormRef = ref() - -const applyStartDialogState = reactive<ApplyStartDialogType>({ - title: '', - applyStartDialogVisible: false, - applyStartForm: { - id: null, - sisStatus: null, - safeInformationSystem: '', - startTime: '', - }, - applyStartFormRules: { - - }, -}) - -const showApplyStartDialog = (value: ProjectType) => { - applyStartDialogState.applyStartDialogVisible = true; - applyStartDialogState.applyStartForm.id = <number>value.id -}; - -const onSubmitApplyStart = () => { - applyStartFormRef.value.validate(async(valid: boolean) => { - if(valid){ - let res = await projectApi().applyProject([applyStartDialogState.applyStartForm]); - if(res.data.code === 100){ - emit('refresh') - applyStartDialogState.applyStartDialogVisible = false; - ElMessage({ - type: 'success', - message: '申请开展成功' - }) - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg, - }); - } - }else{ - ElMessage({ - type: 'warning', - message: '请完善基本信息', - }); - } - }) -}; - -const emit = defineEmits(['refresh']) - -defineExpose({ - showApplyStartDialog -}) -</script> - -<style scoped> - -</style> diff --git a/src/views/experiment/developing/components/applyStart.vue b/src/views/experiment/developing/components/applyStart.vue deleted file mode 100644 index 8906f6e..0000000 --- a/src/views/experiment/developing/components/applyStart.vue +++ /dev/null @@ -1,101 +0,0 @@ -<template> - <div class="system-menu-dialog-container"> - <el-dialog :title="applyStartDialogState.title" v-model="applyStartDialogState.applyStartDialogVisible" width="600px"> - <el-form ref="applyStartFormRef" :rules="applyStartDialogState.applyStartFormRules" :model="applyStartDialogState.applyStartForm" 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="stuffName"> - <el-date-picker type="datetime" format="YYYY/MM/DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" v-model="applyStartDialogState.applyStartForm.startTime" class="input-length"/> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="编号" prop="sisStatus"> - <el-radio-group v-model="applyStartDialogState.applyStartForm.sisStatus"> - <el-radio :label="1">是</el-radio> - <el-radio :label="2">否</el-radio> - </el-radio-group> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="材料类型" prop="stuffType"> - <el-select v-model="applyStartDialogState.applyStartForm.safeInformationSystem" placeholder="材料类型" class="input-length"> - </el-select> - </el-form-item> - </el-col> - </el-row> - </el-form> - <template #footer> - <span class="dialog-footer"> - <el-button @click="applyStartDialogState.applyStartDialogVisible = !applyStartDialogState.applyStartDialogVisible" size="default">取 消</el-button> - <el-button type="primary" @click="onSubmitApplyStart" size="default">确定</el-button> - </span> - </template> - </el-dialog> - </div> -</template> - -<script setup lang="ts"> -import { reactive, ref } from "vue"; -import {ElMessage} from "element-plus"; -import {projectApi} from "/@/api/experiment/project"; - -const applyStartFormRef = ref() - -const applyStartDialogState = reactive<ApplyStartDialogType>({ - title: '', - applyStartDialogVisible: false, - applyStartForm: { - id: null, - sisStatus: null, - safeInformationSystem: '', - startTime: '', - }, - applyStartFormRules: { - stuffCode: [{ required: true, message: '请填写实验材料', trigger: 'blur' }], - stuffName: [{ required: true, message: '请填写编号', trigger: 'blur' }], - stuffStorage: [{ required: true, message: '请选择材料类型', trigger: 'change' }], - stuffType: [{ required: true, message: '请选择材料储存', trigger: 'change' }], - stuffUnit: [{ required: true, message: '请选择计量单位', trigger: 'change' }] - }, -}) - -const showApplyStartDialog = (value: ProjectType) => { - applyStartDialogState.applyStartDialogVisible = true; -}; - -const onSubmitApplyStart = () => { - applyStartFormRef.value.validate(async(valid: boolean) => { - if(valid){ - let res = await projectApi().applyProject(applyStartDialogState.applyStartForm); - if(res.data.code === 100){ - emit('refresh') - applyStartDialogState.applyStartDialogVisible = false; - ElMessage({ - type: 'success', - message: '申请开展成功' - }) - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg, - }); - } - }else{ - ElMessage({ - type: 'warning', - message: '请完善基本信息', - }); - } - }) -}; - -const emit = defineEmits(['refresh']) - -defineExpose({ - showApplyStartDialog -}) -</script> - -<style scoped> - -</style> diff --git a/src/views/experiment/developing/components/developDialog.vue b/src/views/experiment/developing/components/developDialog.vue deleted file mode 100644 index 4e1689a..0000000 --- a/src/views/experiment/developing/components/developDialog.vue +++ /dev/null @@ -1,795 +0,0 @@ -<template> - <div class="system-menu-dialog-container"> - <el-dialog :title="projectDialogState.title" v-model="projectDialogState.projectDialogVisible" width="80%"> - <el-form ref="ProjectFormRef" :rules="projectDialogState.projectFormRules" :model="projectDialogState.projectForm" size="default" label-width="0"> - <table class="report-table"> - <th class="m-color b-font" style="text-align: center">***研究所/***大学<br />科学研究实验项目安全风险基础信息录入表(已开展)(带<span style="color: red">*</span>为必填项)</th> - <tr> - <td class="w-25 m-color required">实验名称</td> - <td class="w-75 m-color"> - <el-form-item prop="experimentName"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.experimentName" placeholder="请输入实验名称" /> - </el-form-item> - </td> - </tr> - <tr> - <td class="w-25 m-color required">实验类型</td> - <td class="w-75 m-color"> - <el-form-item prop="experimentType" style="display: flex;justify-content: center"> - <el-radio-group style="text-align: center" :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.experimentType"> - <el-radio :label="1">化学类</el-radio> - <el-radio :label="2">生物类</el-radio> - <el-radio :label="3">辐射类</el-radio> - <el-radio :label="4">机电类</el-radio> - <el-radio :label="5">特种设备类</el-radio> - <el-radio :label="6">其他类</el-radio> - </el-radio-group> - </el-form-item> - </td> - </tr> - <tr> - <td class="w-25 m-color required">部门</td> - <td class="w-75 m-color"> - <el-form-item prop="dep"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.dep" /> - </el-form-item> - </td> - </tr> - <tr> - <td class="w-25 m-color required">负责人</td> - <td class="w-25 m-color"> - <el-form-item prop="liabilityUserId"> -<!-- <el-select style="width: 100%" v-model="projectDialogState.projectForm.liabilityUserId" clearable filterable @change="getLiabilityUserPhone($event)">--> -<!-- <el-option--> -<!-- v-for="item in projectDialogState.systemPersonList"--> -<!-- :key="item.id"--> -<!-- :value="item.id"--> -<!-- :label="item.realName"--> -<!-- ></el-option>--> -<!-- </el-select>--> - <el-select style="width: 100%" disabled v-model="projectDialogState.projectForm.liabilityUserId" clearable filterable> - <el-option :key="userInfos.uid" :value="userInfos.uid" :label="userInfos.userName"></el-option> - </el-select> - </el-form-item> - <!-- <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.liabilityUserId"/>--> - </td> - <td class="w-25 m-color required">电话</td> - <td class="w-25 m-color"> - <el-form-item prop="liabilityUserPhone"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.liabilityUserPhone" /> - </el-form-item> - </td> - </tr> - <tr> - <td class="w-25 m-color required">安全负责人</td> - <td class="w-25 m-color"> -<!-- <el-select style="width: 100%" :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.safeLiabilityUser" @change="getSafeLiabilityUserPhone($event)" clearable filterable>--> -<!-- <el-option--> -<!-- v-for="item in projectDialogState.allPersonList"--> -<!-- :key="item.id"--> -<!-- :value="item.id"--> -<!-- :label="item.personName"--> -<!-- ></el-option>--> -<!-- </el-select>--> - <el-form-item prop="safeLiabilityUser"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.safeLiabilityUser"/> - </el-form-item> - </td> - <td class="w-25 m-color required">电话</td> - <td class="w-25 m-color"> - <el-form-item prop="safeLiabilityUserPhone"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.safeLiabilityUserPhone" /> - </el-form-item> - </td> - </tr> - <tr> - <td class="w-25 m-color required">立项时间</td> - <td class="w-25 m-color"> - <el-form-item prop="createExperimentTime"> - <el-date-picker :disabled="projectDialogState.disabled" type="datetime" format="YYYY/MM/DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" v-model="projectDialogState.projectForm.createExperimentTime" /> - </el-form-item> - </td> - <td class="w-25 m-color required">开展时间</td> - <td class="w-25 m-color"> - <el-form-item prop="startTime"> - <el-date-picker :disabled="projectDialogState.disabled" type="datetime" format="YYYY/MM/DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" v-model="projectDialogState.projectForm.startTime" /> - </el-form-item> - </td> - </tr> - <tr> - <td class="w-25 m-color required">是否是安全化信息系统</td> - <td class="w-25 m-color"> - <el-form-item prop="sisStatus"> - <el-radio-group :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.sisStatus" @change="hasSafeSystem"> - <el-radio :label="1">是</el-radio> - <el-radio :label="2">否</el-radio> - </el-radio-group> - </el-form-item> - </td> - <td class="w-25 m-color" v-if="projectDialogState.projectForm.sisStatus == 1" :class="projectDialogState.projectForm.sisStatus==1?'required':''">安全信息化系统</td> - <td class="w-25 m-color" v-if="projectDialogState.projectForm.sisStatus == 1"> - <el-form-item prop="safeInformationSystem"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.safeInformationSystem" /> - </el-form-item> - </td> - </tr> - <select-room ref="selectRoomRef" v-model:disabled="projectDialogState.disabled" v-model:data="projectDialogState.projectForm.siteList"></select-room> - <select-material ref="selectMaterialRef" v-model:disabled="projectDialogState.disabled" v-model:data="projectDialogState.projectForm.stuffList"></select-material> - <select-equipment ref="selectEquipmentRef" v-model:disabled="projectDialogState.disabled" v-model:data="projectDialogState.projectForm.deviceList"></select-equipment> - <tr> - <td class="w-25 m-color required">实验步骤</td> - <td class="w-75 m-color"> - <el-form-item prop="experimentStep"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.experimentStep" placeholder="请输入实验步骤" /> - </el-form-item> - </td> - </tr> - <tr> - <td class="w-25 m-color required">操作方法</td> - <td class="w-75 m-color"> - <el-form-item prop="experimentMethod"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.experimentMethod" placeholder="请输入操作方法" /> - </el-form-item> - </td> - </tr> - <tr> - <td class="w-25 m-color required">工艺过程</td> - <td class="w-75 m-color"> - <el-form-item prop="process"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.process" placeholder="请输入工艺过程" /> - </el-form-item> - </td> - </tr> - <tr> - <td class="w-25 m-color required">特殊/关键过程</td> - <td class="w-75 m-color"> - <el-form-item prop="keyProcess"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.keyProcess" placeholder="请输入特殊/关键过程" /> - </el-form-item> - </td> - </tr> - <tr> - <td class="w-25 m-color required">预防措施</td> - <td class="w-75 m-color"> - <el-form-item prop="measure"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.measure" placeholder="请输入预防措施" /> - </el-form-item> - </td> - </tr> - <tr> - <td class="w-25 m-color required">是否存在过夜、老化实验</td> - <td class="w-25 m-color"> - <el-form-item prop="timeout"> - <el-radio-group :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.timeout"> - <el-radio :label="1">存在</el-radio> - <el-radio :label="2">不存在</el-radio> - </el-radio-group> - </el-form-item> - </td> - <td class="w-25 m-color required" v-if="projectDialogState.projectForm.timeout === 1">过夜、老化保障措施</td> - <td class="w-25 m-color" v-if="projectDialogState.projectForm.timeout === 1"> - <el-form-item prop="timeoutManager"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.timeoutManager" /> - </el-form-item> - </td> - </tr> - <tr> - <td class="w-25 m-color required">是否在封闭条件下</td> - <td class="w-25 m-color"> - <el-form-item prop="closed"> - <el-radio-group :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.closed"> - <el-radio :label="1">存在</el-radio> - <el-radio :label="2">不存在</el-radio> - </el-radio-group> - </el-form-item> - </td> - <td class="w-25 m-color required" v-if="projectDialogState.projectForm.closed === 1">封闭条件保障措施</td> - <td class="w-25 m-color" v-if="projectDialogState.projectForm.closed === 1"> - <el-form-item prop="unclosedManager"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.unclosedManager" /> - </el-form-item> - </td> - </tr> - <tr> - <td class="w-25 m-color required">实验场所防爆措施条件和设施情况</td> - <td class="w-75 m-color"> - <el-form-item prop="explosionProof"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.explosionProof" placeholder="请输入" /> - </el-form-item> - </td> - </tr> - <tr> - <td class="w-25 m-color required">实验场所防火措施条件和设施情况</td> - <td class="w-75 m-color"> - <el-form-item prop="fireProof"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.fireProof" placeholder="请输入" /> - </el-form-item> - </td> - </tr> - <tr> - <td class="w-25 m-color required">实验场所防中毒措施条件和设施情况</td> - <td class="w-75 m-color"> - <el-form-item prop="poisonProof"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.poisonProof" placeholder="请输入" /> - </el-form-item> - </td> - </tr> - - - <select-danger ref="selectDangerRef" v-model:data="projectDialogState.projectForm.hazardousWasteList" v-model:disabled="projectDialogState.disabled"></select-danger> - <select-person ref="selectPersonRef" v-model:data="projectDialogState.projectForm.persons" v-model:disabled="projectDialogState.disabled"></select-person> -<!-- <tr class="m-color b-font" style="text-align: center">应急预案/应急演练</tr>--> -<!-- <tr>--> -<!-- <td class="w-25 m-color required">有无预案</td>--> -<!-- <td class="w-25 m-color required">预案名称</td>--> -<!-- <td class="w-25 m-color required">是否演练</td>--> -<!-- <td class="w-25 m-color required">演练情况</td>--> -<!-- </tr>--> -<!-- <tr>--> -<!-- <td class="w-25 m-color">--> -<!-- <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.emergencyPlan" />--> -<!-- </td>--> -<!-- <td class="w-25 m-color">--> -<!-- <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.emergencyPlanName" />--> -<!-- </td>--> -<!-- <td class="w-25 m-color">--> -<!-- <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.emergencyDrillStatus" />--> -<!-- </td>--> -<!-- <td class="w-25 m-color">--> -<!-- <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.emergencyDrill" />--> -<!-- </td>--> -<!-- </tr>--> - <select-emergency ref="selectEmergencyRef" v-model:disabled="projectDialogState.disabled" v-model:data="projectDialogState.projectForm.emergencyList"></select-emergency> - <tr> - <td class="w-25 m-color required">安全管理制度</td> - <td class="w-75 m-color"> - <el-form-item prop="safeManagerMethod"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.safeManagerMethod" placeholder="请输入" /> - </el-form-item> - </td> - </tr> - <tr class="m-color b-font" style=" text-align: center">其他信息</tr> - <tr> - <td class="w-25 m-color required">实验场所是否需要分区隔断</td> - <td class="w-75 m-color"> - <el-form-item prop="partitionCondition"> -<!-- <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.partitionCondition" placeholder="请输入" />--> - <el-radio-group :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.partitionCondition"> - <el-radio :label="0">是</el-radio> - <el-radio :label="1">否</el-radio> - </el-radio-group> - </el-form-item> - </td> - </tr> - <tr> - <td class="w-25 m-color">其它基础信息(详细描述)</td> - <td class="w-75 m-color"> - <el-form-item> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.note" placeholder="请输入" /> - </el-form-item> - </td> - </tr> - </table> - </el-form> - <template #footer> - <span class="dialog-footer" style="padding-top:10px;text-align: center !important;"> - <el-button @click="projectDialogState.projectDialogVisible = !projectDialogState.projectDialogVisible" size="default">取 消</el-button> - <el-button type="primary" v-if="!projectDialogState.disabled" @click="onSubmitProject" size="default">确定</el-button> - </span> - </template> - </el-dialog> - </div> -</template> - -<script setup lang="ts"> -import {defineAsyncComponent, nextTick, onMounted, reactive, ref} from "vue"; -import {ElMessage} from "element-plus"; -import {projectApi} from "/@/api/experiment/project"; -import {personApi} from "/@/api/basic/person"; -import {userApi} from "/@/api/systemManage/user"; - -import {useUserInfo} from "/@/stores/userInfo"; -import {storeToRefs} from "pinia"; -import {checkChineseName, verifyPhone} from "/@/utils/toolsValidate"; -const SelectEquipment = defineAsyncComponent(() => import('../../project/components/selectEquipment.vue')) -const SelectMaterial = defineAsyncComponent(() => import('../../project/components/selectMaterial.vue')) -const SelectDanger = defineAsyncComponent(() => import('../../project/components/selectDanger.vue')) -const SelectEmergency = defineAsyncComponent(() => import('../../project/components/selectEmergency.vue')) -const SelectPerson = defineAsyncComponent(() => import('../../project/components/selectPerson.vue')) -const SelectRoom = defineAsyncComponent(() => import('../../project/components/selectRoom.vue')) -const ProjectFormRef = ref() -const selectPersonRef = ref() -const selectEquipmentRef = ref() -const selectRoomRef = ref() -const selectMaterialRef = ref() -const selectDangerRef = ref() -const selectEmergencyRef = ref() -const userInfo = useUserInfo() -const { userInfos } = storeToRefs(userInfo) - -const projectDialogState = reactive<ProjectDialogType>({ - title: '', - disabled: false, - projectDialogVisible: false, - projectForm: { - id: null, - experimentName: "", - experimentType: null, - liabilityUserId: Number(userInfos.value.uid), - liabilityUserPhone: '', - safeLiabilityUser: '', - safeLiabilityUserPhone: '', - sisStatus: null, - safeInformationSystem: '', - dep: "", - experimentStep: "", - experimentMethod: "", - process: "", - keyProcess: "", - measure: "", - timeout: null, - timeoutManager: "", - closed: null, - unclosedManager: "", - explosionProof: "", - fireProof: "", - poisonProof: "", - safeManagerMethod: "", - emergencyList: [], - partitionCondition: null, - note: "", - createExperimentTime: '', - startTime: '', - persons: [ - ], - siteList: [], - deviceList: [ - ], - stuffList: [ - ], - hazardousWasteList: [ - ] - }, - projectFormRules: { - experimentName: [{ required: true, message: '', trigger: 'blur' }], - experimentType: [{ required: true, message: '', trigger: 'blur' }], - liabilityUserId: [{ required: true, message: '', trigger: 'blur' }], - liabilityUserPhone: [{ required: true, message: '', trigger: 'blur' }], - safeLiabilityUser: [{ required: true, message: '', trigger: 'blur' }], - safeLiabilityUserPhone: [{ required: true, message: '', trigger: 'blur' }], - sisStatus: [{ required: true, message: '', trigger: 'blur' }], - safeInformationSystem: [{ required: true, message: '', trigger: 'blur' }], - dep: [{ required: true, message: '', trigger: 'blur' }], - experimentStep: [{ required: true, message: '', trigger: 'blur' }], - experimentMethod: [{ required: true, message: '', trigger: 'blur' }], - process: [{ required: true, message: '', trigger: 'blur' }], - keyProcess: [{ required: true, message: '', trigger: 'blur' }], - measure: [{ required: true, message: '', trigger: 'blur' }], - timeout: [{ required: true, message: '', trigger: 'blur' }], - timeoutManager: [{ required: true, message: '', trigger: 'blur' }], - closed: [{ required: true, message: '', trigger: 'blur' }], - unclosedManager: [{ required: true, message: '', trigger: 'blur' }], - explosionProof: [{ required: true, message: '', trigger: 'blur' }], - fireProof: [{ required: true, message: '', trigger: 'blur' }], - poisonProof: [{ required: true, message: '', trigger: 'blur' }], - safeManagerMethod: [{ required: true, message: '', trigger: 'blur' }], - emergencyList: [{ required: true, message: '', trigger: 'blur' }], - partitionCondition: [{ required: true, message: '', trigger: 'blur' }], - createExperimentTime: [{ required: true, message: '', trigger: 'blur' }], - startTime: [{ required: true, message: '', trigger: 'blur' }] - }, - allPersonList: [], - allRoomList: [], - systemPersonList: [], -}) - -const showDevelopDialog = (title: string, value: ProjectType, allRoomList: RoomType []) => { - projectDialogState.projectDialogVisible = true; - projectDialogState.allRoomList = allRoomList - setTimeout(() => { - ProjectFormRef.value.clearValidate(); - }); - if(title === '新增'){ - projectDialogState.disabled = false - projectDialogState.title = '新增'; - projectDialogState.projectForm = { - id: null, - experimentName: "", - experimentType: null, - liabilityUserId: Number(userInfos.value.uid), - liabilityUserPhone: '', - safeLiabilityUser: '', - safeLiabilityUserPhone: '', - sisStatus: null, - safeInformationSystem: '', - dep: "", - experimentStep: "", - experimentMethod: "", - process: "", - keyProcess: "", - measure: "", - timeout: null, - timeoutManager: "", - closed: null, - unclosedManager: "", - explosionProof: "", - fireProof: "", - poisonProof: "", - safeManagerMethod: "", - emergencyList: [], - partitionCondition: null, - note: "", - createExperimentTime: '', - startTime: '', - persons: [], - siteList: [], - deviceList: [], - stuffList: [], - hazardousWasteList: [] - }; - }else if(title === '整改'){ - projectDialogState.title = '整改'; - projectDialogState.disabled = false - for(let i in projectDialogState.projectForm) { - if(isValidKey(i, projectDialogState.projectForm)) { - projectDialogState.projectForm[i] = value[i]; - } - } - }else{ - projectDialogState.title = '查看'; - projectDialogState.disabled = true - for(let i in projectDialogState.projectForm) { - if(isValidKey(i, projectDialogState.projectForm)) { - projectDialogState.projectForm[i] = value[i]; - } - } - } -}; - -const isValidKey = (key: string | number | symbol, object:object): key is keyof typeof object =>{ - return key in object; -}; - -const getLiabilityUserPhone = (value: number)=>{ - const data = projectDialogState.systemPersonList.find(item => item.id === value) as AllPersonListType - projectDialogState.projectForm.liabilityUserPhone = data.phone -} - -const getSafeLiabilityUserPhone = (value: number)=>{ - const data = projectDialogState.allPersonList.find(item => item.id === value) as AllPersonListType - projectDialogState.projectForm.safeLiabilityUserPhone = data.phone -} - -const hasSafeSystem = (value: number) =>{ - if(value == 2){ - projectDialogState.projectForm.safeInformationSystem = '' - } -} - -const onSubmitProject = async() => { - ProjectFormRef.value.validate(async(valid: boolean) => { - if(valid){ - if(projectDialogState.projectForm.timeout == 2){ - projectDialogState.projectForm.timeoutManager = '' - }else{ - if(projectDialogState.projectForm.timeoutManager == ''){ - ElMessage({ - type: 'warning', - message: '请填写过夜、老化保障措施', - duration: 1000 - }); - return - } - } - if(projectDialogState.projectForm.closed == 2){ - projectDialogState.projectForm.unclosedManager = "" - }else{ - if(projectDialogState.projectForm.unclosedManager == ''){ - ElMessage({ - type: 'warning', - message: '请填写封闭条件保障措施', - duration: 1000 - }); - return - } - } - if(projectDialogState.title === '新增'){ - if(checkChineseName(projectDialogState.projectForm.safeLiabilityUser) == false){ - ElMessage({ - type: 'warning', - message: '安全负责人姓名格式有误', - duration: 1000 - }); - return - } - if(verifyPhone(projectDialogState.projectForm.safeLiabilityUserPhone) == false || verifyPhone(projectDialogState.projectForm.liabilityUserPhone) == false){ - ElMessage({ - type: 'warning', - message: '请输入正确的手机号', - duration: 1000 - }); - return - } - if(projectDialogState.projectForm.siteList.length === 0){ - ElMessage({ - type: 'warning', - message: '请至少添加一处实验场所', - duration: 1000 - }); - return - } - if(projectDialogState.projectForm.stuffList.length === 0){ - ElMessage({ - type: 'warning', - message: '请至少选择一种试剂/材料', - duration: 1000 - }); - return - } - if(projectDialogState.projectForm.deviceList.length === 0){ - ElMessage({ - type: 'warning', - message: '请至少选择一种仪器/设备', - duration: 1000 - }); - return - } - if(projectDialogState.projectForm.persons.length === 0){ - ElMessage({ - type: 'warning', - message: '请至少添加一名实验人员', - duration: 1000 - }); - return - } - projectDialogState.projectForm.emergencyList = selectEmergencyRef.value.dataList - projectDialogState.projectForm.persons = selectPersonRef.value.dataList - projectDialogState.projectForm.hazardousWasteList = selectDangerRef.value.dataList - const roomList = selectRoomRef.value.dataList - projectDialogState.projectForm.siteList = roomList.map(({siteId}) => ({siteId})) - projectDialogState.projectForm.stuffList = selectMaterialRef.value.dataList - projectDialogState.projectForm.deviceList = selectEquipmentRef.value.dataList - let res = await projectApi().addDevelop(projectDialogState.projectForm); - if(res.data.code === 100){ - emit('refresh') - projectDialogState.projectDialogVisible = false; - ElMessage({ - type: 'success', - message: '新增成功' - }) - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg, - }); - } - }else{ - projectDialogState.projectForm.siteList = selectRoomRef.value.dataList.map(({siteId}) => ({siteId})) - projectDialogState.projectForm.hazardousWasteList = selectDangerRef.value.dataList.map(obj => ({classify:obj.classify,wasteStorage:obj.wasteStorage,handAmount:obj.handAmount})) - let res = await projectApi().modProject(projectDialogState.projectForm) - if(res.data.code === 100){ - emit('refresh') - projectDialogState.projectDialogVisible = false; - ElMessage({ - type: 'success', - message: '整改已提交' - }) - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg, - }); - } - } - }else{ - ElMessage({ - type: 'warning', - message: '请完善基本信息', - }); - } - }) -}; - -const getPersonList = async () => { - let res = await userApi().getUserList({ - pageIndex: 1, - pageSize: 99999, - searchParams:{ - roleId: null, - name: '', - realName: '' - } - }); - if(res.data.code === 100){ - projectDialogState.systemPersonList = JSON.parse(JSON.stringify(res.data.data)); - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }) - } -}; - -const getAllPersonList = async () => { - let res = await personApi().getAllPerson(); - if(res.data.code === 100){ - projectDialogState.allPersonList = JSON.parse(JSON.stringify(res.data.data)); - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }) - } -}; - -const emit = defineEmits(['refresh']); - -defineExpose({ - showDevelopDialog, -}); - -onMounted(() => { - getAllPersonList(); - getPersonList(); -}); -</script> - -<style scoped lang="scss"> -.site-layout-background { - background: #fff; -} - -.report-table { - width: 100%; - border-collapse: collapse; - border: 1px solid #337ecc; - margin: 20px 0; - -th { - padding: 10px 0; - border: 1px solid #337ecc; - border-left: none; -} - -tr { - width: 100%; - height: 44px; - line-height: 42px; - border-bottom: 1px solid #ccc; - -&:last-of-type { - border-bottom: none; - } - -td { - border-right: 1px solid #ccc; - display: inline-block; - height: 44px; - vertical-align: middle; - text-align: center; - line-height: 42px; - - :deep(.el-input__wrapper ){ - box-shadow: none; - margin-top: 6px; - } - -&:last-of-type { - border-right: none; - } - -&.required { - &::before { - content: "*"; - display: inline-block; - color: red; - } -} - -&.w-14 { - width: calc((100/7)/100 * 100%); - } - -&.w-16 { - width: calc((100/6)/100 * 100%); - } - -&.w-18 { - width: 16.59%; - } - -&.w-20 { - width: 20%; - } - -&.w-25 { - width: 25%; - } - -&.w-50 { - width: 50%; - } - -&.w-75 { - width: 75%; - } - -.ant-input { - height: 100%; - border: none; - background: #f5f7fa; -} - -.ant-picker { - width: 100%; - height: 100%; -} -} -} - -.b-font { - font-size: 16px; - font-weight: bolder; -} -} - -.m-color { - color: #0c4995; -} -::v-deep(.el-form-item){ - height: 100%; - display: flex; - justify-content: center; - .el-form-item__content{ - display: flex; - justify-content: center; - } -} -.roomSelect{ - ::v-deep(.el-popper){ - .el-select-dropdown__item{ - height: auto; - padding: 0; - - .roomTable{ - width: 100%; - display: flex; - border-bottom: 1px solid #ebeef5; - - &:last-of-type{ - border-bottom: none; - } - - &>div{ - width: 25%; - border-right: 1px dashed #ebeef5; - &:last-of-type{ - border-right: none; - } - - div{ - width: 100%; - } - .roomTit{ - border-bottom: 1px solid #ebeef5; - } - } - } - } - .el-select-dropdown__item.selected{ - .roomTit{ - color: #606266; - font-weight: normal; - } - } - } -} - -:deep(.el-dialog__footer){ - padding-top: 20px; - display: flex; - justify-content: center; -} - - -</style> diff --git a/src/views/experiment/developing/components/selectDanger.vue b/src/views/experiment/developing/components/selectDanger.vue deleted file mode 100644 index 8ef010c..0000000 --- a/src/views/experiment/developing/components/selectDanger.vue +++ /dev/null @@ -1,184 +0,0 @@ -<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> - </tr> - <tr v-for="(item,index) in selectDangerState.wasteList" :key="index"> - <td class="w-20"> - {{ index + 1 }} - </td> - <td class="w-20"> - <el-select :disabled="selectDangerState.disabled" v-model="item.classify" clearable filterable> - <el-option v-for="item in selectDangerState.classifyList" :key="item.id" :label="item.name" :value="item.id"></el-option> - </el-select> - </td> - <td class="w-20"> - <el-select :disabled="selectDangerState.disabled" v-model="item.wasteStorage" clearable filterable> - <el-option v-for="item in selectDangerState.wasteStorageList" :key="item.id" :label="item.name" :value="item.id"></el-option> - </el-select> - </td> - <td class="w-20"> - <el-input type="number" v-model="item.handAmount"></el-input> - </td> - <td class="w-20"> - <el-button :disabled="selectDangerState.disabled" type="danger" @click="deleteDangerItem(index)">删除</el-button> - </td> - </tr> - <tr style="text-align: center"> - <el-button :disabled="selectDangerState.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<WasteType> -}); - -const selectDangerState = reactive<SelectDangerType>({ - disabled: false, - wasteList: [ - ], - 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(() => { - selectDangerState.wasteList = props.data as Array<WasteType> - selectDangerState.disabled = props.disabled -}); - -const addDangerItem = () => { - selectDangerState.wasteList.push({classify: null, wasteStorage: null, handAmount: null,}); -}; - -const deleteDangerItem = (index: number) => { - selectDangerState.wasteList.splice(index,1); -}; - -const formatList = (formatList: Array<WasteType>) => { - selectDangerState.wasteList = formatList -} - -defineExpose({ - formatList, - dataList: selectDangerState.wasteList, -}); - -</script> - -<style scoped lang="scss"> -.site-layout-background { - background: #fff; -} - -.report-table { - width: 100%; - border-collapse: collapse; - border: 1px solid #337ecc; - margin: 20px 0; - - th { - padding: 10px 0; - border: 1px solid #337ecc; - border-left: none; - } - - tr { - width: 100%; - height: 44px; - line-height: 42px; - border-bottom: 1px solid #ccc; - - &:last-of-type { - border-bottom: none; - } - - td { - border-right: 1px solid #ccc; - display: inline-block; - height: 44px; - vertical-align: middle; - text-align: center; - line-height: 42px; - - &:last-of-type { - border-right: none; - } - - &.w-14 { - width: calc((100/7)/100 * 100%); - } - - &.w-16 { - width: calc((100/6)/100 * 100%); - } - - &.w-18 { - width: 16.59%; - } - - &.w-20 { - width: 20%; - } - - &.w-25 { - width: 25%; - } - - &.w-50 { - width: 50%; - } - - &.w-75 { - width: 75%; - } - - .ant-input { - height: 100%; - border: none; - background: #f5f7fa; - } - - .ant-picker { - width: 100%; - height: 100%; - } - } - } - - .b-font { - font-size: 16px; - font-weight: bolder; - } -} - -.m-color { - color: #0c4995; -} -:deep(.el-input__wrapper ){ - box-shadow: none; -} -</style> diff --git a/src/views/experiment/developing/components/selectEquipment.vue b/src/views/experiment/developing/components/selectEquipment.vue deleted file mode 100644 index fb9db03..0000000 --- a/src/views/experiment/developing/components/selectEquipment.vue +++ /dev/null @@ -1,208 +0,0 @@ -<template> - <tr class="m-color b-font" style="text-align: center">实验所用的仪器/设备</tr> - <tr> - <td class="w-16 m-color">设备名称</td> - <td class="w-16 m-color">编号</td> - <td class="w-16 m-color">额定功率</td> - <td class="w-16 m-color">是否特种</td> - <td class="w-16 m-color">设备数量</td> - <td class="w-16 m-color">操作</td> - </tr> - <tr v-for="(item,index) in selectEquipmentState.equipmentList" :key="index"> - <td class="w-16"> - <el-select :disabled="selectEquipmentState.disabled" filterable v-model="item.deviceId" @change="giveOtherEquipmentValue($event, index)"> - <el-option - v-for="item in selectEquipmentState.allEquipmentList" - :key="item.id" - :value="item.id" - :label="item.deviceName" - > - </el-option> - </el-select> - </td> - <td class="w-16"> - <el-input :disabled="selectEquipmentState.disabled" v-model="item.deviceCode" placeholder="请输入数量" /> - </td> - <td class="w-16"> - <el-input :disabled="selectEquipmentState.disabled" v-model="item.devicePower" /> - </td> - <td class="w-16"> - <el-radio-group :disabled="selectEquipmentState.disabled" v-model="item.specialDevice"> - <el-radio :label="1">是</el-radio> - <el-radio :label="2">否</el-radio> - </el-radio-group> - </td> - <td class="w-16"> - <el-input type="number" v-model="item.deviceUseCount" /> - </td> - <td class="w-16"> - <el-button :disabled="selectEquipmentState.disabled" type="danger" @click="deleteEquipmentItem(index)">删除</el-button> - </td> - </tr> - <tr style="text-align: center"> - <el-button :disabled="selectEquipmentState.disabled" type="primary" shape="round" @click="addEquipmentItem()"> - 选择实验仪器 - </el-button> - </tr> -</template> - -<script setup lang="ts"> -import {onMounted, reactive, watchEffect} from "vue"; -import {ElMessage} from "element-plus"; -import { equipmentApi } from "/@/api/basic/equipement"; - -let props = defineProps({ - disabled: Boolean, - data: Array<AllEquipmentListType> -}); - -const selectEquipmentState = reactive<SelectEquipmentType>({ - disabled: false, - equipmentList: [], - allEquipmentList: [], -}); - -watchEffect(() => { - selectEquipmentState.equipmentList = props.data as Array<AllEquipmentListType> - selectEquipmentState.disabled = props.disabled -}); - -const addEquipmentItem = () => { - selectEquipmentState.equipmentList.push({deviceId: null, deviceUseCount: null, deviceCode: '', deviceName: '', devicePower: '', specialDevice: '',}); -}; - -const deleteEquipmentItem = (index: number) => { - selectEquipmentState.equipmentList.splice(index,1); -}; - -const getAllEquipmentList = async () => { - let res = await equipmentApi().getAllEquipment(); - if(res.data.code === 100){ - selectEquipmentState.allEquipmentList = JSON.parse(JSON.stringify(res.data.data)); - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }) - } -}; - -const giveOtherEquipmentValue = (value: number, index:number) => { - const data = selectEquipmentState.allEquipmentList.find(item => item.id === value) as AllEquipmentListType - selectEquipmentState.equipmentList[index] = { - deviceId: data.id, - deviceUseCount: null, - deviceCode: data.deviceCode, - deviceName: data.deviceName, - devicePower: data.devicePower, - specialDevice: data.specialDevice - } -}; - -const formatList = (formatList: Array<AllEquipmentListType>) => { - selectEquipmentState.equipmentList = formatList -} - -defineExpose({ - dataList: selectEquipmentState.equipmentList, - formatList -}); - -onMounted(() => { - getAllEquipmentList(); -}); -</script> - -<style scoped lang="scss"> -.site-layout-background { - background: #fff; -} - -.report-table { - width: 100%; - border-collapse: collapse; - border: 1px solid #337ecc; - margin: 20px 0; - - th { - padding: 10px 0; - border: 1px solid #337ecc; - border-left: none; - } - - tr { - width: 100%; - height: 44px; - line-height: 42px; - border-bottom: 1px solid #ccc; - - &:last-of-type { - border-bottom: none; - } - - td { - border-right: 1px solid #ccc; - display: inline-block; - height: 44px; - vertical-align: middle; - text-align: center; - line-height: 42px; - - &:last-of-type { - border-right: none; - } - - &.w-14 { - width: calc((100/7)/100 * 100%); - } - - &.w-16 { - width: calc((100/6)/100 * 100%); - } - - &.w-18 { - width: 16.59%; - } - - &.w-20 { - width: 20%; - } - - &.w-25 { - width: 25%; - } - - &.w-50 { - width: 50%; - } - - &.w-75 { - width: 75%; - } - - .ant-input { - height: 100%; - border: none; - background: #f5f7fa; - } - - .ant-picker { - width: 100%; - height: 100%; - } - } - } - - .b-font { - font-size: 16px; - font-weight: bolder; - } -} - -.m-color { - color: #0c4995; -} -:deep(.el-input__wrapper ){ - box-shadow: none; -} -</style> diff --git a/src/views/experiment/developing/components/selectMaterial.vue b/src/views/experiment/developing/components/selectMaterial.vue deleted file mode 100644 index bb29d5f..0000000 --- a/src/views/experiment/developing/components/selectMaterial.vue +++ /dev/null @@ -1,210 +0,0 @@ -<template> - <tr class="m-color b-font" style="text-align: center">实验所用的试剂或材料</tr> - <tr> - <td class="w-14 m-color">实验材料</td> - <td class="w-14 m-color">耗材ID</td> - <td class="w-14 m-color">材料类型</td> - <td class="w-14 m-color">材料储存</td> - <td class="w-14 m-color">计量单位</td> - <td class="w-14 m-color">使用数量</td> - <td class="w-14 m-color">操作</td> - </tr> - <tr v-for="(item,index) in selectMaterialState.materialList" :key="index"> - <td class="w-14"> - <el-select :disabled="selectMaterialState.disabled" filterable v-model="item.stuffId" @change="giveOtherMaterialValue($event, index)"> - <el-option - v-for="item in selectMaterialState.allMaterialList" - :key="item.id" - :value="item.id" - :label="item.stuffName" - > - </el-option> - </el-select> - </td> - <td class="w-14"> - <el-input :disabled="selectMaterialState.disabled" v-model="item.stuffCode" /> - </td> - <td class="w-14"> - <el-input :disabled="selectMaterialState.disabled" v-model="item.stuffType" /> - </td> - <td class="w-14"> - <el-input :disabled="selectMaterialState.disabled" v-model="item.stuffStorage" /> - </td> - <td class="w-14"> - <el-input :disabled="selectMaterialState.disabled" v-model="item.stuffUnit" /> - </td> - <td class="w-14"> - <el-input type="number" v-model="item.stuffUseCount" /> - </td> - <td class="w-14"> - <el-button type="danger" :disabled="selectMaterialState.disabled" @click="deleteMaterialItem(index)">删除</el-button> - </td> - </tr> - <tr style="text-align: center"> - <el-button :disabled="selectMaterialState.disabled" type="primary" shape="round" @click="addMaterialItem()"> - 选择实验材料 - </el-button> - </tr> -</template> - -<script setup lang="ts"> -import {onMounted, reactive, watchEffect} from "vue"; -import { materialApi } from "/@/api/basic/material"; -import {ElMessage} from "element-plus"; -let props = defineProps({ - disabled: Boolean, - data: Array<AllMaterialListType> -}); - -const selectMaterialState = reactive<SelectMaterialType>({ - disabled: false, - materialList: [], - allMaterialList: [], -}) - -const addMaterialItem = () => { - selectMaterialState.materialList.push({stuffId: null, stuffUseCount: null, stuffName: '',stuffCode:'',stuffType: '', stuffStorage: '', stuffUnit: ''}); -}; - -watchEffect(() => { - selectMaterialState.materialList = props.data as Array<AllMaterialListType> - selectMaterialState.disabled = props.disabled -}); - -const deleteMaterialItem = (index: number) => { - selectMaterialState.materialList.splice(index,1); -}; - -const getAllPersonList = async () => { - let res = await materialApi().getAllMaterial(); - if(res.data.code === 100){ - selectMaterialState.allMaterialList = JSON.parse(JSON.stringify(res.data.data)); - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }) - } -}; - -const giveOtherMaterialValue = (value: number, index:number) => { - const data = selectMaterialState.allMaterialList.find(item => item.id === value) as AllMaterialListType - selectMaterialState.materialList[index] = { - stuffId: data.id, - stuffUseCount: data.stuffUseCount, - stuffName: data.stuffName, - stuffCode: data.stuffCode, - stuffType: data.stuffType, - stuffStorage: data.stuffStorage, - stuffUnit: data.stuffUnit - }; -}; - -const formatList = (formatList: Array<AllMaterialListType>) => { - selectMaterialState.materialList = formatList -}; - -defineExpose({ - dataList: selectMaterialState.materialList, - formatList -}); - - -onMounted(() => { - getAllPersonList(); -}); -</script> - -<style scoped lang="scss"> -.site-layout-background { - background: #fff; -} - -.report-table { - width: 100%; - border-collapse: collapse; - border: 1px solid #337ecc; - margin: 20px 0; - - th { - padding: 10px 0; - border: 1px solid #337ecc; - border-left: none; - } - - tr { - width: 100%; - height: 44px; - line-height: 42px; - border-bottom: 1px solid #ccc; - - &:last-of-type { - border-bottom: none; - } - - td { - border-right: 1px solid #ccc; - display: inline-block; - height: 44px; - vertical-align: middle; - text-align: center; - line-height: 42px; - - &:last-of-type { - border-right: none; - } - - &.w-14 { - width: calc((100/7)/100 * 100%); - } - - &.w-16 { - width: calc((100/6)/100 * 100%); - } - - &.w-18 { - width: 16.59%; - } - - &.w-20 { - width: 20%; - } - - &.w-25 { - width: 25%; - } - - &.w-50 { - width: 50%; - } - - &.w-75 { - width: 75%; - } - - .ant-input { - height: 100%; - border: none; - background: #f5f7fa; - } - - .ant-picker { - width: 100%; - height: 100%; - } - } - } - - .b-font { - font-size: 16px; - font-weight: bolder; - } -} - -.m-color { - color: #0c4995; -} -:deep(.el-input__wrapper ){ - box-shadow: none; -} -</style> diff --git a/src/views/experiment/developing/components/selectPerson.vue b/src/views/experiment/developing/components/selectPerson.vue deleted file mode 100644 index e0359b8..0000000 --- a/src/views/experiment/developing/components/selectPerson.vue +++ /dev/null @@ -1,218 +0,0 @@ -<template> - <tr class="m-color b-font" style="text-align: center">实验人员</tr> - <tr> - <td class="w-14 m-color">姓名</td> - <td class="w-14 m-color">年龄</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 selectPersonState.personList" :key="index"> - <td class="w-14"> - <el-select filterable :disabled="selectPersonState.disabled" v-model="item.personId" @change="giveOtherPersonValue($event, index)"> - <el-option - v-for="item in selectPersonState.allPersonList" - :key="item.id" - :value="item.id" - :label="item.personName" - > - </el-option> - </el-select> - </td> - <td class="w-14"> - <el-input :disabled="selectPersonState.disabled" v-model="item.personAge" /> - </td> - <td class="w-14"> - <el-input :disabled="selectPersonState.disabled" v-model="item.personGender" /> - </td> - <td class="w-14"> - <el-input :disabled="selectPersonState.disabled" v-model="item.personMajor" /> - </td> - <td class="w-14"> - <el-input :disabled="selectPersonState.disabled" v-model="item.depName" /> - </td> - <td class="w-14"> - <el-input :disabled="selectPersonState.disabled" v-model="item.aptitude" /> - </td> - <td class="w-14"> - <el-button type="danger" :disabled="selectPersonState.disabled" @click="deletePersonItem(index)">删除</el-button> - </td> - </tr> - <tr style="text-align: center"> - <el-button :disabled="selectPersonState.disabled" type="primary" shape="round" @click="addPersonItem()"> - 选择实验人员 - </el-button> - </tr> -</template> - -<script setup lang="ts"> -import {nextTick, onMounted, reactive, watchEffect} from "vue"; -import { personApi } from "/@/api/basic/person"; -import {ElMessage} from "element-plus"; - -let props = defineProps({ - disabled: Boolean, - data: Array<AllPersonListType> - -}); - -const selectPersonState = reactive<SelectPersonType>({ - disabled: false, - personList: [], - allPersonList: [ - ], -}); - -watchEffect(() => { - selectPersonState.personList = props.data as Array<AllPersonListType> - selectPersonState.disabled = props.disabled -}); - -const addPersonItem = () => { - selectPersonState.personList.push({personId: null, personName: null, personAge: null, personGender:'',personMajor:'',depName:'',phone:'',aptitude:'',training:''}); -}; - -const deletePersonItem = (index: number) => { - selectPersonState.personList.splice(index,1); -}; - -const getAllPersonList = async () => { - let res = await personApi().getAllPerson(); - if(res.data.code === 100){ - selectPersonState.allPersonList = JSON.parse(JSON.stringify(res.data.data)); - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }) - } -}; - -const giveOtherPersonValue = (value: number, index:number) => { - // selectPersonState.personList[index] = selectPersonState.allPersonList.find(item => item.id === value) as AllPersonListType - const data = selectPersonState.allPersonList.find(item => item.id === value) as AllPersonListType - selectPersonState.personList[index] = { - personId: data.id, - personName: data.personName, - personAge: data.personAge, - personGender: data.personGender, - personMajor: data.personMajor, - depName: data.depName, - phone: data.phone, - aptitude: data.aptitude, - training: data.training, - }; -}; - -const formatList = (formatList: Array<AllPersonListType>) => { - nextTick(() => { - selectPersonState.personList = formatList - }) - -}; - -defineExpose({ - formatList, - dataList: selectPersonState.personList, -}); - -onMounted(() => { - getAllPersonList(); -}); -</script> - -<style scoped lang="scss"> -.site-layout-background { - background: #fff; -} - -.report-table { - width: 100%; - border-collapse: collapse; - border: 1px solid #337ecc; - margin: 20px 0; - - th { - padding: 10px 0; - border: 1px solid #337ecc; - border-left: none; - } - - tr { - width: 100%; - height: 44px; - line-height: 42px; - border-bottom: 1px solid #ccc; - - &:last-of-type { - border-bottom: none; - } - - td { - border-right: 1px solid #ccc; - display: inline-block; - height: 44px; - vertical-align: middle; - text-align: center; - line-height: 42px; - - &:last-of-type { - border-right: none; - } - - &.w-14 { - width: calc((100/7)/100 * 100%); - } - - &.w-16 { - width: calc((100/6)/100 * 100%); - } - - &.w-18 { - width: 16.59%; - } - - &.w-20 { - width: 20%; - } - - &.w-25 { - width: 25%; - } - - &.w-50 { - width: 50%; - } - - &.w-75 { - width: 75%; - } - - .ant-input { - height: 100%; - border: none; - background: #f5f7fa; - } - - .ant-picker { - width: 100%; - height: 100%; - } - } - } - - .b-font { - font-size: 16px; - font-weight: bolder; - } -} - -.m-color { - color: #0c4995; -} -:deep(.el-input__wrapper ){ - box-shadow: none; -} -</style> diff --git a/src/views/experiment/developing/index.vue b/src/views/experiment/developing/index.vue deleted file mode 100644 index a88ac4b..0000000 --- a/src/views/experiment/developing/index.vue +++ /dev/null @@ -1,424 +0,0 @@ -<template> - <div class="home-container"> - <div style="height: 100%"> - <el-row class="homeCard"> - <div class="basic-line"> - <span>实验名称:</span> - <el-input v-model="developState.searchQuery.searchParams.experimentName" clearable filterable class="input-box" placeholder="实验名称"> - </el-input> - </div> - <div class="basic-line"> - <span>实验类型:</span> - <el-select v-model="developState.searchQuery.searchParams.experimentType" clearable filterable class="input-box" placeholder="实验类型"> - <el-option v-for="item in developState.experimentTypeList" :key="item.id" :label="item.name" :value="item.id"></el-option> - </el-select> - </div> - <div style="padding-bottom: 10px"> - <el-button type="primary" @click="getdevelopData">查询</el-button> - <el-button plain @click="reset">重置</el-button> - </div> - </el-row> - <div class="homeCard"> - <div class="main-card"> - <el-row class="cardTop"> - <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="openProjectDialog('新增', {})">录入实验信息</el-button> - <!-- <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button>--> - </el-col> -<!-- <el-button type="primary" :icon="Refresh" size="default" />--> - </el-row> - <el-table ref="multipleTableRef" :data="developState.developData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }"> - <el-table-column prop="experimentCode" label="实验编号"/> - <el-table-column prop="experimentName" label="实验名称"/> - <el-table-column prop="createExperimentTime" label="立项时间"> - <template #default="scope"> - <span>{{scope.row.createExperimentTime?scope.row.createExperimentTime.substring(0,16):'--'}}</span> - </template> - </el-table-column> - <el-table-column prop="startTime" label="开展时间" show-overflow-tooltip> - <template #default="scope"> - <span>{{scope.row.startTime?scope.row.startTime.substring(0,16):'--'}}</span> - </template> - </el-table-column> - <el-table-column prop="liabilityUser" label="负责人"/> - <el-table-column prop="siteList" label="实验场所" show-overflow-tooltip> - <template #default="scope"> - <span>{{scope.row.siteList.map(i=>i.siteName).join(',')}}</span> - </template> - </el-table-column> - <el-table-column prop="experimentType" label="实验类别"> - <template #default="scope"> - <span>{{developState.experimentTypeList.find(i=>i.id == scope.row.experimentType)?.name}}</span> - </template> - </el-table-column> - <el-table-column prop="status" label="评估申请"> - <template #default="scope"> - <span>{{scope.row.status == 1?'未申请':scope.row.status == 2?'已申请':'--'}}</span> - </template> - </el-table-column> - <el-table-column prop="status" label="评估申请时间" show-overflow-tooltip> - <template #default="scope"> - <span>{{scope.row.assessApplyTime?scope.row.assessApplyTime.substring(0,16):'--'}}</span> - </template> - </el-table-column> - <el-table-column prop="stage" label="评估状态"> - <template #default="scope"> - <el-tag :type="scope.row.stage == 4?'success':scope.row.stage == 1?'info':''"> - {{scope.row.stage == 1?'未评估':scope.row.stage == 2?'评估中':scope.row.stage == 3?'评估完成':scope.row.stage == 4?'生成报告':'--'}} - </el-tag> - </template> - </el-table-column> - <el-table-column prop="assessLevel" label="风险等级"> - <template #default="scope"> - <el-tag :type="scope.row.assessLevel == 4?'danger':scope.row.assessLevel == 3 || scope.row.assessLevel == 2?'warning':''"> - {{scope.row.assessLevel == 1?'重大风险':scope.row.assessLevel == 2?'较大风险':scope.row.assessLevel == 3?'一般风险':scope.row.assessLevel == 4?'低风险':'--'}} - </el-tag> - </template> - </el-table-column> -<!-- <el-table-column prop="createTime" label="创建时间" show-overflow-tooltip></el-table-column>--> -<!-- <el-table-column prop="createByUserName" label="创建人" show-overflow-tooltip></el-table-column>--> -<!-- <el-table-column prop="updateTime" label="最后修改时间" show-overflow-tooltip></el-table-column>--> -<!-- <el-table-column prop="updateByUserName" label="最后修改人" show-overflow-tooltip></el-table-column>--> - <el-table-column label="操作" width="250" fixed="right"> - <template #default="scope"> - <el-button size="small" text type="primary" :icon="View" @click="openProjectDialog('查看', scope.row)">查看</el-button> - <el-button size="small" text type="primary" :icon="View" v-if="scope.row.stage == 4" @click="openReportDialog('查看',scope.row)">查看评估报告</el-button> - <el-button size="small" :disabled="scope.row.status == 2 ? true : false" text type="primary" :icon="Edit" @click="applyAccess( scope.row)">申请评估</el-button> - <el-button size="small" :disabled="(scope.row.status == 2 && scope.row.stage == 1) ? false : true" text type="warning" :icon="RefreshLeft" @click="cancelAccess( scope.row)">撤销评估</el-button> - <el-button size="small" type="warning" v-if="scope.row.rectifyStatus == 1" text :icon="Edit" @click="openProjectDialog('整改', scope.row)">整改</el-button> - </template> - </el-table-column> - </el-table> - <div class="pageBtn"> - <el-pagination @size-change="onHandleSizeChange" @current-change="onHandleCurrentChange" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="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> - <develop-dialog ref="DevelopDialogRef" @refresh="getdevelopData"></develop-dialog> -<!-- <apply-start ref="ApplyStartRef"></apply-start>--> - <test ref="ApplyStartRef" @refresh="getdevelopData"></test> - <report-dialog ref="ReportDialogRef"></report-dialog> - </div> -</template> - -<script setup lang="ts"> -import {defineAsyncComponent, onMounted, reactive, ref} from "vue"; -import {projectApi} from "/@/api/experiment/project"; -import {ElMessage, ElMessageBox} from "element-plus"; -import { View,Edit, Plus, RefreshLeft } from '@element-plus/icons-vue'; -import {roomApi} from "/@/api/basic/room"; -const ReportDialog = defineAsyncComponent(() => import('../../analyse/assessApply/components/reportDialog.vue')); -const DevelopDialog = defineAsyncComponent(() => import('./components/developDialog.vue')); -const Test = defineAsyncComponent(() => import('./components/applyDialog.vue')) - -const DevelopDialogRef = ref() -const ApplyStartRef = ref() -const ReportDialogRef = ref() -const developState = reactive<ProjectStateType>({ - developData: [], - searchQuery: { - pageIndex: 1, - pageSize: 10, - searchParams: { - experimentName: '', - experimentType: null, - } - }, - total: 0, - experimentTypeList: [ - {id: 1, name: '化学类'}, - {id: 2, name: '生物类'}, - {id: 3, name: '辐射类'}, - {id: 4, name: '机电类'}, - {id: 5, name: '特种设备类'}, - {id: 6, name: '其它类'}, - ], - allRoomList: [] -}) - -const getdevelopData = async () => { - let res = await projectApi().getDevelopByList(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 openProjectDialog = (title: string, value: ProjectType) => { - DevelopDialogRef.value.showDevelopDialog(title, value, developState.allRoomList); -}; - -const openReportDialog = (title: string,value: ProjectType) =>{ - ReportDialogRef.value.showReportDialog(title, value, developState.allRoomList); -} - -const applyAccess = (val: ProjectType) => { - ElMessageBox.confirm(`此操作将申请评估该实验:“${val.experimentName}”,是否继续?`, '提示', { - confirmButtonText: '确认', - cancelButtonText: '取消', - type: 'warning' - }) - .then(async () => { - let res = await projectApi().accessProject([val.id]); - if (res.data.code === 100) { - ElMessage({ - type: 'success', - duration: 2000, - message: '申请成功' - }); - await getdevelopData(); - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - }) - .catch((error) => { - }); -} - -const cancelAccess = (val: ProjectType) => { - ElMessageBox.confirm(`此操作将撤销评估该实验:“${val.experimentName}”,是否继续?`, '提示', { - confirmButtonText: '确认', - cancelButtonText: '取消', - type: 'warning' - }) - .then(async () => { - let res = await projectApi().cancelProject([val.id]); - if (res.data.code === 100) { - ElMessage({ - type: 'success', - duration: 2000, - message: '撤销成功' - }); - await getdevelopData(); - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - }) - .catch((error) => { - }); -} - -const onDelProject = (val: ProjectType) => { - ElMessageBox.confirm(`此操作将永久删除该实验:“${val.experimentCode}”,是否继续?`, '提示', { - confirmButtonText: '确认', - cancelButtonText: '取消', - type: 'warning' - }) - .then(async () => { - debugger - let res = await projectApi().deleteProjectById({ id: val.id }); - if (res.data.code === 100) { - ElMessage({ - type: 'success', - duration: 2000, - message: '删除成功' - }); - await getdevelopData(); - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - }) - .catch((error) => { - }); -} - -const onHandleSizeChange = (val: number) => { - developState.searchQuery.pageSize = val; - getdevelopData(); -}; - -const onHandleCurrentChange = (val: number) => { - developState.searchQuery.pageIndex = val; - getdevelopData(); -}; - -const reset = () => { - developState.searchQuery = { - pageIndex: 1, - pageSize: 10, - searchParams: { - experimentName: '', - experimentType: null, - } - } -}; - -const getRoomData = 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 - }); - } -}; - -onMounted(() => { - getdevelopData(); - getRoomData(); -}) - -</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/experiment/project/components/applyDialog.vue b/src/views/experiment/project/components/applyDialog.vue deleted file mode 100644 index 404c391..0000000 --- a/src/views/experiment/project/components/applyDialog.vue +++ /dev/null @@ -1,107 +0,0 @@ -<template> - <div class="system-menu-dialog-container"> - <el-dialog :title="applyStartDialogState.title" v-model="applyStartDialogState.applyStartDialogVisible" width="600px"> - <el-form ref="applyStartFormRef" :rules="applyStartDialogState.applyStartFormRules" :model="applyStartDialogState.applyStartForm" size="default" label-width="160px"> - <el-row :gutter="35"> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="实验开始时间" prop="startTime"> - <el-date-picker type="datetime" format="YYYY/MM/DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" v-model="applyStartDialogState.applyStartForm.startTime" class="input-length"/> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="是否使用安全信息化系统" prop="sisStatus"> - <el-radio-group v-model="applyStartDialogState.applyStartForm.sisStatus"> - <el-radio :label="1">是</el-radio> - <el-radio :label="2">否</el-radio> - </el-radio-group> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="applyStartDialogState.applyStartForm.sisStatus==1"> - <el-form-item label="安全信息化系统名称" prop="safeInformationSystem"> - <el-input v-model="applyStartDialogState.applyStartForm.safeInformationSystem" placeholder="材料类型" class="input-length"> - </el-input> - </el-form-item> - </el-col> - </el-row> - </el-form> - <template #footer> - <span class="dialog-footer"> - <el-button @click="applyStartDialogState.applyStartDialogVisible = !applyStartDialogState.applyStartDialogVisible" size="default">取 消</el-button> - <el-button type="primary" @click="onSubmitApplyStart" size="default">确定</el-button> - </span> - </template> - </el-dialog> - </div> -</template> - -<script setup lang="ts"> -import { reactive, ref } from "vue"; -import {ElMessage} from "element-plus"; -import {projectApi} from "/@/api/experiment/project"; - -const applyStartFormRef = ref() - -const applyStartDialogState = reactive<ApplyStartDialogType>({ - title: '转为已开展', - applyStartDialogVisible: false, - applyStartForm: { - id: null, - sisStatus: null, - safeInformationSystem: '', - startTime: '', - }, - applyStartFormRules: { - - }, -}) - -const showApplyStartDialog = (value: ProjectType) => { - applyStartDialogState.applyStartDialogVisible = true; - applyStartDialogState.applyStartForm = { - id: null, - sisStatus: null, - safeInformationSystem: '', - startTime: '' - }, - applyStartDialogState.applyStartForm.id = <number>value.id -}; - -const onSubmitApplyStart = () => { - applyStartFormRef.value.validate(async(valid: boolean) => { - if(valid){ - if(applyStartDialogState.applyStartForm.sisStatus == 2){ - applyStartDialogState.applyStartForm.safeInformationSystem = '' - } - let res = await projectApi().applyProject([applyStartDialogState.applyStartForm]); - if(res.data.code === 100){ - emit('refresh') - applyStartDialogState.applyStartDialogVisible = false; - ElMessage({ - type: 'success', - message: '申请开展成功' - }) - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg, - }); - } - }else{ - ElMessage({ - type: 'warning', - message: '请完善基本信息', - }); - } - }) -}; - -const emit = defineEmits(['refresh']) - -defineExpose({ - showApplyStartDialog -}) -</script> - -<style scoped> - -</style> diff --git a/src/views/experiment/project/components/applyStart.vue b/src/views/experiment/project/components/applyStart.vue deleted file mode 100644 index 8906f6e..0000000 --- a/src/views/experiment/project/components/applyStart.vue +++ /dev/null @@ -1,101 +0,0 @@ -<template> - <div class="system-menu-dialog-container"> - <el-dialog :title="applyStartDialogState.title" v-model="applyStartDialogState.applyStartDialogVisible" width="600px"> - <el-form ref="applyStartFormRef" :rules="applyStartDialogState.applyStartFormRules" :model="applyStartDialogState.applyStartForm" 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="stuffName"> - <el-date-picker type="datetime" format="YYYY/MM/DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" v-model="applyStartDialogState.applyStartForm.startTime" class="input-length"/> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="编号" prop="sisStatus"> - <el-radio-group v-model="applyStartDialogState.applyStartForm.sisStatus"> - <el-radio :label="1">是</el-radio> - <el-radio :label="2">否</el-radio> - </el-radio-group> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="材料类型" prop="stuffType"> - <el-select v-model="applyStartDialogState.applyStartForm.safeInformationSystem" placeholder="材料类型" class="input-length"> - </el-select> - </el-form-item> - </el-col> - </el-row> - </el-form> - <template #footer> - <span class="dialog-footer"> - <el-button @click="applyStartDialogState.applyStartDialogVisible = !applyStartDialogState.applyStartDialogVisible" size="default">取 消</el-button> - <el-button type="primary" @click="onSubmitApplyStart" size="default">确定</el-button> - </span> - </template> - </el-dialog> - </div> -</template> - -<script setup lang="ts"> -import { reactive, ref } from "vue"; -import {ElMessage} from "element-plus"; -import {projectApi} from "/@/api/experiment/project"; - -const applyStartFormRef = ref() - -const applyStartDialogState = reactive<ApplyStartDialogType>({ - title: '', - applyStartDialogVisible: false, - applyStartForm: { - id: null, - sisStatus: null, - safeInformationSystem: '', - startTime: '', - }, - applyStartFormRules: { - stuffCode: [{ required: true, message: '请填写实验材料', trigger: 'blur' }], - stuffName: [{ required: true, message: '请填写编号', trigger: 'blur' }], - stuffStorage: [{ required: true, message: '请选择材料类型', trigger: 'change' }], - stuffType: [{ required: true, message: '请选择材料储存', trigger: 'change' }], - stuffUnit: [{ required: true, message: '请选择计量单位', trigger: 'change' }] - }, -}) - -const showApplyStartDialog = (value: ProjectType) => { - applyStartDialogState.applyStartDialogVisible = true; -}; - -const onSubmitApplyStart = () => { - applyStartFormRef.value.validate(async(valid: boolean) => { - if(valid){ - let res = await projectApi().applyProject(applyStartDialogState.applyStartForm); - if(res.data.code === 100){ - emit('refresh') - applyStartDialogState.applyStartDialogVisible = false; - ElMessage({ - type: 'success', - message: '申请开展成功' - }) - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg, - }); - } - }else{ - ElMessage({ - type: 'warning', - message: '请完善基本信息', - }); - } - }) -}; - -const emit = defineEmits(['refresh']) - -defineExpose({ - showApplyStartDialog -}) -</script> - -<style scoped> - -</style> diff --git a/src/views/experiment/project/components/projectDialog.vue b/src/views/experiment/project/components/projectDialog.vue deleted file mode 100644 index e34c4a4..0000000 --- a/src/views/experiment/project/components/projectDialog.vue +++ /dev/null @@ -1,775 +0,0 @@ -<template> - <div class="system-menu-dialog-container"> - <el-dialog :title="projectDialogState.title" v-model="projectDialogState.projectDialogVisible" width="80%"> - <el-form ref="ProjectFormRef" :rules="projectDialogState.projectFormRules" :model="projectDialogState.projectForm" size="default" label-width="0"> - <table class="report-table"> - <th class="m-color b-font" style="text-align: center">***研究所/***大学<br />科学研究实验项目安全风险基础信息录入表(新立项)(带<span style="color: red">*</span>为必填项)</th> - <tr> - <td class="w-25 m-color required">实验名称</td> - <td class="w-75 m-color"> - <el-form-item prop="experimentName"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.experimentName" placeholder="请输入实验名称" /> - </el-form-item> - </td> - </tr> - <tr> - <td class="w-25 m-color required">实验类型</td> - <td class="w-75 m-color"> - <el-form-item prop="experimentType" style="display: flex;justify-content: center"> - <el-radio-group style="text-align: center" :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.experimentType"> - <el-radio :label="1">化学类</el-radio> - <el-radio :label="2">生物类</el-radio> - <el-radio :label="3">辐射类</el-radio> - <el-radio :label="4">机电类</el-radio> - <el-radio :label="5">特种设备类</el-radio> - <el-radio :label="6">其他类</el-radio> - </el-radio-group> - </el-form-item> - </td> - </tr> - <tr> - <td class="w-25 m-color required">部门</td> - <td class="w-25 m-color"> - <el-form-item prop="dep"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.dep" /> - </el-form-item> - </td> - <td class="w-25 m-color required">立项时间</td> - <td class="w-25 m-color"> - <el-form-item prop="createExperimentTime"> - <el-date-picker :disabled="projectDialogState.disabled" type="datetime" format="YYYY/MM/DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss" v-model="projectDialogState.projectForm.createExperimentTime" /> - </el-form-item> - </td> - </tr> - <tr> - <td class="w-25 m-color required">负责人</td> - <td class="w-25 m-color"> - <el-form-item prop="liabilityUserId"> -<!-- <el-select style="width: 100%" v-model="projectDialogState.projectForm.liabilityUserId" clearable filterable @change="getLiabilityUserPhone($event)">--> -<!-- <el-option--> -<!-- v-for="item in projectDialogState.systemPersonList"--> -<!-- :key="item.id"--> -<!-- :value="item.id"--> -<!-- :label="item.realName"--> -<!-- ></el-option>--> -<!-- </el-select>--> - <el-select style="width: 100%" disabled v-model="projectDialogState.projectForm.liabilityUserId" clearable filterable> - <el-option :key="userInfos.uid" :value="userInfos.uid" :label="userInfos.userName"></el-option> - </el-select> - </el-form-item> -<!-- <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.liabilityUserId"/>--> - </td> - <td class="w-25 m-color required">电话</td> - <td class="w-25 m-color"> - <el-form-item prop="liabilityUserPhone"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.liabilityUserPhone" /> - </el-form-item> - </td> - </tr> - <tr> - <td class="w-25 m-color required">安全负责人</td> - <td class="w-25 m-color"> -<!-- <el-select style="width: 100%" :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.safeLiabilityUser" @change="getSafeLiabilityUserPhone($event)" clearable filterable>--> -<!-- <el-option--> -<!-- v-for="item in projectDialogState.allPersonList"--> -<!-- :key="item.id"--> -<!-- :value="item.id"--> -<!-- :label="item.personName"--> -<!-- ></el-option>--> -<!-- </el-select>--> - <el-form-item prop="safeLiabilityUser"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.safeLiabilityUser" /> - </el-form-item> - </td> - <td class="w-25 m-color required">电话</td> - <td class="w-25 m-color"> - <el-form-item prop="safeLiabilityUserPhone"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.safeLiabilityUserPhone" /> - </el-form-item> - </td> - </tr> - <select-room ref="selectRoomRef" v-model:disabled="projectDialogState.disabled" v-model:data="projectDialogState.projectForm.siteList"></select-room> - <select-material ref="selectMaterialRef" v-model:disabled="projectDialogState.disabled" v-model:data="projectDialogState.projectForm.stuffList"></select-material> - <select-equipment ref="selectEquipmentRef" v-model:disabled="projectDialogState.disabled" v-model:data="projectDialogState.projectForm.deviceList"></select-equipment> - <tr> - <td class="w-25 m-color required">实验步骤</td> - <td class="w-75 m-color"> - <el-form-item prop="experimentStep"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.experimentStep" placeholder="请输入实验步骤" /> - </el-form-item> - </td> - </tr> - <tr> - <td class="w-25 m-color required">操作方法</td> - <td class="w-75 m-color"> - <el-form-item prop="experimentMethod"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.experimentMethod" placeholder="请输入操作方法" /> - </el-form-item> - </td> - </tr> - <tr> - <td class="w-25 m-color required">工艺过程</td> - <td class="w-75 m-color"> - <el-form-item prop="process"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.process" placeholder="请输入工艺过程" /> - </el-form-item> - </td> - </tr> - <tr> - <td class="w-25 m-color required">特殊/关键过程</td> - <td class="w-75 m-color"> - <el-form-item prop="keyProcess"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.keyProcess" placeholder="请输入特殊/关键过程" /> - </el-form-item> - </td> - </tr> - <tr> - <td class="w-25 m-color required">预防措施</td> - <td class="w-75 m-color"> - <el-form-item prop="measure"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.measure" placeholder="请输入预防措施" /> - </el-form-item> - </td> - </tr> - <tr> - <td class="w-25 m-color required">是否存在过夜、老化实验</td> - <td class="w-25 m-color"> - <el-form-item prop="timeout"> - <el-radio-group :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.timeout"> - <el-radio :label="1">存在</el-radio> - <el-radio :label="2">不存在</el-radio> - </el-radio-group> - </el-form-item> - </td> - <td class="w-25 m-color required" v-if="projectDialogState.projectForm.timeout === 1">过夜、老化保障措施</td> - <td class="w-25 m-color" v-if="projectDialogState.projectForm.timeout === 1"> - <el-form-item prop="timeoutManager"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.timeoutManager" /> - </el-form-item> - </td> - </tr> - <tr> - <td class="w-25 m-color required">是否在封闭条件下</td> - <td class="w-25 m-color"> - <el-form-item prop="closed"> - <el-radio-group :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.closed"> - <el-radio :label="1">存在</el-radio> - <el-radio :label="2">不存在</el-radio> - </el-radio-group> - </el-form-item> - </td> - <td class="w-25 m-color required" v-if="projectDialogState.projectForm.closed === 1">封闭条件保障措施</td> - <td class="w-25 m-color" v-if="projectDialogState.projectForm.closed === 1"> - <el-form-item prop="unclosedManager"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.unclosedManager"/> - </el-form-item> - </td> - </tr> - <tr> - <td class="w-25 m-color required">实验场所防爆措施条件和设施情况</td> - <td class="w-75 m-color"> - <el-form-item prop="explosionProof"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.explosionProof" placeholder="请输入" /> - </el-form-item> - </td> - </tr> - <tr> - <td class="w-25 m-color required">实验场所防火措施条件和设施情况</td> - <td class="w-75 m-color"> - <el-form-item prop="fireProof"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.fireProof" placeholder="请输入" /> - </el-form-item> - </td> - </tr> - <tr> - <td class="w-25 m-color required">实验场所防中毒措施条件和设施情况</td> - <td class="w-75 m-color"> - <el-form-item prop="poisonProof"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.poisonProof" placeholder="请输入" /> - </el-form-item> - </td> - </tr> - - - <select-danger ref="selectDangerRef" v-model:data="projectDialogState.projectForm.hazardousWasteList" v-model:disabled="projectDialogState.disabled"></select-danger> - <select-person ref="selectPersonRef" v-model:data="projectDialogState.projectForm.persons" v-model:disabled="projectDialogState.disabled"></select-person> - - -<!-- <tr>--> -<!-- <td class="w-25 m-color">安全信息化系统使用情况</td>--> -<!-- <td class="w-25 m-color">--> -<!-- <el-radio-group v-model="projectDialogState.projectForm.useIT">--> -<!-- <el-radio value="1">是</el-radio>--> -<!-- <el-radio value="2">否</el-radio>--> -<!-- </el-radio-group>--> -<!-- </td>--> -<!-- <td class="w-25 m-color">系统名称</td>--> -<!-- <td class="w-25 m-color">--> -<!-- <el-input v-model="projectDialogState.projectForm.systemName" placeholder="请输入" />--> -<!-- </td>--> -<!-- </tr>--> -<!-- <tr class="m-color b-font" style="text-align: center">应急预案/应急演练</tr>--> -<!-- <tr>--> -<!-- <td class="w-25 m-color required">有无预案</td>--> -<!-- <td class="w-25 m-color required">预案名称</td>--> -<!-- <td class="w-25 m-color required">是否演练</td>--> -<!-- <td class="w-25 m-color required">演练情况</td>--> -<!-- </tr>--> -<!-- <tr>--> -<!-- <td class="w-25 m-color">--> -<!-- <el-form-item prop="emergencyPlan">--> -<!-- <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.emergencyPlan" />--> -<!-- </el-form-item>--> -<!-- </td>--> -<!-- <td class="w-25 m-color">--> -<!-- <el-form-item prop="emergencyPlanName">--> -<!-- <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.emergencyPlanName" />--> -<!-- </el-form-item>--> -<!-- </td>--> -<!-- <td class="w-25 m-color">--> -<!-- <el-form-item prop="emergencyDrillStatus">--> -<!-- <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.emergencyDrillStatus" />--> -<!-- </el-form-item>--> -<!-- </td>--> -<!-- <td class="w-25 m-color">--> -<!-- <el-form-item prop="emergencyDrill">--> -<!-- <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.emergencyDrill" />--> -<!-- </el-form-item>--> -<!-- </td>--> -<!-- </tr>--> - <select-emergency ref="selectEmergencyRef" v-model:disabled="projectDialogState.disabled" v-model:data="projectDialogState.projectForm.emergencyList"></select-emergency> - <tr> - <td class="w-25 m-color required">安全管理制度</td> - <td class="w-75 m-color"> - <el-form-item prop="safeManagerMethod"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.safeManagerMethod" placeholder="请输入" /> - </el-form-item> - </td> - </tr> - <tr class="m-color b-font" style=" text-align: center">其他信息</tr> - <tr> - <td class="w-25 m-color required">实验场所是否需要分区隔断</td> - <td class="w-75 m-color"> - <el-form-item prop="partitionCondition"> -<!-- <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.partitionCondition" placeholder="请输入" />--> - <el-radio-group :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.partitionCondition"> - <el-radio :label="0">是</el-radio> - <el-radio :label="1">否</el-radio> - </el-radio-group> - </el-form-item> - </td> - </tr> - <tr> - <td class="w-25 m-color">其它基础信息(详细描述)</td> - <td class="w-75 m-color"> - <el-form-item> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.note" placeholder="请输入" /> - </el-form-item> - </td> - </tr> - </table> - </el-form> - <template #footer> - <span class="dialog-footer" style="padding-top:10px;text-align: center !important;"> - <el-button @click="projectDialogState.projectDialogVisible = !projectDialogState.projectDialogVisible" size="default">取 消</el-button> - <el-button type="primary" v-if="!projectDialogState.disabled" @click="onSubmitProject" size="default">确定</el-button> - </span> - </template> - </el-dialog> - </div> -</template> - -<script setup lang="ts"> -import {defineAsyncComponent, nextTick, onMounted, reactive, ref} from "vue"; -import {ElMessage} from "element-plus"; -import {projectApi} from "/@/api/experiment/project"; -import {personApi} from "/@/api/basic/person"; -import {userApi} from "/@/api/systemManage/user"; -import {useUserInfo} from "/@/stores/userInfo"; -import {storeToRefs} from "pinia"; -import {checkChineseName, verifyPhone} from "/@/utils/toolsValidate"; - -const SelectEquipment = defineAsyncComponent(() => import('./selectEquipment.vue')) -const SelectMaterial = defineAsyncComponent(() => import('./selectMaterial.vue')) -const SelectEmergency = defineAsyncComponent(() => import('./selectEmergency.vue')) -const SelectDanger = defineAsyncComponent(() => import('./selectDanger.vue')) -const SelectPerson = defineAsyncComponent(() => import('./selectPerson.vue')) -const SelectRoom = defineAsyncComponent(() => import('./selectRoom.vue')) -const ProjectFormRef = ref() -const selectPersonRef = ref() -const selectEquipmentRef = ref() -const selectRoomRef = ref() -const selectMaterialRef = ref() -const selectEmergencyRef = ref() -const selectDangerRef = ref() - -const userInfo = useUserInfo(); -const { userInfos } = storeToRefs(userInfo); - -const projectDialogState = reactive<ProjectDialogType>({ - title: '', - disabled: false, - projectDialogVisible: false, - projectForm: { - id: null, - experimentName: "", - experimentType: null, - liabilityUserId: Number(userInfos.value.uid), - liabilityUserPhone: '', - safeLiabilityUser: '', - safeLiabilityUserPhone: '', - dep: "", - experimentStep: "", - experimentMethod: "", - process: "", - keyProcess: "", - measure: "", - timeout: null, - timeoutManager: "", - closed: null, - unclosedManager: "", - explosionProof: "", - fireProof: "", - poisonProof: "", - safeManagerMethod: "", - emergencyList: [], - partitionCondition: null, - note: "", - createExperimentTime: '', - persons: [], - siteList: [], - deviceList: [], - stuffList: [], - hazardousWasteList: [] - }, - projectFormRules: { - experimentName: [{ required: true, message: '', trigger: 'blur' }], - experimentType: [{ required: true, message: '', trigger: 'blur' }], - liabilityUserId: [{ required: true, message: '', trigger: 'blur' }], - liabilityUserPhone: [{ required: true, message: '', trigger: 'blur' }], - safeLiabilityUser: [{ required: true, message: '', trigger: 'blur' }], - safeLiabilityUserPhone: [{ required: true, message: '', trigger: 'blur' }], - dep: [{ required: true, message: '', trigger: 'blur' }], - experimentStep: [{ required: true, message: '', trigger: 'blur' }], - experimentMethod: [{ required: true, message: '', trigger: 'blur' }], - process: [{ required: true, message: '', trigger: 'blur' }], - keyProcess: [{ required: true, message: '', trigger: 'blur' }], - measure: [{ required: true, message: '', trigger: 'blur' }], - timeout: [{ required: true, message: '', trigger: 'blur' }], - timeoutManager: [{ required: true, message: '', trigger: 'blur' }], - closed: [{ required: true, message: '', trigger: 'blur' }], - unclosedManager: [{ required: true, message: '', trigger: 'blur' }], - explosionProof: [{ required: true, message: '', trigger: 'blur' }], - fireProof: [{ required: true, message: '', trigger: 'blur' }], - poisonProof: [{ required: true, message: '', trigger: 'blur' }], - safeManagerMethod: [{ required: true, message: '', trigger: 'blur' }], - emergencyList: [{ required: true, message: '', trigger: 'blur' }], - partitionCondition: [{ required: true, message: '', trigger: 'blur' }], - createExperimentTime: [{ required: true, message: '', trigger: 'blur' }] - }, - allPersonList: [], - allRoomList: [], - systemPersonList: [], -}) - -const getLiabilityUserPhone = (value: number)=>{ - const data = projectDialogState.systemPersonList.find(item => item.id === value) as AllPersonListType - projectDialogState.projectForm.liabilityUserPhone = data.phone -} - -// const getSafeLiabilityUserPhone = (value: number)=>{ -// const data = projectDialogState.allPersonList.find(item => item.id === value) as AllPersonListType -// projectDialogState.projectForm.safeLiabilityUserPhone = data.phone -// } - -const showProjectDialog = (title: string, value: ProjectType, allRoomList: RoomType []) => { - projectDialogState.projectDialogVisible = true; - projectDialogState.allRoomList = allRoomList - setTimeout(() => { - ProjectFormRef.value.clearValidate(); - }); - if(title === '新增'){ - projectDialogState.disabled = false - projectDialogState.title = '新增'; - projectDialogState.projectForm = { - id: null, - experimentName: "", - experimentType: null, - liabilityUserId: Number(userInfos.value.uid), - liabilityUserPhone: '', - safeLiabilityUser: '', - safeLiabilityUserPhone: '', - dep: "", - experimentStep: "", - experimentMethod: "", - process: "", - keyProcess: "", - measure: "", - timeout: null, - timeoutManager: "", - closed: null, - unclosedManager: "", - explosionProof: "", - fireProof: "", - poisonProof: "", - safeManagerMethod: "", - emergencyList: [], - partitionCondition: null, - note: "", - createExperimentTime: '', - persons: [], - siteList: [], - deviceList: [], - stuffList: [], - hazardousWasteList: [] - }; - }else if(title === '整改'){ - projectDialogState.title = '整改'; - projectDialogState.disabled = false - for(let i in projectDialogState.projectForm) { - if(isValidKey(i, projectDialogState.projectForm)) { - projectDialogState.projectForm[i] = value[i]; - } - } - }else{ - projectDialogState.title = '查看'; - projectDialogState.disabled = true - for(let i in projectDialogState.projectForm) { - if(isValidKey(i, projectDialogState.projectForm)) { - projectDialogState.projectForm[i] = value[i]; - } - } - } -}; - -const isValidKey = (key: string | number | symbol, object:object): key is keyof typeof object =>{ - return key in object; -}; - -const onSubmitProject = async() => { - ProjectFormRef.value.validate(async(valid: boolean) => { - if(valid){ - if(projectDialogState.projectForm.timeout === 2){ - projectDialogState.projectForm.timeoutManager = '' - }else{ - if(projectDialogState.projectForm.timeoutManager == ''){ - ElMessage({ - type: 'warning', - message: '请填写过夜、老化保障措施', - duration: 1000 - }); - return - } - } - if(projectDialogState.projectForm.closed === 2){ - projectDialogState.projectForm.unclosedManager = "" - }else{ - if(projectDialogState.projectForm.unclosedManager == ''){ - ElMessage({ - type: 'warning', - message: '请填写封闭条件保障措施', - duration: 1000 - }); - return - } - } - if(projectDialogState.title === '新增'){ - if(checkChineseName(projectDialogState.projectForm.safeLiabilityUser) == false){ - ElMessage({ - type: 'warning', - message: '安全负责人姓名格式有误', - duration: 1000 - }); - return - } - if(verifyPhone(projectDialogState.projectForm.safeLiabilityUserPhone) == false || verifyPhone(projectDialogState.projectForm.liabilityUserPhone) == false){ - ElMessage({ - type: 'warning', - message: '请输入正确的手机号', - duration: 1000 - }); - return - } - if(projectDialogState.projectForm.siteList.length === 0){ - ElMessage({ - type: 'warning', - message: '请至少添加一处实验场所', - duration: 1000 - }); - return - } - if(projectDialogState.projectForm.stuffList.length === 0){ - ElMessage({ - type: 'warning', - message: '请至少选择一种试剂/材料', - duration: 1000 - }); - return - } - if(projectDialogState.projectForm.deviceList.length === 0){ - ElMessage({ - type: 'warning', - message: '请至少选择一种仪器/设备', - duration: 1000 - }); - return - } - if(projectDialogState.projectForm.persons.length === 0){ - ElMessage({ - type: 'warning', - message: '请至少添加一名实验人员', - duration: 1000 - }); - return - } - projectDialogState.projectForm.emergencyList = selectEmergencyRef.value.dataList - projectDialogState.projectForm.persons = selectPersonRef.value.dataList - const roomList = selectRoomRef.value.dataList - projectDialogState.projectForm.siteList = roomList.map(({siteId}) => ({siteId})) - projectDialogState.projectForm.stuffList = selectMaterialRef.value.dataList - projectDialogState.projectForm.deviceList = selectEquipmentRef.value.dataList - let res = await projectApi().addProject(projectDialogState.projectForm) - if(res.data.code === 100){ - emit('refresh') - projectDialogState.projectDialogVisible = false; - ElMessage({ - type: 'success', - message: '新增成功' - }) - - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg, - }); - } - }else{ - projectDialogState.projectForm.siteList = selectRoomRef.value.dataList.map(obj => ({siteId:obj.siteId})) - projectDialogState.projectForm.hazardousWasteList = selectDangerRef.value.dataList.map(obj => ({classify:obj.classify,wasteStorage:obj.wasteStorage,handAmount:obj.handAmount})) - let res = await projectApi().modProject(projectDialogState.projectForm) - if(res.data.code === 100){ - emit('refresh') - projectDialogState.projectDialogVisible = false; - ElMessage({ - type: 'success', - message: '整改已提交' - }) - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg, - }); - } - } - }else{ - ElMessage({ - type: 'warning', - message: '请完善基本信息', - }); - } - }) -}; - -const getPersonList = async () => { - let res = await userApi().getUserList({ - pageIndex: 1, - pageSize: 99999, - searchParams:{ - roleId: null, - name: '', - realName: '' - } - }); - if(res.data.code === 100){ - projectDialogState.systemPersonList = JSON.parse(JSON.stringify(res.data.data)); - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }) - } -}; - -const getAllPersonList = async () => { - let res = await personApi().getAllPerson(); - if(res.data.code === 100){ - projectDialogState.allPersonList = JSON.parse(JSON.stringify(res.data.data)); - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }) - } -}; - -const emit = defineEmits(['refresh']); - -defineExpose({ - showProjectDialog, -}); - -onMounted(() => { - getAllPersonList(); - getPersonList(); -}); -</script> - -<style scoped lang="scss"> -.site-layout-background { - background: #fff; -} - -.report-table { - width: 100%; - border-collapse: collapse; - border: 1px solid #337ecc; - margin: 20px 0; - -th { - padding: 10px 0; - border: 1px solid #337ecc; - border-left: none; -} - -tr { - width: 100%; - height: 44px; - line-height: 42px; - border-bottom: 1px solid #ccc; - -&:last-of-type { - border-bottom: none; - } - -td { - border-right: 1px solid #ccc; - display: inline-block; - height: 44px; - vertical-align: middle; - text-align: center; - line-height: 42px; - - :deep(.el-input__wrapper ){ - box-shadow: none; - margin-top: 6px; - } - -&:last-of-type { - border-right: none; - } - -&.required { - &::before { - content: "*"; - display: inline-block; - color: red; - } -} - -&.w-14 { - width: calc((100/7)/100 * 100%); - } - -&.w-16 { - width: calc((100/6)/100 * 100%); - } - -&.w-18 { - width: 16.59%; - } - -&.w-20 { - width: 20%; - } - -&.w-25 { - width: 25%; - } - -&.w-50 { - width: 50%; - } - -&.w-75 { - width: 75%; - } - -.ant-input { - height: 100%; - border: none; - background: #f5f7fa; -} - -.ant-picker { - width: 100%; - height: 100%; -} -} -} - -.b-font { - font-size: 16px; - font-weight: bolder; -} -} - -.m-color { - color: #0c4995; -} -::v-deep(.el-form-item){ - height: 100%; - display: flex; - justify-content: center; - .el-form-item__content{ - display: flex; - justify-content: center; - } -} -.roomSelect{ - ::v-deep(.el-popper){ - .el-select-dropdown__item{ - height: auto; - padding: 0; - - .roomTable{ - width: 100%; - display: flex; - border-bottom: 1px solid #ebeef5; - - &:last-of-type{ - border-bottom: none; - } - - &>div{ - width: 25%; - border-right: 1px dashed #ebeef5; - &:last-of-type{ - border-right: none; - } - - div{ - width: 100%; - } - .roomTit{ - border-bottom: 1px solid #ebeef5; - } - } - } - } - .el-select-dropdown__item.selected{ - .roomTit{ - color: #606266; - font-weight: normal; - } - } - } -} - -:deep(.el-dialog__footer){ - padding-top: 20px; - display: flex; - justify-content: center; -} - - -</style> diff --git a/src/views/experiment/project/components/selectDanger.vue b/src/views/experiment/project/components/selectDanger.vue deleted file mode 100644 index 26ade11..0000000 --- a/src/views/experiment/project/components/selectDanger.vue +++ /dev/null @@ -1,192 +0,0 @@ -<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> - </tr> - <tr v-for="(item,index) in selectDangerState.wasteList" :key="index"> - <td class="w-20"> - {{ index + 1 }} - </td> - <td class="w-20"> - <el-select :disabled="selectDangerState.disabled" v-model="item.classify" clearable filterable> - <el-option v-for="item in selectDangerState.classifyList" :key="item.id" :label="item.name" :value="item.id"></el-option> - </el-select> - </td> - <td class="w-20"> - <el-select :disabled="selectDangerState.disabled" v-model="item.wasteStorage" clearable filterable> - <el-option v-for="item in selectDangerState.wasteStorageList" :key="item.id" :label="item.name" :value="item.id"></el-option> - </el-select> - </td> - <td class="w-20"> - <el-input type="number" v-model="item.handAmount"></el-input> - </td> - <td class="w-20"> - <el-button :disabled="selectDangerState.disabled" type="danger" @click="deleteDangerItem(index)">删除</el-button> - </td> - </tr> - <tr style="text-align: center"> - <el-button :disabled="selectDangerState.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<WasteType> -}); - -const selectDangerState = reactive<SelectDangerType>({ - disabled: false, - wasteList: [ - ], - 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(() => { - selectDangerState.wasteList = props.data as Array<WasteType> - selectDangerState.disabled = props.disabled -}); - -const addDangerItem = () => { - selectDangerState.wasteList.push({classify: null, wasteStorage: null, handAmount: null,}); -}; - -const deleteDangerItem = (index: number) => { - selectDangerState.wasteList.splice(index,1); -}; - -const formatList = (formatList: Array<WasteType>) => { - selectDangerState.wasteList = formatList -} - -defineExpose({ - formatList, - dataList: selectDangerState.wasteList, -}); - -</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/experiment/project/components/selectEmergency.vue b/src/views/experiment/project/components/selectEmergency.vue deleted file mode 100644 index 50a3993..0000000 --- a/src/views/experiment/project/components/selectEmergency.vue +++ /dev/null @@ -1,181 +0,0 @@ -<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> - </tr> - <tr v-for="(item,index) in selectEmergencyState.emergencyList" :key="index"> - <td class="w-20"> - <el-input :disabled="selectEmergencyState.disabled" v-model="item.emergencyPlanName" /> - </td> - <td class="w-20"> - <el-radio-group :disabled="selectEmergencyState.disabled" v-model="item.emergencyDrillStatus"> - <el-radio label="是">是</el-radio> - <el-radio label="否">否</el-radio> - </el-radio-group> - </td> - <td class="w-20"> - <el-input :disabled="selectEmergencyState.disabled" v-model="item.emergencyDrill" placeholder="未演练则填“无”"/> - </td> - <td class="w-20"> - <el-radio-group :disabled="selectEmergencyState.disabled" v-model="item.emergencyPlan"> - <el-radio label="是">是</el-radio> - <el-radio label="否">否</el-radio> - </el-radio-group> - </td> - <td class="w-20"> - <el-button :disabled="selectEmergencyState.disabled" type="danger" @click="deleteEmergencyItem(index)">删除</el-button> - </td> - </tr> - <tr style="text-align: center"> - <el-button :disabled="selectEmergencyState.disabled" type="primary" shape="round" @click="addEmergencyItem()"> - 添加一条 - </el-button> - </tr> -</template> - -<script setup lang="ts"> -import {defineAsyncComponent, onMounted, reactive, ref, watchEffect} from "vue"; -import {ElMessage} from "element-plus"; -let props = defineProps({ - disabled: Boolean, - data: Array<emergencyListType> -}); - -const selectEmergencyState = reactive<SelectEmergencyType>({ - disabled: false, - emergencyList: [] -}) - -const addEmergencyItem = () => { - selectEmergencyState.emergencyList.push({ emergencyPlanName: '', emergencyDrillStatus: '', emergencyDrill: '', emergencyPlan: '' }); -}; - -watchEffect(() => { - selectEmergencyState.emergencyList = props.data as Array<emergencyListType> - selectEmergencyState.disabled = props.disabled -}); - -const deleteEmergencyItem = (index: number) => { - selectEmergencyState.emergencyList.splice(index,1); -}; - -const formatList = (formatList: Array<emergencyListType>) => { - selectEmergencyState.emergencyList = formatList -}; - -defineExpose({ - dataList: selectEmergencyState.emergencyList, - formatList -}); - - -onMounted(() => { - -}); -</script> - -<style scoped lang="scss"> -.site-layout-background { - background: #fff; -} - -.report-table { - width: 100%; - border-collapse: collapse; - border: 1px solid #337ecc; - margin: 20px 0; - - th { - padding: 10px 0; - border: 1px solid #337ecc; - border-left: none; - } - - tr { - width: 100%; - height: 44px; - line-height: 42px; - border-bottom: 1px solid #ccc; - - &:last-of-type { - border-bottom: none; - } - - td { - border-right: 1px solid #ccc; - display: inline-block; - height: 44px; - vertical-align: middle; - text-align: center; - line-height: 42px; - - &:last-of-type { - border-right: none; - } - - &.required { - &::before { - content: "*"; - display: inline-block; - color: red; - } - } - - &.w-14 { - width: calc((100/7)/100 * 100%); - } - - &.w-16 { - width: calc((100/6)/100 * 100%); - } - - &.w-18 { - width: 16.59%; - } - - &.w-20 { - width: 20%; - } - - &.w-25 { - width: 25%; - } - - &.w-50 { - width: 50%; - } - - &.w-75 { - width: 75%; - } - - .ant-input { - height: 100%; - border: none; - background: #f5f7fa; - } - - .ant-picker { - width: 100%; - height: 100%; - } - :deep(.el-input__wrapper ){ - box-shadow: none; - } - } - } - - .b-font { - font-size: 16px; - font-weight: bolder; - } -} - -.m-color { - color: #0c4995; -} -</style> diff --git a/src/views/experiment/project/components/selectEquipment.vue b/src/views/experiment/project/components/selectEquipment.vue deleted file mode 100644 index 7ddf0b9..0000000 --- a/src/views/experiment/project/components/selectEquipment.vue +++ /dev/null @@ -1,247 +0,0 @@ -<template> - <tr class="m-color b-font" style="text-align: center">实验所用的仪器/设备</tr> - <tr> - <td class="w-16 m-color required">设备名称</td> - <td class="w-16 m-color">编号</td> - <td class="w-16 m-color">额定功率</td> - <td class="w-16 m-color">是否特种</td> - <td class="w-16 m-color required">设备数量</td> - <td class="w-16 m-color">操作</td> - </tr> - <tr v-for="(item,index) in selectEquipmentState.equipmentList" :key="index"> - <td class="w-16"> - <el-select :disabled="selectEquipmentState.disabled" filterable v-model="item.deviceId" @change="giveOtherEquipmentValue($event, index)" @focus="checkAllEquipment($event, index)"> - <el-option - v-for="item in selectEquipmentState.allEquipmentList" - :key="item.id" - :value="item.id" - :label="item.deviceName" - > - </el-option> - </el-select> - </td> - <td class="w-16"> - <el-input disabled v-model="item.deviceCode"/> - </td> - <td class="w-16"> - <el-input disabled v-model="item.devicePower" /> - </td> - <td class="w-16"> -<!-- <el-radio-group disabled v-model="item.specialDevice">--> -<!-- <el-radio :label="1">是</el-radio>--> -<!-- <el-radio :label="2">否</el-radio>--> -<!-- </el-radio-group>--> - <div>{{item.specialDevice == 1 ? '是' : item.specialDevice == 2 ? '否' : ''}}</div> - </td> - <td class="w-16"> - <el-input :disabled="selectEquipmentState.disabled" type="number" v-model="item.deviceUseCount" /> - </td> - <td class="w-16"> - <el-button :disabled="selectEquipmentState.disabled" type="danger" @click="deleteEquipmentItem(index)">删除</el-button> - </td> - </tr> - <tr style="text-align: center"> - <el-button :disabled="selectEquipmentState.disabled" type="primary" shape="round" @click="addEquipmentItem()"> - 添加现有实验仪器/设备 - </el-button> - <el-button :disabled="selectEquipmentState.disabled" shape="round" @click="addNewEquipment('新增', {})"> - 新增实验仪器/设备配置 - </el-button> - </tr> - <equipment-dialog ref="equipmentDialogRef" :equipmentTypeList="selectEquipmentState.equipmentTypeList"></equipment-dialog> -</template> - -<script setup lang="ts"> -import {defineAsyncComponent, onMounted, reactive, ref, watchEffect} from "vue"; -import {ElMessage} from "element-plus"; -import { equipmentApi } from "/@/api/basic/equipement"; - -let props = defineProps({ - disabled: Boolean, - data: Array<AllEquipmentListType> -}); -const equipmentDialog = defineAsyncComponent(() => import('/@/views/basic/equipment/components/equipmentDialog.vue')); -const selectEquipmentState = reactive<SelectEquipmentType>({ - disabled: false, - equipmentList: [], - allEquipmentList: [], - equipmentTypeList: [], - specialDeviceList: [ - {id: 1, name: '是'}, - {id:2, name: '否'} - ] -}); - -watchEffect(() => { - selectEquipmentState.equipmentList = props.data as Array<AllEquipmentListType> - selectEquipmentState.disabled = props.disabled -}); - -const equipmentDialogRef = ref(); - -const getAllType = async ()=>{ - const res = await equipmentApi().getAllType(); - if(res.data.code === 100){ - selectEquipmentState.equipmentTypeList = res.data.data - } -} - -const checkAllEquipment = () => { - getAllEquipmentList() -} - -const addEquipmentItem = () => { - selectEquipmentState.equipmentList.push({deviceId: null, deviceUseCount: null, deviceCode: '', deviceName: '', devicePower: '', specialDevice: '',deviceUnit: null, safeProtect: null}); -}; - -const addNewEquipment = (title: string, value: EquipmentType) => { - equipmentDialogRef.value.showEquipmentDialog(title, value, selectEquipmentState.specialDeviceList); -} - -const deleteEquipmentItem = (index: number) => { - selectEquipmentState.equipmentList.splice(index,1); -}; - -const getAllEquipmentList = async () => { - let res = await equipmentApi().getAllEquipment(); - if(res.data.code === 100){ - selectEquipmentState.allEquipmentList = JSON.parse(JSON.stringify(res.data.data)); - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }) - } -}; - -const giveOtherEquipmentValue = (value: number, index:number) => { - const data = selectEquipmentState.allEquipmentList.find(item => item.id === value) as AllEquipmentListType - selectEquipmentState.equipmentList[index] = { - deviceId: data.id, - deviceUseCount: null, - deviceCode: data.deviceCode, - deviceName: data.deviceName, - devicePower: data.devicePower, - specialDevice: data.specialDevice, - deviceUnit: data.deviceUnit, - safeProtect: data.safeProtect, - } -}; - -const formatList = (formatList: Array<AllEquipmentListType>) => { - selectEquipmentState.equipmentList = formatList -} - -defineExpose({ - dataList: selectEquipmentState.equipmentList, - formatList -}); - -onMounted(() => { - getAllType(); - getAllEquipmentList(); -}); -</script> - -<style scoped lang="scss"> -.site-layout-background { - background: #fff; -} - -.report-table { - width: 100%; - border-collapse: collapse; - border: 1px solid #337ecc; - margin: 20px 0; - - th { - padding: 10px 0; - border: 1px solid #337ecc; - border-left: none; - } - - tr { - width: 100%; - height: 44px; - line-height: 42px; - border-bottom: 1px solid #ccc; - - &:last-of-type { - border-bottom: none; - } - - td { - border-right: 1px solid #ccc; - display: inline-block; - height: 44px; - vertical-align: middle; - text-align: center; - line-height: 42px; - - :deep(.el-input__wrapper ){ - box-shadow: none; - } - - &: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; -} -</style> diff --git a/src/views/experiment/project/components/selectMaterial.vue b/src/views/experiment/project/components/selectMaterial.vue deleted file mode 100644 index 8017fb3..0000000 --- a/src/views/experiment/project/components/selectMaterial.vue +++ /dev/null @@ -1,248 +0,0 @@ -<template> - <tr class="m-color b-font" style="text-align: center">实验所用的试剂或材料</tr> - <tr> - <td class="w-14 m-color required">实验材料</td> - <td class="w-14 m-color">耗材ID</td> - <td class="w-14 m-color">材料类型</td> - <td class="w-14 m-color">材料储存</td> - <td class="w-14 m-color">计量单位</td> - <td class="w-14 m-color required">使用数量</td> - <td class="w-14 m-color">操作</td> - </tr> - <tr v-for="(item,index) in selectMaterialState.materialList" :key="index"> - <td class="w-14"> - <el-select :disabled="selectMaterialState.disabled" filterable v-model="item.stuffId" @change="giveOtherMaterialValue($event, index)" @focus="checkAllMaterial($event, index)"> - <el-option - v-for="item in selectMaterialState.allMaterialList" - :key="item.id" - :value="item.id" - :label="item.stuffName" - > - </el-option> - </el-select> - </td> - <td class="w-14"> - <el-input disabled v-model="item.stuffCode" /> - </td> - <td class="w-14"> -<!-- <el-input :disabled="selectMaterialState.disabled" v-model="item.stuffType" />--> - <div>{{selectMaterialState.stuffTypeList.find(i=>i.id == item.stuffType)?.name}}</div> - </td> - <td class="w-14"> -<!-- <el-input :disabled="selectMaterialState.disabled" v-model="item.stuffStorage" />--> - <div>{{selectMaterialState.stuffStorageList.find(i=>i.id == item.stuffStorage)?.name}}</div> - </td> - <td class="w-14"> -<!-- <el-input :disabled="selectMaterialState.disabled" v-model="item.stuffUnit" />--> - <div>{{selectMaterialState.stuffUnitList.find(i=>i.id == item.stuffUnit)?.name}}</div> - </td> - <td class="w-14"> - <el-input type="number" :disabled="selectMaterialState.disabled" v-model="item.stuffUseCount" /> - </td> - <td class="w-14"> - <el-button type="danger" :disabled="selectMaterialState.disabled" @click="deleteMaterialItem(index)">删除</el-button> - </td> - </tr> - <tr style="text-align: center"> - <el-button :disabled="selectMaterialState.disabled" type="primary" shape="round" @click="addMaterialItem()"> - 添加现有实验材料 - </el-button> - <el-button :disabled="selectMaterialState.disabled" shape="round" @click="addNewMaterial('新增', {})"> - 新增实验材料配置 - </el-button> - </tr> - <material-dialog ref="materialDialogRef"></material-dialog> -</template> - -<script setup lang="ts"> -import {defineAsyncComponent, onMounted, reactive, ref, watchEffect} from "vue"; -import { materialApi } from "/@/api/basic/material"; -import {ElMessage} from "element-plus"; -let props = defineProps({ - disabled: Boolean, - data: Array<AllMaterialListType> -}); -const MaterialDialog = defineAsyncComponent(() => import('/@/views/basic/material/components/materialDialog.vue')); -const selectMaterialState = reactive<SelectMaterialType>({ - disabled: false, - materialList: [], - allMaterialList: [], - stuffTypeList: [ - {id: 1, name: '化学试剂'}, - {id:2, name: '基础材料'} - ], - stuffStorageList: [ - {id:1, name: '智能试剂柜'}, - {id:2, name: '普通储存柜'}, - ], - stuffUnitList: [ - {id:1, name: 'g'}, - {id:2, name: 'kg'}, - {id:3, name: 'ml'}, - {id:4, name: 'l'}, - ] -}) -const materialDialogRef = ref(); - -const addMaterialItem = () => { - selectMaterialState.materialList.push({stuffId: null, stuffUseCount: null, stuffName: '',stuffCode:'',stuffType: '', stuffStorage: '', stuffUnit: ''}); -}; - -watchEffect(() => { - selectMaterialState.materialList = props.data as Array<AllMaterialListType> - selectMaterialState.disabled = props.disabled -}); - -const deleteMaterialItem = (index: number) => { - selectMaterialState.materialList.splice(index,1); -}; - -const addNewMaterial = (title: string, value: MaterialType) => { - materialDialogRef.value.showMaterialDialog(title, value); -} - -const checkAllMaterial = () => { - getAllMaterial() -} - -const getAllMaterial = async () => { - let res = await materialApi().getAllMaterial(); - if(res.data.code === 100){ - selectMaterialState.allMaterialList = JSON.parse(JSON.stringify(res.data.data)); - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }) - } -}; - -const giveOtherMaterialValue = (value: number, index:number) => { - const data = selectMaterialState.allMaterialList.find(item => item.id === value) as AllMaterialListType - selectMaterialState.materialList[index] = { - stuffId: data.id, - stuffUseCount: data.stuffUseCount, - stuffName: data.stuffName, - stuffCode: data.stuffCode, - stuffType: data.stuffType, - stuffStorage: data.stuffStorage, - stuffUnit: data.stuffUnit - }; -}; - -const formatList = (formatList: Array<AllMaterialListType>) => { - selectMaterialState.materialList = formatList -}; - -defineExpose({ - dataList: selectMaterialState.materialList, - formatList -}); - - -onMounted(() => { - getAllMaterial(); -}); -</script> - -<style scoped lang="scss"> -.site-layout-background { - background: #fff; -} - -.report-table { - width: 100%; - border-collapse: collapse; - border: 1px solid #337ecc; - margin: 20px 0; - - th { - padding: 10px 0; - border: 1px solid #337ecc; - border-left: none; - } - - tr { - width: 100%; - height: 44px; - line-height: 42px; - border-bottom: 1px solid #ccc; - - &:last-of-type { - border-bottom: none; - } - - td { - border-right: 1px solid #ccc; - display: inline-block; - height: 44px; - vertical-align: middle; - text-align: center; - line-height: 42px; - - &:last-of-type { - border-right: none; - } - - &.required { - &::before { - content: "*"; - display: inline-block; - color: red; - } - } - - &.w-14 { - width: calc((100/7)/100 * 100%); - } - - &.w-16 { - width: calc((100/6)/100 * 100%); - } - - &.w-18 { - width: 16.59%; - } - - &.w-20 { - width: 20%; - } - - &.w-25 { - width: 25%; - } - - &.w-50 { - width: 50%; - } - - &.w-75 { - width: 75%; - } - - .ant-input { - height: 100%; - border: none; - background: #f5f7fa; - } - - .ant-picker { - width: 100%; - height: 100%; - } - :deep(.el-input__wrapper ){ - box-shadow: none; - } - } - } - - .b-font { - font-size: 16px; - font-weight: bolder; - } -} - -.m-color { - color: #0c4995; -} -</style> diff --git a/src/views/experiment/project/components/selectPerson.vue b/src/views/experiment/project/components/selectPerson.vue deleted file mode 100644 index 6677595..0000000 --- a/src/views/experiment/project/components/selectPerson.vue +++ /dev/null @@ -1,244 +0,0 @@ -<template> - <tr class="m-color b-font" style="text-align: center">实验人员</tr> - <tr> - <td class="w-14 m-color required">姓名</td> - <td class="w-14 m-color">年龄</td> - <td class="w-14 m-color">性别</td> - <td class="w-14 m-color">专业</td> - <td class="w-14 m-color">部门</td> - <td class="w-14 m-color">相关资质</td> - <td class="w-14 m-color">操作</td> - </tr> - <tr v-for="(item,index) in selectPersonState.personList" :key="index"> - <td class="w-14"> - <el-select filterable :disabled="selectPersonState.disabled" v-model="item.personId" @change="giveOtherPersonValue($event, index)" @focus="checkAllPerson($event, index)"> - <el-option - v-for="item in selectPersonState.allPersonList" - :key="item.id" - :value="item.id" - :label="item.personName" - > - </el-option> - </el-select> - </td> - <td class="w-14"> - <el-input disabled v-model="item.personAge" /> - </td> - <td class="w-14"> -<!-- <el-input disabled v-model="item.personGender" />--> - <div>{{item.personGender == 1 ? '男' : item.personGender == 2 ? '女' : ''}}</div> - </td> - <td class="w-14"> - <el-input disabled v-model="item.personMajor" /> - </td> - <td class="w-14"> - <el-input disabled v-model="item.depName" /> - </td> - <td class="w-14"> - <el-input disabled v-model="item.aptitude" /> - </td> - <td class="w-14"> - <el-button type="danger" :disabled="selectPersonState.disabled" @click="deletePersonItem(index)">删除</el-button> - </td> - </tr> - <tr style="text-align: center"> - <el-button :disabled="selectPersonState.disabled" type="primary" shape="round" @click="addPersonItem()"> - 添加现有实验人员 - </el-button> - <el-button :disabled="selectPersonState.disabled" shape="round" @click="addNewPerson('新增', {})"> - 新增实验人员配置 - </el-button> - </tr> - <person-dialog ref="personDialogRef"></person-dialog> -</template> - -<script setup lang="ts"> -import {defineAsyncComponent, nextTick, onMounted, reactive, ref, watchEffect} from "vue"; -import { personApi } from "/@/api/basic/person"; -import {ElMessage} from "element-plus"; - -let props = defineProps({ - disabled: Boolean, - data: Array<AllPersonListType> - -}); - -const personDialog = defineAsyncComponent(() => import('/@/views/basic/person/components/personDialog.vue')); - -const selectPersonState = reactive<SelectPersonType>({ - disabled: false, - personList: [], - allPersonList: [ - ], -}); - -const personDialogRef = ref(); - -watchEffect(() => { - selectPersonState.personList = props.data as Array<AllPersonListType> - selectPersonState.disabled = props.disabled -}); - -const addPersonItem = () => { - selectPersonState.personList.push({personId: null, personName: null, personAge: null, personGender:'',personMajor:'',depName:'',phone:'',aptitude:'',training:''}); -}; - -const addNewPerson = (title: string, value: PersonType) => { - personDialogRef.value.showPersonDialog(title, value); -} - -const checkAllPerson = () => { - getAllPersonList() -} - -const deletePersonItem = (index: number) => { - selectPersonState.personList.splice(index,1); -}; - -const getAllPersonList = async () => { - let res = await personApi().getAllPerson(); - if(res.data.code === 100){ - selectPersonState.allPersonList = JSON.parse(JSON.stringify(res.data.data)); - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }) - } -}; - -const giveOtherPersonValue = (value: number, index:number) => { - // selectPersonState.personList[index] = selectPersonState.allPersonList.find(item => item.id === value) as AllPersonListType - const data = selectPersonState.allPersonList.find(item => item.id === value) as AllPersonListType - selectPersonState.personList[index] = { - personId: data.id, - personName: data.personName, - personAge: data.personAge, - personGender: data.personGender, - personMajor: data.personMajor, - depName: data.depName, - phone: data.phone, - aptitude: data.aptitude, - training: data.training, - }; -}; - -const formatList = (formatList: Array<AllPersonListType>) => { - nextTick(() => { - selectPersonState.personList = formatList - }) - -}; - -defineExpose({ - formatList, - dataList: selectPersonState.personList, -}); - -onMounted(() => { - getAllPersonList(); -}); -</script> - -<style scoped lang="scss"> -.site-layout-background { - background: #fff; -} - -.report-table { - width: 100%; - border-collapse: collapse; - border: 1px solid #337ecc; - margin: 20px 0; - - th { - padding: 10px 0; - border: 1px solid #337ecc; - border-left: none; - } - - tr { - width: 100%; - height: 44px; - line-height: 42px; - border-bottom: 1px solid #ccc; - - &:last-of-type { - border-bottom: none; - } - - td { - border-right: 1px solid #ccc; - display: inline-block; - height: 44px; - vertical-align: middle; - text-align: center; - line-height: 42px; - - &:last-of-type { - border-right: none; - } - - &.required { - &::before { - content: "*"; - display: inline-block; - color: red; - } - } - - :deep(.el-input__wrapper ){ - box-shadow: none; - } - - &.w-14 { - width: calc((100/7)/100 * 100%); - } - - &.w-16 { - width: calc((100/6)/100 * 100%); - } - - &.w-18 { - width: 16.59%; - } - - &.w-20 { - width: 20%; - } - - &.w-25 { - width: 25%; - } - - &.w-50 { - width: 50%; - } - - &.w-75 { - width: 75%; - } - - .ant-input { - height: 100%; - border: none; - background: #f5f7fa; - } - - .ant-picker { - width: 100%; - height: 100%; - } - } - } - - .b-font { - font-size: 16px; - font-weight: bolder; - } -} - -.m-color { - color: #0c4995; -} -</style> diff --git a/src/views/experiment/project/components/selectRoom.vue b/src/views/experiment/project/components/selectRoom.vue deleted file mode 100644 index f2a9cc3..0000000 --- a/src/views/experiment/project/components/selectRoom.vue +++ /dev/null @@ -1,268 +0,0 @@ -<template> - <tr class="m-color b-font" style="text-align: center">实验场所</tr> - <tr> - <td class="w-14 m-color required">场所名称</td> - <td class="w-14 m-color">所在楼栋</td> - <td class="w-14 m-color">房间</td> - <td class="w-14 m-color">有无消防设施</td> - <td class="w-14 m-color">有无隔断</td> - <td class="w-14 m-color">场所性质</td> - <td class="w-14 m-color">操作</td> - </tr> - <tr v-for="(item,index) in selectRoomState.roomList" :key="index"> - <td class="w-14"> - <el-select :disabled="selectRoomState.disabled" filterable v-model="item.siteId" @change="giveOtherRoomValue($event, index)" @focus="checkAllRoom($event, index)"> - <el-option - v-for="item in selectRoomState.allRoomList" - :key="item.id" - :value="item.id" - :label="item.siteName" - > - </el-option> - </el-select> - </td> - <td class="w-14"> - <el-input disabled v-model="item.floor" /> - </td> - <td class="w-14"> - <el-input disabled v-model="item.room" /> - </td> - <td class="w-14"> -<!-- <el-input :disabled="selectRoomState.disabled" v-model="item.stuffStorage" />--> - <div>{{item.fireFacilities== 1 ? '有' : item.fireFacilities== 2 ? '无' : ''}}</div> - </td> - <td class="w-14"> -<!-- <el-input :disabled="selectRoomState.disabled" v-model="item.stuffUnit" />--> - <div>{{item.partitionStatus == 1 ? '有' : item.partitionStatus == 2 ? '无' : ''}}</div> - </td> - <td class="w-14"> -<!-- <el-input type="number" :disabled="selectRoomState.disabled" v-model="item.stuffUseCount" />--> - <div>{{item.siteType}}</div> - </td> - <td class="w-14"> - <el-button type="danger" :disabled="selectRoomState.disabled" @click="deleteRoomItem(index)">删除</el-button> - </td> - </tr> - <tr style="text-align: center"> - <el-button :disabled="selectRoomState.disabled" type="primary" shape="round" @click="addMaterialItem()"> - 添加现有实验场所 - </el-button> - <el-button :disabled="selectRoomState.disabled" shape="round" @click="addNewRoom('新增', {})"> - 新增实验场所配置 - </el-button> - </tr> - <room-dialog ref="roomDialogRef" :memberList="selectRoomState.memberList" :typeList="selectRoomState.typeList"></room-dialog> -</template> - -<script setup lang="ts"> -import {defineAsyncComponent, onMounted, reactive, ref, watchEffect} from "vue"; -import { materialApi } from "/@/api/basic/material"; -import {ElMessage} from "element-plus"; -import {roomApi} from "/@/api/basic/room"; -import {personApi} from "/@/api/basic/person"; -let props = defineProps({ - disabled: Boolean, - data: Array<roomListType> -}); -const roomDialog = defineAsyncComponent(() => import('/@/views/basic/room/components/roomDialog.vue')); -const selectRoomState = reactive<SelectRoomType>({ - disabled: false, - roomList: [], - allRoomList: [], - memberList: [], - typeList: [], - specialDeviceList: [ - {id: 1, name: '是'}, - {id:2, name: '否'} - ], - stuffStorageList: [ - {id:1, name: '智能试剂柜'}, - {id:2, name: '普通储存柜'}, - ], - stuffUnitList: [ - {id:1, name: 'g'}, - {id:2, name: 'kg'}, - {id:3, name: 'ml'}, - {id:4, name: 'l'}, - ] -}) -const roomDialogRef = ref(); - -const getAllMember = async ()=>{ - const res = await personApi().getAllPerson(); - if(res.data.code === 100){ - selectRoomState.memberList = res.data.data - } -} - -const getAllType = async ()=>{ - const res = await roomApi().getAllType(); - if(res.data.code === 100){ - selectRoomState.typeList = res.data.data - } -} - -const addMaterialItem = () => { - selectRoomState.roomList.push({siteId: null, siteName: '', floor: '',room:'',fireFacilities: null, partitionStatus: null, siteType: ''}); -}; - -watchEffect(() => { - selectRoomState.roomList = props.data as Array<roomListType> - selectRoomState.disabled = props.disabled -}); - -const deleteRoomItem = (index: number) => { - selectRoomState.roomList.splice(index,1); -}; - -const addNewRoom = (title: string, value: RoomType) => { - roomDialogRef.value.showroomDialog(title, value, selectRoomState.specialDeviceList); -} - -const checkAllRoom = () => { - getAllRoom() -} - -const getAllRoom = async () => { - let res = await roomApi().getAllRoom(); - if(res.data.code === 100){ - selectRoomState.allRoomList = JSON.parse(JSON.stringify(res.data.data)); - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }) - } -}; - -const giveOtherRoomValue = (value: number, index:number) => { - const data = selectRoomState.allRoomList.find(item => item.id === value) as allRoomListType - selectRoomState.roomList[index] = { - siteId: data.id, - siteName: data.siteName, - floor: data.floor, - room: data.room, - fireFacilities: data.fireFacilities, - partitionStatus: data.partitionStatus, - siteType: data.siteType - }; -}; - -const formatList = (formatList: Array<roomListType>) => { - selectRoomState.roomList = formatList -}; - -defineExpose({ - dataList: selectRoomState.roomList, - formatList -}); - - -onMounted(() => { - getAllMember() - getAllType() - getAllRoom() -}); -</script> - -<style scoped lang="scss"> -.site-layout-background { - background: #fff; -} - -.report-table { - width: 100%; - border-collapse: collapse; - border: 1px solid #337ecc; - margin: 20px 0; - - th { - padding: 10px 0; - border: 1px solid #337ecc; - border-left: none; - } - - tr { - width: 100%; - height: 44px; - line-height: 42px; - border-bottom: 1px solid #ccc; - - &:last-of-type { - border-bottom: none; - } - - td { - border-right: 1px solid #ccc; - display: inline-block; - height: 44px; - vertical-align: middle; - text-align: center; - line-height: 42px; - - &:last-of-type { - border-right: none; - } - - &.required { - &::before { - content: "*"; - display: inline-block; - color: red; - } - } - - &.w-14 { - width: calc((100/7)/100 * 100%); - } - - &.w-16 { - width: calc((100/6)/100 * 100%); - } - - &.w-18 { - width: 16.59%; - } - - &.w-20 { - width: 20%; - } - - &.w-25 { - width: 25%; - } - - &.w-50 { - width: 50%; - } - - &.w-75 { - width: 75%; - } - - .ant-input { - height: 100%; - border: none; - background: #f5f7fa; - } - - .ant-picker { - width: 100%; - height: 100%; - } - :deep(.el-input__wrapper ){ - box-shadow: none; - } - } - } - - .b-font { - font-size: 16px; - font-weight: bolder; - } -} - -.m-color { - color: #0c4995; -} -</style> diff --git a/src/views/experiment/project/index.ts b/src/views/experiment/project/index.ts deleted file mode 100644 index 5235c46..0000000 --- a/src/views/experiment/project/index.ts +++ /dev/null @@ -1,222 +0,0 @@ -declare interface ProjectStateType { - projectData?: Array<ProjectType> - developData?: Array<ProjectType> - searchQuery: { - pageIndex: number, - pageSize: number, - searchParams: { - experimentName: string, - experimentType: null | number, - } - }, - total: 0, - experimentTypeList: Type [] - allRoomList: RoomType [] -} - -declare interface ProjectType { - id?: number | null, - liabilityUserId?: number | null, - experimentCode: string, - experimentName: string, -} - - -declare interface Type { - id: number, - name: string, -} - -declare interface ProjectDialogType { - title: string, - disabled: boolean, - projectDialogVisible: boolean, - projectForm: { - id: null | number, - experimentName: string, - experimentType: null | number, - liabilityUserId: null | number, - safeLiabilityUser: string - liabilityUserPhone: string, - safeLiabilityUserPhone: string, - sisStatus?: null | number, - safeInformationSystem?: string, - dep: string, - experimentStep: string, - experimentMethod: string, - process: string, - keyProcess: string, - measure: string, - timeout: null | number, - timeoutManager: string, - closed: null | number, - unclosedManager: string, - explosionProof: string, - fireProof: string, - poisonProof: string, - safeManagerMethod: string, - emergencyList: Array<emergencyListType>, - partitionCondition: null | number, - note: string, - startTime?: string, - createExperimentTime: string - persons: SelectPersonType [], - siteList: SelectRoomType [], - deviceList: SelectEquipmentType [], - stuffList: SelectMaterialType [], - hazardousWasteList: SelectDangerType [] - }, - projectFormRules: { - - }, - allPersonList: Array<AllPersonListType> - systemPersonList: Array<AllPersonListType> - allRoomList: Array<RoomType> -} - -declare interface SelectDangerType { - disabled: boolean - wasteList: Array<WasteType> - classifyList: Array<Type> - wasteStorageList: Array<Type> -} - -declare interface WasteType { - classify: null | number, - wasteStorage: null | number, - handAmount: null | number, -} - - -declare interface SelectPersonType { - disabled: boolean - personList: Array<AllPersonListType> - allPersonList: Array<AllPersonListType> -} - -declare interface AllPersonListType { - id?: null | number, - personId?: null | number, - personName: null, - personAge: null, - personGender:'', - personMajor:'', - depName:'', - phone:'', - aptitude:'', - training:'' -} - -declare interface NewPersonListType { - depId: number | null - depName: string - id: number - idSerial: string - idType: number | null - name: string - phone: string - realName: string -} - -declare interface SelectEquipmentType { - disabled: boolean - equipmentList: Array<AllEquipmentListType>, - allEquipmentList: Array<AllEquipmentListType>, - equipmentTypeList: Array<any>, - specialDeviceList: Array<Type> -} - -declare interface AllEquipmentListType { - id?: null | number, - deviceId?: null | number, - deviceUseCount: null | number, - deviceCode: string, - deviceName: string, - devicePower: string, - specialDevice: string, - deviceUnit?: null | number, - safeProtect?: null | number -} - - -declare interface SelectMaterialType { - disabled: boolean - materialList: Array<AllMaterialListType>, - allMaterialList: Array<AllMaterialListType>, - stuffTypeList: Array<stuffType> - stuffStorageList: Array<stuffType> - stuffUnitList: Array<stuffType> -} - -declare interface SelectEmergencyType { - disabled: boolean - emergencyList: Array<emergencyListType> -} - -declare interface emergencyListType { - emergencyPlanName: string, - emergencyDrillStatus: string, - emergencyDrill: string, - emergencyPlan: string -} - -declare interface SelectRoomType { - disabled: boolean - roomList: Array<roomListType>, - allRoomList: Array<allRoomListType>, - specialDeviceList: Array<stuffType> - memberList: Array<any> - typeList: Array<any> - stuffStorageList: Array<stuffType> - stuffUnitList: Array<stuffType> -} - -declare interface roomListType { - siteId: null | number, - siteName: string, - floor: string, - room: string, - fireFacilities: null | number, - partitionStatus: null | number, - siteType: string, -} - -declare interface allRoomListType { - id: null | number, - siteName: string, - floor: string, - room: string, - fireFacilities: null | number, - partitionStatus: null | number, - siteType: string, -} - -declare interface stuffType { - id: null | number, - name: string -} - -declare interface AllMaterialListType { - id?: null | number, - stuffId?: null | number, - stuffUseCount: null | number, - stuffName: string, - stuffCode:string, - stuffType: string, - stuffStorage: string, - stuffUnit: string -} - -declare interface ApplyStartDialogType { - title: string, - applyStartDialogVisible: boolean, - applyStartForm: { - id: number | null, - sisStatus: number | null, - safeInformationSystem: string, - startTime: string, - }, - applyStartFormRules: { - - }, -} diff --git a/src/views/experiment/project/index.vue b/src/views/experiment/project/index.vue deleted file mode 100644 index 2918ffa..0000000 --- a/src/views/experiment/project/index.vue +++ /dev/null @@ -1,401 +0,0 @@ -<template> - <div class="home-container"> - <div style="height: 100%"> - <el-row class="homeCard"> - <div class="basic-line"> - <span>实验名称:</span> - <el-input v-model="projectState.searchQuery.searchParams.experimentName" clearable filterable class="input-box" placeholder="实验名称"> - </el-input> - </div> - <div class="basic-line"> - <span>实验类型:</span> - <el-select v-model="projectState.searchQuery.searchParams.experimentType" clearable filterable class="input-box" placeholder="实验类型"> - <el-option v-for="item in projectState.experimentTypeList" :key="item.id" :label="item.name" :value="item.id"></el-option> - </el-select> - </div> - <div style="padding-bottom: 10px"> - <el-button type="primary" @click="getProjectData">查询</el-button> - <el-button plain @click="reset">重置</el-button> - </div> - </el-row> - <div class="homeCard"> - <div class="main-card"> - <el-row class="cardTop"> - <el-col :span="12" class="mainCardBtn"> - <el-button type="primary" :icon="Plus" size="default" @click="openProjectDialog('新增', {})">录入实验信息</el-button> - <!-- <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button>--> - </el-col> -<!-- <el-button type="primary" :icon="Refresh" size="default" />--> - </el-row> - <el-table ref="multipleTableRef" :data="projectState.projectData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }"> - <el-table-column prop="experimentCode" label="实验编号"/> - <el-table-column prop="experimentName" label="实验名称"/> - <el-table-column prop="createExperimentTime" label="立项时间" show-overflow-tooltip> - <template #default="scope"> - <span>{{scope.row.createExperimentTime?scope.row.createExperimentTime.substring(0,16):'--'}}</span> - </template> - </el-table-column> -<!-- <el-table-column prop="startTime" label="开展时间" show-overflow-tooltip>--> -<!-- <template #default="scope">--> -<!-- <span>{{scope.row.startTime?scope.row.startTime.substring(0,16):'--'}}</span>--> -<!-- </template>--> -<!-- </el-table-column>--> - <el-table-column prop="liabilityUser" label="负责人"/> - <el-table-column prop="siteList" label="实验场所" show-overflow-tooltip> - <template #default="scope"> - <span>{{scope.row.siteList.map(i=>i.siteName).join(',')}}</span> - </template> - </el-table-column> - <el-table-column prop="experimentType" label="实验类别"> - <template #default="scope"> - <span>{{projectState.experimentTypeList.find(i=>i.id == scope.row.experimentType)?.name}}</span> - </template> - </el-table-column> - <el-table-column prop="status" label="评估申请"> - <template #default="scope"> - <span>{{scope.row.status == 1?'未申请':scope.row.status == 2?'已申请':'--'}}</span> - </template> - </el-table-column> - <el-table-column prop="status" label="评估申请时间" show-overflow-tooltip> - <template #default="scope"> - <span>{{scope.row.assessApplyTime?scope.row.assessApplyTime.substring(0,16):'--'}}</span> - </template> - </el-table-column> - <el-table-column prop="stage" label="评估状态"> - <template #default="scope"> - <el-tag :type="scope.row.stage == 4?'success':scope.row.stage == 1?'info':''"> - {{scope.row.stage == 1?'未评估':scope.row.stage == 2?'评估中':scope.row.stage == 3?'评估完成':scope.row.stage == 4?'生成报告':'--'}} - </el-tag> - </template> - </el-table-column> - <el-table-column prop="assessLevel" label="风险等级"> - <template #default="scope"> - <el-tag :type="scope.row.assessLevel == 4?'danger':scope.row.assessLevel == 3 || scope.row.assessLevel == 2?'warning':''"> - {{scope.row.assessLevel == 1?'重大风险':scope.row.assessLevel == 2?'较大风险':scope.row.assessLevel == 3?'一般风险':scope.row.assessLevel == 4?'低风险':'--'}} - </el-tag> - </template> - </el-table-column> -<!-- <el-table-column prop="createTime" label="创建时间" show-overflow-tooltip></el-table-column>--> -<!-- <el-table-column prop="createByUserName" label="创建人" show-overflow-tooltip></el-table-column>--> -<!-- <el-table-column prop="updateTime" label="最后修改时间" show-overflow-tooltip></el-table-column>--> -<!-- <el-table-column prop="updateByUserName" label="最后修改人" show-overflow-tooltip></el-table-column>--> - <el-table-column label="操作" width="250" fixed="right"> - <template #default="scope"> - <el-button size="small" text type="primary" :icon="View" @click="openProjectDialog('查看', scope.row)">查看</el-button> - <el-button size="small" text type="primary" :icon="View" v-if="scope.row.stage == 4" @click="openReportDialog('查看',scope.row)">查看评估报告</el-button> - <el-button size="small" text type="primary" :icon="Edit" @click="applyStart('申请开展', scope.row)">转为已开展</el-button> - <el-button size="small" :disabled="scope.row.status == 2 ? true : false" text type="primary" :icon="Edit" @click="applyAccess( scope.row)">申请评估</el-button> - <el-button size="small" type="warning" v-if="scope.row.rectifyStatus == 1" text :icon="Edit" @click="openProjectDialog('整改', scope.row)">整改</el-button> - <el-button size="small" text type="danger" :icon="Delete" :disabled="scope.row.stage !== 1" @click="onDelProject(scope.row)">删除</el-button> - </template> - </el-table-column> - </el-table> - <div class="pageBtn"> - <el-pagination @size-change="onHandleSizeChange" @current-change="onHandleCurrentChange" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="projectState.searchQuery.pageIndex" background v-model:page-size="projectState.searchQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="projectState.total" class="page-position"> </el-pagination> - </div> - </div> - </div> - </div> - <project-dialog ref="ProjectDialogRef" @refresh="getProjectData"></project-dialog> -<!-- <apply-start ref="ApplyStartRef"></apply-start>--> - <test ref="ApplyStartRef" @refresh="getProjectData"></test> - <report-dialog ref="ReportDialogRef"></report-dialog> - </div> -</template> - -<script setup lang="ts"> -import {defineAsyncComponent, onMounted, reactive, ref} from "vue"; -import {projectApi} from "/@/api/experiment/project"; -import {ElMessage, ElMessageBox} from "element-plus"; -import { View,Edit, Plus, Delete } from '@element-plus/icons-vue'; -import {roomApi} from "/@/api/basic/room"; -const ReportDialog = defineAsyncComponent(() => import('../../analyse/assessApply/components/reportDialog.vue')); -const ProjectDialog = defineAsyncComponent(() => import('./components/projectDialog.vue')); -const Test = defineAsyncComponent(() => import('./components/applyDialog.vue')) -const ProjectDialogRef = ref() -const ApplyStartRef = ref() -const ReportDialogRef = ref() -const projectState = reactive<ProjectStateType>({ - projectData: [], - searchQuery: { - pageIndex: 1, - pageSize: 10, - searchParams: { - experimentName: '', - experimentType: null, - } - }, - total: 0, - experimentTypeList: [ - {id: 1, name: '化学类'}, - {id: 2, name: '生物类'}, - {id: 3, name: '辐射类'}, - {id: 4, name: '机电类'}, - {id: 5, name: '特种设备类'}, - {id: 6, name: '其它类'}, - ], - allRoomList: [] -}) - -const getProjectData = async () => { - let res = await projectApi().getProjectByList(projectState.searchQuery); - if(res.data.code === 100){ - projectState.projectData = res.data.data; - projectState.total = res.data.total; - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } -}; - -const openProjectDialog = (title: string, value: ProjectType) => { - ProjectDialogRef.value.showProjectDialog(title, value, projectState.allRoomList); -}; - -const openReportDialog = (title: string,value: ProjectType) =>{ - ReportDialogRef.value.showReportDialog(title, value, projectState.allRoomList); -} - -const applyStart = (title: string, value: ProjectType) => { - ApplyStartRef.value.showApplyStartDialog(value); -}; - -const applyAccess = (val: ProjectType) => { - ElMessageBox.confirm(`此操作将申请评估该实验:“${val.experimentName}”,是否继续?`, '提示', { - confirmButtonText: '确认', - cancelButtonText: '取消', - type: 'warning' - }) - .then(async () => { - let res = await projectApi().accessProject([val.id]); - if (res.data.code === 100) { - ElMessage({ - type: 'success', - duration: 2000, - message: '申请成功' - }); - await getProjectData(); - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - }) - .catch((error) => { - }); -} - -const onDelProject = (val: ProjectType) => { - ElMessageBox.confirm(`此操作将永久删除该实验:“${val.experimentName}”,是否继续?`, '提示', { - confirmButtonText: '确认', - cancelButtonText: '取消', - type: 'warning' - }) - .then(async () => { - let res = await projectApi().deleteProjectById({ id: val.id }); - if (res.data.code === 100) { - ElMessage({ - type: 'success', - duration: 2000, - message: '删除成功' - }); - await getProjectData(); - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - }) - .catch((error) => { - }); -} - -const onHandleSizeChange = (val: number) => { - projectState.searchQuery.pageSize = val; - getProjectData(); -}; - -const onHandleCurrentChange = (val: number) => { - projectState.searchQuery.pageIndex = val; - getProjectData(); -}; - -const reset = () => { - projectState.searchQuery = { - pageIndex: 1, - pageSize: 10, - searchParams: { - experimentName: '', - experimentType: null, - } - } -}; - -const getRoomData = async () => { - let res = await roomApi().getAllRoom(); - if(res.data.code === 100){ - projectState.allRoomList = JSON.parse(JSON.stringify(res.data.data)); - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } -}; - -onMounted(() => { - getProjectData(); - getRoomData(); -}) - -</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/home/dialog.vue b/src/views/home/dialog.vue deleted file mode 100644 index b1da6ca..0000000 --- a/src/views/home/dialog.vue +++ /dev/null @@ -1,272 +0,0 @@ -<template> - <div class="system-menu-dialog-container"> - <el-dialog :title="state.dialog.title" v-model="state.dialog.isShowDialog" width="769px"> - <el-form ref="menuDialogFormRef" :model="state.ruleForm" size="default" label-width="80px"> - <el-row :gutter="35"> - <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> - <el-form-item label="上级菜单"> - <el-cascader - :options="state.menuData" - :props="{ emitPath: false, checkStrictly: true, value: 'id', label: 'title' }" - placeholder="请选择上级菜单" - clearable - class="w100" - @change="test" - v-model="state.ruleForm.parentId"> - </el-cascader> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> - <el-form-item label="菜单名称"> - <el-input v-model="state.ruleForm.meta.title" placeholder="格式:message.router.xxx" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> - <el-form-item label="路由名称"> - <el-input v-model="state.ruleForm.name" placeholder="路由中的 name 值" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> - <el-form-item label="路由路径"> - <el-input v-model="state.ruleForm.path" placeholder="路由中的 path 值" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> - <el-form-item label="重定向"> - <el-input v-model="state.ruleForm.redirect" placeholder="请输入路由重定向" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> - <el-form-item label="菜单图标"> - <IconSelector placeholder="请输入菜单图标" v-model="state.ruleForm.meta.icon" /> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> - <el-form-item label="组件路径"> - <el-input v-model="state.ruleForm.component" placeholder="组件路径" clearable></el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> - <el-form-item label="链接地址"> - <el-input - v-model="state.ruleForm.meta.isLink" - placeholder="外链/内嵌时链接地址(http:xxx.com)" - clearable - > - </el-input> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> - <el-form-item label="权限标识"> - <el-select v-model="state.ruleForm.meta.roles" multiple placeholder="取角色管理" clearable class="w100"> - <el-option v-for="item in state.roleList" :key="item.id" :value="item.id" :label="item.name"></el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> - <el-form-item label="菜单排序"> - <el-input-number v-model="state.ruleForm.priority" controls-position="right" placeholder="请输入排序" class="w100" /> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> - <el-form-item label="是否隐藏"> - <el-radio-group v-model="state.ruleForm.meta.isHide"> - <el-radio :label="true">隐藏</el-radio> - <el-radio :label="false">不隐藏</el-radio> - </el-radio-group> - </el-form-item> - </el-col> - </el-row> - </el-form> - <template #footer> - <span class="dialog-footer"> - <el-button @click="onCancel" size="default">取 消</el-button> - <el-button type="primary" @click="onSubmit" size="default">{{ state.dialog.submitTxt }}</el-button> - </span> - </template> - </el-dialog> - </div> -</template> - -<script setup lang="ts" name="systemMenuDialog"> -import { defineAsyncComponent, reactive, onMounted, ref } from 'vue'; -import { storeToRefs } from 'pinia'; -import { useRoutesList } from '/@/stores/routesList'; -import { i18n } from '/@/i18n/index'; -import {ElMessage} from "element-plus"; -import { useMenuApi } from "/@/api/systemManage/menu"; -import {useRoleApi} from "/@/api/systemManage/role"; -// import { setBackEndControlRefreshRoutes } from "/@/router/backEnd"; - -// 定义子组件向父组件传值/事件 -const emit = defineEmits(['refresh']); - -// 引入组件 -const IconSelector = defineAsyncComponent(() => import('/@/components/iconSelector/index.vue')); - -// 定义变量内容 -const menuDialogFormRef = ref(); -const stores = useRoutesList(); -const { routesList } = storeToRefs(stores); -const state = reactive({ - roleList:[], - // 参数请参考 `/src/router/route.ts` 中的 `dynamicRoutes` 路由菜单格式 - ruleForm: { - id: null, - parentId: null, - description: '', - name: '', - component: '', - priority: 0, - path: '', - redirect: '', - publicable: null, - meta: { - title: '', - icon: '', - isHide: false, - isKeepAlive: true, - isAffix: false, - isLink: '', - isIframe: false, - roles: '', - }, - }, - menuData: [] as RouteItems [], // 上级菜单数据 - dialog: { - isShowDialog: false, - type: '', - title: '', - submitTxt: '', - }, -}); - -const test = () => { - console.log(state.menuData) -} - -// 获取 pinia 中的路由 -const getMenuData = (routes: RouteItems) => { - const arr: RouteItems = []; - routes.map((val: RouteItem) => { - val['title'] = i18n.global.t(val.meta?.title as string); - arr.push({ ...val }); - if (val.children) getMenuData(val.children); - }); - return arr; -}; -// 打开弹窗 -const openDialog = (type: string, row?: any) => { - if (type === 'edit') { - for(let i in state.ruleForm){ - state.ruleForm[i] = row[i] - } - state.dialog.title = '修改菜单'; - state.dialog.submitTxt = '修 改'; - } else { - state.dialog.title = '新增菜单'; - state.dialog.submitTxt = '新 增'; - state.ruleForm = { - id: null, - parentId: null, - description: '', - name: '', - component: '', - priority: 0, - path: '', - redirect: '', - publicable: null, - meta: { - title: '', - icon: '', - isHide: false, - isKeepAlive: true, - isAffix: false, - isLink: '', - isIframe: false, - roles: '', - }, - } - // 清空表单,此项需加表单验证才能使用 - // nextTick(() => { - // menuDialogFormRef.value.resetFields(); - // }); - } - state.dialog.type = type; - state.dialog.isShowDialog = true; -}; -// 关闭弹窗 -const closeDialog = () => { - state.dialog.isShowDialog = false; -}; - -// 取消 -const onCancel = () => { - closeDialog(); -}; -// 提交 -const onSubmit = () => { - menuDialogFormRef.value.validate(async (valid: boolean) => { - if(valid){ - if(state.dialog.title === '新增菜单'){ - let res = await useMenuApi().addMenu(state.ruleForm) - if(res.data.code === 100){ - emit('refresh') - state.dialog.isShowDialog = false; - ElMessage({ - type: 'success', - message: '新增成功' - }) - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg, - }); - } - }else{ - let res = await useMenuApi().modMenu(state.ruleForm) - if(res.data.code === 100){ - emit('refresh') - state.dialog.isShowDialog = false; - ElMessage({ - type: 'success', - message: '编辑成功' - }) - }else{ - ElMessage({ - type: 'warning', - message: res.data.msg, - }); - } - } - }else{ - ElMessage({ - type: 'warning', - message: '请完善基本信息', - }); - } - }) -}; - -const getRoles = async () => { - let res = await useRoleApi().getRoleList() - if(res.data.code === 100){ - state.roleList = res.data.data - }else{ - ElMessage({ - type: 'warning', - message: res.data.message - }) - } -} -// 页面加载时 -onMounted(() => { - state.menuData = getMenuData(routesList.value); - getRoles() -}); - -// 暴露变量 -defineExpose({ - openDialog, -}); -</script> diff --git a/src/views/home/index.ts b/src/views/home/index.ts deleted file mode 100644 index 9742bbb..0000000 --- a/src/views/home/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -interface EquipmentStateType { - -} diff --git a/src/views/home/index.vue b/src/views/home/index.vue deleted file mode 100644 index 91d40aa..0000000 --- a/src/views/home/index.vue +++ /dev/null @@ -1,144 +0,0 @@ -<template> - <div class="system-menu-container layout-pd"> - <el-card shadow="hover"> - <div class="system-menu-search mb15"> - <el-input size="default" placeholder="请输入菜单名称" style="max-width: 180px"> </el-input> - <el-button size="default" type="primary" class="ml10"> - <el-icon> - <ele-Search /> - </el-icon> - 查询 - </el-button> - <el-button size="default" type="success" class="ml10" @click="onOpenAddMenu"> - <el-icon> - <ele-FolderAdd /> - </el-icon> - 新增菜单 - </el-button> - </div> - <el-table - :data="state.tableData.data" - v-loading="state.tableData.loading" - style="width: 100%" - row-key="path" - :tree-props="{ children: 'children', hasChildren: 'hasChildren' }" - > - <el-table-column label="菜单名称" show-overflow-tooltip> - <template #default="scope"> - <SvgIcon :name="scope.row.meta.icon" /> - <span class="ml10">{{ $t(scope.row.meta.title) }}</span> - </template> - </el-table-column> - <el-table-column prop="path" label="路由路径" show-overflow-tooltip></el-table-column> - <el-table-column label="组件路径" show-overflow-tooltip> - <template #default="scope"> - <span>{{ scope.row.component }}</span> - </template> - </el-table-column> - <el-table-column label="权限标识" show-overflow-tooltip> - <template #default="scope"> - <span>{{ scope.row.meta.roles }}</span> - </template> - </el-table-column> - <el-table-column label="排序" show-overflow-tooltip width="80"> - <template #default="scope"> - {{ scope.$index }} - </template> - </el-table-column> - <el-table-column label="类型" show-overflow-tooltip width="80"> - <template #default="scope"> - <el-tag type="success" size="small">{{ scope.row.xx }}菜单</el-tag> - </template> - </el-table-column> - <el-table-column label="操作" show-overflow-tooltip width="140"> - <template #default="scope"> - <el-button size="small" text type="primary" @click="onOpenAddMenu('add')">新增</el-button> - <el-button size="small" text type="primary" @click="onOpenEditMenu('edit', scope.row)">修改</el-button> - <el-button size="small" text type="primary" @click="onTabelRowDel(scope.row)">删除</el-button> - </template> - </el-table-column> - </el-table> - </el-card> - <MenuDialog ref="menuDialogRef" @refresh="getTableData()" /> - </div> -</template> - -<script setup lang="ts" name="systemMenu"> -import { defineAsyncComponent, ref, onMounted, reactive } from 'vue'; -import { RouteRecordRaw } from 'vue-router'; -import { ElMessageBox, ElMessage } from 'element-plus'; -import { storeToRefs } from 'pinia'; -import { useRoutesList } from '/@/stores/routesList'; -import { useMenuApi } from "/@/api/systemManage/menu"; -import { initBackEndControlRoutes } from "/@/router/backEnd"; -import {roomApi} from "/@/api/basic/room"; -// import { setBackEndControlRefreshRoutes } from "/@/router/backEnd"; - -// 引入组件 -const MenuDialog = defineAsyncComponent(() => import('/@/views/home/dialog.vue')); - -// 定义变量内容 -const stores = useRoutesList(); -const { routesList } = storeToRefs(stores); -const menuDialogRef = ref(); -const state = reactive({ - tableData: { - data: [] as RouteRecordRaw[], - loading: false, - }, -}); - -// 获取路由数据,真实请从接口获取 -const getTableData = async () => { - let res = await useMenuApi().getMenuAdmin(); - if (res.data.code === 100) { - state.tableData.data = res.data.data; - await initBackEndControlRoutes() - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } -}; -// 打开新增菜单弹窗 -const onOpenAddMenu = (type: string) => { - menuDialogRef.value.openDialog(type); -}; -// 打开编辑菜单弹窗 -const onOpenEditMenu = (type: string, row: RouteRecordRaw) => { - menuDialogRef.value.openDialog(type, row); -}; -// 删除当前行 -const onTabelRowDel = (row: RouteRecordRaw) => { - ElMessageBox.confirm(`此操作将永久删除该菜单,是否继续?`, '提示', { - confirmButtonText: '确认', - cancelButtonText: '取消', - type: 'warning' - }) - .then(async () => { - let res = await useMenuApi().deleteMenu(row.id ); - if (res.data.code === 100) { - ElMessage({ - type: 'success', - duration: 2000, - message: '删除成功' - }); - await getTableData(); - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - }) - .catch((error) => { - - }); -} - -// 页面加载时 -onMounted(() => { - getTableData(); -}); -</script> diff --git a/src/views/layoutPage/index.vue b/src/views/layoutPage/index.vue deleted file mode 100644 index 549c2a3..0000000 --- a/src/views/layoutPage/index.vue +++ /dev/null @@ -1,182 +0,0 @@ -<template> - <div class="home-container"> - <el-row :gutter="15" class="home-card-one mb15"> - <el-col - :xs="24" - :sm="12" - :md="12" - :lg="4" - :xl="4" - v-for="(v, k) in homeOne" - :key="k" - :class="{ 'home-media home-media-lg': k > 1, 'home-media-sm': k === 1 }" - > - <div class="home-card-item flex" > - <el-button @click="renderMenu(v.id)">{{v.name}}</el-button> - </div> - </el-col> - </el-row> - <el-row :gutter="15" class="home-card-two mb15"> - <el-col :xs="24" :sm="14" :md="14" :lg="16" :xl="16"> - <div class="home-card-item"> - <div style="height: 100%"> - <el-button @click="renderMenu('6')">{{'应急管理系统'}}</el-button> - </div> - </div> - </el-col> - <el-col :xs="24" :sm="10" :md="10" :lg="8" :xl="8" class="home-media"> - <div class="home-card-item"> - <div style="height: 100%"> - <el-button @click="renderMenu('7')">{{'目标责任管理系统'}}</el-button> - </div> - </div> - </el-col> - </el-row> - <el-row :gutter="15" class="home-card-three"> - <el-col :xs="24" :sm="10" :md="10" :lg="8" :xl="8"> - <div class="home-card-item"> - <el-button @click="renderMenu('8')">{{'事故管理系统'}}</el-button> - </div> - </el-col> - <el-col :xs="24" :sm="14" :md="14" :lg="16" :xl="16" class="home-media"> - <div class="home-card-item"> - <div style="height: 100%"> - <el-button @click="renderMenu('9')">{{'设备综合管控系统'}}</el-button> - </div> - </div> - </el-col> - </el-row> - </div> -</template> - -<script lang="ts"> -import { toRefs, reactive, defineComponent, } from 'vue'; -import { storeToRefs } from 'pinia'; -import { initBackEndControlRoutes } from '/@/router/backEnd'; -import {useUserInfo} from "/@/stores/userInfo"; -import { Session } from '/@/utils/storage'; -let global: any = { - homeChartOne: null, - homeChartTwo: null, - homeCharThree: null, - dispose: [null, '', undefined], -}; - -interface stateType { - homeOne: Array <type> -} -interface type { - id:number, - name: string -} -export default defineComponent({ - name: 'layoutPage', - setup() { - const userInfo = useUserInfo() - const { userInfos } = storeToRefs(userInfo); - const state = reactive<stateType>({ - homeOne:[{id:1,name:'安全基础信息系统'},{id:2,name:'双重预防系统'},{id:3,name:'系统2'},{id:4,name:'系统3'},{id:5,name:'系统4'}], - }); - // 折线图 - const renderMenu = async (value: string) => { - Session.set('projectId',value) - userInfos.value.projectId = value - await initBackEndControlRoutes(); - }; - return { - renderMenu, - ...toRefs(state), - }; - }, -}); -</script> - -<style scoped lang="scss"> -$homeNavLengh: 8; -.home-container { - overflow: hidden; - .home-card-one, - .home-card-two, - .home-card-three { - .home-card-item { - width: 100%; - height: 130px; - border-radius: 4px; - transition: all ease 0.3s; - padding: 20px; - overflow: hidden; - background: var(--el-color-white); - color: var(--el-text-color-primary); - border: 1px solid var(--next-border-color-light); - &:hover { - box-shadow: 0 2px 12px var(--next-color-dark-hover); - transition: all ease 0.3s; - } - &-icon { - width: 70px; - height: 70px; - border-radius: 100%; - flex-shrink: 1; - i { - color: var(--el-text-color-placeholder); - } - } - &-title { - font-size: 15px; - font-weight: bold; - height: 30px; - } - } - } - .home-card-one { - @for $i from 0 through 3 { - .home-one-animation#{$i} { - opacity: 0; - animation-name: error-num; - animation-duration: 0.5s; - animation-fill-mode: forwards; - animation-delay: calc($i/10) + s; - } - } - } - .home-card-two, - .home-card-three { - .home-card-item { - height: 400px; - width: 100%; - overflow: hidden; - .home-monitor { - height: 100%; - .flex-warp-item { - width: 25%; - height: 111px; - display: flex; - .flex-warp-item-box { - margin: auto; - text-align: center; - color: var(--el-text-color-primary); - display: flex; - border-radius: 5px; - background: var(--next-bg-color); - cursor: pointer; - transition: all 0.3s ease; - &:hover { - background: var(--el-color-primary-light-9); - transition: all 0.3s ease; - } - } - @for $i from 0 through $homeNavLengh { - .home-animation#{$i} { - opacity: 0; - animation-name: error-num; - animation-duration: 0.5s; - animation-fill-mode: forwards; - animation-delay: calc($i/10) + s; - } - } - } - } - } - } -} -</style> diff --git a/src/views/loginPage/component/accountLogin.vue b/src/views/loginPage/component/accountLogin.vue index cf4d1c8..7ba377c 100644 --- a/src/views/loginPage/component/accountLogin.vue +++ b/src/views/loginPage/component/accountLogin.vue @@ -190,6 +190,7 @@ state.loading.signIn = true; // 存储 token 到浏览器缓存 let res = await useLoginApi().signIn(state.ruleForm); + console.log(res) if (res.data.code === 100) { await userInfo.setUserInfos(res.data.data); Cookies.set('token', res.data.data.tk); @@ -230,7 +231,8 @@ let res = await useMenuApi().getMenuAdmin(); if (res.data.code === 100) { state.menu = JSON.parse(JSON.stringify(res.data.data)) - router.push(state.menu[0].children[0].path); + console.log(state.menu,'menu') + router.push(state.menu[0].path); } else { ElMessage({ type: 'warning', @@ -332,6 +334,9 @@ border-radius: 2px; padding: 0 30px; border: 1px solid rgba(17,254,238,.4); + .el-input__inner{ + color: #fff; + } &:focus-within { border: 1px solid #11FEEE; } diff --git a/src/views/newHome/index.vue b/src/views/newHome/index.vue deleted file mode 100644 index 8450675..0000000 --- a/src/views/newHome/index.vue +++ /dev/null @@ -1,967 +0,0 @@ -<template> - <div class="login-container" :key="once"> - <div class="topPanel"></div> - <div class="topPanelBg"></div> - <div class="topPanelCont"> - <div class="topLogo"> - <img src="../../assets/newMenu/toplogo.png" /> - </div> - <div class="userInfo"> - <div @click="onScreenfullClick" style="margin-right: 15px; cursor: pointer"> - <i class="iconfont" :title="isScreenfull ? $t('message.user.title6') : $t('message.user.title5')" :class="!isScreenfull ? 'icon-fullscreen' : 'icon-tuichuquanping'"></i> - </div> - <div class="loginOut" @click="onLoginOut">退出登录</div> - <span></span> - <div class="avator"> - <img src="../../assets/menu/admin.png" /> - <div>{{userName}}</div> - </div> - </div> - </div> - <div class="leftCont"></div> - <div class="topCont"> - <div class="topInfo"> - <div class="topTit">新疆国泰新华<br />安全风险预警监测系统(试运行)</div> - <div class="topTime"> - <div class="time"> - {{ time }} - </div> - <span></span> - <div class="today"> - <div>{{ date }}</div> - <div> - <span>{{ weekDay }}</span - ><span>{{ dayTime }}</span> - </div> - </div> - </div> - </div> - <div class="line"></div> - </div> - <div class="menuGrid"> - <div class="gridCont"> - <div class="grid-content grid-content-1 cont-bg-1" v-throttle @click="toRiskPlatform"> - <div class="toplayer"> - <div> - <img class="iconImg" src="../../assets/newMenu/icon1.png" /> - <div> - <div class="itemTit1">智能安全风险综合预警<br />预报平台</div> - <div class="enTit1">Intelligent Security Risk Comprehensive Forewarning and Forecasting Platform</div> - </div> - </div> - </div> - <img class="bgImg1" src="../../assets/newMenu/card-1.png" /> - </div> - <div class="grid-content cont-bg-1" v-throttle @click="toDoublePrevent"> - <div class="toplayer"> - <img class="iconImg" src="../../assets/newMenu/icon2.png" /> - <div> - <div class="itemTit">智能安全双重预防系统</div> - <div class="enTit">Intelligent Security Dual Prevention System</div> - </div> - </div> - <img class="bgImg" src="../../assets/newMenu/card-4.png" /> - </div> - <div class="grid-content cont-bg-1" v-throttle @click="render('4')"> - <div class="toplayer"> - <img class="iconImg" src="../../assets/newMenu/icon3.png" /> - <div> - <div class="itemTit">智能安全巡检系统</div> - <div class="enTit">Intelligent Security Patrol System</div> - </div> - </div> - <img class="bgImg" src="../../assets/newMenu/card-8.png" /> - </div> - <div class="grid-content cont-bg-1" v-throttle @click="render('3')"> - <div class="toplayer"> - <img class="iconImg" src="../../assets/newMenu/icon4.png" /> - <div> - <div class="itemTit">智能安全特殊作业系统</div> - <div class="enTit">Intelligent Security Special Operating System</div> - </div> - </div> - <img class="bgImg" src="../../assets/newMenu/card-7.png" /> - </div> - <div class="grid-content cont-bg-1" v-throttle @click="render('7')"> - <div class="toplayer"> - <img class="iconImg" src="../../assets/newMenu/icon5.png" /> - <div> - <div class="itemTit">安全目标责任管理系统</div> - <div class="enTit">Security Target Responsibility Management System</div> - </div> - </div> - <img class="bgImg" src="../../assets/newMenu/card-2.png" /> - </div> - <div class="grid-content cont-bg-2" v-throttle @click="render('10')"> - <div class="toplayer"> - <img class="iconImg" src="../../assets/newMenu/icon6.png" /> - <div> - <div class="itemTit">安全知识图谱系统</div> - <div class="enTit">Security Knowledge Graph System</div> - </div> - </div> - <img class="bgImg" src="../../assets/newMenu/card-3.png" /> - </div> - <div class="grid-content cont-bg-2" v-throttle @click="render('9')"> - <div class="toplayer"> - <img class="iconImg" src="../../assets/newMenu/icon7.png" /> - <div> - <div class="itemTit">设备综合管控系统</div> - <div class="enTit">Equipment Integrated Management and Control System</div> - </div> - </div> - <img class="bgImg" src="../../assets/newMenu/card-9.png" /> - </div> - <div class="grid-content cont-bg-2" v-throttle @click="render('6')"> - <div class="toplayer"> - <img class="iconImg" src="../../assets/newMenu/icon8.png" /> - <div> - <div class="itemTit">应急管理系统</div> - <div class="enTit">Emergency Management System</div> - </div> - </div> - <img class="bgImg" src="../../assets/newMenu/card-5.png" /> - </div> - <div class="grid-content cont-bg-2" v-throttle @click="renderToNew('11')"> - <div class="toplayer"> - <img class="iconImg" src="../../assets/newMenu/icon9.png" /> - <div> - <div class="itemTit">智能安全危险化学品全生命周期管控系统</div> - <div class="enTit">Intelligent Security Hazardous Chemicals Life Cycle Safety Management System </div> - </div> - </div> - <img class="bgImg" src="../../assets/newMenu/card-10.png" /> - </div> - <div class="grid-content cont-bg-2" v-throttle @click="render('8')"> - <div class="toplayer"> - <img class="iconImg" src="../../assets/newMenu/icon10.png" /> - <div> - <div class="itemTit">安全事故管理系统</div> - <div class="enTit">Security Incident Management System</div> - </div> - </div> - <img class="bgImg" src="../../assets/newMenu/card-6.png" /> - </div> - <div class="grid-content cont-bg-2" @click="render('1')"> - <div class="toplayer"> - <img class="iconImg" src="../../assets/newMenu/icon11.png" /> - <div> - <div class="itemTit">安全基础信息系统</div> - <div class="enTit">Basic Security Information System</div> - </div> - </div> - <img class="bgImg" src="../../assets/newMenu/card-11.png" /> - </div> - </div> - </div> - <div class="bot-rights"> - <img src="../../assets/newMenu/pic_line1.png" /> - <div>技术支持:苏州国科鸿宇智能科技有限公司</div> - <img src="../../assets/newMenu/pic_line2.png" /> - </div> - </div> -</template> - -<script lang="ts"> -import { toRefs, reactive, computed, defineComponent, onMounted } from 'vue'; -import { storeToRefs } from 'pinia'; -import { useThemeConfig } from '/@/stores/themeConfig'; -import logoMini from '/@/assets/logo-mini.svg'; -import loginIconTwo from '/@/assets/login-icon-two.svg'; -import { NextLoading } from '/@/utils/loading'; -import { Session } from '/@/utils/storage'; -import { useRoute, useRouter } from 'vue-router'; -import { initBackEndControlRoutes } from '/@/router/backEnd'; -import { useUserInfo } from '/@/stores/userInfo'; -import { useRoutesList } from '/@/stores/routesList'; -import pinia from '/@/stores'; -import { useTagsViewRoutes } from '/@/stores/tagsViewRoutes'; -import { ElMessage } from 'element-plus'; -import { ElMessageBox } from 'element-plus/es'; -import { useLoginApi } from '/@/api/login'; -import { useI18n } from 'vue-i18n'; -import screenfull from 'screenfull'; -import router from '../../router'; -import Cookies from 'js-cookie'; - -// 定义接口来定义对象的类型 -interface LoginState { - tabsActiveName: string; - isScan: boolean; - count: number; - projectId: string; - once: number; - isScreenfull: boolean; - time: string; - date: string; - weekDay: string; - dayTime: string; -} - -export default defineComponent({ - name: 'loginIndex', - components: {}, - setup() { - const { t } = useI18n(); - const router = useRouter(); - const userInfo = useUserInfo(); - const { userInfos } = storeToRefs(userInfo); - const routeToStore = useRoutesList(pinia); - const { routesList } = storeToRefs(routeToStore); - const storesThemeConfig = useThemeConfig(); - const { themeConfig } = storeToRefs(storesThemeConfig); - // 时间格式化 - const timeForm = { - hour12: false, - year: 'numeric', - month: '2-digit', - day: '2-digit', - hour: '2-digit', - minute: '2-digit', - second: '2-digit' - }; - const state = reactive<LoginState>({ - tabsActiveName: 'account', - isScan: false, - count: 0, - projectId: '1', - once: 0, - time: '', - date: '', - weekDay: '', - dayTime: '', - isScreenfull: false - }); - - const userName = computed(() =>{ - return userInfos.value.userName - }) - // 获取布局配置信息 - const getThemeConfig = computed(() => { - return themeConfig.value; - }); - - // 当前时间 - const getDateTime = () => { - const curTime = new Date().toLocaleString('zh', timeForm).replace(/\//g, '-'); - state.time = curTime.slice(10, 16); - state.date = curTime.slice(0, 10); - let week = ['日', '一', '二', '三', '四', '五', '六']; - let day = new Date().getDay(); - state.weekDay = '星期' + week[day]; - let curHour = Number(curTime.slice(10, 13)); - if (curHour >= 5 && curHour <= 10) { - state.dayTime = '上午'; - } - if (curHour > 10 && curHour <= 12) { - state.dayTime = '中午'; - } - if (curHour > 12 && curHour <= 18) { - state.dayTime = '下午'; - } - if (curHour > 18 && curHour <= 22) { - state.dayTime = '晚上'; - } - if (curHour > 22) { - state.dayTime = '午夜'; - } - }; - // 下拉菜单点击时 - const onLoginOut = () => { - ElMessageBox({ - closeOnClickModal: false, - closeOnPressEscape: false, - title: t('message.user.logOutTitle'), - message: t('message.user.logOutMessage'), - showCancelButton: true, - confirmButtonText: t('message.user.logOutConfirm'), - cancelButtonText: t('message.user.logOutCancel'), - buttonSize: 'default', - beforeClose: (action, instance, done) => { - if (action === 'confirm') { - instance.confirmButtonLoading = true; - instance.confirmButtonText = t('message.user.logOutExit'); - setTimeout(() => { - done(); - setTimeout(() => { - instance.confirmButtonLoading = false; - }, 300); - }, 700); - } else { - done(); - } - } - }) - .then(async () => { - let res = await useLoginApi().signOut(); - if (res.data.code === '200') { - Session.clear(); // 清除缓存/token等 - // 使用 reload 时,不需要调用 resetRoute() 重置路由 - window.location.reload(); - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - }) - .catch(() => {}); - }; - //选择菜单 - const render = (value: string) => { - state.projectId = value; - renderMenu(); - }; - - // 全屏点击时 - const onScreenfullClick = () => { - if (!screenfull.isEnabled) { - ElMessage.warning('暂不不支持全屏'); - return false; - } - screenfull.toggle(); - screenfull.on('change', () => { - if (screenfull.isFullscreen) state.isScreenfull = true; - else state.isScreenfull = false; - }); - }; - // 去风险大屏 - const toRiskPlatform = () => { - // router.push({ - // name: "warningScreen" - // }); - window.open('http://39.104.85.193:8585/'); - }; - - const toDoublePrevent = () => { - window.open('http://121.239.169.27:6801'); - }; - const throttle = (renderMenu: any, delay: number) => { - let flag = true; - let count = 0; - return function () { - if (!flag) return; - flag = false; - if (count === 0) { - renderMenu.apply(); - count++; - flag = true; - } else { - setTimeout(() => { - renderMenu.apply(); - flag = true; - }, delay); - } - }; - }; - - //调用菜单方法 - const renderMenu = throttle(() => { - renderFun(); - }, 2000); - - //调后台菜单接口 - const renderFun = async () => { - Cookies.set('projectId', state.projectId); - userInfos.value.projectId = state.projectId; - await initBackEndControlRoutes().then(() => { - let linkToMenu = [...routesList.value]; - if (linkToMenu && linkToMenu.length > 1) { - router.push(linkToFirstMenu(JSON.parse(JSON.stringify(linkToMenu))[1])); - } else { - ElMessage({ type: 'warning', message: '你没有该子系统的权限' }); - } - }); - }; - - const linkToFirstMenu: any = (value: any) => { - let returnMenu = value; - if (returnMenu.children?.length > 0) { - return linkToFirstMenu(returnMenu.children[0]); - } else { - return returnMenu.path; - } - }; - - const renderToNew = () => { - window.open('http://222.92.213.22:18001/smartlab/', '_blank'); - }; - // //点击进入特殊作业 - // const toSpecialWorkSys = () => { - // router.push('/layoutPage'); - // }; - // 页面加载时 - onMounted(() => { - state.once += 1; - NextLoading.done(); - getDateTime(); - setInterval(() => { - getDateTime(); - }, 1000); - // loginBg(); - // loginApp() - }); - return { - render, - userName, - logoMini, - onLoginOut, - getDateTime, - renderToNew, - toRiskPlatform, - toDoublePrevent, - onScreenfullClick, - loginIconTwo, - getThemeConfig, - ...toRefs(state) - }; - } -}); -</script> - -<style scoped lang="scss"> - @keyframes showDown { - 100% { - position: absolute; - top: 60px; - } - } - @keyframes moveDown { - 100% { - position: absolute; - top: 0; - } - } - @keyframes moveRight { - 100% { - position: absolute; - left: 0; - } - } - @keyframes upDown { - 50% { - -webkit-transform: translateY(-8px); - -ms-transform: translateY(-8px); - -o-transform: translateY(-8px); - transform: translateY(-8px); - } - 100% { - -webkit-transform: translateY(0); - -ms-transform: translateY(0); - -o-transform: translateY(0); - transform: translateY(0); - } - } -@media screen and (min-width: 1600px) { - .gridCont { - width: 100%; - height: 100%; - display: grid; - grid-gap: 20px; - grid-template-columns: repeat(3, 1fr); - grid-auto-flow: row; - justify-content: center; - .toplayer { - width: 100%; - height: 100%; - position: absolute; - left: 0; - top: 0; - display: flex; - align-items: center; - padding: 0 20px; - z-index: 99; - - .itemTit { - font-size: 28px; - line-height: 34px; - margin-bottom: 2px; - height: 40%; - color: #072270; - } - .enTit { - font-size: 16px; - line-height: 20px; - color: #072270; - } - - .iconImg { - width: 88px; - height: 88px; - margin-right: 20px; - } - } - .bgImg { - position: absolute; - width: 30%; - height: auto; - right: -10px; - top: 15px; - } - } - - .grid-content-1 { - grid-row-start: 1; - grid-row-end: 3; - - .toplayer { - width: 100%; - height: 100%; - position: absolute; - left: 0; - top: 0; - display: flex; - align-items: center; - z-index: 99; - - & > div { - display: flex; - align-items: flex-start; - } - - .itemTit1 { - font-size: 32px; - line-height: 42px; - height: 40%; - letter-spacing: 1px; - color: #072270; - margin-bottom: 12px; - } - .enTit1 { - font-size: 18px; - line-height: 24px; - color: #072270; - } - } - .bgImg1 { - position: absolute; - width: 45%; - height: auto; - right: -20px; - top: 30%; - } - } - - .bot-rights { - font-size: 18px; - color: #333; - } -} - -@media screen and (min-width: 1200px) and (max-width: 1600px) { - .gridCont { - width: 100%; - height: 100%; - display: grid; - grid-gap: 15px; - grid-template-columns: repeat(3, 1fr); - grid-auto-flow: row; - justify-content: center; - - .toplayer { - width: 100%; - height: 100%; - position: absolute; - left: 0; - top: 0; - display: flex; - align-items: center; - padding: 0 20px; - z-index: 99; - - .itemTit { - font-size: 22px; - line-height: 30px; - height: 40%; - color: #072270; - margin-bottom: 2px; - } - .enTit { - font-size: 12px; - color: #072270; - } - - .iconImg { - width: 44px; - height: 44px; - margin-right: 10px; - } - } - .bgImg { - position: absolute; - width: 30%; - height: auto; - right: -10px; - top: 15px; - } - } - - .grid-content-1 { - grid-row-start: 1; - grid-row-end: 3; - - .toplayer { - width: 100%; - height: 100%; - position: absolute; - left: 0; - top: 0; - display: flex; - align-items: center; - z-index: 99; - - & > div { - display: flex; - align-items: flex-start; - } - - .itemTit1 { - font-size: 24px; - line-height: 36px; - height: 40%; - letter-spacing: 1px; - color: #072270; - margin-bottom: 12px; - } - .enTit1 { - font-size: 14px; - color: #072270; - } - } - .bgImg1 { - position: absolute; - width: 45%; - height: auto; - right: -20px; - top: 30%; - } - } - .bot-rights { - font-size: 15px; - color: #333; - } -} -@media screen and (max-width: 1200px) { - .gridCont { - width: 100%; - height: 100%; - display: grid; - grid-gap: 10px; - grid-template-columns: repeat(3, 1fr); - grid-auto-flow: row; - justify-content: center; - - .toplayer { - width: 100%; - height: 100%; - position: absolute; - left: 0; - top: 0; - display: flex; - align-items: center; - padding: 0 15px; - z-index: 99; - - .itemTit { - font-size: 14px; - line-height: 22px; - color: #072270; - } - .enTit { - font-size: 10px; - line-height: 14px; - color: #072270; - } - - .iconImg { - width: 32px; - height: 32px; - margin-right: 10px; - } - } - .bgImg { - position: absolute; - width: 45%; - height: auto; - right: -10px; - top: 15px; - } - } - - .grid-content-1 { - grid-row-start: 1; - grid-row-end: 3; - - .toplayer { - width: 100%; - height: 100%; - position: absolute; - left: 0; - top: 0; - display: flex; - align-items: center; - z-index: 99; - - & > div { - display: flex; - align-items: flex-start; - } - - .itemTit1 { - font-size: 16px; - line-height: 36px; - height: 40%; - letter-spacing: 1px; - color: #072270; - margin-bottom: 12px; - } - .enTit1 { - font-size: 12px; - color: #072270; - } - } - .bgImg1 { - position: absolute; - width: 45%; - height: auto; - right: -20px; - top: 30%; - } - } - .bot-rights { - font-size: 12px; - color: #333; - } -} -.login-container { - width: 100%; - height: 100%; - position: relative; - background: #fff; - .topPanel { - width: 100%; - height: 260px; - background: url('../../assets/newMenu/topbg.jpg') no-repeat center; - background-size: 100% 100%; - display: flex; - justify-content: center; - box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1); - } - .topPanelBg { - position: absolute; - width: 100%; - height: 60px; - top: -60px; - left: 0; - background: rgba(255, 255, 255, 0.8); - z-index: 9; - animation: moveDown 0.6s 1 ease forwards; - } - .topPanelCont { - position: absolute; - width: 100%; - height: 60px; - padding: 0 50px; - top: -60px; - left: 0; - display: flex; - align-items: center; - justify-content: space-between; - z-index: 999; - animation: moveDown 0.6s 1 ease forwards; - - .topLogo { - display: flex; - align-items: center; - - img { - width: 146px; - height: auto; - } - } - - .userInfo { - display: flex; - align-items: center; - - .avator { - display: flex; - justify-content: right; - - img { - width: 20px; - height: 20px; - border-radius: 10px; - } - div { - font-size: 15px; - color: #333333; - line-height: 20px; - margin-left: 6px; - } - } - span { - width: 1px; - height: 20px; - background: #999; - margin: 0 15px; - } - .loginOut { - font-size: 15px; - color: #333; - line-height: 20px; - cursor: pointer; - - &:hover { - color: #006df5; - } - } - } - } - .leftCont { - position: absolute; - left: -100px; - top: 0; - width: 220px; - height: 100%; - z-index: 99; - background: url('../../assets/newMenu/leftbg.png') no-repeat center; - background-size: 100% 100%; - animation: moveRight .8s 1 ease forwards; - } - .topCont { - position: absolute; - width: 100%; - height: 200px; - left: 0; - top: 30px; - padding: 0 40px 0 120px; - z-index: 99999; - display: flex; - flex-direction: column; - justify-content: center; - align-items: flex-start; - animation: showDown 0.6s 1 ease forwards; - - .topInfo { - width: 100%; - display: flex; - align-items: center; - justify-content: space-between; - margin-bottom: 10px; - - .topTit { - font-size: 44px; - font-weight: bolder; - text-align: left; - color: #fff; - text-shadow: 0 3px 8px rgba(0, 0, 0, 0.2); - } - - .topTime { - padding: 15px 10px; - box-sizing: border-box; - background: rgba(6, 64, 195, 0.8); - border-radius: 8px; - color: #fff; - font-family: 'PingFang SC'; - font-weight: 600; - font-size: 16px; - display: flex; - align-items: center; - - .time { - font-size: 48px; - } - & > span { - width: 1px; - height: 40px; - margin: 0 15px; - background: #fff; - } - .today { - display: flex; - flex-direction: column; - align-items: flex-start; - - span { - font-size: 14px; - } - - span:first-of-type { - margin-right: 10px; - } - } - } - } - .line { - width: 120px; - height: 6px; - background: #00eeff; - } - } - .menuGrid { - width: calc(100vw - 220px); - height: calc(100vh - 320px); - padding: 20px 20px 0; - position: absolute; - top: 260px; - left: 220px; - .gridCont { - .grid-content { - border-radius: 16px; - position: relative; - overflow: hidden; - cursor: pointer; - transition: 0.3s; - border: 2px solid rgba(255,255,255,0); - - &:hover { - border-radius: 16px; - background-image: radial-gradient(ellipse farthest-side at 50% 100%, #48a3ff 0%, #fff 120%); - box-shadow: -8px -8px 24px rgba(20, 97, 234, 0.2), 8px 8px 24px rgba(20, 97, 234, 0.2); - border: 2px solid #fff; - - .iconImg{ - animation: upDown 0.3s 1 ease-in-out forwards; - filter: drop-shadow(0 0 12px rgba(20, 97, 234, 0.4)); - } - } - } - .cont-bg-1 { - background: #d9eaff; - } - .cont-bg-2 { - background: #cdd6ff; - } - - /*.grid-content-2{*/ - /* background-image: linear-gradient(135deg,#0098F5,#1461EA);*/ - /*}*/ - - /*.grid-content-3{*/ - /* background-image: linear-gradient(135deg,#006DF5,#1450EA);*/ - /*}*/ - } - } - .bot-rights { - width: calc(100vw - 240px); - height: 60px; - position: absolute; - bottom: 0; - left: 240px; - z-index: 9999; - display: flex; - align-items: center; - justify-content: center; - - img { - width: 248px; - height: 8px; - } - div { - margin: 0 20px; - } - } -} -</style> diff --git a/src/views/system/home/index.vue b/src/views/system/home/index.vue index b49c1c8..e27bde7 100644 --- a/src/views/system/home/index.vue +++ b/src/views/system/home/index.vue @@ -76,7 +76,7 @@ // import { setBackEndControlRefreshRoutes } from "/@/router/backEnd"; // 引入组件 -const MenuDialog = defineAsyncComponent(() => import('/@/views/home/dialog.vue')); +const MenuDialog = defineAsyncComponent(() => import('./dialog.vue')); // 定义变量内容 const stores = useRoutesList(); diff --git a/src/views/system/role/index.vue b/src/views/system/role/index.vue index f9b3ded..3e0a041 100644 --- a/src/views/system/role/index.vue +++ b/src/views/system/role/index.vue @@ -9,12 +9,12 @@ <!-- </el-icon>--> <!-- 查询--> <!-- </el-button>--> -<!-- <el-button size="default" type="success" class="ml10" @click="onOpenDialogRef('新增', '')">--> -<!-- <el-icon>--> -<!-- <ele-FolderAdd />--> -<!-- </el-icon>--> -<!-- 新增角色--> -<!-- </el-button>--> + <el-button size="default" type="success" class="ml10" @click="onOpenDialogRef('新增', '')"> + <el-icon> + <ele-FolderAdd /> + </el-icon> + 新增角色 + </el-button> </div> <el-table :data="tableData.data" style="width: 100%"> <el-table-column type="index" label="序号" width="60" /> @@ -101,7 +101,7 @@ type: 'warning' }) .then(async () => { - let res = await useRoleApi().deleteRole({ roleId: row.roleId }); + let res = await useRoleApi().deleteRole({ roleId: row.id }); if (res.data.code === 100) { ElMessage({ type: 'success', diff --git a/src/views/system/user/component/userDialog.vue b/src/views/system/user/component/userDialog.vue index 12f8b32..fd755e0 100644 --- a/src/views/system/user/component/userDialog.vue +++ b/src/views/system/user/component/userDialog.vue @@ -36,43 +36,11 @@ <el-input v-model.trim="userForm.phone" placeholder="手机号" clearable></el-input> </el-form-item> </el-col> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> - <el-form-item label="是否专家" prop="identityStatus"> - <el-radio-group v-model="userForm.identityStatus"> - <el-radio :label="0">是</el-radio> - <el-radio :label="1">否</el-radio> - </el-radio-group> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" v-if="userForm.identityStatus == 0"> - <el-form-item label="专家类型" prop="identityIds"> - <el-select v-model="userForm.identityIds" placeholder="专家类型" clearable class="w100" multiple> - <el-option v-for="item in expData" :key="item.id" :label="item.identity" :value="item.id"> </el-option> - </el-select> - </el-form-item> - </el-col> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> - <el-form-item label="证件类型" prop="idType"> - <el-select v-model="userForm.idType" placeholder="证件类型" clearable class="w100"> - <el-option :key="1" label="身份证" :value="1"> </el-option> - </el-select> - </el-form-item> - </el-col> <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> <el-form-item label="证件号码" prop="idSerial"> <el-input v-model.trim="userForm.idSerial" placeholder="证件号码" clearable></el-input> </el-form-item> </el-col> - <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" v-if="userForm.identityStatus == 0"> - <el-form-item label="资质证书" prop=""> - <el-upload accept="image/*" :action="uploadUrl" :headers="header" method="post" :data="{module: 'accountPath'}" :on-success="handleAvatarSuccess" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='imgLimit' v-model:file-list="fileList" list-type="picture-card" :before-upload="picSize" :on-remove="handleRemove" :before-remove="beforeRemove"> - <el-icon><Plus /></el-icon> - <template #tip> - <div class="el-upload__tip">上传jpg/png图片尺寸小于5M,最多可上传1张</div> - </template> - </el-upload> - </el-form-item> - </el-col> </el-row> </el-form> <template #footer> @@ -112,12 +80,8 @@ roleIds: Array<any> depId: number | null; phone: string; - identityStatus:number|null; - identityIds: Array<any> pwd: string; - idType: number | null; idSerial: string; - qualificationAttId: number | null; }; userFormRules:{}, departmentData: Array<DeptData>; @@ -150,11 +114,7 @@ roleIds: [], // 关联角色 depId: null, // 部门 phone: '', // 手机号 - identityStatus: null, - identityIds: [], - idType: 1, idSerial: '', - qualificationAttId: null }, userFormRules:{ name: [{ required: true, message: '请填写用户名', trigger: 'blur' }], @@ -162,9 +122,6 @@ roleIds: [{ required: true, message: '请选择用户角色', trigger: 'change' }], depId: [{ required: true, message: '请选择部门', trigger: 'change' }], phone: [{ required: true, message: '请填写手机号', trigger: 'blur' }], - identityStatus: [{ required: true, message: '请选择是否为专家', trigger: 'change' }], - identityIds: [{ required: true, message: '请选择专家类型', trigger: 'change' }], - idType: [{ required: true, message: '请选择证件类型', trigger: 'blur' }], pwd: [{ required: true, message: '请输入账户密码', trigger: 'blur' }], }, departmentData: [], // 部门数据 @@ -197,19 +154,14 @@ roleIds: [], depId: null, phone: '', - identityStatus: null, - identityIds: [], - idType: 1, idSerial: '', pwd: '', - qualificationAttId: null }; } else { state.title = '修改用户'; state.isAdd = false state.userForm = JSON.parse(JSON.stringify(value)); state.userForm.roleIds = JSON.parse(JSON.stringify(value)).roles.map(i=>i.roleId) - state.userForm.identityIds = JSON.parse(JSON.stringify(value)).userIdentities.map(i=>i.userIdentityId) } }; @@ -241,10 +193,6 @@ }); return } - if(state.userForm.identityStatus == 1){ - state.userForm.identityIds = [] - state.userForm.qualificationAttId = null - } if (state.title === '新增用户') { let res = await userApi().addUser(state.userForm); if (res.data.code === 100) { @@ -262,8 +210,8 @@ }); } } else { - const {name, realName, roleIds, depId, phone, idType, idSerial, id, identityStatus, identityIds, qualificationAttId} = state.userForm - const data = {name, realName, roleIds, depId, phone, idType, idSerial,id, identityStatus, identityIds, qualificationAttId} + const {name, realName, roleIds, depId, phone, idSerial, id} = state.userForm + const data = {name, realName, roleIds, depId, phone, idSerial,id} let res = await userApi().modUser(data); if (res.data.code === 100) { ElMessage({ @@ -338,44 +286,6 @@ state.userForm.qualificationAttId = res.data.id } } - - // const beforeRemove = (file: {}, fileList: []) => { - // const result = new Promise((resolve, reject) => { - // if(!state.isOverSize){ - // ElMessageBox.confirm('此操作将删除该图片, 是否继续?', '提示', { - // confirmButtonText: '确定', - // cancelButtonText: '取消', - // type: 'warning' - // }) - // .then(() => { - // // console.log(state.workDetail.gbPath,'path') - // const list = JSON.parse(JSON.stringify(state.form.workDetail.gbPath)) - // fileList.map((item,index)=>{ - // if(item.uid === file.uid){ - // fileList.splice(index,1) - // state.form.workDetail.gbPath.splice(index,1) - // // 请求删除接口 - // deletePic(false,list[index]) - // } - // }) - // }) - // .catch(() => { - // reject(false); - // }); - // }else{ - // const list = JSON.parse(JSON.stringify(state.form.workDetail.gbPath)) - // fileList.map((item,index)=>{ - // if(item.uid === file.uid){ - // fileList.splice(index,1) - // state.form.workDetail.gbPath.splice(index,1) - // deletePic(true,list[index]) - // } - // }) - // state.isOverSize = false - // } - // }); - // return result; - // }; // 页面加载时 onMounted(() => { diff --git a/src/views/system/user/index.vue b/src/views/system/user/index.vue index 473f805..b662ae7 100644 --- a/src/views/system/user/index.vue +++ b/src/views/system/user/index.vue @@ -36,11 +36,6 @@ <span>{{ scope.row.roles.map(obj => obj.roleName).join('、') }}</span> </template> </el-table-column> - <el-table-column prop="idType" label="证件类型"> - <template #default="scope"> - <span>{{idTypeList.find(item=>item.id == scope.row.idType)?.name}}</span> - </template> - </el-table-column> <el-table-column prop="idSerial" label="证件号码"></el-table-column> <el-table-column label="操作" width="100"> <template #default="scope"> @@ -102,7 +97,6 @@ } }; }; - idTypeList: Array<idType> depList: []; roleList: []; expList: []; @@ -130,12 +124,6 @@ } } }, - idTypeList:[ - { - id: 1, - name: '身份证' - } - ], depList: [], roleList: [], expList: [], -- Gitblit v1.9.2