From 83bbceeca584500a9902ce1677a3337990d9157a Mon Sep 17 00:00:00 2001 From: 马宇豪 <978517621@qq.com> Date: 星期五, 26 五月 2023 17:00:08 +0800 Subject: [PATCH] 新特殊作业 --- src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue | 173 + src/views/newSpecialWorkSystem/workTicket/zysq/index.vue | 83 src/views/newSpecialWorkSystem/workTicket/sqjl/index.vue | 334 +- src/views/newSpecialWorkSystem/workTicket/wdsq/components/detailLog.vue | 250 ++ src/views/newSpecialWorkSystem/workTicket/zysq/components/broken.vue | 763 +++++++ src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue | 425 ++- src/views/newSpecialWorkSystem/workTicket/zysq/components/height.vue | 592 +++++ src/views/newHome/index.vue | 2 /dev/null | 128 - src/views/specialWorkSystem/specialIndex/index.vue | 1 src/views/intellectInspect/inspectBasic/facility/index.vue | 1 src/router/route.ts | 22 src/views/newSpecialWorkSystem/workTicket/zysq/components/hoist.vue | 662 ++++++ src/views/facilityManagement/facilityIndex/index.vue | 1 src/views/newSpecialWorkSystem/workTicket/zysq/components/plate.vue | 827 +++++++ src/views/newSpecialWorkSystem/workTicket/zysq/components/space.vue | 602 +++++ src/api/specialWorkSystem/workApply/index.ts | 93 src/views/newSpecialWorkSystem/workTicket/zysq/components/power.vue | 663 ++++++ src/views/newSpecialWorkSystem/workTicket/zysq/components/ground.vue | 735 ++++++ 19 files changed, 5,817 insertions(+), 540 deletions(-) diff --git a/src/api/specialWorkSystem/workApply/index.ts b/src/api/specialWorkSystem/workApply/index.ts index 8afaf8f..7a86f70 100644 --- a/src/api/specialWorkSystem/workApply/index.ts +++ b/src/api/specialWorkSystem/workApply/index.ts @@ -11,6 +11,90 @@ }); }, + // 新分页获取申请列表 + getNewApplyListPage: (data: object) => { + return request({ + url: import.meta.env.VITE_API_URL + `/specialwork9step/work/applyUser/list/page`, + method: 'post', + data: data + }); + }, + + // 新获取所有申请 + getAllNewApplyListPage: (data: object) => { + return request({ + url: import.meta.env.VITE_API_URL + `/specialwork9step/work/all/list/page`, + method: 'post', + data: data + }); + }, + + // 获取基础数据 + getFormData: (type: number) => { + return request({ + url: import.meta.env.VITE_API_URL + `/specialwork9step/work/getFormData/${type}`, + method: 'get' + }); + }, + + // 新提交接口 + submitFireApply: (data: object) => { + return request({ + url: import.meta.env.VITE_API_URL + `/specialwork9step/work/apply/hot`, + method: 'post', + data: data + }); + }, + submitSpaceApply: (data: object) => { + return request({ + url: import.meta.env.VITE_API_URL + `/specialwork9step/work/apply/confinedspace`, + method: 'post', + data: data + }); + }, + submitHoistApply: (data: object) => { + return request({ + url: import.meta.env.VITE_API_URL + `/specialwork9step/work/apply/hoisting`, + method: 'post', + data: data + }); + }, + submitGroundApply: (data: object) => { + return request({ + url: import.meta.env.VITE_API_URL + `/specialwork9step/work/apply/groundBreaking`, + method: 'post', + data: data + }); + }, + submitBrokenApply: (data: object) => { + return request({ + url: import.meta.env.VITE_API_URL + `/specialwork9step/work/apply/brokenCircuit`, + method: 'post', + data: data + }); + }, + submitHeightApply: (data: object) => { + return request({ + url: import.meta.env.VITE_API_URL + `/specialwork9step/work/apply/hight`, + method: 'post', + data: data + }); + }, + submitPowerApply: (data: object) => { + return request({ + url: import.meta.env.VITE_API_URL + `/specialwork9step/work/apply/temporaryPower`, + method: 'post', + data: data + }); + }, + submitPlateApply: (data: object) => { + return request({ + url: import.meta.env.VITE_API_URL + `/specialwork9step/work/apply/blindPlatePlugging`, + method: 'post', + data: data + }); + }, + // 所有记录列表 getApplyList: (data: object) => { return request({ @@ -156,6 +240,15 @@ }); }, + // 获取图片上传路径 + getUpload9Url: (name: string) => { + return request({ + url: import.meta.env.VITE_API_URL + `/specialwork9step/file/getPresignUrl`, + method: 'post', + data: { prefixName: name.split('.')[0], suffixName: name.split('.')[1] } + }); + }, + // 上传图片 uploadFile: (path: string, file: any) => { return request({ diff --git a/src/router/route.ts b/src/router/route.ts index 0bbfea4..313ab37 100644 --- a/src/router/route.ts +++ b/src/router/route.ts @@ -113,19 +113,27 @@ } }, { - path: '/zysq', - name: 'zysq', + path: '/dhzy', + name: 'dhzy', component: () => import('/@/views/newSpecialWorkSystem/workTicket/zysq/index.vue'), meta: { title: '作业申请' } }, { - path: '/saftyManage', - name: 'saftyManage', - component: () => import('/@/views/system/saftyManage/index.vue'), + path: '/wdsq1', + name: 'wdsq1', + component: () => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/index.vue'), meta: { - title: '安全措施管理' + title: '我的申请' } - } + }, + { + path: '/sqjl1', + name: 'sqjl1', + component: () => import('/@/views/newSpecialWorkSystem/workTicket/sqjl/index.vue'), + meta: { + title: '申请记录' + } + }, ]; diff --git a/src/views/facilityManagement/facilityIndex/index.vue b/src/views/facilityManagement/facilityIndex/index.vue index 5514234..3ba91cb 100644 --- a/src/views/facilityManagement/facilityIndex/index.vue +++ b/src/views/facilityManagement/facilityIndex/index.vue @@ -1091,6 +1091,7 @@ .container{ padding: 20px; background: url('../../../assets/spwbg.png') no-repeat center; + background-size: 100% 100%; .full{ position:fixed; diff --git a/src/views/intellectInspect/inspectBasic/facility/index.vue b/src/views/intellectInspect/inspectBasic/facility/index.vue index e84b57e..347224b 100644 --- a/src/views/intellectInspect/inspectBasic/facility/index.vue +++ b/src/views/intellectInspect/inspectBasic/facility/index.vue @@ -108,7 +108,6 @@ }); // 初始化表格数据 const initFacilityAreaTableData = async () => { - debugger let res = await facilityAreaApi().getFacilityAreaList(state.facilityAreaData.params); if (res.data.code === '200') { state.facilityAreaData.data = res.data.data.records; diff --git a/src/views/newHome/index.vue b/src/views/newHome/index.vue index f944810..98d1da9 100644 --- a/src/views/newHome/index.vue +++ b/src/views/newHome/index.vue @@ -582,6 +582,7 @@ display: grid; grid-gap: 15px; grid-template-columns: repeat(3, 1fr); + grid-template-rows: repeat(5, 120px); grid-auto-flow: row; justify-content: center; @@ -674,6 +675,7 @@ display: grid; grid-gap: 10px; grid-template-columns: repeat(3, 1fr); + grid-template-rows: repeat(5, 96px); grid-auto-flow: row; justify-content: center; diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsqjl/index.vue b/src/views/newSpecialWorkSystem/workTicket/sqjl/index.vue similarity index 73% rename from src/views/newSpecialWorkSystem/workTicket/wdsqjl/index.vue rename to src/views/newSpecialWorkSystem/workTicket/sqjl/index.vue index e38b1c2..dcd2db8 100644 --- a/src/views/newSpecialWorkSystem/workTicket/wdsqjl/index.vue +++ b/src/views/newSpecialWorkSystem/workTicket/sqjl/index.vue @@ -4,8 +4,8 @@ <!-- <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> + <span>作业类型:</span> + <el-col :span="10"> <div class="grid-content topInfo"> <el-select v-model="searchWord"> <el-option @@ -15,30 +15,11 @@ :value="item.id" /> </el-select> + + <el-button type="primary" @click="searchRecord">查询</el-button> + <el-button plain @click="clearSearch">重置</el-button> </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"> @@ -51,38 +32,55 @@ <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="seDepName" label="事业部" align="center"/> + <el-table-column property="applyDepName" label="作业所在车间" align="center"/> + <el-table-column property="workContent" 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"> + <el-table-column property="workDepName" label="作业单位" align="center"/> + <el-table-column property="headList" label="负责人及电话" align="center"> <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> + {{scope.row.headList.map(i=>{return i.userName + '(' + i.phone+ ')' }).join(',')}} </template> </el-table-column> - <el-table-column property="applyTime" label="申请时间" width="180" align="center"/> - <el-table-column label="申请状态" align="center" width="140"> + <el-table-column property="operatorList" label="作业人及电话" align="center"> + <template #default="scope"> + {{scope.row.operatorList.map(i=>{return i.userName + '(' + i.phone+ ')' }).join(',')}} + </template> + </el-table-column> + <el-table-column property="guardianList" label="监护人及电话" align="center"> + <template #default="scope"> + {{scope.row.guardianList.map(i=>{return i.userName + '(' + i.phone+ ')' }).join(',')}} + </template> + </el-table-column> + <el-table-column property="expStartTime" label="作业开始时间" align="center"/> + <el-table-column property="expEndTime" label="预计完成时间" align="center"/> + <el-table-column label="执法仪编号" align="center"> + <template #default="scope"> + {{scope.row.workApprovalDeviceList.map(i=>i.deviceNo).join(',')}} + </template> + </el-table-column> + <el-table-column label="作业人数" align="center"> + <template #default="scope"> + {{scope.row.operatorList.length}} + </template> + </el-table-column> + <el-table-column label="监护人数" align="center"> + <template #default="scope"> + {{scope.row.guardianList.length}} + </template> + </el-table-column> + <el-table-column label="风险研判" align="center"> <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> + <el-tag>{{ statusList.find(i=>i.value === scope.row.status)?.label }}</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"> + <el-table-column fixed="right" label="操作" align="center" width="300"> <template #default="scope"> + <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecordBtn(scope.row)">作废</el-button> <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> + <el-button link type="success" size="small" :icon="Finished">修改</el-button> + <el-button link type="success" size="small" :icon="Download">正式办票</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> @@ -93,14 +91,15 @@ </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> +<!-- <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>--> + <detail-log :type=dialogType :statusList=statusList :details = details></detail-log> <template #footer> <span class="dialog-footer"> <el-button type="primary" @click="dialogDetails = false" @@ -121,19 +120,13 @@ <div class="stepCard"> <el-card class="box-card" shadow="always"> <div class="text"> - 审批结果:<span>{{ item.approvalResultDesc }}</span> + 审批结果:<span class="bold-text">{{ item.approvalResultDesc }}</span> </div> - <div class="text" v-if="item.approvalTypeDesc"> - 层级类型:<span>{{ item.approvalTypeDesc }}</span> + <div class="text"> + 审批类型:<span class="bold-text">{{ item.typeDesc }}</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> + 审批类型:<span class="bold-text">{{ item.auditTypeDesc }}</span> </div> <div class="text" v-show="item.startApprovalTime != null"> 开始时间:<span>{{ item.startApprovalTime }}</span> @@ -145,7 +138,7 @@ ><span>{{ i.resultDesc }}</span> </div> </div> - <div class="approveItem" v-if="item.contentType==1"> + <div class="approveItem"> <div class="item-tit"> <span>审批项目</span> <!-- <span>类型</span>--> @@ -172,7 +165,7 @@ </div> </div> </div> - <div class="text" v-show="item.expFinishApprovalTime != null"> + <div class="text" v-show="item.expFinishApprovalTime && item.expFinishApprovalTime != null"> 期望结束时间:<span>{{ item.expFinishApprovalTime }}</span> </div> <div class="text" v-show="item.finishApprovalTime != null"> @@ -182,6 +175,15 @@ </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> @@ -252,7 +254,6 @@ workTimeList: Array<string>; multipleSelection: Array<any>; deleteArr: Array<any>; - casProps: {}; approveInfo: Object; dialogDetails: boolean; dialogStatus: boolean; @@ -264,9 +265,7 @@ deleteId: null | number; downLoadId: null | number; downLoadName: string; - searchWord: number | null; - searchDep: number | null; - searchDate: Array<any>, + searchWord: string; totalSize1: number; activeName: string; addRecord: {}; @@ -276,6 +275,7 @@ dialogType: number | null; departmentList: Array<any>; departmentRecursionList: Array<DepartmentState>; + statusList: Array<any>; } interface type { id: number; @@ -286,16 +286,9 @@ depName: string; } export default defineComponent({ - name: 'myApply', + name: 'applys', 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')) + detailLog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/detailLog.vue')) }, setup() { const userInfo = useUserInfo(); @@ -310,22 +303,13 @@ departmentList: [], departmentRecursionList: [], chosenIndex: null, - searchWord: null, - searchDep: null, - searchDate: [], + searchWord: '', applyData: [], workTimeList: [], multipleSelection: [], approveInfo: { approvalSteps: [], operators: [] - }, - casProps: { - expandTrigger: 'hover', - emitPath: false, - value: 'depId', - label: 'depName', - checkStrictly: true }, dialogDetails: false, dialogStatus: false, @@ -347,7 +331,53 @@ { id: 6, name: '高处作业' }, { id: 7, name: '临时用电作业' }, { id: 8, name: '盲板抽堵作业' } - ] + ], + statusList: [ + { + value: -1, + label: '废止' + }, + { + value: 0, + label: '风险研判中' + }, + { + value: 1, + label: '票证办理中' + }, + { + value: 2, + label: '安全措施确认中' + }, + { + value: 3, + label: '培训交底中' + }, + { + value: 4, + label: '气体分析中' + }, + { + value: 5, + label: '作业开始' + }, + { + value: 6, + label: '作业监护' + }, + { + value: 7, + label: '作业结束' + }, + { + value: 8, + label: '作业验收' + }, + { + value: 9, + label: '安全措施确认,培训交底中' + } + ] }); interface User { name: string; @@ -375,7 +405,7 @@ let res = await teamManageApi().getAllDepartment(); if (res.data.code === '200') { state.departmentList = JSON.parse(JSON.stringify(res.data.data)) - // recursion(state.departmentList); + recursion(state.departmentList); } else { ElMessage({ type: 'warning', @@ -384,23 +414,21 @@ } }; - // 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 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); + const data = { pageSize: state.pageSize1, pageIndex: state.pageIndex1, searchParams: { workType: state.searchWord } }; + let res = await workApplyApi().getAllNewApplyListPage(data); if (res.data.code === '200') { state.applyData = JSON.parse(JSON.stringify(res.data.data)); state.applyData = state.applyData.map((item) => { @@ -439,7 +467,7 @@ // 关键词查询记录 const searchRecord = async () => { - if (state.searchWord == null && state.searchDep == null && state.searchDate == []) { + if (state.searchWord == '') { ElMessage({ type: 'warning', message: '请输入查询关键词' @@ -450,24 +478,22 @@ }; // 重置搜索 const clearSearch = async () => { - state.searchWord = null; - state.searchDep = null; - state.searchDate = [] + state.searchWord = ''; getListByPage(); }; // 查看进度 const viewStatus = (row) => { getStatus({ workApplyId: row.workApplyId }); + state.dialogStatus = true; }; // 查询进度方法 const getStatus = async (data: any) => { - let res = await workApplyApi().getAllStatus(data); + 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); - state.dialogStatus = true; } else { ElMessage({ type: 'warning', @@ -479,6 +505,28 @@ 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; }; // 导出图表 @@ -504,7 +552,7 @@ } else { ElMessage({ type: 'warning', - message: '导出失败' + message: res.data.msg }); } }) @@ -529,39 +577,6 @@ 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; }; @@ -596,6 +611,7 @@ viewStatus, deleteRecordBtn, downLoadBtn, + conFirmDelete, conFirmDownLoad, getListByPage, handleSizeChange1, @@ -717,8 +733,11 @@ padding-left: 10px; span { - font-weight: bolder; color: #409eff; + } + + .bold-text{ + font-weight: bolder; } &:last-of-type { @@ -873,7 +892,6 @@ } .topInfo { - width: 100%; display: flex; align-items: center; font-size: 16px; @@ -885,20 +903,8 @@ } } } -} -.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; + .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 deleted file mode 100644 index b32213d..0000000 --- a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/brokenLog.vue +++ /dev/null @@ -1,131 +0,0 @@ -<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/detailLog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/detailLog.vue new file mode 100644 index 0000000..132292e --- /dev/null +++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/detailLog.vue @@ -0,0 +1,250 @@ +<template> + <div style="height: 100%"> + <div class="d-container"> + <div class="d-row"> + <div class="d-tit">作业申请单位</div><div class="d-cont">{{details.applyDepName}}</div> + </div> + <div class="d-row"> + <div class="d-tit">作业类型</div><div class="d-cont">{{details.workTypeDesc}}</div> + </div> + <div class="d-row" v-if="type == 1 || type == 3 || type == 6 || type == 8"> + <div class="d-tit">作业等级</div><div class="d-cont">{{details.workLevelDesc}}</div> + </div> + + <div class="d-row" v-if="type == 1"> + <div class="d-tit">动火方式</div><div class="d-cont">{{details.workDetail.workMethod}}</div> + </div> + <div v-if="type == 2"> + <div class="d-row"> + <div class="d-tit">受限空间名称</div><div class="d-cont">{{details.workDetail.csName}}</div> + </div> + <div class="d-row"> + <div class="d-tit">受限空间原有介质名称</div><div class="d-cont">{{details.workDetail.csOriginalName}}</div> + </div> + </div> + <div v-if="type == 3"> + <div class="d-row"> + <div class="d-tit">吊具名称</div><div class="d-cont">{{details.workDetail.hoistingToolName}}</div> + </div> + <div class="d-row"> + <div class="d-tit">起吊重量(t)</div><div class="d-cont">{{details.workDetail.weightMass}}</div> + </div> + <div class="d-row"> + <div class="d-tit">司索人</div><div class="d-cont">{{details.workDetail.solicitorUnames}}</div> + </div> + </div> + <div v-if="type == 4"> + <div class="d-row"> + <div class="d-tit">作业范围、内容、方式</div><div class="d-cont">{{details.workDetail.gbDesc}}</div> + </div> + <div class="d-row"> + <div class="d-tit">示意图</div> + <div class="d-cont"> + <el-image v-for="item in details.workDetail.gbPath?.split(',')" :preview-src-list="[item]" style="width: 150px; height: 150px;margin-right: 50px;margin-bottom: 20px" :src="item" fit="cover" /> + </div> + </div> + </div> + <div v-if="type == 5"> + <div class="d-row"> + <div class="d-tit">断路原因</div><div class="d-cont">{{details.workDetail.bcReason}}</div> + </div> + <div class="d-row"> + <div class="d-tit">涉及相关单位</div><div class="d-cont">{{details.workDetail.involvedDepNames}}</div> + </div> + <div class="d-row"> + <div class="d-tit">断路地段相关说明</div><div class="d-cont">{{details.workDetail.bcExplain}}</div> + </div> + <div class="d-row"> + <div class="d-tit">断路地段示意图</div> + <div class="d-cont"> + <el-image v-for="(item,index) in details.workDetail.bcPath?.split(',')" :preview-src-list="[item]" style="width: 150px; height: 150px;margin-right: 50px;margin-bottom: 20px" :src="item" fit="cover"/> + </div> + </div> + </div> + <div v-if="type == 6"> + <div class="d-row"> + <div class="d-tit">作业高度</div><div class="d-cont">{{details.workDetail.hight}}</div> + </div> + </div> + <div v-if="type == 7"> + <div class="d-row"> + <div class="d-tit">电源接入点及许可用电功率</div><div class="d-cont">{{details.workDetail.powerAccessPoint}}</div> + </div> + <div class="d-row"> + <div class="d-tit">工作电压</div><div class="d-cont">{{details.workDetail.workingVoltage}}</div> + </div> + <div class="d-row"> + <div class="d-tit">用电设备以及功率</div><div class="d-cont">{{details.workDetail.equipmentAndPower}}</div> + </div> + <div class="d-row"> + <div class="d-tit">用电人</div><div class="d-cont">{{details.workDetail.electricityUnames}}</div> + </div> + </div> + <div v-if="type == 8"> + <div class="d-row"> + <div class="d-tit">设备管道名称</div><div class="d-cont">{{details.workDetail.pipingName}}</div> + </div> + <div class="d-row"> + <div class="d-tit">管道介质</div><div class="d-cont">{{details.workDetail.media}}</div> + </div> + <div class="d-row"> + <div class="d-tit">管道温度(℃)</div><div class="d-cont">{{details.workDetail.temperature}}</div> + </div> + <div class="d-row"> + <div class="d-tit">管道压力(kPa)</div><div class="d-cont">{{details.workDetail.pressure}}</div> + </div> + <div class="d-row"> + <div class="d-tit">盲板材质</div><div class="d-cont">{{details.workDetail.bpMaterialQuality}}</div> + </div> + <div class="d-row"> + <div class="d-tit">盲板规格</div><div class="d-cont">{{details.workDetail.bpSpecification}}</div> + </div> + <div class="d-row"> + <div class="d-tit">盲板编号</div><div class="d-cont">{{details.workDetail.bpCode}}</div> + </div> + <div class="d-row"> + <div class="d-tit">盲板位置相关描述</div><div class="d-cont">{{details.workDetail.bpLocationDesc}}</div> + </div> + <div class="d-row"> + <div class="d-tit">盲板位置示意图</div> + <div class="d-cont"> + <el-image v-for="item in details.workDetail.bpLocationMapPath?.split(',')" :preview-src-list="[item]" style="width: 150px; height: 150px;margin-right: 50px;margin-bottom: 20px" :src="item" fit="cover" /> + </div> + </div> + </div> + <div class="d-row"> + <div class="d-tit">作业内容</div><div class="d-cont">{{details.workContent}}</div> + </div> + <div class="d-row"> + <div class="d-tit">作业地址</div><div class="d-cont">{{details.workLocation}}</div> + </div> + <div class="d-row"> + <div class="d-tit">作业单位</div><div class="d-cont">{{details.workDepName}}</div> + </div> + <div class="d-row"> + <div class="d-tit">作业人</div><div class="d-cont">{{details.operatorList.map(i=>{return i.userName + '(' + i.phone+ ')' }).join('、')}}</div> + </div> + <div class="d-row"> + <div class="d-tit">关联其他作业</div><div class="d-cont">{{details.involveOtherWork}}</div> + </div> + + <div class="d-row"> + <div class="d-tit">预计(整体)开始时间</div><div class="d-cont">{{details.expStartTime}}</div> + </div> + <div class="d-row"> + <div class="d-tit">预计(整体)结束时间</div><div class="d-cont">{{details.expEndTime}}</div> + </div> + <div class="d-row"> + <div class="d-tit">作业负责人</div><div class="d-cont">{{details.headList.map(i=>{return i.userName + '(' + i.phone+ ')' }).join('、')}}</div> + </div> + <div class="d-row" v-if="type == 1 || type == 2 || type == 7"> + <div class="d-tit">作业分析人</div><div class="d-cont">{{details.analystList.map(i=>{return i.userName + '(' + i.phone+ ')' }).join('、')}}</div> + </div> + <div class="d-row"> + <div class="d-tit">作业监护人</div><div class="d-cont">{{details.guardianList.map(i=>{return i.userName + '(' + i.phone+ ')' }).join('、')}}</div> + </div> + <div class="d-row"> + <div class="d-tit">绑定执法仪</div><div class="d-cont">{{details.workApprovalDeviceList.map(i=>i.deviceNo).join('、')}}</div> + </div> + <div class="d-row"> + <div class="d-tit">安全措施确认人</div><div class="d-cont">{{details.safetyMeasureList.map(i=>{return i.userName + '(' + i.phone+ ')'}).join('、')}}</div> + </div> + <div class="d-row"> + <div class="d-tit">完工验收人</div><div class="d-cont">{{details.acceptUser.userName + '(' + details.acceptUser.phone+ ')'}}</div> + </div> + <div class="d-row"> + <div class="d-tit">现场开始结束确认人</div><div class="d-cont">{{details.startOrEndList.map(i=>{return i.userName + '(' + i.phone+ ')'}).join('、')}}</div> + </div> + + <div class="d-row"> + <div class="d-tit">风险研判</div><div class="d-cont">{{ statusList.find(i=>i.value === details.status)?.label }}</div> + </div> + + <div class="d-row"> + <div class="d-tit">现场开始结束确认人</div><div class="d-cont">{{details.startOrEndList.map(i=>{return i.userName + '(' + i.phone+ ')'}).join('、')}}</div> + </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 } 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: 'detailLog', + components: {}, + props:['type','statusList','details'], + setup() { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + onMounted(() => { + + }); + 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; + } + } + .d-container{ + width: 100%; + .d-row{ + width: 100%; + display: flex; + align-items: flex-start; + .d-tit{ + width: 150px; + text-align: right; + padding-right: 12px; + } + .d-cont{ + width: calc(100% - 150px); + border: 1px solid #dcdfe6; + margin-bottom: 22px; + border-radius: var(--el-input-border-radius,var(--el-border-radius-base)); + padding: 5px 11px; + } + } + } +</style> diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/fireLog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/fireLog.vue deleted file mode 100644 index 6386a7e..0000000 --- a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/fireLog.vue +++ /dev/null @@ -1,122 +0,0 @@ -<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 deleted file mode 100644 index ed728d7..0000000 --- a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/groundLog.vue +++ /dev/null @@ -1,131 +0,0 @@ -<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 deleted file mode 100644 index f95c6e9..0000000 --- a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/heightLog.vue +++ /dev/null @@ -1,125 +0,0 @@ -<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 deleted file mode 100644 index 1086537..0000000 --- a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/hoistLog.vue +++ /dev/null @@ -1,125 +0,0 @@ -<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 deleted file mode 100644 index 69620a3..0000000 --- a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/plateLog.vue +++ /dev/null @@ -1,149 +0,0 @@ -<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 deleted file mode 100644 index cf81c13..0000000 --- a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/powerLog.vue +++ /dev/null @@ -1,128 +0,0 @@ -<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 deleted file mode 100644 index d6b4606..0000000 --- a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/spaceLog.vue +++ /dev/null @@ -1,128 +0,0 @@ -<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 index 340b902..9863772 100644 --- a/src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue +++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue @@ -32,29 +32,55 @@ <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"> + <el-table-column property="seDepName" label="事业部" align="center"/> + <el-table-column property="applyDepName" label="作业所在车间" align="center"/> + <el-table-column property="workContent" label="作业内容" align="center"/> + <el-table-column property="workTypeDesc" label="作业类型" align="center"/> + <el-table-column property="workDepName" label="作业单位" align="center"/> + <el-table-column property="headList" label="负责人及电话" align="center"> <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> + {{scope.row.headList.map(i=>{return i.userName + '(' + i.phone+ ')' }).join(',')}} </template> </el-table-column> - <el-table-column property="applyTime" label="申请时间" width="180" /> - <el-table-column label="申请状态" align="center" width="180"> + <el-table-column property="operatorList" label="作业人及电话" align="center"> + <template #default="scope"> + {{scope.row.operatorList.map(i=>{return i.userName + '(' + i.phone+ ')' }).join(',')}} + </template> + </el-table-column> + <el-table-column property="guardianList" label="监护人及电话" align="center"> + <template #default="scope"> + {{scope.row.guardianList.map(i=>{return i.userName + '(' + i.phone+ ')' }).join(',')}} + </template> + </el-table-column> + <el-table-column property="expStartTime" label="作业开始时间" align="center"/> + <el-table-column property="expEndTime" label="预计完成时间" align="center"/> + <el-table-column label="执法仪编号" align="center"> + <template #default="scope"> + {{scope.row.workApprovalDeviceList.map(i=>i.deviceNo).join(',')}} + </template> + </el-table-column> + <el-table-column label="作业人数" align="center"> + <template #default="scope"> + {{scope.row.operatorList.length}} + </template> + </el-table-column> + <el-table-column label="监护人数" align="center"> + <template #default="scope"> + {{scope.row.guardianList.length}} + </template> + </el-table-column> + <el-table-column label="风险研判" align="center"> <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> + <el-tag>{{ statusList.find(i=>i.value === scope.row.status)?.label }}</el-tag> </template> </el-table-column> <el-table-column fixed="right" label="操作" align="center" width="300"> <template #default="scope"> + <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecordBtn(scope.row)">作废</el-button> <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> + <el-button link type="success" size="small" :icon="Finished">修改</el-button> + <el-button link type="success" size="small" :icon="Download">正式办票</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> @@ -65,14 +91,15 @@ </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> +<!-- <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>--> + <detail-log :type=dialogType :statusList=statusList :details = details></detail-log> <template #footer> <span class="dialog-footer"> <el-button type="primary" @click="dialogDetails = false" @@ -248,6 +275,7 @@ dialogType: number | null; departmentList: Array<any>; departmentRecursionList: Array<DepartmentState>; + statusList: Array<any>; } interface type { id: number; @@ -260,14 +288,15 @@ 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')) + // 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')) + detailLog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/detailLog.vue')) }, setup() { const userInfo = useUserInfo(); @@ -310,7 +339,53 @@ { id: 6, name: '高处作业' }, { id: 7, name: '临时用电作业' }, { id: 8, name: '盲板抽堵作业' } - ] + ], + statusList: [ + { + value: -1, + label: '废止' + }, + { + value: 0, + label: '风险研判中' + }, + { + value: 1, + label: '票证办理中' + }, + { + value: 2, + label: '安全措施确认中' + }, + { + value: 3, + label: '培训交底中' + }, + { + value: 4, + label: '气体分析中' + }, + { + value: 5, + label: '作业开始' + }, + { + value: 6, + label: '作业监护' + }, + { + value: 7, + label: '作业结束' + }, + { + value: 8, + label: '作业验收' + }, + { + value: 9, + label: '安全措施确认,培训交底中' + } + ] }); interface User { name: string; @@ -361,10 +436,9 @@ // 分页获取 const getListByPage = async () => { const data = { pageSize: state.pageSize1, pageIndex: state.pageIndex1, searchParams: { workType: state.searchWord } }; - let res = await workApplyApi().getApplyListPage(data); + let res = await workApplyApi().getNewApplyListPage(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 = []; @@ -511,39 +585,6 @@ 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; }; diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/broken.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/broken.vue new file mode 100644 index 0000000..3610826 --- /dev/null +++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/broken.vue @@ -0,0 +1,763 @@ +<template> + <div class="home-container"> + <el-form :model="form" label-width="180px" :rules="applyRules" ref="ruleFormRef"> + <div class="homeCard"> + <el-row> + <el-col :span="12"> + <el-form-item label="作业申请单位" prop="applyDepId"> + <el-cascader style="width: 100%" v-model="form.applyDepId" :options="departList2" :props="props" :show-all-levels="false" placeholder="明确到具体车间" @change="findParent" clearable/> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="作业单位" prop="workDepId"> + <el-cascader style="width: 100%" v-model="form.workDepId" :props="depProps" :options="departList" :show-all-levels="false"/> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="涉及相关单位(部门)" prop="workDetail.involvedDepIds"> + <el-cascader style="width: 100%" v-model="form.workDetail.involvedDepIds" :props="depProps2" :options="departList" :show-all-levels="false"/> + </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.workLocation" + :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.bcReason"> + <el-input + v-model="form.workDetail.bcReason" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入断路原因" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="监护人" prop="guardianUids"> + <el-select v-model="form.guardianUids" multiple @change="getSafetyIds" clearable> + <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="headUids"> + <el-select v-model="form.headUids" multiple @change="getStartEndIds" clearable> + <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="operatorUids"> + <el-select v-model="form.operatorUids" multiple clearable> + <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="involveOtherWork"> + <el-select v-model="form.involveOtherWork" multiple clearable> + <el-option + v-for="item in otherWorkList" + :key="item.value" + :label="item.label" + :value="item.label" + /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="绑定执法仪" prop="cameraIds"> + <el-select v-model="form.cameraIds" multiple clearable> + <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="workDetail.bcExplain"> + <el-input + v-model="form.workDetail.bcExplain" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入断路地段相关说明并在右方上传示意图" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="断路地段示意图" prop="workDetail.bcPath"> + <el-upload accept="image/*" :auto-upload="true" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='imgLimit' v-model:file-list="fileList" :http-request="upload" :action="uploadUrl" list-type="picture-card" :on-remove="handleRemove" :before-remove="beforeRemove" :before-upload="getUploadUrl"> + <el-icon><Plus /></el-icon> + <template #tip> + <div class="el-upload__tip">上传jpg/png图片尺寸小于5M,最多可上传3张</div> + </template> + </el-upload> + </el-form-item> + </el-col> + </el-row> + <el-row> +<!-- <el-col :span="12">--> +<!-- <el-form-item label="动火作业实施时间" prop="expStartTime">--> +<!-- <el-date-picker--> +<!-- v-model="form.expStartTime"--> +<!-- 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="expStartTime"> + <el-date-picker + v-model="form.expStartTime" + format="YYYY-MM-DD HH:mm" + value-format="YYYY-MM-DD HH:mm:00" + type="datetime" + style="width: 100%" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="预计(整体)完成时间" prop="expEndTime"> + <el-date-picker + v-model="form.expEndTime" + format="YYYY-MM-DD HH:mm" + value-format="YYYY-MM-DD HH:mm:00" + type="datetime" + style="width: 100%" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="风险辨识" prop="riskIdentification"> + <el-input + v-model="form.riskIdentification" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入风险辨识" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="备注" prop="remark"> + <el-input + v-model="form.remark" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入作业备注" + /> + </el-form-item> + </el-col> + </el-row> + <el-row style="display: flex;justify-content: center"> + <el-table :data="safetyMeasureBasicList" style="width: 90%" border> + <el-table-column type="index" label="序号" width="100px" align="center"/> + <el-table-column prop="measureContent" label="安全措施" align="center"/> +<!-- <el-table-column prop="address" label="确认人">--> +<!-- <template #default="scope">--> + +<!-- </template>--> +<!-- </el-table-column>--> +<!-- <el-table-column prop="address" label="操作">--> +<!-- <template #default="scope">--> +<!-- <el-button link type="primary" size="small" :icon="Edit">修改确认人</el-button>--> +<!-- </template>--> +<!-- </el-table-column>--> + </el-table> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="安全措施确认人" prop="safetyMeasureUids"> + <el-select v-model="form.safetyMeasureUids" multiple clearable> + <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="其他安全措施">--> +<!-- <el-input--> +<!-- v-model="form.workContent"--> +<!-- :autosize="{ minRows: 2 }"--> +<!-- type="textarea"--> +<!-- placeholder="请输入其他安全措施"--> +<!-- />--> +<!-- </el-form-item>--> +<!-- </el-col>--> +<!-- <el-col :span="12">--> +<!-- <el-form-item label="编制人">--> +<!-- <el-input--> +<!-- v-model="form.workContent"--> +<!-- placeholder="请输入编制人"--> +<!-- />--> +<!-- </el-form-item>--> +<!-- </el-col>--> +<!-- </el-row>--> + <el-row style="display: flex;justify-content: center"> + <el-table :data="form.approvalDepBasicList" style="width: 90%" border> + <el-table-column prop="content" label="审批签字项目" align="center"/> + <el-table-column prop="approvalType" label="是否必签" align="center"> + <template #default="scope"> + <el-form-item label="" prop="acceptUid"> + <el-radio-group v-model="scope.row.approvalType"> + <el-radio :label="0">所有必签</el-radio> + <el-radio :label="1">任一</el-radio> + <el-radio :label="2">非必签</el-radio> + </el-radio-group> + </el-form-item> + </template> + </el-table-column> + <el-table-column prop="approvalUids" label="审批人" align="center"> + <template #default="scope"> + <el-select v-model="scope.row.approvalUids" multiple :disabled="isFirstRow(scope.$index)" clearable> + <el-option + v-for="item in workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> + </template> + </el-table-column> + </el-table> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="完工验收" prop="acceptUid"> + <el-select v-model="form.acceptUid" clearable> + <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="startOrEndUids"> + <el-select v-model="form.startOrEndUids" multiple clearable> + <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> + </div> + </el-form> + <div class="applyBtn"> + <el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)">提交申报</el-button> + </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, Edit } from '@element-plus/icons-vue' + import { ElMessage, ElMessageBox } from 'element-plus' + import type { FormInstance, FormRules } from 'element-plus' + import { workApplyApi } from '/@/api/specialWorkSystem/workApply'; + import {UploadProps} from "element-plus/es"; + import axios from "axios"; + interface stateType { + form: Object, + otherWorkList: Array<any>, + equipmentDialog: boolean, + props:{}, + depProps:{}, + depProps2:{}, + safetyMeasureBasicList: [], + fileList: Array<file>, + uploadUrl: string, + dialogVisible: Boolean, + dialogImageUrl: string | null, + imgLimit: number, + } + interface file { + url: string; + } + export default defineComponent({ + name: 'brokenForm', + components: {}, + props:['departList','departList2','workerList','deviceList'], + setup(props: any, context: any) { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + const state = reactive<stateType>({ + equipmentDialog: false, + safetyMeasureBasicList: [], + form: { + workType: 5, + workLevel: 0, + applyDepId: null, + seDepId: null, + expStartTime: '', + expEndTime: '', + operatorUids: [], + headUids: [], + analystUids: [], + guardianUids: [], + workDepId: null, + workContent: '', + workLocation: '', + riskIdentification: '', + involveOtherWork: '', + safetyMeasureUids: [], + approvalDepBasicList: [], + acceptUid: null, + startOrEndUids: [], + cameraIds: [], + workDetail: { + involvedDepIds: [], + bcReason: '', + bcExplain: '', + bcPath: [] + } + }, + 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 + } + ], + props:{ + expandTrigger: 'hover', + label: 'depName', + value: 'depId', + emitPath: false + }, + depProps:{ + expandTrigger: 'hover', + label: 'depName', + value: 'depId', + checkStrictly: true, + emitPath: false + }, + depProps2:{ + expandTrigger: 'hover', + label: 'depName', + value: 'depId', + checkStrictly: true, + emitPath: false, + multiple: true + }, + fileList: [], + imgLimit: 3, + uploadUrl: '', + dialogVisible: false, + dialogImageUrl: null + }); + const ruleFormRef = ref<FormInstance>() + const applyRules = reactive<FormRules>({ + applyDepId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workLevel: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workContent: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workLocation: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + operatorUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workDepId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + headUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + analystUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + involveOtherWork: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + guardianUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + riskIdentification: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + cameraIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + expStartTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + expEndTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + safetyMeasureUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + acceptUid: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + startOrEndUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.involvedDepIds": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.bcReason": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.bcExplain": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.bcPath": [{ required: true, message: '该内容不能为空', trigger: 'blur' }] + }); + + // 页面载入时执行方法 + onMounted(() => { + }); + + const findParent = ()=>{ + state.form.seDepId = findNearestDepLevel2DepId(props.departList2,state.form.applyDepId) + console.log(state.form.seDepId,'state.form.seDepId') + } + + // 获取基础数据 + const getBasicData = async ()=>{ + const res = await workApplyApi().getFormData(5) + if (res.data.code === '200') { + state.safetyMeasureBasicList = JSON.parse(JSON.stringify(res.data.data.safetyMeasureBasicList)) + if(res.data.data.approvalDepBasicList && res.data.data.approvalDepBasicList.length>0){ + state.form.approvalDepBasicList = res.data.data.approvalDepBasicList.map(({id,content})=>({ + content, + approvalDepBasicId: id, + approvalUids: [], + approvalType: null + })) + }else{ + state.form.approvalDepBasicList = [] + } + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + + const getStartEndIds = ()=>{ + state.form.startOrEndUids = state.form.headUids + state.form.approvalDepBasicList[0].approvalUids = state.form.headUids + } + + const getSafetyIds = ()=>{ + state.form.safetyMeasureUids = state.form.guardianUids + } + + const isFirstRow = (index)=> { + return index === 0; + } + + const submitForm = async (formEl: FormInstance | undefined) => { + if (!formEl) return + await formEl.validate(async (valid, fields) => { + if (valid) { + for(let i of state.form.approvalDepBasicList){ + if(i.approvalUids.length == 0){ + ElMessage({ + type: 'warning', + message: '部分审批人未配置' + }); + return + } + } + if(Array.isArray(state.form.involveOtherWork)){ + state.form.involveOtherWork = state.form.involveOtherWork.join(',') + } + state.form.workDetail.involvedDepIds = state.form.workDetail.involvedDepIds.join(',') + state.form.workDetail.bcPath = state.form.workDetail.bcPath.join(',') + const res = await workApplyApi().submitBrokenApply(state.form) + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '提交成功!' + }); + formEl.resetFields() + getBasicData() + state.form.workDetail.bcPath = [] + state.fileList = [] + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + state.form.involveOtherWork = state.form.involveOtherWork.split(',') + state.form.workDetail.involvedDepIds = state.form.workDetail.involvedDepIds.split(',') + state.form.workDetail.bcPath = state.form.workDetail.bcPath.split(',') + } + } else { + console.log('error submit!', fields) + } + }) + } + + const findNearestDepLevel2DepId = (data, targetDepId) => { + let nearestDepId = null; + + const traverseTree = (node) => { + if (node.depId === targetDepId) { + return true; + } + + if (node.children && node.children.length > 0) { + for (const child of node.children) { + const found = traverseTree(child); + if (found) { + if (child.depLevel === 2) { + nearestDepId = child.depId; + } + return true; + } + } + } + + return false; + }; + + for (const root of data) { + traverseTree(root); + } + + return nearestDepId; + }; + const handlePreview: UploadProps['onPreview'] = (uploadFile) => { + console.log(uploadFile); + }; + + const handlePictureCardPreview = (uploadFile: { url: string }) => { + state.dialogImageUrl = uploadFile.url!; + state.dialogVisible = true; + }; + + const getUploadUrl = async (rawFile: any) => { + const fileSize = rawFile.size / 1024 / 1024 < 5 ? '1' : '0' + if(fileSize === '0'){ + ElMessage({ + type: 'warning', + message: '文件大小不能超过5M。' + }); + return false + }else{ + const res = await workApplyApi().getUpload9Url(rawFile.name); + state.form.workDetail.bcPath.push(res.data.data.fileName) + state.uploadUrl = res.data.data.uploadUrl; + } + }; + + const upload = async (params: any) => { + let reader = new FileReader(); + reader.readAsArrayBuffer(params.file); + reader.onload = async () => { + axios + .put(state.uploadUrl, reader.result, { + header: { 'Content-Type': 'multipart/form-data' } + }) + .then(() => { + // if (state.fileList.length === 2) { + // state.fileList.splice(0, 1); + // } + }); + }; + }; + + const beforeRemove = (file: {}, fileList: []) => { + const result = new Promise((resolve, reject) => { + ElMessageBox.confirm('此操作将删除该图片, 是否继续?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }) + .then(() => { + // console.log(state.workDetail.bcPath,'path') + const list = JSON.parse(JSON.stringify(state.form.workDetail.bcPath)) + fileList.map((item,index)=>{ + if(item.uid === file.uid){ + fileList.splice(index,1) + state.form.workDetail.bcPath.splice(index,1) + // 请求删除接口 + deletePic(false,list[index]) + } + }) + }) + .catch(() => { + reject(false); + }); + }); + return result; + }; + + // 删除图片接口 + const deletePic = async(fileName:string)=>{ + const res = await workApplyApi().deleteFile({fileName: fileName}) + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '删除成功!' + }); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + } + + const showTip =()=>{ + ElMessage({ + type: 'warning', + message: '超出文件上传数量' + }); + } + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId',value) + userInfos.value.projectId = value + await initBackEndControlRoutes(); + }; + return { + renderMenu, + getBasicData, + getStartEndIds, + getSafetyIds, + isFirstRow, + submitForm, + findParent, + handlePreview, + getUploadUrl, + upload, + showTip, + handlePictureCardPreview, + beforeRemove, + Search, + ruleFormRef, + applyRules, + ...toRefs(state), + }; + }, + }); +</script> + +<style scoped lang="scss"> + .home-container { + width: 100%; + height: 100vh; + overflow: hidden; + position: relative; + overflow-y: scroll; + padding: 0 0 120px; + .homeCard{ + width: 100%; + padding: 20px; + box-sizing: border-box; + background: #fff; + border-radius: 4px; + margin-bottom: 20px; + } + .applyBtn{ + position: fixed; + left: 0; + bottom: 0; + z-index: 999; + width: 100%; + background: #fff; + padding: 20px 0; + 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/components/fire.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue index 9d124d1..24af233 100644 --- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue +++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue @@ -4,13 +4,13 @@ <div class="homeCard"> <el-row> <el-col :span="12"> - <el-form-item label="作业申请单位" prop="workDetail.involvedDepIds"> - <el-cascader style="width: 100%" v-model="form.workDetail.involvedDepIds" :options="departList" :props="depProps" :show-all-levels="false"/> + <el-form-item label="作业申请单位" prop="applyDepId"> + <el-cascader style="width: 100%" v-model="form.applyDepId" :options="departList2" :props="props" :show-all-levels="false" placeholder="明确到具体车间" @change="findParent" clearable/> </el-form-item> </el-col> <el-col :span="12"> <el-form-item label="动火级别" prop="workLevel"> - <el-select v-model="form.workLevel"> + <el-select v-model="form.workLevel" clearable> <el-option v-for="item in workLevelList" :key="item.value" @@ -35,19 +35,19 @@ <el-col :span="12"> <el-form-item label="作业地点及动火部位" prop="workLocation"> <el-input - v-model="form.workContent" + v-model="form.workLocation" :autosize="{ minRows: 1 }" type="textarea" - placeholder="请输入作业内容" + placeholder="请输入作业地点及动火部位" /> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="12"> - <el-form-item label="动火方式" prop="workDetail.hotMethod"> + <el-form-item label="动火方式" prop="workDetail.workMethod"> <el-input - v-model="form.workDetail.hotMethod" + v-model="form.workDetail.workMethod" :autosize="{ minRows: 1 }" type="textarea" placeholder="请输入动火方式" @@ -55,8 +55,8 @@ </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="动火人级证书编号" prop="operatorUids"> - <el-select v-model="form.operatorUids" multiple> + <el-form-item label="作业人及证件编号" prop="operatorUids"> + <el-select v-model="form.operatorUids" multiple clearable> <el-option v-for="item in workerList" :key="item.uid" @@ -69,13 +69,13 @@ </el-row> <el-row> <el-col :span="12"> - <el-form-item label="作业单位" prop="workDetail.involvedDepIds"> - <el-cascader style="width: 100%" v-model="form.workDetail.involvedDepIds" :props="depProps" :options="departList" :show-all-levels="false"/> + <el-form-item label="作业单位" prop="workDepId"> + <el-cascader style="width: 100%" v-model="form.workDepId" :props="depProps" :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-form-item label="作业负责人" prop="headUids"> + <el-select v-model="form.headUids" multiple @change="getStartEndIds" clearable> <el-option v-for="item in workerList" :key="item.uid" @@ -88,8 +88,8 @@ </el-row> <el-row> <el-col :span="12"> - <el-form-item label="分析人" prop="operatorUids"> - <el-select v-model="form.operatorUids" multiple> + <el-form-item label="分析人" prop="analystUids"> + <el-select v-model="form.analystUids" multiple clearable> <el-option v-for="item in workerList" :key="item.uid" @@ -100,8 +100,8 @@ </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-form-item label="关联其他特殊作业" prop="involveOtherWork"> + <el-select v-model="form.involveOtherWork" multiple clearable> <el-option v-for="item in otherWorkList" :key="item.value" @@ -114,8 +114,8 @@ </el-row> <el-row> <el-col :span="12"> - <el-form-item label="分析人" prop="operatorUids"> - <el-select v-model="form.operatorUids" multiple> + <el-form-item label="监护人" prop="guardianUids"> + <el-select v-model="form.guardianUids" multiple @change="getSafetyIds" clearable> <el-option v-for="item in workerList" :key="item.uid" @@ -127,7 +127,7 @@ </el-col> <el-col :span="12"> <el-form-item label="绑定执法仪" prop="cameraIds"> - <el-select v-model="form.cameraIds" multiple> + <el-select v-model="form.cameraIds" multiple clearable> <el-option v-for="item in deviceList" :key="item.id" @@ -139,23 +139,34 @@ </el-col> </el-row> <el-row> +<!-- <el-col :span="12">--> +<!-- <el-form-item label="动火作业实施时间" prop="expStartTime">--> +<!-- <el-date-picker--> +<!-- v-model="form.expStartTime"--> +<!-- 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-form-item label="预计(整体)开始时间" prop="expStartTime"> <el-date-picker - v-model="form.workTimeLine" + v-model="form.expStartTime" format="YYYY-MM-DD HH:mm" value-format="YYYY-MM-DD HH:mm:00" - type="datetimerange" - range-separator="至" - start-placeholder="开始时间" - end-placeholder="结束时间" + type="datetime" + style="width: 100%" /> </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="预计(整体)完成时间" prop="workTimeLine"> + <el-form-item label="预计(整体)完成时间" prop="expEndTime"> <el-date-picker - v-model="form.workTimeLine" + v-model="form.expEndTime" format="YYYY-MM-DD HH:mm" value-format="YYYY-MM-DD HH:mm:00" type="datetime" @@ -166,9 +177,19 @@ </el-row> <el-row> <el-col :span="12"> - <el-form-item label="备注" prop="info"> + <el-form-item label="风险辨识" prop="riskIdentification"> <el-input - v-model="form.workContent" + v-model="form.riskIdentification" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入风险辨识" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="备注" prop="remark"> + <el-input + v-model="form.remark" :autosize="{ minRows: 1 }" type="textarea" placeholder="请输入作业备注" @@ -176,26 +197,26 @@ </el-form-item> </el-col> </el-row> - <el-row> - <el-table :data="safeData" style="width: 100%" border> - <el-table-column type="index" label="序号" width="80px"/> - <el-table-column prop="name" label="安全措施"/> - <el-table-column prop="address" label="确认人"> - <template #default="scope"> + <el-row style="display: flex;justify-content: center"> + <el-table :data="safetyMeasureBasicList" style="width: 90%" border> + <el-table-column type="index" label="序号" width="100px" align="center"/> + <el-table-column prop="measureContent" label="安全措施" align="center"/> +<!-- <el-table-column prop="address" label="确认人">--> +<!-- <template #default="scope">--> - </template> - </el-table-column> - <el-table-column prop="address" label="操作"> - <template #default="scope"> - <el-button link type="primary" size="small" :icon="Edit">修改确认人</el-button> - </template> - </el-table-column> +<!-- </template>--> +<!-- </el-table-column>--> +<!-- <el-table-column prop="address" label="操作">--> +<!-- <template #default="scope">--> +<!-- <el-button link type="primary" size="small" :icon="Edit">修改确认人</el-button>--> +<!-- </template>--> +<!-- </el-table-column>--> </el-table> </el-row> <el-row> <el-col :span="12"> - <el-form-item label="其他安全措施填报人" prop="info"> - <el-select v-model="form.operatorUids" multiple> + <el-form-item label="安全措施确认人" prop="safetyMeasureUids"> + <el-select v-model="form.safetyMeasureUids" multiple clearable> <el-option v-for="item in workerList" :key="item.uid" @@ -206,34 +227,58 @@ </el-form-item> </el-col> </el-row> - <el-row> - <el-table :data="form.reviewData" style="width: 100%" border> - <el-table-column prop="item" label="审批签字项目"/> - <el-table-column prop="isCheck" label="是否必签"> +<!-- <el-row>--> +<!-- <el-col :span="12">--> +<!-- <el-form-item label="其他安全措施">--> +<!-- <el-input--> +<!-- v-model="form.workContent"--> +<!-- :autosize="{ minRows: 2 }"--> +<!-- type="textarea"--> +<!-- placeholder="请输入其他安全措施"--> +<!-- />--> +<!-- </el-form-item>--> +<!-- </el-col>--> +<!-- <el-col :span="12">--> +<!-- <el-form-item label="编制人">--> +<!-- <el-input--> +<!-- v-model="form.workContent"--> +<!-- placeholder="请输入编制人"--> +<!-- />--> +<!-- </el-form-item>--> +<!-- </el-col>--> +<!-- </el-row>--> + <el-row style="display: flex;justify-content: center"> + <el-table :data="form.approvalDepBasicList" style="width: 90%" border> + <el-table-column prop="content" label="审批签字项目" align="center"/> + <el-table-column prop="approvalType" label="是否必签" align="center"> <template #default="scope"> - <el-radio-group v-model="scope.row.isCheck"> - <el-radio :label="1">所有必签</el-radio> - <el-radio :label="2">任一</el-radio> - <el-radio :label="3">非必签</el-radio> - </el-radio-group> + <el-form-item label="" prop="acceptUid"> + <el-radio-group v-model="scope.row.approvalType"> + <el-radio :label="0">所有必签</el-radio> + <el-radio :label="1">任一</el-radio> + <el-radio :label="2">非必签</el-radio> + </el-radio-group> + </el-form-item> </template> </el-table-column> - <el-table-column prop="names" label="审批人"> + <el-table-column prop="approvalUids" label="审批人" align="center"> <template #default="scope"> - - </template> - </el-table-column> - <el-table-column prop="address" label="操作"> - <template #default="scope"> - <el-button link type="primary" size="small" :icon="Edit">选择审批人</el-button> + <el-select v-model="scope.row.approvalUids" multiple :disabled="isFirstRow(scope.$index)" clearable> + <el-option + v-for="item in workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> </template> </el-table-column> </el-table> </el-row> <el-row> <el-col :span="12"> - <el-form-item label="完工验收" prop="info"> - <el-select v-model="form.operatorUids"> + <el-form-item label="完工验收" prop="acceptUid"> + <el-select v-model="form.acceptUid" clearable> <el-option v-for="item in workerList" :key="item.uid" @@ -244,8 +289,8 @@ </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="现场开始结束确认人" prop="info"> - <el-select v-model="form.operatorUids" multiple> + <el-form-item label="现场开始结束确认人" prop="startOrEndUids"> + <el-select v-model="form.startOrEndUids" multiple clearable> <el-option v-for="item in workerList" :key="item.uid" @@ -279,79 +324,44 @@ workLevelList: Array<any>, otherWorkList: Array<any>, equipmentDialog: boolean, + props:{}, depProps:{}, - safeData: [] + safetyMeasureBasicList: [] } export default defineComponent({ name: 'fireForm', - components: { - - }, - props:['departList','workerList','deviceList'], + components: {}, + props:['departList','departList2','workerList','deviceList'], setup(props: any, context: any) { const userInfo = useUserInfo() const { userInfos } = storeToRefs(userInfo); const state = reactive<stateType>({ equipmentDialog: false, + safetyMeasureBasicList: [], form: { - operatorUids: [], - workType: 1, - workLevel: null, - workContent: '', - workLocation: '', - maBaseId: null, - hazardIdentification: '', + workType: 1, + workLevel: null, + applyDepId: null, + seDepId: null, + expStartTime: '', + expEndTime: '', + operatorUids: [], + headUids: [], + analystUids: [], + guardianUids: [], + workDepId: null, + workContent: '', + workLocation: '', + riskIdentification: '', + involveOtherWork: '', + safetyMeasureUids: [], + approvalDepBasicList: [], + acceptUid: null, + startOrEndUids: [], cameraIds: [], - workDetail:{ - hotMethod: '', - otherSpecialWork: [] - }, - receiveUids: [], - workTimeLine: [], - expStartTime: '', - expEndTime: '', - reviewData: [ - { - item: '作业负责人意见', - isCheck: null, - names: [] - }, - { - item: '车间主任意见', - isCheck: null, - names: [] - }, - { - item: '运营安环科意见', - isCheck: null, - names: [] - }, - { - item: '运营单位负责人意见', - isCheck: null, - names: [] - }, - { - item: '事业部安环科意见', - isCheck: null, - names: [] - }, - { - item: '事业部负责人审批意见', - isCheck: null, - names: [] - }, - { - item: '公司主要负责人审批意见', - isCheck: null, - names: [] - }, - { - item: '岗位当班班长验票情况', - isCheck: null, - names: [] - } - ] + workDetail: { + workMethod: '' + } }, workLevelList: [ { @@ -401,31 +411,154 @@ value: 8 } ], + props:{ + expandTrigger: 'hover', + label: 'depName', + value: 'depId', + emitPath: false + }, depProps:{ expandTrigger: 'hover', label: 'depName', - value: 'depId' - }, - safeData: [] + value: 'depId', + checkStrictly: true, + emitPath: false + } }); 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' }], + applyDepId: [{ 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' }], + operatorUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workDepId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + headUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + analystUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + involveOtherWork: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + guardianUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + riskIdentification: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], cameraIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], - workTimeLine: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], - "workDetail.hotMethod": [{ required: true, message: '该内容不能为空', trigger: 'blur' }] + expStartTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + expEndTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + safetyMeasureUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + acceptUid: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + startOrEndUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.workMethod": [{ required: true, message: '该内容不能为空', trigger: 'blur' }] }); // 页面载入时执行方法 onMounted(() => { - state.form.involvedDepIds = userInfos.value.depId - }); + getBasicData() + }); + const findParent = ()=>{ + state.form.seDepId = findNearestDepLevel2DepId(props.departList2,state.form.applyDepId) + console.log(state.form.seDepId,'state.form.seDepId') + } + + // 获取基础数据 + const getBasicData = async ()=>{ + const res = await workApplyApi().getFormData(1) + if (res.data.code === '200') { + state.safetyMeasureBasicList = JSON.parse(JSON.stringify(res.data.data.safetyMeasureBasicList)) + if(res.data.data.approvalDepBasicList && res.data.data.approvalDepBasicList.length>0){ + state.form.approvalDepBasicList = res.data.data.approvalDepBasicList.map(({id,content})=>({ + content, + approvalDepBasicId: id, + approvalUids: [], + approvalType: null + })) + }else{ + state.form.approvalDepBasicList = [] + } + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + + const getStartEndIds = ()=>{ + state.form.startOrEndUids = state.form.headUids + state.form.approvalDepBasicList[0].approvalUids = state.form.headUids + } + + const getSafetyIds = ()=>{ + state.form.safetyMeasureUids = state.form.guardianUids + } + + const isFirstRow = (index)=> { + return index === 0; + } + + const submitForm = async (formEl: FormInstance | undefined) => { + if (!formEl) return + await formEl.validate(async (valid, fields) => { + if (valid) { + for(let i of state.form.approvalDepBasicList){ + if(i.approvalUids.length == 0){ + ElMessage({ + type: 'warning', + message: '部分审批人未配置' + }); + return + } + } + if(Array.isArray(state.form.involveOtherWork)){ + state.form.involveOtherWork = state.form.involveOtherWork.join(',') + } + const res = await workApplyApi().submitFireApply(state.form) + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '提交成功!' + }); + formEl.resetFields() + getBasicData() + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + state.form.involveOtherWork = state.form.involveOtherWork.split(',') + } + } else { + console.log('error submit!', fields) + } + }) + } + + const findNearestDepLevel2DepId = (data, targetDepId) => { + let nearestDepId = null; + + const traverseTree = (node) => { + if (node.depId === targetDepId) { + return true; + } + + if (node.children && node.children.length > 0) { + for (const child of node.children) { + const found = traverseTree(child); + if (found) { + if (child.depLevel === 2) { + nearestDepId = child.depId; + } + return true; + } + } + } + + return false; + }; + + for (const root of data) { + traverseTree(root); + } + + return nearestDepId; + }; // 折线图 const renderMenu = async (value: string) => { @@ -435,6 +568,12 @@ }; return { renderMenu, + getBasicData, + getStartEndIds, + getSafetyIds, + isFirstRow, + submitForm, + findParent, Search, ruleFormRef, applyRules, @@ -451,7 +590,7 @@ overflow: hidden; position: relative; overflow-y: scroll; - padding: 40px 0 100px; + padding: 0 0 120px; .homeCard{ width: 100%; padding: 20px; @@ -461,11 +600,13 @@ margin-bottom: 20px; } .applyBtn{ - position: absolute; + position: fixed; + left: 0; + bottom: 0; z-index: 999; width: 100%; background: #fff; - padding-top: 15px; + padding: 20px 0; box-shadow: 0 -3px 8px rgba(150,150,150,.1); display: flex; align-items: center; diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/ground.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/ground.vue new file mode 100644 index 0000000..d1fd79e --- /dev/null +++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/ground.vue @@ -0,0 +1,735 @@ +<template> + <div class="home-container"> + <el-form :model="form" label-width="180px" :rules="applyRules" ref="ruleFormRef"> + <div class="homeCard"> + <el-row> + <el-col :span="12"> + <el-form-item label="作业申请单位" prop="applyDepId"> + <el-cascader style="width: 100%" v-model="form.applyDepId" :options="departList2" :props="props" :show-all-levels="false" placeholder="明确到具体车间" @change="findParent" clearable/> + </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="operatorUids"> + <el-select v-model="form.operatorUids" multiple clearable> + <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="workDepId"> + <el-cascader style="width: 100%" v-model="form.workDepId" :props="depProps" :options="departList" :show-all-levels="false"/> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="作业负责人" prop="headUids"> + <el-select v-model="form.headUids" multiple @change="getStartEndIds" clearable> + <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="workLocation"> + <el-input + v-model="form.workLocation" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入作业地点" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="关联其他特殊作业" prop="involveOtherWork"> + <el-select v-model="form.involveOtherWork" multiple clearable> + <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="guardianUids"> + <el-select v-model="form.guardianUids" multiple @change="getSafetyIds" clearable> + <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 clearable> + <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="workDetail.gbDesc"> + <el-input + v-model="form.workDetail.gbDesc" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入作业范围、内容、方式(包括深度、面积)并在右方上传简图" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="作业简图" prop="workDetail.gbPath"> + <el-upload accept="image/*" :auto-upload="true" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='imgLimit' v-model:file-list="fileList" :http-request="upload" :action="uploadUrl" list-type="picture-card" :on-remove="handleRemove" :before-remove="beforeRemove" :before-upload="getUploadUrl"> + <el-icon><Plus /></el-icon> + <template #tip> + <div class="el-upload__tip">上传jpg/png图片尺寸小于5M,最多可上传3张</div> + </template> + </el-upload> + </el-form-item> + </el-col> + </el-row> + <el-row> +<!-- <el-col :span="12">--> +<!-- <el-form-item label="动火作业实施时间" prop="expStartTime">--> +<!-- <el-date-picker--> +<!-- v-model="form.expStartTime"--> +<!-- 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="expStartTime"> + <el-date-picker + v-model="form.expStartTime" + format="YYYY-MM-DD HH:mm" + value-format="YYYY-MM-DD HH:mm:00" + type="datetime" + style="width: 100%" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="预计(整体)完成时间" prop="expEndTime"> + <el-date-picker + v-model="form.expEndTime" + format="YYYY-MM-DD HH:mm" + value-format="YYYY-MM-DD HH:mm:00" + type="datetime" + style="width: 100%" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="风险辨识" prop="riskIdentification"> + <el-input + v-model="form.riskIdentification" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入风险辨识" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="备注" prop="remark"> + <el-input + v-model="form.remark" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入作业备注" + /> + </el-form-item> + </el-col> + </el-row> + <el-row style="display: flex;justify-content: center"> + <el-table :data="safetyMeasureBasicList" style="width: 90%" border> + <el-table-column type="index" label="序号" width="100px" align="center"/> + <el-table-column prop="measureContent" label="安全措施" align="center"/> +<!-- <el-table-column prop="address" label="确认人">--> +<!-- <template #default="scope">--> + +<!-- </template>--> +<!-- </el-table-column>--> +<!-- <el-table-column prop="address" label="操作">--> +<!-- <template #default="scope">--> +<!-- <el-button link type="primary" size="small" :icon="Edit">修改确认人</el-button>--> +<!-- </template>--> +<!-- </el-table-column>--> + </el-table> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="安全措施确认人" prop="safetyMeasureUids"> + <el-select v-model="form.safetyMeasureUids" multiple clearable> + <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="其他安全措施">--> +<!-- <el-input--> +<!-- v-model="form.workContent"--> +<!-- :autosize="{ minRows: 2 }"--> +<!-- type="textarea"--> +<!-- placeholder="请输入其他安全措施"--> +<!-- />--> +<!-- </el-form-item>--> +<!-- </el-col>--> +<!-- <el-col :span="12">--> +<!-- <el-form-item label="编制人">--> +<!-- <el-input--> +<!-- v-model="form.workContent"--> +<!-- placeholder="请输入编制人"--> +<!-- />--> +<!-- </el-form-item>--> +<!-- </el-col>--> +<!-- </el-row>--> + <el-row style="display: flex;justify-content: center"> + <el-table :data="form.approvalDepBasicList" style="width: 90%" border> + <el-table-column prop="content" label="审批签字项目" align="center"/> + <el-table-column prop="approvalType" label="是否必签" align="center"> + <template #default="scope"> + <el-form-item label="" prop="acceptUid"> + <el-radio-group v-model="scope.row.approvalType"> + <el-radio :label="0">所有必签</el-radio> + <el-radio :label="1">任一</el-radio> + <el-radio :label="2">非必签</el-radio> + </el-radio-group> + </el-form-item> + </template> + </el-table-column> + <el-table-column prop="approvalUids" label="审批人" align="center"> + <template #default="scope"> + <el-select v-model="scope.row.approvalUids" multiple :disabled="isFirstRow(scope.$index)" clearable> + <el-option + v-for="item in workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> + </template> + </el-table-column> + </el-table> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="完工验收" prop="acceptUid"> + <el-select v-model="form.acceptUid" clearable> + <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="startOrEndUids"> + <el-select v-model="form.startOrEndUids" multiple clearable> + <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> + </div> + </el-form> + <div class="applyBtn"> + <el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)">提交申报</el-button> + </div> + <el-dialog v-model="dialogVisible"> + <img w-full :src="dialogImageUrl" alt="Preview Image" /> + </el-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, Edit } from '@element-plus/icons-vue' + import {ElMessage, ElMessageBox, UploadProps, UploadUserFile} from 'element-plus' + import type { FormInstance, FormRules } from 'element-plus' + import { workApplyApi } from '/@/api/specialWorkSystem/workApply'; + import axios from "axios"; + interface stateType { + form: Object, + otherWorkList: Array<any>, + equipmentDialog: boolean, + props:{}, + depProps:{}, + safetyMeasureBasicList: [], + fileList: Array<file>, + uploadUrl: string, + dialogVisible: Boolean, + dialogImageUrl: string | null, + imgLimit: number, + } + interface file { + url: string; + } + export default defineComponent({ + name: 'groundForm', + components: {}, + props:['departList','departList2','workerList','deviceList'], + setup(props: any, context: any) { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + const state = reactive<stateType>({ + equipmentDialog: false, + safetyMeasureBasicList: [], + form: { + workType: 4, + workLevel: 0, + applyDepId: null, + seDepId: null, + expStartTime: '', + expEndTime: '', + operatorUids: [], + headUids: [], + guardianUids: [], + workDepId: null, + workContent: '', + workLocation: '', + riskIdentification: '', + involveOtherWork: '', + safetyMeasureUids: [], + approvalDepBasicList: [], + acceptUid: null, + startOrEndUids: [], + cameraIds: [], + workDetail: { + gbDesc: '', + gbPath: [] + } + }, + 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 + } + ], + props:{ + expandTrigger: 'hover', + label: 'depName', + value: 'depId', + emitPath: false + }, + depProps:{ + expandTrigger: 'hover', + label: 'depName', + value: 'depId', + checkStrictly: true, + emitPath: false + }, + fileList: [], + imgLimit: 3, + uploadUrl: '', + dialogVisible: false, + dialogImageUrl: null, + }); + const ruleFormRef = ref<FormInstance>() + const applyRules = reactive<FormRules>({ + applyDepId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workLevel: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workContent: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workLocation: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + operatorUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workDepId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + headUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + involveOtherWork: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + guardianUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + riskIdentification: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + cameraIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + expStartTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + expEndTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + safetyMeasureUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + acceptUid: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + startOrEndUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.gbDesc": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.gbPath": [{ required: true, message: '该内容不能为空', trigger: 'blur' }] + }); + + // 页面载入时执行方法 + onMounted(() => { + }); + + const findParent = ()=>{ + state.form.seDepId = findNearestDepLevel2DepId(props.departList2,state.form.applyDepId) + console.log(state.form.seDepId,'state.form.seDepId') + } + + // 获取基础数据 + const getBasicData = async ()=>{ + const res = await workApplyApi().getFormData(4) + if (res.data.code === '200') { + state.safetyMeasureBasicList = JSON.parse(JSON.stringify(res.data.data.safetyMeasureBasicList)) + if(res.data.data.approvalDepBasicList && res.data.data.approvalDepBasicList.length>0){ + state.form.approvalDepBasicList = res.data.data.approvalDepBasicList.map(({id,content})=>({ + content, + approvalDepBasicId: id, + approvalUids: [], + approvalType: null + })) + }else{ + state.form.approvalDepBasicList = [] + } + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + + const getStartEndIds = ()=>{ + state.form.startOrEndUids = state.form.headUids + state.form.approvalDepBasicList[0].approvalUids = state.form.headUids + } + + const getSafetyIds = ()=>{ + state.form.safetyMeasureUids = state.form.guardianUids + } + + const isFirstRow = (index)=> { + return index === 0; + } + + const submitForm = async (formEl: FormInstance | undefined) => { + if (!formEl) return + await formEl.validate(async (valid, fields) => { + if (valid) { + for(let i of state.form.approvalDepBasicList){ + if(i.approvalUids.length == 0){ + ElMessage({ + type: 'warning', + message: '部分审批人未配置' + }); + return + } + } + if(Array.isArray(state.form.involveOtherWork)){ + state.form.involveOtherWork = state.form.involveOtherWork.join(',') + } + state.form.workDetail.gbPath = state.form.workDetail.gbPath.join(',') + const res = await workApplyApi().submitGroundApply(state.form) + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '提交成功!' + }); + formEl.resetFields() + getBasicData() + state.form.workDetail.gbPath = [] + state.fileList = [] + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + state.form.involveOtherWork = state.form.involveOtherWork.split(',') + state.form.workDetail.gbPath = state.form.workDetail.gbPath.split(',') + } + } else { + console.log('error submit!', fields) + } + }) + } + + const findNearestDepLevel2DepId = (data, targetDepId) => { + let nearestDepId = null; + + const traverseTree = (node) => { + if (node.depId === targetDepId) { + return true; + } + + if (node.children && node.children.length > 0) { + for (const child of node.children) { + const found = traverseTree(child); + if (found) { + if (child.depLevel === 2) { + nearestDepId = child.depId; + } + return true; + } + } + } + + return false; + }; + + for (const root of data) { + traverseTree(root); + } + + return nearestDepId; + }; + + const handlePreview: UploadProps['onPreview'] = (uploadFile) => { + console.log(uploadFile); + }; + + const handlePictureCardPreview = (uploadFile: { url: string }) => { + state.dialogImageUrl = uploadFile.url!; + state.dialogVisible = true; + }; + + const getUploadUrl = async (rawFile: any) => { + const fileSize = rawFile.size / 1024 / 1024 < 5 ? '1' : '0' + if(fileSize === '0'){ + ElMessage({ + type: 'warning', + message: '文件大小不能超过5M。' + }); + return false + }else{ + const res = await workApplyApi().getUpload9Url(rawFile.name); + state.form.workDetail.gbPath.push(res.data.data.fileName) + state.uploadUrl = res.data.data.uploadUrl; + } + }; + + const upload = async (params: any) => { + let reader = new FileReader(); + reader.readAsArrayBuffer(params.file); + reader.onload = async () => { + axios + .put(state.uploadUrl, reader.result, { + header: { 'Content-Type': 'multipart/form-data' } + }) + .then(() => { + // if (state.fileList.length === 2) { + // state.fileList.splice(0, 1); + // } + console.log(state.form.workDetail.gbPath,'gbpath') + }); + }; + }; + + const beforeRemove = (file: {}, fileList: []) => { + const result = new Promise((resolve, reject) => { + ElMessageBox.confirm('此操作将删除该图片, 是否继续?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }) + .then(() => { + // console.log(state.workDetail.gbPath,'path') + const list = JSON.parse(JSON.stringify(state.form.workDetail.gbPath)) + fileList.map((item,index)=>{ + if(item.uid === file.uid){ + fileList.splice(index,1) + state.form.workDetail.gbPath.splice(index,1) + // 请求删除接口 + deletePic(false,list[index]) + } + }) + console.log(state.form.workDetail.gbPath,'gbpath') + }) + .catch(() => { + reject(false); + }); + }); + return result; + }; + + // 删除图片接口 + const deletePic = async(fileName:string)=>{ + const res = await workApplyApi().deleteFile({fileName: fileName}) + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '删除成功!' + }); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + } + + const showTip =()=>{ + ElMessage({ + type: 'warning', + message: '超出文件上传数量' + }); + } + + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId',value) + userInfos.value.projectId = value + await initBackEndControlRoutes(); + }; + return { + renderMenu, + getBasicData, + getStartEndIds, + getSafetyIds, + isFirstRow, + submitForm, + findParent, + handlePreview, + getUploadUrl, + upload, + showTip, + handlePictureCardPreview, + beforeRemove, + Search, + ruleFormRef, + applyRules, + ...toRefs(state), + }; + }, + }); +</script> + +<style scoped lang="scss"> + .home-container { + width: 100%; + height: 100vh; + overflow: hidden; + position: relative; + overflow-y: scroll; + padding: 0 0 120px; + .homeCard{ + width: 100%; + padding: 20px; + box-sizing: border-box; + background: #fff; + border-radius: 4px; + margin-bottom: 20px; + } + .applyBtn{ + position: fixed; + left: 0; + bottom: 0; + z-index: 999; + width: 100%; + background: #fff; + padding: 20px 0; + 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/components/height.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/height.vue new file mode 100644 index 0000000..eb3e76d --- /dev/null +++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/height.vue @@ -0,0 +1,592 @@ +<template> + <div class="home-container"> + <el-form :model="form" label-width="180px" :rules="applyRules" ref="ruleFormRef"> + <div class="homeCard"> + <el-row> + <el-col :span="12"> + <el-form-item label="作业申请单位" prop="applyDepId"> + <el-cascader style="width: 100%" v-model="form.applyDepId" :options="departList2" :props="props" :show-all-levels="false" placeholder="明确到具体车间" @change="findParent" clearable/> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="高处作业级别" prop="workLevel"> + <el-select v-model="form.workLevel" clearable> + <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.workLocation" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入作业地点" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="作业高度(m)" prop="workDetail.hight"> + <el-input + v-model="form.workDetail.hight" + placeholder="请输入作业高度" + type="number" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="作业人及证件编号" prop="operatorUids"> + <el-select v-model="form.operatorUids" multiple clearable> + <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="workDepId"> + <el-cascader style="width: 100%" v-model="form.workDepId" :props="depProps" :options="departList" :show-all-levels="false"/> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="作业负责人" prop="headUids"> + <el-select v-model="form.headUids" multiple @change="getStartEndIds" clearable> + <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="guardianUids"> + <el-select v-model="form.guardianUids" multiple @change="getSafetyIds" clearable> + <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="involveOtherWork"> + <el-select v-model="form.involveOtherWork" multiple clearable> + <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="cameraIds"> + <el-select v-model="form.cameraIds" multiple clearable> + <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="expStartTime"> + <el-date-picker + v-model="form.expStartTime" + format="YYYY-MM-DD HH:mm" + value-format="YYYY-MM-DD HH:mm:00" + type="datetime" + style="width: 100%" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="预计(整体)完成时间" prop="expEndTime"> + <el-date-picker + v-model="form.expEndTime" + format="YYYY-MM-DD HH:mm" + value-format="YYYY-MM-DD HH:mm:00" + type="datetime" + style="width: 100%" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="风险辨识" prop="riskIdentification"> + <el-input + v-model="form.riskIdentification" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入风险辨识" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="备注" prop="remark"> + <el-input + v-model="form.remark" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入作业备注" + /> + </el-form-item> + </el-col> + </el-row> + <el-row style="display: flex;justify-content: center"> + <el-table :data="safetyMeasureBasicList" style="width: 90%" border> + <el-table-column type="index" label="序号" width="100px" align="center"/> + <el-table-column prop="measureContent" label="安全措施" align="center"/> + </el-table> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="安全措施确认人" prop="safetyMeasureUids"> + <el-select v-model="form.safetyMeasureUids" multiple clearable> + <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 style="display: flex;justify-content: center"> + <el-table :data="form.approvalDepBasicList" style="width: 90%" border> + <el-table-column prop="content" label="审批签字项目" align="center"/> + <el-table-column prop="approvalType" label="是否必签" align="center"> + <template #default="scope"> + <el-form-item label="" prop="acceptUid"> + <el-radio-group v-model="scope.row.approvalType"> + <el-radio :label="0">所有必签</el-radio> + <el-radio :label="1">任一</el-radio> + <el-radio :label="2">非必签</el-radio> + </el-radio-group> + </el-form-item> + </template> + </el-table-column> + <el-table-column prop="approvalUids" label="审批人" align="center"> + <template #default="scope"> + <el-select v-model="scope.row.approvalUids" multiple :disabled="isFirstRow(scope.$index)" clearable> + <el-option + v-for="item in workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> + </template> + </el-table-column> + </el-table> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="完工验收" prop="acceptUid"> + <el-select v-model="form.acceptUid" clearable> + <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="startOrEndUids"> + <el-select v-model="form.startOrEndUids" multiple clearable> + <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> + </div> + </el-form> + <div class="applyBtn"> + <el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)">提交申报</el-button> + </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, Edit } 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, + props:{}, + depProps:{}, + safetyMeasureBasicList: [] + } + export default defineComponent({ + name: 'heightForm', + components: {}, + props:['departList','departList2','workerList','deviceList'], + setup(props: any, context: any) { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + const state = reactive<stateType>({ + equipmentDialog: false, + safetyMeasureBasicList: [], + form: { + workType: 6, + workLevel: null, + applyDepId: null, + seDepId: null, + expStartTime: '', + expEndTime: '', + operatorUids: [], + headUids: [], + guardianUids: [], + workDepId: null, + workContent: '', + workLocation: '', + riskIdentification: '', + involveOtherWork: '', + safetyMeasureUids: [], + approvalDepBasicList: [], + acceptUid: null, + startOrEndUids: [], + cameraIds: [], + workDetail: { + hight: '' + } + }, + workLevelList: [ + { + label: "一级高处作业", + value: 4 + }, + { + label: "二级高处作业", + value: 5 + }, + { + label: "三级高处作业", + value: 6 + }, + { + label: "特级高处作业", + value: 7 + } + ], + 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 + } + ], + props:{ + expandTrigger: 'hover', + label: 'depName', + value: 'depId', + emitPath: false + }, + depProps:{ + expandTrigger: 'hover', + label: 'depName', + value: 'depId', + checkStrictly: true, + emitPath: false + } + }); + const ruleFormRef = ref<FormInstance>() + const applyRules = reactive<FormRules>({ + applyDepId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workLevel: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workContent: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workLocation: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + operatorUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workDepId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + headUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + involveOtherWork: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + guardianUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + riskIdentification: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + cameraIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + expStartTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + expEndTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + safetyMeasureUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + acceptUid: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + startOrEndUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.hight": [{ required: true, message: '该内容不能为空', trigger: 'blur' }] + }); + + // 页面载入时执行方法 + onMounted(() => { + + }); + + const findParent = ()=>{ + state.form.seDepId = findNearestDepLevel2DepId(props.departList2,state.form.applyDepId) + } + + // 获取基础数据 + const getBasicData = async ()=>{ + const res = await workApplyApi().getFormData(6) + if (res.data.code === '200') { + state.safetyMeasureBasicList = JSON.parse(JSON.stringify(res.data.data.safetyMeasureBasicList)) + if(res.data.data.approvalDepBasicList && res.data.data.approvalDepBasicList.length>0){ + state.form.approvalDepBasicList = res.data.data.approvalDepBasicList.map(({id,content})=>({ + content, + approvalDepBasicId: id, + approvalUids: [], + approvalType: null + })) + }else{ + state.form.approvalDepBasicList = [] + } + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + + const getStartEndIds = ()=>{ + state.form.startOrEndUids = state.form.headUids + state.form.approvalDepBasicList[0].approvalUids = state.form.headUids + } + + const getSafetyIds = ()=>{ + state.form.safetyMeasureUids = state.form.guardianUids + } + + const isFirstRow = (index)=> { + return index === 0; + } + + const submitForm = async (formEl: FormInstance | undefined) => { + if (!formEl) return + await formEl.validate(async (valid, fields) => { + if (valid) { + for(let i of state.form.approvalDepBasicList){ + if(i.approvalUids.length == 0){ + ElMessage({ + type: 'warning', + message: '部分审批人未配置' + }); + return + } + } + if(Array.isArray(state.form.involveOtherWork)){ + state.form.involveOtherWork = state.form.involveOtherWork.join(',') + } + const res = await workApplyApi().submitHeightApply(state.form) + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '提交成功!' + }); + formEl.resetFields() + getBasicData() + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + state.form.involveOtherWork = state.form.involveOtherWork.split(',') + } + } else { + console.log('error submit!', fields) + } + }) + } + + const findNearestDepLevel2DepId = (data, targetDepId) => { + let nearestDepId = null; + + const traverseTree = (node) => { + if (node.depId === targetDepId) { + return true; + } + + if (node.children && node.children.length > 0) { + for (const child of node.children) { + const found = traverseTree(child); + if (found) { + if (child.depLevel === 2) { + nearestDepId = child.depId; + } + return true; + } + } + } + + return false; + }; + + for (const root of data) { + traverseTree(root); + } + + return nearestDepId; + }; + + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId',value) + userInfos.value.projectId = value + await initBackEndControlRoutes(); + }; + return { + renderMenu, + getBasicData, + getStartEndIds, + getSafetyIds, + isFirstRow, + submitForm, + findParent, + Search, + ruleFormRef, + applyRules, + ...toRefs(state), + }; + }, + }); +</script> + +<style scoped lang="scss"> + .home-container { + width: 100%; + height: 100vh; + overflow: hidden; + position: relative; + overflow-y: scroll; + padding: 0 0 120px; + .homeCard{ + width: 100%; + padding: 20px; + box-sizing: border-box; + background: #fff; + border-radius: 4px; + margin-bottom: 20px; + } + .applyBtn{ + position: fixed; + left: 0; + bottom: 0; + z-index: 999; + width: 100%; + background: #fff; + padding: 20px 0; + 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/components/hoist.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/hoist.vue new file mode 100644 index 0000000..bf9c233 --- /dev/null +++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/hoist.vue @@ -0,0 +1,662 @@ +<template> + <div class="home-container"> + <el-form :model="form" label-width="180px" :rules="applyRules" ref="ruleFormRef"> + <div class="homeCard"> + <el-row> + <el-col :span="12"> + <el-form-item label="作业申请单位" prop="applyDepId"> + <el-cascader style="width: 100%" v-model="form.applyDepId" :options="departList2" :props="props" :show-all-levels="false" placeholder="明确到具体车间" @change="findParent" clearable/> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="吊装级别" prop="workLevel"> + <el-select v-model="form.workLevel" clearable> + <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="吊物重量(t)" prop="workDetail.weightMass"> + <el-input + v-model="form.workDetail.weightMass" + placeholder="请输入吊物重量" + type="number" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="吊具名称" prop="workDetail.hoistingToolName"> + <el-input + v-model="form.workDetail.hoistingToolName" + placeholder="请输入吊具名称" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="吊装地点" prop="workLocation"> + <el-input + v-model="form.workLocation" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入作业地点" + /> + </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="operatorUids"> + <el-select v-model="form.operatorUids" multiple clearable> + <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="workDepId"> + <el-cascader style="width: 100%" v-model="form.workDepId" :props="depProps" :options="departList" :show-all-levels="false"/> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="指挥人员" prop="headUids"> + <el-select v-model="form.headUids" multiple @change="getStartEndIds" clearable> + <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.solicitorUids"> + <el-select v-model="form.workDetail.solicitorUids" multiple clearable> + <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="involveOtherWork"> + <el-select v-model="form.involveOtherWork" multiple clearable> + <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="guardianUids"> + <el-select v-model="form.guardianUids" multiple @change="getSafetyIds" clearable> + <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 clearable> + <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="expStartTime">--> +<!-- <el-date-picker--> +<!-- v-model="form.expStartTime"--> +<!-- 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="expStartTime"> + <el-date-picker + v-model="form.expStartTime" + format="YYYY-MM-DD HH:mm" + value-format="YYYY-MM-DD HH:mm:00" + type="datetime" + style="width: 100%" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="预计(整体)完成时间" prop="expEndTime"> + <el-date-picker + v-model="form.expEndTime" + format="YYYY-MM-DD HH:mm" + value-format="YYYY-MM-DD HH:mm:00" + type="datetime" + style="width: 100%" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="风险辨识" prop="riskIdentification"> + <el-input + v-model="form.riskIdentification" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入风险辨识" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="备注" prop="remark"> + <el-input + v-model="form.remark" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入作业备注" + /> + </el-form-item> + </el-col> + </el-row> + <el-row style="display: flex;justify-content: center"> + <el-table :data="safetyMeasureBasicList" style="width: 90%" border> + <el-table-column type="index" label="序号" width="100px" align="center"/> + <el-table-column prop="measureContent" label="安全措施" align="center"/> +<!-- <el-table-column prop="address" label="确认人">--> +<!-- <template #default="scope">--> + +<!-- </template>--> +<!-- </el-table-column>--> +<!-- <el-table-column prop="address" label="操作">--> +<!-- <template #default="scope">--> +<!-- <el-button link type="primary" size="small" :icon="Edit">修改确认人</el-button>--> +<!-- </template>--> +<!-- </el-table-column>--> + </el-table> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="安全措施确认人" prop="safetyMeasureUids"> + <el-select v-model="form.safetyMeasureUids" multiple clearable> + <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="其他安全措施">--> +<!-- <el-input--> +<!-- v-model="form.workContent"--> +<!-- :autosize="{ minRows: 2 }"--> +<!-- type="textarea"--> +<!-- placeholder="请输入其他安全措施"--> +<!-- />--> +<!-- </el-form-item>--> +<!-- </el-col>--> +<!-- <el-col :span="12">--> +<!-- <el-form-item label="编制人">--> +<!-- <el-input--> +<!-- v-model="form.workContent"--> +<!-- placeholder="请输入编制人"--> +<!-- />--> +<!-- </el-form-item>--> +<!-- </el-col>--> +<!-- </el-row>--> + <el-row style="display: flex;justify-content: center"> + <el-table :data="form.approvalDepBasicList" style="width: 90%" border> + <el-table-column prop="content" label="审批签字项目" align="center"/> + <el-table-column prop="approvalType" label="是否必签" align="center"> + <template #default="scope"> + <el-form-item label="" prop="acceptUid"> + <el-radio-group v-model="scope.row.approvalType"> + <el-radio :label="0">所有必签</el-radio> + <el-radio :label="1">任一</el-radio> + <el-radio :label="2">非必签</el-radio> + </el-radio-group> + </el-form-item> + </template> + </el-table-column> + <el-table-column prop="approvalUids" label="审批人" align="center"> + <template #default="scope"> + <el-select v-model="scope.row.approvalUids" multiple :disabled="isFirstRow(scope.$index)" clearable> + <el-option + v-for="item in workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> + </template> + </el-table-column> + </el-table> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="完工验收" prop="acceptUid"> + <el-select v-model="form.acceptUid" clearable> + <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="startOrEndUids"> + <el-select v-model="form.startOrEndUids" multiple clearable> + <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> + </div> + </el-form> + <div class="applyBtn"> + <el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)">提交申报</el-button> + </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, Edit } 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, + props:{}, + depProps:{}, + safetyMeasureBasicList: [] + } + export default defineComponent({ + name: 'hoistForm', + components: {}, + props:['departList','departList2','workerList','deviceList'], + setup(props: any, context: any) { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + const state = reactive<stateType>({ + equipmentDialog: false, + safetyMeasureBasicList: [], + form: { + workType: 3, + workLevel: null, + applyDepId: null, + seDepId: null, + expStartTime: '', + expEndTime: '', + operatorUids: [], + headUids: [], + analystUids: [], + guardianUids: [], + workDepId: null, + workContent: '', + workLocation: '', + riskIdentification: '', + involveOtherWork: '', + safetyMeasureUids: [], + approvalDepBasicList: [], + acceptUid: null, + startOrEndUids: [], + cameraIds: [], + workDetail: { + hoistingToolName: '', + weightMass: '', + solicitorUids: [] + } + }, + workLevelList: [ + { + label: "一级吊装作业", + value: 8 + }, + { + label: "二级吊装作业", + value: 9 + }, + { + label: "三级吊装作业", + value: 10 + } + ], + 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 + } + ], + props:{ + expandTrigger: 'hover', + label: 'depName', + value: 'depId', + emitPath: false + }, + depProps:{ + expandTrigger: 'hover', + label: 'depName', + value: 'depId', + checkStrictly: true, + emitPath: false + } + }); + const ruleFormRef = ref<FormInstance>() + const applyRules = reactive<FormRules>({ + applyDepId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workLevel: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workContent: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workLocation: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + operatorUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workDepId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + headUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + analystUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + involveOtherWork: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + guardianUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + riskIdentification: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + cameraIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + expStartTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + expEndTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + safetyMeasureUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + acceptUid: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + startOrEndUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.hoistingToolName": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.weightMass": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.solicitorUids": [{ required: true, message: '该内容不能为空', trigger: 'blur' }] + }); + + // 页面载入时执行方法 + onMounted(() => { + + }); + + const findParent = ()=>{ + state.form.seDepId = findNearestDepLevel2DepId(props.departList2,state.form.applyDepId) + console.log(state.form.seDepId,'state.form.seDepId') + } + + // 获取基础数据 + const getBasicData = async ()=>{ + const res = await workApplyApi().getFormData(3) + if (res.data.code === '200') { + state.safetyMeasureBasicList = JSON.parse(JSON.stringify(res.data.data.safetyMeasureBasicList)) + if(res.data.data.approvalDepBasicList && res.data.data.approvalDepBasicList.length>0){ + state.form.approvalDepBasicList = res.data.data.approvalDepBasicList.map(({id,content})=>({ + content, + approvalDepBasicId: id, + approvalUids: [], + approvalType: null + })) + }else{ + state.form.approvalDepBasicList = [] + } + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + + const getStartEndIds = ()=>{ + state.form.startOrEndUids = state.form.headUids + state.form.approvalDepBasicList[0].approvalUids = state.form.headUids + } + + const getSafetyIds = ()=>{ + state.form.safetyMeasureUids = state.form.guardianUids + } + + const isFirstRow = (index)=> { + return index === 0; + } + + const submitForm = async (formEl: FormInstance | undefined) => { + if (!formEl) return + await formEl.validate(async (valid, fields) => { + if (valid) { + for(let i of state.form.approvalDepBasicList){ + if(i.approvalUids.length == 0){ + ElMessage({ + type: 'warning', + message: '部分审批人未配置' + }); + return + } + } + if(Array.isArray(state.form.involveOtherWork)){ + state.form.involveOtherWork = state.form.involveOtherWork.join(',') + } + state.form.workDetail.solicitorUids = state.form.workDetail.solicitorUids.join(',') + const res = await workApplyApi().submitHoistApply(state.form) + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '提交成功!' + }); + formEl.resetFields() + getBasicData() + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + state.form.involveOtherWork = state.form.involveOtherWork.split(',') + state.form.workDetail.solicitorUids = state.form.workDetail.solicitorUids.split(',') + } + } else { + console.log('error submit!', fields) + } + }) + } + + const findNearestDepLevel2DepId = (data, targetDepId) => { + let nearestDepId = null; + + const traverseTree = (node) => { + if (node.depId === targetDepId) { + return true; + } + + if (node.children && node.children.length > 0) { + for (const child of node.children) { + const found = traverseTree(child); + if (found) { + if (child.depLevel === 2) { + nearestDepId = child.depId; + } + return true; + } + } + } + + return false; + }; + + for (const root of data) { + traverseTree(root); + } + + return nearestDepId; + }; + + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId',value) + userInfos.value.projectId = value + await initBackEndControlRoutes(); + }; + return { + renderMenu, + getBasicData, + getStartEndIds, + getSafetyIds, + isFirstRow, + submitForm, + findParent, + Search, + ruleFormRef, + applyRules, + ...toRefs(state), + }; + }, + }); +</script> + +<style scoped lang="scss"> + .home-container { + width: 100%; + height: 100vh; + overflow: hidden; + position: relative; + overflow-y: scroll; + padding: 0 0 120px; + .homeCard{ + width: 100%; + padding: 20px; + box-sizing: border-box; + background: #fff; + border-radius: 4px; + margin-bottom: 20px; + } + .applyBtn{ + position: fixed; + left: 0; + bottom: 0; + z-index: 999; + width: 100%; + background: #fff; + padding: 20px 0; + 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/components/plate.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/plate.vue new file mode 100644 index 0000000..4dddf76 --- /dev/null +++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/plate.vue @@ -0,0 +1,827 @@ +<template> + <div class="home-container"> + <el-form :model="form" label-width="180px" :rules="applyRules" ref="ruleFormRef"> + <div class="homeCard"> + <el-row> + <el-col :span="12"> + <el-form-item label="作业申请单位" prop="applyDepId"> + <el-cascader style="width: 100%" v-model="form.applyDepId" :options="departList2" :props="props" :show-all-levels="false" placeholder="明确到具体车间" @change="findParent" clearable/> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="作业类别" prop="workLevel"> + <el-select v-model="form.workLevel" clearable> + <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.workLocation" + :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.pipingName"> + <el-input + v-model="form.workDetail.pipingName" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入设备管道名称" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="管道介质" prop="workDetail.media"> + <el-input + v-model="form.workDetail.media" + :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.temperature"> + <el-input + v-model="form.workDetail.temperature" + type="number" + placeholder="请输入管道温度" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="管道压力(kPa)" prop="workDetail.pressure"> + <el-input + v-model="form.workDetail.pressure" + type="number" + placeholder="请输入管道压力" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="盲板材质" prop="workDetail.bpMaterialQuality"> + <el-input + v-model="form.workDetail.bpMaterialQuality" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入盲板材质" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="盲板规格" prop="workDetail.bpSpecification"> + <el-input + v-model="form.workDetail.bpSpecification" + :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.bpCode"> + <el-input + v-model="form.workDetail.bpCode" + :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.bpLocationDesc"> + <el-input + v-model="form.workDetail.bpLocationDesc" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入盲板位置相关描述并在右方上传位置图" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="盲板位置示意图" prop="workDetail.bpLocationMapPath"> + <el-upload accept="image/*" :auto-upload="true" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='imgLimit' v-model:file-list="fileList" :http-request="upload" :action="uploadUrl" list-type="picture-card" :on-remove="handleRemove" :before-remove="beforeRemove" :before-upload="getUploadUrl"> + <el-icon><Plus /></el-icon> + <template #tip> + <div class="el-upload__tip">上传jpg/png图片尺寸小于5M,最多可上传3张</div> + </template> + </el-upload> + </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 clearable> + <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="involveOtherWork"> + <el-select v-model="form.involveOtherWork" multiple clearable> + <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="workDepId"> + <el-cascader style="width: 100%" v-model="form.workDepId" :props="depProps" :options="departList" :show-all-levels="false"/> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="作业负责人" prop="headUids"> + <el-select v-model="form.headUids" multiple @change="getStartEndIds" clearable> + <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="guardianUids"> + <el-select v-model="form.guardianUids" multiple @change="getSafetyIds" clearable> + <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 clearable> + <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="expStartTime"> + <el-date-picker + v-model="form.expStartTime" + format="YYYY-MM-DD HH:mm" + value-format="YYYY-MM-DD HH:mm:00" + type="datetime" + style="width: 100%" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="预计(整体)完成时间" prop="expEndTime"> + <el-date-picker + v-model="form.expEndTime" + format="YYYY-MM-DD HH:mm" + value-format="YYYY-MM-DD HH:mm:00" + type="datetime" + style="width: 100%" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="编制人姓名" prop="workDetail.preparedByName"> + <el-input + v-model="form.workDetail.preparedByName" + placeholder="请输入编制人姓名" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="编制时间" prop="workDetail.preparedTime"> + <el-date-picker + v-model="form.workDetail.preparedTime" + format="YYYY-MM-DD HH:mm" + value-format="YYYY-MM-DD HH:mm:00" + type="datetime" + style="width: 100%" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="风险辨识" prop="riskIdentification"> + <el-input + v-model="form.riskIdentification" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入风险辨识" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="备注" prop="remark"> + <el-input + v-model="form.remark" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入作业备注" + /> + </el-form-item> + </el-col> + </el-row> + <el-row style="display: flex;justify-content: center"> + <el-table :data="safetyMeasureBasicList" style="width: 90%" border> + <el-table-column type="index" label="序号" width="100px" align="center"/> + <el-table-column prop="measureContent" label="安全措施" align="center"/> + </el-table> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="安全措施确认人" prop="safetyMeasureUids"> + <el-select v-model="form.safetyMeasureUids" multiple clearable> + <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 style="display: flex;justify-content: center"> + <el-table :data="form.approvalDepBasicList" style="width: 90%" border> + <el-table-column prop="content" label="审批签字项目" align="center"/> + <el-table-column prop="approvalType" label="是否必签" align="center"> + <template #default="scope"> + <el-form-item label="" prop="acceptUid"> + <el-radio-group v-model="scope.row.approvalType"> + <el-radio :label="0">所有必签</el-radio> + <el-radio :label="1">任一</el-radio> + <el-radio :label="2">非必签</el-radio> + </el-radio-group> + </el-form-item> + </template> + </el-table-column> + <el-table-column prop="approvalUids" label="审批人" align="center"> + <template #default="scope"> + <el-select v-model="scope.row.approvalUids" multiple :disabled="isFirstRow(scope.$index)" clearable> + <el-option + v-for="item in workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> + </template> + </el-table-column> + </el-table> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="完工验收" prop="acceptUid"> + <el-select v-model="form.acceptUid" clearable> + <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="startOrEndUids"> + <el-select v-model="form.startOrEndUids" multiple clearable> + <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> + </div> + </el-form> + <div class="applyBtn"> + <el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)">提交申报</el-button> + </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, Edit } from '@element-plus/icons-vue' + import { ElMessage, ElMessageBox } from 'element-plus' + import type { FormInstance, FormRules } from 'element-plus' + import { workApplyApi } from '/@/api/specialWorkSystem/workApply'; + import {UploadProps} from "element-plus/es"; + import axios from "axios"; + interface stateType { + form: Object, + workLevelList: Array<any>, + otherWorkList: Array<any>, + equipmentDialog: boolean, + props:{}, + depProps:{}, + safetyMeasureBasicList: [], + fileList: Array<file>, + uploadUrl: string, + dialogVisible: Boolean, + dialogImageUrl: string | null, + imgLimit: number, + } + interface file { + url: string; + } + export default defineComponent({ + name: 'fireForm', + components: {}, + props:['departList','departList2','workerList','deviceList'], + setup(props: any, context: any) { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + const state = reactive<stateType>({ + equipmentDialog: false, + safetyMeasureBasicList: [], + form: { + workType: 8, + workLevel: null, + applyDepId: null, + seDepId: null, + expStartTime: '', + expEndTime: '', + operatorUids: [], + headUids: [], + guardianUids: [], + workDepId: null, + workContent: '', + workLocation: '', + riskIdentification: '', + involveOtherWork: '', + safetyMeasureUids: [], + approvalDepBasicList: [], + acceptUid: null, + startOrEndUids: [], + cameraIds: [], + workDetail: { + pipingName: '', + bpCode: '', + media: '', + temperature: null, + pressure: null, + bpMaterialQuality: '', + bpSpecification: '', + bpLocationMapPath: [], + bpLocationDesc: '', + preparedByName: '', + preparedTime: '' + } + }, + workLevelList: [ + { + label: "抽盲板作业", + value: 11 + }, + { + label: "堵盲板作业", + value: 12 + } + ], + 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 + } + ], + props:{ + expandTrigger: 'hover', + label: 'depName', + value: 'depId', + emitPath: false + }, + depProps:{ + expandTrigger: 'hover', + label: 'depName', + value: 'depId', + checkStrictly: true, + emitPath: false + }, + fileList: [], + imgLimit: 3, + uploadUrl: '', + dialogVisible: false, + dialogImageUrl: null + }); + const ruleFormRef = ref<FormInstance>() + const applyRules = reactive<FormRules>({ + applyDepId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workLevel: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workContent: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workLocation: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + operatorUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workDepId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + headUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + involveOtherWork: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + guardianUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + riskIdentification: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + cameraIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + expStartTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + expEndTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + safetyMeasureUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + acceptUid: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + startOrEndUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.pipingName": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.bpCode": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.media": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.temperature": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.pressure": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.bpMaterialQuality": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.bpSpecification": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.bpLocationMapPath": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.bpLocationDesc": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.preparedByName": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.preparedTime": [{ required: true, message: '该内容不能为空', trigger: 'blur' }] + }); + + // 页面载入时执行方法 + onMounted(() => { + + }); + + const findParent = ()=>{ + state.form.seDepId = findNearestDepLevel2DepId(props.departList2,state.form.applyDepId) + console.log(state.form.seDepId,'state.form.seDepId') + } + + // 获取基础数据 + const getBasicData = async ()=>{ + const res = await workApplyApi().getFormData(8) + if (res.data.code === '200') { + state.safetyMeasureBasicList = JSON.parse(JSON.stringify(res.data.data.safetyMeasureBasicList)) + if(res.data.data.approvalDepBasicList && res.data.data.approvalDepBasicList.length>0){ + state.form.approvalDepBasicList = res.data.data.approvalDepBasicList.map(({id,content})=>({ + content, + approvalDepBasicId: id, + approvalUids: [], + approvalType: null + })) + }else{ + state.form.approvalDepBasicList = [] + } + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + + const getStartEndIds = ()=>{ + state.form.startOrEndUids = state.form.headUids + state.form.approvalDepBasicList[0].approvalUids = state.form.headUids + } + + const getSafetyIds = ()=>{ + state.form.safetyMeasureUids = state.form.guardianUids + } + + const isFirstRow = (index)=> { + return index === 0; + } + + const submitForm = async (formEl: FormInstance | undefined) => { + if (!formEl) return + await formEl.validate(async (valid, fields) => { + if (valid) { + for(let i of state.form.approvalDepBasicList){ + if(i.approvalUids.length == 0){ + ElMessage({ + type: 'warning', + message: '部分审批人未配置' + }); + return + } + } + if(Array.isArray(state.form.involveOtherWork)){ + state.form.involveOtherWork = state.form.involveOtherWork.join(',') + } + state.form.workDetail.bpLocationMapPath = state.form.workDetail.bpLocationMapPath.join(',') + const res = await workApplyApi().submitPlateApply(state.form) + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '提交成功!' + }); + formEl.resetFields() + getBasicData() + state.form.workDetail.bpLocationMapPath = [] + state.fileList = [] + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + state.form.involveOtherWork = state.form.involveOtherWork.split(',') + state.form.workDetail.bpLocationMapPath = state.form.workDetail.bpLocationMapPath.split(',') + } + } else { + console.log('error submit!', fields) + } + }) + } + + const findNearestDepLevel2DepId = (data, targetDepId) => { + let nearestDepId = null; + + const traverseTree = (node) => { + if (node.depId === targetDepId) { + return true; + } + + if (node.children && node.children.length > 0) { + for (const child of node.children) { + const found = traverseTree(child); + if (found) { + if (child.depLevel === 2) { + nearestDepId = child.depId; + } + return true; + } + } + } + + return false; + }; + + for (const root of data) { + traverseTree(root); + } + + return nearestDepId; + }; + + const handlePreview: UploadProps['onPreview'] = (uploadFile) => { + console.log(uploadFile); + }; + + const handlePictureCardPreview = (uploadFile: { url: string }) => { + state.dialogImageUrl = uploadFile.url!; + state.dialogVisible = true; + }; + + const getUploadUrl = async (rawFile: any) => { + const fileSize = rawFile.size / 1024 / 1024 < 5 ? '1' : '0' + if(fileSize === '0'){ + ElMessage({ + type: 'warning', + message: '文件大小不能超过5M。' + }); + return false + }else{ + const res = await workApplyApi().getUpload9Url(rawFile.name); + state.form.workDetail.bpLocationMapPath.push(res.data.data.fileName) + state.uploadUrl = res.data.data.uploadUrl; + } + }; + + const upload = async (params: any) => { + let reader = new FileReader(); + reader.readAsArrayBuffer(params.file); + reader.onload = async () => { + axios + .put(state.uploadUrl, reader.result, { + header: { 'Content-Type': 'multipart/form-data' } + }) + .then(() => { + // if (state.fileList.length === 2) { + // state.fileList.splice(0, 1); + // } + }); + }; + }; + + const beforeRemove = (file: {}, fileList: []) => { + const result = new Promise((resolve, reject) => { + ElMessageBox.confirm('此操作将删除该图片, 是否继续?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning' + }) + .then(() => { + // console.log(state.workDetail.bpLocationMapPath,'path') + const list = JSON.parse(JSON.stringify(state.form.workDetail.bpLocationMapPath)) + fileList.map((item,index)=>{ + if(item.uid === file.uid){ + fileList.splice(index,1) + state.form.workDetail.bpLocationMapPath.splice(index,1) + // 请求删除接口 + deletePic(false,list[index]) + } + }) + }) + .catch(() => { + reject(false); + }); + }); + return result; + }; + + // 删除图片接口 + const deletePic = async(fileName:string)=>{ + const res = await workApplyApi().deleteFile({fileName: fileName}) + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '删除成功!' + }); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + } + + const showTip =()=>{ + ElMessage({ + type: 'warning', + message: '超出文件上传数量' + }); + } + + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId',value) + userInfos.value.projectId = value + await initBackEndControlRoutes(); + }; + return { + renderMenu, + getBasicData, + getStartEndIds, + getSafetyIds, + isFirstRow, + submitForm, + findParent, + handlePreview, + getUploadUrl, + upload, + showTip, + handlePictureCardPreview, + beforeRemove, + Search, + ruleFormRef, + applyRules, + ...toRefs(state), + }; + }, + }); +</script> + +<style scoped lang="scss"> + .home-container { + width: 100%; + height: 100vh; + overflow: hidden; + position: relative; + overflow-y: scroll; + padding: 0 0 120px; + .homeCard{ + width: 100%; + padding: 20px; + box-sizing: border-box; + background: #fff; + border-radius: 4px; + margin-bottom: 20px; + } + .applyBtn{ + position: fixed; + left: 0; + bottom: 0; + z-index: 999; + width: 100%; + background: #fff; + padding: 20px 0; + 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/components/power.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/power.vue new file mode 100644 index 0000000..5e3a2a4 --- /dev/null +++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/power.vue @@ -0,0 +1,663 @@ +<template> + <div class="home-container"> + <el-form :model="form" label-width="180px" :rules="applyRules" ref="ruleFormRef"> + <div class="homeCard"> + <el-row> + <el-col :span="12"> + <el-form-item label="作业申请单位" prop="applyDepId"> + <el-cascader style="width: 100%" v-model="form.applyDepId" :options="departList2" :props="props" :show-all-levels="false" placeholder="明确到具体车间" @change="findParent" clearable/> + </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.workLocation" + :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.powerAccessPoint"> + <el-input + v-model="form.workDetail.powerAccessPoint" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入电源接入点及许可用电功率" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="工作电压" prop="workDetail.workingVoltage"> + <el-input + v-model="form.workDetail.workingVoltage" + type="number" + placeholder="请输入工作电压" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="用电设备名称及额定功率" prop="workDetail.equipmentAndPower"> + <el-input + v-model="form.workDetail.equipmentAndPower" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入用电设备名称及额定功率" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="用电人" prop="workDetail.electricityUids"> + <el-select v-model="form.workDetail.electricityUids" multiple clearable> + <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 clearable> + <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="workDepId"> + <el-cascader style="width: 100%" v-model="form.workDepId" :props="depProps" :options="departList" :show-all-levels="false"/> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="作业负责人" prop="headUids"> + <el-select v-model="form.headUids" multiple @change="getStartEndIds" clearable> + <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="analystUids"> + <el-select v-model="form.analystUids" multiple clearable> + <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="involveOtherWork"> + <el-select v-model="form.involveOtherWork" multiple clearable> + <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="guardianUids"> + <el-select v-model="form.guardianUids" multiple @change="getSafetyIds" clearable> + <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 clearable> + <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="expStartTime">--> +<!-- <el-date-picker--> +<!-- v-model="form.expStartTime"--> +<!-- 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="expStartTime"> + <el-date-picker + v-model="form.expStartTime" + format="YYYY-MM-DD HH:mm" + value-format="YYYY-MM-DD HH:mm:00" + type="datetime" + style="width: 100%" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="预计(整体)完成时间" prop="expEndTime"> + <el-date-picker + v-model="form.expEndTime" + format="YYYY-MM-DD HH:mm" + value-format="YYYY-MM-DD HH:mm:00" + type="datetime" + style="width: 100%" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="风险辨识" prop="riskIdentification"> + <el-input + v-model="form.riskIdentification" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入风险辨识" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="备注" prop="remark"> + <el-input + v-model="form.remark" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入作业备注" + /> + </el-form-item> + </el-col> + </el-row> + <el-row style="display: flex;justify-content: center"> + <el-table :data="safetyMeasureBasicList" style="width: 90%" border> + <el-table-column type="index" label="序号" width="100px" align="center"/> + <el-table-column prop="measureContent" label="安全措施" align="center"/> +<!-- <el-table-column prop="address" label="确认人">--> +<!-- <template #default="scope">--> + +<!-- </template>--> +<!-- </el-table-column>--> +<!-- <el-table-column prop="address" label="操作">--> +<!-- <template #default="scope">--> +<!-- <el-button link type="primary" size="small" :icon="Edit">修改确认人</el-button>--> +<!-- </template>--> +<!-- </el-table-column>--> + </el-table> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="安全措施确认人" prop="safetyMeasureUids"> + <el-select v-model="form.safetyMeasureUids" multiple clearable> + <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="其他安全措施">--> +<!-- <el-input--> +<!-- v-model="form.workContent"--> +<!-- :autosize="{ minRows: 2 }"--> +<!-- type="textarea"--> +<!-- placeholder="请输入其他安全措施"--> +<!-- />--> +<!-- </el-form-item>--> +<!-- </el-col>--> +<!-- <el-col :span="12">--> +<!-- <el-form-item label="编制人">--> +<!-- <el-input--> +<!-- v-model="form.workContent"--> +<!-- placeholder="请输入编制人"--> +<!-- />--> +<!-- </el-form-item>--> +<!-- </el-col>--> +<!-- </el-row>--> + <el-row style="display: flex;justify-content: center"> + <el-table :data="form.approvalDepBasicList" style="width: 90%" border> + <el-table-column prop="content" label="审批签字项目" align="center"/> + <el-table-column prop="approvalType" label="是否必签" align="center"> + <template #default="scope"> + <el-form-item label="" prop="acceptUid"> + <el-radio-group v-model="scope.row.approvalType"> + <el-radio :label="0">所有必签</el-radio> + <el-radio :label="1">任一</el-radio> + <el-radio :label="2">非必签</el-radio> + </el-radio-group> + </el-form-item> + </template> + </el-table-column> + <el-table-column prop="approvalUids" label="审批人" align="center"> + <template #default="scope"> + <el-select v-model="scope.row.approvalUids" multiple :disabled="isFirstRow(scope.$index)" clearable> + <el-option + v-for="item in workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> + </template> + </el-table-column> + </el-table> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="完工验收" prop="acceptUid"> + <el-select v-model="form.acceptUid" clearable> + <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="startOrEndUids"> + <el-select v-model="form.startOrEndUids" multiple clearable> + <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> + </div> + </el-form> + <div class="applyBtn"> + <el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)">提交申报</el-button> + </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, Edit } 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, + otherWorkList: Array<any>, + equipmentDialog: boolean, + props:{}, + depProps:{}, + safetyMeasureBasicList: [] + } + export default defineComponent({ + name: 'powerForm', + components: {}, + props:['departList','departList2','workerList','deviceList'], + setup(props: any, context: any) { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + const state = reactive<stateType>({ + equipmentDialog: false, + safetyMeasureBasicList: [], + form: { + workType: 7, + workLevel: 0, + applyDepId: null, + seDepId: null, + expStartTime: '', + expEndTime: '', + operatorUids: [], + headUids: [], + analystUids: [], + guardianUids: [], + workDepId: null, + workContent: '', + workLocation: '', + riskIdentification: '', + involveOtherWork: '', + safetyMeasureUids: [], + approvalDepBasicList: [], + acceptUid: null, + startOrEndUids: [], + cameraIds: [], + workDetail: { + powerAccessPoint: '', + workingVoltage: '', + equipmentAndPower: '', + electricityUids: [] + } + }, + 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 + } + ], + props:{ + expandTrigger: 'hover', + label: 'depName', + value: 'depId', + emitPath: false + }, + depProps:{ + expandTrigger: 'hover', + label: 'depName', + value: 'depId', + checkStrictly: true, + emitPath: false + } + }); + const ruleFormRef = ref<FormInstance>() + const applyRules = reactive<FormRules>({ + applyDepId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workLevel: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workContent: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workLocation: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + operatorUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workDepId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + headUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + analystUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + involveOtherWork: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + guardianUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + riskIdentification: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + cameraIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + expStartTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + expEndTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + safetyMeasureUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + acceptUid: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + startOrEndUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.powerAccessPoint": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.workingVoltage": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.equipmentAndPower": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.electricityUids": [{ required: true, message: '该内容不能为空', trigger: 'blur' }] + }); + + // 页面载入时执行方法 + onMounted(() => { + + }); + + const findParent = ()=>{ + state.form.seDepId = findNearestDepLevel2DepId(props.departList2,state.form.applyDepId) + console.log(state.form.seDepId,'state.form.seDepId') + } + + // 获取基础数据 + const getBasicData = async ()=>{ + const res = await workApplyApi().getFormData(7) + if (res.data.code === '200') { + state.safetyMeasureBasicList = JSON.parse(JSON.stringify(res.data.data.safetyMeasureBasicList)) + if(res.data.data.approvalDepBasicList && res.data.data.approvalDepBasicList.length>0){ + state.form.approvalDepBasicList = res.data.data.approvalDepBasicList.map(({id,content})=>({ + content, + approvalDepBasicId: id, + approvalUids: [], + approvalType: null + })) + }else{ + state.form.approvalDepBasicList = [] + } + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + + const getStartEndIds = ()=>{ + state.form.startOrEndUids = state.form.headUids + state.form.approvalDepBasicList[0].approvalUids = state.form.headUids + } + + const getSafetyIds = ()=>{ + state.form.safetyMeasureUids = state.form.guardianUids + } + + const isFirstRow = (index)=> { + return index === 0; + } + + const submitForm = async (formEl: FormInstance | undefined) => { + if (!formEl) return + await formEl.validate(async (valid, fields) => { + if (valid) { + for(let i of state.form.approvalDepBasicList){ + if(i.approvalUids.length == 0){ + ElMessage({ + type: 'warning', + message: '部分审批人未配置' + }); + return + } + } + if(Array.isArray(state.form.involveOtherWork)){ + state.form.involveOtherWork = state.form.involveOtherWork.join(',') + } + state.form.workDetail.electricityUids = state.form.workDetail.electricityUids.join(',') + const res = await workApplyApi().submitPowerApply(state.form) + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '提交成功!' + }); + formEl.resetFields() + getBasicData() + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + state.form.involveOtherWork = state.form.involveOtherWork.split(',') + state.form.workDetail.electricityUids = state.form.workDetail.electricityUids.split(',') + } + } else { + console.log('error submit!', fields) + } + }) + } + + const findNearestDepLevel2DepId = (data, targetDepId) => { + let nearestDepId = null; + + const traverseTree = (node) => { + if (node.depId === targetDepId) { + return true; + } + + if (node.children && node.children.length > 0) { + for (const child of node.children) { + const found = traverseTree(child); + if (found) { + if (child.depLevel === 2) { + nearestDepId = child.depId; + } + return true; + } + } + } + + return false; + }; + + for (const root of data) { + traverseTree(root); + } + + return nearestDepId; + }; + + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId',value) + userInfos.value.projectId = value + await initBackEndControlRoutes(); + }; + return { + renderMenu, + getBasicData, + getStartEndIds, + getSafetyIds, + isFirstRow, + submitForm, + findParent, + Search, + ruleFormRef, + applyRules, + ...toRefs(state), + }; + }, + }); +</script> + +<style scoped lang="scss"> + .home-container { + width: 100%; + height: 100vh; + overflow: hidden; + position: relative; + overflow-y: scroll; + padding: 0 0 120px; + .homeCard{ + width: 100%; + padding: 20px; + box-sizing: border-box; + background: #fff; + border-radius: 4px; + margin-bottom: 20px; + } + .applyBtn{ + position: fixed; + left: 0; + bottom: 0; + z-index: 999; + width: 100%; + background: #fff; + padding: 20px 0; + 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/components/space.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/space.vue new file mode 100644 index 0000000..7f0331c --- /dev/null +++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/space.vue @@ -0,0 +1,602 @@ +<template> + <div class="home-container"> + <el-form :model="form" label-width="180px" :rules="applyRules" ref="ruleFormRef"> + <div class="homeCard"> + <el-row> + <el-col :span="12"> + <el-form-item label="作业申请单位" prop="applyDepId"> + <el-cascader style="width: 100%" v-model="form.applyDepId" :options="departList2" :props="props" :show-all-levels="false" placeholder="明确到具体车间" @change="findParent" clearable/> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="受限空间名称" prop="workDetail.csName"> + <el-input + v-model="form.workDetail.csName" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入受限空间名称" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="原有介质名称" prop="workDetail.csOriginalName"> + <el-input + v-model="form.workDetail.csOriginalName" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入受限空间原有介质名称" + /> + </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="operatorUids"> + <el-select v-model="form.operatorUids" multiple clearable> + <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="workLocation"> + <el-input + v-model="form.workLocation" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入作业地点" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="作业单位" prop="workDepId"> + <el-cascader style="width: 100%" v-model="form.workDepId" :props="depProps" :options="departList" :show-all-levels="false"/> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="作业负责人" prop="headUids"> + <el-select v-model="form.headUids" multiple @change="getStartEndIds" clearable> + <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="analystUids"> + <el-select v-model="form.analystUids" multiple clearable> + <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="involveOtherWork"> + <el-select v-model="form.involveOtherWork" multiple clearable> + <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="guardianUids"> + <el-select v-model="form.guardianUids" multiple @change="getSafetyIds" clearable> + <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 clearable> + <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="expStartTime">--> +<!-- <el-date-picker--> +<!-- v-model="form.expStartTime"--> +<!-- 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="expStartTime"> + <el-date-picker + v-model="form.expStartTime" + format="YYYY-MM-DD HH:mm" + value-format="YYYY-MM-DD HH:mm:00" + type="datetime" + style="width: 100%" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="预计(整体)完成时间" prop="expEndTime"> + <el-date-picker + v-model="form.expEndTime" + format="YYYY-MM-DD HH:mm" + value-format="YYYY-MM-DD HH:mm:00" + type="datetime" + style="width: 100%" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="风险辨识" prop="riskIdentification"> + <el-input + v-model="form.riskIdentification" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入风险辨识" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item label="备注" prop="remark"> + <el-input + v-model="form.remark" + :autosize="{ minRows: 1 }" + type="textarea" + placeholder="请输入作业备注" + /> + </el-form-item> + </el-col> + </el-row> + <el-row style="display: flex;justify-content: center"> + <el-table :data="safetyMeasureBasicList" style="width: 90%" border> + <el-table-column type="index" label="序号" width="100px" align="center"/> + <el-table-column prop="measureContent" label="安全措施" align="center"/> + </el-table> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="安全措施确认人" prop="safetyMeasureUids"> + <el-select v-model="form.safetyMeasureUids" multiple clearable> + <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 style="display: flex;justify-content: center"> + <el-table :data="form.approvalDepBasicList" style="width: 90%" border> + <el-table-column prop="content" label="审批签字项目" align="center"/> + <el-table-column prop="approvalType" label="是否必签" align="center"> + <template #default="scope"> + <el-form-item label="" prop="acceptUid"> + <el-radio-group v-model="scope.row.approvalType"> + <el-radio :label="0">所有必签</el-radio> + <el-radio :label="1">任一</el-radio> + <el-radio :label="2">非必签</el-radio> + </el-radio-group> + </el-form-item> + </template> + </el-table-column> + <el-table-column prop="approvalUids" label="审批人" align="center"> + <template #default="scope"> + <el-select v-model="scope.row.approvalUids" multiple :disabled="isFirstRow(scope.$index)" clearable> + <el-option + v-for="item in workerList" + :key="item.uid" + :label="item.username" + :value="item.uid" + /> + </el-select> + </template> + </el-table-column> + </el-table> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item label="完工验收" prop="acceptUid"> + <el-select v-model="form.acceptUid" clearable> + <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="startOrEndUids"> + <el-select v-model="form.startOrEndUids" multiple clearable> + <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> + </div> + </el-form> + <div class="applyBtn"> + <el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)">提交申报</el-button> + </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, Edit } 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, + otherWorkList: Array<any>, + equipmentDialog: boolean, + props:{}, + depProps:{}, + safetyMeasureBasicList: [] + } + export default defineComponent({ + name: 'spaceForm', + components: {}, + props:['departList','departList2','workerList','deviceList'], + setup(props: any, context: any) { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); + const state = reactive<stateType>({ + equipmentDialog: false, + safetyMeasureBasicList: [], + form: { + workType: 2, + workLevel: 0, + applyDepId: null, + seDepId: null, + expStartTime: '', + expEndTime: '', + operatorUids: [], + headUids: [], + analystUids: [], + guardianUids: [], + workDepId: null, + workContent: '', + workLocation: '', + riskIdentification: '', + involveOtherWork: '', + safetyMeasureUids: [], + approvalDepBasicList: [], + acceptUid: null, + startOrEndUids: [], + cameraIds: [], + workDetail: { + csName: '', + csOriginalName: '' + } + }, + 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 + } + ], + props:{ + expandTrigger: 'hover', + label: 'depName', + value: 'depId', + emitPath: false + }, + depProps:{ + expandTrigger: 'hover', + label: 'depName', + value: 'depId', + checkStrictly: true, + emitPath: false + } + }); + const ruleFormRef = ref<FormInstance>() + const applyRules = reactive<FormRules>({ + applyDepId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workLevel: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workContent: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workLocation: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + operatorUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + workDepId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + headUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + analystUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + involveOtherWork: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + guardianUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + riskIdentification: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + cameraIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + expStartTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + expEndTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + safetyMeasureUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + acceptUid: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + startOrEndUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.csName": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + "workDetail.csOriginalName": [{ required: true, message: '该内容不能为空', trigger: 'blur' }] + }); + + // 页面载入时执行方法 + onMounted(() => { + }); + + const findParent = ()=>{ + state.form.seDepId = findNearestDepLevel2DepId(props.departList2,state.form.applyDepId) + } + + // 获取基础数据 + const getBasicData = async ()=>{ + const res = await workApplyApi().getFormData(2) + if (res.data.code === '200') { + state.safetyMeasureBasicList = JSON.parse(JSON.stringify(res.data.data.safetyMeasureBasicList)) + if(res.data.data.approvalDepBasicList && res.data.data.approvalDepBasicList.length>0){ + state.form.approvalDepBasicList = res.data.data.approvalDepBasicList.map(({id,content})=>({ + content, + approvalDepBasicId: id, + approvalUids: [], + approvalType: null + })) + }else{ + state.form.approvalDepBasicList = [] + } + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; + + const getStartEndIds = ()=>{ + state.form.startOrEndUids = state.form.headUids + state.form.approvalDepBasicList[0].approvalUids = state.form.headUids + } + + const getSafetyIds = ()=>{ + state.form.safetyMeasureUids = state.form.guardianUids + } + + const isFirstRow = (index)=> { + return index === 0; + } + + const submitForm = async (formEl: FormInstance | undefined) => { + if (!formEl) return + await formEl.validate(async (valid, fields) => { + if (valid) { + for(let i of state.form.approvalDepBasicList){ + if(i.approvalUids.length == 0){ + ElMessage({ + type: 'warning', + message: '部分审批人未配置' + }); + return + } + } + if(Array.isArray(state.form.involveOtherWork)){ + state.form.involveOtherWork = state.form.involveOtherWork.join(',') + } + const res = await workApplyApi().submitSpaceApply(state.form) + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '提交成功!' + }); + formEl.resetFields() + getBasicData() + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + state.form.involveOtherWork = state.form.involveOtherWork.split(',') + } + } else { + console.log('error submit!', fields) + } + }) + } + + const findNearestDepLevel2DepId = (data, targetDepId) => { + let nearestDepId = null; + + const traverseTree = (node) => { + if (node.depId === targetDepId) { + return true; + } + + if (node.children && node.children.length > 0) { + for (const child of node.children) { + const found = traverseTree(child); + if (found) { + if (child.depLevel === 2) { + nearestDepId = child.depId; + } + return true; + } + } + } + + return false; + }; + + for (const root of data) { + traverseTree(root); + } + + return nearestDepId; + }; + + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId',value) + userInfos.value.projectId = value + await initBackEndControlRoutes(); + }; + return { + renderMenu, + getBasicData, + getStartEndIds, + getSafetyIds, + isFirstRow, + submitForm, + findParent, + Search, + ruleFormRef, + applyRules, + ...toRefs(state), + }; + }, + }); +</script> + +<style scoped lang="scss"> + .home-container { + width: 100%; + height: 100vh; + overflow: hidden; + position: relative; + overflow-y: scroll; + padding: 0 0 120px; + .homeCard{ + width: 100%; + padding: 20px; + box-sizing: border-box; + background: #fff; + border-radius: 4px; + margin-bottom: 20px; + } + .applyBtn{ + position: fixed; + left: 0; + bottom: 0; + z-index: 999; + width: 100%; + background: #fff; + padding: 20px 0; + 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 index d271403..2b44843 100644 --- a/src/views/newSpecialWorkSystem/workTicket/zysq/index.vue +++ b/src/views/newSpecialWorkSystem/workTicket/zysq/index.vue @@ -1,29 +1,29 @@ <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-tabs type="border-card" @tab-change="switchTab" v-model="activeName" @tab-click="handleClick"> + <el-tab-pane label="动火作业" name="fire"> + <fire-form ref="fire" :workerList = allWorkers :deviceList = allDevices :departList=departmentList :departList2=departmentList2></fire-form> </el-tab-pane> - <el-tab-pane label="受限空间作业"> -<!-- <space-form ref="space" :workerList = allWorkers :departList = departmentList :deviceList = allDevices></space-form>--> + <el-tab-pane label="受限空间作业" name="space"> + <space-form ref="space" :workerList = allWorkers :departList = departmentList :departList2=departmentList2 :deviceList = allDevices></space-form> </el-tab-pane> - <el-tab-pane label="吊装作业"> -<!-- <hoist-form ref="hoist" :workerList = allWorkers :deviceList = allDevices></hoist-form>--> + <el-tab-pane label="吊装作业" name="hoist"> + <hoist-form ref="hoist" :workerList = allWorkers :departList = departmentList :departList2=departmentList2 :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 label="动土作业" name="ground"> + <ground-form ref="ground" :workerList = allWorkers :departList = departmentList :departList2=departmentList2 :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 label="断路作业" name="broken"> + <broken-form ref="broken" :workerList = allWorkers :departList = departmentList :departList2=departmentList2 :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 label="高处作业" name="height"> + <height-form ref="height" :workerList = allWorkers :departList = departmentList :departList2=departmentList2 :deviceList = allDevices></height-form> </el-tab-pane> - <el-tab-pane label="临时用电作业"> -<!-- <power-form ref="power" :workerList = allWorkers :deviceList = allDevices></power-form>--> + <el-tab-pane label="临时用电作业" name="power"> + <power-form ref="power" :workerList = allWorkers :departList = departmentList :departList2=departmentList2 :deviceList = allDevices></power-form> </el-tab-pane> - <el-tab-pane label="盲板抽堵作业"> -<!-- <plate-form ref="plate" :workerList = allWorkers :deviceList = allDevices></plate-form>--> + <el-tab-pane label="盲板抽堵作业" name="plate"> + <plate-form ref="plate" :workerList = allWorkers :departList = departmentList :departList2=departmentList2 :deviceList = allDevices></plate-form> </el-tab-pane> </el-tabs> <!-- <material-dialog ref="material"></material-dialog>--> @@ -38,33 +38,37 @@ 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 type { FormInstance, FormRules, TabsPaneContext } from 'element-plus' import { workApplyApi } from '/@/api/specialWorkSystem/workApply'; import {teamManageApi} from "/@/api/systemManage/basicDateManage/personShiftManage/teamManage"; interface stateType { + activeName: string allWorkers: Array<any> departmentList: Array<any> + departmentList2: 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')), + 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>({ + activeName: 'fire', allWorkers: [], departmentList: [], + departmentList2:[], allDevices: [] }); const fire = ref() @@ -75,7 +79,17 @@ const height = ref() const power = ref() const plate = ref() - const material = ref() + + const handleClick = (tab: TabsPaneContext, event: Event) => { + if(tab.index == 0){fire.value.getBasicData()} + if(tab.index == 1){space.value.getBasicData()} + if(tab.index == 2){hoist.value.getBasicData()} + if(tab.index == 3){ground.value.getBasicData()} + if(tab.index == 4){broken.value.getBasicData()} + if(tab.index == 5){height.value.getBasicData()} + if(tab.index == 6){power.value.getBasicData()} + if(tab.index == 7){plate.value.getBasicData()} + } // 获取用户列表 const getAll = async ()=>{ const res = await workApplyApi().getAllUsers() @@ -94,6 +108,7 @@ let res = await teamManageApi().getAllDepartment(); if (res.data.code === '200') { state.departmentList = JSON.parse(JSON.stringify(res.data.data)) + state.departmentList2 = state.departmentList[0].children } else { ElMessage({ type: 'warning', @@ -116,10 +131,14 @@ }; const switchTab = (name)=>{ - console.log(name,'name') - fire.value.form.resetFields() - material.value.maBaseId = null - material.value.receiveUids = [] + // if(name == 'fire'){fire.value.getBasicData()} + // if(name == 'space'){space.value.getBasicData()} + // if(name == 'hoist'){hoist.value.getBasicData()} + // if(name == 'ground'){ground.value.getBasicData()} + // if(name == 'broken'){broken.value.getBasicData()} + // if(name == 'height'){height.value.getBasicData()} + // if(name == 'power'){power.value.getBasicData()} + // if(name == 'plate'){plate.value.getBasicData()} } @@ -140,8 +159,8 @@ hoist, plate, power, - material, - switchTab + switchTab, + handleClick }; }, }); diff --git a/src/views/specialWorkSystem/specialIndex/index.vue b/src/views/specialWorkSystem/specialIndex/index.vue index c76b6ca..b7dd2da 100644 --- a/src/views/specialWorkSystem/specialIndex/index.vue +++ b/src/views/specialWorkSystem/specialIndex/index.vue @@ -1498,6 +1498,7 @@ .container{ padding: 20px; background: url('../../../assets/spwbg.png') no-repeat center; + background-size: 100% 100%; .full{ position:fixed; -- Gitblit v1.9.2