From e93d241d51765e701d89cd7f6f4088c6cb22949b Mon Sep 17 00:00:00 2001 From: 马宇豪 <978517621@qq.com> Date: 星期五, 21 四月 2023 16:51:47 +0800 Subject: [PATCH] 修改 --- src/views/newSpecialWorkSystem/workTicket/wdsq/components/fireLog.vue | 122 + src/views/specialWorkSystem/workTicket/wdsqjl/index.vue | 14 src/views/newSpecialWorkSystem/workTicket/zysq/index.vue | 192 ++ src/views/newSpecialWorkSystem/workTicket/wdsq/components/heightLog.vue | 125 + src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue | 366 +++ src/views/newSpecialWorkSystem/workTicket/wdsp/index.vue | 815 ++++++++ src/views/newSpecialWorkSystem/workTicket/wdsp/components/hoistLog.vue | 146 + src/views/newSpecialWorkSystem/workTicket/wdsq/components/brokenLog.vue | 131 + src/views/newSpecialWorkSystem/workTicket/wdsp/components/spaceLog.vue | 149 + src/views/newSpecialWorkSystem/workTicket/wdsq/components/plateLog.vue | 149 + src/views/intellectInspect/inspectIndex/index.vue | 42 src/views/newSpecialWorkSystem/workTicket/wdsp/components/fireLog.vue | 137 + src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue | 877 +++++++++ src/views/newSpecialWorkSystem/workTicket/wdsq/components/hoistLog.vue | 125 + src/views/newSpecialWorkSystem/workTicket/wdsp/components/powerLog.vue | 149 + src/views/newSpecialWorkSystem/workTicket/wdsp/components/plateLog.vue | 170 + src/views/newSpecialWorkSystem/workTicket/wdsq/components/spaceLog.vue | 128 + src/views/system/user/component/userDialog.vue | 71 src/views/newSpecialWorkSystem/workTicket/wdsp/components/brokenLog.vue | 152 + src/views/system/user/index.vue | 7 src/views/newSpecialWorkSystem/workTicket/wdsq/components/powerLog.vue | 128 + src/views/newSpecialWorkSystem/workTicket/wdsqjl/index.vue | 904 +++++++++ src/views/newSpecialWorkSystem/workTicket/wdsp/components/groundLog.vue | 152 + src/api/intellectInspectSystem/inspectIndex/index.ts | 8 src/views/newSpecialWorkSystem/workTicket/wdsp/components/heightLog.vue | 146 + src/views/newSpecialWorkSystem/workTicket/wdsq/components/groundLog.vue | 131 + 26 files changed, 5,489 insertions(+), 47 deletions(-) diff --git a/src/api/intellectInspectSystem/inspectIndex/index.ts b/src/api/intellectInspectSystem/inspectIndex/index.ts index 7110a1d..be08173 100644 --- a/src/api/intellectInspectSystem/inspectIndex/index.ts +++ b/src/api/intellectInspectSystem/inspectIndex/index.ts @@ -11,6 +11,14 @@ }); }, + getPieCountExcepOrder: (data: object) => { + return request({ + url: import.meta.env.VITE_API_URL + `/SafeCheckSmartScreen/select/countExcepOrderByPieChart`, + method: 'post', + data: data + }); + }, + // getListExcepOrderByPage: (data: object) => { return request({ diff --git a/src/views/intellectInspect/inspectIndex/index.vue b/src/views/intellectInspect/inspectIndex/index.vue index 9f6635f..43b8aae 100644 --- a/src/views/intellectInspect/inspectIndex/index.vue +++ b/src/views/intellectInspect/inspectIndex/index.vue @@ -24,20 +24,22 @@ <span class="tit">异常区域设备统计</span> <div class="filter-part2"> <el-switch - v-model="chartStatus" + v-model="searchQuery.regionType" inline-prompt style="--el-switch-on-color: #13ce66; --el-switch-off-color: #13ce66" active-text="区域" inactive-text="设备" + :active-value="2" + :inactive-value="3" /> </div> </div> <div class="chart" :id="sbtj"></div> - <el-radio-group v-model="period" size="small"> - <el-radio border label="week">近7天</el-radio> - <el-radio border label="month">近30天</el-radio> - <el-radio border label="season">近90天</el-radio> - <el-radio border label="year">近一年</el-radio> + <el-radio-group v-model="searchQuery.timeType" size="small"> + <el-radio border :label="1">近7天</el-radio> + <el-radio border :label="2">近30天</el-radio> + <el-radio border :label="3">近90天</el-radio> + <el-radio border :label="4">近一年</el-radio> </el-radio-group> </div> </div> @@ -227,8 +229,10 @@ classGroupList: Array<classGroup>; quotaList: []; inspectPointAllList: []; - chartStatus:boolean; - period: string; + searchQuery:{ + regionType:number; + timeType: number; + } dialogVisible:boolean; workNum: string; beImgs: []; @@ -263,8 +267,10 @@ unusualData: [], unchecked: null, unusual: null, - chartStatus: true, - period: 'month', + searchQuery:{ + regionType: 2, + timeType: 2, + }, uncheckedList: [], abnormalList: [], workTypeList: [ @@ -302,7 +308,7 @@ expandTrigger: 'hover', emitPath: false, value: 'depId', - label: 'depName', + label: 'name', checkStrictly: true }, classGroupList: [], @@ -322,8 +328,9 @@ // 页面载入时执行方法 onMounted(() => { - getDepartmentData(); + // getDepartmentData(); // getCountExcepOrder(); + // getPieCountExcepOrder(); getInspectRecord(); getListExcepOrder(); getDayData(); @@ -356,6 +363,17 @@ }); } } + const getPieCountExcepOrder = async ()=>{ + let res = await inspectIndexApi().getPieCountExcepOrder(state.searchQuery); + if (res.data.code === '200') { + console.log('饼状图趋势数据>>>', res.data.data) + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + } const acceptance =(row:object)=>{ ElMessageBox.confirm( '确认完成验收并结束工单?', diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsp/components/brokenLog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsp/components/brokenLog.vue new file mode 100644 index 0000000..dcb6adc --- /dev/null +++ b/src/views/newSpecialWorkSystem/workTicket/wdsp/components/brokenLog.vue @@ -0,0 +1,152 @@ +<template> + <div style="height: 100%"> + <el-form :model="details" label-width="150px"> + <el-form-item label="作业申请单号"> + <el-input v-model="details.workPermitNo" readonly /> + </el-form-item> + <el-form-item label="申请人"> + <el-input v-model="details.applyUname" readonly /> + </el-form-item> + <el-form-item label="部门名称"> + <el-input v-model="details.depName" readonly /> + </el-form-item> + <el-form-item label="作业人"> + <el-input v-model="details.operators" readonly type="textarea" /> + </el-form-item> + <el-form-item label="作业类型"> + <el-input v-model="details.workTypeDesc" readonly /> + </el-form-item> + <el-form-item label="作业等级"> + <el-input v-model="details.workLevelDesc" readonly /> + </el-form-item> + <el-form-item label="作业内容"> + <el-input v-model="details.workContent" readonly type="textarea" /> + </el-form-item> + <el-form-item label="作业地址"> + <el-input v-model="details.workLocation" readonly type="textarea" /> + </el-form-item> + <el-form-item label="作业单位ID"> + <el-input v-model="details.workDetail.operationDepId" readonly type="textarea" /> + </el-form-item> + <el-form-item label="断路原因"> + <el-input v-model="details.workDetail.bcReason" readonly type="textarea" /> + </el-form-item> + <el-form-item label="断路地段说明"> + <el-input v-model="details.workDetail.bcExplain" readonly type="textarea" /> + </el-form-item> + <el-form-item label="涉及相关部门"> + <el-input v-model="details.workDetail.involvedDepIds" readonly type="textarea"/> + </el-form-item> + <el-form-item label="图片"> + <el-image v-for="item in details.workDetail.bcPath" :preview-src-list="details.workDetail.bcPath" style="width: 150px; height: 150px;margin-right: 50px;margin-bottom: 20px" :src="item" fit="cover" /> + </el-form-item> + <el-form-item label="期望开始时间"> + <el-input v-model="details.expStartTime" readonly /> + </el-form-item> + <el-form-item label="期望结束时间"> + <el-input v-model="details.expEndTime" readonly /> + </el-form-item> + <el-form-item label="申请时间"> + <el-input v-model="details.applyTime" readonly /> + </el-form-item> +<!-- <el-form-item label="当前层级">--> +<!-- <el-input v-model="details.stepId" readonly />--> +<!-- </el-form-item>--> +<!-- <el-form-item label="上一层级">--> +<!-- <el-input v-model="details.preStepId" readonly />--> +<!-- </el-form-item>--> +<!-- <el-form-item label="下一层级">--> +<!-- <el-input v-model="details.nextStepId" readonly />--> +<!-- </el-form-item>--> + <el-form-item label="层级审批类型"> + <el-input v-model="details.stepTypeDesc" readonly /> + </el-form-item> + <el-form-item v-if="details.stepSerial && details.stepSerial!=null" label="层级排序号"> + <el-input v-model="details.stepSerial" readonly /> + </el-form-item> + <el-form-item v-if="details.stepStartApprovalTime && details.stepStartApprovalTime!=null" label="层级预期开始审批时间"> + <el-input v-model="details.stepStartApprovalTime" readonly /> + </el-form-item> + <el-form-item v-if="details.stepFinishApprovalTime && details.stepFinishApprovalTime!=null" label="层级预期结束审批时间"> + <el-input v-model="details.stepFinishApprovalTime" readonly /> + </el-form-item> + <el-form-item label="审批人姓名"> + <el-input v-model="details.unitApprovalUname" readonly /> + </el-form-item> + <el-form-item v-if="details.unitApprovalStartTime && details.unitApprovalStartTime!=null" label="单元审批开始时间"> + <el-input v-model="details.unitApprovalStartTime" readonly /> + </el-form-item> + <el-form-item v-if="details.unitApprovalEndTime && details.unitApprovalEndTime!=null" label="单元审批结束时间"> + <el-input v-model="details.unitApprovalEndTime" readonly /> + </el-form-item> + <el-form-item v-if="details.unitResultDesc && details.unitResultDesc!=null" label="单元审批结果"> + <el-input v-model="details.unitResultDesc" readonly /> + </el-form-item> + <el-form-item v-if="details.statusDesc && details.statusDesc!=null" label="当前状态"> + <el-input v-model="details.statusDesc" readonly /> + </el-form-item> + <el-form-item v-if="details.stepApprovalResultDesc && details.stepApprovalResultDesc!=null" label="审批结果"> + <el-input v-model="details.stepApprovalResultDesc" readonly /> + </el-form-item> + </el-form> + </div> +</template> + +<script lang="ts"> + import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + import {useUserInfo} from "/@/stores/userInfo"; + import { Session } from '/@/utils/storage'; + import { Search } from '@element-plus/icons-vue' + import { ElMessage } from 'element-plus' + import type { FormInstance, FormRules } from 'element-plus' + import { workApplyApi } from '/@/api/specialWorkSystem/workApply'; + + + interface stateType { + form: Object, + workerList: Array<any>, + workTypeList: Array<any>, + workLevelList: Array<any>, + otherWorkList: Array<any> + } + export default defineComponent({ + name: 'space', + components: {}, + props:['details'], + setup() { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + return { + Search + }; + }, + }); +</script> + +<style scoped lang="scss"> + .home-container { + height: 100%; + overflow: hidden; + position: relative; + .el-row{ + margin-bottom: 20px; + } + .el-row:last-child { + margin-bottom: 0; + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } + .el-cascader{ + width: 100% !important; + } + } +</style> diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsp/components/fireLog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsp/components/fireLog.vue new file mode 100644 index 0000000..ed30241 --- /dev/null +++ b/src/views/newSpecialWorkSystem/workTicket/wdsp/components/fireLog.vue @@ -0,0 +1,137 @@ +<template> + <div style="height: 100%"> + <el-form :model="details" label-width="150px"> + <el-form-item label="作业申请单号"> + <el-input v-model="details.workPermitNo" readonly /> + </el-form-item> + <el-form-item label="申请人"> + <el-input v-model="details.applyUname" readonly /> + </el-form-item> + <el-form-item label="部门名称"> + <el-input v-model="details.depName" readonly /> + </el-form-item> + <el-form-item label="作业人"> + <el-input v-model="details.operators" readonly type="textarea" /> + </el-form-item> + <el-form-item label="作业类型"> + <el-input v-model="details.workTypeDesc" readonly /> + </el-form-item> + <el-form-item label="作业等级"> + <el-input v-model="details.workLevelDesc" readonly /> + </el-form-item> + <el-form-item label="作业内容"> + <el-input v-model="details.workContent" readonly type="textarea" /> + </el-form-item> + <el-form-item label="作业地址"> + <el-input v-model="details.workLocation" readonly type="textarea" /> + </el-form-item> + <el-form-item label="作业方式"> + <el-input v-model="details.workDetail.hotMethod" readonly type="textarea" /> + </el-form-item> + <el-form-item label="关联其他作业"> + <el-input v-model="details.workDetail.otherSpecialWork" readonly type="textarea" /> + </el-form-item> + <el-form-item label="申请时间"> + <el-input v-model="details.applyTime" readonly /> + </el-form-item> +<!-- <el-form-item label="当前层级">--> +<!-- <el-input v-model="details.stepId" readonly />--> +<!-- </el-form-item>--> +<!-- <el-form-item label="上一层级">--> +<!-- <el-input v-model="details.preStepId" readonly />--> +<!-- </el-form-item>--> +<!-- <el-form-item label="下一层级">--> +<!-- <el-input v-model="details.nextStepId" readonly />--> +<!-- </el-form-item>--> + <el-form-item label="层级审批类型"> + <el-input v-model="details.stepTypeDesc" readonly /> + </el-form-item> + <el-form-item v-if="details.stepSerial && details.stepSerial!=null" label="层级排序号"> + <el-input v-model="details.stepSerial" readonly /> + </el-form-item> + <el-form-item v-if="details.stepStartApprovalTime && details.stepStartApprovalTime!=null" label="层级预期开始审批时间"> + <el-input v-model="details.stepStartApprovalTime" readonly /> + </el-form-item> + <el-form-item v-if="details.stepFinishApprovalTime && details.stepFinishApprovalTime!=null" label="层级预期结束审批时间"> + <el-input v-model="details.stepFinishApprovalTime" readonly /> + </el-form-item> + <el-form-item label="审批人姓名"> + <el-input v-model="details.unitApprovalUname" readonly /> + </el-form-item> + <el-form-item v-if="details.unitApprovalStartTime && details.unitApprovalStartTime!=null" label="单元审批开始时间"> + <el-input v-model="details.unitApprovalStartTime" readonly /> + </el-form-item> + <el-form-item v-if="details.unitApprovalEndTime && details.unitApprovalEndTime!=null" label="单元审批结束时间"> + <el-input v-model="details.unitApprovalEndTime" readonly /> + </el-form-item> + <el-form-item v-if="details.unitResultDesc && details.unitResultDesc!=null" label="单元审批结果"> + <el-input v-model="details.unitResultDesc" readonly /> + </el-form-item> + <el-form-item v-if="details.statusDesc && details.statusDesc!=null" label="当前状态"> + <el-input v-model="details.statusDesc" readonly /> + </el-form-item> + <el-form-item v-if="details.stepApprovalResultDesc && details.stepApprovalResultDesc!=null" label="审批结果"> + <el-input v-model="details.stepApprovalResultDesc" readonly /> + </el-form-item> + </el-form> + </div> +</template> + +<script lang="ts"> + import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + import {useUserInfo} from "/@/stores/userInfo"; + import { Session } from '/@/utils/storage'; + import { Search } from '@element-plus/icons-vue' + import { ElMessage } from 'element-plus' + import type { FormInstance, FormRules } from 'element-plus' + import { workApplyApi } from '/@/api/specialWorkSystem/workApply'; + + + interface stateType { + form: Object, + workerList: Array<any>, + workTypeList: Array<any>, + workLevelList: Array<any>, + otherWorkList: Array<any> + } + export default defineComponent({ + name: 'fire', + components: {}, + props:['details'], + setup() { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + return { + Search + }; + }, + }); +</script> + +<style scoped lang="scss"> + .home-container { + height: 100%; + overflow: hidden; + position: relative; + .el-row{ + margin-bottom: 20px; + } + .el-row:last-child { + margin-bottom: 0; + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } + .el-cascader{ + width: 100% !important; + } + } +</style> diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsp/components/groundLog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsp/components/groundLog.vue new file mode 100644 index 0000000..244330e --- /dev/null +++ b/src/views/newSpecialWorkSystem/workTicket/wdsp/components/groundLog.vue @@ -0,0 +1,152 @@ +<template> + <div style="height: 100%"> + <el-form :model="details" label-width="150px"> + <el-form-item label="作业申请单号"> + <el-input v-model="details.workPermitNo" readonly /> + </el-form-item> + <el-form-item label="申请人"> + <el-input v-model="details.applyUname" readonly /> + </el-form-item> + <el-form-item label="部门名称"> + <el-input v-model="details.depName" readonly /> + </el-form-item> + <el-form-item label="作业人"> + <el-input v-model="details.operators" readonly type="textarea" /> + </el-form-item> + <el-form-item label="作业类型"> + <el-input v-model="details.workTypeDesc" readonly /> + </el-form-item> + <el-form-item label="作业等级"> + <el-input v-model="details.workLevelDesc" readonly /> + </el-form-item> + <el-form-item label="作业内容"> + <el-input v-model="details.workContent" readonly type="textarea" /> + </el-form-item> + <el-form-item label="作业地址"> + <el-input v-model="details.workLocation" readonly type="textarea" /> + </el-form-item> + <el-form-item label="作业单位"> + <el-input v-model="details.workDetail.operationDepId" readonly type="textarea" /> + </el-form-item> + <el-form-item label="范围"> + <el-input v-model="details.workDetail.gbScope" readonly type="textarea" /> + </el-form-item> + <el-form-item label="动土方式"> + <el-input v-model="details.workDetail.gbMethod" readonly type="textarea" /> + </el-form-item> + <el-form-item label="关联其他作业"> + <el-input v-model="details.workDetail.otherSpecialWork" readonly type="textarea"/> + </el-form-item> + <el-form-item label="图片"> + <el-image v-for="item in details.workDetail.gbPath" :preview-src-list="details.workDetail.gbPath" style="width: 150px; height: 150px;margin-right: 50px;margin-bottom: 20px" :src="item" fit="cover" /> + </el-form-item> + <el-form-item label="期望开始时间"> + <el-input v-model="details.expStartTime" readonly /> + </el-form-item> + <el-form-item label="期望结束时间"> + <el-input v-model="details.expEndTime" readonly /> + </el-form-item> + <el-form-item label="申请时间"> + <el-input v-model="details.applyTime" readonly /> + </el-form-item> +<!-- <el-form-item label="当前层级">--> +<!-- <el-input v-model="details.stepId" readonly />--> +<!-- </el-form-item>--> +<!-- <el-form-item label="上一层级">--> +<!-- <el-input v-model="details.preStepId" readonly />--> +<!-- </el-form-item>--> +<!-- <el-form-item label="下一层级">--> +<!-- <el-input v-model="details.nextStepId" readonly />--> +<!-- </el-form-item>--> + <el-form-item label="层级审批类型"> + <el-input v-model="details.stepTypeDesc" readonly /> + </el-form-item> + <el-form-item v-if="details.stepSerial && details.stepSerial!=null" label="层级排序号"> + <el-input v-model="details.stepSerial" readonly /> + </el-form-item> + <el-form-item v-if="details.stepStartApprovalTime && details.stepStartApprovalTime!=null" label="层级预期开始审批时间"> + <el-input v-model="details.stepStartApprovalTime" readonly /> + </el-form-item> + <el-form-item v-if="details.stepFinishApprovalTime && details.stepFinishApprovalTime!=null" label="层级预期结束审批时间"> + <el-input v-model="details.stepFinishApprovalTime" readonly /> + </el-form-item> + <el-form-item label="审批人姓名"> + <el-input v-model="details.unitApprovalUname" readonly /> + </el-form-item> + <el-form-item v-if="details.unitApprovalStartTime && details.unitApprovalStartTime!=null" label="单元审批开始时间"> + <el-input v-model="details.unitApprovalStartTime" readonly /> + </el-form-item> + <el-form-item v-if="details.unitApprovalEndTime && details.unitApprovalEndTime!=null" label="单元审批结束时间"> + <el-input v-model="details.unitApprovalEndTime" readonly /> + </el-form-item> + <el-form-item v-if="details.unitResultDesc && details.unitResultDesc!=null" label="单元审批结果"> + <el-input v-model="details.unitResultDesc" readonly /> + </el-form-item> + <el-form-item v-if="details.statusDesc && details.statusDesc!=null" label="当前状态"> + <el-input v-model="details.statusDesc" readonly /> + </el-form-item> + <el-form-item v-if="details.stepApprovalResultDesc && details.stepApprovalResultDesc!=null" label="审批结果"> + <el-input v-model="details.stepApprovalResultDesc" readonly /> + </el-form-item> + </el-form> + </div> +</template> + +<script lang="ts"> + import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + import {useUserInfo} from "/@/stores/userInfo"; + import { Session } from '/@/utils/storage'; + import { Search } from '@element-plus/icons-vue' + import { ElMessage } from 'element-plus' + import type { FormInstance, FormRules } from 'element-plus' + import { workApplyApi } from '/@/api/specialWorkSystem/workApply'; + + + interface stateType { + form: Object, + workerList: Array<any>, + workTypeList: Array<any>, + workLevelList: Array<any>, + otherWorkList: Array<any> + } + export default defineComponent({ + name: 'space', + components: {}, + props:['details'], + setup() { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + return { + Search + }; + }, + }); +</script> + +<style scoped lang="scss"> + .home-container { + height: 100%; + overflow: hidden; + position: relative; + .el-row{ + margin-bottom: 20px; + } + .el-row:last-child { + margin-bottom: 0; + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } + .el-cascader{ + width: 100% !important; + } + } +</style> diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsp/components/heightLog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsp/components/heightLog.vue new file mode 100644 index 0000000..0fb8a7a --- /dev/null +++ b/src/views/newSpecialWorkSystem/workTicket/wdsp/components/heightLog.vue @@ -0,0 +1,146 @@ +<template> + <div style="height: 100%"> + <el-form :model="details" label-width="150px"> + <el-form-item label="作业申请单号"> + <el-input v-model="details.workPermitNo" readonly /> + </el-form-item> + <el-form-item label="申请人"> + <el-input v-model="details.applyUname" readonly /> + </el-form-item> + <el-form-item label="部门名称"> + <el-input v-model="details.depName" readonly /> + </el-form-item> + <el-form-item label="作业人"> + <el-input v-model="details.operators" readonly type="textarea" /> + </el-form-item> + <el-form-item label="作业类型"> + <el-input v-model="details.workTypeDesc" readonly /> + </el-form-item> + <el-form-item label="作业等级"> + <el-input v-model="details.workLevelDesc" readonly /> + </el-form-item> + <el-form-item label="作业内容"> + <el-input v-model="details.workContent" readonly type="textarea" /> + </el-form-item> + <el-form-item label="作业地址"> + <el-input v-model="details.workLocation" readonly type="textarea" /> + </el-form-item> + <el-form-item label="作业单位ID"> + <el-input v-model="details.workDetail.operationDepId" readonly type="textarea" /> + </el-form-item> + <el-form-item label="作业高度"> + <el-input v-model="details.workDetail.operationHeight" readonly type="textarea"><template #append>米(m)</template></el-input> + </el-form-item> + <el-form-item label="关联其他作业"> + <el-input v-model="details.workDetail.otherSpecialWork" readonly type="textarea"/> + </el-form-item> + <el-form-item label="期望开始时间"> + <el-input v-model="details.expStartTime" readonly /> + </el-form-item> + <el-form-item label="期望结束时间"> + <el-input v-model="details.expEndTime" readonly /> + </el-form-item> + <el-form-item label="申请时间"> + <el-input v-model="details.applyTime" readonly /> + </el-form-item> +<!-- <el-form-item label="当前层级">--> +<!-- <el-input v-model="details.stepId" readonly />--> +<!-- </el-form-item>--> +<!-- <el-form-item label="上一层级">--> +<!-- <el-input v-model="details.preStepId" readonly />--> +<!-- </el-form-item>--> +<!-- <el-form-item label="下一层级">--> +<!-- <el-input v-model="details.nextStepId" readonly />--> +<!-- </el-form-item>--> + <el-form-item label="层级审批类型"> + <el-input v-model="details.stepTypeDesc" readonly /> + </el-form-item> + <el-form-item v-if="details.stepSerial && details.stepSerial!=null" label="层级排序号"> + <el-input v-model="details.stepSerial" readonly /> + </el-form-item> + <el-form-item v-if="details.stepStartApprovalTime && details.stepStartApprovalTime!=null" label="层级预期开始审批时间"> + <el-input v-model="details.stepStartApprovalTime" readonly /> + </el-form-item> + <el-form-item v-if="details.stepFinishApprovalTime && details.stepFinishApprovalTime!=null" label="层级预期结束审批时间"> + <el-input v-model="details.stepFinishApprovalTime" readonly /> + </el-form-item> + <el-form-item label="审批人姓名"> + <el-input v-model="details.unitApprovalUname" readonly /> + </el-form-item> + <el-form-item v-if="details.unitApprovalStartTime && details.unitApprovalStartTime!=null" label="单元审批开始时间"> + <el-input v-model="details.unitApprovalStartTime" readonly /> + </el-form-item> + <el-form-item v-if="details.unitApprovalEndTime && details.unitApprovalEndTime!=null" label="单元审批结束时间"> + <el-input v-model="details.unitApprovalEndTime" readonly /> + </el-form-item> + <el-form-item v-if="details.unitResultDesc && details.unitResultDesc!=null" label="单元审批结果"> + <el-input v-model="details.unitResultDesc" readonly /> + </el-form-item> + <el-form-item v-if="details.statusDesc && details.statusDesc!=null" label="当前状态"> + <el-input v-model="details.statusDesc" readonly /> + </el-form-item> + <el-form-item v-if="details.stepApprovalResultDesc && details.stepApprovalResultDesc!=null" label="审批结果"> + <el-input v-model="details.stepApprovalResultDesc" readonly /> + </el-form-item> + </el-form> + </div> +</template> + +<script lang="ts"> + import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + import {useUserInfo} from "/@/stores/userInfo"; + import { Session } from '/@/utils/storage'; + import { Search } from '@element-plus/icons-vue' + import { ElMessage } from 'element-plus' + import type { FormInstance, FormRules } from 'element-plus' + import { workApplyApi } from '/@/api/specialWorkSystem/workApply'; + + + interface stateType { + form: Object, + workerList: Array<any>, + workTypeList: Array<any>, + workLevelList: Array<any>, + otherWorkList: Array<any> + } + export default defineComponent({ + name: 'space', + components: {}, + props:['details'], + setup() { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + return { + Search + }; + }, + }); +</script> + +<style scoped lang="scss"> + .home-container { + height: 100%; + overflow: hidden; + position: relative; + .el-row{ + margin-bottom: 20px; + } + .el-row:last-child { + margin-bottom: 0; + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } + .el-cascader{ + width: 100% !important; + } + } +</style> diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsp/components/hoistLog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsp/components/hoistLog.vue new file mode 100644 index 0000000..3b4dc2a --- /dev/null +++ b/src/views/newSpecialWorkSystem/workTicket/wdsp/components/hoistLog.vue @@ -0,0 +1,146 @@ +<template> + <div style="height: 100%"> + <el-form :model="details" label-width="150px"> + <el-form-item label="作业申请单号"> + <el-input v-model="details.workPermitNo" readonly /> + </el-form-item> + <el-form-item label="申请人"> + <el-input v-model="details.applyUname" readonly /> + </el-form-item> + <el-form-item label="部门名称"> + <el-input v-model="details.depName" readonly /> + </el-form-item> + <el-form-item label="作业人"> + <el-input v-model="details.operators" readonly type="textarea" /> + </el-form-item> + <el-form-item label="作业类型"> + <el-input v-model="details.workTypeDesc" readonly /> + </el-form-item> + <el-form-item label="作业等级"> + <el-input v-model="details.workLevelDesc" readonly /> + </el-form-item> + <el-form-item label="作业内容"> + <el-input v-model="details.workContent" readonly type="textarea" /> + </el-form-item> + <el-form-item label="作业地址"> + <el-input v-model="details.workLocation" readonly type="textarea" /> + </el-form-item> + <el-form-item label="吊装工具名称"> + <el-input v-model="details.workDetail.hoistingToolName" readonly type="textarea" /> + </el-form-item> + <el-form-item label="起吊物体重量"> + <el-input v-model="details.workDetail.weightMass" readonly type="textarea"><template #append>吨(t)</template></el-input> + </el-form-item> + <el-form-item label="关联其他作业"> + <el-input v-model="details.workDetail.otherSpecialWork" readonly type="textarea"/> + </el-form-item> + <el-form-item label="期望开始时间"> + <el-input v-model="details.expStartTime" readonly /> + </el-form-item> + <el-form-item label="期望结束时间"> + <el-input v-model="details.expEndTime" readonly /> + </el-form-item> + <el-form-item label="申请时间"> + <el-input v-model="details.applyTime" readonly /> + </el-form-item> +<!-- <el-form-item label="当前层级">--> +<!-- <el-input v-model="details.stepId" readonly />--> +<!-- </el-form-item>--> +<!-- <el-form-item label="上一层级">--> +<!-- <el-input v-model="details.preStepId" readonly />--> +<!-- </el-form-item>--> +<!-- <el-form-item label="下一层级">--> +<!-- <el-input v-model="details.nextStepId" readonly />--> +<!-- </el-form-item>--> + <el-form-item label="层级审批类型"> + <el-input v-model="details.stepTypeDesc" readonly /> + </el-form-item> + <el-form-item v-if="details.stepSerial && details.stepSerial!=null" label="层级排序号"> + <el-input v-model="details.stepSerial" readonly /> + </el-form-item> + <el-form-item v-if="details.stepStartApprovalTime && details.stepStartApprovalTime!=null" label="层级预期开始审批时间"> + <el-input v-model="details.stepStartApprovalTime" readonly /> + </el-form-item> + <el-form-item v-if="details.stepFinishApprovalTime && details.stepFinishApprovalTime!=null" label="层级预期结束审批时间"> + <el-input v-model="details.stepFinishApprovalTime" readonly /> + </el-form-item> + <el-form-item label="审批人姓名"> + <el-input v-model="details.unitApprovalUname" readonly /> + </el-form-item> + <el-form-item v-if="details.unitApprovalStartTime && details.unitApprovalStartTime!=null" label="单元审批开始时间"> + <el-input v-model="details.unitApprovalStartTime" readonly /> + </el-form-item> + <el-form-item v-if="details.unitApprovalEndTime && details.unitApprovalEndTime!=null" label="单元审批结束时间"> + <el-input v-model="details.unitApprovalEndTime" readonly /> + </el-form-item> + <el-form-item v-if="details.unitResultDesc && details.unitResultDesc!=null" label="单元审批结果"> + <el-input v-model="details.unitResultDesc" readonly /> + </el-form-item> + <el-form-item v-if="details.statusDesc && details.statusDesc!=null" label="当前状态"> + <el-input v-model="details.statusDesc" readonly /> + </el-form-item> + <el-form-item v-if="details.stepApprovalResultDesc && details.stepApprovalResultDesc!=null" label="审批结果"> + <el-input v-model="details.stepApprovalResultDesc" readonly /> + </el-form-item> + </el-form> + </div> +</template> + +<script lang="ts"> + import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + import {useUserInfo} from "/@/stores/userInfo"; + import { Session } from '/@/utils/storage'; + import { Search } from '@element-plus/icons-vue' + import { ElMessage } from 'element-plus' + import type { FormInstance, FormRules } from 'element-plus' + import { workApplyApi } from '/@/api/specialWorkSystem/workApply'; + + + interface stateType { + form: Object, + workerList: Array<any>, + workTypeList: Array<any>, + workLevelList: Array<any>, + otherWorkList: Array<any> + } + export default defineComponent({ + name: 'space', + components: {}, + props:['details'], + setup() { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + return { + Search + }; + }, + }); +</script> + +<style scoped lang="scss"> + .home-container { + height: 100%; + overflow: hidden; + position: relative; + .el-row{ + margin-bottom: 20px; + } + .el-row:last-child { + margin-bottom: 0; + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } + .el-cascader{ + width: 100% !important; + } + } +</style> diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsp/components/plateLog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsp/components/plateLog.vue new file mode 100644 index 0000000..f307fc0 --- /dev/null +++ b/src/views/newSpecialWorkSystem/workTicket/wdsp/components/plateLog.vue @@ -0,0 +1,170 @@ +<template> + <div style="height: 100%"> + <el-form :model="details" label-width="150px"> + <el-form-item label="作业申请单号"> + <el-input v-model="details.workPermitNo" readonly /> + </el-form-item> + <el-form-item label="申请人"> + <el-input v-model="details.applyUname" readonly /> + </el-form-item> + <el-form-item label="部门名称"> + <el-input v-model="details.depName" readonly /> + </el-form-item> + <el-form-item label="作业人"> + <el-input v-model="details.operators" readonly type="textarea" /> + </el-form-item> + <el-form-item label="作业类型"> + <el-input v-model="details.workTypeDesc" readonly /> + </el-form-item> + <el-form-item label="作业等级"> + <el-input v-model="details.workLevelDesc" readonly /> + </el-form-item> + <el-form-item label="作业内容"> + <el-input v-model="details.workContent" readonly type="textarea" /> + </el-form-item> + <el-form-item label="作业地址"> + <el-input v-model="details.workLocation" readonly type="textarea" /> + </el-form-item> + <el-form-item label="盲板编号"> + <el-input v-model="details.workDetail.bpCode" readonly type="textarea" /> + </el-form-item> + <el-form-item label="主要介质"> + <el-input v-model="details.workDetail.mainMedia" readonly type="textarea" /> + </el-form-item> + <el-form-item label="温度"> + <el-input v-model="details.workDetail.temperature" readonly type="textarea"><template #append>摄氏度(℃)</template></el-input> + </el-form-item> + <el-form-item label="压力"> + <el-input v-model="details.workDetail.pressure" readonly type="textarea"><template #append>千帕(kPa)</template></el-input> + </el-form-item> + <el-form-item label="盲板材质"> + <el-input v-model="details.workDetail.bpMaterialQuality" readonly type="textarea"/> + </el-form-item> + <el-form-item label="盲板规格"> + <el-input v-model="details.workDetail.bpSpecification" readonly type="textarea"/> + </el-form-item> + <el-form-item label="盲板位置"> + <el-input v-model="details.workDetail.bpLocation" readonly type="textarea"/> + </el-form-item> + <el-form-item label="装盲板时间"> + <el-input v-model="details.workDetail.installBpTime" readonly/> + </el-form-item> + <el-form-item label="拆盲板时间"> + <el-input v-model="details.workDetail.uninstallBpTime" readonly/> + </el-form-item> + <el-form-item label="关联其他作业"> + <el-input v-model="details.workDetail.otherSpecialWork" readonly type="textarea"/> + </el-form-item> + <el-form-item label="盲板位置图"> + <el-image v-for="item in details.workDetail.bpLocationMapPath" :preview-src-list="details.workDetail.bpLocationMapPath" style="width: 150px; height: 150px;margin-right: 50px;margin-bottom: 20px" :src="item" fit="cover" /> + </el-form-item> + <el-form-item label="期望开始时间"> + <el-input v-model="details.expStartTime" readonly /> + </el-form-item> + <el-form-item label="期望结束时间"> + <el-input v-model="details.expEndTime" readonly /> + </el-form-item> + <el-form-item label="申请时间"> + <el-input v-model="details.applyTime" readonly /> + </el-form-item> +<!-- <el-form-item label="当前层级">--> +<!-- <el-input v-model="details.stepId" readonly />--> +<!-- </el-form-item>--> +<!-- <el-form-item label="上一层级">--> +<!-- <el-input v-model="details.preStepId" readonly />--> +<!-- </el-form-item>--> +<!-- <el-form-item label="下一层级">--> +<!-- <el-input v-model="details.nextStepId" readonly />--> +<!-- </el-form-item>--> + <el-form-item label="层级审批类型"> + <el-input v-model="details.stepTypeDesc" readonly /> + </el-form-item> + <el-form-item v-if="details.stepSerial && details.stepSerial!=null" label="层级排序号"> + <el-input v-model="details.stepSerial" readonly /> + </el-form-item> + <el-form-item v-if="details.stepStartApprovalTime && details.stepStartApprovalTime!=null" label="层级预期开始审批时间"> + <el-input v-model="details.stepStartApprovalTime" readonly /> + </el-form-item> + <el-form-item v-if="details.stepFinishApprovalTime && details.stepFinishApprovalTime!=null" label="层级预期结束审批时间"> + <el-input v-model="details.stepFinishApprovalTime" readonly /> + </el-form-item> + <el-form-item label="审批人姓名"> + <el-input v-model="details.unitApprovalUname" readonly /> + </el-form-item> + <el-form-item v-if="details.unitApprovalStartTime && details.unitApprovalStartTime!=null" label="单元审批开始时间"> + <el-input v-model="details.unitApprovalStartTime" readonly /> + </el-form-item> + <el-form-item v-if="details.unitApprovalEndTime && details.unitApprovalEndTime!=null" label="单元审批结束时间"> + <el-input v-model="details.unitApprovalEndTime" readonly /> + </el-form-item> + <el-form-item v-if="details.unitResultDesc && details.unitResultDesc!=null" label="单元审批结果"> + <el-input v-model="details.unitResultDesc" readonly /> + </el-form-item> + <el-form-item v-if="details.statusDesc && details.statusDesc!=null" label="当前状态"> + <el-input v-model="details.statusDesc" readonly /> + </el-form-item> + <el-form-item v-if="details.stepApprovalResultDesc && details.stepApprovalResultDesc!=null" label="审批结果"> + <el-input v-model="details.stepApprovalResultDesc" readonly /> + </el-form-item> + </el-form> + </div> +</template> + +<script lang="ts"> + import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + import {useUserInfo} from "/@/stores/userInfo"; + import { Session } from '/@/utils/storage'; + import { Search } from '@element-plus/icons-vue' + import { ElMessage } from 'element-plus' + import type { FormInstance, FormRules } from 'element-plus' + import { workApplyApi } from '/@/api/specialWorkSystem/workApply'; + + + interface stateType { + form: Object, + workerList: Array<any>, + workTypeList: Array<any>, + workLevelList: Array<any>, + otherWorkList: Array<any> + } + export default defineComponent({ + name: 'space', + components: {}, + props:['details'], + setup() { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + return { + Search + }; + }, + }); +</script> + +<style scoped lang="scss"> + .home-container { + height: 100%; + overflow: hidden; + position: relative; + .el-row{ + margin-bottom: 20px; + } + .el-row:last-child { + margin-bottom: 0; + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } + .el-cascader{ + width: 100% !important; + } + } +</style> diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsp/components/powerLog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsp/components/powerLog.vue new file mode 100644 index 0000000..f3c893c --- /dev/null +++ b/src/views/newSpecialWorkSystem/workTicket/wdsp/components/powerLog.vue @@ -0,0 +1,149 @@ +<template> + <div style="height: 100%"> + <el-form :model="details" label-width="150px"> + <el-form-item label="作业申请单号"> + <el-input v-model="details.workPermitNo" readonly /> + </el-form-item> + <el-form-item label="申请人"> + <el-input v-model="details.applyUname" readonly /> + </el-form-item> + <el-form-item label="部门名称"> + <el-input v-model="details.depName" readonly /> + </el-form-item> + <el-form-item label="作业人"> + <el-input v-model="details.operators" readonly type="textarea" /> + </el-form-item> + <el-form-item label="作业类型"> + <el-input v-model="details.workTypeDesc" readonly /> + </el-form-item> + <el-form-item label="作业等级"> + <el-input v-model="details.workLevelDesc" readonly /> + </el-form-item> + <el-form-item label="作业内容"> + <el-input v-model="details.workContent" readonly type="textarea" /> + </el-form-item> + <el-form-item label="作业地址"> + <el-input v-model="details.workLocation" readonly type="textarea" /> + </el-form-item> + <el-form-item label="电源接入点"> + <el-input v-model="details.workDetail.powerAccessPoint" readonly type="textarea" /> + </el-form-item> + <el-form-item label="工作电压"> + <el-input v-model="details.workDetail.workingVoltage" readonly type="textarea"><template #append>伏特(v)</template></el-input> + </el-form-item> + <el-form-item label="用电设备及功率"> + <el-input v-model="details.workDetail.equipmentAndPower" readonly type="textarea" /> + </el-form-item> + <el-form-item label="关联其他作业"> + <el-input v-model="details.workDetail.otherSpecialWork" readonly type="textarea"/> + </el-form-item> + <el-form-item label="期望开始时间"> + <el-input v-model="details.expStartTime" readonly /> + </el-form-item> + <el-form-item label="期望结束时间"> + <el-input v-model="details.expEndTime" readonly /> + </el-form-item> + <el-form-item label="申请时间"> + <el-input v-model="details.applyTime" readonly /> + </el-form-item> +<!-- <el-form-item label="当前层级">--> +<!-- <el-input v-model="details.stepId" readonly />--> +<!-- </el-form-item>--> +<!-- <el-form-item label="上一层级">--> +<!-- <el-input v-model="details.preStepId" readonly />--> +<!-- </el-form-item>--> +<!-- <el-form-item label="下一层级">--> +<!-- <el-input v-model="details.nextStepId" readonly />--> +<!-- </el-form-item>--> + <el-form-item label="层级审批类型"> + <el-input v-model="details.stepTypeDesc" readonly /> + </el-form-item> + <el-form-item v-if="details.stepSerial && details.stepSerial!=null" label="层级排序号"> + <el-input v-model="details.stepSerial" readonly /> + </el-form-item> + <el-form-item v-if="details.stepStartApprovalTime && details.stepStartApprovalTime!=null" label="层级预期开始审批时间"> + <el-input v-model="details.stepStartApprovalTime" readonly /> + </el-form-item> + <el-form-item v-if="details.stepFinishApprovalTime && details.stepFinishApprovalTime!=null" label="层级预期结束审批时间"> + <el-input v-model="details.stepFinishApprovalTime" readonly /> + </el-form-item> + <el-form-item label="审批人姓名"> + <el-input v-model="details.unitApprovalUname" readonly /> + </el-form-item> + <el-form-item v-if="details.unitApprovalStartTime && details.unitApprovalStartTime!=null" label="单元审批开始时间"> + <el-input v-model="details.unitApprovalStartTime" readonly /> + </el-form-item> + <el-form-item v-if="details.unitApprovalEndTime && details.unitApprovalEndTime!=null" label="单元审批结束时间"> + <el-input v-model="details.unitApprovalEndTime" readonly /> + </el-form-item> + <el-form-item v-if="details.unitResultDesc && details.unitResultDesc!=null" label="单元审批结果"> + <el-input v-model="details.unitResultDesc" readonly /> + </el-form-item> + <el-form-item v-if="details.statusDesc && details.statusDesc!=null" label="当前状态"> + <el-input v-model="details.statusDesc" readonly /> + </el-form-item> + <el-form-item v-if="details.stepApprovalResultDesc && details.stepApprovalResultDesc!=null" label="审批结果"> + <el-input v-model="details.stepApprovalResultDesc" readonly /> + </el-form-item> + </el-form> + </div> +</template> + +<script lang="ts"> + import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + import {useUserInfo} from "/@/stores/userInfo"; + import { Session } from '/@/utils/storage'; + import { Search } from '@element-plus/icons-vue' + import { ElMessage } from 'element-plus' + import type { FormInstance, FormRules } from 'element-plus' + import { workApplyApi } from '/@/api/specialWorkSystem/workApply'; + + + interface stateType { + form: Object, + workerList: Array<any>, + workTypeList: Array<any>, + workLevelList: Array<any>, + otherWorkList: Array<any> + } + export default defineComponent({ + name: 'space', + components: {}, + props:['details'], + setup() { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + return { + Search + }; + }, + }); +</script> + +<style scoped lang="scss"> + .home-container { + height: 100%; + overflow: hidden; + position: relative; + .el-row{ + margin-bottom: 20px; + } + .el-row:last-child { + margin-bottom: 0; + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } + .el-cascader{ + width: 100% !important; + } + } +</style> diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsp/components/spaceLog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsp/components/spaceLog.vue new file mode 100644 index 0000000..d9feabc --- /dev/null +++ b/src/views/newSpecialWorkSystem/workTicket/wdsp/components/spaceLog.vue @@ -0,0 +1,149 @@ +<template> + <div style="height: 100%"> + <el-form :model="details" label-width="150px"> + <el-form-item label="作业申请单号"> + <el-input v-model="details.workPermitNo" readonly /> + </el-form-item> + <el-form-item label="申请人"> + <el-input v-model="details.applyUname" readonly /> + </el-form-item> + <el-form-item label="部门名称"> + <el-input v-model="details.depName" readonly /> + </el-form-item> + <el-form-item label="作业人"> + <el-input v-model="details.operators" readonly type="textarea" /> + </el-form-item> + <el-form-item label="作业类型"> + <el-input v-model="details.workTypeDesc" readonly /> + </el-form-item> + <el-form-item label="作业等级"> + <el-input v-model="details.workLevelDesc" readonly /> + </el-form-item> + <el-form-item label="作业内容"> + <el-input v-model="details.workContent" readonly type="textarea" /> + </el-form-item> + <el-form-item label="作业地址"> + <el-input v-model="details.workLocation" readonly type="textarea" /> + </el-form-item> + <el-form-item label="受限空间所属单位"> + <el-input v-model="details.workDetail.csDepId" readonly type="textarea" /> + </el-form-item> + <el-form-item label="受限空间名称"> + <el-input v-model="details.workDetail.csName" readonly type="textarea" /> + </el-form-item> + <el-form-item label="空间原有介质名称"> + <el-input v-model="details.workDetail.csOriginalName" readonly type="textarea" /> + </el-form-item> + <el-form-item label="关联其他作业"> + <el-input v-model="details.workDetail.otherSpecialWork" readonly type="textarea" /> + </el-form-item> + <el-form-item label="期望开始时间"> + <el-input v-model="details.expStartTime" readonly /> + </el-form-item> + <el-form-item label="期望结束时间"> + <el-input v-model="details.expEndTime" readonly /> + </el-form-item> + <el-form-item label="申请时间"> + <el-input v-model="details.applyTime" readonly /> + </el-form-item> +<!-- <el-form-item label="当前层级">--> +<!-- <el-input v-model="details.stepId" readonly />--> +<!-- </el-form-item>--> +<!-- <el-form-item label="上一层级">--> +<!-- <el-input v-model="details.preStepId" readonly />--> +<!-- </el-form-item>--> +<!-- <el-form-item label="下一层级">--> +<!-- <el-input v-model="details.nextStepId" readonly />--> +<!-- </el-form-item>--> + <el-form-item label="层级审批类型"> + <el-input v-model="details.stepTypeDesc" readonly /> + </el-form-item> + <el-form-item v-if="details.stepSerial && details.stepSerial!=null" label="层级排序号"> + <el-input v-model="details.stepSerial" readonly /> + </el-form-item> + <el-form-item v-if="details.stepStartApprovalTime && details.stepStartApprovalTime!=null" label="层级预期开始审批时间"> + <el-input v-model="details.stepStartApprovalTime" readonly /> + </el-form-item> + <el-form-item v-if="details.stepFinishApprovalTime && details.stepFinishApprovalTime!=null" label="层级预期结束审批时间"> + <el-input v-model="details.stepFinishApprovalTime" readonly /> + </el-form-item> + <el-form-item label="审批人姓名"> + <el-input v-model="details.unitApprovalUname" readonly /> + </el-form-item> + <el-form-item v-if="details.unitApprovalStartTime && details.unitApprovalStartTime!=null" label="单元审批开始时间"> + <el-input v-model="details.unitApprovalStartTime" readonly /> + </el-form-item> + <el-form-item v-if="details.unitApprovalEndTime && details.unitApprovalEndTime!=null" label="单元审批结束时间"> + <el-input v-model="details.unitApprovalEndTime" readonly /> + </el-form-item> + <el-form-item v-if="details.unitResultDesc && details.unitResultDesc!=null" label="单元审批结果"> + <el-input v-model="details.unitResultDesc" readonly /> + </el-form-item> + <el-form-item v-if="details.statusDesc && details.statusDesc!=null" label="当前状态"> + <el-input v-model="details.statusDesc" readonly /> + </el-form-item> + <el-form-item v-if="details.stepApprovalResultDesc && details.stepApprovalResultDesc!=null" label="审批结果"> + <el-input v-model="details.stepApprovalResultDesc" readonly /> + </el-form-item> + </el-form> + </div> +</template> + +<script lang="ts"> + import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + import {useUserInfo} from "/@/stores/userInfo"; + import { Session } from '/@/utils/storage'; + import { Search } from '@element-plus/icons-vue' + import { ElMessage } from 'element-plus' + import type { FormInstance, FormRules } from 'element-plus' + import { workApplyApi } from '/@/api/specialWorkSystem/workApply'; + + + interface stateType { + form: Object, + workerList: Array<any>, + workTypeList: Array<any>, + workLevelList: Array<any>, + otherWorkList: Array<any> + } + export default defineComponent({ + name: 'space', + components: {}, + props:['details'], + setup() { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + return { + Search + }; + }, + }); +</script> + +<style scoped lang="scss"> + .home-container { + height: 100%; + overflow: hidden; + position: relative; + .el-row{ + margin-bottom: 20px; + } + .el-row:last-child { + margin-bottom: 0; + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } + .el-cascader{ + width: 100% !important; + } + } +</style> diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsp/index.vue b/src/views/newSpecialWorkSystem/workTicket/wdsp/index.vue new file mode 100644 index 0000000..84dfa62 --- /dev/null +++ b/src/views/newSpecialWorkSystem/workTicket/wdsp/index.vue @@ -0,0 +1,815 @@ +<template> + <div class="home-container"> +<!-- <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">--> +<!-- <el-tab-pane label="申请中" name="1">--> + <div style="height: 100%"> + <el-row class="homeCard"> + <span>作业类型:</span> + <el-col :span="10"> + <div class="grid-content topInfo"> + <el-select v-model="searchWord"> + <el-option + v-for="item in workType" + :key="item.id" + :label="item.name" + :value="item.id" + /> + </el-select> + <el-button type="primary" @click="searchRecord">查询</el-button> + <el-button plain @click="clearSearch">重置</el-button> + </div> + </el-col> + </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="toApply()">申请</el-button> + <!-- <el-button type="danger" :icon="Delete" size="default">删除</el-button>--> + <!-- <el-button type="success" size="default">设置分类</el-button>--> + </el-col> + <el-button type="primary" :icon="Refresh" size="default" @click="reLoadData()" /> + </el-row> + <el-table ref="multipleTableRef" :data="applyData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }"> + <el-table-column property="applyUname" label="申请人" /> + <el-table-column property="depName" label="部门名称" /> + <el-table-column property="operators" label="作业人" /> + <el-table-column property="workTypeDesc" label="作业类型" /> + <el-table-column property="workLevelDesc" label="作业等级" /> + <el-table-column property="applyTime" label="申请时间" width="180" /> + <el-table-column label="审批状态" align="center" width="180"> + <template #default="scope"> + <el-tag :type="scope.row.status==2?'success':(scope.row.status==8||scope.row.status==9)?'warning':'danger'">{{ scope.row.statusDesc }}</el-tag> + </template> + </el-table-column> + <el-table-column fixed="right" label="操作" align="center" width="250"> + <template #default="scope"> + <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> + <el-button link type="success" size="small" :icon="Finished" @click="viewStatus(scope.row)">进度</el-button> +<!-- <el-button link type="warning" size="small" :icon="Delete" @click="deleteRecordBtn(scope.row)">终止</el-button>--> + </template> + </el-table-column> + </el-table> + <div class="pageBtn"> + <el-pagination v-model:currentPage="pageIndex1" v-model:page-size="pageSize1" :page-sizes="[10, 15]" small="false" background layout="total, sizes, prev, pager, next, jumper" :total="totalSize1" @size-change="handleSizeChange1" @current-change="handleCurrentChange1" /> + </div> + </div> + </div> + </div> + <el-dialog v-model="dialogDetails" title="作业审批详情" center> + <fire v-if="dialogType == 1" :details = details></fire> + <space v-else-if="dialogType == 2" :details = details></space> + <hoist v-else-if="dialogType == 3" :details = details></hoist> + <ground v-else-if="dialogType == 4" :details = details></ground> + <broken v-else-if="dialogType == 5" :details = details></broken> + <height v-else-if="dialogType == 6" :details = details></height> + <power v-else-if="dialogType == 7" :details = details></power> + <plate v-else :details = details></plate> + <template #footer> + <span class="dialog-footer"> + <el-button type="primary" @click="dialogDetails = false" + >确认</el-button + > + </span> + </template> + </el-dialog> + <el-dialog v-model="dialogStatus" title="作业审批进度" center width="60%"> + <el-form v-if="approveInfo.operators.length > 0" style="margin-bottom: 40px"> + <el-form-item label="申请作业人"> + <el-input v-model="approveInfo.operators" readonly type="textarea" /> + </el-form-item> + </el-form> + <div style="display: flex; flex-direction: column-reverse"> + <div v-for="(item, index) in approveInfo.approvalSteps" class="stepItem"> + <div class="stepNum">{{ item.stepSerial }}</div> + <div class="stepCard"> + <el-card class="box-card" shadow="always"> + <div class="text"> + 审批结果:<span class="bold-text">{{ item.approvalResultDesc }}</span> + </div> + <div class="text"> + 审批层级:<span class="bold-text">{{ item.typeDesc }}</span> + </div> + <div class="text" v-if="item.auditTypeDesc"> + 审批类型:<span class="bold-text">{{ item.auditTypeDesc }}</span> + </div> + <div class="text" v-show="item.startApprovalTime != null"> + 开始时间:<span>{{ item.startApprovalTime }}</span> + </div> + <div class="approveUnit"> + <div class="item-tit"><span>审批人</span><span>审批状态</span></div> + <div class="item-cont" v-for="i in item.stepUnits"> + <span>{{ i.approvalUname }}</span + ><span>{{ i.resultDesc }}</span> + </div> + </div> + <div class="approveItem"> + <div class="item-tit"> + <span>审批项目</span> +<!-- <span>类型</span>--> + <div>措施标准</div> + </div> + <div class="item-cont" v-for="i in item.stepItems"> + <span>{{ i.itemName }}</span> +<!-- <span>{{ i.typeDesc }}</span>--> + <div v-if="i.measure !== null"> + <div> + <span>作业类型:</span><span>{{ i.measure.workTypeDesc }}</span> + </div> + <div> + <span>措施内容:</span><span>{{ i.measure.context }}</span> + </div> + </div> + <div v-if="i.stand !== null"> + <div> + <span>标题名称:</span><span>{{ i.stand.title }}</span> + </div> + <div> + <span>标准内容:</span><span>{{ i.stand.typeDesc }}</span> + </div> + </div> + </div> + </div> + <div class="text" v-show="item.expFinishApprovalTime != null"> + 期望结束时间:<span>{{ item.expFinishApprovalTime }}</span> + </div> + <div class="text" v-show="item.finishApprovalTime != null"> + 结束时间:<span>{{ item.finishApprovalTime }}</span> + </div> + </el-card> + </div> + </div> + </div> + </el-dialog> + <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear"> + <span>您确定要终止该条审批吗?</span> + <template #footer> + <span class="dialog-footer"> + <el-button @click="deleteDialog = false" size="default">取消</el-button> + <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button> + </span> + </template> + </el-dialog> +<!-- </el-tab-pane>--> +<!-- <el-tab-pane label="已通过" name="2">--> +<!-- <div style="height: 100%">--> +<!-- <el-row class="homeCard">--> +<!-- <el-col :span="8">--> +<!-- <div class="grid-content topInfo">--> +<!-- <el-input v-model="searchWord" placeholder="作业证名称"></el-input>--> +<!-- <el-button type="primary">查询</el-button>--> +<!-- <el-button plain>重置</el-button>--> +<!-- </div>--> +<!-- </el-col>--> +<!-- </el-row>--> +<!-- <div class="homeCard">--> +<!-- <div class="main-card">--> +<!-- <el-table ref="multipleTableRef" :data="passedData" style="width: 100%" height="calc(100% - 48px)" :header-cell-style="{ background: '#fafafa' }" @selection-change="handleSelectionChange">--> +<!-- <el-table-column type="selection" width="55" />--> +<!-- <el-table-column type="index" label="编号" width="200" />--> +<!-- <el-table-column property="level" label="作业证等级" width="180" sortable />--> +<!-- <el-table-column property="applyDate" label="申请日期" sortable />--> +<!-- <el-table-column property="name" label="申请人" width="180" />--> +<!-- <el-table-column property="department" label="申请部门" width="180" />--> +<!-- <el-table-column label="申请状态" width="180">--> +<!-- <template #default="scope">--> +<!-- <el-tag type="success">{{ scope.row.status }}</el-tag>--> +<!-- </template>--> +<!-- </el-table-column>--> +<!-- </el-table>--> +<!-- <div class="pageBtn">--> +<!-- <el-pagination v-model:currentPage="pageIndex2" v-model:page-size="pageSize2" :page-sizes="[10, 15]" small="false" background layout="total, sizes, prev, pager, next, jumper" :total="totalSize2" @size-change="handleSizeChange2" @current-change="handleCurrentChange2" />--> +<!-- </div>--> +<!-- </div>--> +<!-- </div>--> +<!-- </div>--> +<!-- </el-tab-pane>--> +<!-- </el-tabs>--> + </div> +</template> + +<script lang="ts"> +import {toRefs, reactive, defineComponent, ref, onMounted, defineAsyncComponent} from 'vue'; +import { storeToRefs } from 'pinia'; +import { initBackEndControlRoutes } from '/@/router/backEnd'; +import { useUserInfo } from '/@/stores/userInfo'; +import { Session } from '/@/utils/storage'; +import { useRouter } from 'vue-router'; +import { Edit, View, Plus, Delete, Refresh, Search, Finished } from '@element-plus/icons-vue'; +import { ElTable } from 'element-plus'; +import { FormInstance, FormRules, ElMessage } from 'element-plus'; +import { workApprovalApi } from '/@/api/specialWorkSystem/workApproval'; +import type { TabsPaneContext } from 'element-plus'; +import {teamManageApi} from "/@/api/systemManage/basicDateManage/personShiftManage/teamManage"; + +// 定义接口来定义对象的类型 +interface stateType { + applyData: Array<string>; + workTimeList: Array<string>; + multipleSelection: Array<any>; + deleteArr: Array<any>; + approveInfo: Object; + dialogDetails: boolean; + dialogStatus: boolean; + deleteDialog: boolean; + pageIndex1: number; + pageSize1: number; + chosenIndex: null | number; + deleteId: null | number; + searchWord: string; + totalSize1: number; + activeName: string; + addRecord: {}; + details: {}; + statusInfo: {}; + workType: Array<type>; + dialogType: number | null; + departmentList: Array<any>; + departmentRecursionList: Array<DepartmentState>; +} +interface type { + id: number; + name: string; +} +interface DepartmentState { + depId: number; + depName: string; +} +export default defineComponent({ + name: 'myApproval', + components: { + fire: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsp/components/fireLog.vue')), + space: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsp/components/spaceLog.vue')), + hoist: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsp/components/hoistLog.vue')), + ground: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsp/components/groundLog.vue')), + broken: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsp/components/brokenLog.vue')), + height: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsp/components/heightLog.vue')), + power: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsp/components/powerLog.vue')), + plate: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsp/components/plateLog.vue')) + }, + setup() { + const userInfo = useUserInfo(); + const { userInfos } = storeToRefs(userInfo); + const router = useRouter(); + const state = reactive<stateType>({ + pageIndex1: 1, + pageSize1: 10, + totalSize1: 0, + dialogType: null, + activeName: '1', + departmentList: [], + departmentRecursionList: [], + chosenIndex: null, + searchWord: '', + applyData: [], + workTimeList: [], + multipleSelection: [], + approveInfo: { + approvalSteps: [], + operators: [] + }, + dialogDetails: false, + dialogStatus: false, + deleteDialog: false, + addRecord: {}, + details: {}, + statusInfo: {}, + deleteId: null, + deleteArr: [], + workType: [ + { id: 1, name: '动火作业' }, + { id: 2, name: '受限空间作业' }, + { id: 3, name: '吊装作业' }, + { id: 4, name: '动土作业' }, + { id: 5, name: '断路作业' }, + { id: 6, name: '高处作业' }, + { id: 7, name: '临时用电作业' }, + { id: 8, name: '盲板抽堵作业' } + ] + }); + interface User { + name: string; + list: []; + info: string; + } + + // 刷新 + const reLoadData = async () => { + getListByPage(); + }; + + // 填写表单 + const toApply = () => { + router.push({ + path: 'zysq' + }); + }; + + const handleClick = (tab: TabsPaneContext, event: Event) => { + console.log(tab, event); + }; + + // 获取部门列表 + const getAllDepartment = async () => { + let res = await teamManageApi().getAllDepartment(); + if (res.data.code === '200') { + state.departmentList = JSON.parse(JSON.stringify(res.data.data)) + recursion(state.departmentList); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + + // 获取层级审批数据 + // const getApprovalData = async (id) => { + // let res = await workApprovalApi().getApprovalData({workApplyId: id}); + // if (res.data.code === '200') { + // console.log(res.data.data,'层级数据') + // // state.departmentList = JSON.parse(JSON.stringify(res.data.data)) + // // recursion(state.departmentList); + // } else { + // ElMessage({ + // type: 'warning', + // message: res.data.msg + // }); + // } + // }; + + const recursion = (value: any) => { + for (let i of value) { + if (i.children.length !== 0) { + state.departmentRecursionList.push(i); + recursion(i.children); + } else { + state.departmentRecursionList.push(i); + } + } + }; + + // 分页获取工作时间组列表 + const getListByPage = async () => { + const data = { pageSize: state.pageSize1, pageIndex: state.pageIndex1, searchParams: { workType: state.searchWord } }; + let res = await workApprovalApi().getApprovalListPage(data); + if (res.data.code === '200') { + state.applyData = JSON.parse(JSON.stringify(res.data.data)); + state.applyData = state.applyData.map((item) => { + if (item.operators == null || item.operators == []) { + item.operators = []; + } else { + item.operators = Array.from(item.operators, ({ operatorUname }) => operatorUname); + } + return item; + }); + state.totalSize1 = res.data.total; + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + + // 关键词查询记录 + const searchRecord = async () => { + if (state.searchWord == '') { + ElMessage({ + type: 'warning', + message: '请输入查询关键词' + }); + } else { + getListByPage(); + } + }; + // 重置搜索 + const clearSearch = async () => { + state.searchWord = ''; + getListByPage(); + }; + + // 查看进度 + const viewStatus = (row) => { + getStatus({ workApplyId: row.workApplyId }); + state.dialogStatus = true; + }; + + // 查询进度方法 + const getStatus = async (data: any) => { + let res = await workApprovalApi().getApprovalStatus(data); + if (res.data.code === '200') { + state.approveInfo = JSON.parse(JSON.stringify(res.data.data)); + state.approveInfo.operators = Array.from(state.approveInfo.operators, ({ operatorUname }) => operatorUname); + console.log(state.approveInfo, '我的审批'); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + + const deleteRecordBtn = (row) => { + state.deleteId = row.workApplyId; + state.deleteDialog = true; + }; + + // 取消申请方法 + const deleteRecord = async (data: any) => { + let res = await workApprovalApi().postAbord(data); + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '取消成功!' + }); + getListByPage(); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + + const conFirmDelete = () => { + deleteRecord({ workApplyId: state.deleteId }); + state.deleteDialog = false; + }; + + const handleSizeChange1 = (val: number) => { + state.pageSize1 = val; + getListByPage(); + }; + const handleCurrentChange1 = (val: number) => { + state.pageIndex1 = val; + getListByPage(); + }; + + // 查看记录 + const viewRecord = (row: any) => { + state.dialogType = row.workType + state.details = JSON.parse(JSON.stringify(row)); + console.log(state.details,'details') + // getApprovalData(state.details.workApplyId) + if(state.details.workDetail.otherSpecialWork == '' || !state.details.workDetail.otherSpecialWork){ + state.details.workDetail.otherSpecialWork=[] + } + else { + console.log(state.details.workDetail.otherSpecialWork,'split') + const a = state.details.workDetail.otherSpecialWork + state.details.workDetail.otherSpecialWork = a.split(',').map((item) => { + return state.workType.find((i: { id: number }) => i.id === Number(item))?.name; + }); + } + if(state.details.workDetail.involvedDepIds == '' || !state.details.workDetail.involvedDepIds){ + state.details.workDetail.involvedDepIds=[] + } + else { + const a = state.details.workDetail.involvedDepIds + state.details.workDetail.involvedDepIds = a.split(',').map((item) => { + return state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(item))?.depName; + }); + } + if(state.details.workDetail.csDepId){ + state.details.workDetail.csDepId = state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(state.details.workDetail.csDepId))?.depName; + } + if(state.details.workDetail.operationDepId){ + state.details.workDetail.operationDepId = state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(state.details.workDetail.operationDepId))?.depName; + } + if(state.details.workDetail.gbPath){ + state.details.workDetail.gbPath = state.details.workDetail.gbPath.split(',') + } + if(state.details.workDetail.bcPath){ + state.details.workDetail.bcPath = state.details.workDetail.bcPath.split(',') + } + if(state.details.workDetail.bpLocationMapPath){ + state.details.workDetail.bpLocationMapPath = state.details.workDetail.bpLocationMapPath.split(',') + } + state.dialogDetails = true; + }; + + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId', value); + userInfos.value.projectId = value; + await initBackEndControlRoutes(); + }; + + // 页面载入时执行方法 + onMounted(() => { + getListByPage(); + getAllDepartment() + }); + + return { + View, + Edit, + Delete, + Refresh, + Plus, + Finished, + reLoadData, + toApply, + handleClick, + searchRecord, + clearSearch, + viewRecord, + viewStatus, + deleteRecordBtn, + conFirmDelete, + getListByPage, + handleSizeChange1, + handleCurrentChange1, + ...toRefs(state) + }; + } +}); +</script> + +<style scoped lang="scss"> +$homeNavLengh: 8; +.home-container { + height: calc(100vh - 144px); + box-sizing: border-box; + overflow: hidden; + .demo-tabs { + width: 100%; + height: 100%; + + &::v-deep(.el-tabs__content) { + height: calc(100% - 60px); + } + + .el-tab-pane { + height: 100%; + } + } + .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); + } + } + .stepItem { + display: flex; + align-items: flex-start; + margin-top: 30px; + margin-left: 30px; + padding-bottom: 30px; + padding-left: 40px; + border-left: 1px solid #a0cfff; + position: relative; + &:first-of-type { + margin-top: 30px; + } + &:first-of-type { + margin-bottom: 0; + border-left: none; + } + .stepNum { + position: absolute; + width: 40px; + height: 40px; + border-radius: 20px; + box-sizing: border-box; + font-size: 18px; + color: #333; + border: 1px solid #a0cfff; + line-height: 38px; + text-align: center; + left: -20px; + top: -30px; + background: #d9ecff; + } + .stepCard { + width: 100%; + margin-top: -30px; + + .box-card { + width: 100%; + + .card-header { + display: flex; + justify-content: space-between; + align-items: center; + + span { + font-weight: bold; + margin-left: 10px; + } + } + + .text { + width: 100%; + font-size: 14px; + margin-bottom: 10px; + padding-left: 10px; + + span { + color: #409eff; + } + + .bold-text{ + font-weight: bolder; + } + + &:last-of-type { + margin-bottom: 0; + } + } + .approveUnit { + width: 100%; + font-size: 14px; + margin-bottom: 20px; + padding: 10px 15px; + border: 1px solid #fff; + background: #ecf8ff; + border-radius: 6px; + .item-tit { + width: 100%; + display: flex; + color: #409eff; + align-items: flex-start; + justify-content: space-between; + padding-bottom: 10px; + border-bottom: 1px solid #a0cfff; + + & > span { + flex: 1; + &:last-of-type{ + text-align: center; + } + } + & > div { + flex: 1; + text-align: center; + } + } + .item-cont { + width: 100%; + display: flex; + align-items: center; + justify-content: space-between; + padding: 10px 0; + border-bottom: 1px solid #c6e2ff; + + & > span { + flex: 1; + &:last-of-type{ + text-align: center; + } + } + & > div { + flex: 1; + text-align: center; + + & > div { + text-align: left; + width: 100%; + display: flex; + justify-content: center; + align-items: center; + span { + width: 45%; + &:first-of-type { + width: 30%; + } + } + } + } + &:last-of-type { + border-bottom: 0; + } + } + } + .approveItem { + width: 100%; + font-size: 14px; + margin-bottom: 20px; + padding: 10px 15px; + background: #ecf8ff; + border: 1px solid #fff; + border-radius: 6px; + .item-tit { + width: 100%; + display: flex; + color: #409eff; + align-items: flex-start; + justify-content: space-between; + padding-bottom: 10px; + border-bottom: 1px solid #a0cfff; + + & > span { + flex: 1; + } + & > div { + flex: 2; + text-align: center; + } + } + .item-cont { + width: 100%; + display: flex; + align-items: center; + justify-content: space-between; + padding: 10px 0; + border-bottom: 1px solid #c6e2ff; + + & > span { + flex: 1; + } + & > div { + flex: 2; + text-align: center; + + & > div { + text-align: left; + width: 100%; + display: flex; + justify-content: center; + align-items: flex-start; + margin-bottom: 10px; + span { + width: 50%; + &:first-of-type { + width: 25%; + } + } + } + } + &:last-of-type { + border-bottom: 0; + } + } + } + } + } + &:hover .card-header { + color: #0098f5; + } + &:hover .stepNum { + border: 2px solid #0098f5; + color: #0098f5; + } + } + .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; + } + } + } + .el-card { + border: 0; + } +} +</style> diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/brokenLog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/brokenLog.vue new file mode 100644 index 0000000..b32213d --- /dev/null +++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/brokenLog.vue @@ -0,0 +1,131 @@ +<template> + <div style="height: 100%"> + <el-form :model="details" label-width="150px"> + <el-form-item label="作业申请单号"> + <el-input v-model="details.workPermitNo" readonly /> + </el-form-item> + <el-form-item label="申请人"> + <el-input v-model="details.applyUname" readonly /> + </el-form-item> + <el-form-item label="部门名称"> + <el-input v-model="details.depName" readonly /> + </el-form-item> + <el-form-item label="作业人"> + <el-input v-model="details.operators" readonly type="textarea" /> + </el-form-item> + <el-form-item label="作业类型"> + <el-input v-model="details.workTypeDesc" readonly /> + </el-form-item> + <el-form-item label="作业等级"> + <el-input v-model="details.workLevelDesc" readonly /> + </el-form-item> + <el-form-item label="作业内容"> + <el-input v-model="details.workContent" readonly type="textarea" /> + </el-form-item> + <el-form-item label="作业地址"> + <el-input v-model="details.workLocation" readonly type="textarea" /> + </el-form-item> + <el-form-item label="作业单位"> + <el-input v-model="details.workDetail.operationDepId" readonly type="textarea" /> + </el-form-item> + <el-form-item label="断路原因"> + <el-input v-model="details.workDetail.bcReason" readonly type="textarea" /> + </el-form-item> + <el-form-item label="断路地段说明"> + <el-input v-model="details.workDetail.bcExplain" readonly type="textarea" /> + </el-form-item> + <el-form-item label="涉及相关部门"> + <el-input v-model="details.workDetail.involvedDepIds" readonly type="textarea"/> + </el-form-item> + <el-form-item label="图片"> + <el-image v-for="item in details.workDetail.bcPath" :preview-src-list="details.workDetail.bcPath" style="width: 150px; height: 150px;margin-right: 50px;margin-bottom: 20px" :src="item" fit="cover" /> + </el-form-item> + <el-form-item label="物资状态"> + <span>{{ details.materialStatus==0?'未关联物资':(details.materialStatus==1?'必选物资配备不足':(details.materialStatus==2?'必选物资配备齐全':(details.materialStatus==3?'物资配置专业':(details.materialStatus==4?'物资配置高端':'-')))) }}</span> + </el-form-item> + <el-form-item label="关联物资" v-if="details.workMaterial.length>0"> + <el-table :data="details.workMaterial" style="width: 100%" border> + <el-table-column prop="bigClassifyName" label="物资类型" align="center"/> + <el-table-column prop="materialName" label="物资名称" align="center"/> + <el-table-column prop="configurationLevel" label="配置级别" align="center"> + <template #default="scope"> + {{scope.row.configurationLevel == 0?'必选':(scope.row.configurationLevel == 1? '可选':'高配')}} + </template> + </el-table-column> + <el-table-column prop="useCount" label="配置数量" align="center"/> + </el-table> + </el-form-item> + <el-form-item label="期望开始时间"> + <el-input v-model="details.expStartTime" readonly /> + </el-form-item> + <el-form-item label="期望结束时间"> + <el-input v-model="details.expEndTime" readonly /> + </el-form-item> + <el-form-item label="申请时间"> + <el-input v-model="details.applyTime" readonly /> + </el-form-item> + <el-form-item label="当前状态"> + <el-input v-model="details.statusDesc" readonly /> + </el-form-item> + </el-form> + </div> +</template> + +<script lang="ts"> + import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + import {useUserInfo} from "/@/stores/userInfo"; + import { Session } from '/@/utils/storage'; + import { Search } from '@element-plus/icons-vue' + import { ElMessage } from 'element-plus' + import type { FormInstance, FormRules } from 'element-plus' + import { workApplyApi } from '/@/api/specialWorkSystem/workApply'; + + + interface stateType { + form: Object, + workerList: Array<any>, + workTypeList: Array<any>, + workLevelList: Array<any>, + otherWorkList: Array<any> + } + export default defineComponent({ + name: 'space', + components: {}, + props:['details'], + setup() { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + return { + Search + }; + }, + }); +</script> + +<style scoped lang="scss"> + .home-container { + height: 100%; + overflow: hidden; + position: relative; + .el-row{ + margin-bottom: 20px; + } + .el-row:last-child { + margin-bottom: 0; + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } + .el-cascader{ + width: 100% !important; + } + } +</style> diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/fireLog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/fireLog.vue new file mode 100644 index 0000000..6386a7e --- /dev/null +++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/fireLog.vue @@ -0,0 +1,122 @@ +<template> + <div style="height: 100%"> + <el-form :model="details" label-width="150px"> + <el-form-item label="作业申请单号"> + <el-input v-model="details.workPermitNo" readonly /> + </el-form-item> + <el-form-item label="申请人"> + <el-input v-model="details.applyUname" readonly /> + </el-form-item> + <el-form-item label="部门名称"> + <el-input v-model="details.depName" readonly /> + </el-form-item> + <el-form-item label="作业人"> + <el-input v-model="details.operators" readonly type="textarea" /> + </el-form-item> + <el-form-item label="作业类型"> + <el-input v-model="details.workTypeDesc" readonly /> + </el-form-item> + <el-form-item label="作业等级"> + <el-input v-model="details.workLevelDesc" readonly /> + </el-form-item> + <el-form-item label="作业内容"> + <el-input v-model="details.workContent" readonly type="textarea" /> + </el-form-item> + <el-form-item label="作业地址"> + <el-input v-model="details.workLocation" readonly type="textarea" /> + </el-form-item> + <el-form-item label="作业方式"> + <el-input v-model="details.workDetail.hotMethod" readonly type="textarea" /> + </el-form-item> + <el-form-item label="物资状态"> + <span>{{ details.materialStatus==0?'未关联物资':(details.materialStatus==1?'必选物资配备不足':(details.materialStatus==2?'必选物资配备齐全':(details.materialStatus==3?'物资配置专业':(details.materialStatus==4?'物资配置高端':'-')))) }}</span> + </el-form-item> + <el-form-item label="关联物资" v-if="details.workMaterial&&details.workMaterial.length>0"> + <el-table :data="details.workMaterial" style="width: 100%" border> + <el-table-column prop="bigClassifyName" label="物资类型" align="center"/> + <el-table-column prop="materialName" label="物资名称" align="center"/> + <el-table-column prop="configurationLevel" label="配置级别" align="center"> + <template #default="scope"> + {{scope.row.configurationLevel == 0?'必选':(scope.row.configurationLevel == 1? '可选':'高配')}} + </template> + </el-table-column> + <el-table-column prop="useCount" label="配置数量" align="center"/> + </el-table> + </el-form-item> + <el-form-item label="关联其他作业"> + <el-input v-model="details.workDetail.otherSpecialWork" readonly type="textarea" /> + </el-form-item> + <el-form-item label="期望开始时间"> + <el-input v-model="details.expStartTime" readonly /> + </el-form-item> + <el-form-item label="期望结束时间"> + <el-input v-model="details.expEndTime" readonly /> + </el-form-item> + <el-form-item label="申请时间"> + <el-input v-model="details.applyTime" readonly /> + </el-form-item> + <el-form-item label="当前状态"> + <el-input v-model="details.statusDesc" readonly /> + </el-form-item> + </el-form> + </div> +</template> + +<script lang="ts"> + import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + import {useUserInfo} from "/@/stores/userInfo"; + import { Session } from '/@/utils/storage'; + import { Search } from '@element-plus/icons-vue' + import { ElMessage } from 'element-plus' + import type { FormInstance, FormRules } from 'element-plus' + import { workApplyApi } from '/@/api/specialWorkSystem/workApply'; + + + interface stateType { + form: Object, + workerList: Array<any>, + workTypeList: Array<any>, + workLevelList: Array<any>, + otherWorkList: Array<any> + } + export default defineComponent({ + name: 'fire', + components: {}, + props:['details'], + setup() { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + return { + Search + }; + }, + }); +</script> + +<style scoped lang="scss"> + .home-container { + height: 100%; + overflow: hidden; + position: relative; + .el-row{ + margin-bottom: 20px; + } + .el-row:last-child { + margin-bottom: 0; + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } + .el-cascader{ + width: 100% !important; + } + } +</style> diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/groundLog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/groundLog.vue new file mode 100644 index 0000000..ed728d7 --- /dev/null +++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/groundLog.vue @@ -0,0 +1,131 @@ +<template> + <div style="height: 100%"> + <el-form :model="details" label-width="150px"> + <el-form-item label="作业申请单号"> + <el-input v-model="details.workPermitNo" readonly /> + </el-form-item> + <el-form-item label="申请人"> + <el-input v-model="details.applyUname" readonly /> + </el-form-item> + <el-form-item label="部门名称"> + <el-input v-model="details.depName" readonly /> + </el-form-item> + <el-form-item label="作业人"> + <el-input v-model="details.operators" readonly type="textarea" /> + </el-form-item> + <el-form-item label="作业类型"> + <el-input v-model="details.workTypeDesc" readonly /> + </el-form-item> + <el-form-item label="作业等级"> + <el-input v-model="details.workLevelDesc" readonly /> + </el-form-item> + <el-form-item label="作业内容"> + <el-input v-model="details.workContent" readonly type="textarea" /> + </el-form-item> + <el-form-item label="作业地址"> + <el-input v-model="details.workLocation" readonly type="textarea" /> + </el-form-item> + <el-form-item label="作业单位"> + <el-input v-model="details.workDetail.operationDepId" readonly type="textarea" /> + </el-form-item> + <el-form-item label="范围"> + <el-input v-model="details.workDetail.gbScope" readonly type="textarea" /> + </el-form-item> + <el-form-item label="动土方式"> + <el-input v-model="details.workDetail.gbMethod" readonly type="textarea" /> + </el-form-item> + <el-form-item label="物资状态"> + <span>{{ details.materialStatus==0?'未关联物资':(details.materialStatus==1?'必选物资配备不足':(details.materialStatus==2?'必选物资配备齐全':(details.materialStatus==3?'物资配置专业':(details.materialStatus==4?'物资配置高端':'-')))) }}</span> + </el-form-item> + <el-form-item label="关联物资" v-if="details.workMaterial&&details.workMaterial.length>0"> + <el-table :data="details.workMaterial" style="width: 100%" border> + <el-table-column prop="bigClassifyName" label="物资类型" align="center"/> + <el-table-column prop="materialName" label="物资名称" align="center"/> + <el-table-column prop="configurationLevel" label="配置级别" align="center"> + <template #default="scope"> + {{scope.row.configurationLevel == 0?'必选':(scope.row.configurationLevel == 1? '可选':'高配')}} + </template> + </el-table-column> + <el-table-column prop="useCount" label="配置数量" align="center"/> + </el-table> + </el-form-item> + <el-form-item label="关联其他作业"> + <el-input v-model="details.workDetail.otherSpecialWork" readonly type="textarea"/> + </el-form-item> + <el-form-item label="图片"> + <el-image v-for="item in details.workDetail.gbPath" :preview-src-list="details.workDetail.gbPath" style="width: 150px; height: 150px;margin-right: 50px;margin-bottom: 20px" :src="item" fit="cover" /> + </el-form-item> + <el-form-item label="期望开始时间"> + <el-input v-model="details.expStartTime" readonly /> + </el-form-item> + <el-form-item label="期望结束时间"> + <el-input v-model="details.expEndTime" readonly /> + </el-form-item> + <el-form-item label="申请时间"> + <el-input v-model="details.applyTime" readonly /> + </el-form-item> + <el-form-item label="当前状态"> + <el-input v-model="details.statusDesc" readonly /> + </el-form-item> + </el-form> + </div> +</template> + +<script lang="ts"> + import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + import {useUserInfo} from "/@/stores/userInfo"; + import { Session } from '/@/utils/storage'; + import { Search } from '@element-plus/icons-vue' + import { ElMessage } from 'element-plus' + import type { FormInstance, FormRules } from 'element-plus' + import { workApplyApi } from '/@/api/specialWorkSystem/workApply'; + + + interface stateType { + form: Object, + workerList: Array<any>, + workTypeList: Array<any>, + workLevelList: Array<any>, + otherWorkList: Array<any> + } + export default defineComponent({ + name: 'space', + components: {}, + props:['details'], + setup() { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + return { + Search + }; + }, + }); +</script> + +<style scoped lang="scss"> + .home-container { + height: 100%; + overflow: hidden; + position: relative; + .el-row{ + margin-bottom: 20px; + } + .el-row:last-child { + margin-bottom: 0; + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } + .el-cascader{ + width: 100% !important; + } + } +</style> diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/heightLog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/heightLog.vue new file mode 100644 index 0000000..f95c6e9 --- /dev/null +++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/heightLog.vue @@ -0,0 +1,125 @@ +<template> + <div style="height: 100%"> + <el-form :model="details" label-width="150px"> + <el-form-item label="作业申请单号"> + <el-input v-model="details.workPermitNo" readonly /> + </el-form-item> + <el-form-item label="申请人"> + <el-input v-model="details.applyUname" readonly /> + </el-form-item> + <el-form-item label="部门名称"> + <el-input v-model="details.depName" readonly /> + </el-form-item> + <el-form-item label="作业人"> + <el-input v-model="details.operators" readonly type="textarea" /> + </el-form-item> + <el-form-item label="作业类型"> + <el-input v-model="details.workTypeDesc" readonly /> + </el-form-item> + <el-form-item label="作业等级"> + <el-input v-model="details.workLevelDesc" readonly /> + </el-form-item> + <el-form-item label="作业内容"> + <el-input v-model="details.workContent" readonly type="textarea" /> + </el-form-item> + <el-form-item label="作业地址"> + <el-input v-model="details.workLocation" readonly type="textarea" /> + </el-form-item> + <el-form-item label="作业单位"> + <el-input v-model="details.workDetail.operationDepId" readonly type="textarea" /> + </el-form-item> + <el-form-item label="作业高度"> + <el-input v-model="details.workDetail.operationHeight" readonly type="textarea"><template #append>米(m)</template></el-input> + </el-form-item> + <el-form-item label="物资状态"> + <span>{{ details.materialStatus==0?'未关联物资':(details.materialStatus==1?'必选物资配备不足':(details.materialStatus==2?'必选物资配备齐全':(details.materialStatus==3?'物资配置专业':(details.materialStatus==4?'物资配置高端':'-')))) }}</span> + </el-form-item> + <el-form-item label="关联物资" v-if="details.workMaterial&&details.workMaterial.length>0"> + <el-table :data="details.workMaterial" style="width: 100%" border> + <el-table-column prop="bigClassifyName" label="物资类型" align="center"/> + <el-table-column prop="materialName" label="物资名称" align="center"/> + <el-table-column prop="configurationLevel" label="配置级别" align="center"> + <template #default="scope"> + {{scope.row.configurationLevel == 0?'必选':(scope.row.configurationLevel == 1? '可选':'高配')}} + </template> + </el-table-column> + <el-table-column prop="useCount" label="配置数量" align="center"/> + </el-table> + </el-form-item> + <el-form-item label="关联其他作业"> + <el-input v-model="details.workDetail.otherSpecialWork" readonly type="textarea"/> + </el-form-item> + <el-form-item label="期望开始时间"> + <el-input v-model="details.expStartTime" readonly /> + </el-form-item> + <el-form-item label="期望结束时间"> + <el-input v-model="details.expEndTime" readonly /> + </el-form-item> + <el-form-item label="申请时间"> + <el-input v-model="details.applyTime" readonly /> + </el-form-item> + <el-form-item label="当前状态"> + <el-input v-model="details.statusDesc" readonly /> + </el-form-item> + </el-form> + </div> +</template> + +<script lang="ts"> + import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + import {useUserInfo} from "/@/stores/userInfo"; + import { Session } from '/@/utils/storage'; + import { Search } from '@element-plus/icons-vue' + import { ElMessage } from 'element-plus' + import type { FormInstance, FormRules } from 'element-plus' + import { workApplyApi } from '/@/api/specialWorkSystem/workApply'; + + + interface stateType { + form: Object, + workerList: Array<any>, + workTypeList: Array<any>, + workLevelList: Array<any>, + otherWorkList: Array<any> + } + export default defineComponent({ + name: 'space', + components: {}, + props:['details'], + setup() { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + return { + Search + }; + }, + }); +</script> + +<style scoped lang="scss"> + .home-container { + height: 100%; + overflow: hidden; + position: relative; + .el-row{ + margin-bottom: 20px; + } + .el-row:last-child { + margin-bottom: 0; + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } + .el-cascader{ + width: 100% !important; + } + } +</style> diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/hoistLog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/hoistLog.vue new file mode 100644 index 0000000..1086537 --- /dev/null +++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/hoistLog.vue @@ -0,0 +1,125 @@ +<template> + <div style="height: 100%"> + <el-form :model="details" label-width="150px"> + <el-form-item label="作业申请单号"> + <el-input v-model="details.workPermitNo" readonly /> + </el-form-item> + <el-form-item label="申请人"> + <el-input v-model="details.applyUname" readonly /> + </el-form-item> + <el-form-item label="部门名称"> + <el-input v-model="details.depName" readonly /> + </el-form-item> + <el-form-item label="作业人"> + <el-input v-model="details.operators" readonly type="textarea" /> + </el-form-item> + <el-form-item label="作业类型"> + <el-input v-model="details.workTypeDesc" readonly /> + </el-form-item> + <el-form-item label="作业等级"> + <el-input v-model="details.workLevelDesc" readonly /> + </el-form-item> + <el-form-item label="作业内容"> + <el-input v-model="details.workContent" readonly type="textarea" /> + </el-form-item> + <el-form-item label="作业地址"> + <el-input v-model="details.workLocation" readonly type="textarea" /> + </el-form-item> + <el-form-item label="吊装工具名称"> + <el-input v-model="details.workDetail.hoistingToolName" readonly type="textarea" /> + </el-form-item> + <el-form-item label="起吊物体重量"> + <el-input v-model="details.workDetail.weightMass" readonly type="textarea"><template #append>吨(t)</template></el-input> + </el-form-item> + <el-form-item label="物资状态"> + <span>{{ details.materialStatus==0?'未关联物资':(details.materialStatus==1?'必选物资配备不足':(details.materialStatus==2?'必选物资配备齐全':(details.materialStatus==3?'物资配置专业':(details.materialStatus==4?'物资配置高端':'-')))) }}</span> + </el-form-item> + <el-form-item label="关联物资" v-if="details.workMaterial&&details.workMaterial.length>0"> + <el-table :data="details.workMaterial" style="width: 100%" border> + <el-table-column prop="bigClassifyName" label="物资类型" align="center"/> + <el-table-column prop="materialName" label="物资名称" align="center"/> + <el-table-column prop="configurationLevel" label="配置级别" align="center"> + <template #default="scope"> + {{scope.row.configurationLevel == 0?'必选':(scope.row.configurationLevel == 1? '可选':'高配')}} + </template> + </el-table-column> + <el-table-column prop="useCount" label="配置数量" align="center"/> + </el-table> + </el-form-item> + <el-form-item label="关联其他作业"> + <el-input v-model="details.workDetail.otherSpecialWork" readonly type="textarea"/> + </el-form-item> + <el-form-item label="期望开始时间"> + <el-input v-model="details.expStartTime" readonly /> + </el-form-item> + <el-form-item label="期望结束时间"> + <el-input v-model="details.expEndTime" readonly /> + </el-form-item> + <el-form-item label="申请时间"> + <el-input v-model="details.applyTime" readonly /> + </el-form-item> + <el-form-item label="当前状态"> + <el-input v-model="details.statusDesc" readonly /> + </el-form-item> + </el-form> + </div> +</template> + +<script lang="ts"> + import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + import {useUserInfo} from "/@/stores/userInfo"; + import { Session } from '/@/utils/storage'; + import { Search } from '@element-plus/icons-vue' + import { ElMessage } from 'element-plus' + import type { FormInstance, FormRules } from 'element-plus' + import { workApplyApi } from '/@/api/specialWorkSystem/workApply'; + + + interface stateType { + form: Object, + workerList: Array<any>, + workTypeList: Array<any>, + workLevelList: Array<any>, + otherWorkList: Array<any> + } + export default defineComponent({ + name: 'space', + components: {}, + props:['details'], + setup() { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + return { + Search + }; + }, + }); +</script> + +<style scoped lang="scss"> + .home-container { + height: 100%; + overflow: hidden; + position: relative; + .el-row{ + margin-bottom: 20px; + } + .el-row:last-child { + margin-bottom: 0; + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } + .el-cascader{ + width: 100% !important; + } + } +</style> diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/plateLog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/plateLog.vue new file mode 100644 index 0000000..69620a3 --- /dev/null +++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/plateLog.vue @@ -0,0 +1,149 @@ +<template> + <div style="height: 100%"> + <el-form :model="details" label-width="150px"> + <el-form-item label="作业申请单号"> + <el-input v-model="details.workPermitNo" readonly /> + </el-form-item> + <el-form-item label="申请人"> + <el-input v-model="details.applyUname" readonly /> + </el-form-item> + <el-form-item label="部门名称"> + <el-input v-model="details.depName" readonly /> + </el-form-item> + <el-form-item label="作业人"> + <el-input v-model="details.operators" readonly type="textarea" /> + </el-form-item> + <el-form-item label="作业类型"> + <el-input v-model="details.workTypeDesc" readonly /> + </el-form-item> + <el-form-item label="作业等级"> + <el-input v-model="details.workLevelDesc" readonly /> + </el-form-item> + <el-form-item label="作业内容"> + <el-input v-model="details.workContent" readonly type="textarea" /> + </el-form-item> + <el-form-item label="作业地址"> + <el-input v-model="details.workLocation" readonly type="textarea" /> + </el-form-item> + <el-form-item label="盲板编号"> + <el-input v-model="details.workDetail.bpCode" readonly type="textarea" /> + </el-form-item> + <el-form-item label="主要介质"> + <el-input v-model="details.workDetail.mainMedia" readonly type="textarea" /> + </el-form-item> + <el-form-item label="温度"> + <el-input v-model="details.workDetail.temperature" readonly type="textarea"><template #append>摄氏度(℃)</template></el-input> + </el-form-item> + <el-form-item label="压力"> + <el-input v-model="details.workDetail.pressure" readonly type="textarea"><template #append>千帕(kPa)</template></el-input> + </el-form-item> + <el-form-item label="盲板材质"> + <el-input v-model="details.workDetail.bpMaterialQuality" readonly type="textarea"/> + </el-form-item> + <el-form-item label="盲板规格"> + <el-input v-model="details.workDetail.bpSpecification" readonly type="textarea"/> + </el-form-item> + <el-form-item label="盲板位置"> + <el-input v-model="details.workDetail.bpLocation" readonly type="textarea"/> + </el-form-item> + <el-form-item label="装盲板时间"> + <el-input v-model="details.workDetail.installBpTime" readonly/> + </el-form-item> + <el-form-item label="拆盲板时间"> + <el-input v-model="details.workDetail.uninstallBpTime" readonly/> + </el-form-item> + <el-form-item label="物资状态"> + <span>{{ details.materialStatus==0?'未关联物资':(details.materialStatus==1?'必选物资配备不足':(details.materialStatus==2?'必选物资配备齐全':(details.materialStatus==3?'物资配置专业':(details.materialStatus==4?'物资配置高端':'-')))) }}</span> + </el-form-item> + <el-form-item label="关联物资" v-if="details.workMaterial&&details.workMaterial.length>0"> + <el-table :data="details.workMaterial" style="width: 100%" border> + <el-table-column prop="bigClassifyName" label="物资类型" align="center"/> + <el-table-column prop="materialName" label="物资名称" align="center"/> + <el-table-column prop="configurationLevel" label="配置级别" align="center"> + <template #default="scope"> + {{scope.row.configurationLevel == 0?'必选':(scope.row.configurationLevel == 1? '可选':'高配')}} + </template> + </el-table-column> + <el-table-column prop="useCount" label="配置数量" align="center"/> + </el-table> + </el-form-item> + <el-form-item label="关联其他作业"> + <el-input v-model="details.workDetail.otherSpecialWork" readonly type="textarea"/> + </el-form-item> + <el-form-item label="盲板位置图"> + <el-image v-for="item in details.workDetail.bpLocationMapPath" :preview-src-list="details.workDetail.bpLocationMapPath" style="width: 150px; height: 150px;margin-right: 50px;margin-bottom: 20px" :src="item" fit="cover" /> + </el-form-item> + <el-form-item label="期望开始时间"> + <el-input v-model="details.expStartTime" readonly /> + </el-form-item> + <el-form-item label="期望结束时间"> + <el-input v-model="details.expEndTime" readonly /> + </el-form-item> + <el-form-item label="申请时间"> + <el-input v-model="details.applyTime" readonly /> + </el-form-item> + <el-form-item label="当前状态"> + <el-input v-model="details.statusDesc" readonly /> + </el-form-item> + </el-form> + </div> +</template> + +<script lang="ts"> + import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + import {useUserInfo} from "/@/stores/userInfo"; + import { Session } from '/@/utils/storage'; + import { Search } from '@element-plus/icons-vue' + import { ElMessage } from 'element-plus' + import type { FormInstance, FormRules } from 'element-plus' + import { workApplyApi } from '/@/api/specialWorkSystem/workApply'; + + + interface stateType { + form: Object, + workerList: Array<any>, + workTypeList: Array<any>, + workLevelList: Array<any>, + otherWorkList: Array<any> + } + export default defineComponent({ + name: 'space', + components: {}, + props:['details'], + setup() { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + return { + Search + }; + }, + }); +</script> + +<style scoped lang="scss"> + .home-container { + height: 100%; + overflow: hidden; + position: relative; + .el-row{ + margin-bottom: 20px; + } + .el-row:last-child { + margin-bottom: 0; + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } + .el-cascader{ + width: 100% !important; + } + } +</style> diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/powerLog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/powerLog.vue new file mode 100644 index 0000000..cf81c13 --- /dev/null +++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/powerLog.vue @@ -0,0 +1,128 @@ +<template> + <div style="height: 100%"> + <el-form :model="details" label-width="150px"> + <el-form-item label="作业申请单号"> + <el-input v-model="details.workPermitNo" readonly /> + </el-form-item> + <el-form-item label="申请人"> + <el-input v-model="details.applyUname" readonly /> + </el-form-item> + <el-form-item label="部门名称"> + <el-input v-model="details.depName" readonly /> + </el-form-item> + <el-form-item label="作业人"> + <el-input v-model="details.operators" readonly type="textarea" /> + </el-form-item> + <el-form-item label="作业类型"> + <el-input v-model="details.workTypeDesc" readonly /> + </el-form-item> + <el-form-item label="作业等级"> + <el-input v-model="details.workLevelDesc" readonly /> + </el-form-item> + <el-form-item label="作业内容"> + <el-input v-model="details.workContent" readonly type="textarea" /> + </el-form-item> + <el-form-item label="作业地址"> + <el-input v-model="details.workLocation" readonly type="textarea" /> + </el-form-item> + <el-form-item label="电源接入点"> + <el-input v-model="details.workDetail.powerAccessPoint" readonly type="textarea" /> + </el-form-item> + <el-form-item label="工作电压"> + <el-input v-model="details.workDetail.workingVoltage" readonly type="textarea"><template #append>伏特(v)</template></el-input> + </el-form-item> + <el-form-item label="用电设备及功率"> + <el-input v-model="details.workDetail.equipmentAndPower" readonly type="textarea" /> + </el-form-item> + <el-form-item label="物资状态"> + <span>{{ details.materialStatus==0?'未关联物资':(details.materialStatus==1?'必选物资配备不足':(details.materialStatus==2?'必选物资配备齐全':(details.materialStatus==3?'物资配置专业':(details.materialStatus==4?'物资配置高端':'-')))) }}</span> + </el-form-item> + <el-form-item label="关联物资" v-if="details.workMaterial&&details.workMaterial.length>0"> + <el-table :data="details.workMaterial" style="width: 100%" border> + <el-table-column prop="bigClassifyName" label="物资类型" align="center"/> + <el-table-column prop="materialName" label="物资名称" align="center"/> + <el-table-column prop="configurationLevel" label="配置级别" align="center"> + <template #default="scope"> + {{scope.row.configurationLevel == 0?'必选':(scope.row.configurationLevel == 1? '可选':'高配')}} + </template> + </el-table-column> + <el-table-column prop="useCount" label="配置数量" align="center"/> + </el-table> + </el-form-item> + <el-form-item label="关联其他作业"> + <el-input v-model="details.workDetail.otherSpecialWork" readonly type="textarea"/> + </el-form-item> + <el-form-item label="期望开始时间"> + <el-input v-model="details.expStartTime" readonly /> + </el-form-item> + <el-form-item label="期望结束时间"> + <el-input v-model="details.expEndTime" readonly /> + </el-form-item> + <el-form-item label="申请时间"> + <el-input v-model="details.applyTime" readonly /> + </el-form-item> + <el-form-item label="当前状态"> + <el-input v-model="details.statusDesc" readonly /> + </el-form-item> + </el-form> + </div> +</template> + +<script lang="ts"> + import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + import {useUserInfo} from "/@/stores/userInfo"; + import { Session } from '/@/utils/storage'; + import { Search } from '@element-plus/icons-vue' + import { ElMessage } from 'element-plus' + import type { FormInstance, FormRules } from 'element-plus' + import { workApplyApi } from '/@/api/specialWorkSystem/workApply'; + + + interface stateType { + form: Object, + workerList: Array<any>, + workTypeList: Array<any>, + workLevelList: Array<any>, + otherWorkList: Array<any> + } + export default defineComponent({ + name: 'space', + components: {}, + props:['details'], + setup() { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + return { + Search + }; + }, + }); +</script> + +<style scoped lang="scss"> + .home-container { + height: 100%; + overflow: hidden; + position: relative; + .el-row{ + margin-bottom: 20px; + } + .el-row:last-child { + margin-bottom: 0; + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } + .el-cascader{ + width: 100% !important; + } + } +</style> diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/spaceLog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/spaceLog.vue new file mode 100644 index 0000000..d6b4606 --- /dev/null +++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/spaceLog.vue @@ -0,0 +1,128 @@ +<template> + <div style="height: 100%"> + <el-form :model="details" label-width="150px"> + <el-form-item label="作业申请单号"> + <el-input v-model="details.workPermitNo" readonly /> + </el-form-item> + <el-form-item label="申请人"> + <el-input v-model="details.applyUname" readonly /> + </el-form-item> + <el-form-item label="部门名称"> + <el-input v-model="details.depName" readonly /> + </el-form-item> + <el-form-item label="作业人"> + <el-input v-model="details.operators" readonly type="textarea" /> + </el-form-item> + <el-form-item label="作业类型"> + <el-input v-model="details.workTypeDesc" readonly /> + </el-form-item> + <el-form-item label="作业等级"> + <el-input v-model="details.workLevelDesc" readonly /> + </el-form-item> + <el-form-item label="作业内容"> + <el-input v-model="details.workContent" readonly type="textarea" /> + </el-form-item> + <el-form-item label="作业地址"> + <el-input v-model="details.workLocation" readonly type="textarea"/> + </el-form-item> + <el-form-item label="受限空间所属单位"> + <el-input v-model="details.workDetail.csDepId" readonly type="textarea" /> + </el-form-item> + <el-form-item label="受限空间名称"> + <el-input v-model="details.workDetail.csName" readonly type="textarea" /> + </el-form-item> + <el-form-item label="空间原有介质名称"> + <el-input v-model="details.workDetail.csOriginalName" readonly type="textarea" /> + </el-form-item> + <el-form-item label="物资状态"> + <span>{{ details.materialStatus==0?'未关联物资':(details.materialStatus==1?'必选物资配备不足':(details.materialStatus==2?'必选物资配备齐全':(details.materialStatus==3?'物资配置专业':(details.materialStatus==4?'物资配置高端':'-')))) }}</span> + </el-form-item> + <el-form-item label="关联物资" v-if="details.workMaterial&&details.workMaterial.length>0"> + <el-table :data="details.workMaterial" style="width: 100%" border> + <el-table-column prop="bigClassifyName" label="物资类型" align="center"/> + <el-table-column prop="materialName" label="物资名称" align="center"/> + <el-table-column prop="configurationLevel" label="配置级别" align="center"> + <template #default="scope"> + {{scope.row.configurationLevel == 0?'必选':(scope.row.configurationLevel == 1? '可选':'高配')}} + </template> + </el-table-column> + <el-table-column prop="useCount" label="配置数量" align="center"/> + </el-table> + </el-form-item> + <el-form-item label="关联其他作业"> + <el-input v-model="details.workDetail.otherSpecialWork" readonly type="textarea" /> + </el-form-item> + <el-form-item label="期望开始时间"> + <el-input v-model="details.expStartTime" readonly /> + </el-form-item> + <el-form-item label="期望结束时间"> + <el-input v-model="details.expEndTime" readonly /> + </el-form-item> + <el-form-item label="申请时间"> + <el-input v-model="details.applyTime" readonly /> + </el-form-item> + <el-form-item label="当前状态"> + <el-input v-model="details.statusDesc" readonly /> + </el-form-item> + </el-form> + </div> +</template> + +<script lang="ts"> + import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + import {useUserInfo} from "/@/stores/userInfo"; + import { Session } from '/@/utils/storage'; + import { Search } from '@element-plus/icons-vue' + import { ElMessage } from 'element-plus' + import type { FormInstance, FormRules } from 'element-plus' + import { workApplyApi } from '/@/api/specialWorkSystem/workApply'; + + + interface stateType { + form: Object, + workerList: Array<any>, + workTypeList: Array<any>, + workLevelList: Array<any>, + otherWorkList: Array<any> + } + export default defineComponent({ + name: 'space', + components: {}, + props:['details'], + setup() { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + return { + Search + }; + }, + }); +</script> + +<style scoped lang="scss"> + .home-container { + height: 100%; + overflow: hidden; + position: relative; + .el-row{ + margin-bottom: 20px; + } + .el-row:last-child { + margin-bottom: 0; + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } + .el-cascader{ + width: 100% !important; + } + } +</style> diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue new file mode 100644 index 0000000..340b902 --- /dev/null +++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue @@ -0,0 +1,877 @@ +<template> + <div class="home-container"> +<!-- <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">--> +<!-- <el-tab-pane label="申请中" name="1">--> + <div style="height: 100%"> + <el-row class="homeCard"> + <span>作业类型:</span> + <el-col :span="10"> + <div class="grid-content topInfo"> + <el-select v-model="searchWord"> + <el-option + v-for="item in workType" + :key="item.id" + :label="item.name" + :value="item.id" + /> + </el-select> + + <el-button type="primary" @click="searchRecord">查询</el-button> + <el-button plain @click="clearSearch">重置</el-button> + </div> + </el-col> + </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="toApply()">申请</el-button> + <!-- <el-button type="danger" :icon="Delete" size="default">删除</el-button>--> + <!-- <el-button type="success" size="default">设置分类</el-button>--> + </el-col> + <el-button type="primary" :icon="Refresh" size="default" @click="reLoadData()" /> + </el-row> + <el-table ref="multipleTableRef" :data="applyData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }"> + <el-table-column property="workPermitNo" label="作业申请单号" width="180" /> + <el-table-column property="applyUname" label="申请人" /> + <el-table-column property="depName" label="部门名称" /> + <el-table-column property="operators" label="作业人" /> + <el-table-column property="workTypeDesc" label="作业类型" /> + <el-table-column property="workLevelDesc" label="作业等级" /> + <el-table-column property="materialStatus" label="物资状态" align="center" width="180"> + <template #default="scope"> + <span>{{ scope.row.materialStatus==0?'未关联物资':(scope.row.materialStatus==1?'必选物资配备不足':(scope.row.materialStatus==2?'必选物资配备齐全':(scope.row.materialStatus==3?'物资配置专业':(scope.row.materialStatus==4?'物资配置高端':'-')))) }}</span> + </template> + </el-table-column> + <el-table-column property="applyTime" label="申请时间" width="180" /> + <el-table-column label="申请状态" align="center" width="180"> + <template #default="scope"> + <el-tag :type="scope.row.status==2?'success':(scope.row.status==8||scope.row.status==9)?'warning':'danger'">{{ scope.row.statusDesc }}</el-tag> + </template> + </el-table-column> + <el-table-column fixed="right" label="操作" align="center" width="300"> + <template #default="scope"> + <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> + <el-button link type="success" size="small" :icon="Finished" @click="viewStatus(scope.row)">进度</el-button> + <el-button link type="warning" size="small" :icon="Delete" @click="deleteRecordBtn(scope.row)">取消</el-button> + <el-button :disabled="scope.row.status == 7 ? false : true" link type="primary" size="small" :icon="Download" @click="downLoadBtn(scope.row)">导出作业票</el-button> + </template> + </el-table-column> + </el-table> + <div class="pageBtn"> + <el-pagination v-model:currentPage="pageIndex1" v-model:page-size="pageSize1" :page-sizes="[10, 15]" small="false" background layout="total, sizes, prev, pager, next, jumper" :total="totalSize1" @size-change="handleSizeChange1" @current-change="handleCurrentChange1" /> + </div> + </div> + </div> + </div> + <el-dialog v-model="dialogDetails" title="作业申请详情" center> + <fire v-if="dialogType == 1" :details = details></fire> + <space v-else-if="dialogType == 2" :details = details></space> + <hoist v-else-if="dialogType == 3" :details = details></hoist> + <ground v-else-if="dialogType == 4" :details = details></ground> + <broken v-else-if="dialogType == 5" :details = details></broken> + <height v-else-if="dialogType == 6" :details = details></height> + <power v-else-if="dialogType == 7" :details = details></power> + <plate v-else :details = details></plate> + <template #footer> + <span class="dialog-footer"> + <el-button type="primary" @click="dialogDetails = false" + >确认</el-button + > + </span> + </template> + </el-dialog> + <el-dialog v-model="dialogStatus" title="作业申请进度" width="60%"> + <el-form v-if="approveInfo.operators.length > 0" style="margin-bottom: 40px"> + <el-form-item label="申请作业人"> + <el-input v-model="approveInfo.operators" readonly type="textarea" /> + </el-form-item> + </el-form> + <div style="display: flex; flex-direction: column-reverse"> + <div v-for="(item, index) in approveInfo.approvalSteps" class="stepItem"> + <div class="stepNum">{{ item.stepSerial }}</div> + <div class="stepCard"> + <el-card class="box-card" shadow="always"> + <div class="text"> + 审批结果:<span class="bold-text">{{ item.approvalResultDesc }}</span> + </div> + <div class="text"> + 审批类型:<span class="bold-text">{{ item.typeDesc }}</span> + </div> + <div class="text" v-if="item.auditTypeDesc"> + 审批类型:<span class="bold-text">{{ item.auditTypeDesc }}</span> + </div> + <div class="text" v-show="item.startApprovalTime != null"> + 开始时间:<span>{{ item.startApprovalTime }}</span> + </div> + <div class="approveUnit"> + <div class="item-tit"><span>审批人</span><span>审批状态</span></div> + <div class="item-cont" v-for="i in item.stepUnits"> + <span>{{ i.approvalUname }}</span + ><span>{{ i.resultDesc }}</span> + </div> + </div> + <div class="approveItem"> + <div class="item-tit"> + <span>审批项目</span> +<!-- <span>类型</span>--> + <div>措施标准</div> + </div> + <div class="item-cont" v-for="i in item.stepItems"> + <span>{{ i.itemName }}</span> +<!-- <span>{{ i.typeDesc }}</span>--> + <div v-if="i.measure !== null"> + <div> + <span>作业类型:</span><span>{{ i.measure.workTypeDesc }}</span> + </div> + <div> + <span>措施内容:</span><span>{{ i.measure.context }}</span> + </div> + </div> + <div v-if="i.stand !== null"> + <div> + <span>标题名称:</span><span>{{ i.stand.title }}</span> + </div> + <div> + <span>标准内容:</span><span>{{ i.stand.typeDesc }}</span> + </div> + </div> + </div> + </div> + <div class="text" v-show="item.expFinishApprovalTime && item.expFinishApprovalTime != null"> + 期望结束时间:<span>{{ item.expFinishApprovalTime }}</span> + </div> + <div class="text" v-show="item.finishApprovalTime != null"> + 结束时间:<span>{{ item.finishApprovalTime }}</span> + </div> + </el-card> + </div> + </div> + </div> + </el-dialog> + <el-dialog v-model="deleteDialog" title="提示" width="30%" center> + <span>您确定要取消该条申请吗?</span> + <template #footer> + <span class="dialog-footer"> + <el-button @click="deleteDialog = false" size="default">取消</el-button> + <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button> + </span> + </template> + </el-dialog> + <el-dialog v-model="downLoadDialog" title="提示" width="30%" center> + <span>您确定要导出该条记录吗?</span> + <template #footer> + <span class="dialog-footer"> + <el-button @click="downLoadDialog = false" size="default">取消</el-button> + <el-button type="primary" @click="conFirmDownLoad" size="default">确认</el-button> + </span> + </template> + </el-dialog> +<!-- </el-tab-pane>--> +<!-- <el-tab-pane label="已通过" name="2">--> +<!-- <div style="height: 100%">--> +<!-- <el-row class="homeCard">--> +<!-- <el-col :span="8">--> +<!-- <div class="grid-content topInfo">--> +<!-- <el-input v-model="searchWord" placeholder="作业证名称"></el-input>--> +<!-- <el-button type="primary">查询</el-button>--> +<!-- <el-button plain>重置</el-button>--> +<!-- </div>--> +<!-- </el-col>--> +<!-- </el-row>--> +<!-- <div class="homeCard">--> +<!-- <div class="main-card">--> +<!-- <el-table ref="multipleTableRef" :data="passedData" style="width: 100%" height="calc(100% - 48px)" :header-cell-style="{ background: '#fafafa' }" @selection-change="handleSelectionChange">--> +<!-- <el-table-column type="selection" width="55" />--> +<!-- <el-table-column type="index" label="编号" width="200" />--> +<!-- <el-table-column property="level" label="作业证等级" width="180" sortable />--> +<!-- <el-table-column property="applyDate" label="申请日期" sortable />--> +<!-- <el-table-column property="name" label="申请人" width="180" />--> +<!-- <el-table-column property="department" label="申请部门" width="180" />--> +<!-- <el-table-column label="申请状态" width="180">--> +<!-- <template #default="scope">--> +<!-- <el-tag type="success">{{ scope.row.status }}</el-tag>--> +<!-- </template>--> +<!-- </el-table-column>--> +<!-- </el-table>--> +<!-- <div class="pageBtn">--> +<!-- <el-pagination v-model:currentPage="pageIndex2" v-model:page-size="pageSize2" :page-sizes="[10, 15]" small="false" background layout="total, sizes, prev, pager, next, jumper" :total="totalSize2" @size-change="handleSizeChange2" @current-change="handleCurrentChange2" />--> +<!-- </div>--> +<!-- </div>--> +<!-- </div>--> +<!-- </div>--> +<!-- </el-tab-pane>--> +<!-- </el-tabs>--> + </div> +</template> + +<script lang="ts"> +import {toRefs, reactive, defineComponent, ref, onMounted, defineAsyncComponent} from 'vue'; +import { storeToRefs } from 'pinia'; +import { initBackEndControlRoutes } from '/@/router/backEnd'; +import { useUserInfo } from '/@/stores/userInfo'; +import { Session } from '/@/utils/storage'; +import { useRouter } from 'vue-router'; +import { Edit, View, Plus, Delete, Refresh, Search, Finished, Download } from '@element-plus/icons-vue'; +import { ElTable } from 'element-plus'; +import { FormInstance, FormRules, ElMessage } from 'element-plus'; +import { workApplyApi } from '/@/api/specialWorkSystem/workApply'; +import type { TabsPaneContext } from 'element-plus'; +import {teamManageApi} from "/@/api/systemManage/basicDateManage/personShiftManage/teamManage"; +import Cookies from 'js-cookie'; +import axios from 'axios'; + +// 定义接口来定义对象的类型 +interface stateType { + applyData: Array<string>; + workTimeList: Array<string>; + multipleSelection: Array<any>; + deleteArr: Array<any>; + approveInfo: Object; + dialogDetails: boolean; + dialogStatus: boolean; + deleteDialog: boolean; + downLoadDialog: boolean; + pageIndex1: number; + pageSize1: number; + chosenIndex: null | number; + deleteId: null | number; + downLoadId: null | number; + downLoadName: string; + searchWord: string; + totalSize1: number; + activeName: string; + addRecord: {}; + details: {}; + statusInfo: {}; + workType: Array<type>; + dialogType: number | null; + departmentList: Array<any>; + departmentRecursionList: Array<DepartmentState>; +} +interface type { + id: number; + name: string; +} +interface DepartmentState { + depId: number; + depName: string; +} +export default defineComponent({ + name: 'myApply', + components: { + fire: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/fireLog.vue')), + space: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/spaceLog.vue')), + hoist: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/hoistLog.vue')), + ground: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/groundLog.vue')), + broken: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/brokenLog.vue')), + height: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/heightLog.vue')), + power: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/powerLog.vue')), + plate: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/plateLog.vue')) + }, + setup() { + const userInfo = useUserInfo(); + const { userInfos } = storeToRefs(userInfo); + const router = useRouter(); + const state = reactive<stateType>({ + pageIndex1: 1, + pageSize1: 10, + totalSize1: 0, + dialogType: null, + activeName: '1', + departmentList: [], + departmentRecursionList: [], + chosenIndex: null, + searchWord: '', + applyData: [], + workTimeList: [], + multipleSelection: [], + approveInfo: { + approvalSteps: [], + operators: [] + }, + dialogDetails: false, + dialogStatus: false, + deleteDialog: false, + downLoadDialog: false, + addRecord: {}, + details: {}, + statusInfo: {}, + deleteId: null, + downLoadId: null, + downLoadName: '', + deleteArr: [], + workType: [ + { id: 1, name: '动火作业' }, + { id: 2, name: '受限空间作业' }, + { id: 3, name: '吊装作业' }, + { id: 4, name: '动土作业' }, + { id: 5, name: '断路作业' }, + { id: 6, name: '高处作业' }, + { id: 7, name: '临时用电作业' }, + { id: 8, name: '盲板抽堵作业' } + ] + }); + interface User { + name: string; + list: []; + info: string; + } + + // 刷新 + const reLoadData = async () => { + getListByPage(); + }; + + // 填写表单 + const toApply = () => { + router.push({ + path: 'zysq' + }); + }; + + const handleClick = (tab: TabsPaneContext, event: Event) => { + }; + + // 获取部门列表 + const getAllDepartment = async () => { + let res = await teamManageApi().getAllDepartment(); + if (res.data.code === '200') { + state.departmentList = JSON.parse(JSON.stringify(res.data.data)) + recursion(state.departmentList); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + + const recursion = (value: any) => { + for (let i of value) { + if (i.children.length !== 0) { + state.departmentRecursionList.push(i); + recursion(i.children); + } else { + state.departmentRecursionList.push(i); + } + } + }; + + // 分页获取 + const getListByPage = async () => { + const data = { pageSize: state.pageSize1, pageIndex: state.pageIndex1, searchParams: { workType: state.searchWord } }; + let res = await workApplyApi().getApplyListPage(data); + if (res.data.code === '200') { + state.applyData = JSON.parse(JSON.stringify(res.data.data)); + console.log(state.applyData,'applyData') + state.applyData = state.applyData.map((item) => { + if (item.operators == null || item.operators == []) { + item.operators = []; + } else { + item.operators = Array.from(item.operators, ({ operatorUname }) => operatorUname); + } + return item; + }); + state.totalSize1 = res.data.total; + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + + // 表格数据格式化 + const toNames = (row, column, cellValue, index) => { + if (row.list == []) { + return []; + } else { + const nameList = []; + for (let i = 0; i < row.list.length; i++) { + for (let t = 0; t < state.workTimeList.length; t++) { + if (row.list[i] == state.workTimeList[t].id) { + nameList.push(state.workTimeList[t].name); + } + } + } + return nameList.join(); + } + }; + + // 关键词查询记录 + const searchRecord = async () => { + if (state.searchWord == '') { + ElMessage({ + type: 'warning', + message: '请输入查询关键词' + }); + } else { + getListByPage(); + } + }; + // 重置搜索 + const clearSearch = async () => { + state.searchWord = ''; + getListByPage(); + }; + + // 查看进度 + const viewStatus = (row) => { + getStatus({ workApplyId: row.workApplyId }); + state.dialogStatus = true; + }; + + // 查询进度方法 + const getStatus = async (data: any) => { + let res = await workApplyApi().getStatus(data); + if (res.data.code === '200') { + state.approveInfo = JSON.parse(JSON.stringify(res.data.data)); + state.approveInfo.operators = Array.from(state.approveInfo.operators, ({ operatorUname }) => operatorUname); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + + const deleteRecordBtn = (row) => { + state.deleteId = row.workApplyId; + state.deleteDialog = true; + }; + + // 取消申请方法 + const deleteRecord = async (data: any) => { + let res = await workApplyApi().cancelApply(data); + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '删除成功!' + }); + getListByPage(); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + + const conFirmDelete = () => { + deleteRecord({ workApplyId: state.deleteId }); + state.deleteDialog = false; + }; + + // 导出图表 + const downLoadBtn = (row:any) =>{ + state.downLoadId = row.workApplyId; + state.downLoadName = row.workTypeDesc + row.workPermitNo + state.downLoadDialog = true; + } + + // 导出方法 + const downLoadRecord = async (data: any) => { + // let res = await workApplyApi().postPrinting(data); + axios.post(import.meta.env.VITE_API_URL + `/work/apply/printingPdf`,data,{headers:{'Content-Type': 'application/json','Authorization': `${Cookies.get('token')}`,'uid':`${Cookies.get('uid')}`},responseType: 'blob'}).then(res=>{ + if (res) { + const link = document.createElement('a') + let blob = new Blob([res.data],{type: 'application/pdf'}) + link.style.display = "none"; + link.href = URL.createObjectURL(blob); // 创建URL + link.setAttribute("download", state.downLoadName + "作业证.pdf"); + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }) + + }; + + const conFirmDownLoad = () => { + downLoadRecord({ applyWorkId: state.downLoadId }); + state.downLoadDialog = false; + }; + + const handleSizeChange1 = (val: number) => { + state.pageSize1 = val; + getListByPage(); + }; + const handleCurrentChange1 = (val: number) => { + state.pageIndex1 = val; + getListByPage(); + }; + + // 查看记录 + const viewRecord = (row: any) => { + state.dialogType = row.workType + state.details = JSON.parse(JSON.stringify(row)); + if(state.details.workDetail.otherSpecialWork == '' || !state.details.workDetail.otherSpecialWork){ + state.details.workDetail.otherSpecialWork=[] + } + else { + const a = state.details.workDetail.otherSpecialWork + state.details.workDetail.otherSpecialWork = a.split(',').map((item) => { + return state.workType.find((i: { id: number }) => i.id === Number(item))?.name; + }); + } + if(state.details.workDetail.involvedDepIds == '' || !state.details.workDetail.involvedDepIds){ + state.details.workDetail.involvedDepIds=[] + } + else { + const a = state.details.workDetail.involvedDepIds + state.details.workDetail.involvedDepIds = a.split(',').map((item) => { + return state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(item))?.depName; + }); + } + if(state.details.workDetail.csDepId){ + state.details.workDetail.csDepId = state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(state.details.workDetail.csDepId))?.depName; + } + if(state.details.workDetail.operationDepId){ + state.details.workDetail.operationDepId = state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(state.details.workDetail.operationDepId))?.depName; + } + if(state.details.workDetail.gbPath){ + state.details.workDetail.gbPath = state.details.workDetail.gbPath.split(',') + } + if(state.details.workDetail.bcPath){ + state.details.workDetail.bcPath = state.details.workDetail.bcPath.split(',') + } + if(state.details.workDetail.bpLocationMapPath){ + state.details.workDetail.bpLocationMapPath = state.details.workDetail.bpLocationMapPath.split(',') + } + state.dialogDetails = true; + }; + + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId', value); + userInfos.value.projectId = value; + await initBackEndControlRoutes(); + }; + + // 页面载入时执行方法 + onMounted(() => { + getListByPage(); + getAllDepartment() + }); + + return { + View, + Edit, + Delete, + Refresh, + Plus, + Finished, + Download, + reLoadData, + toApply, + handleClick, + toNames, + searchRecord, + clearSearch, + viewRecord, + viewStatus, + deleteRecordBtn, + downLoadBtn, + conFirmDelete, + conFirmDownLoad, + getListByPage, + handleSizeChange1, + handleCurrentChange1, + ...toRefs(state) + }; + } +}); +</script> + +<style scoped lang="scss"> +$homeNavLengh: 8; +.home-container { + height: calc(100vh - 144px); + box-sizing: border-box; + overflow: hidden; + .demo-tabs { + width: 100%; + height: 100%; + + &::v-deep(.el-tabs__content) { + height: calc(100% - 60px); + } + + .el-tab-pane { + height: 100%; + } + } + .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); + } + } + .stepItem { + display: flex; + align-items: flex-start; + margin-top: 30px; + margin-left: 30px; + padding-bottom: 30px; + padding-left: 40px; + border-left: 1px solid #a0cfff; + position: relative; + &:first-of-type { + margin-top: 30px; + } + &:first-of-type { + margin-bottom: 0; + border-left: none; + } + .stepNum { + position: absolute; + width: 40px; + height: 40px; + border-radius: 20px; + box-sizing: border-box; + font-size: 18px; + color: #333; + border: 1px solid #a0cfff; + line-height: 38px; + text-align: center; + left: -20px; + top: -30px; + background: #d9ecff; + } + .stepCard { + width: 100%; + margin-top: -30px; + + .box-card { + width: 100%; + + .card-header { + display: flex; + justify-content: space-between; + align-items: center; + + span { + font-weight: bold; + margin-left: 10px; + } + } + + .text { + width: 100%; + font-size: 14px; + margin-bottom: 10px; + padding-left: 10px; + + span { + color: #409eff; + } + + .bold-text{ + font-weight: bolder; + } + + &:last-of-type { + margin-bottom: 0; + } + } + .approveUnit { + width: 100%; + font-size: 14px; + margin-bottom: 20px; + padding: 10px 15px; + border: 1px solid #fff; + background: #ecf8ff; + border-radius: 6px; + .item-tit { + width: 100%; + display: flex; + color: #409eff; + align-items: flex-start; + justify-content: space-between; + padding-bottom: 10px; + border-bottom: 1px solid #a0cfff; + + & > span { + flex: 1; + &:last-of-type{ + text-align: center; + } + } + & > div { + flex: 1; + text-align: center; + } + } + .item-cont { + width: 100%; + display: flex; + align-items: center; + justify-content: space-between; + padding: 10px 0; + border-bottom: 1px solid #c6e2ff; + + & > span { + flex: 1; + &:last-of-type{ + text-align: center; + } + } + & > div { + flex: 1; + text-align: center; + + & > div { + text-align: left; + width: 100%; + display: flex; + justify-content: center; + align-items: center; + span { + width: 45%; + &:first-of-type { + width: 30%; + } + } + } + } + &:last-of-type { + border-bottom: 0; + } + } + } + .approveItem { + width: 100%; + font-size: 14px; + margin-bottom: 20px; + padding: 10px 15px; + background: #ecf8ff; + border: 1px solid #fff; + border-radius: 6px; + .item-tit { + width: 100%; + display: flex; + color: #409eff; + align-items: flex-start; + justify-content: space-between; + padding-bottom: 10px; + border-bottom: 1px solid #a0cfff; + + & > span { + flex: 1; + } + & > div { + flex: 2; + text-align: center; + } + } + .item-cont { + width: 100%; + display: flex; + align-items: center; + justify-content: space-between; + padding: 10px 0; + border-bottom: 1px solid #c6e2ff; + + & > span { + flex: 1; + } + & > div { + flex: 2; + text-align: center; + + & > div { + text-align: left; + width: 100%; + display: flex; + justify-content: center; + align-items: flex-start; + margin-bottom: 10px; + span { + width: 50%; + &:first-of-type { + width: 25%; + } + } + } + } + &:last-of-type { + border-bottom: 0; + } + } + } + } + } + &:hover .card-header { + color: #0098f5; + } + &:hover .stepNum { + border: 2px solid #0098f5; + color: #0098f5; + } + } + .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; + } + } + } + .el-card { + border: 0; + } +} +</style> diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsqjl/index.vue b/src/views/newSpecialWorkSystem/workTicket/wdsqjl/index.vue new file mode 100644 index 0000000..e38b1c2 --- /dev/null +++ b/src/views/newSpecialWorkSystem/workTicket/wdsqjl/index.vue @@ -0,0 +1,904 @@ +<template> + <div class="home-container"> +<!-- <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">--> +<!-- <el-tab-pane label="申请中" name="1">--> + <div style="height: 100%"> + <el-row class="homeCard"> + <el-col :span="5" style="display:flex;align-items: center"> + <span style="white-space: nowrap">作业类型:</span> + <div class="grid-content topInfo"> + <el-select v-model="searchWord"> + <el-option + v-for="item in workType" + :key="item.id" + :label="item.name" + :value="item.id" + /> + </el-select> + </div> + </el-col> + <el-col :span="5" style="display:flex;align-items: center"> + <span style="white-space: nowrap">申请部门:</span> + <div class="grid-content topInfo"> + <el-cascader v-model="searchDep" :options="departmentList" :props="casProps" :show-all-levels="false"/> + </div> + </el-col> + <el-col :span="8" style="display:flex;align-items: center;"> + <span style="white-space: nowrap;margin-left: 20px">申请时间:</span> + <div class="grid-content topInfo"> + <el-date-picker + v-model="searchDate" + type="daterange" + unlink-panels + range-separator="至" + start-placeholder="开始日期" + end-placeholder="结束日期" + format="YYYY-MM-DD" value-format="YYYY-MM-DD HH:mm:ss" + /> + </div> + </el-col> + <el-button type="primary" style="margin-left: 20px" @click="searchRecord">查询</el-button> + <el-button plain @click="clearSearch">重置</el-button> + </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="toApply()">申请</el-button> + <!-- <el-button type="danger" :icon="Delete" size="default">删除</el-button>--> + <!-- <el-button type="success" size="default">设置分类</el-button>--> + </el-col> + <el-button type="primary" :icon="Refresh" size="default" @click="reLoadData()" /> + </el-row> + <el-table ref="multipleTableRef" :data="applyData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }"> + <el-table-column property="workPermitNo" label="作业申请单号" width="180" align="center"/> + <el-table-column property="applyUname" label="申请人" align="center"/> + <el-table-column property="depName" label="部门名称" align="center"/> + <el-table-column property="operators" label="作业人" align="center"/> + <el-table-column property="workTypeDesc" label="作业类型" align="center"/> + <el-table-column property="workLevelDesc" label="作业等级" align="center"/> + <el-table-column property="materialStatus" label="物资状态" align="center" width="180"> + <template #default="scope"> + <span>{{ scope.row.materialStatus==0?'未关联物资':(scope.row.materialStatus==1?'必选物资配备不足':(scope.row.materialStatus==2?'必选物资配备齐全':(scope.row.materialStatus==3?'物资配置专业':(scope.row.materialStatus==4?'物资配置高端':'-')))) }}</span> + </template> + </el-table-column> + <el-table-column property="applyTime" label="申请时间" width="180" align="center"/> + <el-table-column label="申请状态" align="center" width="140"> + <template #default="scope"> + <el-tag :type="scope.row.status==2?'success':(scope.row.status==8||scope.row.status==9)?'warning':'danger'">{{ scope.row.statusDesc }}</el-tag> + </template> + </el-table-column> + <el-table-column label="作业状态" align="center"> + <template #default="scope"> + <el-tag :type="scope.row.working == null? 'danger':scope.row.working.workStatus==2?'success':scope.row.working.workStatus==1?'warning':'danger'">{{ scope.row.working==null?'未开始':scope.row.working.workStatus == 1?'开始': scope.row.working.workStatus == 2?'结束':'未开始'}}</el-tag> + </template> + </el-table-column> + <el-table-column label="验收状态" align="center"> + <template #default="scope"> + <el-tag :type="scope.row.working == null? 'danger':scope.row.working.workAcceptStatus==2?'success':scope.row.working.workAcceptStatus== 1?'warning':'danger'">{{ scope.row.working==null?'未开始':scope.row.working.workAcceptStatus == 1?'等待验收': scope.row.working.workAcceptStatus == 2? '已验收':'未开始'}}</el-tag> + </template> + </el-table-column> + <el-table-column fixed="right" label="操作" align="center" width="250"> + <template #default="scope"> + <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> + <el-button link type="success" size="small" :icon="Finished" @click="viewStatus(scope.row)">进度</el-button> + <el-button :disabled="scope.row.working && scope.row.working.workAcceptStatus == 2 ? false : true" link type="primary" size="small" :icon="Download" @click="downLoadBtn(scope.row)">导出作业票</el-button> + </template> + </el-table-column> + </el-table> + <div class="pageBtn"> + <el-pagination v-model:currentPage="pageIndex1" v-model:page-size="pageSize1" :page-sizes="[10, 15]" small="false" background layout="total, sizes, prev, pager, next, jumper" :total="totalSize1" @size-change="handleSizeChange1" @current-change="handleCurrentChange1" /> + </div> + </div> + </div> + </div> + <el-dialog v-model="dialogDetails" title="作业申请详情" center> + <fire v-if="dialogType == 1" :details = details></fire> + <space v-else-if="dialogType == 2" :details = details></space> + <hoist v-else-if="dialogType == 3" :details = details></hoist> + <ground v-else-if="dialogType == 4" :details = details></ground> + <broken v-else-if="dialogType == 5" :details = details></broken> + <height v-else-if="dialogType == 6" :details = details></height> + <power v-else-if="dialogType == 7" :details = details></power> + <plate v-else :details = details></plate> + <template #footer> + <span class="dialog-footer"> + <el-button type="primary" @click="dialogDetails = false" + >确认</el-button + > + </span> + </template> + </el-dialog> + <el-dialog v-model="dialogStatus" title="作业申请进度" width="60%"> + <el-form v-if="approveInfo.operators.length > 0" style="margin-bottom: 40px"> + <el-form-item label="申请作业人"> + <el-input v-model="approveInfo.operators" readonly type="textarea" /> + </el-form-item> + </el-form> + <div style="display: flex; flex-direction: column-reverse"> + <div v-for="(item, index) in approveInfo.approvalSteps" class="stepItem"> + <div class="stepNum">{{ item.stepSerial }}</div> + <div class="stepCard"> + <el-card class="box-card" shadow="always"> + <div class="text"> + 审批结果:<span>{{ item.approvalResultDesc }}</span> + </div> + <div class="text" v-if="item.approvalTypeDesc"> + 层级类型:<span>{{ item.approvalTypeDesc }}</span> + </div> + <div class="text" v-if="item.auditTypeDesc"> + 审批类型:<span>{{ item.auditTypeDesc }}</span> + </div> + <div class="text" v-if="item.personTypeDesc"> + 人员类型:<span>{{ item.personTypeDesc }}</span> + </div> + <div class="text" v-if="item.contentTypeDesc"> + 内容类型:<span>{{ item.contentTypeDesc }}</span> + </div> + <div class="text" v-show="item.startApprovalTime != null"> + 开始时间:<span>{{ item.startApprovalTime }}</span> + </div> + <div class="approveUnit"> + <div class="item-tit"><span>审批人</span><span>审批状态</span></div> + <div class="item-cont" v-for="i in item.stepUnits"> + <span>{{ i.approvalUname }}</span + ><span>{{ i.resultDesc }}</span> + </div> + </div> + <div class="approveItem" v-if="item.contentType==1"> + <div class="item-tit"> + <span>审批项目</span> +<!-- <span>类型</span>--> + <div>措施标准</div> + </div> + <div class="item-cont" v-for="i in item.stepItems"> + <span>{{ i.itemName }}</span> +<!-- <span>{{ i.typeDesc }}</span>--> + <div v-if="i.measure !== null"> + <div> + <span>作业类型:</span><span>{{ i.measure.workTypeDesc }}</span> + </div> + <div> + <span>措施内容:</span><span>{{ i.measure.context }}</span> + </div> + </div> + <div v-if="i.stand !== null"> + <div> + <span>标题名称:</span><span>{{ i.stand.title }}</span> + </div> + <div> + <span>标准内容:</span><span>{{ i.stand.typeDesc }}</span> + </div> + </div> + </div> + </div> + <div class="text" v-show="item.expFinishApprovalTime != null"> + 期望结束时间:<span>{{ item.expFinishApprovalTime }}</span> + </div> + <div class="text" v-show="item.finishApprovalTime != null"> + 结束时间:<span>{{ item.finishApprovalTime }}</span> + </div> + </el-card> + </div> + </div> + </div> + </el-dialog> + <el-dialog v-model="downLoadDialog" title="提示" width="30%" center> + <span>您确定要导出该条记录吗?</span> + <template #footer> + <span class="dialog-footer"> + <el-button @click="downLoadDialog = false" size="default">取消</el-button> + <el-button type="primary" @click="conFirmDownLoad" size="default">确认</el-button> + </span> + </template> + </el-dialog> +<!-- </el-tab-pane>--> +<!-- <el-tab-pane label="已通过" name="2">--> +<!-- <div style="height: 100%">--> +<!-- <el-row class="homeCard">--> +<!-- <el-col :span="8">--> +<!-- <div class="grid-content topInfo">--> +<!-- <el-input v-model="searchWord" placeholder="作业证名称"></el-input>--> +<!-- <el-button type="primary">查询</el-button>--> +<!-- <el-button plain>重置</el-button>--> +<!-- </div>--> +<!-- </el-col>--> +<!-- </el-row>--> +<!-- <div class="homeCard">--> +<!-- <div class="main-card">--> +<!-- <el-table ref="multipleTableRef" :data="passedData" style="width: 100%" height="calc(100% - 48px)" :header-cell-style="{ background: '#fafafa' }" @selection-change="handleSelectionChange">--> +<!-- <el-table-column type="selection" width="55" />--> +<!-- <el-table-column type="index" label="编号" width="200" />--> +<!-- <el-table-column property="level" label="作业证等级" width="180" sortable />--> +<!-- <el-table-column property="applyDate" label="申请日期" sortable />--> +<!-- <el-table-column property="name" label="申请人" width="180" />--> +<!-- <el-table-column property="department" label="申请部门" width="180" />--> +<!-- <el-table-column label="申请状态" width="180">--> +<!-- <template #default="scope">--> +<!-- <el-tag type="success">{{ scope.row.status }}</el-tag>--> +<!-- </template>--> +<!-- </el-table-column>--> +<!-- </el-table>--> +<!-- <div class="pageBtn">--> +<!-- <el-pagination v-model:currentPage="pageIndex2" v-model:page-size="pageSize2" :page-sizes="[10, 15]" small="false" background layout="total, sizes, prev, pager, next, jumper" :total="totalSize2" @size-change="handleSizeChange2" @current-change="handleCurrentChange2" />--> +<!-- </div>--> +<!-- </div>--> +<!-- </div>--> +<!-- </div>--> +<!-- </el-tab-pane>--> +<!-- </el-tabs>--> + </div> +</template> + +<script lang="ts"> +import {toRefs, reactive, defineComponent, ref, onMounted, defineAsyncComponent} from 'vue'; +import { storeToRefs } from 'pinia'; +import { initBackEndControlRoutes } from '/@/router/backEnd'; +import { useUserInfo } from '/@/stores/userInfo'; +import { Session } from '/@/utils/storage'; +import { useRouter } from 'vue-router'; +import { Edit, View, Plus, Delete, Refresh, Search, Finished, Download } from '@element-plus/icons-vue'; +import { ElTable } from 'element-plus'; +import { FormInstance, FormRules, ElMessage } from 'element-plus'; +import { workApplyApi } from '/@/api/specialWorkSystem/workApply'; +import type { TabsPaneContext } from 'element-plus'; +import {teamManageApi} from "/@/api/systemManage/basicDateManage/personShiftManage/teamManage"; +import Cookies from 'js-cookie'; +import axios from 'axios'; + +// 定义接口来定义对象的类型 +interface stateType { + applyData: Array<string>; + workTimeList: Array<string>; + multipleSelection: Array<any>; + deleteArr: Array<any>; + casProps: {}; + approveInfo: Object; + dialogDetails: boolean; + dialogStatus: boolean; + deleteDialog: boolean; + downLoadDialog: boolean; + pageIndex1: number; + pageSize1: number; + chosenIndex: null | number; + deleteId: null | number; + downLoadId: null | number; + downLoadName: string; + searchWord: number | null; + searchDep: number | null; + searchDate: Array<any>, + totalSize1: number; + activeName: string; + addRecord: {}; + details: {}; + statusInfo: {}; + workType: Array<type>; + dialogType: number | null; + departmentList: Array<any>; + departmentRecursionList: Array<DepartmentState>; +} +interface type { + id: number; + name: string; +} +interface DepartmentState { + depId: number; + depName: string; +} +export default defineComponent({ + name: 'myApply', + components: { + fire: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/fireLog.vue')), + space: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/spaceLog.vue')), + hoist: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/hoistLog.vue')), + ground: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/groundLog.vue')), + broken: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/brokenLog.vue')), + height: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/heightLog.vue')), + power: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/powerLog.vue')), + plate: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/plateLog.vue')) + }, + setup() { + const userInfo = useUserInfo(); + const { userInfos } = storeToRefs(userInfo); + const router = useRouter(); + const state = reactive<stateType>({ + pageIndex1: 1, + pageSize1: 10, + totalSize1: 0, + dialogType: null, + activeName: '1', + departmentList: [], + departmentRecursionList: [], + chosenIndex: null, + searchWord: null, + searchDep: null, + searchDate: [], + applyData: [], + workTimeList: [], + multipleSelection: [], + approveInfo: { + approvalSteps: [], + operators: [] + }, + casProps: { + expandTrigger: 'hover', + emitPath: false, + value: 'depId', + label: 'depName', + checkStrictly: true + }, + dialogDetails: false, + dialogStatus: false, + deleteDialog: false, + downLoadDialog: false, + addRecord: {}, + details: {}, + statusInfo: {}, + deleteId: null, + downLoadId: null, + downLoadName: '', + deleteArr: [], + workType: [ + { id: 1, name: '动火作业' }, + { id: 2, name: '受限空间作业' }, + { id: 3, name: '吊装作业' }, + { id: 4, name: '动土作业' }, + { id: 5, name: '断路作业' }, + { id: 6, name: '高处作业' }, + { id: 7, name: '临时用电作业' }, + { id: 8, name: '盲板抽堵作业' } + ] + }); + interface User { + name: string; + list: []; + info: string; + } + + // 刷新 + const reLoadData = async () => { + getListByPage(); + }; + + // 填写表单 + const toApply = () => { + router.push({ + path: 'zysq' + }); + }; + + const handleClick = (tab: TabsPaneContext, event: Event) => { + }; + + // 获取部门列表 + const getAllDepartment = async () => { + let res = await teamManageApi().getAllDepartment(); + if (res.data.code === '200') { + state.departmentList = JSON.parse(JSON.stringify(res.data.data)) + // recursion(state.departmentList); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + + // const recursion = (value: any) => { + // for (let i of value) { + // if (i.children.length !== 0) { + // state.departmentRecursionList.push(i); + // recursion(i.children); + // } else { + // state.departmentRecursionList.push(i); + // } + // } + // }; + + // 分页获取列表 + const getListByPage = async () => { + const dateRange = JSON.parse(JSON.stringify(state.searchDate)) + if(dateRange[1]){dateRange[1] = dateRange[1].replace('00:00:00','23:59:59')} + const data = { pageSize: state.pageSize1, pageIndex: state.pageIndex1, searchParams: { workType: state.searchWord, applyDepId: state.searchDep,applyStartTime: dateRange[0],applyEndTime: dateRange[1]} }; + let res = await workApplyApi().getApplyList(data); + if (res.data.code === '200') { + state.applyData = JSON.parse(JSON.stringify(res.data.data)); + state.applyData = state.applyData.map((item) => { + if (item.operators == null || item.operators == []) { + item.operators = []; + } else { + item.operators = Array.from(item.operators, ({ operatorUname }) => operatorUname); + } + return item; + }); + state.totalSize1 = res.data.total; + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + + // 表格数据格式化 + const toNames = (row, column, cellValue, index) => { + if (row.list == []) { + return []; + } else { + const nameList = []; + for (let i = 0; i < row.list.length; i++) { + for (let t = 0; t < state.workTimeList.length; t++) { + if (row.list[i] == state.workTimeList[t].id) { + nameList.push(state.workTimeList[t].name); + } + } + } + return nameList.join(); + } + }; + + // 关键词查询记录 + const searchRecord = async () => { + if (state.searchWord == null && state.searchDep == null && state.searchDate == []) { + ElMessage({ + type: 'warning', + message: '请输入查询关键词' + }); + } else { + getListByPage(); + } + }; + // 重置搜索 + const clearSearch = async () => { + state.searchWord = null; + state.searchDep = null; + state.searchDate = [] + getListByPage(); + }; + + // 查看进度 + const viewStatus = (row) => { + getStatus({ workApplyId: row.workApplyId }); + }; + + // 查询进度方法 + const getStatus = async (data: any) => { + let res = await workApplyApi().getAllStatus(data); + if (res.data.code === '200') { + state.approveInfo = JSON.parse(JSON.stringify(res.data.data)); + state.approveInfo.operators = Array.from(state.approveInfo.operators, ({ operatorUname }) => operatorUname); + state.dialogStatus = true; + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + + const deleteRecordBtn = (row) => { + state.deleteId = row.workApplyId; + state.deleteDialog = true; + }; + + // 导出图表 + const downLoadBtn = (row:any) =>{ + state.downLoadId = row.workApplyId; + state.downLoadName = row.workTypeDesc + row.workPermitNo + state.downLoadDialog = true; + } + + // 导出方法 + const downLoadRecord = async (data: any) => { + // let res = await workApplyApi().postPrinting(data); + axios.post(import.meta.env.VITE_API_URL + `/work/apply/printingPdf`,data,{headers:{'Content-Type': 'application/json','Authorization': `${Cookies.get('token')}`,'uid':`${Cookies.get('uid')}`},responseType: 'blob'}).then(res=>{ + if (res) { + const link = document.createElement('a') + let blob = new Blob([res.data],{type: 'application/pdf'}) + link.style.display = "none"; + link.href = URL.createObjectURL(blob); // 创建URL + link.setAttribute("download", state.downLoadName + "作业证.pdf"); + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + } else { + ElMessage({ + type: 'warning', + message: '导出失败' + }); + } + }) + + }; + + const conFirmDownLoad = () => { + downLoadRecord({ applyWorkId: state.downLoadId }); + state.downLoadDialog = false; + }; + + const handleSizeChange1 = (val: number) => { + state.pageSize1 = val; + getListByPage(); + }; + const handleCurrentChange1 = (val: number) => { + state.pageIndex1 = val; + getListByPage(); + }; + + // 查看记录 + const viewRecord = (row: any) => { + state.dialogType = row.workType + state.details = JSON.parse(JSON.stringify(row)); + if(state.details.workDetail.otherSpecialWork == '' || !state.details.workDetail.otherSpecialWork){ + state.details.workDetail.otherSpecialWork=[] + } + else { + const a = state.details.workDetail.otherSpecialWork + state.details.workDetail.otherSpecialWork = a.split(',').map((item) => { + return state.workType.find((i: { id: number }) => i.id === Number(item))?.name; + }); + } + if(state.details.workDetail.involvedDepIds == '' || !state.details.workDetail.involvedDepIds){ + state.details.workDetail.involvedDepIds=[] + } + else { + const a = state.details.workDetail.involvedDepIds + state.details.workDetail.involvedDepIds = a.split(',').map((item) => { + return state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(item))?.depName; + }); + } + if(state.details.workDetail.csDepId){ + state.details.workDetail.csDepId = state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(state.details.workDetail.csDepId))?.depName; + } + if(state.details.workDetail.operationDepId){ + state.details.workDetail.operationDepId = state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(state.details.workDetail.operationDepId))?.depName; + } + if(state.details.workDetail.gbPath){ + state.details.workDetail.gbPath = state.details.workDetail.gbPath.split(',') + } + if(state.details.workDetail.bcPath){ + state.details.workDetail.bcPath = state.details.workDetail.bcPath.split(',') + } + if(state.details.workDetail.bpLocationMapPath){ + state.details.workDetail.bpLocationMapPath = state.details.workDetail.bpLocationMapPath.split(',') + } + state.dialogDetails = true; + }; + + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId', value); + userInfos.value.projectId = value; + await initBackEndControlRoutes(); + }; + + // 页面载入时执行方法 + onMounted(() => { + getListByPage(); + getAllDepartment() + }); + + return { + View, + Edit, + Delete, + Refresh, + Plus, + Finished, + Download, + reLoadData, + toApply, + handleClick, + toNames, + searchRecord, + clearSearch, + viewRecord, + viewStatus, + deleteRecordBtn, + downLoadBtn, + conFirmDownLoad, + getListByPage, + handleSizeChange1, + handleCurrentChange1, + ...toRefs(state) + }; + } +}); +</script> + +<style scoped lang="scss"> +$homeNavLengh: 8; +.home-container { + height: calc(100vh - 144px); + box-sizing: border-box; + overflow: hidden; + .demo-tabs { + width: 100%; + height: 100%; + + &::v-deep(.el-tabs__content) { + height: calc(100% - 60px); + } + + .el-tab-pane { + height: 100%; + } + } + .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); + } + } + .stepItem { + display: flex; + align-items: flex-start; + margin-top: 30px; + margin-left: 30px; + padding-bottom: 30px; + padding-left: 40px; + border-left: 1px solid #a0cfff; + position: relative; + &:first-of-type { + margin-top: 30px; + } + &:first-of-type { + margin-bottom: 0; + border-left: none; + } + .stepNum { + position: absolute; + width: 40px; + height: 40px; + border-radius: 20px; + box-sizing: border-box; + font-size: 18px; + color: #333; + border: 1px solid #a0cfff; + line-height: 38px; + text-align: center; + left: -20px; + top: -30px; + background: #d9ecff; + } + .stepCard { + width: 100%; + margin-top: -30px; + + .box-card { + width: 100%; + + .card-header { + display: flex; + justify-content: space-between; + align-items: center; + + span { + font-weight: bold; + margin-left: 10px; + } + } + + .text { + width: 100%; + font-size: 14px; + margin-bottom: 10px; + padding-left: 10px; + + span { + font-weight: bolder; + color: #409eff; + } + + &:last-of-type { + margin-bottom: 0; + } + } + .approveUnit { + width: 100%; + font-size: 14px; + margin-bottom: 20px; + padding: 10px 15px; + border: 1px solid #fff; + background: #ecf8ff; + border-radius: 6px; + .item-tit { + width: 100%; + display: flex; + color: #409eff; + align-items: flex-start; + justify-content: space-between; + padding-bottom: 10px; + border-bottom: 1px solid #a0cfff; + + & > span { + flex: 1; + &:last-of-type{ + text-align: center; + } + } + & > div { + flex: 1; + text-align: center; + } + } + .item-cont { + width: 100%; + display: flex; + align-items: center; + justify-content: space-between; + padding: 10px 0; + border-bottom: 1px solid #c6e2ff; + + & > span { + flex: 1; + &:last-of-type{ + text-align: center; + } + } + & > div { + flex: 1; + text-align: center; + + & > div { + text-align: left; + width: 100%; + display: flex; + justify-content: center; + align-items: center; + span { + width: 45%; + &:first-of-type { + width: 30%; + } + } + } + } + &:last-of-type { + border-bottom: 0; + } + } + } + .approveItem { + width: 100%; + font-size: 14px; + margin-bottom: 20px; + padding: 10px 15px; + background: #ecf8ff; + border: 1px solid #fff; + border-radius: 6px; + .item-tit { + width: 100%; + display: flex; + color: #409eff; + align-items: flex-start; + justify-content: space-between; + padding-bottom: 10px; + border-bottom: 1px solid #a0cfff; + + & > span { + flex: 1; + } + & > div { + flex: 2; + text-align: center; + } + } + .item-cont { + width: 100%; + display: flex; + align-items: center; + justify-content: space-between; + padding: 10px 0; + border-bottom: 1px solid #c6e2ff; + + & > span { + flex: 1; + } + & > div { + flex: 2; + text-align: center; + + & > div { + text-align: left; + width: 100%; + display: flex; + justify-content: center; + align-items: flex-start; + margin-bottom: 10px; + span { + width: 50%; + &:first-of-type { + width: 25%; + } + } + } + } + &:last-of-type { + border-bottom: 0; + } + } + } + } + } + &:hover .card-header { + color: #0098f5; + } + &:hover .stepNum { + border: 2px solid #0098f5; + color: #0098f5; + } + } + .el-row { + display: flex; + align-items: center; + margin-bottom: 20px; + &:last-child { + margin-bottom: 0; + } + .grid-content { + align-items: center; + min-height: 36px; + } + + .topInfo { + width: 100%; + display: flex; + align-items: center; + font-size: 16px; + font-weight: bold; + + & > div { + white-space: nowrap; + margin-right: 20px; + } + } + } +} +.el-card { + border: 0; +} +.el-input{ + width: 100% !important; +} +::v-deep(.el-date-editor){ + width: 100%; +} +.el-select{ + width: 100%; +} +:deep(.el-cascader){ + width: 100% !important; +} +</style> diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue new file mode 100644 index 0000000..8177e7c --- /dev/null +++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue @@ -0,0 +1,366 @@ +<template> + <div class="home-container"> + <div style="height: 100%"> + <el-form :model="form" label-width="150px" :rules="applyRules" ref="ruleFormRef"> + <div class="homeCard"> + <el-row> + <el-col :span="12"> + <el-form-item label="作业申请单位" prop="workDetail.involvedDepIds"> + <el-cascader v-model="form.workDetail.involvedDepIds" :options="departList" :show-all-levels="false"/> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="动火级别" prop="workLevel"> + <el-select v-model="form.workLevel"> + <el-option + v-for="item in workLevelList" + :key="item.value" + :label="item.label" + :value="item.value" + /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="作业内容" prop="workContent"> + <el-input + v-model="form.workContent" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入作业内容" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="作业地点及动火部位" prop="workLocation"> + <el-input + v-model="form.workContent" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入作业内容" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="动火方式" prop="workDetail.hotMethod"> + <el-input + v-model="form.workDetail.hotMethod" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入动火方式" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="动火人级证书编号" prop="operatorUids"> + <el-select v-model="form.operatorUids" multiple> + <el-option + v-for="item in workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="作业单位" prop="workDetail.involvedDepIds"> + <el-cascader v-model="form.workDetail.involvedDepIds" :options="departList" :show-all-levels="false"/> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="作业负责人" prop="operatorUids"> + <el-select v-model="form.operatorUids" multiple> + <el-option + v-for="item in workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="分析人" prop="operatorUids"> + <el-select v-model="form.operatorUids" multiple> + <el-option + v-for="item in workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="关联其他特殊作业" prop="workDetail.otherSpecialWork"> + <el-select v-model="form.workDetail.otherSpecialWork" multiple> + <el-option + v-for="item in otherWorkList" + :key="item.value" + :label="item.label" + :value="item.label" + /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="分析人" prop="operatorUids"> + <el-select v-model="form.operatorUids" multiple> + <el-option + v-for="item in workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="绑定执法仪" prop="cameraIds"> + <el-select v-model="form.cameraIds" multiple> + <el-option + v-for="item in deviceList" + :key="item.id" + :label="item.name" + :value="item.id" + /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="动火作业实施时间" prop="workTimeLine"> + <el-date-picker + v-model="form.workTimeLine" + format="YYYY-MM-DD HH:mm" + value-format="YYYY-MM-DD HH:mm:00" + type="datetimerange" + range-separator="至" + start-placeholder="开始时间" + end-placeholder="结束时间" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="预计整体完成时间" prop="workTimeLine"> + <el-date-picker + v-model="form.workTimeLine" + format="YYYY-MM-DD HH:mm" + value-format="YYYY-MM-DD HH:mm:00" + type="datetime" + /> + </el-form-item> + </el-col> + </el-row> + </div> + </el-form> + <el-table :data="tableData" style="width: 100%"> + <el-table-column type="index" label="序号"/> + <el-table-column prop="name" label="安全措施"/> + <el-table-column prop="address" label="确认人" /> + </el-table> + <div class="applyBtn"> + <el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)">发起申请</el-button> + </div> + </div> + </div> +</template> + +<script lang="ts"> + import { toRefs, reactive, defineComponent, ref, defineAsyncComponent, onMounted } from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + import {useUserInfo} from "/@/stores/userInfo"; + import { Session } from '/@/utils/storage'; + import { Search } from '@element-plus/icons-vue' + import { ElMessage, ElMessageBox } from 'element-plus' + import type { FormInstance, FormRules } from 'element-plus' + import { workApplyApi } from '/@/api/specialWorkSystem/workApply'; + interface stateType { + form: Object, + workLevelList: Array<any>, + otherWorkList: Array<any>, + equipmentDialog: boolean + } + export default defineComponent({ + name: 'fireForm', + components: { + + }, + props:['departList','workerList','deviceList'], + setup(props: any, context: any) { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + const state = reactive<stateType>({ + equipmentDialog: false, + form: { + operatorUids: [], + workType: 1, + workLevel: null, + workContent: '', + workLocation: '', + maBaseId: null, + hazardIdentification: '', + cameraIds: [], + workDetail:{ + hotMethod: '', + otherSpecialWork: [] + }, + receiveUids: [], + workTimeLine: [], + expStartTime: '', + expEndTime: '' + }, + workLevelList: [ + { + label: "一级动火作业", + value: 1 + }, + { + label: "二级动火作业", + value: 2 + }, + { + label: "特级动火作业", + value: 3 + } + ], + otherWorkList: [ + { + label: "动火作业", + value: 1 + }, + { + label: "受限空间作业", + value: 2 + }, + { + label: "吊装作业", + value: 3 + }, + { + label: "动土作业", + value: 4 + }, + { + label: "断路作业", + value: 5 + }, + { + label: "高处作业", + value: 6 + }, + { + label: "临时用电作业", + value: 7 + }, + { + label: "盲板抽堵作业", + value: 8 + } + ] + }); + const ruleFormRef = ref<FormInstance>() + const applyRules = reactive<FormRules>({ + operatorUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workType: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workLevel: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workContent: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workLocation: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + hazardIdentification: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + cameraIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workTimeLine: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.hotMethod": [{ required: true, message: '该内容不能为空', trigger: 'blur' }] + }); + + // 页面载入时执行方法 + onMounted(() => { + + }); + + + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId',value) + userInfos.value.projectId = value + await initBackEndControlRoutes(); + }; + return { + renderMenu, + Search, + ruleFormRef, + applyRules, + ...toRefs(state), + }; + }, + }); +</script> + +<style scoped lang="scss"> + .home-container { + height: 100%; + overflow: hidden; + position: relative; + .homeCard{ + width: 100%; + padding: 20px; + box-sizing: border-box; + background: #fff; + border-radius: 4px; + margin-bottom: 20px; + } + .applyBtn{ + width: 100%; + background: #fff; + padding-top: 15px; + z-index: 5; + box-shadow: 0 -3px 8px rgba(150,150,150,.1); + display: flex; + align-items: center; + justify-content: center; + } + .el-row{ + margin-bottom: 20px; + } + .el-row:last-child { + margin-bottom: 0; + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } + .el-cascader{ + width: 100% !important; + } + } + + .tab-i{ + margin-bottom: 15px; + + &:last-of-type{ + margin-bottom: 0; + } + ::v-deep(.el-form-item){ + .el-form-item__label{ + margin-bottom: 4px; + } + } + } +</style> diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/index.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/index.vue new file mode 100644 index 0000000..f4d8cee --- /dev/null +++ b/src/views/newSpecialWorkSystem/workTicket/zysq/index.vue @@ -0,0 +1,192 @@ +<template> + <div class="home-container"> + <el-tabs type="border-card" @tab-change="switchTab"> + <el-tab-pane label="动火作业"> + <fire-form ref="fire" :workerList = allWorkers :deviceList = allDevices :departList = departmentList></fire-form> + </el-tab-pane> + <el-tab-pane label="受限空间作业"> +<!-- <space-form ref="space" :workerList = allWorkers :departList = departmentList :deviceList = allDevices></space-form>--> + </el-tab-pane> + <el-tab-pane label="吊装作业"> +<!-- <hoist-form ref="hoist" :workerList = allWorkers :deviceList = allDevices></hoist-form>--> + </el-tab-pane> + <el-tab-pane label="动土作业"> +<!-- <ground-form ref="ground" :workerList = allWorkers :departList = departmentList :deviceList = allDevices></ground-form>--> + </el-tab-pane> + <el-tab-pane label="断路作业"> +<!-- <broken-form ref="broken" :workerList = allWorkers :departList = departmentList :deviceList = allDevices></broken-form>--> + </el-tab-pane> + <el-tab-pane label="高处作业"> +<!-- <height-form ref="height" :workerList = allWorkers :departList = departmentList :deviceList = allDevices></height-form>--> + </el-tab-pane> + <el-tab-pane label="临时用电作业"> +<!-- <power-form ref="power" :workerList = allWorkers :deviceList = allDevices></power-form>--> + </el-tab-pane> + <el-tab-pane label="盲板抽堵作业"> +<!-- <plate-form ref="plate" :workerList = allWorkers :deviceList = allDevices></plate-form>--> + </el-tab-pane> + </el-tabs> +<!-- <material-dialog ref="material"></material-dialog>--> + </div> +</template> + +<script lang="ts"> + import {toRefs, reactive, defineComponent, ref, defineAsyncComponent, onMounted} from 'vue'; + import { storeToRefs } from 'pinia'; + import { initBackEndControlRoutes } from '/@/router/backEnd'; + import {useUserInfo} from "/@/stores/userInfo"; + import { Session } from '/@/utils/storage'; + import { Search } from '@element-plus/icons-vue' + import { ElMessage } from 'element-plus' + import type { FormInstance, FormRules } from 'element-plus' + import { workApplyApi } from '/@/api/specialWorkSystem/workApply'; + import {teamManageApi} from "/@/api/systemManage/basicDateManage/personShiftManage/teamManage"; + + interface stateType { + allWorkers: Array<any> + departmentList: Array<any> + allDevices: Array<any> + } + export default defineComponent({ + name: 'apply', + components: { + fireForm: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue')), + // spaceForm: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/zysq/components/space.vue')), + // hoistForm: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/zysq/components/hoist.vue')), + // groundForm: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/zysq/components/ground.vue')), + // brokenForm: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/zysq/components/broken.vue')), + // heightForm: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/zysq/components/height.vue')), + // powerForm: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/zysq/components/power.vue')), + // plateForm: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/zysq/components/plate.vue')), + }, + setup() { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + const state = reactive<stateType>({ + allWorkers: [], + departmentList: [], + allDevices: [] + }); + const fire = ref() + const space = ref() + const hoist = ref() + const ground = ref() + const broken = ref() + const height = ref() + const power = ref() + const plate = ref() + const material = ref() + // 获取用户列表 + const getAll = async ()=>{ + const res = await workApplyApi().getAllUsers() + if (res.data.code === '200') { + state.allWorkers = JSON.parse(JSON.stringify(res.data.data)) + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + + // 获取部门列表 + const getAllDepartment = async () => { + let res = await teamManageApi().getAllDepartment(); + if (res.data.code === '200') { + state.departmentList = JSON.parse(JSON.stringify(res.data.data)) + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + + // 获取设备列表 + const getAllDevice = async ()=>{ + const res = await workApplyApi().getAllDevices() + if (res.data.code === '200') { + state.allDevices = JSON.parse(JSON.stringify(res.data.data)) + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + + const switchTab = (name)=>{ + console.log(name,'name') + fire.value.form.resetFields() + material.value.maBaseId = null + material.value.receiveUids = [] + } + + + // 页面载入时执行方法 + onMounted(() => { + getAll(); + getAllDepartment(); + getAllDevice() + }); + + return { + ...toRefs(state), + fire, + space, + broken, + ground, + height, + hoist, + plate, + power, + material, + switchTab + }; + }, + }); +</script> + +<style scoped lang="scss"> + .home-container { + height: 100%; + overflow: hidden; + position: relative; + .homeCard{ + width: 100%; + padding: 20px; + box-sizing: border-box; + background: #fff; + border-radius: 4px; + margin-bottom: 20px; + } + .applyBtn{ + width: 100%; + background: #fff; + height: 80px; + z-index: 5; + box-shadow: 0 -3px 8px rgba(150,150,150,.1); + display: flex; + align-items: center; + justify-content: center; + } + .el-row{ + margin-bottom: 20px; + } + .el-row:last-child { + margin-bottom: 0; + } + .el-input{ + width: 100% !important; + } + .el-date-editor::v-deep{ + width: 100%; + } + .el-select{ + width: 100%; + } + .el-cascader{ + width: 100% !important; + } + } +</style> diff --git a/src/views/specialWorkSystem/workTicket/wdsqjl/index.vue b/src/views/specialWorkSystem/workTicket/wdsqjl/index.vue index be96b3c..e38b1c2 100644 --- a/src/views/specialWorkSystem/workTicket/wdsqjl/index.vue +++ b/src/views/specialWorkSystem/workTicket/wdsqjl/index.vue @@ -63,16 +63,26 @@ </template> </el-table-column> <el-table-column property="applyTime" label="申请时间" width="180" align="center"/> - <el-table-column label="申请状态" align="center" width="180"> + <el-table-column label="申请状态" align="center" width="140"> <template #default="scope"> <el-tag :type="scope.row.status==2?'success':(scope.row.status==8||scope.row.status==9)?'warning':'danger'">{{ scope.row.statusDesc }}</el-tag> </template> + </el-table-column> + <el-table-column label="作业状态" align="center"> + <template #default="scope"> + <el-tag :type="scope.row.working == null? 'danger':scope.row.working.workStatus==2?'success':scope.row.working.workStatus==1?'warning':'danger'">{{ scope.row.working==null?'未开始':scope.row.working.workStatus == 1?'开始': scope.row.working.workStatus == 2?'结束':'未开始'}}</el-tag> + </template> + </el-table-column> + <el-table-column label="验收状态" align="center"> + <template #default="scope"> + <el-tag :type="scope.row.working == null? 'danger':scope.row.working.workAcceptStatus==2?'success':scope.row.working.workAcceptStatus== 1?'warning':'danger'">{{ scope.row.working==null?'未开始':scope.row.working.workAcceptStatus == 1?'等待验收': scope.row.working.workAcceptStatus == 2? '已验收':'未开始'}}</el-tag> + </template> </el-table-column> <el-table-column fixed="right" label="操作" align="center" width="250"> <template #default="scope"> <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button> <el-button link type="success" size="small" :icon="Finished" @click="viewStatus(scope.row)">进度</el-button> - <el-button :disabled="scope.row.status == 7 ? false : true" link type="primary" size="small" :icon="Download" @click="downLoadBtn(scope.row)">导出作业票</el-button> + <el-button :disabled="scope.row.working && scope.row.working.workAcceptStatus == 2 ? false : true" link type="primary" size="small" :icon="Download" @click="downLoadBtn(scope.row)">导出作业票</el-button> </template> </el-table-column> </el-table> diff --git a/src/views/system/user/component/userDialog.vue b/src/views/system/user/component/userDialog.vue index 2e0d159..e978c9d 100644 --- a/src/views/system/user/component/userDialog.vue +++ b/src/views/system/user/component/userDialog.vue @@ -10,55 +10,55 @@ </el-col> <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> <el-form-item label="真实姓名" prop="realName"> - <el-input v-model.trim="userForm.realName" placeholder="请输入真实姓名" clearable></el-input> + <el-input v-model.trim="userForm.realName" :disabled="allDisabled" 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="roleId"> - <el-select v-model="userForm.roleId" placeholder="请选择" clearable class="w100"> + <el-form-item label="关联角色" prop="roleIds"> + <el-select v-model="userForm.roleIds" placeholder="请选择" clearable class="w100" multiple :disabled="allDisabled"> <el-option v-for="item in roleData" :key="item.roleId" :label="item.roleName" :value="item.roleId"> </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="depId"> - <el-cascader :options="departmentData" :props="{ emitPath: false, checkStrictly: true, value: 'depId', label: 'depName' }" placeholder="请选择部门" clearable class="w100" v-model="userForm.depId"> </el-cascader> + <el-cascader :options="departmentData" :props="{ emitPath: false, checkStrictly: true, value: 'depId', label: 'depName' }" placeholder="请选择部门" clearable class="w100" v-model="userForm.depId" :disabled="allDisabled"> </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="职务" prop="positionId"> - <el-select v-model="userForm.positionId" placeholder="请选择" clearable class="w100"> + <el-form-item label="职务" prop="positionIds"> + <el-select v-model="userForm.positionIds" placeholder="请选择" clearable class="w100" multiple :disabled="allDisabled"> <el-option v-for="item in dutyData" :key="item.positionId" :label="item.positionName" :value="item.positionId"> </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="phone"> - <el-input v-model.trim="userForm.phone" placeholder="请输入手机号" clearable></el-input> + <el-input v-model.trim="userForm.phone" placeholder="请输入手机号" clearable :disabled="allDisabled"></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.trim="userForm.identify" placeholder="请输入身份证" clearable></el-input> + <el-input v-model.trim="userForm.identify" placeholder="请输入身份证" clearable :disabled="allDisabled"></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.trim="userForm.email" placeholder="请输入" clearable></el-input> + <el-input v-model.trim="userForm.email" placeholder="请输入" clearable :disabled="allDisabled"></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="gender"> - <el-select v-model="userForm.gender" placeholder="请选择" clearable class="w100"> + <el-select v-model="userForm.gender" placeholder="请选择" clearable class="w100" :disabled="allDisabled"> <el-option v-for="item in sexList" :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="账户过期" prop="expireTime"> - <el-date-picker v-model="userForm.expireTime" type="date" placeholder="请选择" class="w100"> </el-date-picker> - </el-form-item> - </el-col> +<!-- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20">--> +<!-- <el-form-item label="账户过期" prop="expireTime">--> +<!-- <el-date-picker v-model="userForm.expireTime" type="date" placeholder="请选择" class="w100"> </el-date-picker>--> +<!-- </el-form-item>--> +<!-- </el-col>--> <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20" v-if="!disabled"> <el-form-item label="账户密码" prop="password"> <el-input v-model.trim="userForm.password" placeholder="请输入" type="password" show-password> @@ -67,7 +67,7 @@ </el-col> <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> <el-form-item label="用户类型" prop="type"> - <el-select v-model="userForm.type" placeholder="请选择" clearable class="w100"> + <el-select v-model="userForm.type" placeholder="请选择" clearable class="w100" :disabled="allDisabled"> <el-option v-for="item in userTypeList.filter(item => userForm.type === 1 ? item.id === 1 : item.id !== 1)" :key="item.id" :label="item.name" :value="item.id"> </el-option> </el-select> </el-form-item> @@ -82,7 +82,7 @@ <template #footer> <span class="dialog-footer"> <el-button @click="isShowUserDialog = !isShowUserDialog" size="default">取 消</el-button> - <el-button type="primary" v-throttle @click="onSubmit" size="default">确 定</el-button> + <el-button type="primary" v-throttle @click="onSubmit" size="default" v-if="!allDisabled">确 定</el-button> </span> </template> </el-dialog> @@ -103,19 +103,19 @@ interface UserState { title: string; disabled: boolean; + allDisabled: boolean; isShowUserDialog: boolean; userForm: { username: string; realName: string; - roleId: number | null; + roleIds: Array<number> depId: number | null; - positionId: number | null; + positionIds: Array<number> phone: string; email: string; gender: number | null; type: number | null; password: string; - expireTime: string; status: number; identify: string; }; @@ -136,32 +136,31 @@ const state = reactive<UserState>({ title: '', disabled: false, + allDisabled: false, isShowUserDialog: false, userForm: { username: '', // 账户名称 realName: '', // 用户昵称 - roleId: null, // 关联角色 + roleIds: [], // 关联角色 depId: null, // 部门 phone: '', // 手机号 email: '', // 邮箱 identify: '', gender: null, // 性别 password: '', // 账户密码 - positionId: null, // 岗位 + positionIds: [], // 岗位 type: null, // 用户类型 - expireTime: '', // 账户过期 status: 1 // 用户状态 }, userFormRules:{ username: [{ required: true, message: '请填写用户名', trigger: 'blur' }], realName: [{ required: true, message: '请填写真实姓名', trigger: 'blur' }], - roleId: [{ required: true, message: '请选择用户角色', trigger: 'change' }], + roleIds: [{ required: true, message: '请选择用户角色', trigger: 'change' }], depId: [{ required: true, message: '请选择部门', trigger: 'change' }], - positionId: [{ required: true, message: '请选择职务', trigger: 'change' }], + positionIds: [{ required: true, message: '请选择职务', trigger: 'change' }], phone: [{ required: true, message: '请填写手机号', trigger: 'blur' }], type: [{ required: true, message: '请填写用户类型', trigger: 'blur' }], gender: [{ required: true, message: '请选择性别', trigger: 'change' }], - expireTime: [{ required: true, message: '请输入账户过期时间', trigger: 'blur' }], password: [{ required: true, message: '请输入账户密码', trigger: 'blur' }], }, departmentData: [], // 部门数据 @@ -185,26 +184,38 @@ state.dutyData = dutyList if (type === '新增') { state.disabled = false + state.allDisabled = false state.title = '新增用户'; state.userForm = { username: '', realName: '', - roleId: null, + roleIds: [], depId: null, phone: '', email: '', identify: '', - positionId: null, + positionIds: [], gender: null, type: null, password: '', - expireTime: '', status: 1 }; - } else { + } else{ + if(type === '修改'){ state.disabled = true + state.allDisabled = false state.title = '修改用户'; state.userForm = JSON.parse(JSON.stringify(value)); + state.userForm.roleIds = JSON.parse(JSON.stringify(value)).roles?.map(obj=>obj.roleId) + state.userForm.positionIds = JSON.parse(JSON.stringify(value)).positions?.map(obj=>obj.positionId) + }else{ + state.disabled = true + state.allDisabled = true + state.title = '查看'; + state.userForm = JSON.parse(JSON.stringify(value)); + state.userForm.roleIds = JSON.parse(JSON.stringify(value)).roles?.map(obj=>obj.roleId) + state.userForm.positionIds = JSON.parse(JSON.stringify(value)).positions?.map(obj=>obj.positionId) + } } }; diff --git a/src/views/system/user/index.vue b/src/views/system/user/index.vue index b652fea..9af926e 100644 --- a/src/views/system/user/index.vue +++ b/src/views/system/user/index.vue @@ -38,7 +38,7 @@ </el-table-column> <el-table-column prop="positionId" label="职务" show-overflow-tooltip> <template #default="scope"> - {{ parseNumber(scope.row.positionId) }} + {{ scope.row.positions?.map(i=>i.positionName).join('、') }} </template> </el-table-column> <!-- <el-table-column prop="type" label="职务" show-overflow-tooltip>--> @@ -46,7 +46,7 @@ <!-- {{ `${userTypeList.find(item => item.id === scope.row.type)?.name}` }}--> <!-- </template>--> <!-- </el-table-column>--> - <el-table-column prop="department.depName" label="部门" show-overflow-tooltip></el-table-column> + <el-table-column prop="depName" label="部门" show-overflow-tooltip></el-table-column> <el-table-column prop="phone" label="手机号" show-overflow-tooltip></el-table-column> <el-table-column prop="email" label="邮箱" show-overflow-tooltip></el-table-column> <el-table-column prop="status" label="用户状态" show-overflow-tooltip> @@ -56,8 +56,9 @@ </template> </el-table-column> <el-table-column prop="gmtCreate" label="创建时间" show-overflow-tooltip></el-table-column> - <el-table-column label="操作" width="100"> + <el-table-column label="操作" width="140"> <template #default="scope"> + <el-button :disabled="scope.row.userName === 'admin'" size="small" text type="primary" @click="onOpenUserDialog('查看', scope.row)">查看</el-button> <el-button :disabled="scope.row.userName === 'admin'" size="small" text type="primary" @click="onOpenUserDialog('修改', scope.row)">修改</el-button> <el-button style="color: red" :disabled="scope.row.userName === 'admin'" size="small" text type="primary" @click="onRowDel(scope.row)">删除</el-button> </template> -- Gitblit v1.9.2