From 0c0fa2483fd431104f6498e40fffd983d913dce2 Mon Sep 17 00:00:00 2001 From: 马宇豪 <978517621@qq.com> Date: 星期二, 25 四月 2023 17:11:09 +0800 Subject: [PATCH] 修改 --- src/views/system/role/index.vue | 12 src/views/analyse/applyReview/components/reportDialog.vue | 7 src/views/experiment/project/index.ts | 21 src/views/analyse/assessApply/index.vue | 2 src/views/experiment/project/components/selectEmergency.vue | 181 ++++++++++ src/views/analyse/evaluate/index.ts | 5 src/views/analyse/riskUnit/index.ts | 3 src/views/experiment/developing/index.vue | 14 src/views/basic/equipment/index.vue | 2 src/views/analyse/plan/components/planDialog.vue | 36 + src/views/experiment/project/components/applyDialog.vue | 4 src/views/analyse/plan/index.vue | 3 src/views/loginPage/loginPage.vue | 5 src/views/experiment/developing/components/developDialog.vue | 239 +++++++++---- src/views/experiment/project/components/selectDanger.vue | 6 src/views/experiment/project/index.vue | 46 ++ src/views/analyse/identify/index.ts | 3 src/views/analyse/identify/components/identifyDialog.vue | 8 src/views/analyse/identify/index.vue | 12 src/api/basic/unit/index.ts | 9 src/views/analyse/evaluate/index.vue | 151 +++++-- src/views/analyse/identify/components/identifyQuery.vue | 1 src/assets/menu/company.png | 0 src/views/analyse/assessApply/components/riskDialog.vue | 58 ++ src/views/analyse/assessApply/components/riskUnitDialog.vue | 86 ++-- src/views/experiment/project/components/projectDialog.vue | 158 ++++---- 26 files changed, 763 insertions(+), 309 deletions(-) diff --git a/src/api/basic/unit/index.ts b/src/api/basic/unit/index.ts index 209f332..3b6f163 100644 --- a/src/api/basic/unit/index.ts +++ b/src/api/basic/unit/index.ts @@ -34,6 +34,15 @@ }); }, + deleteRiskUnitById: (params: object) => { + return request({ + url: import.meta.env.VITE_API_URL + '/risk/delete/deleteRiskUnit', + method: 'post', + data: params + }); + }, + + getAllUnit: () => { return request({ url: import.meta.env.VITE_API_URL + '/basic/select/listRiskUnit', diff --git a/src/assets/menu/company.png b/src/assets/menu/company.png index 46b0568..b8f34a2 100644 --- a/src/assets/menu/company.png +++ b/src/assets/menu/company.png Binary files differ diff --git a/src/views/analyse/applyReview/components/reportDialog.vue b/src/views/analyse/applyReview/components/reportDialog.vue index cd650e8..db66f52 100644 --- a/src/views/analyse/applyReview/components/reportDialog.vue +++ b/src/views/analyse/applyReview/components/reportDialog.vue @@ -178,7 +178,8 @@ <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">{{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> @@ -504,6 +505,10 @@ width: 75%; } + &.redTit{ + color: red; + } + &.autoheight { min-height: 44px; height: auto; diff --git a/src/views/analyse/assessApply/components/riskDialog.vue b/src/views/analyse/assessApply/components/riskDialog.vue index bbe6901..acaf520 100644 --- a/src/views/analyse/assessApply/components/riskDialog.vue +++ b/src/views/analyse/assessApply/components/riskDialog.vue @@ -2,7 +2,7 @@ <div class="system-menu-dialog-container"> <el-dialog title="管理实验现实风险" v-model="assessApplyDialogState.assessApplyDialogVisible" width="60%"> <div> - <el-button @click="addUnit()" type="primary" style="margin-bottom: 20px" size="default">增加风险分析单元</el-button> + <el-button @click="openUnitDialog('新增','', assessApplyDialogState.id, assessApplyDialogState.liabilityUserId)" 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="风险单元编号"/> @@ -15,12 +15,19 @@ <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> + <span>{{`${assessApplyDialogState.allPersonList.find(item =>item.id === scope.row.liabilityUserId)?.realName || ''}`}}</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, assessApplyDialogState.liabilityUserId)">查看</el-button> + <el-button size="default" text type="primary" @click="openUnitDialog('编辑', scope.row, assessApplyDialogState.id, assessApplyDialogState.liabilityUserId)">编辑</el-button> + <el-button size="default" text type="danger" @click="deleteUnit(scope.$index, scope.row)">删除</el-button> </template> </el-table-column> </el-table> @@ -41,6 +48,9 @@ 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>({ @@ -67,8 +77,8 @@ getRiskData() }; -const addUnit = (id: number, value: RiskUnitType) => { - riskUnitDialogRef.value.showRiskUnitDialog(assessApplyDialogState.id, assessApplyDialogState.liabilityUserId, assessApplyDialogState.basicUnitList, assessApplyDialogState.allPersonList, assessApplyDialogState.allRiskTypeList); +const openUnitDialog = (title: string, val, id: number, userId: number) => { + riskUnitDialogRef.value.showRiskUnitDialog(title, val, id, userId, assessApplyDialogState.basicUnitList, assessApplyDialogState.allPersonList, assessApplyDialogState.allRiskTypeList); }; const getRiskData = async () => { @@ -96,8 +106,16 @@ }; const getAllPersonList = async () => { - let res = await personApi().getAllPerson(); - if(res.data.code === 100){ + let res = await userApi().getUserList({ + pageIndex: 1, + pageSize: 99999, + searchParams:{ + roleId: null, + name: '', + realName: '' + } + }); + if(res.data.code === 200){ assessApplyDialogState.allPersonList = JSON.parse(JSON.stringify(res.data.data)); }else{ ElMessage({ @@ -119,6 +137,34 @@ } } +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({ diff --git a/src/views/analyse/assessApply/components/riskUnitDialog.vue b/src/views/analyse/assessApply/components/riskUnitDialog.vue index fe72aae..851d50b 100644 --- a/src/views/analyse/assessApply/components/riskUnitDialog.vue +++ b/src/views/analyse/assessApply/components/riskUnitDialog.vue @@ -5,43 +5,43 @@ <el-row :gutter="35"> <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> <el-form-item label="风险单元编号" prop="riskCode"> - <el-input v-model="riskUnitDialogState.riskUnitForm.riskCode" placeholder="风险单元编号" clearable class="input-length"></el-input> + <el-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" placeholder="风险单元名称" clearable class="input-length"></el-input> + <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" placeholder="风险单元类型" clearable class="input-length"> + <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" 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 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.realName" :value="item.id"></el-option> </el-select> </el-form-item> </el-col> <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> <el-form-item label="负责部门" prop="liabilityDep"> - <el-input v-model="riskUnitDialogState.riskUnitForm.liabilityDep" placeholder="负责部门" clearable class="input-length"></el-input> + <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" placeholder="基础风险单元" clearable class="input-length"> + <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" placeholder="风险单元描述" clearable class="input-length"></el-input> + <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> @@ -49,7 +49,7 @@ <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> + <el-button type="primary" @click="onSubmitRiskUnit" v-if="!riskUnitDialogState.disabled" size="default">确定</el-button> </span> </template> </el-dialog> @@ -65,10 +65,12 @@ const riskUnitFormRef = ref() const riskUnitDialogState = reactive<RiskUnitDialogType>({ - title: '新增', + title: '', experimentType: 2, + disabled: false, riskUnitDialogVisible: false, riskUnitForm: { + id: null, experimentId: null, riskCode: '', riskName: '', @@ -101,49 +103,51 @@ ], }) -const showRiskUnitDialog = (id: number, liabilityUserId: number, basicUnitList: UnitType [], allPersonList: AllPersonListType [], allRiskTypeList: RiskType []) => { - +const showRiskUnitDialog = (title: string, val, id: number, userId: 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(); }); - riskUnitDialogState.riskUnitForm = { - experimentId: id, - riskCode: '', - riskName: '', - riskUnitTypeId: null, - liabilityUserId: liabilityUserId, - liabilityDep: '', - description: '', - basicRiskUnitId: null, - }; + if(title === '新增'){ + riskUnitDialogState.title = '新增'; + riskUnitDialogState.riskUnitForm = { + id: null, + experimentId: id, + riskCode: '', + riskName: '', + riskUnitTypeId: null, + liabilityUserId: userId, + 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 === '新增' && 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 + if(riskUnitDialogState.title === '新增'){ + let { id, basicRiskUnitId, ...query} = riskUnitDialogState.riskUnitForm let res = await riskUnitApi().addRiskUnit(query); if(res.data.code === 100){ emit('refresh') diff --git a/src/views/analyse/assessApply/index.vue b/src/views/analyse/assessApply/index.vue index d587bcd..ce41e3c 100644 --- a/src/views/analyse/assessApply/index.vue +++ b/src/views/analyse/assessApply/index.vue @@ -65,7 +65,7 @@ <el-table-column label="操作" width="250" fixed="right"> <template #default="scope"> <el-button size="small" v-if="scope.row.stage == 3" text type="primary" :icon="Edit" @click="toReport(scope.row)">生成评估报告</el-button> - <el-button size="small" text type="primary" :icon="Edit" @click="openRiskDialog(scope.row)">管理实验现实风险</el-button> + <el-button size="small" text type="primary" :icon="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> diff --git a/src/views/analyse/evaluate/index.ts b/src/views/analyse/evaluate/index.ts index b536372..639fc39 100644 --- a/src/views/analyse/evaluate/index.ts +++ b/src/views/analyse/evaluate/index.ts @@ -1,5 +1,8 @@ declare interface EvaluateStateType { - evaluateData: Array<EvaluateType> + evaluateData: Array<IdentifyType> + user: null| number + currentEvalute:{} + evaluateDialog:boolean searchQuery: { pageIndex: number, pageSize: number, diff --git a/src/views/analyse/evaluate/index.vue b/src/views/analyse/evaluate/index.vue index 1733d96..07a11ac 100644 --- a/src/views/analyse/evaluate/index.vue +++ b/src/views/analyse/evaluate/index.vue @@ -25,47 +25,47 @@ <!-- </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" 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 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> @@ -75,6 +75,7 @@ </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> @@ -108,7 +109,9 @@ </el-table-column> <el-table-column label="操作" width="250"> <template #default="scope"> - <el-button size="small" v-if="scope.row.planExecStatus===3" text type="primary" @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="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> @@ -118,7 +121,48 @@ </div> </div> </div> - <evaluate-dialog ref="evaluateDialogRef" @refresh="getEvaluateData"></evaluate-dialog> + + <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> @@ -127,16 +171,22 @@ import {evaluateApi} from "/@/api/analyse/evaluate"; import {identifyApi} from "/@/api/analyse/identify"; import {ElMessage, ElMessageBox} from "element-plus"; -import { Edit, View, Plus, Delete } from '@element-plus/icons-vue'; +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, @@ -182,6 +232,11 @@ } }; +const getDataAndClose =()=>{ + evaluateState.evaluateDialog = false + getEvaluateData() +} + const getAllPlanList = async () => { let res = await planApi().getAllPlan(); if(res.data.code === 100){ @@ -213,6 +268,11 @@ }) } }; + +const openEvaluate = (value: IdentifyType) => { + evaluateState.evaluateDialog = true + evaluateState.currentEvalute = value +} const openEvaluateDialog = (title: string, value: IdentifyType) => { evaluateDialogRef.value.showEvaluateDialog(title, value); @@ -295,6 +355,7 @@ getEvaluateData(); getAllPlanList(); getPersonList(); + evaluateState.user = Number(userInfos.value.uid) }); </script> diff --git a/src/views/analyse/identify/components/identifyDialog.vue b/src/views/analyse/identify/components/identifyDialog.vue index 2fd7b26..a764ab6 100644 --- a/src/views/analyse/identify/components/identifyDialog.vue +++ b/src/views/analyse/identify/components/identifyDialog.vue @@ -438,7 +438,6 @@ }; }else if(title === '查看'){ identifyDialogState.title = '查看'; - console.log(value,'value') identifyDialogState.disabled = true for(let i in identifyDialogState.identifyForm){ if(isValidKey(i, identifyDialogState.identifyForm)){ @@ -447,11 +446,6 @@ } }else{ identifyDialogState.title = '编辑'; - // identifyDialogState.identifyForm.hazopId = identifyQueryForm.hazopId; - // identifyDialogState.identifyForm.jhaId = identifyQueryForm.jhaId; - // identifyDialogState.identifyForm.phaId = identifyQueryForm.phaId; - // identifyDialogState.identifyForm.sclId = identifyQueryForm.sclId; - // identifyDialogState.identifyForm.analogyId = identifyQueryForm.analogyId; for(let i in identifyDialogState.identifyForm){ if(isValidKey(i, identifyDialogState.identifyForm)){ identifyDialogState.identifyForm[i] = value[i]; @@ -483,11 +477,9 @@ }); } }else{ - console.log(identifyDialogState.identifyForm,'identifyDialogState.identifyForm') let res = await identifyApi().modIdentify(identifyDialogState.identifyForm) if(res.data.code === 100){ emit('refresh',2,identifyDialogState.identifyForm) - identifyDialogState.identifyDialogVisible = false; ElMessage({ type: 'success', diff --git a/src/views/analyse/identify/components/identifyQuery.vue b/src/views/analyse/identify/components/identifyQuery.vue index 6c7100f..7aed26a 100644 --- a/src/views/analyse/identify/components/identifyQuery.vue +++ b/src/views/analyse/identify/components/identifyQuery.vue @@ -236,7 +236,6 @@ }; const onDelIdentifyQuery = (index: number, val: IdentifyType) => { - console.log(val,'val') ElMessageBox.confirm(`此操作将永久删除该辨识,是否继续?`, '提示', { confirmButtonText: '确认', cancelButtonText: '取消', diff --git a/src/views/analyse/identify/index.ts b/src/views/analyse/identify/index.ts index 713bb9b..66859ae 100644 --- a/src/views/analyse/identify/index.ts +++ b/src/views/analyse/identify/index.ts @@ -1,5 +1,6 @@ declare interface IdentifyStateType { identifyData: Array<IdentifyType> + user: null | number searchQuery: { pageIndex: number, pageSize: number, @@ -74,7 +75,7 @@ sclCheckResult: string, planExecStatus?: number, evaluateMethod?: number, - factorQueryDTOList?: IdentifyType [], + factorQueryDTOList?: EvaluateType [], evaluateUser?: string, result?: number | null, identificationDesc: string diff --git a/src/views/analyse/identify/index.vue b/src/views/analyse/identify/index.vue index c0c2960..d5f3e03 100644 --- a/src/views/analyse/identify/index.vue +++ b/src/views/analyse/identify/index.vue @@ -34,6 +34,7 @@ </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> @@ -67,9 +68,9 @@ </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" @click="accessIdentify(scope.row)">提交</el-button> + <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" :icon="Edit" @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> @@ -91,13 +92,17 @@ 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, @@ -261,6 +266,7 @@ getIdentifyData(); getAllPlanList(); getPersonList(); + identifyState.user = Number(userInfos.value.uid) }); </script> diff --git a/src/views/analyse/plan/components/planDialog.vue b/src/views/analyse/plan/components/planDialog.vue index a8b570f..4eec5fc 100644 --- a/src/views/analyse/plan/components/planDialog.vue +++ b/src/views/analyse/plan/components/planDialog.vue @@ -16,24 +16,25 @@ </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"> - <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" - @change="formatTime"> - </el-date-picker> </el-form-item> </el-col> <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> @@ -197,6 +198,9 @@ }) </script> -<style scoped> - +<style lang="scss" scoped> + ::v-deep(.pickTime){ + position: absolute !important; + top: 0 !important; + } </style> diff --git a/src/views/analyse/plan/index.vue b/src/views/analyse/plan/index.vue index 90fb145..b6208ab 100644 --- a/src/views/analyse/plan/index.vue +++ b/src/views/analyse/plan/index.vue @@ -123,7 +123,6 @@ const PlanDialog = defineAsyncComponent(() => import('./components/planDialog.vue')); - const planDialogRef = ref(); const userInfo = useUserInfo(); const { userInfos } = storeToRefs(userInfo); @@ -409,7 +408,7 @@ getPlanData(); getAllRiskUnitList(); getPersonList(); - planState.user = userInfos.value.uid + planState.user = Number(userInfos.value.uid) }) </script> diff --git a/src/views/analyse/riskUnit/index.ts b/src/views/analyse/riskUnit/index.ts index eba58ba..b1dde19 100644 --- a/src/views/analyse/riskUnit/index.ts +++ b/src/views/analyse/riskUnit/index.ts @@ -40,10 +40,11 @@ declare interface RiskUnitDialogType { title: string, + disabled: boolean experimentType: number | null, riskUnitDialogVisible: boolean, riskUnitForm: { - id?: number + id?: number | null experimentId: number | null, riskCode: string, riskName: string, diff --git a/src/views/basic/equipment/index.vue b/src/views/basic/equipment/index.vue index f0c84a2..0ffc56a 100644 --- a/src/views/basic/equipment/index.vue +++ b/src/views/basic/equipment/index.vue @@ -132,7 +132,7 @@ let res = await equipmentApi().getEquipmentByList(equipmentState.searchQuery); if(res.data.code === 100){ equipmentState.equipmentData = res.data.data; - equipmentState.total = res.data.total; + equipmentState.total = res.data.total }else{ ElMessage({ type: 'warning', diff --git a/src/views/experiment/developing/components/developDialog.vue b/src/views/experiment/developing/components/developDialog.vue index f6704e9..7edbbe1 100644 --- a/src/views/experiment/developing/components/developDialog.vue +++ b/src/views/experiment/developing/components/developDialog.vue @@ -15,7 +15,7 @@ <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> @@ -24,27 +24,32 @@ <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%" 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> @@ -58,34 +63,46 @@ <!-- :label="item.personName"--> <!-- ></el-option>--> <!-- </el-select>--> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.safeLiabilityUser"/> + <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-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.safeLiabilityUserPhone" /> + <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-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 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" :class="projectDialogState.projectForm.sisStatus==1?'required':''">安全信息化系统</td> - <td class="w-25 m-color"> - <el-input :disabled="projectDialogState.disabled" :readonly="projectDialogState.projectForm.sisStatus!==1" v-model="projectDialogState.projectForm.safeInformationSystem" /> + <td 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> @@ -94,119 +111,154 @@ <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-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.measure" placeholder="请输入预防措施" /> + <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">过夜、老化保障措施</td> - <td class="w-25 m-color"> + <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">封闭条件保障措施</td> - <td class="w-25 m-color"> + <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-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.safeManagerMethod" placeholder="请输入" /> - </td> - </tr> - <tr class="m-color b-font" style="text-align: center">应急预案/应急演练</tr> - <tr> - <td class="w-25 m-color required">有无预案</td> - <td class="w-25 m-color required">预案名称</td> - <td class="w-25 m-color required">是否演练</td> - <td class="w-25 m-color required">演练情况</td> - </tr> - <tr> - <td class="w-25 m-color"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.emergencyPlan" /> - </td> - <td class="w-25 m-color"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.emergencyPlanName" /> - </td> - <td class="w-25 m-color"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.emergencyDrillStatus" /> - </td> - <td class="w-25 m-color"> - <el-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.emergencyDrill" /> - </td> + <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-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.partitionCondition" placeholder="请输入" /> + <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> @@ -227,21 +279,23 @@ import {projectApi} from "/@/api/experiment/project"; import {personApi} from "/@/api/basic/person"; import {userApi} from "/@/api/systemManage/user"; -import SelectRoom from "/@/views/experiment/project/components/selectRoom.vue"; + import {useUserInfo} from "/@/stores/userInfo"; import {storeToRefs} from "pinia"; 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); @@ -272,13 +326,9 @@ explosionProof: "", fireProof: "", poisonProof: "", - hazardousWaste: null, safeManagerMethod: "", - emergencyPlan: "", - emergencyDrill: "", - emergencyPlanName: "", - emergencyDrillStatus: "", - partitionCondition: "", + emergencyList: [], + partitionCondition: null, note: "", createExperimentTime: '', startTime: '', @@ -293,10 +343,32 @@ ] }, projectFormRules: { - experimentName: [{ required: true, message: '请填写设备编号', trigger: 'blur' }], - deviceName: [{ required: true, message: '请填写设备名称', trigger: 'blur' }], - devicePower: [{ required: true, message: '请填写设备功率', trigger: 'blur' }], - deviceUnit: [{ required: true, message: '请选择计量单位', trigger: 'change' }] + 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: [], @@ -335,25 +407,17 @@ explosionProof: "", fireProof: "", poisonProof: "", - hazardousWaste: 1, safeManagerMethod: "", - emergencyPlan: "", - emergencyDrill: "", - emergencyPlanName: "", - emergencyDrillStatus: "", - partitionCondition: "", + emergencyList: [], + partitionCondition: null, note: "", createExperimentTime: '', startTime: '', - persons: [ - ], + persons: [], siteList: [], - deviceList: [ - ], - stuffList: [ - ], - hazardousWasteList: [ - ] + deviceList: [], + stuffList: [], + hazardousWasteList: [] }; }else if(title === '整改'){ projectDialogState.title = '整改'; @@ -397,6 +461,30 @@ const onSubmitProject = () => { 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({ @@ -438,14 +526,6 @@ }); return } - if(projectDialogState.projectForm.hazardousWasteList.length === 0){ - ElMessage({ - type: 'warning', - message: '请选择添加危废数据', - duration: 1000 - }); - return - } if(projectDialogState.projectForm.persons.length === 0){ ElMessage({ type: 'warning', @@ -454,6 +534,7 @@ }); return } + projectDialogState.projectForm.emergencyList = selectEmergencyRef.value.dataList projectDialogState.projectForm.persons = selectPersonRef.value.dataList projectDialogState.projectForm.hazardousWasteList = selectDangerRef.value.dataList projectDialogState.projectForm.siteList = selectRoomRef.value.dataList.map(({siteId}) => ({siteId})) @@ -646,7 +727,15 @@ .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{ diff --git a/src/views/experiment/developing/index.vue b/src/views/experiment/developing/index.vue index 8ee6f9d..d9744bb 100644 --- a/src/views/experiment/developing/index.vue +++ b/src/views/experiment/developing/index.vue @@ -82,6 +82,7 @@ <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> @@ -97,6 +98,7 @@ <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> @@ -106,13 +108,13 @@ 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 DevelopDialogRef = ref() +const ApplyStartRef = ref() +const ReportDialogRef = ref() const developState = reactive<ProjectStateType>({ developData: [], searchQuery: { @@ -152,6 +154,10 @@ 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: '确认', diff --git a/src/views/experiment/project/components/applyDialog.vue b/src/views/experiment/project/components/applyDialog.vue index 9317925..f77bc86 100644 --- a/src/views/experiment/project/components/applyDialog.vue +++ b/src/views/experiment/project/components/applyDialog.vue @@ -17,7 +17,7 @@ </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-form-item label="安全信息化系统名称" prop="safeInformationSystem"> <el-input v-model="applyStartDialogState.applyStartForm.safeInformationSystem" placeholder="材料类型" class="input-length"> </el-input> </el-form-item> @@ -42,7 +42,7 @@ const applyStartFormRef = ref() const applyStartDialogState = reactive<ApplyStartDialogType>({ - title: '申请开展', + title: '转为已开展', applyStartDialogVisible: false, applyStartForm: { id: null, diff --git a/src/views/experiment/project/components/projectDialog.vue b/src/views/experiment/project/components/projectDialog.vue index 9e234fc..e9fa759 100644 --- a/src/views/experiment/project/components/projectDialog.vue +++ b/src/views/experiment/project/components/projectDialog.vue @@ -133,8 +133,8 @@ </el-radio-group> </el-form-item> </td> - <td class="w-25 m-color required">过夜、老化保障措施</td> - <td class="w-25 m-color"> + <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> @@ -150,10 +150,10 @@ </el-radio-group> </el-form-item> </td> - <td class="w-25 m-color required">封闭条件保障措施</td> - <td class="w-25 m-color"> + <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-input :disabled="projectDialogState.disabled" v-model="projectDialogState.projectForm.unclosedManager"/> </el-form-item> </td> </tr> @@ -200,49 +200,54 @@ <!-- <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-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> + <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-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> @@ -278,6 +283,7 @@ 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')) @@ -286,6 +292,7 @@ const selectEquipmentRef = ref() const selectRoomRef = ref() const selectMaterialRef = ref() +const selectEmergencyRef = ref() const selectDangerRef = ref() const userInfo = useUserInfo(); @@ -316,24 +323,16 @@ explosionProof: "", fireProof: "", poisonProof: "", - hazardousWaste: null, safeManagerMethod: "", - emergencyPlan: "", - emergencyDrill: "", - emergencyPlanName: "", - emergencyDrillStatus: "", - partitionCondition: "", + emergencyList: [], + partitionCondition: null, note: "", createExperimentTime: '', - persons: [ - ], + persons: [], siteList: [], - deviceList: [ - ], - stuffList: [ - ], - hazardousWasteList: [ - ] + deviceList: [], + stuffList: [], + hazardousWasteList: [] }, projectFormRules: { experimentName: [{ required: true, message: '', trigger: 'blur' }], @@ -355,12 +354,8 @@ explosionProof: [{ required: true, message: '', trigger: 'blur' }], fireProof: [{ required: true, message: '', trigger: 'blur' }], poisonProof: [{ required: true, message: '', trigger: 'blur' }], - hazardousWaste: [{ required: true, message: '', trigger: 'blur' }], safeManagerMethod: [{ required: true, message: '', trigger: 'blur' }], - emergencyPlan: [{ required: true, message: '', trigger: 'blur' }], - emergencyDrill: [{ required: true, message: '', trigger: 'blur' }], - emergencyPlanName: [{ required: true, message: '', trigger: 'blur' }], - emergencyDrillStatus: [{ required: true, message: '', trigger: 'blur' }], + emergencyList: [{ required: true, message: '', trigger: 'blur' }], partitionCondition: [{ required: true, message: '', trigger: 'blur' }], createExperimentTime: [{ required: true, message: '', trigger: 'blur' }] }, @@ -409,13 +404,9 @@ explosionProof: "", fireProof: "", poisonProof: "", - hazardousWaste: 1, safeManagerMethod: "", - emergencyPlan: "", - emergencyDrill: "", - emergencyPlanName: "", - emergencyDrillStatus: "", - partitionCondition: "", + emergencyList: [], + partitionCondition: null, note: "", createExperimentTime: '', persons: [], @@ -450,6 +441,30 @@ const onSubmitProject = () => { 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({ @@ -491,14 +506,6 @@ }); return } - if(projectDialogState.projectForm.hazardousWasteList.length === 0){ - ElMessage({ - type: 'warning', - message: '请选择添加危废数据', - duration: 1000 - }); - return - } if(projectDialogState.projectForm.persons.length === 0){ ElMessage({ type: 'warning', @@ -507,6 +514,7 @@ }); return } + projectDialogState.projectForm.emergencyList = selectEmergencyRef.value.dataList projectDialogState.projectForm.persons = selectPersonRef.value.dataList projectDialogState.projectForm.hazardousWasteList = selectDangerRef.value.dataList // projectDialogState.projectForm.siteList = selectRoomRef.value.dataList.map(({siteId}) => ({siteId})) @@ -529,8 +537,6 @@ }); } }else{ - console.log(selectRoomRef.value.dataList,'selectRoomRef.value.dataList',selectMaterialRef.value.dataList) - // projectDialogState.projectForm.siteList = selectRoomRef.value.dataList.map(({siteId}) => ({siteId})) 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) diff --git a/src/views/experiment/project/components/selectDanger.vue b/src/views/experiment/project/components/selectDanger.vue index 340442b..26ade11 100644 --- a/src/views/experiment/project/components/selectDanger.vue +++ b/src/views/experiment/project/components/selectDanger.vue @@ -2,9 +2,9 @@ <tr class="m-color b-font" style="text-align: center">危废情况</tr> <tr> <td class="w-20 m-color">序号</td> - <td class="w-20 m-color required">废弃物分类</td> - <td class="w-20 m-color required">存储方式</td> - <td class="w-20 m-color required">预估处理量</td> + <td class="w-20 m-color">废弃物分类</td> + <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"> diff --git a/src/views/experiment/project/components/selectEmergency.vue b/src/views/experiment/project/components/selectEmergency.vue new file mode 100644 index 0000000..50a3993 --- /dev/null +++ b/src/views/experiment/project/components/selectEmergency.vue @@ -0,0 +1,181 @@ +<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/index.ts b/src/views/experiment/project/index.ts index eacbe83..5235c46 100644 --- a/src/views/experiment/project/index.ts +++ b/src/views/experiment/project/index.ts @@ -54,13 +54,9 @@ explosionProof: string, fireProof: string, poisonProof: string, - hazardousWaste: null | number, safeManagerMethod: string, - emergencyPlan: string, - emergencyDrill: string, - emergencyPlanName: string, - emergencyDrillStatus: string, - partitionCondition: string, + emergencyList: Array<emergencyListType>, + partitionCondition: null | number, note: string, startTime?: string, createExperimentTime: string @@ -152,6 +148,18 @@ 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>, @@ -198,7 +206,6 @@ stuffStorage: string, stuffUnit: string } - declare interface ApplyStartDialogType { title: string, diff --git a/src/views/experiment/project/index.vue b/src/views/experiment/project/index.vue index c56d58a..0eb8355 100644 --- a/src/views/experiment/project/index.vue +++ b/src/views/experiment/project/index.vue @@ -82,9 +82,11 @@ <el-table-column label="操作" width="250" fixed="right"> <template #default="scope"> <el-button size="small" text type="primary" :icon="View" @click="openProjectDialog('查看', scope.row)">查看</el-button> - <el-button size="small" text type="primary" :icon="Edit" @click="applyStart('申请开展', scope.row)">申请开展</el-button> + <el-button size="small" 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" @click="onDelProject(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> @@ -97,6 +99,7 @@ <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> @@ -106,13 +109,12 @@ 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 ProjectDialogRef = ref() +const ApplyStartRef = ref() +const ReportDialogRef = ref() const projectState = reactive<ProjectStateType>({ projectData: [], searchQuery: { @@ -152,10 +154,40 @@ 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: '确认', diff --git a/src/views/loginPage/loginPage.vue b/src/views/loginPage/loginPage.vue index a264634..29c9c52 100644 --- a/src/views/loginPage/loginPage.vue +++ b/src/views/loginPage/loginPage.vue @@ -2,7 +2,7 @@ <div class="login-container"> <div class="loginContent"> <div class="loginPanel"> - <div class="welcc">科学研究实验风险评估系统</div> + <div class="welcc">科学研究实验安全风险评估系统</div> <div class="loginGroup"> <div class="loginPic"> <img src="../../assets/loginPage/login-pic.png"> @@ -168,6 +168,9 @@ color: #485BD4; letter-spacing: 6px; white-space: nowrap; + position: relative; + z-index: 9999; + text-shadow: 0 3px 5px rgba(72,91,212,.4); } :deep(.loginGroup){ diff --git a/src/views/system/role/index.vue b/src/views/system/role/index.vue index 59ba2eb..f9b3ded 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" /> -- Gitblit v1.9.2