From 83bbceeca584500a9902ce1677a3337990d9157a Mon Sep 17 00:00:00 2001
From: 马宇豪 <978517621@qq.com>
Date: Fri, 26 May 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