From 77737f4e73f7267170b9b06fc73d1610c29c0661 Mon Sep 17 00:00:00 2001
From: 马宇豪 <978517621@qq.com>
Date: 星期二, 12 十一月 2024 13:18:35 +0800
Subject: [PATCH] 新增

---
 src/views/newSpecialWorkSystem/workTicket/wdsq/components/brokenDialog.vue    |  203 +
 src/views/newSpecialWorkSystem/workTicket/zysq/index.vue                      |   48 
 src/views/dataUpload/contractorManage/projectInfo/components/addReport.vue    |  323 +++
 src/views/newSpecialWorkSystem/workTicket/wdsq/components/detailLog.vue       |    5 
 src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue            |  101 
 src/views/newHome/index.vue                                                   |    3 
 src/views/newSpecialWorkSystem/workTicket/wdsq/components/fireDialog.vue      |  184 +
 src/api/dataUpload/contractorManage/index.ts                                  |   63 
 src/views/specialWorkSystem/specialIndex/index.vue                            |  499 ++--
 src/views/newSpecialWorkSystem/workTicket/wdsq/components/groundDialog.vue    |  198 +
 src/views/newSpecialWorkSystem/workTicket/wdsq/components/hoistDialog.vue     |  187 +
 src/views/newSpecialWorkSystem/workTicket/zysq/components/hoist.vue           |   89 
 src/views/specialWorkSystem/specialIndex/components/videoDetail.vue           |    9 
 src/views/dataUpload/contractorManage/keyUserInfo/index.vue                   |  257 ++
 src/views/newSpecialWorkSystem/workTicket/wdsq/components/openDialog.vue      |  228 +
 src/api/specialWorkSystem/workApply/index.ts                                  |   77 
 src/views/loginPage/component/accountLogin.vue                                |    5 
 src/router/index.ts                                                           |    5 
 src/layout/navBars/breadcrumb/user.vue                                        |    5 
 src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue                      |   58 
 src/views/newSpecialWorkSystem/workTicket/wdsq/components/jsaReportDialog.vue |   15 
 src/views/newSpecialWorkSystem/workTicket/sqjl/index.vue                      |  228 ++
 src/views/newSpecialWorkSystem/workTicket/zysq/components/broken.vue          |   89 
 src/views/newSpecialWorkSystem/workTicket/zysq/components/height.vue          |   89 
 src/views/specialWorkSystem/process/zyjcgl/index.vue                          |    4 
 src/views/newSpecialWorkSystem/workTicket/zysq/components/open.vue            |   69 
 src/views/newSpecialWorkSystem/workTicket/wdsq/components/heightDialog.vue    |  189 +
 src/views/newSpecialWorkSystem/workTicket/wdsq/components/spaceDialog.vue     |  191 +
 src/views/dataUpload/contractorManage/userCertInfo/components/addReport.vue   |  290 +++
 src/views/newSpecialWorkSystem/workTicket/wdsq/components/powerDialog.vue     |  195 +
 src/views/newSpecialWorkSystem/workTicket/wdsq/components/plateDialog.vue     |  195 +
 src/views/dataUpload/contractorManage/keyUserInfo/components/addReport.vue    |  188 ++
 src/views/dataUpload/contractorManage/userCertInfo/index.vue                  |  256 ++
 src/views/newSpecialWorkSystem/workTicket/zysq/components/plate.vue           |   89 
 src/views/newSpecialWorkSystem/workTicket/sbtj/index.vue                      |    4 
 src/views/newSpecialWorkSystem/workTicket/zysq/components/space.vue           |   89 
 src/views/dataUpload/contractorManage/projectInfo/index.vue                   |  234 ++
 src/views/newSpecialWorkSystem/workTicket/zysq/components/power.vue           |   89 
 src/views/specialWorkSystem/specialIndex/components/workRecord.vue            |   14 
 src/views/newSpecialWorkSystem/workTicket/zysq/components/workSelect.vue      |   41 
 src/api/specialWorkSystem/specialIndex/index.ts                               |    2 
 src/views/newSpecialWorkSystem/workTicket/zysq/components/ground.vue          |  131 
 42 files changed, 4,146 insertions(+), 1,092 deletions(-)

diff --git a/src/api/dataUpload/contractorManage/index.ts b/src/api/dataUpload/contractorManage/index.ts
index 62ce95e..83b2fdf 100644
--- a/src/api/dataUpload/contractorManage/index.ts
+++ b/src/api/dataUpload/contractorManage/index.ts
@@ -64,6 +64,69 @@
                 method: 'post',
                 data: data
             });
+        },
+        getProjectInfoList: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/report/assemble/contractor/project/list`,
+                method: 'post',
+                data: data
+            });
+        },
+        addProjectInfo: (data: Array<any>) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/report/assemble/contractor/project`,
+                method: 'post',
+                data: data
+            });
+        },
+        delProjectInfo: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/report/assemble/contractor/project/del`,
+                method: 'post',
+                data: data
+            });
+        },
+        getKeyUserInfoList: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/report/assemble/contractor/key/personnel/list`,
+                method: 'post',
+                data: data
+            });
+        },
+        addKeyUserInfo: (data: Array<any>) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/report/assemble/contractor/key/personnel`,
+                method: 'post',
+                data: data
+            });
+        },
+        delKeyUserInfo: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/report/assemble/contractor/key/personnel/del`,
+                method: 'post',
+                data: data
+            });
+        },
+        getUserCertInfoList: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/report/assemble/contractor/key/personnel/cert/list`,
+                method: 'post',
+                data: data
+            });
+        },
+        addUserCertInfo: (data: Array<any>) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/report/assemble/contractor/key/personnel/cert`,
+                method: 'post',
+                data: data
+            });
+        },
+        delUserCertInfo: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/report/assemble/contractor/key/personnel/cert/del`,
+                method: 'post',
+                data: data
+            });
         }
     };
 }
diff --git a/src/api/specialWorkSystem/specialIndex/index.ts b/src/api/specialWorkSystem/specialIndex/index.ts
index b40b8fd..5b71079 100644
--- a/src/api/specialWorkSystem/specialIndex/index.ts
+++ b/src/api/specialWorkSystem/specialIndex/index.ts
@@ -4,7 +4,7 @@
     return {
         analyseType: (data: object) => {
             return request({
-                url: import.meta.env.VITE_API_URL + `/specialWork/analyse/everyType/dep`,
+                url: import.meta.env.VITE_API_URL + `/specialwork9step/statistic/everyType/dep`,
                 method: 'post',
                 data: data
             });
diff --git a/src/api/specialWorkSystem/workApply/index.ts b/src/api/specialWorkSystem/workApply/index.ts
index c00e5e5..932d1ee 100644
--- a/src/api/specialWorkSystem/workApply/index.ts
+++ b/src/api/specialWorkSystem/workApply/index.ts
@@ -200,7 +200,74 @@
                 data: data
             });
         },
-        
+
+        renewalHot: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/specialwork9step/work/renewal/hot`,
+                method: 'post',
+                data: data
+            });
+        },
+        renewalConfinedspace: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/specialwork9step/work/renewal/confinedspace`,
+                method: 'post',
+                data: data
+            });
+        },
+
+        renewalHoisting: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/specialwork9step/work/renewal/hoisting`,
+                method: 'post',
+                data: data
+            });
+        },
+
+        renewalGroundBreaking: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/specialwork9step/work/renewal/groundBreaking`,
+                method: 'post',
+                data: data
+            });
+        },
+        renewalBrokenCircuit: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/specialwork9step/work/renewal/brokenCircuit`,
+                method: 'post',
+                data: data
+            });
+        },
+        renewalHight: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/specialwork9step/work/renewal/hight`,
+                method: 'post',
+                data: data
+            });
+        },
+
+        renewalTemporaryPower: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/specialwork9step/work/renewal/temporaryPower`,
+                method: 'post',
+                data: data
+            });
+        },
+        renewalBlindPlatePlugging: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/specialwork9step/work/renewal/blindPlatePlugging`,
+                method: 'post',
+                data: data
+            });
+        },
+        renewalOpenJob: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/specialwork9step/work/renewal/openJob`,
+                method: 'post',
+                data: data
+            });
+        },
+
         // 所有记录列表
         getApplyList: (data: object) => {
             return request({
@@ -265,6 +332,14 @@
             });
         },
 
+        // 查询特殊作业人员
+        getOpList: () => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/account/special/operator/list`,
+                method: 'get'
+            });
+        },
+
         // 受限空间申请
         postSpaceApply: (data: object) => {
             return request({
diff --git a/src/layout/navBars/breadcrumb/user.vue b/src/layout/navBars/breadcrumb/user.vue
index 1f01e1c..9c7cc17 100644
--- a/src/layout/navBars/breadcrumb/user.vue
+++ b/src/layout/navBars/breadcrumb/user.vue
@@ -346,7 +346,11 @@
             if (!Cookies.get('token')) return false;
             const res = await menuApi.getMenuAdmin(Cookies.get('projectId') === null ? '' : Cookies.get('projectId'));
             if (res.data.code === '200') {
+              if(res.data.data && res.data.data[0]){
                 state.systemName = res.data.data[0].project.projectName;
+              }else{
+                state.systemName = ''
+              }
             } else {
                 console.log('有问题');
             }
@@ -354,7 +358,6 @@
         const backToMenu = () => {
             router.push({ path: 'newMenu' }).then(()=>{
                 routeList.routesList.value = []
-                console.log(routeList);
             });
         };
         // const toHome = () => {
diff --git a/src/router/index.ts b/src/router/index.ts
index c562cd5..5971416 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -83,7 +83,10 @@
         } else if (token && to.path === '/newMenu') {
             next();
             NProgress.done();
-        } else {
+        } else if (token && (to.path === '/warningScreen' || to.path === '/screenPage')) {
+            next();
+            NProgress.done();
+        }else {
             const storesRoutesList = useRoutesList(pinia);
             const { routesList } = storeToRefs(storesRoutesList);
             if (routesList.value.length === 0) {
diff --git a/src/views/dataUpload/contractorManage/keyUserInfo/components/addReport.vue b/src/views/dataUpload/contractorManage/keyUserInfo/components/addReport.vue
new file mode 100644
index 0000000..5d9d9c7
--- /dev/null
+++ b/src/views/dataUpload/contractorManage/keyUserInfo/components/addReport.vue
@@ -0,0 +1,188 @@
+<template>
+  <div class="system-add-user-container">
+    <el-dialog :title="title" v-model="isShowDialog" width="50%">
+      <el-form :model="form" size="default" ref="formRef" :rules="rules" label-width="120px">
+        <el-row :gutter="35">
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="人员" prop="userId">
+              <el-select v-model="form.userId" filterable placeholder="请选择人员" clearable>
+                <el-option v-for="(item,index) in userList" :key="index" :label="item.userName" :value="item.uuid"/>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="人员类型" prop="userType">
+              <el-select v-model="form.userType" filterable placeholder="请选择类型" clearable>
+                <el-option v-for="(item,index) in userTypeList" :key="index" :label="item.name" :value="item.value"/>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="承包商" prop="contractorId">
+              <el-select v-model="form.contractorId" filterable placeholder="请选择承包商" clearable>
+                <el-option v-for="(item,index) in contractorList" :key="index" :label="item.contractorName" :value="item.uuid"/>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="title == '新增上报'? false : true">
+            <el-form-item label="删除状态" prop="deleted">
+              <el-radio-group v-model="form.deleted">
+                <el-radio label="0">未删除</el-radio>
+                <el-radio label="1">已删除</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <template #footer>
+        <span class="dialog-footer">
+            <el-button @click="isShowDialog = !isShowDialog" size="default">取 消</el-button>
+            <el-button type="primary" v-throttle @click="onSubmit" size="default">确 定</el-button>
+        </span>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script lang="ts">
+import { reactive, toRefs, onMounted, defineComponent, ref } from 'vue';
+import {ElMessageBox, ElMessage, FormRules, FormInstance} from 'element-plus';
+import axios from "axios";
+import {contractorApi} from "/@/api/dataUpload/contractorManage";
+import Cookies from "js-cookie";
+
+// 定义接口来定义对象的类型
+interface DataState {
+  title: string
+  isShowDialog: boolean
+  form: {
+    uuid: string
+    userType: null | number
+    userId: string
+    contractorId: string
+    deleted: string
+  }
+  rules:{}
+  contractorList: []
+  userList: []
+  userTypeList: Array<any>
+}
+
+export default defineComponent({
+  name: 'reportDialog',
+  props: ['types'],
+  setup(props, context) {
+    const formRef = ref()
+    const addFormRef = ref()
+    const state = reactive<DataState>({
+      title: '',
+      isShowDialog: false,
+      form: {
+        uuid: '',
+        userType: null,
+        userId: '',
+        contractorId: '',
+        deleted: '0'
+      },
+      rules:{
+        userType: [{ required: true, message: '请选择人员类型', trigger: 'blur' }],
+        userId: [{ required: true, message: '请选择人员', trigger: 'blur' }],
+        contractorId: [{ required: true, message: '请选择承包商', trigger: 'blur' }]
+      },
+      contractorList: [],
+      userList: [],
+      userTypeList: props.types
+    })
+
+    // 页面加载时
+    onMounted(() => {
+
+    })
+    // 打开弹窗
+    const open = (type: string, data: object) => {
+      state.isShowDialog = true;
+      getDataList()
+      getUserList()
+      if (type === 'add') {
+        state.title = '新增上报';
+        state.form = {
+          uuid: '',
+          userType: null,
+          userId: '',
+          contractorId: '',
+          deleted: '0'
+        }
+      }else{
+        state.title = '重新上报';
+        state.form = {
+          uuid: data.uuid,
+          userType: data.userType,
+          contractorId: data.contractorId,
+          userId: data.userId,
+          deleted: '0'
+        }
+      }
+    };
+
+    const getDataList = async ()=>{
+      const res = await contractorApi().getContractorList({searchParams: {}, pageIndex: 1, pageSize: 999})
+      if(res.data.code == 200){
+        state.contractorList = res.data.data
+      }else{
+        ElMessage({
+          type: 'warning',
+          message: res.data.msg
+        })
+      }
+    }
+
+    const getUserList = async ()=>{
+      const res = await contractorApi().getContractorUserList({searchParams: {}, pageIndex: 1, pageSize: 999})
+      if(res.data.code == 200){
+        state.userList = res.data.data
+      }else{
+        ElMessage({
+          type: 'warning',
+          message: res.data.msg
+        })
+      }
+    }
+
+    // 新增修改
+    const onSubmit = async () => {
+      formRef.value.validate(async (valid:Boolean) => {
+        if(valid){
+          const res = await contractorApi().addKeyUserInfo([state.form])
+          if(res.data.code == 200){
+            ElMessage({
+              type:'success',
+              message:'数据上报成功'
+            })
+            state.isShowDialog = false
+          }else{
+            ElMessage({
+              type:'warning',
+              message:res.data.msg
+            })
+          }
+          context.emit('refresh');
+        }else{
+          ElMessage({
+            type:'warning',
+            message:'请完善基本信息'
+          })
+        }
+      })
+    }
+
+
+    return {
+      formRef,
+      addFormRef,
+      open,
+      onSubmit,
+      ...toRefs(state)
+    };
+  }
+});
+</script>
diff --git a/src/views/dataUpload/contractorManage/keyUserInfo/index.vue b/src/views/dataUpload/contractorManage/keyUserInfo/index.vue
new file mode 100644
index 0000000..2b20207
--- /dev/null
+++ b/src/views/dataUpload/contractorManage/keyUserInfo/index.vue
@@ -0,0 +1,257 @@
+<template>
+    <div class="home-container">
+        <div style="height: 100%">
+          <div class="homeCard">
+            <div class="main-card">
+            <el-row class="cardTop">
+              <el-col :span="12" class="mainCardBtn">
+                <el-button type="primary" icon="Plus" size="default" @click="openDialog('add',{})">新增</el-button>
+              </el-col>
+            </el-row>
+            <el-table :data="reportData" style="width: 100%" height="calc(100% - 48px)" :header-cell-style="{ background: '#fafafa' }">
+              <el-table-column prop="id" label="id" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="contractorId" label="承包商id" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="userName" label="人员名称" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="userType" label="人员类型" show-overflow-tooltip>
+                <template #default="scope">
+                  {{userTypeList.find(i=>i.value == scope.row.userType)?.name}}
+                </template>
+              </el-table-column>
+              <el-table-column prop="createDate" label="创建时间" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="updateDate" label="修改时间" show-overflow-tooltip></el-table-column>
+              <el-table-column label="操作" width="140">
+                  <template #default="scope">
+                    <el-button size="small" text type="primary" @click="openDialog('update',scope.row)">重新上报</el-button>
+                    <el-button style="color: red" size="small" text type="primary" @click="onRowDel(scope.row)">删除</el-button>
+                  </template>
+              </el-table-column>
+            </el-table>
+            <div class="pageBtn">
+              <el-pagination @size-change="onHandleSizeChange" small="false" @current-change="onHandleCurrentChange" class="page-position" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="listQuery.pageIndex" background v-model:page-size="listQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination>
+            </div>
+            </div>
+          </div>
+        </div>
+        <add-report ref="reportRef" :types="userTypeList" @refresh="getData"></add-report>
+    </div>
+</template>
+
+<script lang="ts">
+import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue'
+import { ElMessageBox, ElMessage } from 'element-plus'
+import { Plus } from '@element-plus/icons-vue'
+import addReport from "./components/addReport.vue"
+import {contractorApi} from "/@/api/dataUpload/contractorManage";
+import Cookies from "js-cookie";
+import axios from "axios";
+interface TableDataState {
+  reportData: [],
+  listQuery: {
+    pageIndex: number
+    pageSize: number
+  }
+  total: null | number
+  userList: []
+  userTypeList: Array<any>
+}
+
+export default defineComponent({
+    name: 'projectInfo',
+    components: {addReport },
+    setup() {
+      const reportRef= ref();
+      const state = reactive<TableDataState>({
+        reportData: [],
+        listQuery: {
+          pageIndex: 1,
+          pageSize: 10
+        },
+        total: null,
+        userList: [],
+        userTypeList: [
+          {
+            name: '主要负责人',
+            value: 1
+          },
+          {
+            name: '安全管理人员',
+            value: 2
+          },
+          {
+            name: '特殊作业人员',
+            value: 3
+          }
+        ]
+      });
+
+      // 页面加载时
+      onMounted(async() => {
+        await getData()
+        await getUserList()
+      });
+
+      const getData = async ()=>{
+        const res = await contractorApi().getKeyUserInfoList(state.listQuery)
+        if(res.data.code == 200){
+          state.reportData = res.data.data
+          state.total = res.data.total
+        }else{
+          ElMessage({
+            type: 'warning',
+            message: res.data.msg
+          })
+        }
+      }
+
+      const openDialog=(type:string,data:object)=>{
+        reportRef.value.open(type,data)
+      }
+
+      const getUserList = async ()=>{
+        const res = await contractorApi().getContractorUserList({searchParams: {}, pageIndex: 1, pageSize: 999})
+        if(res.data.code == 200){
+          state.userList = res.data.data
+        }else{
+          ElMessage({
+            type: 'warning',
+            message: res.data.msg
+          })
+        }
+      }
+
+      // 删除用户
+      const onRowDel = (row: Object) => {
+          ElMessageBox.confirm(`此操作将永久删除该记录,是否继续?`, '提示', {
+              confirmButtonText: '确认',
+              cancelButtonText: '取消',
+              type: 'warning'
+          })
+              .then(async () => {
+                const res = await contractorApi().delKeyUserInfo({ids: [row.id]})
+                if(res.data.code == 200){
+                  ElMessage({
+                    type: 'success',
+                    message: '删除成功'
+                  })
+                  await getData()
+                }else{
+                  ElMessage({
+                    type: 'warning',
+                    message: res.data.msg
+                  })
+                }
+              })
+              .catch(() => {});
+      };
+      // 分页改变
+      const onHandleSizeChange = (val: number) => {
+          state.listQuery.pageSize = val;
+          getData()
+      };
+      // 分页改变
+      const onHandleCurrentChange = (val: number) => {
+          state.listQuery.pageIndex = val;
+          getData()
+      };
+
+      const viewPdf=(item: Object)=>{
+        console.log(item.filePath,555)
+        window.open(item.filePath)
+      }
+
+      return {
+        reportRef,
+        openDialog,
+        getData,
+        viewPdf,
+        onRowDel,
+        onHandleSizeChange,
+        onHandleCurrentChange,
+        ...toRefs(state)
+      };
+    }
+});
+</script>
+<style lang="scss" scoped>
+.home-container {
+  height: calc(100vh - 144px);
+  box-sizing: border-box;
+  overflow: hidden;
+  .demo-tabs {
+    width: 100%;
+    height: 100%;
+
+    &::v-deep(.el-tabs__content) {
+      height: calc(100% - 60px);
+    }
+
+    .el-tab-pane {
+      height: 100%;
+    }
+  }
+  .homeCard {
+    width: 100%;
+    padding: 20px;
+    box-sizing: border-box;
+    background: #fff;
+    border-radius: 4px;
+
+    .main-card {
+      width: 100%;
+      height: 100%;
+      .cardTop {
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        margin-bottom: 20px;
+        .mainCardBtn {
+          margin: 0;
+        }
+      }
+      .pageBtn {
+        height: 60px;
+        display: flex;
+        align-items: center;
+        justify-content: right;
+
+        .demo-pagination-block + .demo-pagination-block {
+          margin-top: 10px;
+        }
+        .demo-pagination-block .demonstration {
+          margin-bottom: 16px;
+        }
+      }
+    }
+    &:last-of-type {
+      height: calc(100% - 100px);
+    }
+  }
+  .el-row {
+    display: flex;
+    align-items: center;
+    margin-bottom: 20px;
+    &:last-child {
+      margin-bottom: 0;
+    }
+    .grid-content {
+      align-items: center;
+      min-height: 36px;
+    }
+
+    .topInfo {
+      display: flex;
+      align-items: center;
+      font-size: 16px;
+      font-weight: bold;
+
+      & > div {
+        white-space: nowrap;
+        margin-right: 20px;
+      }
+    }
+  }
+  .el-card {
+    border: 0;
+  }
+}
+</style>
diff --git a/src/views/dataUpload/contractorManage/projectInfo/components/addReport.vue b/src/views/dataUpload/contractorManage/projectInfo/components/addReport.vue
new file mode 100644
index 0000000..963eccb
--- /dev/null
+++ b/src/views/dataUpload/contractorManage/projectInfo/components/addReport.vue
@@ -0,0 +1,323 @@
+<template>
+  <div class="system-add-user-container">
+    <el-dialog :title="title" v-model="isShowDialog" width="50%">
+      <el-form :model="form" size="default" ref="formRef" :rules="rules" label-width="120px">
+        <el-row :gutter="35">
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="项目名称" prop="projectName">
+              <el-input v-model.trim="form.projectName" placeholder="项目名称" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="承包商" prop="contractorId">
+              <el-select v-model="form.contractorId" filterable placeholder="请选择承包商" clearable>
+                <el-option v-for="(item,index) in contractorList" :key="index" :label="item.contractorName" :value="item.uuid"/>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="资质文件" prop="qualificationList">
+              <el-button type="primary" style="margin-bottom: 10px" @click="addFile">新增</el-button>
+              <el-table :data="form.qualificationList" style="width: 100%" border>
+                <el-table-column prop="qulificationName" label="资质名称"></el-table-column>
+                <el-table-column prop="filePath" label="资质文件"></el-table-column>
+                <el-table-column fixed="right" label="操作">
+                  <template #default="scope">
+                    <el-button @click="delFile(scope.$index)" type="text" size="small">删除</el-button>
+                  </template>
+                </el-table-column>
+              </el-table>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="title == '新增上报'? false : true">
+            <el-form-item label="删除状态" prop="deleted">
+              <el-radio-group v-model="form.deleted">
+                <el-radio label="0">未删除</el-radio>
+                <el-radio label="1">已删除</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <template #footer>
+        <span class="dialog-footer">
+            <el-button @click="isShowDialog = !isShowDialog" size="default">取 消</el-button>
+            <el-button type="primary" v-throttle @click="onSubmit" size="default">确 定</el-button>
+        </span>
+      </template>
+      <el-dialog v-model="addVisible" @open="startAdd" width="30%">
+        <el-form :model="addForm" label-width="170px" ref="addFormRef" :rules="addFormRules">
+          <el-row :gutter="20">
+            <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+              <el-form-item label="资质名称" prop="qulificationName">
+                <el-input
+                    v-model="addForm.qulificationName"
+                    placeholder="请输入资质名称"
+                />
+              </el-form-item>
+            </el-col>
+            <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+              <el-form-item label="资质文件" prop="filePath">
+                <el-upload accept=".pdf" multiple :action="uploadUrl" :headers="header" method="post" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :on-success="handleAvatarSuccess" :limit='1' v-model:file-list="fileList" :before-upload="picSize" :on-remove="handleRemove" :before-remove="beforeRemove">
+                  <el-button size="small" type="primary">点击上传</el-button>
+                  <div slot="tip" class="el-upload__tip">支持上传pdf,尺寸小于5M,最多可上传1份</div>
+<!--                  <template #tip>-->
+<!--                    <div class="el-upload__tip">上传图片尺寸小于4M,最多可上传1张</div>-->
+<!--                  </template>-->
+                </el-upload>
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+        <template #footer>
+          <span class="dialog-footer">
+            <el-button type="primary" @click="confirmAdd(addFormRef)">新增</el-button>
+          </span>
+        </template>
+      </el-dialog>
+    </el-dialog>
+  </div>
+</template>
+
+<script lang="ts">
+import { reactive, toRefs, onMounted, defineComponent, ref } from 'vue';
+import {ElMessageBox, ElMessage, FormRules, FormInstance} from 'element-plus';
+import axios from "axios";
+import {contractorApi} from "/@/api/dataUpload/contractorManage";
+import Cookies from "js-cookie";
+
+// 定义接口来定义对象的类型
+interface DataState {
+  title: string
+  isShowDialog: boolean
+  form: {
+    uuid: string
+    projectName: string
+    contractorId: string
+    qualificationList: Array<any>
+    deleted: string
+  }
+  rules:{}
+  addVisible: boolean
+  fileList: [],
+  uploadUrl: string,
+  header: {},
+  imgDialog: boolean,
+  imageUrl: string
+  addForm: {}
+  contractorList: []
+}
+
+export default defineComponent({
+  name: 'reportDialog',
+  setup(props, context) {
+    const formRef = ref()
+    const addFormRef = ref()
+    const checkList = (rule: any, value: any, callback: any) => {
+      if(state.form.qualificationList.length == 0){
+        callback(new Error("请完善资质信息"))
+      } else {
+        callback();
+      }
+    }
+    const state = reactive<DataState>({
+      title: '',
+      isShowDialog: false,
+      form: {
+        uuid: '',
+        projectName: '',
+        contractorId: '',
+        qualificationList: [],
+        deleted: '0'
+      },
+      rules:{
+        projectName: [{ required: true, message: '请填写项目名称', trigger: 'blur' }],
+        contractorId: [{ required: true, message: '请选择承包商', trigger: 'blur' }],
+        qualificationList: [{ required: true,validator: checkList, trigger: 'blur' }]
+      },
+      contractorList: [],
+      addVisible: false,
+      fileList: [],
+      uploadUrl: import.meta.env.VITE_API_URL + '/account/file/upload',
+      header: {
+        uid: Cookies.get('uid'),
+        Authorization: Cookies.get('token')
+      },
+      imgDialog: false,
+      imageUrl: '',
+      addForm: {
+        qulificationName: '',
+        filePath: ''
+      }
+    })
+
+    const checkFile = (rule: any, value: any, callback: any) => {
+      if(state.fileList.length == 0){
+        callback(new Error("请上传附件"))
+      } else {
+        callback();
+      }
+    }
+
+    const addFormRules = reactive<FormRules>({
+      qulificationName: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+      filePath: [{ required: true,validator: checkFile, trigger: 'blur' }]
+    })
+    // 页面加载时
+    onMounted(() => {
+
+    })
+    // 打开弹窗
+    const open = (type: string, data: object) => {
+      state.isShowDialog = true;
+      getDataList()
+      if (type === 'add') {
+        state.title = '新增上报';
+        state.form = {
+          uuid: '',
+          projectName: '',
+          contractorId: '',
+          qualificationList: [],
+          deleted: '0'
+        }
+      }else{
+        state.title = '重新上报';
+        state.form = {
+          uuid: data.uuid,
+          projectName: data.projectName,
+          contractorId: data.contractorId,
+          qualificationList: data.qualificationList,
+          deleted: '0'
+        }
+      }
+    };
+
+    const getDataList = async ()=>{
+      const res = await contractorApi().getContractorList({searchParams: {}, pageIndex: 1, pageSize: 999})
+      if(res.data.code == 200){
+        state.contractorList = res.data.data
+      }else{
+        ElMessage({
+          type: 'warning',
+          message: res.data.msg
+        })
+      }
+    }
+
+    // 新增修改
+    const onSubmit = async () => {
+      formRef.value.validate(async (valid:Boolean) => {
+        if(valid){
+          const res = await contractorApi().addProjectInfo([state.form])
+          if(res.data.code == 200){
+            ElMessage({
+              type:'success',
+              message:'数据上报成功'
+            })
+            state.isShowDialog = false
+          }else{
+            ElMessage({
+              type:'warning',
+              message:res.data.msg
+            })
+          }
+          context.emit('refresh');
+        }else{
+          ElMessage({
+            type:'warning',
+            message:'请完善基本信息'
+          })
+        }
+      })
+    }
+
+    const delFile = (index:number)=>{
+      state.form.qualificationList.splice(index,1)
+    }
+
+    const addFile = ()=>{
+      state.addVisible = true
+    }
+
+    const startAdd =()=>{
+      state.addForm={
+        qulificationName: '',
+        filePath: '',
+      }
+      state.fileList = []
+    }
+
+    const confirmAdd=async (formEl: FormInstance | undefined)=>{
+      if (!formEl) return
+      await formEl.validate(async (valid, fields) => {
+        if (valid) {
+          state.form.qualificationList.push(state.addForm)
+          state.addVisible = false
+        } else {
+          ElMessage({
+            type: 'warning',
+            message: '有表单内容未完成,请再次检查完善'
+          })
+        }
+      })
+    }
+
+    // 图片上传
+    const showTip =()=>{
+      ElMessage({
+        type: 'warning',
+        message: '超出文件上传数量'
+      });
+    }
+
+    const picSize = async(rawFile: any) => {
+      if(rawFile.size / 1024 / 1024 > 5){
+        ElMessage({
+          type: 'warning',
+          message: '文件大小不能超过5M'
+        });
+        return false
+      }
+    }
+
+    const handleAvatarSuccess = (res:any, uploadFile: any) => {
+      if(res){
+        uploadFile.name = res
+        state.addForm.filePath = res
+      }else{
+        ElMessage({
+          type: 'warning',
+          message: '文件上传失败'
+        })
+      }
+    }
+
+    const handlePictureCardPreview = (uploadFile) => {
+      state.imageUrl = uploadFile.url
+      state.imgDialog = true;
+    }
+
+    const handleRemove = (file, uploadFiles,type) => {
+      state.fileList = uploadFiles
+    }
+
+    return {
+      formRef,
+      addFormRef,
+      addFormRules,
+      delFile,
+      startAdd,
+      showTip,
+      picSize,
+      addFile,
+      confirmAdd,
+      handleAvatarSuccess,
+      handlePictureCardPreview,
+      handleRemove,
+      open,
+      onSubmit,
+      ...toRefs(state)
+    };
+  }
+});
+</script>
diff --git a/src/views/dataUpload/contractorManage/projectInfo/index.vue b/src/views/dataUpload/contractorManage/projectInfo/index.vue
new file mode 100644
index 0000000..1905558
--- /dev/null
+++ b/src/views/dataUpload/contractorManage/projectInfo/index.vue
@@ -0,0 +1,234 @@
+<template>
+    <div class="home-container">
+        <div style="height: 100%">
+          <div class="homeCard">
+            <div class="main-card">
+            <el-row class="cardTop">
+              <el-col :span="12" class="mainCardBtn">
+                <el-button type="primary" icon="Plus" size="default" @click="openDialog('add',{})">新增</el-button>
+              </el-col>
+            </el-row>
+            <el-table :data="reportData" style="width: 100%" height="calc(100% - 48px)" :header-cell-style="{ background: '#fafafa' }">
+              <el-table-column prop="id" label="id" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="projectName" label="项目名称" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="contractorId" label="承包商id" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="qualificationList" label="当前项目承包商提供资质" show-overflow-tooltip>
+                <template #default="scope">
+                  <el-button link type="primary" size="small" v-for="(item,index) in scope.row.qualificationList" @click="viewPdf(item)">{{item.qulificationName }}</el-button>
+                </template>
+              </el-table-column>
+<!--              <el-table-column prop="qulificationName" label="资质名称" show-overflow-tooltip></el-table-column>-->
+<!--              <el-table-column prop="contractorType" label="资质文件" show-overflow-tooltip></el-table-column>-->
+<!--              <el-table-column prop="Deleted" label="删除状态" show-overflow-tooltip>-->
+<!--                <template #default="scope">-->
+<!--                  {{scope.row.Deleted == 0?'未删除':scope.row.Deleted == 1?'已删除':'&#45;&#45;'}}-->
+<!--                </template>-->
+<!--              </el-table-column>-->
+              <el-table-column prop="createDate" label="创建时间" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="updateDate" label="修改时间" show-overflow-tooltip></el-table-column>
+              <el-table-column label="操作" width="140">
+                  <template #default="scope">
+                    <el-button size="small" text type="primary" @click="openDialog('update',scope.row)">重新上报</el-button>
+                    <el-button style="color: red" size="small" text type="primary" @click="onRowDel(scope.row)">删除</el-button>
+                  </template>
+              </el-table-column>
+            </el-table>
+            <div class="pageBtn">
+              <el-pagination @size-change="onHandleSizeChange" small="false" @current-change="onHandleCurrentChange" class="page-position" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="listQuery.pageIndex" background v-model:page-size="listQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination>
+            </div>
+            </div>
+          </div>
+        </div>
+        <add-report ref="reportRef" @refresh="getData"></add-report>
+    </div>
+</template>
+
+<script lang="ts">
+import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue'
+import { ElMessageBox, ElMessage } from 'element-plus'
+import { Plus } from '@element-plus/icons-vue'
+import addReport from "./components/addReport.vue"
+import {contractorApi} from "/@/api/dataUpload/contractorManage";
+import Cookies from "js-cookie";
+import axios from "axios";
+interface TableDataState {
+  reportData: [],
+  listQuery: {
+    pageIndex: number
+    pageSize: number
+  }
+  total: null | number
+}
+
+export default defineComponent({
+    name: 'projectInfo',
+    components: {addReport },
+    setup() {
+      const reportRef= ref();
+      const state = reactive<TableDataState>({
+        reportData: [],
+        listQuery: {
+          pageIndex: 1,
+          pageSize: 10
+        },
+        total: null
+      });
+
+      // 页面加载时
+      onMounted(() => {
+        getData()
+      });
+
+      const getData = async ()=>{
+        const res = await contractorApi().getProjectInfoList(state.listQuery)
+        if(res.data.code == 200){
+          state.reportData = res.data.data
+          state.total = res.data.total
+        }else{
+          ElMessage({
+            type: 'warning',
+            message: res.data.msg
+          })
+        }
+      }
+
+      const openDialog=(type:string,data:object)=>{
+        reportRef.value.open(type,data)
+      }
+
+      // 删除用户
+      const onRowDel = (row: Object) => {
+          ElMessageBox.confirm(`此操作将永久删除:“${row.projectName}”,是否继续?`, '提示', {
+              confirmButtonText: '确认',
+              cancelButtonText: '取消',
+              type: 'warning'
+          })
+              .then(async () => {
+                const res = await contractorApi().delProjectInfo({ids: [row.id]})
+                if(res.data.code == 200){
+                  ElMessage({
+                    type: 'success',
+                    message: '删除成功'
+                  })
+                  await getData()
+                }else{
+                  ElMessage({
+                    type: 'warning',
+                    message: res.data.msg
+                  })
+                }
+              })
+              .catch(() => {});
+      };
+      // 分页改变
+      const onHandleSizeChange = (val: number) => {
+          state.listQuery.pageSize = val;
+          getData()
+      };
+      // 分页改变
+      const onHandleCurrentChange = (val: number) => {
+          state.listQuery.pageIndex = val;
+          getData()
+      };
+
+      const viewPdf=(item: Object)=>{
+        console.log(item.filePath,555)
+        window.open(item.filePath)
+      }
+
+      return {
+        reportRef,
+        openDialog,
+        getData,
+        viewPdf,
+        onRowDel,
+        onHandleSizeChange,
+        onHandleCurrentChange,
+        ...toRefs(state)
+      };
+    }
+});
+</script>
+<style lang="scss" scoped>
+.home-container {
+  height: calc(100vh - 144px);
+  box-sizing: border-box;
+  overflow: hidden;
+  .demo-tabs {
+    width: 100%;
+    height: 100%;
+
+    &::v-deep(.el-tabs__content) {
+      height: calc(100% - 60px);
+    }
+
+    .el-tab-pane {
+      height: 100%;
+    }
+  }
+  .homeCard {
+    width: 100%;
+    padding: 20px;
+    box-sizing: border-box;
+    background: #fff;
+    border-radius: 4px;
+
+    .main-card {
+      width: 100%;
+      height: 100%;
+      .cardTop {
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        margin-bottom: 20px;
+        .mainCardBtn {
+          margin: 0;
+        }
+      }
+      .pageBtn {
+        height: 60px;
+        display: flex;
+        align-items: center;
+        justify-content: right;
+
+        .demo-pagination-block + .demo-pagination-block {
+          margin-top: 10px;
+        }
+        .demo-pagination-block .demonstration {
+          margin-bottom: 16px;
+        }
+      }
+    }
+    &:last-of-type {
+      height: calc(100% - 100px);
+    }
+  }
+  .el-row {
+    display: flex;
+    align-items: center;
+    margin-bottom: 20px;
+    &:last-child {
+      margin-bottom: 0;
+    }
+    .grid-content {
+      align-items: center;
+      min-height: 36px;
+    }
+
+    .topInfo {
+      display: flex;
+      align-items: center;
+      font-size: 16px;
+      font-weight: bold;
+
+      & > div {
+        white-space: nowrap;
+        margin-right: 20px;
+      }
+    }
+  }
+  .el-card {
+    border: 0;
+  }
+}
+</style>
diff --git a/src/views/dataUpload/contractorManage/userCertInfo/components/addReport.vue b/src/views/dataUpload/contractorManage/userCertInfo/components/addReport.vue
new file mode 100644
index 0000000..6180fec
--- /dev/null
+++ b/src/views/dataUpload/contractorManage/userCertInfo/components/addReport.vue
@@ -0,0 +1,290 @@
+<template>
+  <div class="system-add-user-container">
+    <el-dialog :title="title" v-model="isShowDialog" width="50%">
+      <el-form :model="form" size="default" ref="formRef" :rules="rules" label-width="120px">
+        <el-row :gutter="35">
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="证书名称" prop="certName">
+              <el-input v-model.trim="form.certName" type="text" placeholder="证书名称" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="证书编号" prop="certNo">
+              <el-input v-model.trim="form.certNo" type="text" placeholder="证书编号" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="发证机构" prop="issuingInstituion">
+              <el-input v-model.trim="form.issuingInstituion" type="text" placeholder="证书名称" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="发证日期" prop="issuingTime">
+              <el-date-picker v-model="form.issuingTime" value-format="YYYY-MM-DD" type="date" placeholder="选择发证日期" style="width: 100%" />
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="有效期" prop="effectiveTime">
+              <el-date-picker v-model="form.effectiveTime" value-format="YYYY-MM-DD" type="date" placeholder="选择发证日期" style="width: 100%" />
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="复审日期" prop="reviewTime">
+              <el-date-picker v-model="form.reviewTime" value-format="YYYY-MM-DD" type="date" placeholder="选择发证日期" style="width: 100%" />
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="承包商重点人员" prop="keyPersonnelId">
+              <el-select v-model="form.keyPersonnelId" filterable placeholder="请选择重点人员" clearable>
+                <el-option v-for="(item,index) in contractorUserList" :key="index" :label="item.userName" :value="item.uuid"/>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="证书照片路径" prop="filePath">
+              <el-upload accept="image/*" :action="uploadUrl" :headers="header" method="post" :on-exceed="showTip" :on-success="handleAvatarSuccess" :limit='1' v-model:file-list="fileList" :before-upload="picSize" :on-remove="handleRemove" :before-remove="beforeRemove">
+                <el-button type="primary">点击上传</el-button>
+                <template #tip>
+                  <div class="el-upload__tip">仅支持上传图片文件,尺寸小于5M,最多可上传1张</div>
+                </template>
+              </el-upload>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="title == '新增上报'? false : true">
+            <el-form-item label="删除状态" prop="deleted">
+              <el-radio-group v-model="form.deleted">
+                <el-radio label="0">未删除</el-radio>
+                <el-radio label="1">已删除</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <template #footer>
+        <span class="dialog-footer">
+            <el-button @click="isShowDialog = !isShowDialog" size="default">取 消</el-button>
+            <el-button type="primary" v-throttle @click="onSubmit" size="default">确 定</el-button>
+        </span>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script lang="ts">
+import { reactive, toRefs, onMounted, defineComponent, ref } from 'vue';
+import { ElMessageBox, ElMessage } from 'element-plus';
+import axios from "axios";
+import {workApplyApi} from "/@/api/specialWorkSystem/workApply";
+import {userApi} from '/@/api/systemManage/user'
+import Cookies from "js-cookie";
+import {judgeReportApi} from "/@/api/dataUpload/saftyBaseInfo/judgeReport";
+import {contractorApi} from "/@/api/dataUpload/contractorManage";
+
+// 定义接口来定义对象的类型
+interface DataState {
+  title: string;
+  isShowDialog: boolean;
+  form: {
+    uuid: string
+    certName: string
+    certNo: string
+    issuingInstituion: string
+    issuingTime: string
+    effectiveTime: string
+    reviewTime: string
+    keyPersonnelId: string
+    filePath: string
+    deleted: string
+  }
+  rules:{},
+  fileList: [],
+  contractorUserList: []
+  uploadUrl: string,
+  header: {}
+}
+
+export default defineComponent({
+  name: 'reportDialog',
+  setup(props, context) {
+    const formRef = ref()
+    const checkFile = (rule: any, value: any, callback: any) => {
+      if(state.fileList.length == 0){
+        callback(new Error("请上传证书照片"))
+      } else {
+        callback();
+      }
+    }
+    const state = reactive<DataState>({
+      title: '',
+      isShowDialog: false,
+      form: {
+        uuid: '',
+        certName: '',
+        certNo: '',
+        issuingInstituion: '',
+        issuingTime: '',
+        effectiveTime: '',
+        reviewTime: '',
+        keyPersonnelId: '',
+        filePath: '',
+        deleted: '0'
+      },
+      rules:{
+        certName: [{ required: true, message: '请选择证书名称', trigger: 'blur'}],
+        certNo: [{ required: true, message: '请填写证书编号', trigger: 'blur'}],
+        issuingInstituion: [{ required: true, message: '请填写发证机构', trigger: 'blur'}],
+        issuingTime: [{ required: true, message: '请选择发证日期', trigger: 'blur'}],
+        effectiveTime: [{ required: true, message: '请选择有效期', trigger: 'blur'}],
+        reviewTime: [{ required: true, message: '请选择复审期', trigger: 'blur'}],
+        keyPersonnelId: [{ required: true, message: '请选择重点人员', trigger: 'blur'}],
+        filePath: [{ required: true,validator: checkFile, trigger: 'blur' }]
+      },
+      fileList: [],
+      contractorUserList: [],
+      uploadUrl: import.meta.env.VITE_API_URL + '/account/file/upload',
+      header: {
+        uid: Cookies.get('uid'),
+        Authorization: Cookies.get('token')
+      }
+    })
+
+    // 页面加载时
+    onMounted(() => {
+
+    })
+    // 打开弹窗
+    const open = (type: string, data: object) => {
+      state.isShowDialog = true
+      getUserList()
+      if (type === 'add') {
+        state.title = '新增上报'
+        state.form = {
+          uuid: '',
+          certName: '',
+          certNo: '',
+          issuingInstituion: '',
+          issuingTime: '',
+          effectiveTime: '',
+          reviewTime: '',
+          keyPersonnelId: '',
+          filePath: '',
+          deleted: '0'
+        }
+        state.fileList = []
+      }else{
+        state.title = '重新上报';
+        Object.keys(state.form).forEach(key => {
+          if (Object.prototype.hasOwnProperty.call(data,key)) {
+            state.form[key] = JSON.parse(JSON.stringify(data))[key];
+          }
+        })
+        if(data.files !== ''){
+          state.fileList = state.form.filePath.split(',').map((i,index) => {
+            return {
+              url:  i,
+              name: '文件' + (index+1)
+            }
+          })
+        }else{
+          state.fileList = []
+        }
+        // state.form = {
+        //   type: 1,
+        //   uuid: data.uuid,
+        //   name: '',
+        //   remarks: '',
+        //   evaluateTime: '',
+        //   files: '',
+        //   deleted: '0'
+        // }
+      }
+    };
+
+    const getUserList = async ()=>{
+      const res = await contractorApi().getKeyUserInfoList({pageIndex: 1, pageSize: 999})
+      if(res.data.code == 200){
+        state.contractorUserList = res.data.data
+      }else{
+        ElMessage({
+          type: 'warning',
+          message: res.data.msg
+        })
+      }
+    }
+
+    // 图片上传
+    const showTip =()=>{
+      ElMessage({
+        type: 'warning',
+        message: '超出文件上传数量'
+      });
+    }
+
+    const picSize = async(rawFile: any) => {
+      if(rawFile.size / 1024 / 1024 > 5){
+        ElMessage({
+          type: 'warning',
+          message: '文件大小不能超过5M'
+        });
+        return false
+      }
+    }
+
+    const handleAvatarSuccess = (res:any, uploadFile: any) => {
+      if(res){
+          uploadFile.name = res
+          state.form.filePath = res
+        console.log(state.fileList,'list')
+      }else{
+        ElMessage({
+          type: 'warning',
+          message: '文件上传失败'
+        })
+      }
+    }
+
+    const handleRemove = (file, uploadFiles,type) => {
+      state.form.files = ''
+    }
+
+    // 新增修改
+    const onSubmit = async () => {
+      formRef.value.validate(async (valid:Boolean) => {
+        if(valid){
+            const res = await contractorApi().addUserCertInfo([state.form])
+            if(res.data.code == '200'){
+              ElMessage({
+                type:'success',
+                message:'数据上报成功'
+              })
+              state.isShowDialog = false
+              state.fileList = []
+            }else{
+              ElMessage({
+                type:'warning',
+                message:res.data.msg
+              })
+            }
+            context.emit('refresh');
+        }else{
+          ElMessage({
+            type:'warning',
+            message:'请完善基本信息'
+          })
+        }
+      })
+    }
+
+    return {
+      formRef,
+      showTip,
+      picSize,
+      handleAvatarSuccess,
+      handleRemove,
+      open,
+      onSubmit,
+      ...toRefs(state)
+    };
+  }
+});
+</script>
diff --git a/src/views/dataUpload/contractorManage/userCertInfo/index.vue b/src/views/dataUpload/contractorManage/userCertInfo/index.vue
new file mode 100644
index 0000000..fb670f6
--- /dev/null
+++ b/src/views/dataUpload/contractorManage/userCertInfo/index.vue
@@ -0,0 +1,256 @@
+<template>
+    <div class="home-container">
+        <div style="height: 100%">
+          <div class="homeCard">
+            <div class="main-card">
+            <el-row class="cardTop">
+              <el-col :span="12" class="mainCardBtn">
+                <el-button type="primary" icon="Plus" size="default" @click="openDialog('add',{})">新增</el-button>
+              </el-col>
+            </el-row>
+            <el-table :data="reportData" style="width: 100%" height="calc(100% - 48px)" :header-cell-style="{ background: '#fafafa' }">
+                <el-table-column prop="id" label="id" show-overflow-tooltip></el-table-column>
+                <el-table-column prop="certName" label="证书名称" show-overflow-tooltip></el-table-column>
+                <el-table-column prop="certNo" label="证书编号" show-overflow-tooltip></el-table-column>
+                <el-table-column prop="issuingInstituion" label="发证机构" show-overflow-tooltip></el-table-column>
+                <el-table-column prop="issuingTime" label="发证日期" show-overflow-tooltip></el-table-column>
+                <el-table-column prop="effectiveTime" label="有效期" show-overflow-tooltip></el-table-column>
+                <el-table-column prop="reviewTime" label="复审日期" show-overflow-tooltip></el-table-column>
+                <el-table-column prop="keyPersonnelId" label="重点人员信息id" show-overflow-tooltip></el-table-column>
+                <el-table-column prop="filePath" label="证书" show-overflow-tooltip>
+                  <template #default="scope">
+                    <el-button v-if="scope.row.filePath !== ''" size="small" text type="primary" @click="openFile(scope.row.filePath)">查看</el-button>
+                  </template>
+                </el-table-column>
+                <el-table-column label="操作" width="140">
+                    <template #default="scope">
+                        <el-button size="small" text type="primary" @click="openDialog('update',scope.row)">重新上报</el-button>
+                        <el-button style="color: red" size="small" text type="primary" @click="onRowDel(scope.row)">删除</el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+            <div class="pageBtn">
+              <el-pagination @size-change="onHandleSizeChange" small="false" @current-change="onHandleCurrentChange" class="page-position" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="listQuery.pageIndex" background v-model:page-size="listQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination>
+            </div>
+            </div>
+          </div>
+        </div>
+        <add-report ref="reportRef" @refresh="getData"></add-report>
+    </div>
+</template>
+
+<script lang="ts">
+import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue'
+import { ElMessageBox, ElMessage } from 'element-plus'
+import { Plus } from '@element-plus/icons-vue'
+import addReport from "./components/addReport.vue"
+import {judgeReportApi} from "/@/api/dataUpload/saftyBaseInfo/judgeReport";
+import axios from "axios";
+import Cookies from "js-cookie";
+import {contractorApi} from "/@/api/dataUpload/contractorManage";
+
+// 定义接口来定义对象的类型
+interface TableDataRow {
+  id: number|null
+  reportTime: string
+  name: string
+  remarks: string
+  evaluateTime: string
+  files: string
+}
+interface TableDataState {
+  reportData: [],
+  listQuery: {
+    searchParams: {}
+    pageIndex: number
+    pageSize: number
+  }
+  total: null | number
+}
+
+export default defineComponent({
+    name: 'judgeReport',
+    components: {addReport },
+    setup() {
+      const reportRef= ref();
+      const state = reactive<TableDataState>({
+        reportData: [],
+        listQuery: {
+          searchParams: {},
+          pageIndex: 1,
+          pageSize: 10
+        },
+        total: null
+      });
+
+      // 页面加载时
+      onMounted(() => {
+        getData()
+      });
+
+      const getData = async ()=>{
+        const res = await contractorApi().getUserCertInfoList(state.listQuery)
+        if(res.data.code == 200){
+          state.reportData = res.data.data
+          state.total = res.data.total
+        }else{
+          ElMessage({
+            type: 'warning',
+            message: res.data.msg
+          })
+        }
+      }
+
+      const openDialog=(type:string,data:object)=>{
+        reportRef.value.open(type,data)
+      }
+
+      const openFile=(file: string)=>{
+        // axios.get(file,{headers:{'Content-Type': 'application/json','Authorization': `${Cookies.get('token')}`,'uid':`${Cookies.get('uid')}`},responseType: 'blob'}).then(res=>{
+        //   if (res) {
+        //     const link = document.createElement('a')
+        //     let blob = new Blob([res.data],{type: 'application/pdf'})
+        //     link.style.display = "none";
+        //     link.href = URL.createObjectURL(blob); // 创建URL
+        //     window.open(link.href)
+        //   } else {
+        //     ElMessage({
+        //       type: 'warning',
+        //       message: '文件读取失败'
+        //     });
+        //   }
+        // })
+        window.open(file)
+      }
+
+      // 删除用户
+      const onRowDel = (row: TableDataRow) => {
+          ElMessageBox.confirm(`此操作将永久删除该记录,是否继续?`, '提示', {
+              confirmButtonText: '确认',
+              cancelButtonText: '取消',
+              type: 'warning'
+          })
+              .then(async () => {
+                const res = await contractorApi().delUserCertInfo({ids: [row.id]})
+                if(res.data.code == '200'){
+                  ElMessage({
+                    type: 'success',
+                    message: '删除成功'
+                  })
+                  await getData()
+                }else{
+                  ElMessage({
+                    type: 'warning',
+                    message: res.data.msg
+                  })
+                }
+              })
+              .catch(() => {});
+      };
+      // 分页改变
+      const onHandleSizeChange = (val: number) => {
+          state.listQuery.pageSize = val;
+          getData()
+      };
+      // 分页改变
+      const onHandleCurrentChange = (val: number) => {
+          state.listQuery.pageIndex = val;
+          getData()
+      };
+
+      return {
+        reportRef,
+        openFile,
+        openDialog,
+        getData,
+        onRowDel,
+        onHandleSizeChange,
+        onHandleCurrentChange,
+        ...toRefs(state)
+      };
+    }
+});
+</script>
+<style lang="scss" scoped>
+.home-container {
+  height: calc(100vh - 144px);
+  box-sizing: border-box;
+  overflow: hidden;
+  .demo-tabs {
+    width: 100%;
+    height: 100%;
+
+    &::v-deep(.el-tabs__content) {
+      height: calc(100% - 60px);
+    }
+
+    .el-tab-pane {
+      height: 100%;
+    }
+  }
+  .homeCard {
+    width: 100%;
+    padding: 20px;
+    box-sizing: border-box;
+    background: #fff;
+    border-radius: 4px;
+
+    .main-card {
+      width: 100%;
+      height: 100%;
+      .cardTop {
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        margin-bottom: 20px;
+        .mainCardBtn {
+          margin: 0;
+        }
+      }
+      .pageBtn {
+        height: 60px;
+        display: flex;
+        align-items: center;
+        justify-content: right;
+
+        .demo-pagination-block + .demo-pagination-block {
+          margin-top: 10px;
+        }
+        .demo-pagination-block .demonstration {
+          margin-bottom: 16px;
+        }
+      }
+    }
+    &:last-of-type {
+      height: calc(100% - 100px);
+    }
+  }
+  .el-row {
+    display: flex;
+    align-items: center;
+    margin-bottom: 20px;
+    &:last-child {
+      margin-bottom: 0;
+    }
+    .grid-content {
+      align-items: center;
+      min-height: 36px;
+    }
+
+    .topInfo {
+      display: flex;
+      align-items: center;
+      font-size: 16px;
+      font-weight: bold;
+
+      & > div {
+        white-space: nowrap;
+        margin-right: 20px;
+      }
+    }
+  }
+  .el-card {
+    border: 0;
+  }
+}
+</style>
diff --git a/src/views/loginPage/component/accountLogin.vue b/src/views/loginPage/component/accountLogin.vue
index 5a1e9ca..39ec524 100644
--- a/src/views/loginPage/component/accountLogin.vue
+++ b/src/views/loginPage/component/accountLogin.vue
@@ -200,7 +200,9 @@
         const onSignIn = async () => {
             state.loading.signIn = true;
             // 存储 token 到浏览器缓存
-            let res = await useLoginApi().signIn(state.ruleForm);
+            const data = JSON.parse(JSON.stringify(state.ruleForm))
+            data.password = Base64.encode(data.password)
+            let res = await useLoginApi().signIn(data);
             if (res.data.code === '200') {
                 await userInfo.setUserInfos(res.data.data);
                 Cookies.set('token', res.data.data.accessToken);
@@ -210,6 +212,7 @@
                 // Session.set('token', res.data.data.accessToken);
                 // Session.set('projectId', '');
                 // Session.set('uid', res.data.data.uid);
+              console.log(state.ruleForm,'form')
                 if (state.saveCode) {
                     localStorage.setItem('userCode', state.ruleForm.username)
                     localStorage.setItem('userPassword', Base64.encode(state.ruleForm.password),)
diff --git a/src/views/newHome/index.vue b/src/views/newHome/index.vue
index 96e8cd6..92339f7 100644
--- a/src/views/newHome/index.vue
+++ b/src/views/newHome/index.vue
@@ -368,13 +368,12 @@
           const resolvedRoute = router.resolve(routePath);
           const fullPath = resolvedRoute.href
           window.open(fullPath, '_blank');
-          // window.open(fullPath, '_blank');
 
             // window.open('http://39.104.85.193:8585/');
         };
 
         const toDoublePrevent = () => {
-           window.open('http://117.190.40.54:6801/login');
+           window.open('http://8.137.115.153:6801/login');
         };
         const toSmartFactory = () =>{
           window.open('http://117.190.40.54:5522/#/login');
diff --git a/src/views/newSpecialWorkSystem/workTicket/sbtj/index.vue b/src/views/newSpecialWorkSystem/workTicket/sbtj/index.vue
index bd13c15..0088649 100644
--- a/src/views/newSpecialWorkSystem/workTicket/sbtj/index.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/sbtj/index.vue
@@ -136,10 +136,10 @@
           startTime: state.startTime1,
           endTime:state.endTime
         }
-        let res = await workApplyApi().getSbtjPie(data);
+        let res = await workApplyApi().getSbtjPie(data)
         if (res.data.code === '200') {
           if(res.data.data && res.data.data.length>0){
-            const pieData = res.data.data.map(({workTypeDesc,count})=>({ name: workTypeDesc,value: count}))
+            const pieData = res.data.data.map(({workTypeDesc,count})=>({ name: workTypeDesc,value: count})).filter(i=>i.name !== '未知')
             initZyfb(pieData)
           }
           else{
diff --git a/src/views/newSpecialWorkSystem/workTicket/sqjl/index.vue b/src/views/newSpecialWorkSystem/workTicket/sqjl/index.vue
index 10d99b1..8764d1a 100644
--- a/src/views/newSpecialWorkSystem/workTicket/sqjl/index.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/sqjl/index.vue
@@ -10,7 +10,7 @@
                       </div>
                       <div class="basic-line" style="display:flex;white-space:nowrap;line-height: 40px">
                         <span>负责人:</span>
-                        <el-input v-model="searPara.headUserName" placeholder="负责人"/>
+                        <el-input v-model.trim="searPara.headUserName" placeholder="负责人"/>
                       </div>
                       <div class="basic-line">
                         <span>事业部:</span>
@@ -37,7 +37,7 @@
                       <div class="basic-line" style="display:flex;white-space:nowrap;line-height: 40px">
                         <span>作业票编号:</span>
                         <el-input
-                            v-model="searPara.workPermitNo"
+                            v-model.trim="searPara.workPermitNo"
                             placeholder="请输入作业票编号"
                         />
                       </div>
@@ -113,6 +113,7 @@
                                     <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 v-if="(scope.row.working?.workAllStatus == 3 || scope.row.working?.workAllStatus == 4 || scope.row.working?.workAllStatus == 5)&&!scope.row.renewalWorkApplyId" link type="primary" size="small" :icon="Edit" @click="continueRecord(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 link type="primary" size="small" :icon="Download" @click="downLoadRecord(scope.row)">作业票预览</el-button>
@@ -220,6 +221,15 @@
                         </span>
                     </template>
                 </el-dialog>
+                <fire-dialog ref="fireRef" :lists="lists" @refresh="getListByPage"></fire-dialog>
+                <plate-dialog ref="plateRef" :lists="lists" @refresh="getListByPage"></plate-dialog>
+                <space-dialog ref="spaceRef" :lists="lists" @refresh="getListByPage"></space-dialog>
+                <hoist-dialog ref="hoistRef" :lists="lists" @refresh="getListByPage"></hoist-dialog>
+                <ground-dialog ref="groundRef" :lists="lists" @refresh="getListByPage"></ground-dialog>
+                <broken-dialog ref="brokenRef" :lists="lists" @refresh="getListByPage"></broken-dialog>
+                <height-dialog ref="heightRef" :lists="lists" @refresh="getListByPage"></height-dialog>
+                <power-dialog ref="powerRef" :lists="lists" @refresh="getListByPage"></power-dialog>
+                <open-dialog ref="openRef" :lists="lists" @refresh="getListByPage"></open-dialog>
 <!--                <el-dialog v-model="downLoadDialog" title="提示" width="30%" center>-->
 <!--                    <span>您确定要导出该条记录吗?</span>-->
 <!--                    <template #footer>-->
@@ -310,6 +320,7 @@
     dep4List: Array<type>;
     searPara: {}
     timeRange: Array<string>;
+    lists: {}
 }
 interface type {
     id: number;
@@ -322,13 +333,31 @@
 export default defineComponent({
     name: 'applys',
     components: {
-      detailLog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/detailLog.vue'))
+      detailLog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/detailLog.vue')),
+      fireDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/fireDialog.vue')),
+      plateDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/plateDialog.vue')),
+      spaceDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/spaceDialog.vue')),
+      hoistDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/hoistDialog.vue')),
+      groundDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/groundDialog.vue')),
+      brokenDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/brokenDialog.vue')),
+      heightDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/heightDialog.vue')),
+      powerDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/powerDialog.vue')),
+      openDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/openDialog.vue'))
     },
     setup() {
         const userInfo = useUserInfo();
         const { userInfos } = storeToRefs(userInfo);
         const router = useRouter();
         const state = reactive<stateType>({
+            lists: {
+              workerList: [],
+              departList: [],
+              departList2: [],
+              deviceList: [],
+              otherWorks: [],
+              spList: [],
+              riskList: []
+            },
             pageIndex1: 1,
             pageSize1: 10,
             totalSize1: 0,
@@ -364,17 +393,21 @@
               {id:49,name:'电石事业部'},
               {id:50,name:'电力事业部'},
               {id:48,name:'有机化工事业部'},
-              {id:32,name:'甲醇事业部'}
+              {id:32,name:'甲醇事业部'},
+              {id:10,name:'后勤中心'},
+              {id:41,name:'安全环保部'},
+              {id:46,name:'供销中心'},
+              {id:47,name:'技术中心'}
             ],
             workType: [
-                { id: 1, name: '动火作业' },
-                { id: 2, name: '受限空间作业' },
-                { id: 3, name: '吊装作业' },
-                { id: 4, name: '动土作业' },
-                { id: 5, name: '断路作业' },
-                { id: 6, name: '高处作业' },
-                { id: 7, name: '临时用电作业' },
-                { id: 8, name: '盲板抽堵作业' }
+              { id: 1, name: '动火作业' },
+              { id: 2, name: '受限空间作业' },
+              { id: 3, name: '吊装作业' },
+              { id: 4, name: '动土作业' },
+              { id: 5, name: '断路作业' },
+              { id: 6, name: '高处作业' },
+              { id: 7, name: '临时用电作业' },
+              { id: 8, name: '盲板抽堵作业' }
             ],
           statusList: [
             {
@@ -448,7 +481,26 @@
           ],
           timeRange: []
         });
-
+      const fireRef = ref()
+      const plateRef = ref()
+      const spaceRef = ref()
+      const hoistRef = ref()
+      const groundRef = ref()
+      const brokenRef = ref()
+      const heightRef = ref()
+      const powerRef = ref()
+      const openRef = ref()
+      // 页面载入时执行方法
+      onMounted(() => {
+        getListByPage();
+        getAllDepartment()
+        spWorker()
+        getOpList()
+        getAll()
+        getAllDevice()
+        getAllRisks()
+        getOtherWork()
+      });
       const giveTime = () => {
         if (state.timeRange && state.timeRange !== null) {
           state.searPara.startTime = state.timeRange[0];
@@ -458,6 +510,36 @@
           state.searPara.endTime = '';
         }
       };
+
+      const continueRecord = (row)=>{
+        if(row.workType == 1){
+          fireRef.value.openDialog(row,'continue')
+        }
+        if(row.workType == 2){
+          spaceRef.value.openDialog(row,'continue')
+        }
+        if(row.workType == 3){
+          hoistRef.value.openDialog(row,'continue')
+        }
+        if(row.workType == 4){
+          groundRef.value.openDialog(row,'continue')
+        }
+        if(row.workType == 5){
+          brokenRef.value.openDialog(row,'continue')
+        }
+        if(row.workType == 6){
+          heightRef.value.openDialog(row,'continue')
+        }
+        if(row.workType == 7){
+          powerRef.value.openDialog(row,'continue')
+        }
+        if(row.workType == 8){
+          plateRef.value.openDialog(row,'continue')
+        }
+        if(row.workType == 9){
+          openRef.value.openDialog(row,'continue')
+        }
+      }
 
         // 刷新
         const reLoadData = async () => {
@@ -480,6 +562,8 @@
             if (res.data.code === '200') {
                 state.departmentList = JSON.parse(JSON.stringify(res.data.data))
                 recursion(state.departmentList);
+                state.lists.departList = state.departmentList
+                state.lists.departList2 = JSON.parse(JSON.stringify(res.data.data))[0].children[0].children.filter(i=>i.depId == 32 || i.depId == 48 || i.depId == 49 || i.depId == 50 || i.depId == 10 || i.depId == 41 || i.depId == 46 || i.depId == 47)
             } else {
                 ElMessage({
                     type: 'warning',
@@ -538,6 +622,107 @@
                 return nameList.join();
             }
         };
+
+      const spWorker = async ()=>{
+        for(let id of ['18','19']){
+          const res = await workApplyApi().getSpList({roleId: id})
+          if(id == '18'){
+            if (res.data.code === '200') {
+              state.lists.spList.jhList = JSON.parse(JSON.stringify(res.data.data))
+            } else {
+              ElMessage({
+                type: 'warning',
+                message: res.data.msg
+              });
+            }
+          }
+          if(id == '19'){
+            if (res.data.code === '200') {
+              state.lists.spList.sfList = JSON.parse(JSON.stringify(res.data.data))
+            } else {
+              ElMessage({
+                type: 'warning',
+                message: res.data.msg
+              });
+            }
+          }
+        }
+      }
+
+      const getOpList = async()=>{
+        const res = await workApplyApi().getOpList()
+        if(res.data.code == '200'){
+          if(res.data.data && res.data.data.length>0){
+            state.lists.spList.opList = JSON.parse(JSON.stringify(res.data.data)).map(i=>{
+              if(i.certList && i.certList.length>0){
+                i.certList = i.certList.map(item=>{
+                  item['realName'] = i.realName + '(' + item.certTypeName +':'+ item.certExpiredAt + ')'
+                  item['uid'] = item.certNo + ',' + item.certExpiredAt
+                  return item
+                })
+              }
+              return i
+            })
+          }
+        }else{
+          ElMessage({
+            type: 'warning',
+            message: res.data.msg
+          })
+        }
+      }
+
+      // 获取用户列表
+      const getAll = async ()=>{
+        const res = await workApplyApi().getAllUsers()
+        if (res.data.code === '200') {
+          state.lists.workerList = JSON.parse(JSON.stringify(res.data.data))
+        } else {
+          ElMessage({
+            type: 'warning',
+            message: res.data.msg
+          });
+        }
+      };
+
+      // 获取设备列表
+      const getAllDevice = async ()=>{
+        const res = await workApplyApi().getAllDevices()
+        if (res.data.code === '200') {
+          state.lists.deviceList = JSON.parse(JSON.stringify(res.data.data))
+        } else {
+          ElMessage({
+            type: 'warning',
+            message: res.data.msg
+          });
+        }
+      }
+
+      // 获取设备列表
+      const getAllRisks = async ()=>{
+        const res = await workApplyApi().getAllRiskIdentity()
+        if (res.data.code === '200') {
+          // state.allDevices = JSON.parse(JSON.stringify(res.data.data))
+          state.lists.riskList = JSON.parse(JSON.stringify(res.data.data))
+        } else {
+          ElMessage({
+            type: 'warning',
+            message: res.data.msg
+          });
+        }
+      }
+
+      const getOtherWork = async () => {
+        let res = await workApplyApi().getOtherWork({pageSize: 999, pageIndex: 1, searchParams: {workPermitNo: '', workType: null}})
+        if (res.data.code === '200') {
+          state.lists.otherWorks = JSON.parse(JSON.stringify(res.data.data))
+        } else {
+          ElMessage({
+            type: 'warning',
+            message: res.data.msg
+          });
+        }
+      };
 
         // 关键词查询记录
         const searchRecord = async () => {
@@ -610,7 +795,6 @@
         // 导出方法
         const downLoadRecord = (row: any) => {
             // let res = await workApplyApi().postPrinting(data);
-            console.log(row,555)
             axios.post(import.meta.env.VITE_API_URL + `/specialwork9step/work/down/load/pdf`,{ id: row.id},{headers:{'Content-Type': 'application/json','Authorization': `${Cookies.get('token')}`,'uid':`${Cookies.get('uid')}`},responseType: 'blob'}).then(res=>{
                 if (res) {
                     const link = document.createElement('a')
@@ -654,12 +838,6 @@
             await initBackEndControlRoutes();
         };
 
-        // 页面载入时执行方法
-        onMounted(() => {
-            getListByPage();
-            getAllDepartment()
-        });
-
         return {
             View,
             Edit,
@@ -668,6 +846,16 @@
             Plus,
             Finished,
             Download,
+            fireRef,
+            plateRef,
+            spaceRef,
+            hoistRef,
+            groundRef,
+            brokenRef,
+            heightRef,
+            powerRef,
+            openRef,
+          continueRecord,
             giveTime,
             reLoadData,
             toApply,
diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/brokenDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/brokenDialog.vue
index 616cc6b..e576f8e 100644
--- a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/brokenDialog.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/brokenDialog.vue
@@ -1,7 +1,7 @@
 <template>
-	<div class="home-container">
-    <el-dialog v-model="showDialog" title="修改申报" @close="clearFile()" width="80%" :close-on-click-modal="false">
-		<el-form :model="form" label-width="180px" :rules="applyRules" ref="ruleFormRef">
+<!--	<div class="home-container">-->
+    <el-dialog v-model="showDialog" :title="title" @close="clearFile()" width="80%" :close-on-click-modal="false">
+		<el-form :model="form" label-width="180px" :disabled="isDisabled" :rules="applyRules" ref="ruleFormRef">
 			<div class="homeCard">
       <el-row>
         <el-col :span="12">
@@ -18,15 +18,15 @@
           </el-col>
           <el-col :span="12">
             <el-form-item label="作业人" prop="operatorUids">
-              <el-select v-model="form.operatorUids" filterable multiple clearable>
-                <el-option
-                    v-for="item in zyList"
-                    :key="item.uid"
-                    :label="item.realName"
-                    :value="item.uid"
-                />
-              </el-select>
-              <!--            <el-cascader style="width: 100%" v-model="form.operatorUids" :options="lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>-->
+<!--              <el-select v-model="form.operatorUids" filterable multiple clearable>-->
+<!--                <el-option-->
+<!--                    v-for="item in zyList"-->
+<!--                    :key="item.uid"-->
+<!--                    :label="item.realName"-->
+<!--                    :value="item.uid"-->
+<!--                />-->
+<!--              </el-select>-->
+              <el-cascader style="width: 100%" v-model="form.operatorUids" :options="zyList?zyList:lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>
             </el-form-item>
           </el-col>
         </el-row>
@@ -346,11 +346,12 @@
 			</div>
 		</el-form>
 		<div class="applyBtn">
-			<el-button type="primary" size="large" v-throttle plain @click="submitForm(ruleFormRef)">提交申报</el-button>
+      <el-button v-if="title == '修改'" type="primary" size="large" plain v-throttle @click="submitForm(ruleFormRef)">提交修改</el-button>
+      <el-button v-if="title == '续票'" type="primary" size="large" plain v-throttle @click="submitForm(ruleFormRef)">一键续票</el-button>
 		</div>
     <work-select ref="workSelectRef" @refreshWorks="getSelected()"></work-select>
     </el-dialog>
-	</div>
+<!--	</div>-->
 </template>
 
 <script lang="ts">
@@ -369,11 +370,14 @@
   import {userApi} from "/@/api/systemManage/user";
 	interface stateType {
 		form: Object,
+    isDisabled: boolean
+    title: string
 		equipmentDialog: boolean,
     showDialog: boolean
     props1:{},
     depProps:{},
     depProps2:{},
+    cas2Props:{}
     safetyMeasureBasicList: [],
     zyList: []
     fileList: Array<file>,
@@ -399,6 +403,8 @@
 				equipmentDialog: false,
         safetyMeasureBasicList: [],
         zyList: [],
+        isDisabled: false,
+        title: '修改',
 				form: {
           id: null,
           workType: 5,
@@ -453,6 +459,13 @@
           emitPath: false,
           multiple: true
         },
+        cas2Props: {
+          value: 'uid',
+          label: 'realName',
+          multiple: true,
+          checkStrictly: true,
+          children: 'certList'
+        },
         fileList: [],
         imgLimit: 3,
         uploadUrl: '',
@@ -493,17 +506,48 @@
         workSelectRef.value.openDialog(state.form.involveOtherWork)
       }
       const getWorkerList = ()=>{
-        const filteredList = props.lists.spList.opList.filter(i => state.form.workDepIds.includes(i.depId));
+        let idList:Array<any> = []
+        for(let i of state.form.workDepIds){
+          idList = idList.concat(getListFromDep(getIdListsFormDepId(props.lists.departList,i)))
+        }
+        const depLists = [...new Set(idList)]
+        const filteredList = props.lists.spList.opList.filter(i => depLists.includes(i.depId));
         if(filteredList && filteredList.length>0){
           state.zyList = filteredList
         }else{
           state.zyList = props.lists.spList.opList
         }
       }
+
+      const getListFromDep = (dep) =>{
+        let depIds = []
+        depIds.push(dep.depId)
+        if (Array.isArray(dep.children)) {
+          for (let child of dep.children) {
+            depIds = depIds.concat(getListFromDep(child));
+          }
+        }
+        return depIds;
+      }
+
+      const getIdListsFormDepId=(DepList:Array<any>,id:number)=>{
+        for(const i of DepList){
+          if(i.depId === id){
+            return i
+          }
+          if(Array.isArray(i.children)){
+            const node:any = getIdListsFormDepId(i.children,id)
+            if(node){
+              return node
+            }
+          }
+        }
+        return null
+      }
       const getSelected = ()=>{
         state.form.involveOtherWork = workSelectRef.value.selected
       }
-      const openDialog = (row)=>{
+      const openDialog = (row,type)=>{
         clearFile()
         state.zyList = props.lists.spList.opList
         getBasicData()
@@ -512,7 +556,15 @@
             state.form[key] = JSON.parse(JSON.stringify(row))[key];
           }
         })
-        state.form.operatorUids = row.operatorList.map(i=>i.userId)
+        console.log(row.operatorList,'list')
+        state.form.operatorUids = row.operatorList.map(i=>{
+          if(i.certExpiredAt && i.certExpiredAt !==''){
+            return [i.userId,i.certificate + ',' + i.certExpiredAt]
+          }else{
+            return [i.userId]
+          }
+        })
+        console.log(state.form.operatorUids,'id')
         state.form.headUids = row.headList.map(i=>i.userId)
         state.form.analystUids = row.analystList.map(i=>i.userId)
         state.form.guardianUids = row.guardianList.map(i=>i.userId)
@@ -541,6 +593,16 @@
           state.form.workDepIds = row.workDepList.map(i=>i.workDepId)
         }else{
           state.form.workDepIds.push(row.workDepId)
+        }
+        if(type == 'edit'){
+          state.isDisabled = false
+          state.title = '修改'
+        }else{
+          if(!state.form.id){
+            state.form.id = row.workApplyId
+          }
+          state.isDisabled = true
+          state.title = '续票'
         }
         getWorkerList()
         state.showDialog = true
@@ -660,6 +722,37 @@
         return index === 0;
       }
 
+      const singleSelect=(value,type)=>{
+        let selected = value
+        if(selected.length>1){
+          const temp = []
+          for(let i of selected){
+            const index = temp.findIndex(item => item[0] === i[0]);
+            if (index !== -1) {
+              temp[index] = i
+            }else{
+              temp.push(i)
+            }
+          }
+          if(type == '作业人'){state.form.operatorUids = JSON.parse(JSON.stringify(temp))}
+          // if(type == '分析人'){state.form.analystUids = temp}
+          if(type == '监护人'){state.form.guardianUids = temp}
+          if(type == '确认人'){state.form.safetyMeasureUids = temp}
+          if(type == '结束人'){state.form.startOrEndUids = temp}
+        }
+      }
+
+      const transformArr = (arr: Array<any>)=>{
+        return arr.map((i)=>{
+          return {
+            uid: i[0],
+            certificate: i[1]?i[1].split(',')[0]:'',
+            certExpiredAt: i[1]?i[1].split(',')[1]:'',
+            certTypeName: ''
+          }
+        })
+      }
+
       const transform2Arr = (arr: Array<any>)=>{
         return arr.map((i)=>{
           return {
@@ -700,36 +793,63 @@
             state.form.workDetail.bcPath = state.form.workDetail.bcPath.join(',')
             state.form.riskIdentification = state.form.riskIdentification.join(',')
             const {...data} = state.form
-            data.operatorUids = transform2Arr(data.operatorUids)
+            data.operatorUids = transformArr(data.operatorUids)
             data.headUids = transform2Arr(data.headUids)
             data.guardianUids = transform2Arr(data.guardianUids)
             data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids)
             data.startOrEndUids = transform2Arr(data.startOrEndUids)
             data.acceptUids = transform2Arr(data.acceptUids)
             data.lastApprover = transform2Obj(data.lastApprover)
-            const res = await workApplyApi().modBrokenApply(data)
-            if (res.data.code === '200') {
-              ElMessage({
-                type: 'success',
-                message: '提交成功!'
-              });
-              formEl.resetFields()
-              state.form.guardianUids = []
-              state.form.involveOtherWork = []
-              getBasicData()
-              state.form.workDetail.bcPath = []
-              state.fileList = []
-              clearFile()
-              context.emit('refresh')
-            } 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(',')
-              state.form.riskIdentification = state.form.riskIdentification.split(',')
+            if(state.title == '修改'){
+              const res = await workApplyApi().modBrokenApply(data)
+              if (res.data.code === '200') {
+                ElMessage({
+                  type: 'success',
+                  message: '提交成功!'
+                });
+                formEl.resetFields()
+                state.form.guardianUids = []
+                state.form.involveOtherWork = []
+                getBasicData()
+                state.form.workDetail.bcPath = []
+                state.fileList = []
+                clearFile()
+                context.emit('refresh')
+              } 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(',')
+                state.form.riskIdentification = state.form.riskIdentification.split(',')
+              }
+            }else{
+              const res = await workApplyApi().renewalBrokenCircuit(data)
+              if (res.data.code === '200') {
+                ElMessage({
+                  type: 'success',
+                  message: '续票成功!'
+                });
+                formEl.resetFields()
+                state.form.guardianUids = []
+                state.form.involveOtherWork = []
+                getBasicData()
+                state.form.workDetail.bcPath = []
+                state.fileList = []
+                clearFile()
+                context.emit('refresh')
+              } 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(',')
+                state.form.riskIdentification = state.form.riskIdentification.split(',')
+              }
             }
           } else {
             console.log('error submit!', fields)
@@ -838,6 +958,7 @@
 				await initBackEndControlRoutes();
 			};
 			return {
+        singleSelect,
 				renderMenu,
         getBasicData,
         getWorkerList,
diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/detailLog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/detailLog.vue
index ce336ee..74e16e9 100644
--- a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/detailLog.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/detailLog.vue
@@ -158,7 +158,10 @@
         <div class="d-cont" v-else>{{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 class="d-tit">作业人</div>
+        <div class="d-cont">
+          {{details.operatorList.map(i=>{return i.userName + '(' + i.phone + (i.certificate ? `,证书编号:${i.certificate}`:'')  + ')'}).join('、')}}
+        </div>
       </div>
       <div class="d-row" v-if="details.involveOtherWork && details.involveOtherWork !== ''">
         <div class="d-tit">关联其他作业</div><div class="d-cont">{{details.involveOtherWork}}</div>
diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/fireDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/fireDialog.vue
index 3d1d4bd..9c43bdb 100644
--- a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/fireDialog.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/fireDialog.vue
@@ -1,7 +1,7 @@
 <template>
-	<div class="home-container">
-    <el-dialog v-model="showDialog" title="修改申报" @close="clearFile()" width="80%" :close-on-click-modal="false">
-		<el-form :model="form" label-width="180px" :rules="applyRules" ref="ruleFormRef">
+<!--	<div class="home-container">-->
+    <el-dialog v-model="showDialog" :title="title" @close="clearFile()" width="80%" :close-on-click-modal="false">
+		<el-form :model="form" label-width="180px" :disabled="isDisabled" :rules="applyRules" ref="ruleFormRef">
 			<div class="homeCard">
       <el-row>
         <el-col :span="12">
@@ -97,15 +97,15 @@
         </el-col>
         <el-col :span="12">
           <el-form-item label="作业人" prop="operatorUids">
-            <el-select v-model="form.operatorUids" filterable multiple clearable>
-              <el-option
-                  v-for="item in zyList"
-                  :key="item.uid"
-                  :label="item.realName"
-                  :value="item.uid"
-              />
-            </el-select>
-            <!--            <el-cascader style="width: 100%" v-model="form.operatorUids" :options="lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>-->
+<!--            <el-select v-model="form.operatorUids" filterable multiple clearable>-->
+<!--              <el-option-->
+<!--                  v-for="item in zyList"-->
+<!--                  :key="item.uid"-->
+<!--                  :label="item.realName"-->
+<!--                  :value="item.uid"-->
+<!--              />-->
+<!--            </el-select>-->
+            <el-cascader style="width: 100%" v-model="form.operatorUids" :options="zyList?zyList:lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>
           </el-form-item>
         </el-col>
 			</el-row>
@@ -344,11 +344,12 @@
 			</div>
 		</el-form>
 		<div class="applyBtn">
-			<el-button type="primary" size="large" plain v-throttle @click="submitForm(ruleFormRef)">提交修改</el-button>
+			<el-button v-if="title == '修改'" type="primary" size="large" plain v-throttle @click="submitForm(ruleFormRef)">提交修改</el-button>
+      <el-button v-if="title == '续票'" type="primary" size="large" plain v-throttle @click="submitForm(ruleFormRef)">一键续票</el-button>
 		</div>
     <work-select ref="workSelectRef" @refreshWorks="getSelected()"></work-select>
     </el-dialog>
-	</div>
+<!--	</div>-->
 </template>
 
 <script lang="ts">
@@ -365,6 +366,8 @@
   import {userApi} from "/@/api/systemManage/user";
 	interface stateType {
 		form: Object,
+    isDisabled: boolean
+    title: string
 		workLevelList: Array<any>,
     fireWorkList: Array<any>,
 		equipmentDialog: boolean,
@@ -373,6 +376,7 @@
     zyList: []
     props1:{}
     depProps:{}
+    cas2Props: {}
     safetyMeasureBasicList: []
 	}
 	export default defineComponent({
@@ -388,6 +392,8 @@
 				equipmentDialog: false,
         safetyMeasureBasicList: [],
         zyList: [],
+        isDisabled: false,
+        title: '修改',
 				form: {
           id: null,
           workType: 1,
@@ -484,6 +490,13 @@
           value: 'depId',
           emitPath: false
         },
+        cas2Props: {
+          value: 'uid',
+          label: 'realName',
+          multiple: true,
+          checkStrictly: true,
+          children: 'certList'
+        },
         depProps:{
           expandTrigger: 'hover',
           label: 'depName',
@@ -526,14 +539,45 @@
         console.log('false loading')
       })
       const getWorkerList = ()=>{
-        const filteredList = props.lists.spList.opList.filter(i => state.form.workDepIds.includes(i.depId));
+        let idList:Array<any> = []
+        for(let i of state.form.workDepIds){
+          idList = idList.concat(getListFromDep(getIdListsFormDepId(props.lists.departList,i)))
+        }
+        const depLists = [...new Set(idList)]
+        const filteredList = props.lists.spList.opList.filter(i => depLists.includes(i.depId));
         if(filteredList && filteredList.length>0){
           state.zyList = filteredList
         }else{
           state.zyList = props.lists.spList.opList
         }
       }
-      const openDialog = (row)=>{
+
+      const getListFromDep = (dep) =>{
+        let depIds = []
+        depIds.push(dep.depId)
+        if (Array.isArray(dep.children)) {
+          for (let child of dep.children) {
+            depIds = depIds.concat(getListFromDep(child));
+          }
+        }
+        return depIds;
+      }
+
+      const getIdListsFormDepId=(DepList:Array<any>,id:number)=>{
+        for(const i of DepList){
+          if(i.depId === id){
+            return i
+          }
+          if(Array.isArray(i.children)){
+            const node:any = getIdListsFormDepId(i.children,id)
+            if(node){
+              return node
+            }
+          }
+        }
+        return null
+      }
+      const openDialog = (row,type)=>{
         clearFile()
         state.zyList = props.lists.spList.opList
         getBasicData()
@@ -542,7 +586,13 @@
             state.form[key] = JSON.parse(JSON.stringify(row))[key]
           }
         })
-        state.form.operatorUids = row.operatorList.map(i=>i.userId)
+        state.form.operatorUids = row.operatorList.map(i=>{
+          if(i.certExpiredAt && i.certExpiredAt !==''){
+            return [i.userId,i.certificate + ',' + i.certExpiredAt]
+          }else{
+            return [i.userId]
+          }
+        })
         state.form.headUids = row.headList.map(i=>i.userId)
         state.form.analystUids = row.analystList.map(i=>i.userId)
         state.form.guardianUids = row.guardianList.map(i=>i.userId)
@@ -570,6 +620,16 @@
             state.form.workDetail.other = state.form.workDetail.methodList[i]
             state.form.workDetail.methodList[i] = '其他'
           }
+        }
+        if(type == 'edit'){
+          state.isDisabled = false
+          state.title = '修改'
+        }else{
+          if(!state.form.id){
+            state.form.id = row.workApplyId
+          }
+          state.isDisabled = true
+          state.title = '续票'
         }
         getWorkerList()
         state.showDialog = true
@@ -621,6 +681,26 @@
         // state.form.applyDepId = state.form.depIdList[state.form.depIdList.length - 1]
         // state.form.seDepId = state.form.depIdList[0]
         state.form.seDepId = findTopLevelId(props.lists.departList2,state.form.applyDepId)
+      }
+
+      const singleSelect=(value,type)=>{
+        let selected = value
+        if(selected.length>1){
+          const temp = []
+          for(let i of selected){
+            const index = temp.findIndex(item => item[0] === i[0]);
+            if (index !== -1) {
+              temp[index] = i
+            }else{
+              temp.push(i)
+            }
+          }
+          if(type == '作业人'){state.form.operatorUids = JSON.parse(JSON.stringify(temp))}
+          // if(type == '分析人'){state.form.analystUids = temp}
+          if(type == '监护人'){state.form.guardianUids = temp}
+          if(type == '确认人'){state.form.safetyMeasureUids = temp}
+          if(type == '结束人'){state.form.startOrEndUids = temp}
+        }
       }
 
       // 获取基础数据
@@ -680,9 +760,9 @@
         return arr.map((i)=>{
           return {
             uid: i[0],
-            certificate: i[1].split(',')[0],
-            certExpiredAt: i[1].split(',')[1],
-            certTypeName: i[1].split(',')[2]
+            certificate: i[1]?i[1].split(',')[0]:'',
+            certExpiredAt: i[1]?i[1].split(',')[1]:'',
+            certTypeName: ''
           }
         })
       }
@@ -731,7 +811,8 @@
               return item
             })
             data.workDetail.workMethod = data.workDetail.methodList.join(',')
-            data.operatorUids = transform2Arr(data.operatorUids)
+            // data.operatorUids = transform2Arr(data.operatorUids)
+            data.operatorUids = transformArr(data.operatorUids)
             data.headUids = transform2Arr(data.headUids)
             // data.analystUids = transformArr(data.analystUids)
             data.guardianUids = transform2Arr(data.guardianUids)
@@ -739,25 +820,46 @@
             data.startOrEndUids = transform2Arr(data.startOrEndUids)
             data.acceptUids = transform2Arr(data.acceptUids)
             data.lastApprover = transform2EObj(data.lastApprover)
-            const res = await workApplyApi().modFireApply(data)
-            if (res.data.code === '200') {
-              ElMessage({
-                type: 'success',
-                message: '提交成功!'
-              });
-              formEl.resetFields()
-              state.form.guardianUids = []
-              state.form.involveOtherWork = []
-              getBasicData()
-              clearFile()
-              context.emit('refresh')
-            } else {
-              ElMessage({
-                type: 'warning',
-                message: res.data.msg
-              })
-              // state.form.involveOtherWork = state.form.involveOtherWork.split(',')
-              state.form.riskIdentification = state.form.riskIdentification.split(',')
+            if(state.title == '修改'){
+              const res = await workApplyApi().modFireApply(data)
+              if (res.data.code === '200') {
+                ElMessage({
+                  type: 'success',
+                  message: '提交成功!'
+                });
+                formEl.resetFields()
+                state.form.guardianUids = []
+                state.form.involveOtherWork = []
+                getBasicData()
+                clearFile()
+                context.emit('refresh')
+              } else {
+                ElMessage({
+                  type: 'warning',
+                  message: res.data.msg
+                })
+                state.form.riskIdentification = state.form.riskIdentification.split(',')
+              }
+            }else{
+              const res = await workApplyApi().renewalHot(data)
+              if (res.data.code === '200') {
+                ElMessage({
+                  type: 'success',
+                  message: '续票成功!'
+                });
+                formEl.resetFields()
+                state.form.guardianUids = []
+                state.form.involveOtherWork = []
+                getBasicData()
+                clearFile()
+                context.emit('refresh')
+              } else {
+                ElMessage({
+                  type: 'warning',
+                  message: res.data.msg
+                })
+                state.form.riskIdentification = state.form.riskIdentification.split(',')
+              }
             }
           } else {
             console.log('error submit!', fields)
@@ -806,6 +908,7 @@
         submitForm,
         findParent,
         openWorkSelect,
+        singleSelect,
         getSelected,
         openDialog,
         workSelectRef,
@@ -822,7 +925,6 @@
 <style scoped lang="scss">
 	.home-container {
 		width: 100%;
-    height: 100vh;
 		overflow: hidden;
     overflow-y: scroll;
     &::-webkit-scrollbar{
diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/groundDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/groundDialog.vue
index bb0cce6..8c378d1 100644
--- a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/groundDialog.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/groundDialog.vue
@@ -1,7 +1,7 @@
 <template>
-	<div class="home-container">
-    <el-dialog v-model="showDialog" title="修改申报" @close="clearFile()" width="80%" :close-on-click-modal="false">
-		<el-form :model="form" label-width="180px" :rules="applyRules" ref="ruleFormRef">
+<!--	<div class="home-container">-->
+    <el-dialog v-model="showDialog" :title="title" @close="clearFile()" width="80%" :close-on-click-modal="false">
+		<el-form :model="form" label-width="180px" :disabled="isDisabled" :rules="applyRules" ref="ruleFormRef">
 			<div class="homeCard">
       <el-row>
         <el-col :span="12">
@@ -43,15 +43,15 @@
         </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 zyList"
-                  :key="item.uid"
-                  :label="item.realName"
-                  :value="item.uid"
-              />
-            </el-select>
-            <!--            <el-cascader style="width: 100%" v-model="form.operatorUids" :options="lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>-->
+<!--            <el-select v-model="form.operatorUids" multiple clearable>-->
+<!--              <el-option-->
+<!--                  v-for="item in zyList"-->
+<!--                  :key="item.uid"-->
+<!--                  :label="item.realName"-->
+<!--                  :value="item.uid"-->
+<!--              />-->
+<!--            </el-select>-->
+            <el-cascader style="width: 100%" v-model="form.operatorUids" :options="zyList?zyList:lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>
           </el-form-item>
         </el-col>
 			</el-row>
@@ -329,14 +329,15 @@
 			</div>
 		</el-form>
 		<div class="applyBtn">
-			<el-button type="primary" size="large" v-throttle plain @click="submitForm(ruleFormRef)">提交申报</el-button>
+      <el-button v-if="title == '修改'" type="primary" size="large" plain v-throttle @click="submitForm(ruleFormRef)">提交修改</el-button>
+      <el-button v-if="title == '续票'" type="primary" size="large" plain v-throttle @click="submitForm(ruleFormRef)">一键续票</el-button>
 		</div>
     <work-select ref="workSelectRef" @refreshWorks="getSelected()"></work-select>
     <el-dialog v-model="dialogVisible">
       <img w-full :src="dialogImageUrl" alt="Preview Image" />
     </el-dialog>
     </el-dialog>
-	</div>
+<!--	</div>-->
 </template>
 
 <script lang="ts">
@@ -353,11 +354,14 @@
   import axios from "axios";
   import {userApi} from "/@/api/systemManage/user";
 	interface stateType {
-		form: Object,
+		form: Object
+    isDisabled: boolean
+    title: string
 		equipmentDialog: boolean,
     showDialog: boolean
     props1:{},
     depProps:{},
+    cas2Props: {}
     safetyMeasureBasicList: [],
     zyList: []
     fileList: Array<file>,
@@ -383,6 +387,8 @@
 				equipmentDialog: false,
         safetyMeasureBasicList: [],
         zyList: [],
+        isDisabled: false,
+        title: '修改',
 				form: {
           id: null,
           workType: 4,
@@ -426,6 +432,13 @@
           checkStrictly: true,
           emitPath: false
         },
+        cas2Props: {
+          value: 'uid',
+          label: 'realName',
+          multiple: true,
+          checkStrictly: true,
+          children: 'certList'
+        },
         fileList: [],
         imgLimit: 3,
         uploadUrl: '',
@@ -463,18 +476,49 @@
         workSelectRef.value.openDialog(state.form.involveOtherWork)
       }
       const getWorkerList = ()=>{
-        const filteredList = props.lists.spList.opList.filter(i => state.form.workDepIds.includes(i.depId));
+        let idList:Array<any> = []
+        for(let i of state.form.workDepIds){
+          idList = idList.concat(getListFromDep(getIdListsFormDepId(props.lists.departList,i)))
+        }
+        const depLists = [...new Set(idList)]
+        const filteredList = props.lists.spList.opList.filter(i => depLists.includes(i.depId));
         if(filteredList && filteredList.length>0){
           state.zyList = filteredList
         }else{
           state.zyList = props.lists.spList.opList
         }
       }
+
+      const getListFromDep = (dep) =>{
+        let depIds = []
+        depIds.push(dep.depId)
+        if (Array.isArray(dep.children)) {
+          for (let child of dep.children) {
+            depIds = depIds.concat(getListFromDep(child));
+          }
+        }
+        return depIds;
+      }
+
+      const getIdListsFormDepId=(DepList:Array<any>,id:number)=>{
+        for(const i of DepList){
+          if(i.depId === id){
+            return i
+          }
+          if(Array.isArray(i.children)){
+            const node:any = getIdListsFormDepId(i.children,id)
+            if(node){
+              return node
+            }
+          }
+        }
+        return null
+      }
       const getSelected = ()=>{
         state.form.involveOtherWork = workSelectRef.value.selected
       }
 
-      const openDialog = (row)=>{
+      const openDialog = (row,type)=>{
         clearFile()
         state.zyList = props.lists.spList.opList
         getBasicData()
@@ -483,7 +527,13 @@
             state.form[key] = JSON.parse(JSON.stringify(row))[key];
           }
         })
-        state.form.operatorUids = row.operatorList.map(i=>i.userId)
+        state.form.operatorUids = row.operatorList.map(i=>{
+          if(i.certExpiredAt && i.certExpiredAt !==''){
+            return [i.userId,i.certificate + ',' + i.certExpiredAt]
+          }else{
+            return [i.userId]
+          }
+        })
         state.form.headUids = row.headList.map(i=>i.userId)
         state.form.analystUids = row.analystList.map(i=>i.userId)
         state.form.guardianUids = row.guardianList.map(i=>i.userId)
@@ -511,6 +561,16 @@
           state.form.workDepIds = row.workDepList.map(i=>i.workDepId)
         }else{
           state.form.workDepIds.push(row.workDepId)
+        }
+        if(type == 'edit'){
+          state.isDisabled = false
+          state.title = '修改'
+        }else{
+          if(!state.form.id){
+            state.form.id = row.workApplyId
+          }
+          state.isDisabled = true
+          state.title = '续票'
         }
         getWorkerList()
         state.showDialog = true
@@ -627,13 +687,33 @@
         return index === 0;
       }
 
+      const singleSelect=(value,type)=>{
+        let selected = value
+        if(selected.length>1){
+          const temp = []
+          for(let i of selected){
+            const index = temp.findIndex(item => item[0] === i[0]);
+            if (index !== -1) {
+              temp[index] = i
+            }else{
+              temp.push(i)
+            }
+          }
+          if(type == '作业人'){state.form.operatorUids = JSON.parse(JSON.stringify(temp))}
+          // if(type == '分析人'){state.form.analystUids = temp}
+          if(type == '监护人'){state.form.guardianUids = temp}
+          if(type == '确认人'){state.form.safetyMeasureUids = temp}
+          if(type == '结束人'){state.form.startOrEndUids = temp}
+        }
+      }
+
       const transformArr = (arr: Array<any>)=>{
         return arr.map((i)=>{
           return {
             uid: i[0],
-            certificate: i[1].split(',')[0],
-            certExpiredAt: i[1].split(',')[1],
-            certTypeName: i[1].split(',')[2]
+            certificate: i[1]?i[1].split(',')[0]:'',
+            certExpiredAt: i[1]?i[1].split(',')[1]:'',
+            certTypeName: ''
           }
         })
       }
@@ -671,41 +751,64 @@
                 return
               }
             }
-            // if(Array.isArray(state.form.involveOtherWork)){
-            //   state.form.involveOtherWork = state.form.involveOtherWork.join(',')
-            // }
             state.form.workDetail.gbPath = state.form.workDetail.gbPath.join(',')
             state.form.riskIdentification = state.form.riskIdentification.join(',')
             const {...data} = state.form
-            data.operatorUids = transform2Arr(data.operatorUids)
+            data.operatorUids = transformArr(data.operatorUids)
             data.headUids = transform2Arr(data.headUids)
             data.guardianUids = transform2Arr(data.guardianUids)
             data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids)
             data.startOrEndUids = transform2Arr(data.startOrEndUids)
             data.acceptUids = transform2Arr(data.acceptUids)
             data.lastApprover = transform2Obj(data.lastApprover)
-            const res = await workApplyApi().modGroundApply(data)
-            if (res.data.code === '200') {
-              ElMessage({
-                type: 'success',
-                message: '提交成功!'
-              });
-              formEl.resetFields()
-              state.form.guardianUids = []
-              state.form.involveOtherWork = []
-              getBasicData()
-              state.form.workDetail.gbPath = []
-              state.fileList = []
-              clearFile()
-              context.emit('refresh')
-            } else {
-              ElMessage({
-                type: 'warning',
-                message: res.data.msg
-              });
-              // state.form.involveOtherWork = state.form.involveOtherWork.split(',')
-              state.form.workDetail.gbPath = state.form.workDetail.gbPath.split(',')
-              state.form.riskIdentification = state.form.riskIdentification.split(',')
+            if(state.title == '修改'){
+              const res = await workApplyApi().modGroundApply(data)
+              if (res.data.code === '200') {
+                ElMessage({
+                  type: 'success',
+                  message: '提交成功!'
+                });
+                formEl.resetFields()
+                state.form.guardianUids = []
+                state.form.involveOtherWork = []
+                getBasicData()
+                state.form.workDetail.gbPath = []
+                state.fileList = []
+                clearFile()
+                context.emit('refresh')
+              } else {
+                ElMessage({
+                  type: 'warning',
+                  message: res.data.msg
+                });
+                // state.form.involveOtherWork = state.form.involveOtherWork.split(',')
+                state.form.workDetail.gbPath = state.form.workDetail.gbPath.split(',')
+                state.form.riskIdentification = state.form.riskIdentification.split(',')
+              }
+            }else{
+              const res = await workApplyApi().renewalGroundBreaking(data)
+              if (res.data.code === '200') {
+                ElMessage({
+                  type: 'success',
+                  message: '续票成功!'
+                });
+                formEl.resetFields()
+                state.form.guardianUids = []
+                state.form.involveOtherWork = []
+                getBasicData()
+                state.form.workDetail.gbPath = []
+                state.fileList = []
+                clearFile()
+                context.emit('refresh')
+              } else {
+                ElMessage({
+                  type: 'warning',
+                  message: res.data.msg
+                });
+                // state.form.involveOtherWork = state.form.involveOtherWork.split(',')
+                state.form.workDetail.gbPath = state.form.workDetail.gbPath.split(',')
+                state.form.riskIdentification = state.form.riskIdentification.split(',')
+              }
             }
           } else {
             console.log('error submit!', fields)
@@ -845,6 +948,7 @@
 				await initBackEndControlRoutes();
 			};
 			return {
+        singleSelect,
 				renderMenu,
         getBasicData,
         getWorkerList,
diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/heightDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/heightDialog.vue
index e99ba6e..ac98510 100644
--- a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/heightDialog.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/heightDialog.vue
@@ -1,7 +1,7 @@
 <template>
-	<div class="home-container">
-    <el-dialog v-model="showDialog" title="修改申报" @close="clearFile()" width="80%" :close-on-click-modal="false">
-		<el-form :model="form" label-width="180px" :rules="applyRules" ref="ruleFormRef">
+<!--	<div class="home-container">-->
+    <el-dialog v-model="showDialog" :title="title" @close="clearFile()" width="80%" :close-on-click-modal="false">
+		<el-form :model="form" label-width="180px" :disabled="isDisabled" :rules="applyRules" ref="ruleFormRef">
 			<div class="homeCard">
       <el-row>
         <el-col :span="12">
@@ -76,15 +76,15 @@
         </el-col>
         <el-col :span="12">
           <el-form-item label="作业人" prop="operatorUids">
-            <el-select v-model="form.operatorUids" filterable multiple clearable>
-              <el-option
-                  v-for="item in zyList"
-                  :key="item.uid"
-                  :label="item.realName"
-                  :value="item.uid"
-              />
-            </el-select>
-            <!--            <el-cascader style="width: 100%" v-model="form.operatorUids" :options="lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>-->
+<!--            <el-select v-model="form.operatorUids" filterable multiple clearable>-->
+<!--              <el-option-->
+<!--                  v-for="item in zyList"-->
+<!--                  :key="item.uid"-->
+<!--                  :label="item.realName"-->
+<!--                  :value="item.uid"-->
+<!--              />-->
+<!--            </el-select>-->
+            <el-cascader style="width: 100%" v-model="form.operatorUids" :options="zyList?zyList:lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>
           </el-form-item>
         </el-col>
 			</el-row>
@@ -275,11 +275,12 @@
 			</div>
 		</el-form>
 		<div class="applyBtn">
-			<el-button type="primary" size="large" v-throttle plain @click="submitForm(ruleFormRef)">提交申报</el-button>
+      <el-button v-if="title == '修改'" type="primary" size="large" plain v-throttle @click="submitForm(ruleFormRef)">提交修改</el-button>
+      <el-button v-if="title == '续票'" type="primary" size="large" plain v-throttle @click="submitForm(ruleFormRef)">一键续票</el-button>
 		</div>
     <work-select ref="workSelectRef" @refreshWorks="getSelected()"></work-select>
     </el-dialog>
-	</div>
+<!--	</div>-->
 </template>
 
 <script lang="ts">
@@ -296,11 +297,14 @@
   import {userApi} from "/@/api/systemManage/user";
 	interface stateType {
 		form: Object,
+    isDisabled: boolean
+    title: string
 		workLevelList: Array<any>,
 		equipmentDialog: boolean,
     showDialog: boolean
     props1:{},
     depProps:{},
+    cas2Props:{}
     safetyMeasureBasicList: []
     zyList: []
     tabLoading: boolean
@@ -318,6 +322,8 @@
 				equipmentDialog: false,
         safetyMeasureBasicList: [],
         zyList: [],
+        isDisabled: false,
+        title: '修改',
 				form: {
           id: null,
           workType: 6,
@@ -376,6 +382,13 @@
           multiple: true,
           checkStrictly: true,
           emitPath: false
+        },
+        cas2Props: {
+          value: 'uid',
+          label: 'realName',
+          multiple: true,
+          checkStrictly: true,
+          children: 'certList'
         }
 			});
 			const ruleFormRef = ref<FormInstance>()
@@ -407,17 +420,48 @@
         workSelectRef.value.openDialog(state.form.involveOtherWork)
       }
       const getWorkerList = ()=>{
-        const filteredList = props.lists.spList.opList.filter(i => state.form.workDepIds.includes(i.depId));
+        let idList:Array<any> = []
+        for(let i of state.form.workDepIds){
+          idList = idList.concat(getListFromDep(getIdListsFormDepId(props.lists.departList,i)))
+        }
+        const depLists = [...new Set(idList)]
+        const filteredList = props.lists.spList.opList.filter(i => depLists.includes(i.depId));
         if(filteredList && filteredList.length>0){
           state.zyList = filteredList
         }else{
           state.zyList = props.lists.spList.opList
         }
       }
+
+      const getListFromDep = (dep) =>{
+        let depIds = []
+        depIds.push(dep.depId)
+        if (Array.isArray(dep.children)) {
+          for (let child of dep.children) {
+            depIds = depIds.concat(getListFromDep(child));
+          }
+        }
+        return depIds;
+      }
+
+      const getIdListsFormDepId=(DepList:Array<any>,id:number)=>{
+        for(const i of DepList){
+          if(i.depId === id){
+            return i
+          }
+          if(Array.isArray(i.children)){
+            const node:any = getIdListsFormDepId(i.children,id)
+            if(node){
+              return node
+            }
+          }
+        }
+        return null
+      }
       const getSelected = ()=>{
         state.form.involveOtherWork = workSelectRef.value.selected
       }
-      const openDialog = (row)=>{
+      const openDialog = (row,type)=>{
         clearFile()
         state.zyList = props.lists.spList.opList
         getBasicData()
@@ -426,7 +470,13 @@
             state.form[key] = JSON.parse(JSON.stringify(row))[key];
           }
         })
-        state.form.operatorUids = row.operatorList.map(i=>i.userId)
+        state.form.operatorUids = row.operatorList.map(i=>{
+          if(i.certExpiredAt && i.certExpiredAt !==''){
+            return [i.userId,i.certificate + ',' + i.certExpiredAt]
+          }else{
+            return [i.userId]
+          }
+        })
         state.form.headUids = row.headList.map(i=>i.userId)
         state.form.analystUids = row.analystList.map(i=>i.userId)
         state.form.guardianUids = row.guardianList.map(i=>i.userId)
@@ -447,6 +497,16 @@
           state.form.workDepIds = row.workDepList.map(i=>i.workDepId)
         }else{
           state.form.workDepIds.push(row.workDepId)
+        }
+        if(type == 'edit'){
+          state.isDisabled = false
+          state.title = '修改'
+        }else{
+          if(!state.form.id){
+            state.form.id = row.workApplyId
+          }
+          state.isDisabled = true
+          state.title = '续票'
         }
         getWorkerList()
         state.showDialog = true
@@ -561,6 +621,37 @@
         return index === 0;
       }
 
+      const singleSelect=(value,type)=>{
+        let selected = value
+        if(selected.length>1){
+          const temp = []
+          for(let i of selected){
+            const index = temp.findIndex(item => item[0] === i[0]);
+            if (index !== -1) {
+              temp[index] = i
+            }else{
+              temp.push(i)
+            }
+          }
+          if(type == '作业人'){state.form.operatorUids = JSON.parse(JSON.stringify(temp))}
+          // if(type == '分析人'){state.form.analystUids = temp}
+          if(type == '监护人'){state.form.guardianUids = temp}
+          if(type == '确认人'){state.form.safetyMeasureUids = temp}
+          if(type == '结束人'){state.form.startOrEndUids = temp}
+        }
+      }
+
+      const transformArr = (arr: Array<any>)=>{
+        return arr.map((i)=>{
+          return {
+            uid: i[0],
+            certificate: i[1]?i[1].split(',')[0]:'',
+            certExpiredAt: i[1]?i[1].split(',')[1]:'',
+            certTypeName: ''
+          }
+        })
+      }
+
       const transform2Arr = (arr: Array<any>)=>{
         return arr.map((i)=>{
           return {
@@ -599,32 +690,55 @@
             // }
             state.form.riskIdentification = state.form.riskIdentification.join(',')
             const {...data} = state.form
-            data.operatorUids = transform2Arr(data.operatorUids)
+            data.operatorUids = transformArr(data.operatorUids)
             data.headUids = transform2Arr(data.headUids)
             data.guardianUids = transform2Arr(data.guardianUids)
             data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids)
             data.startOrEndUids = transform2Arr(data.startOrEndUids)
             data.acceptUids = transform2Arr(data.acceptUids)
             data.lastApprover = transform2Obj(data.lastApprover)
-            const res = await workApplyApi().modHeightApply(data)
-            if (res.data.code === '200') {
-              ElMessage({
-                type: 'success',
-                message: '提交成功!'
-              });
-              formEl.resetFields()
-              state.form.guardianUids = []
-              state.form.involveOtherWork = []
-              getBasicData()
-              clearFile()
-              context.emit('refresh')
-            } else {
-              ElMessage({
-                type: 'warning',
-                message: res.data.msg
-              });
-              // state.form.involveOtherWork = state.form.involveOtherWork.split(',')
-              state.form.riskIdentification = state.form.riskIdentification.split(',')
+            if(state.title == '修改'){
+              const res = await workApplyApi().modHeightApply(data)
+              if (res.data.code === '200') {
+                ElMessage({
+                  type: 'success',
+                  message: '提交成功!'
+                });
+                formEl.resetFields()
+                state.form.guardianUids = []
+                state.form.involveOtherWork = []
+                getBasicData()
+                clearFile()
+                context.emit('refresh')
+              } else {
+                ElMessage({
+                  type: 'warning',
+                  message: res.data.msg
+                });
+                // state.form.involveOtherWork = state.form.involveOtherWork.split(',')
+                state.form.riskIdentification = state.form.riskIdentification.split(',')
+              }
+            }else{
+              const res = await workApplyApi().renewalHight(data)
+              if (res.data.code === '200') {
+                ElMessage({
+                  type: 'success',
+                  message: '续票成功!'
+                });
+                formEl.resetFields()
+                state.form.guardianUids = []
+                state.form.involveOtherWork = []
+                getBasicData()
+                clearFile()
+                context.emit('refresh')
+              } else {
+                ElMessage({
+                  type: 'warning',
+                  message: res.data.msg
+                });
+                // state.form.involveOtherWork = state.form.involveOtherWork.split(',')
+                state.form.riskIdentification = state.form.riskIdentification.split(',')
+              }
             }
           } else {
             console.log('error submit!', fields)
@@ -673,6 +787,7 @@
 				await initBackEndControlRoutes();
 			};
 			return {
+        singleSelect,
 				renderMenu,
         getBasicData,
         getWorkerList,
diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/hoistDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/hoistDialog.vue
index 6ec322f..c3a6f9b 100644
--- a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/hoistDialog.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/hoistDialog.vue
@@ -1,7 +1,7 @@
 <template>
-	<div class="home-container">
-    <el-dialog v-model="showDialog" title="修改申报" @close="clearFile()" width="80%" :close-on-click-modal="false">
-		<el-form :model="form" label-width="180px" :rules="applyRules" ref="ruleFormRef">
+<!--	<div class="home-container">-->
+    <el-dialog v-model="showDialog" :title="title" @close="clearFile()" width="80%" :close-on-click-modal="false">
+		<el-form :model="form" label-width="180px" :disabled="isDisabled" :rules="applyRules" ref="ruleFormRef">
 			<div class="homeCard">
       <el-row>
         <el-col :span="12">
@@ -86,15 +86,15 @@
         </el-col>
         <el-col :span="12">
           <el-form-item label="作业人" prop="operatorUids">
-            <el-select v-model="form.operatorUids" filterable multiple clearable>
-              <el-option
-                  v-for="item in zyList"
-                  :key="item.uid"
-                  :label="item.realName"
-                  :value="item.uid"
-              />
-            </el-select>
-            <!--            <el-cascader style="width: 100%" v-model="form.operatorUids" :options="lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>-->
+<!--            <el-select v-model="form.operatorUids" filterable multiple clearable>-->
+<!--              <el-option-->
+<!--                  v-for="item in zyList"-->
+<!--                  :key="item.uid"-->
+<!--                  :label="item.realName"-->
+<!--                  :value="item.uid"-->
+<!--              />-->
+<!--            </el-select>-->
+            <el-cascader style="width: 100%" v-model="form.operatorUids" :options="zyList?zyList:lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>
           </el-form-item>
         </el-col>
 			</el-row>
@@ -340,11 +340,12 @@
 			</div>
 		</el-form>
 		<div class="applyBtn">
-			<el-button type="primary" size="large" v-throttle plain @click="submitForm(ruleFormRef)">提交申报</el-button>
+      <el-button v-if="title == '修改'" type="primary" size="large" plain v-throttle @click="submitForm(ruleFormRef)">提交修改</el-button>
+      <el-button v-if="title == '续票'" type="primary" size="large" plain v-throttle @click="submitForm(ruleFormRef)">一键续票</el-button>
 		</div>
     <work-select ref="workSelectRef" @refreshWorks="getSelected()"></work-select>
     </el-dialog>
-	</div>
+<!--	</div>-->
 </template>
 
 <script lang="ts">
@@ -361,11 +362,14 @@
   import {userApi} from "/@/api/systemManage/user";
 	interface stateType {
 		form: Object,
+    isDisabled: boolean
+    title: string
 		workLevelList: Array<any>
 		equipmentDialog: boolean
     showDialog: boolean
     props1:{}
     depProps:{}
+    cas2Props: {}
     zyList: []
     safetyMeasureBasicList: []
     tabLoading: boolean
@@ -383,6 +387,8 @@
 				equipmentDialog: false,
         safetyMeasureBasicList: [],
         zyList: [],
+        isDisabled: false,
+        title: '修改',
 				form: {
           id: null,
           workType: 3,
@@ -440,6 +446,13 @@
           multiple: true,
           checkStrictly: true,
           emitPath: false
+        },
+        cas2Props: {
+          value: 'uid',
+          label: 'realName',
+          multiple: true,
+          checkStrictly: true,
+          children: 'certList'
         }
 			});
 			const ruleFormRef = ref<FormInstance>()
@@ -474,17 +487,48 @@
         workSelectRef.value.openDialog(state.form.involveOtherWork)
       }
       const getWorkerList = ()=>{
-        const filteredList = props.lists.spList.opList.filter(i => state.form.workDepIds.includes(i.depId));
+        let idList:Array<any> = []
+        for(let i of state.form.workDepIds){
+          idList = idList.concat(getListFromDep(getIdListsFormDepId(props.lists.departList,i)))
+        }
+        const depLists = [...new Set(idList)]
+        const filteredList = props.lists.spList.opList.filter(i => depLists.includes(i.depId));
         if(filteredList && filteredList.length>0){
           state.zyList = filteredList
         }else{
           state.zyList = props.lists.spList.opList
         }
       }
+
+      const getListFromDep = (dep) =>{
+        let depIds = []
+        depIds.push(dep.depId)
+        if (Array.isArray(dep.children)) {
+          for (let child of dep.children) {
+            depIds = depIds.concat(getListFromDep(child));
+          }
+        }
+        return depIds;
+      }
+
+      const getIdListsFormDepId=(DepList:Array<any>,id:number)=>{
+        for(const i of DepList){
+          if(i.depId === id){
+            return i
+          }
+          if(Array.isArray(i.children)){
+            const node:any = getIdListsFormDepId(i.children,id)
+            if(node){
+              return node
+            }
+          }
+        }
+        return null
+      }
       const getSelected = ()=>{
         state.form.involveOtherWork = workSelectRef.value.selected
       }
-      const openDialog = (row)=>{
+      const openDialog = (row,type)=>{
         clearFile()
         state.zyList = props.lists.spList.opList
         getBasicData()
@@ -493,7 +537,13 @@
             state.form[key] = JSON.parse(JSON.stringify(row))[key];
           }
         })
-        state.form.operatorUids = row.operatorList.map(i=>i.userId)
+        state.form.operatorUids = row.operatorList.map(i=>{
+          if(i.certExpiredAt && i.certExpiredAt !==''){
+            return [i.userId,i.certificate + ',' + i.certExpiredAt]
+          }else{
+            return [i.userId]
+          }
+        })
         state.form.headUids = row.headList.map(i=>i.userId)
         state.form.analystUids = row.analystList.map(i=>i.userId)
         state.form.guardianUids = row.guardianList.map(i=>i.userId)
@@ -515,6 +565,16 @@
           state.form.workDepIds = row.workDepList.map(i=>i.workDepId)
         }else{
           state.form.workDepIds.push(row.workDepId)
+        }
+        if(type == 'edit'){
+          state.isDisabled = false
+          state.title = '修改'
+        }else{
+          if(!state.form.id){
+            state.form.id = row.workApplyId
+          }
+          state.isDisabled = true
+          state.title = '续票'
         }
         getWorkerList()
         state.showDialog = true
@@ -632,13 +692,33 @@
         return index === 0;
       }
 
+      const singleSelect=(value,type)=>{
+        let selected = value
+        if(selected.length>1){
+          const temp = []
+          for(let i of selected){
+            const index = temp.findIndex(item => item[0] === i[0]);
+            if (index !== -1) {
+              temp[index] = i
+            }else{
+              temp.push(i)
+            }
+          }
+          if(type == '作业人'){state.form.operatorUids = JSON.parse(JSON.stringify(temp))}
+          // if(type == '分析人'){state.form.analystUids = temp}
+          if(type == '监护人'){state.form.guardianUids = temp}
+          if(type == '确认人'){state.form.safetyMeasureUids = temp}
+          if(type == '结束人'){state.form.startOrEndUids = temp}
+        }
+      }
+
       const transformArr = (arr: Array<any>)=>{
         return arr.map((i)=>{
           return {
             uid: i[0],
-            certificate: i[1].split(',')[0],
-            certExpiredAt: i[1].split(',')[1],
-            certTypeName: i[1].split(',')[2]
+            certificate: i[1]?i[1].split(',')[0]:'',
+            certExpiredAt: i[1]?i[1].split(',')[1]:'',
+            certTypeName: ''
           }
         })
       }
@@ -682,33 +762,57 @@
             state.form.workDetail.solicitorUids = state.form.workDetail.solicitorUids.join(',')
             state.form.riskIdentification = state.form.riskIdentification.join(',')
             const {...data} = state.form
-            data.operatorUids = transform2Arr(data.operatorUids)
+            data.operatorUids = transformArr(data.operatorUids)
             data.headUids = transform2Arr(data.headUids)
             data.guardianUids = transform2Arr(data.guardianUids)
             data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids)
             data.startOrEndUids = transform2Arr(data.startOrEndUids)
             data.acceptUids = transform2Arr(data.acceptUids)
             data.lastApprover = transform2Obj(data.lastApprover)
-            const res = await workApplyApi().modHoistApply(data)
-            if (res.data.code === '200') {
-              ElMessage({
-                type: 'success',
-                message: '提交成功!'
-              });
-              formEl.resetFields()
-              state.form.guardianUids = []
-              state.form.involveOtherWork = []
-              getBasicData()
-              clearFile()
-              context.emit('refresh')
-            } else {
-              ElMessage({
-                type: 'warning',
-                message: res.data.msg
-              });
-              // state.form.involveOtherWork = state.form.involveOtherWork.split(',')
-              state.form.workDetail.solicitorUids = state.form.workDetail.solicitorUids.split(',')
-              state.form.riskIdentification = state.form.riskIdentification.split(',')
+            if(state.title == '修改'){
+              const res = await workApplyApi().modHoistApply(data)
+              if (res.data.code === '200') {
+                ElMessage({
+                  type: 'success',
+                  message: '提交成功!'
+                });
+                formEl.resetFields()
+                state.form.guardianUids = []
+                state.form.involveOtherWork = []
+                getBasicData()
+                clearFile()
+                context.emit('refresh')
+              } else {
+                ElMessage({
+                  type: 'warning',
+                  message: res.data.msg
+                });
+                // state.form.involveOtherWork = state.form.involveOtherWork.split(',')
+                state.form.workDetail.solicitorUids = state.form.workDetail.solicitorUids.split(',')
+                state.form.riskIdentification = state.form.riskIdentification.split(',')
+              }
+            }else{
+              const res = await workApplyApi().renewalHoisting(data)
+              if (res.data.code === '200') {
+                ElMessage({
+                  type: 'success',
+                  message: '续票成功!'
+                });
+                formEl.resetFields()
+                state.form.guardianUids = []
+                state.form.involveOtherWork = []
+                getBasicData()
+                clearFile()
+                context.emit('refresh')
+              } else {
+                ElMessage({
+                  type: 'warning',
+                  message: res.data.msg
+                });
+                // state.form.involveOtherWork = state.form.involveOtherWork.split(',')
+                state.form.workDetail.solicitorUids = state.form.workDetail.solicitorUids.split(',')
+                state.form.riskIdentification = state.form.riskIdentification.split(',')
+              }
             }
           } else {
             console.log('error submit!', fields)
@@ -727,6 +831,7 @@
 				await initBackEndControlRoutes();
 			};
 			return {
+        singleSelect,
 				renderMenu,
         getBasicData,
         getWorkerList,
diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/jsaReportDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/jsaReportDialog.vue
index 8ead0fe..b0350df 100644
--- a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/jsaReportDialog.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/jsaReportDialog.vue
@@ -22,7 +22,7 @@
                       </el-form-item>
                     </el-col>
                     <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
-                      <el-form-item label="风险研判报告记录附件">
+                      <el-form-item label="风险研判报告记录附件" prop="judgePicturePath">
                         <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" :before-remove="beforeRemove" :before-upload="getUploadUrl">
                           <el-icon><Plus /></el-icon>
                           <template #tip>
@@ -43,7 +43,7 @@
             <div class="d-row">
               <div class="d-tit">jsa风险研判结论</div><div class="d-cont">{{detail.judgeRecord}}</div>
             </div>
-            <div class="d-row">
+            <div class="d-row" v-if="detail.judgeJsaCode && detail.judgeJsaCode !== ''">
               <div class="d-tit">报告编号</div><div class="d-cont">{{detail.judgeJsaCode}}</div>
             </div>
             <div class="d-row">
@@ -99,6 +99,13 @@
     setup(props: any, context: any) {
         const jsaFormRef = ref();
         const approveLevelDialogRef = ref();
+        const checkFile = (rule: any, value: any, callback: any) => {
+          if(state.fileList.length == 0){
+            callback(new Error("请上传附件"))
+          } else {
+            callback();
+          }
+        }
         const state = reactive<dataState>({
             title: '',
             disabled: true,
@@ -110,7 +117,8 @@
               judgePicturePath: []
             },
             jsaFormRules: {
-              judgeRecord: [{ required: true, message: '请填写jsa风险研判结论', trigger: 'blur' }]
+              judgeRecord: [{ required: true, message: '请填写jsa风险研判结论', trigger: 'blur' }],
+              judgePicturePath: [{ required: true,validator: checkFile, trigger: 'blur' }]
             },
             fileList: [],
             imgLimit: 3,
@@ -284,6 +292,7 @@
             getReport,
             submitApproveRule,
             showReportDialog,
+            checkFile,
             handlePreview,
             getUploadUrl,
             upload,
diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/openDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/openDialog.vue
index fb45479..9550fbe 100644
--- a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/openDialog.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/openDialog.vue
@@ -1,7 +1,7 @@
 <template>
-	<div class="home-container">
-    <el-dialog v-model="showDialog" title="修改申报" @close="clearFile" width="80%" :close-on-click-modal="false">
-		<el-form :model="form" label-width="180px" :rules="applyRules" ref="ruleFormRef">
+<!--	<div class="home-container">-->
+    <el-dialog v-model="showDialog" :title="title" @close="clearFile" width="80%" :close-on-click-modal="false">
+		<el-form :model="form" label-width="180px" :disabled="isDisabled" :rules="applyRules" ref="ruleFormRef">
 			<div class="homeCard">
       <el-row>
         <el-col :span="12">
@@ -43,15 +43,15 @@
         </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 zyList"
-                  :key="item.uid"
-                  :label="item.realName"
-                  :value="item.uid"
-              />
-            </el-select>
-            <!--            <el-cascader style="width: 100%" v-model="form.operatorUids" :options="lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>-->
+<!--            <el-select v-model="form.operatorUids" multiple clearable>-->
+<!--              <el-option-->
+<!--                  v-for="item in zyList"-->
+<!--                  :key="item.uid"-->
+<!--                  :label="item.realName"-->
+<!--                  :value="item.uid"-->
+<!--              />-->
+<!--            </el-select>-->
+            <el-cascader style="width: 100%" v-model="form.operatorUids" :options="zyList?zyList:lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>
           </el-form-item>
         </el-col>
 			</el-row>
@@ -302,24 +302,11 @@
             </el-form-item>
           </el-col>
         </el-row>
-<!--        <el-row>-->
-<!--          <el-col :span="12">-->
-<!--            <el-form-item label="最终审批人" prop="lastApprover">-->
-<!--              <el-select v-model="form.lastApprover" filterable clearable>-->
-<!--                <el-option-->
-<!--                    v-for="item in lists.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" v-throttle plain @click="submitForm(ruleFormRef)">提交申报</el-button>
+      <el-button v-if="title == '修改'" type="primary" size="large" plain v-throttle @click="submitForm(ruleFormRef)">提交修改</el-button>
+      <el-button v-if="title == '续票'" type="primary" size="large" plain v-throttle @click="submitForm(ruleFormRef)">一键续票</el-button>
 		</div>
     <el-dialog v-model="qpVisible" @open="startAdd">
       <el-form :model="qpForm" label-width="170px" ref="qpFormRef" :rules="qpFormRules">
@@ -371,7 +358,7 @@
       <img w-full :src="dialogImageUrl" alt="Preview Image" />
     </el-dialog>
     </el-dialog>
-	</div>
+<!--	</div>-->
 </template>
 
 <script lang="ts">
@@ -391,6 +378,8 @@
 	interface stateType {
     showDialog: boolean
 		form: Object,
+    isDisabled: boolean
+    title: string
     qpForm: Object,
 		equipmentDialog: boolean,
     qpVisible: boolean
@@ -398,6 +387,7 @@
     props1:{},
     depProps:{},
     casProps:{}
+    cas2Props:{}
     safetyMeasureBasicList: [],
     fileList: Array<file>,
     uploadUrl: string,
@@ -423,6 +413,8 @@
         qpVisible: false,
         safetyMeasureBasicList: [],
         zyList: [],
+        isDisabled: false,
+        title: '修改',
 				form: {
           id: null,
           workType: 9,
@@ -474,6 +466,13 @@
           multiple: true,
           checkStrictly: true,
           emitPath: false
+        },
+        cas2Props: {
+          value: 'uid',
+          label: 'realName',
+          multiple: true,
+          checkStrictly: true,
+          children: 'certList'
         },
         casProps: {
           expandTrigger: 'hover',
@@ -557,7 +556,7 @@
         getBasicData()
       });
 
-      const openDialog = (row)=>{
+      const openDialog = (row,type)=>{
         state.zyList = props.lists.spList.opList
         getBasicData()
         Object.keys(state.form).forEach(key => {
@@ -565,7 +564,13 @@
             state.form[key] = JSON.parse(JSON.stringify(row))[key]
           }
         })
-        state.form.operatorUids = row.operatorList.map(i=>i.userId)
+        state.form.operatorUids = row.operatorList.map(i=>{
+          if(i.certExpiredAt && i.certExpiredAt !==''){
+            return [i.userId,i.certificate + ',' + i.certExpiredAt]
+          }else{
+            return [i.userId]
+          }
+        })
         state.form.headUids = row.headList.map(i=>i.userId)
         state.form.analystUids = row.analystList.map(i=>i.userId)
         state.form.guardianUids = row.guardianList.map(i=>i.userId)
@@ -599,6 +604,16 @@
           state.form.workDepIds = row.workDepList.map(i=>i.workDepId)
         }else{
           state.form.workDepIds.push(row.workDepId)
+        }
+        if(type == 'edit'){
+          state.isDisabled = false
+          state.title = '修改'
+        }else{
+          if(!state.form.id){
+            state.form.id = row.workApplyId
+          }
+          state.isDisabled = true
+          state.title = '续票'
         }
         getWorkerList()
         state.showDialog = true
@@ -678,12 +693,43 @@
       }
 
       const getWorkerList = ()=>{
-        const filteredList = props.lists.spList.opList.filter(i => state.form.workDepIds.includes(i.depId));
+        let idList:Array<any> = []
+        for(let i of state.form.workDepIds){
+          idList = idList.concat(getListFromDep(getIdListsFormDepId(props.lists.departList,i)))
+        }
+        const depLists = [...new Set(idList)]
+        const filteredList = props.lists.spList.opList.filter(i => depLists.includes(i.depId));
         if(filteredList && filteredList.length>0){
           state.zyList = filteredList
         }else{
           state.zyList = props.lists.spList.opList
         }
+      }
+
+      const getListFromDep = (dep) =>{
+        let depIds = []
+        depIds.push(dep.depId)
+        if (Array.isArray(dep.children)) {
+          for (let child of dep.children) {
+            depIds = depIds.concat(getListFromDep(child));
+          }
+        }
+        return depIds;
+      }
+
+      const getIdListsFormDepId=(DepList:Array<any>,id:number)=>{
+        for(const i of DepList){
+          if(i.depId === id){
+            return i
+          }
+          if(Array.isArray(i.children)){
+            const node:any = getIdListsFormDepId(i.children,id)
+            if(node){
+              return node
+            }
+          }
+        }
+        return null
       }
 
       const getSelected = ()=>{
@@ -737,13 +783,33 @@
         return index === 0;
       }
 
+      const singleSelect=(value,type)=>{
+        let selected = value
+        if(selected.length>1){
+          const temp = []
+          for(let i of selected){
+            const index = temp.findIndex(item => item[0] === i[0]);
+            if (index !== -1) {
+              temp[index] = i
+            }else{
+              temp.push(i)
+            }
+          }
+          if(type == '作业人'){state.form.operatorUids = JSON.parse(JSON.stringify(temp))}
+          // if(type == '分析人'){state.form.analystUids = temp}
+          if(type == '监护人'){state.form.guardianUids = temp}
+          if(type == '确认人'){state.form.safetyMeasureUids = temp}
+          if(type == '结束人'){state.form.startOrEndUids = temp}
+        }
+      }
+
       const transformArr = (arr: Array<any>)=>{
         return arr.map((i)=>{
           return {
             uid: i[0],
-            certificate: i[1].split(',')[0],
-            certExpiredAt: i[1].split(',')[1],
-            certTypeName: i[1].split(',')[2]
+            certificate: i[1]?i[1].split(',')[0]:'',
+            certExpiredAt: i[1]?i[1].split(',')[1]:'',
+            certTypeName: ''
           }
         })
       }
@@ -765,25 +831,6 @@
           certificate: '',
           certExpiredAt: '',
           certTypeName: ''
-        }
-      }
-
-      const singleSelect=(value,type)=>{
-        let selected = value
-        if(selected.length>1){
-          const temp = []
-          for(let i of selected){
-            const index = temp.findIndex(item => item[0] === i[0]);
-            if (index !== -1) {
-              temp[index] = i
-            }else{
-              temp.push(i)
-            }
-          }
-          if(type == '作业人'){state.form.operatorUids = temp}
-          if(type == '监护人'){state.form.guardianUids = temp}
-          if(type == '确认人'){state.form.safetyMeasureUids = temp}
-          if(type == '结束人'){state.form.startOrEndUids = temp}
         }
       }
 
@@ -809,36 +856,63 @@
             state.form.workDetail.sketchMapPath = state.form.workDetail.sketchMapPath.join(',')
             state.form.riskIdentification = state.form.riskIdentification.join(',')
             const {depIdList,...data} = state.form
-            data.operatorUids = transform2Arr(data.operatorUids)
+            data.operatorUids = transformArr(data.operatorUids)
             data.headUids = transform2Arr(data.headUids)
             data.guardianUids = transform2Arr(data.guardianUids)
             data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids)
             data.startOrEndUids = transform2Arr(data.startOrEndUids)
             data.acceptUids = transform2Arr(data.acceptUids)
             data.lastApprover = transform2Obj(data.lastApprover)
-            const res = await workApplyApi().modOpenApply(data)
-            if (res.data.code === '200') {
-              ElMessage({
-                type: 'success',
-                message: '提交成功!'
-              })
-              formEl.resetFields()
-              state.form.guardianUids = []
-              state.form.involveOtherWork = []
-              getBasicData()
-              state.form.workDetail.sketchMapPath = []
-              state.fileList = []
-              state.form.workDetail.qpDetailList = []
-              clearFile()
-              context.emit('refresh')
-            } else {
-              ElMessage({
-                type: 'warning',
-                message: res.data.msg
-              });
-              // state.form.involveOtherWork = state.form.involveOtherWork.split(',')
-              state.form.workDetail.sketchMapPath = state.form.workDetail.sketchMapPath.split(',')
-              state.form.riskIdentification = state.form.riskIdentification.split(',')
+            if(state.title == '修改'){
+              const res = await workApplyApi().modOpenApply(data)
+              if (res.data.code === '200') {
+                ElMessage({
+                  type: 'success',
+                  message: '提交成功!'
+                })
+                formEl.resetFields()
+                state.form.guardianUids = []
+                state.form.involveOtherWork = []
+                getBasicData()
+                state.form.workDetail.sketchMapPath = []
+                state.fileList = []
+                state.form.workDetail.qpDetailList = []
+                clearFile()
+                context.emit('refresh')
+              } else {
+                ElMessage({
+                  type: 'warning',
+                  message: res.data.msg
+                });
+                // state.form.involveOtherWork = state.form.involveOtherWork.split(',')
+                state.form.workDetail.sketchMapPath = state.form.workDetail.sketchMapPath.split(',')
+                state.form.riskIdentification = state.form.riskIdentification.split(',')
+              }
+            }else{
+              const res = await workApplyApi().renewalOpenJob(data)
+              if (res.data.code === '200') {
+                ElMessage({
+                  type: 'success',
+                  message: '续票成功!'
+                })
+                formEl.resetFields()
+                state.form.guardianUids = []
+                state.form.involveOtherWork = []
+                getBasicData()
+                state.form.workDetail.sketchMapPath = []
+                state.fileList = []
+                state.form.workDetail.qpDetailList = []
+                clearFile()
+                context.emit('refresh')
+              } else {
+                ElMessage({
+                  type: 'warning',
+                  message: res.data.msg
+                });
+                // state.form.involveOtherWork = state.form.involveOtherWork.split(',')
+                state.form.workDetail.sketchMapPath = state.form.workDetail.sketchMapPath.split(',')
+                state.form.riskIdentification = state.form.riskIdentification.split(',')
+              }
             }
           } else {
             ElMessage({
diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/plateDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/plateDialog.vue
index 16ee8a3..653ebfc 100644
--- a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/plateDialog.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/plateDialog.vue
@@ -1,7 +1,7 @@
 <template>
-	<div class="home-container">
-    <el-dialog v-model="showDialog" title="修改申报" @close="clearFile()" width="80%" :close-on-click-modal="false">
-		<el-form :model="form" label-width="180px" :rules="applyRules" ref="ruleFormRef">
+<!--	<div class="home-container">-->
+    <el-dialog v-model="showDialog" :title="title" @close="clearFile()" width="80%" :close-on-click-modal="false">
+		<el-form :model="form" label-width="180px" :disabled="isDisabled" :rules="applyRules" ref="ruleFormRef">
 			<div class="homeCard">
       <el-row>
         <el-col :span="12">
@@ -181,15 +181,15 @@
         </el-col>
         <el-col :span="12">
           <el-form-item label="作业人" prop="operatorUids">
-            <el-select v-model="form.operatorUids" filterable multiple clearable>
-              <el-option
-                  v-for="item in zyList"
-                  :key="item.uid"
-                  :label="item.realName"
-                  :value="item.uid"
-              />
-            </el-select>
-            <!--            <el-cascader style="width: 100%" v-model="form.operatorUids" :options="lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>-->
+<!--            <el-select v-model="form.operatorUids" filterable multiple clearable>-->
+<!--              <el-option-->
+<!--                  v-for="item in zyList"-->
+<!--                  :key="item.uid"-->
+<!--                  :label="item.realName"-->
+<!--                  :value="item.uid"-->
+<!--              />-->
+<!--            </el-select>-->
+            <el-cascader style="width: 100%" v-model="form.operatorUids" :options="zyList?zyList:lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>
           </el-form-item>
         </el-col>
 			</el-row>
@@ -383,11 +383,12 @@
 			</div>
 		</el-form>
 		<div class="applyBtn">
-			<el-button type="primary" size="large" v-throttle plain @click="submitForm(ruleFormRef)">提交申报</el-button>
+      <el-button v-if="title == '修改'" type="primary" size="large" plain v-throttle @click="submitForm(ruleFormRef)">提交修改</el-button>
+      <el-button v-if="title == '续票'" type="primary" size="large" plain v-throttle @click="submitForm(ruleFormRef)">一键续票</el-button>
 		</div>
     <work-select ref="workSelectRef" @refreshWorks="getSelected()"></work-select>
     </el-dialog>
-	</div>
+<!--	</div>-->
 </template>
 
 <script lang="ts">
@@ -406,11 +407,14 @@
   import {userApi} from "/@/api/systemManage/user";
 	interface stateType {
 		form: Object,
+    isDisabled: boolean
+    title: string
 		workLevelList: Array<any>,
 		equipmentDialog: boolean,
     showDialog: boolean,
     props1:{},
     depProps:{},
+    cas2Props:{}
     safetyMeasureBasicList: [],
     zyList: []
     fileList: Array<file>,
@@ -434,6 +438,8 @@
 				equipmentDialog: false,
         safetyMeasureBasicList: [],
         zyList: [],
+        isDisabled: false,
+        title: '修改',
 				form: {
           id: null,
           workType: 8,
@@ -495,6 +501,13 @@
           checkStrictly: true,
           emitPath: false
         },
+        cas2Props: {
+          value: 'uid',
+          label: 'realName',
+          multiple: true,
+          checkStrictly: true,
+          children: 'certList'
+        },
         fileList: [],
         imgLimit: 3,
         uploadUrl: '',
@@ -538,18 +551,49 @@
         workSelectRef.value.openDialog(state.form.involveOtherWork)
       }
       const getWorkerList = ()=>{
-        const filteredList = props.lists.spList.opList.filter(i => state.form.workDepIds.includes(i.depId));
+        let idList:Array<any> = []
+        for(let i of state.form.workDepIds){
+          idList = idList.concat(getListFromDep(getIdListsFormDepId(props.lists.departList,i)))
+        }
+        const depLists = [...new Set(idList)]
+        const filteredList = props.lists.spList.opList.filter(i => depLists.includes(i.depId));
         if(filteredList && filteredList.length>0){
           state.zyList = filteredList
         }else{
           state.zyList = props.lists.spList.opList
         }
       }
+
+      const getListFromDep = (dep) =>{
+        let depIds = []
+        depIds.push(dep.depId)
+        if (Array.isArray(dep.children)) {
+          for (let child of dep.children) {
+            depIds = depIds.concat(getListFromDep(child));
+          }
+        }
+        return depIds;
+      }
+
+      const getIdListsFormDepId=(DepList:Array<any>,id:number)=>{
+        for(const i of DepList){
+          if(i.depId === id){
+            return i
+          }
+          if(Array.isArray(i.children)){
+            const node:any = getIdListsFormDepId(i.children,id)
+            if(node){
+              return node
+            }
+          }
+        }
+        return null
+      }
       const getSelected = ()=>{
         state.form.involveOtherWork = workSelectRef.value.selected
       }
 
-      const openDialog = (row)=>{
+      const openDialog = (row,type)=>{
         clearFile()
         state.zyList = props.lists.spList.opList
         getBasicData()
@@ -558,7 +602,13 @@
             state.form[key] = JSON.parse(JSON.stringify(row))[key];
           }
         })
-        state.form.operatorUids = row.operatorList.map(i=>i.userId)
+        state.form.operatorUids = row.operatorList.map(i=>{
+          if(i.certExpiredAt && i.certExpiredAt !==''){
+            return [i.userId,i.certificate + ',' + i.certExpiredAt]
+          }else{
+            return [i.userId]
+          }
+        })
         state.form.headUids = row.headList.map(i=>i.userId)
         state.form.analystUids = row.analystList.map(i=>i.userId)
         state.form.guardianUids = row.guardianList.map(i=>i.userId)
@@ -574,7 +624,6 @@
         }))
         state.form.acceptUids = row.acceptUserList.map(i=>i.userId)
         state.form.startOrEndUids = row.startOrEndList.map(i=>i.userId)
-        // state.form.lastApprover = row.lastApprover.userId
         state.fileList = row.workDetail.bpLocationMapPath.split(',').map(item => {
           return {
             url:  item,
@@ -582,11 +631,20 @@
           }
         })
         state.form.workDetail.bpLocationMapPath = row.workDetail.bpLocationMapPath.split(',').map(item => item.match(/specialWork9step\/(.*?)\?/)[1])
-        console.log(state.fileList,state.form.workDetail.bpLocationMapPath,'854')
         if(row.workDepList && row.workDepList.length>0){
           state.form.workDepIds = row.workDepList.map(i=>i.workDepId)
         }else{
           state.form.workDepIds.push(row.workDepId)
+        }
+        if(type == 'edit'){
+          state.isDisabled = false
+          state.title = '修改'
+        }else{
+          if(!state.form.id){
+            state.form.id = row.workApplyId
+          }
+          state.isDisabled = true
+          state.title = '续票'
         }
         getWorkerList()
         state.showDialog = true
@@ -701,13 +759,33 @@
         return index === 0;
       }
 
+      const singleSelect=(value,type)=>{
+        let selected = value
+        if(selected.length>1){
+          const temp = []
+          for(let i of selected){
+            const index = temp.findIndex(item => item[0] === i[0]);
+            if (index !== -1) {
+              temp[index] = i
+            }else{
+              temp.push(i)
+            }
+          }
+          if(type == '作业人'){state.form.operatorUids = JSON.parse(JSON.stringify(temp))}
+          // if(type == '分析人'){state.form.analystUids = temp}
+          if(type == '监护人'){state.form.guardianUids = temp}
+          if(type == '确认人'){state.form.safetyMeasureUids = temp}
+          if(type == '结束人'){state.form.startOrEndUids = temp}
+        }
+      }
+
       const transformArr = (arr: Array<any>)=>{
         return arr.map((i)=>{
           return {
             uid: i[0],
-            certificate: i[1].split(',')[0],
-            certExpiredAt: i[1].split(',')[1],
-            certTypeName: i[1].split(',')[2]
+            certificate: i[1]?i[1].split(',')[0]:'',
+            certExpiredAt: i[1]?i[1].split(',')[1]:'',
+            certTypeName: ''
           }
         })
       }
@@ -751,35 +829,61 @@
             state.form.workDetail.bpLocationMapPath = state.form.workDetail.bpLocationMapPath.join(',')
             state.form.riskIdentification = state.form.riskIdentification.join(',')
             const {...data} = state.form
-            data.operatorUids = transform2Arr(data.operatorUids)
+            data.operatorUids = transformArr(data.operatorUids)
             data.headUids = transform2Arr(data.headUids)
             data.guardianUids = transform2Arr(data.guardianUids)
             data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids)
             data.startOrEndUids = transform2Arr(data.startOrEndUids)
             data.acceptUids = transform2Arr(data.acceptUids)
             data.lastApprover = transform2Obj(data.lastApprover)
-            const res = await workApplyApi().modPlateApply(data)
-            if (res.data.code === '200') {
-              ElMessage({
-                type: 'success',
-                message: '提交成功!'
-              });
-              formEl.resetFields()
-              state.form.guardianUids = []
-              state.form.involveOtherWork = []
-              getBasicData()
-              state.form.workDetail.bpLocationMapPath = []
-              state.fileList = []
-              clearFile()
-              context.emit('refresh')
-            } else {
-              ElMessage({
-                type: 'warning',
-                message: res.data.msg
-              });
-              // state.form.involveOtherWork = state.form.involveOtherWork.split(',')
-              state.form.workDetail.bpLocationMapPath = state.form.workDetail.bpLocationMapPath.split(',')
-              state.form.riskIdentification = state.form.riskIdentification.split(',')
+            if(state.title == '修改'){
+              const res = await workApplyApi().modPlateApply(data)
+              if (res.data.code === '200') {
+                ElMessage({
+                  type: 'success',
+                  message: '提交成功!'
+                });
+                formEl.resetFields()
+                state.form.guardianUids = []
+                state.form.involveOtherWork = []
+                getBasicData()
+                state.form.workDetail.bpLocationMapPath = []
+                state.fileList = []
+                clearFile()
+                context.emit('refresh')
+              } else {
+                ElMessage({
+                  type: 'warning',
+                  message: res.data.msg
+                });
+                // state.form.involveOtherWork = state.form.involveOtherWork.split(',')
+                state.form.workDetail.bpLocationMapPath = state.form.workDetail.bpLocationMapPath.split(',')
+                state.form.riskIdentification = state.form.riskIdentification.split(',')
+              }
+            }else{
+              const res = await workApplyApi().renewalBlindPlatePlugging(data)
+              if (res.data.code === '200') {
+                ElMessage({
+                  type: 'success',
+                  message: '续票成功!'
+                });
+                formEl.resetFields()
+                state.form.guardianUids = []
+                state.form.involveOtherWork = []
+                getBasicData()
+                state.form.workDetail.bpLocationMapPath = []
+                state.fileList = []
+                clearFile()
+                context.emit('refresh')
+              } else {
+                ElMessage({
+                  type: 'warning',
+                  message: res.data.msg
+                });
+                // state.form.involveOtherWork = state.form.involveOtherWork.split(',')
+                state.form.workDetail.bpLocationMapPath = state.form.workDetail.bpLocationMapPath.split(',')
+                state.form.riskIdentification = state.form.riskIdentification.split(',')
+              }
             }
           } else {
             console.log('error submit!', fields)
@@ -884,6 +988,7 @@
 				await initBackEndControlRoutes();
 			};
 			return {
+        singleSelect,
 				renderMenu,
         getBasicData,
         getWorkerList,
diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/powerDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/powerDialog.vue
index 437d685..67ac77e 100644
--- a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/powerDialog.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/powerDialog.vue
@@ -1,7 +1,7 @@
 <template>
-	<div class="home-container">
-    <el-dialog v-model="showDialog" title="修改申报" @close="clearFile()" width="80%" :close-on-click-modal="false">
-		<el-form :model="form" label-width="180px" :rules="applyRules" ref="ruleFormRef">
+<!--	<div class="home-container">-->
+    <el-dialog v-model="showDialog" :title="title" @close="clearFile()" width="80%" :close-on-click-modal="false">
+		<el-form :model="form" label-width="180px" :disabled="isDisabled" :rules="applyRules" ref="ruleFormRef">
 			<div class="homeCard">
       <el-row>
         <el-col :span="12">
@@ -100,15 +100,15 @@
         </el-col>
         <el-col :span="12">
           <el-form-item label="作业人" prop="operatorUids">
-            <el-select v-model="form.operatorUids" filterable multiple clearable>
-              <el-option
-                  v-for="item in zyList"
-                  :key="item.uid"
-                  :label="item.realName"
-                  :value="item.uid"
-              />
-            </el-select>
-            <!--              <el-cascader style="width: 100%" v-model="form.operatorUids" :options="lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>-->
+<!--            <el-select v-model="form.operatorUids" filterable multiple clearable>-->
+<!--              <el-option-->
+<!--                  v-for="item in zyList"-->
+<!--                  :key="item.uid"-->
+<!--                  :label="item.realName"-->
+<!--                  :value="item.uid"-->
+<!--              />-->
+<!--            </el-select>-->
+            <el-cascader style="width: 100%" v-model="form.operatorUids" :options="zyList?zyList:lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>
           </el-form-item>
         </el-col>
 			</el-row>
@@ -355,11 +355,12 @@
 			</div>
 		</el-form>
 		<div class="applyBtn">
-			<el-button type="primary" size="large" plain v-throttle @click="submitForm(ruleFormRef)">提交申报</el-button>
+      <el-button v-if="title == '修改'" type="primary" size="large" plain v-throttle @click="submitForm(ruleFormRef)">提交修改</el-button>
+      <el-button v-if="title == '续票'" type="primary" size="large" plain v-throttle @click="submitForm(ruleFormRef)">一键续票</el-button>
 		</div>
     <work-select ref="workSelectRef" @refreshWorks="getSelected()"></work-select>
     </el-dialog>
-	</div>
+<!--	</div>-->
 </template>
 
 <script lang="ts">
@@ -376,10 +377,13 @@
   import {userApi} from "/@/api/systemManage/user";
 	interface stateType {
 		form: Object,
+    isDisabled: boolean
+    title: string
 		equipmentDialog: boolean,
     showDialog: boolean
     props1:{},
     depProps:{},
+    cas2Props:{}
     safetyMeasureBasicList: []
     zyList: []
     tabLoading: boolean
@@ -397,6 +401,8 @@
         showDialog: false,
         safetyMeasureBasicList: [],
         zyList: [],
+        isDisabled: false,
+        title: '修改',
 				form: {
           id: null,
           workType: 7,
@@ -441,6 +447,13 @@
           multiple: true,
           checkStrictly: true,
           emitPath: false
+        },
+        cas2Props: {
+          value: 'uid',
+          label: 'realName',
+          multiple: true,
+          checkStrictly: true,
+          children: 'certList'
         }
 			})
 			const ruleFormRef = ref<FormInstance>()
@@ -476,18 +489,50 @@
         workSelectRef.value.openDialog(state.form.involveOtherWork)
       }
       const getWorkerList = ()=>{
-        const filteredList = props.lists.spList.opList.filter(i => state.form.workDepIds.includes(i.depId));
+        let idList:Array<any> = []
+        for(let i of state.form.workDepIds){
+          idList = idList.concat(getListFromDep(getIdListsFormDepId(props.lists.departList,i)))
+        }
+        const depLists = [...new Set(idList)]
+        const filteredList = props.lists.spList.opList.filter(i => depLists.includes(i.depId));
         if(filteredList && filteredList.length>0){
           state.zyList = filteredList
         }else{
           state.zyList = props.lists.spList.opList
         }
       }
+
+      const getListFromDep = (dep) =>{
+        let depIds = []
+        depIds.push(dep.depId)
+        if (Array.isArray(dep.children)) {
+          for (let child of dep.children) {
+            depIds = depIds.concat(getListFromDep(child));
+          }
+        }
+        return depIds;
+      }
+
+      const getIdListsFormDepId=(DepList:Array<any>,id:number)=>{
+        for(const i of DepList){
+          if(i.depId === id){
+            return i
+          }
+          if(Array.isArray(i.children)){
+            const node:any = getIdListsFormDepId(i.children,id)
+            if(node){
+              return node
+            }
+          }
+        }
+        return null
+      }
       const getSelected = ()=>{
         state.form.involveOtherWork = workSelectRef.value.selected
       }
-      const openDialog = (row)=>{
+      const openDialog = (row,type)=>{
         clearFile()
+        console.log(state.form.operatorUids,'ops1')
         state.zyList = props.lists.spList.opList
         getBasicData()
         Object.keys(state.form).forEach(key => {
@@ -495,7 +540,15 @@
             state.form[key] = JSON.parse(JSON.stringify(row))[key];
           }
         })
-        state.form.operatorUids = row.operatorList.map(i=>i.userId)
+        console.log(row.operatorList,'list')
+        state.form.operatorUids = row.operatorList.map(i=>{
+          if(i.certExpiredAt && i.certExpiredAt !==''){
+            return [i.userId,i.certificate + ',' + i.certExpiredAt]
+          }else{
+            return [i.userId]
+          }
+        })
+        console.log(state.form.operatorUids,'ops2')
         state.form.headUids = row.headList.map(i=>i.userId)
         state.form.analystUids = row.analystList.map(i=>i.userId)
         state.form.guardianUids = row.guardianList.map(i=>i.userId)
@@ -517,6 +570,16 @@
           state.form.workDepIds = row.workDepList.map(i=>i.workDepId)
         }else{
           state.form.workDepIds.push(row.workDepId)
+        }
+        if(type == 'edit'){
+          state.isDisabled = false
+          state.title = '修改'
+        }else{
+          if(!state.form.id){
+            state.form.id = row.workApplyId
+          }
+          state.isDisabled = true
+          state.title = '续票'
         }
         getWorkerList()
         state.showDialog = true
@@ -635,6 +698,37 @@
         return index === 0;
       }
 
+      const singleSelect=(value,type)=>{
+        let selected = value
+        if(selected.length>1){
+          const temp = []
+          for(let i of selected){
+            const index = temp.findIndex(item => item[0] === i[0]);
+            if (index !== -1) {
+              temp[index] = i
+            }else{
+              temp.push(i)
+            }
+          }
+          if(type == '作业人'){state.form.operatorUids = JSON.parse(JSON.stringify(temp))}
+          // if(type == '分析人'){state.form.analystUids = temp}
+          if(type == '监护人'){state.form.guardianUids = temp}
+          if(type == '确认人'){state.form.safetyMeasureUids = temp}
+          if(type == '结束人'){state.form.startOrEndUids = temp}
+        }
+      }
+
+      const transformArr = (arr: Array<any>)=>{
+        return arr.map((i)=>{
+          return {
+            uid: i[0],
+            certificate: i[1]?i[1].split(',')[0]:'',
+            certExpiredAt: i[1]?i[1].split(',')[1]:'',
+            certTypeName: ''
+          }
+        })
+      }
+
       const transform2Arr = (arr: Array<any>)=>{
         return arr.map((i)=>{
           return {
@@ -674,7 +768,7 @@
             state.form.workDetail.electricityUids = state.form.workDetail.electricityUids.join(',')
             state.form.riskIdentification = state.form.riskIdentification.join(',')
             const {...data} = state.form
-            data.operatorUids = transform2Arr(data.operatorUids)
+            data.operatorUids = transformArr(data.operatorUids)
             data.headUids = transform2Arr(data.headUids)
             // data.analystUids = transformArr(data.analystUids)
             data.guardianUids = transform2Arr(data.guardianUids)
@@ -682,26 +776,50 @@
             data.startOrEndUids = transform2Arr(data.startOrEndUids)
             data.acceptUids = transform2Arr(data.acceptUids)
             data.lastApprover = transform2Obj(data.lastApprover)
-            const res = await workApplyApi().modPowerApply(data)
-            if (res.data.code === '200') {
-              ElMessage({
-                type: 'success',
-                message: '提交成功!'
-              });
-              formEl.resetFields()
-              state.form.guardianUids = []
-              state.form.involveOtherWork = []
-              getBasicData()
-              clearFile()
-              context.emit('refresh')
-            } else {
-              ElMessage({
-                type: 'warning',
-                message: res.data.msg
-              });
-              // state.form.involveOtherWork = state.form.involveOtherWork.split(',')
-              state.form.workDetail.electricityUids = state.form.workDetail.electricityUids.split(',')
-              state.form.riskIdentification = state.form.riskIdentification.split(',')
+            if(state.title == '修改'){
+              const res = await workApplyApi().modPowerApply(data)
+              if (res.data.code === '200') {
+                ElMessage({
+                  type: 'success',
+                  message: '提交成功!'
+                });
+                formEl.resetFields()
+                state.form.guardianUids = []
+                state.form.involveOtherWork = []
+                getBasicData()
+                clearFile()
+                context.emit('refresh')
+              } else {
+                ElMessage({
+                  type: 'warning',
+                  message: res.data.msg
+                });
+                // state.form.involveOtherWork = state.form.involveOtherWork.split(',')
+                state.form.workDetail.electricityUids = state.form.workDetail.electricityUids.split(',')
+                state.form.riskIdentification = state.form.riskIdentification.split(',')
+              }
+            }else{
+              const res = await workApplyApi().renewalTemporaryPower(data)
+              if (res.data.code === '200') {
+                ElMessage({
+                  type: 'success',
+                  message: '续票成功!'
+                });
+                formEl.resetFields()
+                state.form.guardianUids = []
+                state.form.involveOtherWork = []
+                getBasicData()
+                clearFile()
+                context.emit('refresh')
+              } else {
+                ElMessage({
+                  type: 'warning',
+                  message: res.data.msg
+                });
+                // state.form.involveOtherWork = state.form.involveOtherWork.split(',')
+                state.form.workDetail.electricityUids = state.form.workDetail.electricityUids.split(',')
+                state.form.riskIdentification = state.form.riskIdentification.split(',')
+              }
             }
           } else {
             console.log('error submit!', fields)
@@ -720,6 +838,7 @@
 				await initBackEndControlRoutes();
 			};
 			return {
+        singleSelect,
 				renderMenu,
         getBasicData,
         getWorkerList,
diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/spaceDialog.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/spaceDialog.vue
index d5e9798..c810af8 100644
--- a/src/views/newSpecialWorkSystem/workTicket/wdsq/components/spaceDialog.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/components/spaceDialog.vue
@@ -1,7 +1,7 @@
 <template>
-	<div class="home-container">
-    <el-dialog v-model="showDialog" title="修改申报" @close="clearFile()" width="80%" :close-on-click-modal="false">
-		<el-form :model="form" label-width="180px" :rules="applyRules" ref="ruleFormRef">
+<!--	<div class="home-container">-->
+    <el-dialog v-model="showDialog" :title="title" @close="clearFile()" width="80%" :close-on-click-modal="false">
+		<el-form :model="form" label-width="180px" :disabled="isDisabled" :rules="applyRules" ref="ruleFormRef">
 			<div class="homeCard">
       <el-row>
         <el-col :span="12">
@@ -77,15 +77,15 @@
         </el-col>
         <el-col :span="12">
           <el-form-item label="作业人" prop="operatorUids">
-            <el-select v-model="form.operatorUids" filterable multiple clearable>
-              <el-option
-                  v-for="item in zyList"
-                  :key="item.uid"
-                  :label="item.realName"
-                  :value="item.uid"
-              />
-            </el-select>
-            <!--            <el-cascader style="width: 100%" v-model="form.operatorUids" :options="lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>-->
+<!--            <el-select v-model="form.operatorUids" filterable multiple clearable>-->
+<!--              <el-option-->
+<!--                  v-for="item in zyList"-->
+<!--                  :key="item.uid"-->
+<!--                  :label="item.realName"-->
+<!--                  :value="item.uid"-->
+<!--              />-->
+<!--            </el-select>-->
+            <el-cascader style="width: 100%" v-model="form.operatorUids" :options="zyList?zyList:lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>
           </el-form-item>
         </el-col>
 			</el-row>
@@ -294,11 +294,12 @@
 			</div>
 		</el-form>
 		<div class="applyBtn">
-			<el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)" v-throttle>提交申报</el-button>
+      <el-button v-if="title == '修改'" type="primary" size="large" plain v-throttle @click="submitForm(ruleFormRef)">提交修改</el-button>
+      <el-button v-if="title == '续票'" type="primary" size="large" plain v-throttle @click="submitForm(ruleFormRef)">一键续票</el-button>
 		</div>
     <work-select ref="workSelectRef" @refreshWorks="getSelected()"></work-select>
     </el-dialog>
-	</div>
+<!--	</div>-->
 </template>
 
 <script lang="ts">
@@ -315,10 +316,13 @@
 import {userApi} from "/@/api/systemManage/user";
 	interface stateType {
 		form: Object,
+    isDisabled: boolean
+    title: string
 		equipmentDialog: boolean,
     showDialog: boolean
     props1:{},
     depProps:{},
+    cas2Props: {}
     safetyMeasureBasicList: []
     zyList: []
     tabLoading: boolean
@@ -336,6 +340,8 @@
 				equipmentDialog: false,
         safetyMeasureBasicList: [],
         zyList: [],
+        isDisabled: false,
+        title: '修改',
 				form: {
           id: null,
           workType: 2,
@@ -378,7 +384,14 @@
           multiple: true,
           checkStrictly: true,
           emitPath: false
-        }
+        },
+        cas2Props: {
+          value: 'uid',
+          label: 'realName',
+          multiple: true,
+          checkStrictly: true,
+          children: 'certList'
+        },
 			});
 			const ruleFormRef = ref<FormInstance>()
 			const applyRules = reactive<FormRules>({
@@ -412,18 +425,49 @@
         workSelectRef.value.openDialog(state.form.involveOtherWork)
       }
       const getWorkerList = ()=>{
-        const filteredList = props.lists.spList.opList.filter(i => state.form.workDepIds.includes(i.depId));
+        let idList:Array<any> = []
+        for(let i of state.form.workDepIds){
+          idList = idList.concat(getListFromDep(getIdListsFormDepId(props.lists.departList,i)))
+        }
+        const depLists = [...new Set(idList)]
+        const filteredList = props.lists.spList.opList.filter(i => depLists.includes(i.depId));
         if(filteredList && filteredList.length>0){
           state.zyList = filteredList
         }else{
           state.zyList = props.lists.spList.opList
         }
       }
+
+      const getListFromDep = (dep) =>{
+        let depIds = []
+        depIds.push(dep.depId)
+        if (Array.isArray(dep.children)) {
+          for (let child of dep.children) {
+            depIds = depIds.concat(getListFromDep(child));
+          }
+        }
+        return depIds;
+      }
+
+      const getIdListsFormDepId=(DepList:Array<any>,id:number)=>{
+        for(const i of DepList){
+          if(i.depId === id){
+            return i
+          }
+          if(Array.isArray(i.children)){
+            const node:any = getIdListsFormDepId(i.children,id)
+            if(node){
+              return node
+            }
+          }
+        }
+        return null
+      }
       const getSelected = ()=>{
         state.form.involveOtherWork = workSelectRef.value.selected
       }
 
-      const openDialog = (row)=>{
+      const openDialog = (row,type)=>{
         clearFile()
         state.zyList = props.lists.spList.opList
         getBasicData()
@@ -432,7 +476,13 @@
             state.form[key] = JSON.parse(JSON.stringify(row))[key];
           }
         })
-        state.form.operatorUids = row.operatorList.map(i=>i.userId)
+        state.form.operatorUids = row.operatorList.map(i=>{
+          if(i.certExpiredAt && i.certExpiredAt !==''){
+            return [i.userId,i.certificate + ',' + i.certExpiredAt]
+          }else{
+            return [i.userId]
+          }
+        })
         state.form.headUids = row.headList.map(i=>i.userId)
         state.form.analystUids = row.analystList.map(i=>i.userId)
         state.form.guardianUids = row.guardianList.map(i=>i.userId)
@@ -453,6 +503,16 @@
           state.form.workDepIds = row.workDepList.map(i=>i.workDepId)
         }else{
           state.form.workDepIds.push(row.workDepId)
+        }
+        if(type == 'edit'){
+          state.isDisabled = false
+          state.title = '修改'
+        }else{
+          if(!state.form.id){
+            state.form.id = row.workApplyId
+          }
+          state.isDisabled = true
+          state.title = '续票'
         }
         getWorkerList()
         state.showDialog = true
@@ -554,6 +614,37 @@
         return index === 0;
       }
 
+      const singleSelect=(value,type)=>{
+        let selected = value
+        if(selected.length>1){
+          const temp = []
+          for(let i of selected){
+            const index = temp.findIndex(item => item[0] === i[0]);
+            if (index !== -1) {
+              temp[index] = i
+            }else{
+              temp.push(i)
+            }
+          }
+          if(type == '作业人'){state.form.operatorUids = JSON.parse(JSON.stringify(temp))}
+          // if(type == '分析人'){state.form.analystUids = temp}
+          if(type == '监护人'){state.form.guardianUids = temp}
+          if(type == '确认人'){state.form.safetyMeasureUids = temp}
+          if(type == '结束人'){state.form.startOrEndUids = temp}
+        }
+      }
+
+      const transformArr = (arr: Array<any>)=>{
+        return arr.map((i)=>{
+          return {
+            uid: i[0],
+            certificate: i[1]?i[1].split(',')[0]:'',
+            certExpiredAt: i[1]?i[1].split(',')[1]:'',
+            certTypeName: ''
+          }
+        })
+      }
+
       const transform2Arr = (arr: Array<any>)=>{
         return arr.map((i)=>{
           return {
@@ -592,7 +683,7 @@
             // }
             state.form.riskIdentification = state.form.riskIdentification.join(',')
             const {...data} = state.form
-            data.operatorUids = transform2Arr(data.operatorUids)
+            data.operatorUids = transformArr(data.operatorUids)
             data.headUids = transform2Arr(data.headUids)
             // data.analystUids = transformArr(data.analystUids)
             data.guardianUids = transform2Arr(data.guardianUids)
@@ -600,25 +691,48 @@
             data.startOrEndUids = transform2Arr(data.startOrEndUids)
             data.acceptUids = transform2Arr(data.acceptUids)
             data.lastApprover = transform2Obj(data.lastApprover)
-            const res = await workApplyApi().modSpaceApply(data)
-            if (res.data.code === '200') {
-              ElMessage({
-                type: 'success',
-                message: '提交成功!'
-              });
-              formEl.resetFields()
-              state.form.guardianUids = []
-              state.form.involveOtherWork = []
-              getBasicData()
-              clearFile()
-              context.emit('refresh')
-            } else {
-              ElMessage({
-                type: 'warning',
-                message: res.data.msg
-              });
-              // state.form.involveOtherWork = state.form.involveOtherWork.split(',')
-              state.form.riskIdentification = state.form.riskIdentification.split(',')
+            if(state.title == '修改'){
+              const res = await workApplyApi().modSpaceApply(data)
+              if (res.data.code === '200') {
+                ElMessage({
+                  type: 'success',
+                  message: '提交成功!'
+                });
+                formEl.resetFields()
+                state.form.guardianUids = []
+                state.form.involveOtherWork = []
+                getBasicData()
+                clearFile()
+                context.emit('refresh')
+              } else {
+                ElMessage({
+                  type: 'warning',
+                  message: res.data.msg
+                });
+                // state.form.involveOtherWork = state.form.involveOtherWork.split(',')
+                state.form.riskIdentification = state.form.riskIdentification.split(',')
+              }
+            }else{
+              const res = await workApplyApi().renewalConfinedspace(data)
+              if (res.data.code === '200') {
+                ElMessage({
+                  type: 'success',
+                  message: '续票成功!'
+                });
+                formEl.resetFields()
+                state.form.guardianUids = []
+                state.form.involveOtherWork = []
+                getBasicData()
+                clearFile()
+                context.emit('refresh')
+              } else {
+                ElMessage({
+                  type: 'warning',
+                  message: res.data.msg
+                });
+                // state.form.involveOtherWork = state.form.involveOtherWork.split(',')
+                state.form.riskIdentification = state.form.riskIdentification.split(',')
+              }
             }
           } else {
             console.log('error submit!', fields)
@@ -637,6 +751,7 @@
 				await initBackEndControlRoutes();
 			};
 			return {
+        singleSelect,
 				renderMenu,
         getBasicData,
         getWorkerList,
diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue
index 50bcae1..e036b00 100644
--- a/src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue
@@ -376,6 +376,7 @@
         getListByPage();
         getAllDepartment()
         spWorker()
+        getOpList()
         getAll()
         getAllDevice()
         getAllRisks()
@@ -384,47 +385,37 @@
 
         const openEdit = (row)=>{
           if(row.workType == 1){
-            fireRef.value.openDialog(row)
+            fireRef.value.openDialog(row,'edit')
           }
           if(row.workType == 2){
-            spaceRef.value.openDialog(row)
+            spaceRef.value.openDialog(row,'edit')
           }
           if(row.workType == 3){
-            hoistRef.value.openDialog(row)
+            hoistRef.value.openDialog(row,'edit')
           }
           if(row.workType == 4){
-            groundRef.value.openDialog(row)
+            groundRef.value.openDialog(row,'edit')
           }
           if(row.workType == 5){
-            brokenRef.value.openDialog(row)
+            brokenRef.value.openDialog(row,'edit')
           }
           if(row.workType == 6){
-            heightRef.value.openDialog(row)
+            heightRef.value.openDialog(row,'edit')
           }
           if(row.workType == 7){
-            powerRef.value.openDialog(row)
+            powerRef.value.openDialog(row,'edit')
           }
           if(row.workType == 8){
-            plateRef.value.openDialog(row)
+            plateRef.value.openDialog(row,'edit')
           }
           if(row.workType == 9){
-            openRef.value.openDialog(row)
+            openRef.value.openDialog(row,'edit')
           }
         }
 
       const spWorker = async ()=>{
-        for(let id of ['17','18','19']){
+        for(let id of ['18','19']){
           const res = await workApplyApi().getSpList({roleId: id})
-          if(id == '17'){
-            if (res.data.code === '200') {
-              state.lists.spList.opList = JSON.parse(JSON.stringify(res.data.data))
-            } else {
-              ElMessage({
-                type: 'warning',
-                message: res.data.msg
-              });
-            }
-          }
           if(id == '18'){
             if (res.data.code === '200') {
               state.lists.spList.jhList = JSON.parse(JSON.stringify(res.data.data))
@@ -445,6 +436,29 @@
               });
             }
           }
+        }
+      }
+
+      const getOpList = async()=>{
+        const res = await workApplyApi().getOpList()
+        if(res.data.code == '200'){
+          if(res.data.data && res.data.data.length>0){
+            state.lists.spList.opList = JSON.parse(JSON.stringify(res.data.data)).map(i=>{
+              if(i.certList && i.certList.length>0){
+                i.certList = i.certList.map(item=>{
+                  item['realName'] = i.realName + '(' + item.certTypeName +':'+ item.certExpiredAt + ')'
+                  item['uid'] = item.certNo + ',' + item.certExpiredAt
+                  return item
+                })
+              }
+              return i
+            })
+          }
+        }else{
+          ElMessage({
+            type: 'warning',
+            message: res.data.msg
+          })
         }
       }
 
@@ -520,7 +534,7 @@
                 state.departmentList = JSON.parse(JSON.stringify(res.data.data))
                 recursion(state.departmentList);
                 state.lists.departList = JSON.parse(JSON.stringify(res.data.data))
-                state.lists.departList2 = JSON.parse(JSON.stringify(res.data.data))[0].children[0].children.filter(i=>i.depId == 32 || i.depId == 48 || i.depId == 49 || i.depId == 50)
+                state.lists.departList2 = JSON.parse(JSON.stringify(res.data.data))[0].children[0].children.filter(i=>i.depId == 32 || i.depId == 48 || i.depId == 49 || i.depId == 50 || i.depId == 10 || i.depId == 41 || i.depId == 46 || i.depId == 47)
             } else {
                 ElMessage({
                     type: 'warning',
@@ -529,7 +543,7 @@
             }
         };
         const getOtherWork = async () => {
-          let res = await workApplyApi().getOtherWork({workPermitNo: '',workType: null});
+          let res = await workApplyApi().getOtherWork({pageSize: 999, pageIndex: 1, searchParams: {workPermitNo: '', workType: null}})
           if (res.data.code === '200') {
             state.lists.otherWorks = JSON.parse(JSON.stringify(res.data.data))
           } else {
diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/broken.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/broken.vue
index 27b96a1..104bca7 100644
--- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/broken.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/broken.vue
@@ -17,15 +17,15 @@
           </el-col>
           <el-col :span="12">
             <el-form-item label="作业人" prop="operatorUids">
-              <el-select v-model="form.operatorUids" filterable multiple clearable>
-                <el-option
-                    v-for="item in zyList"
-                    :key="item.uid"
-                    :label="item.realName"
-                    :value="item.uid"
-                />
-              </el-select>
-              <!--            <el-cascader style="width: 100%" v-model="form.operatorUids" :options="lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>-->
+<!--              <el-select v-model="form.operatorUids" filterable multiple clearable>-->
+<!--                <el-option-->
+<!--                    v-for="item in zyList"-->
+<!--                    :key="item.uid"-->
+<!--                    :label="item.realName"-->
+<!--                    :value="item.uid"-->
+<!--                />-->
+<!--              </el-select>-->
+              <el-cascader style="width: 100%" v-model="form.operatorUids" :options="zyList?zyList:lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>
             </el-form-item>
           </el-col>
         </el-row>
@@ -483,35 +483,11 @@
           }
         },
         cas2Props: {
-          expandTrigger: 'hover',
           value: 'uid',
           label: 'realName',
           multiple: true,
-          checkStrictly: false,
-          lazy: true,
-          async lazyLoad(node, resolve){
-            const { value, level } = node
-            let nodes = []
-            if(level == 0){
-              nodes = props.lists.spList.opList
-            }else{
-              let res = await userApi().getCtf({uid: value})
-              if(res.data.code == 200){
-                nodes = res.data.data
-              }else{
-                ElMessage({
-                  type: 'warning',
-                  message: res.data.msg
-                })
-              }
-            }
-            nodes=nodes.map(item => ({
-              uid: item.certNo +','+ item.certExpiredAt+','+item.certTypeName,
-              realName: node.label + '(' +item.certTypeName +' ' + item.certExpiredAt + ')',
-              leaf: level >= 1
-            }))
-            resolve(nodes)
-          }
+          checkStrictly: true,
+          children: 'certList'
         },
         cas3Props: {
           expandTrigger: 'hover',
@@ -612,13 +588,44 @@
       const openWorkSelect = ()=>{
         workSelectRef.value.openDialog(state.form.involveOtherWork)
       }
-      const getWorkerList = (val)=>{
-        const filteredList = props.lists.spList.opList.filter(i => state.form.workDepIds.includes(i.depId));
+      const getWorkerList = ()=>{
+        let idList:Array<any> = []
+        for(let i of state.form.workDepIds){
+          idList = idList.concat(getListFromDep(getIdListsFormDepId(props.lists.departList,i)))
+        }
+        const depLists = [...new Set(idList)]
+        const filteredList = props.lists.spList.opList.filter(i => depLists.includes(i.depId));
         if(filteredList && filteredList.length>0){
           state.zyList = filteredList
         }else{
           state.zyList = props.lists.spList.opList
         }
+      }
+
+      const getListFromDep = (dep) =>{
+        let depIds = []
+        depIds.push(dep.depId)
+        if (Array.isArray(dep.children)) {
+          for (let child of dep.children) {
+            depIds = depIds.concat(getListFromDep(child));
+          }
+        }
+        return depIds;
+      }
+
+      const getIdListsFormDepId=(DepList:Array<any>,id:number)=>{
+        for(const i of DepList){
+          if(i.depId === id){
+            return i
+          }
+          if(Array.isArray(i.children)){
+            const node:any = getIdListsFormDepId(i.children,id)
+            if(node){
+              return node
+            }
+          }
+        }
+        return null
       }
       const getSelected = ()=>{
         state.form.involveOtherWork = workSelectRef.value.selected
@@ -685,9 +692,9 @@
         return arr.map((i)=>{
           return {
             uid: i[0],
-            certificate: i[1].split(',')[0],
-            certExpiredAt: i[1].split(',')[1],
-            certTypeName: i[1].split(',')[2]
+            certificate: i[1]?i[1].split(',')[0]:'',
+            certExpiredAt: i[1]?i[1].split(',')[1]:'',
+            certTypeName: ''
           }
         })
       }
@@ -751,7 +758,7 @@
             state.form.workDetail.bcPath = state.form.workDetail.bcPath.join(',')
             state.form.riskIdentification = state.form.riskIdentification.join(',')
             const {depIdList,...data} = state.form
-            data.operatorUids = transform2Arr(data.operatorUids)
+            data.operatorUids = transformArr(data.operatorUids)
             data.headUids = transform2Arr(data.headUids)
             data.guardianUids = transform2Arr(data.guardianUids)
             data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids)
diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue
index f9288e6..e28aa17 100644
--- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue
@@ -90,15 +90,15 @@
         </el-col>
         <el-col :span="12">
           <el-form-item label="作业人" prop="operatorUids">
-            <el-select v-model="form.operatorUids" filterable multiple clearable>
-              <el-option
-                  v-for="item in zyList"
-                  :key="item.uid"
-                  :label="item.realName"
-                  :value="item.uid"
-              />
-            </el-select>
-            <!--            <el-cascader style="width: 100%" v-model="form.operatorUids" :options="lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>-->
+<!--            <el-select v-model="form.operatorUids" filterable multiple clearable>-->
+<!--              <el-option-->
+<!--                  v-for="item in zyList"-->
+<!--                  :key="item.uid"-->
+<!--                  :label="item.realName"-->
+<!--                  :value="item.uid"-->
+<!--              />-->
+<!--            </el-select>-->
+                <el-cascader style="width: 100%" v-model="form.operatorUids" :options="zyList?zyList:lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>
           </el-form-item>
         </el-col>
 			</el-row>
@@ -345,7 +345,7 @@
 </template>
 
 <script lang="ts">
-	import { toRefs, reactive, defineComponent, ref, defineAsyncComponent, onMounted, onUpdated } from 'vue';
+import {toRefs, reactive, defineComponent, ref, defineAsyncComponent, onMounted, onUpdated, nextTick} from 'vue';
 	import { storeToRefs } from 'pinia';
 	import { initBackEndControlRoutes } from '/@/router/backEnd';
 	import {useUserInfo} from "/@/stores/userInfo";
@@ -504,35 +504,11 @@
           }
         },
         cas2Props: {
-          expandTrigger: 'hover',
           value: 'uid',
           label: 'realName',
           multiple: true,
-          checkStrictly: false,
-          lazy: true,
-          async lazyLoad(node, resolve){
-            const { value, level } = node
-            let nodes = []
-            if(level == 0){
-              nodes = props.lists.spList.opList
-            }else{
-              let res = await userApi().getCtf({uid: value})
-              if(res.data.code == 200){
-                nodes = res.data.data
-              }else{
-                ElMessage({
-                  type: 'warning',
-                  message: res.data.msg
-                })
-              }
-            }
-            nodes=nodes.map(item => ({
-              uid: item.certNo +','+ item.certExpiredAt+','+item.certTypeName,
-              realName: node.label + '(' +item.certTypeName +' ' + item.certExpiredAt + ')',
-              leaf: level >= 1
-            }))
-            resolve(nodes)
-          }
+          checkStrictly: true,
+          children: 'certList'
         },
         cas3Props: {
           expandTrigger: 'hover',
@@ -557,8 +533,8 @@
               }
             }
             nodes=nodes.map(item => ({
-              uid: item.certNo +','+ item.certExpiredAt+','+item.certTypeName,
-              realName: node.label + '(' +item.certTypeName +' ' + item.certExpiredAt + ')',
+              uid: item.certNo +','+ item.certExpiredAt,
+              realName: '(' +item.certTypeName +' ' + item.certExpiredAt + ')',
               leaf: level >= 1
             }))
             resolve(nodes)
@@ -637,17 +613,49 @@
         getBasicData()
       })
 
+
       onUpdated(()=>{
         console.log('false loading')
       })
 
-      const getWorkerList = (val)=>{
-        const filteredList = props.lists.spList.opList.filter(i => state.form.workDepIds.includes(i.depId));
+      const getWorkerList = ()=>{
+        let idList:Array<any> = []
+        for(let i of state.form.workDepIds){
+          idList = idList.concat(getListFromDep(getIdListsFormDepId(props.lists.departList,i)))
+        }
+        const depLists = [...new Set(idList)]
+        const filteredList = props.lists.spList.opList.filter(i => depLists.includes(i.depId));
         if(filteredList && filteredList.length>0){
           state.zyList = filteredList
         }else{
           state.zyList = props.lists.spList.opList
         }
+      }
+
+      const getListFromDep = (dep) =>{
+        let depIds = []
+        depIds.push(dep.depId)
+        if (Array.isArray(dep.children)) {
+          for (let child of dep.children) {
+            depIds = depIds.concat(getListFromDep(child));
+          }
+        }
+        return depIds;
+      }
+
+      const getIdListsFormDepId=(DepList:Array<any>,id:number)=>{
+        for(const i of DepList){
+          if(i.depId === id){
+            return i
+          }
+          if(Array.isArray(i.children)){
+            const node:any = getIdListsFormDepId(i.children,id)
+            if(node){
+              return node
+            }
+          }
+        }
+        return null
       }
 
       const openWorkSelect = ()=>{
@@ -721,9 +729,9 @@
         return arr.map((i)=>{
           return {
             uid: i[0],
-            certificate: i[1].split(',')[0],
-            certExpiredAt: i[1].split(',')[1],
-            certTypeName: i[1].split(',')[2]
+            certificate: i[1]?i[1].split(',')[0]:'',
+            certExpiredAt: i[1]?i[1].split(',')[1]:'',
+            certTypeName: ''
           }
         })
       }
@@ -759,17 +767,15 @@
               temp.push(i)
             }
           }
-          if(type == '作业人'){state.form.operatorUids = temp}
+          if(type == '作业人'){state.form.operatorUids = JSON.parse(JSON.stringify(temp))}
           // if(type == '分析人'){state.form.analystUids = temp}
           if(type == '监护人'){state.form.guardianUids = temp}
           if(type == '确认人'){state.form.safetyMeasureUids = temp}
           if(type == '结束人'){state.form.startOrEndUids = temp}
-          console.log(value,state.form.operatorUids,55)
         }
       }
 
       const submitForm = async (formEl: FormInstance | undefined) => {
-        console.log(state.form.operatorUids,666)
         if (!formEl) return
         await formEl.validate(async (valid, fields) => {
           if (valid) {
@@ -794,7 +800,8 @@
               return item
             })
             data.workDetail.workMethod = data.workDetail.methodList.join(',')
-            data.operatorUids = transform2Arr(data.operatorUids)
+            // data.operatorUids = transform2Arr(data.operatorUids)
+            data.operatorUids = transformArr(data.operatorUids)
             data.headUids = transform2Arr(data.headUids)
             // data.analystUids = transformArr(data.analystUids)
             data.guardianUids = transform2Arr(data.guardianUids)
diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/ground.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/ground.vue
index bb9c260..d0fec06 100644
--- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/ground.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/ground.vue
@@ -42,15 +42,15 @@
         </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 zyList"
-                  :key="item.uid"
-                  :label="item.realName"
-                  :value="item.uid"
-              />
-            </el-select>
-            <!--            <el-cascader style="width: 100%" v-model="form.operatorUids" :options="lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>-->
+<!--            <el-select v-model="form.operatorUids" multiple filterable clearable>-->
+<!--              <el-option-->
+<!--                  v-for="item in zyList"-->
+<!--                  :key="item.uid"-->
+<!--                  :label="item.realName"-->
+<!--                  :value="item.uid"-->
+<!--              />-->
+<!--            </el-select>-->
+            <el-cascader style="width: 100%" v-model="form.operatorUids" :options="zyList?zyList:lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>
           </el-form-item>
         </el-col>
 			</el-row>
@@ -128,6 +128,20 @@
                   <div class="el-upload__tip">上传jpg/png图片尺寸小于2M,最多可上传3张</div>
                 </template>
               </el-upload>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="作业内容签字人" prop="workDetail.signUid">
+              <el-select v-model="form.workDetail.signUid" filterable clearable>
+                <el-option
+                    v-for="item in lists.workerList"
+                    :key="item.uid"
+                    :label="item.username"
+                    :value="item.uid"
+                />
+              </el-select>
             </el-form-item>
           </el-col>
         </el-row>
@@ -299,19 +313,19 @@
             </el-form-item>
           </el-col>
         </el-row>
-        <el-row>
-          <el-col :span="12">
-            <el-form-item label="签字人" prop="workDetail.signUid">
-              <el-select v-model="form.workDetail.signUid" filterable clearable>
-                <el-option
-                    v-for="item in lists.workerList"
-                    :key="item.uid"
-                    :label="item.username"
-                    :value="item.uid"
-                />
-              </el-select>
-            </el-form-item>
-          </el-col>
+<!--        <el-row>-->
+<!--          <el-col :span="12">-->
+<!--            <el-form-item label="作业内容签字人" prop="workDetail.signUid">-->
+<!--              <el-select v-model="form.workDetail.signUid" filterable clearable>-->
+<!--                <el-option-->
+<!--                    v-for="item in lists.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="lastApprover">-->
 <!--              <el-select v-model="form.lastApprover" filterable clearable>-->
@@ -325,7 +339,7 @@
 <!--              <el-cascader style="width: 100%" v-model="form.lastApprover" :options="lists.workerList" :props="cas4Props" filterable :show-all-levels="false"/>-->
 <!--            </el-form-item>-->
 <!--          </el-col>-->
-        </el-row>
+<!--        </el-row>-->
 			</div>
 		</el-form>
 		<div class="applyBtn">
@@ -456,35 +470,11 @@
           }
         },
         cas2Props: {
-          expandTrigger: 'hover',
           value: 'uid',
           label: 'realName',
           multiple: true,
-          checkStrictly: false,
-          lazy: true,
-          async lazyLoad(node, resolve){
-            const { value, level } = node
-            let nodes = []
-            if(level == 0){
-              nodes = props.lists.spList.opList
-            }else{
-              let res = await userApi().getCtf({uid: value})
-              if(res.data.code == 200){
-                nodes = res.data.data
-              }else{
-                ElMessage({
-                  type: 'warning',
-                  message: res.data.msg
-                })
-              }
-            }
-            nodes=nodes.map(item => ({
-              uid: item.certNo +','+ item.certExpiredAt+','+item.certTypeName,
-              realName: node.label + '(' +item.certTypeName +' ' + item.certExpiredAt + ')',
-              leaf: level >= 1
-            }))
-            resolve(nodes)
-          }
+          checkStrictly: true,
+          children: 'certList'
         },
         cas3Props: {
           expandTrigger: 'hover',
@@ -583,13 +573,44 @@
         workSelectRef.value.openDialog(state.form.involveOtherWork)
       }
 
-      const getWorkerList = (val)=>{
-        const filteredList = props.lists.spList.opList.filter(i => state.form.workDepIds.includes(i.depId));
+      const getWorkerList = ()=>{
+        let idList:Array<any> = []
+        for(let i of state.form.workDepIds){
+          idList = idList.concat(getListFromDep(getIdListsFormDepId(props.lists.departList,i)))
+        }
+        const depLists = [...new Set(idList)]
+        const filteredList = props.lists.spList.opList.filter(i => depLists.includes(i.depId));
         if(filteredList && filteredList.length>0){
           state.zyList = filteredList
         }else{
           state.zyList = props.lists.spList.opList
         }
+      }
+
+      const getListFromDep = (dep) =>{
+        let depIds = []
+        depIds.push(dep.depId)
+        if (Array.isArray(dep.children)) {
+          for (let child of dep.children) {
+            depIds = depIds.concat(getListFromDep(child));
+          }
+        }
+        return depIds;
+      }
+
+      const getIdListsFormDepId=(DepList:Array<any>,id:number)=>{
+        for(const i of DepList){
+          if(i.depId === id){
+            return i
+          }
+          if(Array.isArray(i.children)){
+            const node:any = getIdListsFormDepId(i.children,id)
+            if(node){
+              return node
+            }
+          }
+        }
+        return null
       }
 
       const getSelected = ()=>{
@@ -657,9 +678,9 @@
         return arr.map((i)=>{
           return {
             uid: i[0],
-            certificate: i[1].split(',')[0],
-            certExpiredAt: i[1].split(',')[1],
-            certTypeName: i[1].split(',')[2]
+            certificate: i[1]?i[1].split(',')[0]:'',
+            certExpiredAt: i[1]?i[1].split(',')[1]:'',
+            certTypeName: ''
           }
         })
       }
@@ -722,7 +743,7 @@
             state.form.workDetail.gbPath = state.form.workDetail.gbPath.join(',')
             state.form.riskIdentification = state.form.riskIdentification.join(',')
             const {depIdList,...data} = state.form
-            data.operatorUids = transform2Arr(data.operatorUids)
+            data.operatorUids = transformArr(data.operatorUids)
             data.headUids = transform2Arr(data.headUids)
             data.guardianUids = transform2Arr(data.guardianUids)
             data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids)
diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/height.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/height.vue
index 0ca2810..df2f5cd 100644
--- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/height.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/height.vue
@@ -75,15 +75,15 @@
         </el-col>
         <el-col :span="12">
           <el-form-item label="作业人" prop="operatorUids">
-            <el-select v-model="form.operatorUids" filterable multiple clearable>
-              <el-option
-                  v-for="item in zyList"
-                  :key="item.uid"
-                  :label="item.realName"
-                  :value="item.uid"
-              />
-            </el-select>
-            <!--            <el-cascader style="width: 100%" v-model="form.operatorUids" :options="lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>-->
+<!--            <el-select v-model="form.operatorUids" filterable multiple clearable>-->
+<!--              <el-option-->
+<!--                  v-for="item in zyList"-->
+<!--                  :key="item.uid"-->
+<!--                  :label="item.realName"-->
+<!--                  :value="item.uid"-->
+<!--              />-->
+<!--            </el-select>-->
+            <el-cascader style="width: 100%" v-model="form.operatorUids" :options="zyList?zyList:lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>
           </el-form-item>
         </el-col>
 			</el-row>
@@ -399,35 +399,11 @@
           }
         },
         cas2Props: {
-          expandTrigger: 'hover',
           value: 'uid',
           label: 'realName',
           multiple: true,
-          checkStrictly: false,
-          lazy: true,
-          async lazyLoad(node, resolve){
-            const { value, level } = node
-            let nodes = []
-            if(level == 0){
-              nodes = props.lists.spList.opList
-            }else{
-              let res = await userApi().getCtf({uid: value})
-              if(res.data.code == 200){
-                nodes = res.data.data
-              }else{
-                ElMessage({
-                  type: 'warning',
-                  message: res.data.msg
-                })
-              }
-            }
-            nodes=nodes.map(item => ({
-              uid: item.certNo +','+ item.certExpiredAt+','+item.certTypeName,
-              realName: node.label + '(' +item.certTypeName +' ' + item.certExpiredAt + ')',
-              leaf: level >= 1
-            }))
-            resolve(nodes)
-          }
+          checkStrictly: true,
+          children: 'certList'
         },
         cas3Props: {
           expandTrigger: 'hover',
@@ -527,13 +503,44 @@
         workSelectRef.value.openDialog(state.form.involveOtherWork)
       }
 
-      const getWorkerList = (val)=>{
-        const filteredList = props.lists.spList.opList.filter(i => state.form.workDepIds.includes(i.depId));
+      const getWorkerList = ()=>{
+        let idList:Array<any> = []
+        for(let i of state.form.workDepIds){
+          idList = idList.concat(getListFromDep(getIdListsFormDepId(props.lists.departList,i)))
+        }
+        const depLists = [...new Set(idList)]
+        const filteredList = props.lists.spList.opList.filter(i => depLists.includes(i.depId));
         if(filteredList && filteredList.length>0){
           state.zyList = filteredList
         }else{
           state.zyList = props.lists.spList.opList
         }
+      }
+
+      const getListFromDep = (dep) =>{
+        let depIds = []
+        depIds.push(dep.depId)
+        if (Array.isArray(dep.children)) {
+          for (let child of dep.children) {
+            depIds = depIds.concat(getListFromDep(child));
+          }
+        }
+        return depIds;
+      }
+
+      const getIdListsFormDepId=(DepList:Array<any>,id:number)=>{
+        for(const i of DepList){
+          if(i.depId === id){
+            return i
+          }
+          if(Array.isArray(i.children)){
+            const node:any = getIdListsFormDepId(i.children,id)
+            if(node){
+              return node
+            }
+          }
+        }
+        return null
       }
 
       const getSelected = ()=>{
@@ -601,9 +608,9 @@
         return arr.map((i)=>{
           return {
             uid: i[0],
-            certificate: i[1].split(',')[0],
-            certExpiredAt: i[1].split(',')[1],
-            certTypeName: i[1].split(',')[2]
+            certificate: i[1]?i[1].split(',')[0]:'',
+            certExpiredAt: i[1]?i[1].split(',')[1]:'',
+            certTypeName: ''
           }
         })
       }
@@ -665,7 +672,7 @@
             // }
             state.form.riskIdentification = state.form.riskIdentification.join(',')
             const {depIdList,...data} = state.form
-            data.operatorUids = transform2Arr(data.operatorUids)
+            data.operatorUids = transformArr(data.operatorUids)
             data.headUids = transform2Arr(data.headUids)
             data.guardianUids = transform2Arr(data.guardianUids)
             data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids)
diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/hoist.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/hoist.vue
index 449a455..b39b6b4 100644
--- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/hoist.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/hoist.vue
@@ -97,15 +97,15 @@
         </el-col>
         <el-col :span="12">
           <el-form-item label="作业人" prop="operatorUids">
-            <el-select v-model="form.operatorUids" filterable multiple clearable>
-              <el-option
-                  v-for="item in zyList"
-                  :key="item.uid"
-                  :label="item.realName"
-                  :value="item.uid"
-              />
-            </el-select>
-            <!--            <el-cascader style="width: 100%" v-model="form.operatorUids" :options="lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>-->
+<!--            <el-select v-model="form.operatorUids" filterable multiple clearable>-->
+<!--              <el-option-->
+<!--                  v-for="item in zyList"-->
+<!--                  :key="item.uid"-->
+<!--                  :label="item.realName"-->
+<!--                  :value="item.uid"-->
+<!--              />-->
+<!--            </el-select>-->
+            <el-cascader style="width: 100%" v-model="form.operatorUids" :options="zyList?zyList:lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>
           </el-form-item>
         </el-col>
 			</el-row>
@@ -484,35 +484,11 @@
           }
         },
         cas2Props: {
-          expandTrigger: 'hover',
           value: 'uid',
           label: 'realName',
           multiple: true,
-          checkStrictly: false,
-          lazy: true,
-          async lazyLoad(node, resolve){
-            const { value, level } = node
-            let nodes = []
-            if(level == 0){
-              nodes = props.lists.spList.opList
-            }else{
-              let res = await userApi().getCtf({uid: value})
-              if(res.data.code == 200){
-                nodes = res.data.data
-              }else{
-                ElMessage({
-                  type: 'warning',
-                  message: res.data.msg
-                })
-              }
-            }
-            nodes=nodes.map(item => ({
-              uid: item.certNo +','+ item.certExpiredAt+','+item.certTypeName,
-              realName: node.label + '(' +item.certTypeName +' ' + item.certExpiredAt + ')',
-              leaf: level >= 1
-            }))
-            resolve(nodes)
-          }
+          checkStrictly: true,
+          children: 'certList'
         },
         cas3Props: {
           expandTrigger: 'hover',
@@ -608,13 +584,44 @@
         workSelectRef.value.openDialog(state.form.involveOtherWork)
       }
 
-      const getWorkerList = (val)=>{
-        const filteredList = props.lists.spList.opList.filter(i => state.form.workDepIds.includes(i.depId));
+      const getWorkerList = ()=>{
+        let idList:Array<any> = []
+        for(let i of state.form.workDepIds){
+          idList = idList.concat(getListFromDep(getIdListsFormDepId(props.lists.departList,i)))
+        }
+        const depLists = [...new Set(idList)]
+        const filteredList = props.lists.spList.opList.filter(i => depLists.includes(i.depId));
         if(filteredList && filteredList.length>0){
           state.zyList = filteredList
         }else{
           state.zyList = props.lists.spList.opList
         }
+      }
+
+      const getListFromDep = (dep) =>{
+        let depIds = []
+        depIds.push(dep.depId)
+        if (Array.isArray(dep.children)) {
+          for (let child of dep.children) {
+            depIds = depIds.concat(getListFromDep(child));
+          }
+        }
+        return depIds;
+      }
+
+      const getIdListsFormDepId=(DepList:Array<any>,id:number)=>{
+        for(const i of DepList){
+          if(i.depId === id){
+            return i
+          }
+          if(Array.isArray(i.children)){
+            const node:any = getIdListsFormDepId(i.children,id)
+            if(node){
+              return node
+            }
+          }
+        }
+        return null
       }
 
       const getSelected = ()=>{
@@ -686,9 +693,9 @@
         return arr.map((i)=>{
           return {
             uid: i[0],
-            certificate: i[1].split(',')[0],
-            certExpiredAt: i[1].split(',')[1],
-            certTypeName: i[1].split(',')[2]
+            certificate: i[1]?i[1].split(',')[0]:'',
+            certExpiredAt: i[1]?i[1].split(',')[1]:'',
+            certTypeName: ''
           }
         })
       }
@@ -751,7 +758,7 @@
             state.form.workDetail.solicitorUids = state.form.workDetail.solicitorUids.join(',')
             state.form.riskIdentification = state.form.riskIdentification.join(',')
             const {depIdList,...data} = state.form
-            data.operatorUids = transform2Arr(data.operatorUids)
+            data.operatorUids = transformArr(data.operatorUids)
             data.headUids = transform2Arr(data.headUids)
             data.guardianUids = transform2Arr(data.guardianUids)
             data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids)
diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/open.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/open.vue
index 94d244a..d5a5f10 100644
--- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/open.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/open.vue
@@ -42,15 +42,15 @@
         </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 zyList"
-                  :key="item.uid"
-                  :label="item.realName"
-                  :value="item.uid"
-              />
-            </el-select>
-            <!--            <el-cascader style="width: 100%" v-model="form.operatorUids" :options="lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>-->
+<!--            <el-select v-model="form.operatorUids" multiple clearable>-->
+<!--              <el-option-->
+<!--                  v-for="item in zyList"-->
+<!--                  :key="item.uid"-->
+<!--                  :label="item.realName"-->
+<!--                  :value="item.uid"-->
+<!--              />-->
+<!--            </el-select>-->
+            <el-cascader style="width: 100%" v-model="form.operatorUids" :options="zyList?zyList:lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>
           </el-form-item>
         </el-col>
 			</el-row>
@@ -396,6 +396,7 @@
     props1:{},
     depProps:{},
     casProps:{}
+    cas2Props:{}
     safetyMeasureBasicList: [],
     fileList: Array<file>,
     uploadUrl: string,
@@ -470,6 +471,13 @@
           multiple: true,
           checkStrictly: true,
           emitPath: false
+        },
+        cas2Props: {
+          value: 'uid',
+          label: 'realName',
+          multiple: true,
+          checkStrictly: true,
+          children: 'certList'
         },
         casProps: {
           expandTrigger: 'hover',
@@ -588,13 +596,44 @@
         state.form.workDetail.qpDetailList.splice(index,1)
       }
 
-      const getWorkerList = (val)=>{
-        const filteredList = props.lists.spList.opList.filter(i => state.form.workDepIds.includes(i.depId));
+      const getWorkerList = ()=>{
+        let idList:Array<any> = []
+        for(let i of state.form.workDepIds){
+          idList = idList.concat(getListFromDep(getIdListsFormDepId(props.lists.departList,i)))
+        }
+        const depLists = [...new Set(idList)]
+        const filteredList = props.lists.spList.opList.filter(i => depLists.includes(i.depId));
         if(filteredList && filteredList.length>0){
           state.zyList = filteredList
         }else{
           state.zyList = props.lists.spList.opList
         }
+      }
+
+      const getListFromDep = (dep) =>{
+        let depIds = []
+        depIds.push(dep.depId)
+        if (Array.isArray(dep.children)) {
+          for (let child of dep.children) {
+            depIds = depIds.concat(getListFromDep(child));
+          }
+        }
+        return depIds;
+      }
+
+      const getIdListsFormDepId=(DepList:Array<any>,id:number)=>{
+        for(const i of DepList){
+          if(i.depId === id){
+            return i
+          }
+          if(Array.isArray(i.children)){
+            const node:any = getIdListsFormDepId(i.children,id)
+            if(node){
+              return node
+            }
+          }
+        }
+        return null
       }
 
       const getSelected = ()=>{
@@ -662,9 +701,9 @@
         return arr.map((i)=>{
           return {
             uid: i[0],
-            certificate: i[1].split(',')[0],
-            certExpiredAt: i[1].split(',')[1],
-            certTypeName: i[1].split(',')[2]
+            certificate: i[1]?i[1].split(',')[0]:'',
+            certExpiredAt: i[1]?i[1].split(',')[1]:'',
+            certTypeName: ''
           }
         })
       }
@@ -730,7 +769,7 @@
             state.form.workDetail.sketchMapPath = state.form.workDetail.sketchMapPath.join(',')
             state.form.riskIdentification = state.form.riskIdentification.join(',')
             const {depIdList,...data} = state.form
-            data.operatorUids = transform2Arr(data.operatorUids)
+            data.operatorUids = transformArr(data.operatorUids)
             data.headUids = transform2Arr(data.headUids)
             data.guardianUids = transform2Arr(data.guardianUids)
             data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids)
diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/plate.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/plate.vue
index 15fa75d..0e7ded9 100644
--- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/plate.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/plate.vue
@@ -180,15 +180,15 @@
         </el-col>
         <el-col :span="12">
           <el-form-item label="作业人" prop="operatorUids">
-            <el-select v-model="form.operatorUids" filterable multiple clearable>
-              <el-option
-                  v-for="item in zyList"
-                  :key="item.uid"
-                  :label="item.realName"
-                  :value="item.uid"
-              />
-            </el-select>
-            <!--            <el-cascader style="width: 100%" v-model="form.operatorUids" :options="lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>-->
+<!--            <el-select v-model="form.operatorUids" filterable multiple clearable>-->
+<!--              <el-option-->
+<!--                  v-for="item in zyList"-->
+<!--                  :key="item.uid"-->
+<!--                  :label="item.realName"-->
+<!--                  :value="item.uid"-->
+<!--              />-->
+<!--            </el-select>-->
+            <el-cascader style="width: 100%" v-model="form.operatorUids" :options="zyList?zyList:lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>
           </el-form-item>
         </el-col>
 			</el-row>
@@ -527,35 +527,11 @@
           }
         },
         cas2Props: {
-          expandTrigger: 'hover',
           value: 'uid',
           label: 'realName',
           multiple: true,
-          checkStrictly: false,
-          lazy: true,
-          async lazyLoad(node, resolve){
-            const { value, level } = node
-            let nodes = []
-            if(level == 0){
-              nodes = props.lists.spList.opList
-            }else{
-              let res = await userApi().getCtf({uid: value})
-              if(res.data.code == 200){
-                nodes = res.data.data
-              }else{
-                ElMessage({
-                  type: 'warning',
-                  message: res.data.msg
-                })
-              }
-            }
-            nodes=nodes.map(item => ({
-              uid: item.certNo +','+ item.certExpiredAt+','+item.certTypeName,
-              realName: node.label + '(' +item.certTypeName +' ' + item.certExpiredAt + ')',
-              leaf: level >= 1
-            }))
-            resolve(nodes)
-          }
+          checkStrictly: true,
+          children: 'certList'
         },
         cas3Props: {
           expandTrigger: 'hover',
@@ -661,13 +637,44 @@
       const openWorkSelect = ()=>{
         workSelectRef.value.openDialog(state.form.involveOtherWork)
       }
-      const getWorkerList = (val)=>{
-        const filteredList = props.lists.spList.opList.filter(i => state.form.workDepIds.includes(i.depId));
+      const getWorkerList = ()=>{
+        let idList:Array<any> = []
+        for(let i of state.form.workDepIds){
+          idList = idList.concat(getListFromDep(getIdListsFormDepId(props.lists.departList,i)))
+        }
+        const depLists = [...new Set(idList)]
+        const filteredList = props.lists.spList.opList.filter(i => depLists.includes(i.depId));
         if(filteredList && filteredList.length>0){
           state.zyList = filteredList
         }else{
           state.zyList = props.lists.spList.opList
         }
+      }
+
+      const getListFromDep = (dep) =>{
+        let depIds = []
+        depIds.push(dep.depId)
+        if (Array.isArray(dep.children)) {
+          for (let child of dep.children) {
+            depIds = depIds.concat(getListFromDep(child));
+          }
+        }
+        return depIds;
+      }
+
+      const getIdListsFormDepId=(DepList:Array<any>,id:number)=>{
+        for(const i of DepList){
+          if(i.depId === id){
+            return i
+          }
+          if(Array.isArray(i.children)){
+            const node:any = getIdListsFormDepId(i.children,id)
+            if(node){
+              return node
+            }
+          }
+        }
+        return null
       }
       const getSelected = ()=>{
         state.form.involveOtherWork = workSelectRef.value.selected
@@ -735,9 +742,9 @@
         return arr.map((i)=>{
           return {
             uid: i[0],
-            certificate: i[1].split(',')[0],
-            certExpiredAt: i[1].split(',')[1],
-            certTypeName: i[1].split(',')[2]
+            certificate: i[1]?i[1].split(',')[0]:'',
+            certExpiredAt: i[1]?i[1].split(',')[1]:'',
+            certTypeName: ''
           }
         })
       }
@@ -800,7 +807,7 @@
             state.form.workDetail.bpLocationMapPath = state.form.workDetail.bpLocationMapPath.join(',')
             state.form.riskIdentification = state.form.riskIdentification.join(',')
             const {depIdList,...data} = state.form
-            data.operatorUids = transform2Arr(data.operatorUids)
+            data.operatorUids = transformArr(data.operatorUids)
             data.headUids = transform2Arr(data.headUids)
             data.guardianUids = transform2Arr(data.guardianUids)
             data.safetyMeasureUids = transform2Arr(data.safetyMeasureUids)
diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/power.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/power.vue
index 031d931..c9edd23 100644
--- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/power.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/power.vue
@@ -99,15 +99,15 @@
         </el-col>
         <el-col :span="12">
           <el-form-item label="作业人" prop="operatorUids">
-            <el-select v-model="form.operatorUids" filterable multiple clearable>
-              <el-option
-                  v-for="item in zyList"
-                  :key="item.uid"
-                  :label="item.realName"
-                  :value="item.uid"
-              />
-            </el-select>
-            <!--              <el-cascader style="width: 100%" v-model="form.operatorUids" :options="lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>-->
+<!--            <el-select v-model="form.operatorUids" filterable multiple clearable>-->
+<!--              <el-option-->
+<!--                  v-for="item in zyList"-->
+<!--                  :key="item.uid"-->
+<!--                  :label="item.realName"-->
+<!--                  :value="item.uid"-->
+<!--              />-->
+<!--            </el-select>-->
+            <el-cascader style="width: 100%" v-model="form.operatorUids" :options="zyList?zyList:lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>
           </el-form-item>
         </el-col>
 			</el-row>
@@ -472,35 +472,11 @@
           }
         },
         cas2Props: {
-          expandTrigger: 'hover',
           value: 'uid',
           label: 'realName',
           multiple: true,
-          checkStrictly: false,
-          lazy: true,
-          async lazyLoad(node, resolve){
-            const { value, level } = node
-            let nodes = []
-            if(level == 0){
-              nodes = props.lists.spList.opList
-            }else{
-              let res = await userApi().getCtf({uid: value})
-              if(res.data.code == 200){
-                nodes = res.data.data
-              }else{
-                ElMessage({
-                  type: 'warning',
-                  message: res.data.msg
-                })
-              }
-            }
-            nodes=nodes.map(item => ({
-              uid: item.certNo +','+ item.certExpiredAt+','+item.certTypeName,
-              realName: node.label + '(' +item.certTypeName +' ' + item.certExpiredAt + ')',
-              leaf: level >= 1
-            }))
-            resolve(nodes)
-          }
+          checkStrictly: true,
+          children: 'certList'
         },
         cas3Props: {
           expandTrigger: 'hover',
@@ -595,13 +571,44 @@
       const openWorkSelect = ()=>{
         workSelectRef.value.openDialog(state.form.involveOtherWork)
       }
-      const getWorkerList = (val)=>{
-        const filteredList = props.lists.spList.opList.filter(i => state.form.workDepIds.includes(i.depId));
+      const getWorkerList = ()=>{
+        let idList:Array<any> = []
+        for(let i of state.form.workDepIds){
+          idList = idList.concat(getListFromDep(getIdListsFormDepId(props.lists.departList,i)))
+        }
+        const depLists = [...new Set(idList)]
+        const filteredList = props.lists.spList.opList.filter(i => depLists.includes(i.depId));
         if(filteredList && filteredList.length>0){
           state.zyList = filteredList
         }else{
           state.zyList = props.lists.spList.opList
         }
+      }
+
+      const getListFromDep = (dep) =>{
+        let depIds = []
+        depIds.push(dep.depId)
+        if (Array.isArray(dep.children)) {
+          for (let child of dep.children) {
+            depIds = depIds.concat(getListFromDep(child));
+          }
+        }
+        return depIds;
+      }
+
+      const getIdListsFormDepId=(DepList:Array<any>,id:number)=>{
+        for(const i of DepList){
+          if(i.depId === id){
+            return i
+          }
+          if(Array.isArray(i.children)){
+            const node:any = getIdListsFormDepId(i.children,id)
+            if(node){
+              return node
+            }
+          }
+        }
+        return null
       }
       const getSelected = ()=>{
         state.form.involveOtherWork = workSelectRef.value.selected
@@ -668,9 +675,9 @@
         return arr.map((i)=>{
           return {
             uid: i[0],
-            certificate: i[1].split(',')[0],
-            certExpiredAt: i[1].split(',')[1],
-            certTypeName: i[1].split(',')[2]
+            certificate: i[1]?i[1].split(',')[0]:'',
+            certExpiredAt: i[1]?i[1].split(',')[1]:'',
+            certTypeName: ''
           }
         })
       }
@@ -734,7 +741,7 @@
             state.form.workDetail.electricityUids = state.form.workDetail.electricityUids.join(',')
             state.form.riskIdentification = state.form.riskIdentification.join(',')
             const {depIdList,...data} = state.form
-            data.operatorUids = transform2Arr(data.operatorUids)
+            data.operatorUids = transformArr(data.operatorUids)
             data.headUids = transform2Arr(data.headUids)
             // data.analystUids = transformArr(data.analystUids)
             data.guardianUids = transform2Arr(data.guardianUids)
diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/space.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/space.vue
index d026ece..bab6078 100644
--- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/space.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/space.vue
@@ -76,15 +76,15 @@
         </el-col>
         <el-col :span="12">
           <el-form-item label="作业人" prop="operatorUids">
-            <el-select v-model="form.operatorUids" filterable multiple clearable>
-              <el-option
-                  v-for="item in zyList"
-                  :key="item.uid"
-                  :label="item.realName"
-                  :value="item.uid"
-              />
-            </el-select>
-            <!--            <el-cascader style="width: 100%" v-model="form.operatorUids" :options="lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>-->
+<!--            <el-select v-model="form.operatorUids" filterable multiple clearable>-->
+<!--              <el-option-->
+<!--                  v-for="item in zyList"-->
+<!--                  :key="item.uid"-->
+<!--                  :label="item.realName"-->
+<!--                  :value="item.uid"-->
+<!--              />-->
+<!--            </el-select>-->
+            <el-cascader style="width: 100%" v-model="form.operatorUids" :options="zyList?zyList:lists.spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>
           </el-form-item>
         </el-col>
 			</el-row>
@@ -409,35 +409,11 @@
           }
         },
         cas2Props: {
-          expandTrigger: 'hover',
           value: 'uid',
           label: 'realName',
           multiple: true,
-          checkStrictly: false,
-          lazy: true,
-          async lazyLoad(node, resolve){
-            const { value, level } = node
-            let nodes = []
-            if(level == 0){
-              nodes = props.lists.spList.opList
-            }else{
-              let res = await userApi().getCtf({uid: value})
-              if(res.data.code == 200){
-                nodes = res.data.data
-              }else{
-                ElMessage({
-                  type: 'warning',
-                  message: res.data.msg
-                })
-              }
-            }
-            nodes=nodes.map(item => ({
-              uid: item.certNo +','+ item.certExpiredAt+','+item.certTypeName,
-              realName: node.label + '(' +item.certTypeName +' ' + item.certExpiredAt + ')',
-              leaf: level >= 1
-            }))
-            resolve(nodes)
-          }
+          checkStrictly: true,
+          children: 'certList'
         },
         cas3Props: {
           expandTrigger: 'hover',
@@ -531,13 +507,44 @@
       const openWorkSelect = ()=>{
         workSelectRef.value.openDialog(state.form.involveOtherWork)
       }
-      const getWorkerList = (val)=>{
-        const filteredList = props.lists.spList.opList.filter(i => state.form.workDepIds.includes(i.depId));
+      const getWorkerList = ()=>{
+        let idList:Array<any> = []
+        for(let i of state.form.workDepIds){
+          idList = idList.concat(getListFromDep(getIdListsFormDepId(props.lists.departList,i)))
+        }
+        const depLists = [...new Set(idList)]
+        const filteredList = props.lists.spList.opList.filter(i => depLists.includes(i.depId));
         if(filteredList && filteredList.length>0){
           state.zyList = filteredList
         }else{
           state.zyList = props.lists.spList.opList
         }
+      }
+
+      const getListFromDep = (dep) =>{
+        let depIds = []
+        depIds.push(dep.depId)
+        if (Array.isArray(dep.children)) {
+          for (let child of dep.children) {
+            depIds = depIds.concat(getListFromDep(child));
+          }
+        }
+        return depIds;
+      }
+
+      const getIdListsFormDepId=(DepList:Array<any>,id:number)=>{
+        for(const i of DepList){
+          if(i.depId === id){
+            return i
+          }
+          if(Array.isArray(i.children)){
+            const node:any = getIdListsFormDepId(i.children,id)
+            if(node){
+              return node
+            }
+          }
+        }
+        return null
       }
       const getSelected = ()=>{
         state.form.involveOtherWork = workSelectRef.value.selected
@@ -605,9 +612,9 @@
         return arr.map((i)=>{
           return {
             uid: i[0],
-            certificate: i[1].split(',')[0],
-            certExpiredAt: i[1].split(',')[1],
-            certTypeName: i[1].split(',')[2]
+            certificate: i[1]?i[1].split(',')[0]:'',
+            certExpiredAt: i[1]?i[1].split(',')[1]:'',
+            certTypeName: ''
           }
         })
       }
@@ -670,7 +677,7 @@
             // }
             state.form.riskIdentification = state.form.riskIdentification.join(',')
             const {depIdList,...data} = state.form
-            data.operatorUids = transform2Arr(data.operatorUids)
+            data.operatorUids = transformArr(data.operatorUids)
             data.headUids = transform2Arr(data.headUids)
             // data.analystUids = transformArr(data.analystUids)
             data.guardianUids = transform2Arr(data.guardianUids)
diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/workSelect.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/workSelect.vue
index 15a2e29..a74c29c 100644
--- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/workSelect.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/workSelect.vue
@@ -3,11 +3,11 @@
     <el-row style="margin-bottom: 20px">
       <div class="basic-line" style="display:flex;white-space:nowrap;line-height: 40px">
         <span>作业编号:</span>
-        <el-input v-model="searPara.workPermitNo" placeholder="作业编号"/>
+        <el-input v-model="searPara.searchParams.workPermitNo" placeholder="作业编号"/>
       </div>
       <div class="basic-line">
         <span>作业类型:</span>
-        <el-select v-model="searPara.workType">
+        <el-select v-model="searPara.searchParams.workType">
           <el-option
               v-for="item in workType"
               :key="item.value"
@@ -22,7 +22,7 @@
       </div>
     </el-row>
     <el-table ref="TableRef" :data="otherWorks" style="width: 100%" border @selection-change="handleSelectionChange" :row-key="(row) => { return row.workApplyId }">
-      <el-table-column type="selection" width="55" />
+      <el-table-column type="selection" width="55" :reserve-selection="true"/>
 <!--            <el-table-column type="index" label="序号" width="60" />-->
       <el-table-column prop="workTypeDesc" label="作业类型" show-overflow-tooltip></el-table-column>
       <el-table-column prop="workLevelDesc" label="作业等级" show-overflow-tooltip></el-table-column>
@@ -37,6 +37,7 @@
 <!--              </template>-->
 <!--            </el-table-column>-->
     </el-table>
+    <el-pagination style="margin-top: 20px;display: flex;justify-content: right" v-model:currentPage="searPara.pageIndex" v-model:page-size="searPara.pageSize" :page-sizes="[10]" small="false" background layout="total, sizes, prev, pager, next, jumper" :total="totalSize" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
       <template #footer>
           <span class="dialog-footer">
               <el-button @click="isShowDialog = !isShowDialog" size="default">取 消</el-button>
@@ -58,6 +59,7 @@
     title: string
     isShowDialog: boolean
     searPara: object
+  totalSize: number
     otherWorks: []
   workType: Array<any>
   selected: Array<any>
@@ -73,9 +75,14 @@
             title: '',
             isShowDialog: false,
             searPara: {
-              workPermitNo: '',
-              workType: null
+              pageSize: 10,
+              pageIndex: 1,
+              searchParams: {
+                workPermitNo: '',
+                workType: null
+              }
             },
+          totalSize: 0,
             otherWorks: [],
             selected: [],
             workType: [
@@ -122,6 +129,7 @@
         };
 
         const refreshTableSelection = (works) => {
+            state.selected = works
             if (TableRef.value) {
               for (let i = 0; i < state.otherWorks.length; i++) {
                 if (works.includes(state.otherWorks[i].workApplyId)){
@@ -138,6 +146,7 @@
           let res = await workApplyApi().getOtherWork(state.searPara);
           if (res.data.code === '200') {
             state.otherWorks = JSON.parse(JSON.stringify(res.data.data))
+            state.totalSize = res.data.total
           } else {
             ElMessage({
               type: 'warning',
@@ -149,8 +158,12 @@
 
       const clearSearch = ()=>{
         state.searPara = {
-          workPermitNo: '',
-          workType: null
+          pageSize: 10,
+          pageIndex: 1,
+          searchParams: {
+            workPermitNo: '',
+            workType: null
+          }
         }
         getData()
       }
@@ -161,17 +174,31 @@
       }
 
       const onSubmit = ()=>{
+        console.log(state.selected,'sel')
         context.emit('refreshWorks')
         state.selected = []
         clearSearch()
         state.isShowDialog = false
       }
 
+      // 分页改变
+      const handleSizeChange = (val: number) => {
+        state.searPara.pageSize = val;
+        getData()
+      };
+      // 分页改变
+      const handleCurrentChange = (val: number) => {
+        state.searPara.pageIndex = val;
+        getData()
+      };
+
         // 页面加载时
         onMounted(() => {});
         return {
             userRef,
           TableRef,
+          handleSizeChange,
+          handleCurrentChange,
             handleSelectionChange,
             openDialog,
             getData,
diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/index.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/index.vue
index 19a277c..041edbc 100644
--- a/src/views/newSpecialWorkSystem/workTicket/zysq/index.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/zysq/index.vue
@@ -150,6 +150,7 @@
         getAllDevice()
         getOtherWork()
         spWorker()
+        getOpList()
         getAllRisks()
       });
 
@@ -168,18 +169,18 @@
 			};
 
       const spWorker = async ()=>{
-        for(let id of ['17','18','19']){
+        for(let id of ['18','19']){
           const res = await workApplyApi().getSpList({roleId: id})
-          if(id == '17'){
-            if (res.data.code === '200') {
-              state.lists.spList.opList = JSON.parse(JSON.stringify(res.data.data))
-            } else {
-              ElMessage({
-                type: 'warning',
-                message: res.data.msg
-              });
-            }
-          }
+          // if(id == '17'){
+          //   if (res.data.code === '200') {
+          //     state.lists.spList.opList = JSON.parse(JSON.stringify(res.data.data))
+          //   } else {
+          //     ElMessage({
+          //       type: 'warning',
+          //       message: res.data.msg
+          //     });
+          //   }
+          // }
           if(id == '18'){
             if (res.data.code === '200') {
               state.lists.spList.jhList = JSON.parse(JSON.stringify(res.data.data))
@@ -203,6 +204,29 @@
         }
       }
 
+      const getOpList = async()=>{
+        const res = await workApplyApi().getOpList()
+        if(res.data.code == '200'){
+          if(res.data.data && res.data.data.length>0){
+            state.lists.spList.opList = JSON.parse(JSON.stringify(res.data.data)).map(i=>{
+              if(i.certList && i.certList.length>0){
+                i.certList = i.certList.map(item=>{
+                  item['realName'] = i.realName + '(' + item.certTypeName +':'+ item.certExpiredAt + ')'
+                  item['uid'] = item.certNo + ',' + item.certExpiredAt
+                  return item
+                })
+              }
+              return i
+            })
+          }
+        }else{
+          ElMessage({
+            type: 'warning',
+            message: res.data.msg
+          })
+        }
+      }
+
 			// 获取部门列表
 			const getAllDepartment = async () => {
 				let res = await teamManageApi().getAllDepartment();
@@ -221,7 +245,7 @@
 
       // 获取相关作业列表
       const getOtherWork = async () => {
-        let res = await workApplyApi().getOtherWork({workPermitNo: '',workType: null});
+        let res = await workApplyApi().getOtherWork({pageSize: 999, pageIndex: 1, searchParams: {workPermitNo: '', workType: null}})
         if (res.data.code === '200') {
           state.otherWorks = JSON.parse(JSON.stringify(res.data.data))
           state.lists.otherWorks = JSON.parse(JSON.stringify(res.data.data))
diff --git a/src/views/specialWorkSystem/process/zyjcgl/index.vue b/src/views/specialWorkSystem/process/zyjcgl/index.vue
index 3c93feb..48aa856 100644
--- a/src/views/specialWorkSystem/process/zyjcgl/index.vue
+++ b/src/views/specialWorkSystem/process/zyjcgl/index.vue
@@ -48,8 +48,8 @@
 							</template>
 						</el-table-column>
 						<el-table-column property="info" label="描述" show-overflow-tooltip width="200" align="center"/>
-						<el-table-column property="operatorUname" label="分析人" align="center"/>
-						<el-table-column property="operationTime" label="分析时间" width="180" align="center"/>
+						<el-table-column property="operatorUname" label="检查人" align="center"/>
+						<el-table-column property="operationTime" label="登记时间" width="180" align="center"/>
 <!--            <el-table-column property="mcResultName" label="物资检查" width="180" align="center">-->
 <!--              <template #default="scope">-->
 <!--                <span :class="scope.row.mcResultName == '不合格' ? 'red': ''">{{ scope.row.mcResultName== null?'-':scope.row.mcResultName}}</span>-->
diff --git a/src/views/specialWorkSystem/specialIndex/components/videoDetail.vue b/src/views/specialWorkSystem/specialIndex/components/videoDetail.vue
index 523d929..d3d490d 100644
--- a/src/views/specialWorkSystem/specialIndex/components/videoDetail.vue
+++ b/src/views/specialWorkSystem/specialIndex/components/videoDetail.vue
@@ -5,7 +5,7 @@
 <!--    </div>-->
     <div class="info">
       <div class="left-info">
-        <template v-for="item in videoData.approvalDeviceList">
+        <template v-for="item in videoData.workApprovalDeviceList">
           <iframe class="video-cont" :src="'http://36.108.169.10:8088/808gps/open/player/video.html?lang=zh&devIdno=' + item.deviceNo + '&&account=gtxh&password=000000'"></iframe>
         </template>
         <div class="chart-area">
@@ -37,11 +37,7 @@
               <el-table-column property="operationTime" label="检查填报时间" align="center"/>
               <el-table-column property="checkContent" label="检查内容" align="center"/>
               <el-table-column property="info" label="描述" align="center"/>
-              <el-table-column property="checkContent" label="是否合格" align="center">
-<!--                <template #default="scope">-->
-<!--                  <span>{{scope.row.isGood == 0?'合格':'不合格'}}</span>-->
-<!--                </template>-->
-              </el-table-column>
+              <el-table-column property="checkResultDesc" label="是否合格" align="center"/>
             </el-table>
           </div>
         </div>
@@ -189,7 +185,6 @@
       const recordRef = ref()
       const openDialog = (row)=>{
         state.videoData = row
-        console.log(state.videoData.approvalDeviceList,'data')
         state.title = row.workTypeDesc + '编号' + row.workPermitNo + '实时监测详情'
         state.videoDetailDialog = true
       }
diff --git a/src/views/specialWorkSystem/specialIndex/components/workRecord.vue b/src/views/specialWorkSystem/specialIndex/components/workRecord.vue
index 25b7d7e..26ff22d 100644
--- a/src/views/specialWorkSystem/specialIndex/components/workRecord.vue
+++ b/src/views/specialWorkSystem/specialIndex/components/workRecord.vue
@@ -11,20 +11,20 @@
 <!--    </el-steps>-->
     <div class="item" v-for="(item,index) in data" :key="index">
       <div class="marker">
-        <div class="dot"></div>
+        <div class="dot" :class="item.operationTitle == '作业验收'?'greenDot':''"></div>
         <div class="line"></div>
       </div>
       <div class="content">
-        <div class="tit">{{item.operationTitle}}<span>{{index == data.length - 1 ? '[进行中]': '[已完成]'}}</span></div>
+        <div class="tit">{{item.operationTitle}}<span :class="item.operationTitle == '作业验收'?'green':''">{{item.operationTitle == '作业验收'?'[已完成]':(index == data.length - 1 ? '[进行中]': '[已完成]')}}</span></div>
         <div>{{item.operationUtype}}:{{item.operationUname}}</div>
         <div>操作时间:{{item.operationTime}}</div>
         <div>操作内容:{{item.content}}</div>
         <div>操作意见:{{item.approvalOpinions}}</div>
         <div v-if="item.fileUrl" style="display: flex;align-items: flex-start">附件内容:
-          <el-image v-for="(i,index) in item.fileUrl.split(',')" :key="index" style="width: 150px; height: 150px;margin-right: 50px;margin-bottom: 20px" :src="i" fit="cover" />
+          <el-image v-for="(i,index) in item.fileUrl.split(',')" :key="index" :preview-src-list="item.fileUrl.split(',')" :initial-index="0" style="width: 150px; height: 150px;margin-right: 50px;margin-bottom: 20px" :src="i" fit="cover" />
         </div>
         <div v-if="item.signUrl" style="display: flex;align-items: flex-start">签字图片:
-          <el-image v-for="(i,index) in item.signUrl.split(',')" :key="index" style="width: 150px; height: 150px;margin-right: 50px;margin-bottom: 20px" :src="i" fit="cover" />
+          <el-image v-for="(i,index) in item.signUrl.split(',')" :key="index" :preview-src-list="item.signUrl.split(',')" :initial-index="0" style="width: 150px; height: 150px;margin-right: 50px;margin-bottom: 20px" :src="i" fit="cover" />
         </div>
       </div>
     </div>
@@ -162,10 +162,16 @@
         .line{
           display: none;
         }
+        .greenDot{
+          background: #13ce66;
+        }
         .tit{
           span{
             color: #409eff;
           }
+          .green{
+            color: #13ce66;
+          }
         }
       }
     }
diff --git a/src/views/specialWorkSystem/specialIndex/index.vue b/src/views/specialWorkSystem/specialIndex/index.vue
index 08ce261..cb681d5 100644
--- a/src/views/specialWorkSystem/specialIndex/index.vue
+++ b/src/views/specialWorkSystem/specialIndex/index.vue
@@ -15,24 +15,6 @@
       </el-button>
     </div>
     <div class="topChart">
-<!--      <div class="chart-item">-->
-<!--        <dv-border-box10 v-if="isFull==true" class="item-bg"></dv-border-box10>-->
-<!--        <div class="chart-tit">-->
-<!--          <span class="tit">各事业部关联作业分析</span>-->
-<!--          <div class="filter-part">-->
-<!--            <el-cascader :teleported="false" v-model="chartSearch2.depId" @change="changeDep2()" :options="departmentList" :props="casProps" :show-all-levels="false" size="small"/>-->
-<!--            <el-select v-model="chartSearch2.type" size="small" :teleported="false" @change="changeType2()">-->
-<!--              <el-option-->
-<!--                  v-for="item in workType1"-->
-<!--                  :key="item.id"-->
-<!--                  :label="item.name"-->
-<!--                  :value="item.id"-->
-<!--              />-->
-<!--            </el-select>-->
-<!--          </div>-->
-<!--        </div>-->
-<!--        <div class="chart" :id="slfx"></div>-->
-<!--      </div>-->
       <div class="chart-item">
         <dv-border-box10 v-if="isFull==true" class="item-bg"></dv-border-box10>
         <div class="chart-tit">
@@ -60,48 +42,7 @@
         </el-radio-group>
       </div>
     </div>
-<!--    <div class="topChart">-->
-<!--      <div class="chart-item">-->
-<!--        <dv-border-box10 v-if="isFull==true" class="item-bg"></dv-border-box10>-->
-<!--        <div class="chart-tit">-->
-<!--          <span class="tit">关联作业趋势图</span>-->
-<!--          <div class="filter-part filter-part2">-->
-<!--            <el-cascader :teleported="false" v-model="chartSearch3.depId" @change="changeDep3()" :options="departmentList" :props="casProps" :show-all-levels="false" size="small"/>-->
-<!--          </div>-->
-<!--        </div>-->
-<!--        <div class="chart" :id="zyqs"></div>-->
-<!--      </div>-->
-<!--      <div class="chart-item">-->
-<!--        <dv-border-box10 v-if="isFull==true" class="item-bg"></dv-border-box10>-->
-<!--        <div class="chart-tit">-->
-<!--          <span class="tit">作业警报记录</span>-->
-<!--          <div class="filter-part">-->
-<!--            <el-select :teleported="false" v-model="chartSearch4.days" size="small" @change="(value)=>changeTime4(value)">-->
-<!--              <el-option label="近7天" :value="7"/>-->
-<!--              <el-option label="近30天" :value="30"/>-->
-<!--              <el-option label="近90天" :value="90"/>-->
-<!--              <el-option label="近1年" :value="365"/>-->
-<!--            </el-select>-->
-<!--            <el-select :teleported="false" v-model="chartSearch4.workType" size="small" @change="changeType4()">-->
-<!--              <el-option-->
-<!--                  v-for="item in workType1"-->
-<!--                  :key="item.id"-->
-<!--                  :label="item.name"-->
-<!--                  :value="item.id"-->
-<!--              />-->
-<!--            </el-select>-->
-<!--          </div>-->
-<!--        </div>-->
-<!--        <div class="chart">-->
-<!--          <el-table ref="multipleTableRef" :data="warningData" style="width: 100%" stripe border :header-cell-style="{ background: '#fafafa' }">-->
-<!--            <el-table-column property="operatorUname" label="姓名" align="center"/>-->
-<!--            <el-table-column property="deptName" label="所属部门" align="center"/>-->
-<!--            <el-table-column property="warningCount" label="异常报警次数" align="center"/>-->
-<!--          </el-table>-->
-<!--        </div>-->
-<!--      </div>-->
-<!--    </div>-->
-    <div>
+
       <div class="homeCard">
         <dv-border-box10 v-if="isFull==true" class="item-bg"></dv-border-box10>
         <el-row>
@@ -157,16 +98,16 @@
             <span style="white-space: nowrap">作业票编号:</span>
             <div class="grid-content topInfo">
               <el-input
-                  v-model="searchParams.workPermitNo"
+                  v-model.trim="searchParams.workPermitNo"
                   placeholder="请输入作业票编号"
                   size="small"
               />
             </div>
           </el-col>
           <el-col :span="4" style="display:flex;align-items: center">
-            <span style="white-space: nowrap">申请单位:</span>
+            <span style="white-space: nowrap">申请事业部:</span>
             <div class="grid-content topInfo">
-              <el-cascader :teleported="false" v-model="searchParams.applyDepId" @change="changeDep4()" :options="departmentList" :props="casProps" :show-all-levels="false" size="small"/>
+              <el-cascader :teleported="false" v-model="searchParams.seDepId" @change="changeDep4()" :options="depList" :props="casProps" :show-all-levels="false" size="small"/>
             </div>
           </el-col>
           <el-button type="primary" style="margin-left: 20px" @click="searchRecord" size="small">查询</el-button>
@@ -253,11 +194,11 @@
             </el-table-column>
             <el-table-column property="workTypeDesc" label="作业类型" align="center"/>
             <el-table-column property="workLevelDesc" label="作业等级" align="center"/>
-            <el-table-column property="abortReason" label="中止原因" align="center">
-              <template #default="scope">
-                <span>{{scope.row.abortReason?scope.row.abortReason:'--'}}</span>
-              </template>
-            </el-table-column>
+<!--            <el-table-column property="abortReason" label="中止原因" align="center">-->
+<!--              <template #default="scope">-->
+<!--                <span>{{scope.row.abortReason?scope.row.abortReason:'&#45;&#45;'}}</span>-->
+<!--              </template>-->
+<!--            </el-table-column>-->
             <el-table-column property="workAllStatusDesc" label="作业状态" align="center"/>
             <el-table-column fixed="right" label="操作" align="center" width="250">
               <template #default="scope">
@@ -265,6 +206,7 @@
                  v-if="scope.row.workAllStatus == -1|| scope.row.workAllStatus == 1 || scope.row.workAllStatus == 3 || scope.row.workAllStatus == 7"
                   type="primary" size="small" :icon="VideoPlay" @click="openVideo(scope.row)">查看监控视频</el-button>
                 <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row.workApplyId)">查看记录</el-button>
+                <el-button v-if="(scope.row.workAllStatus == 3 || scope.row.workAllStatus == 4 || scope.row.workAllStatus == 5)&&!scope.row.renewalWorkApplyId" link type="primary" size="small" :icon="Edit" @click="continueRecord(scope.row)">一键续票</el-button>
                 <el-button link type="primary" size="small" :icon="View" @click="viewTicket(scope.row)">查看作业票</el-button>
                 <el-button link type="primary" size="small" :icon="Download" @click="downLoadTicket(scope.row)">导出作业票</el-button>
 <!--                <el-button link type="primary" size="small" :icon="FolderChecked" @click="handleReview(scope.row)">验收</el-button>-->
@@ -276,7 +218,6 @@
           </div>
         </div>
       </div>
-    </div>
     <el-dialog v-model="dialogDetails" title="作业申请详情" center>
 <!--      <fire v-if="dialogType == 1" :details = details></fire>-->
 <!--      <space v-else-if="dialogType == 2" :details = details></space>-->
@@ -314,11 +255,20 @@
 <!--    </el-dialog>-->
     <video-detail ref="videoRef"></video-detail>
     <Work-record ref="recordRef"></Work-record>
+    <fire-dialog ref="fireRef" :lists="lists" @refresh="getMydepList"></fire-dialog>
+    <plate-dialog ref="plateRef" :lists="lists" @refresh="getMydepList"></plate-dialog>
+    <space-dialog ref="spaceRef" :lists="lists" @refresh="getMydepList"></space-dialog>
+    <hoist-dialog ref="hoistRef" :lists="lists" @refresh="getMydepList"></hoist-dialog>
+    <ground-dialog ref="groundRef" :lists="lists" @refresh="getMydepList"></ground-dialog>
+    <broken-dialog ref="brokenRef" :lists="lists" @refresh="getMydepList"></broken-dialog>
+    <height-dialog ref="heightRef" :lists="lists" @refresh="getMydepList"></height-dialog>
+    <power-dialog ref="powerRef" :lists="lists" @refresh="getMydepList"></power-dialog>
+    <open-dialog ref="openRef" :lists="lists" @refresh="getMydepList"></open-dialog>
   </div>
 </template>
 
 <script lang="ts">
-import {toRefs, reactive, defineComponent, ref, onMounted, defineAsyncComponent} from 'vue';
+import {toRefs, reactive, defineComponent, ref, onMounted, defineAsyncComponent, nextTick} from 'vue';
 import { storeToRefs } from 'pinia';
 import { initBackEndControlRoutes } from '/@/router/backEnd';
 import { useUserInfo } from '/@/stores/userInfo';
@@ -338,6 +288,8 @@
 import WorkRecord from "/@/views/specialWorkSystem/specialIndex/components/workRecord.vue";
 import { BorderBox10 as DvBorderBox10 } from '@kjgl77/datav-vue3'
 import {productionDeviceApi} from "/@/api/doublePreventSystem/productionDevice";
+import {ElMessageBox} from "element-plus/es";
+import {judgeReportApi} from "/@/api/dataUpload/saftyBaseInfo/judgeReport";
 
 // 定义接口来定义对象的类型
 interface stateType {
@@ -366,6 +318,7 @@
   workType1: Array<type>;
   dialogType: number | null;
   departmentList: Array<any>;
+  depList: Array<any>;
   departmentRecursionList: Array<DepartmentState>;
   reviewForm: object;
   reviewRules: object;
@@ -375,6 +328,7 @@
   endTime:string
   pieData: Array<status>
   squareData: Array<status>
+  lists: {}
 }
 interface type {
   id: number | null;
@@ -398,14 +352,15 @@
   components: {
     VideoDetail,
     WorkRecord,
-    // fire: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/fireLog.vue')),
-    // space: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/spaceLog.vue')),
-    // hoist: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/hoistLog.vue')),
-    // ground: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/groundLog.vue')),
-    // broken: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/brokenLog.vue')),
-    // height: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/heightLog.vue')),
-    // power: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/powerLog.vue')),
-    // plate: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/plateLog.vue'))
+    fireDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/fireDialog.vue')),
+    plateDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/plateDialog.vue')),
+    spaceDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/spaceDialog.vue')),
+    hoistDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/hoistDialog.vue')),
+    groundDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/groundDialog.vue')),
+    brokenDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/brokenDialog.vue')),
+    heightDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/heightDialog.vue')),
+    powerDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/powerDialog.vue')),
+    openDialog: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/openDialog.vue'))
   },
   setup() {
     const userInfo = useUserInfo()
@@ -429,10 +384,11 @@
         startTime: '',
         endTime: '',
         workAllStatus: null,
-        applyDepId: null
+        seDepId: null
       },
       dialogReview: false,
       departmentList: [],
+      depList: [],
       departmentRecursionList: [],
       searchStatus: null,
       endTime: '',
@@ -503,12 +459,40 @@
           value: -1
         },
         {
-          name: '开始',
+          name: '作业中(监护中)',
           value: 1
         },
         {
-          name: '结束',
-          value: 2
+          name: '待验收',
+          value: 3
+        },
+        {
+          name: '验收不合格',
+          value: 4
+        },
+        {
+          name: '已验收',
+          value: 5
+        },
+        {
+          name: '作业前气体分析不合格',
+          value: 6
+        },
+        {
+          name: '审批未通过',
+          value: 7
+        },
+        {
+          name: '作业中止',
+          value: 8
+        },
+        {
+          name: '取消',
+          value: 15
+        },
+        {
+          name: '废止',
+          value: 16
         }
       ],
       pieData: [],
@@ -519,7 +503,16 @@
       },
       reviewRules:{
         advice: [{ required: true, message: '请填写验收意见', trigger: 'blur' }]
-      }
+      },
+      lists: {
+        workerList: [],
+        departList: [],
+        departList2: [],
+        deviceList: [],
+        otherWorks: [],
+        spList: [],
+        riskList: []
+      },
     });
     // 页面载入时执行方法
     onMounted(() => {
@@ -527,10 +520,24 @@
       getMydepList()
       getAllDepartment();
       getTypePie()
-      getWorkDep()
       getDepMonth()
       getWarningList()
+      spWorker()
+      getOpList()
+      getAll()
+      getAllDevice()
+      getAllRisks()
+      getOtherWork()
     });
+    const fireRef = ref()
+    const plateRef = ref()
+    const spaceRef = ref()
+    const hoistRef = ref()
+    const groundRef = ref()
+    const brokenRef = ref()
+    const heightRef = ref()
+    const powerRef = ref()
+    const openRef = ref()
     const initTime =()=>{
       state.chartSearch1.startTime = getPeriod(30)
       state.chartSearch2.startTime = getPeriod(30)
@@ -562,15 +569,6 @@
       getTypePie()
     }
 
-    const changeDep2=()=>{
-      getWorkDep()
-    }
-    const changeType2=()=>{
-      getWorkDep()
-    }
-    const changeType4=()=>{
-      getWarningList()
-    }
     const changeDep3=()=>{
       getDepMonth()
     }
@@ -594,14 +592,45 @@
       getMydepList()
       getAllDepartment();
       getTypePie()
-      getWorkDep()
       getDepMonth()
     }
+
+    const continueRecord = (row)=>{
+      if(row.workType == 1){
+        fireRef.value.openDialog(row,'continue')
+      }
+      if(row.workType == 2){
+        spaceRef.value.openDialog(row,'continue')
+      }
+      if(row.workType == 3){
+        hoistRef.value.openDialog(row,'continue')
+      }
+      if(row.workType == 4){
+        groundRef.value.openDialog(row,'continue')
+      }
+      if(row.workType == 5){
+        brokenRef.value.openDialog(row,'continue')
+      }
+      if(row.workType == 6){
+        heightRef.value.openDialog(row,'continue')
+      }
+      if(row.workType == 7){
+        powerRef.value.openDialog(row,'continue')
+      }
+      if(row.workType == 8){
+        plateRef.value.openDialog(row,'continue')
+      }
+      if(row.workType == 9){
+        openRef.value.openDialog(row,'continue')
+      }
+    }
+
     const getTypePie = async ()=>{
       const data = {
         startTime: state.chartSearch1.startTime,
         endTime:state.endTime,
-        depId:state.chartSearch1.depId
+        depId:state.chartSearch1.depId,
+        type: null
       }
       let res = await specialIndexApi().analyseType(data);
       if (res.data.code === '200') {
@@ -615,26 +644,7 @@
         });
       }
     }
-    const getWorkDep = async ()=>{
-      const data = {
-        // startTime: state.chartSearch2.startTime,
-        // endTime: state.endTime,
-        depId:state.chartSearch2.depId,
-        type: state.chartSearch2.type
-      }
-      let res = await specialIndexApi().analyseAllWork(data);
-      if (res.data.code === '200') {
-        state.squareData = JSON.parse(JSON.stringify(res.data.data))
-        let names = state.squareData.map(i=>i.name)
-        let vals = state.squareData.map(i=>i.value)
-        initSlfx(names,vals)
-      } else {
-        ElMessage({
-          type: 'warning',
-          message: res.data.msg
-        });
-      }
-    }
+
     const getDepMonth = async ()=>{
       let res = await specialIndexApi().analyseDepMonth(state.chartSearch3.depId);
       if (res.data.code === '200') {
@@ -672,6 +682,7 @@
     }
     const getWarningList = async()=>{
       const data = {
+
         startTime: state.chartSearch4.startTime,
         endTime: state.endTime,
         workType:state.chartSearch4.workType
@@ -687,6 +698,7 @@
       }
     }
     type EChartsOption = echarts.EChartsOption
+
     const initZyfb =()=>{
       let dom = document.getElementById(zyfb.value);
       let myChart = echarts.init(dom);
@@ -741,7 +753,12 @@
                 shadowColor: 'rgba(0, 0, 0, 0.5)'
               },
             },
-            data: state.pieData
+            data: state.pieData.map(i=>{
+              return {
+                name: i.workTypeDesc,
+                value: i.count
+              }
+            }).filter(i=>i.name !== '未知')
           }
         ]
       }
@@ -751,55 +768,7 @@
         myChart.resize();
       });
     }
-    const initSlfx =(names:Array<string>,vals:Array<any>)=>{
-      let dom = document.getElementById(slfx.value);
-      let myChart = echarts.init(dom);
-      let option: EChartsOption;
-      option = {
-        tooltip: {
-          trigger: 'axis',
-          axisPointer: {
-            type: 'shadow'
-          }
-        },
-        grid: {
-          left: '3%',
-          right: '4%',
-          bottom: '3%',
-          containLabel: true
-        },
-        xAxis: [
-          {
-            type: 'category',
-            data: names,
-            axisTick: {
-              alignWithLabel: true
-            },
-            axisLabel: {
-              color: state.themeColor
-            }
-          }
-        ],
-        yAxis: [
-          {
-            type: 'value'
-          }
-        ],
-        series: [
-          {
-            name: 'Direct',
-            type: 'bar',
-            barWidth: '60%',
-            data: vals,
-          }
-        ]
-      }
 
-      option && myChart.setOption(option);
-      window.addEventListener("resize",function (){
-        myChart.resize();
-      });
-    }
     const initZyqs =(names:Array<string>,vals:Array<any>)=>{
       let dom = document.getElementById(zyqs.value);
       let myChart = echarts.init(dom);
@@ -863,7 +832,10 @@
       let res = await teamManageApi().getAllDepartment();
       if (res.data.code === '200') {
         state.departmentList = JSON.parse(JSON.stringify(res.data.data))
-        // recursion(state.departmentList);
+        state.depList = JSON.parse(JSON.stringify(res.data.data))[0].children[0].children.filter(i=>i.depId == 32 || i.depId == 48 || i.depId == 49 || i.depId == 50 || i.depId == 10 || i.depId == 41 || i.depId == 46 || i.depId == 47)
+        recursion(state.departmentList);
+        state.lists.departList = state.departmentList
+        state.lists.departList2 = state.depList
       } else {
         ElMessage({
           type: 'warning',
@@ -872,30 +844,16 @@
       }
     };
 
-    // 分页获取列表
-    // const getListByPage = async () => {
-    //   const dateRange = JSON.parse(JSON.stringify(state.searchDate))
-    //   if(dateRange[1]){dateRange[1] = dateRange[1].replace('00:00:00','23:59:59')}
-    //   const data = { pageSize: state.pageSize1, pageIndex: state.pageIndex1, searchParams: { workType: state.searchWord, applyDepId: state.searchDep,applyStartTime: dateRange[0],applyEndTime: dateRange[1]} };
-    //   let res = await workApplyApi().getApplyList(data);
-    //   if (res.data.code === '200') {
-    //     state.workData = JSON.parse(JSON.stringify(res.data.data));
-    //     state.workData = state.workData.map((item) => {
-    //       if (item.operators == null || item.operators == []) {
-    //         item.operators = [];
-    //       } else {
-    //         item.operators = Array.from(item.operators, ({ operatorUname }) => operatorUname);
-    //       }
-    //       return item;
-    //     });
-    //     state.totalSize1 = res.data.total;
-    //   } else {
-    //     ElMessage({
-    //       type: 'warning',
-    //       message: res.data.msg
-    //     });
-    //   }
-    // };
+    const 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 searchRecord = async () => {
@@ -911,7 +869,7 @@
             startTime: '',
             endTime: '',
             workAllStatus: null,
-            applyDepId: null
+            seDepId: null
       }
       state.searchDate = []
       state.pageIndex = 1
@@ -927,49 +885,7 @@
       getMydepList()
     };
 
-    // 查看记录
-    // const viewDetail = (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.workTypeList.find((i: { id: number }) => i.id === Number(item))?.name;
-    //     });
-    //   }
-    //   if(state.details.workDetail.involvedDepIds == '' || !state.details.workDetail.involvedDepIds){
-    //     state.details.workDetail.involvedDepIds=[]
-    //   }
-    //   else {
-    //     const a = state.details.workDetail.involvedDepIds
-    //     state.details.workDetail.involvedDepIds = a.split(',').map((item) => {
-    //       return state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(item))?.depName;
-    //     });
-    //   }
-    //   if(state.details.workDetail.csDepId){
-    //     state.details.workDetail.csDepId = state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(state.details.workDetail.csDepId))?.depName;
-    //   }
-    //   if(state.details.workDetail.operationDepId){
-    //     state.details.workDetail.operationDepId = state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(state.details.workDetail.operationDepId))?.depName;
-    //   }
-    //   if(state.details.workDetail.gbPath){
-    //     state.details.workDetail.gbPath = state.details.workDetail.gbPath.split(',')
-    //   }
-    //   if(state.details.workDetail.bcPath){
-    //     state.details.workDetail.bcPath = state.details.workDetail.bcPath.split(',')
-    //   }
-    //   if(state.details.workDetail.bpLocationMapPath){
-    //     state.details.workDetail.bpLocationMapPath = state.details.workDetail.bpLocationMapPath.split(',')
-    //   }
-    //   state.dialogDetails = true;
-    // };
 
-    // const handleReview = (row: object)=>{
-    //   state.dialogReview = true
-    // }
     const openVideo = (row:object)=>{
       videoRef.value.openDialog(row)
     }
@@ -985,6 +901,7 @@
       }
       axios.post(import.meta.env.VITE_API_URL + `/specialwork9step/work/down/load/pdf`,{id: row.workApplyId},{headers:{'Content-Type': 'application/json','Authorization': `${Cookies.get('token')}`,'uid':`${Cookies.get('uid')}`},responseType: 'blob'}).then(res=>{
         if (res) {
+          console.log(res.data,888)
           const link = document.createElement('a')
           let blob = new Blob([res.data],{type: 'application/pdf'})
           link.style.display = "none";
@@ -1021,6 +938,107 @@
         }
       })
     }
+
+    const spWorker = async ()=>{
+      for(let id of ['18','19']){
+        const res = await workApplyApi().getSpList({roleId: id})
+        if(id == '18'){
+          if (res.data.code === '200') {
+            state.lists.spList.jhList = JSON.parse(JSON.stringify(res.data.data))
+          } else {
+            ElMessage({
+              type: 'warning',
+              message: res.data.msg
+            });
+          }
+        }
+        if(id == '19'){
+          if (res.data.code === '200') {
+            state.lists.spList.sfList = JSON.parse(JSON.stringify(res.data.data))
+          } else {
+            ElMessage({
+              type: 'warning',
+              message: res.data.msg
+            });
+          }
+        }
+      }
+    }
+
+    const getOpList = async()=>{
+      const res = await workApplyApi().getOpList()
+      if(res.data.code == '200'){
+        if(res.data.data && res.data.data.length>0){
+          state.lists.spList.opList = JSON.parse(JSON.stringify(res.data.data)).map(i=>{
+            if(i.certList && i.certList.length>0){
+              i.certList = i.certList.map(item=>{
+                item['realName'] = i.realName + '(' + item.certTypeName +':'+ item.certExpiredAt + ')'
+                item['uid'] = item.certNo + ',' + item.certExpiredAt
+                return item
+              })
+            }
+            return i
+          })
+        }
+      }else{
+        ElMessage({
+          type: 'warning',
+          message: res.data.msg
+        })
+      }
+    }
+
+    // 获取用户列表
+    const getAll = async ()=>{
+      const res = await workApplyApi().getAllUsers()
+      if (res.data.code === '200') {
+        state.lists.workerList = JSON.parse(JSON.stringify(res.data.data))
+      } else {
+        ElMessage({
+          type: 'warning',
+          message: res.data.msg
+        });
+      }
+    };
+
+    // 获取设备列表
+    const getAllDevice = async ()=>{
+      const res = await workApplyApi().getAllDevices()
+      if (res.data.code === '200') {
+        state.lists.deviceList = JSON.parse(JSON.stringify(res.data.data))
+      } else {
+        ElMessage({
+          type: 'warning',
+          message: res.data.msg
+        });
+      }
+    }
+
+    // 获取设备列表
+    const getAllRisks = async ()=>{
+      const res = await workApplyApi().getAllRiskIdentity()
+      if (res.data.code === '200') {
+        // state.allDevices = JSON.parse(JSON.stringify(res.data.data))
+        state.lists.riskList = JSON.parse(JSON.stringify(res.data.data))
+      } else {
+        ElMessage({
+          type: 'warning',
+          message: res.data.msg
+        });
+      }
+    }
+
+    const getOtherWork = async () => {
+      let res = await workApplyApi().getOtherWork({pageSize: 999, pageIndex: 1, searchParams: {workPermitNo: '', workType: null}})
+      if (res.data.code === '200') {
+        state.lists.otherWorks = JSON.parse(JSON.stringify(res.data.data))
+      } else {
+        ElMessage({
+          type: 'warning',
+          message: res.data.msg
+        });
+      }
+    };
 
     // const submitReview = async (formEl: FormInstance | undefined) => {
     //   if (!formEl) return
@@ -1070,12 +1088,20 @@
       zyfb,
       slfx,
       zyqs,
+      fireRef,
+      plateRef,
+      spaceRef,
+      hoistRef,
+      groundRef,
+      brokenRef,
+      heightRef,
+      powerRef,
+      openRef,
+      getMydepList,
+      continueRecord,
       changeTime1,
       changeTime4,
       changeDep1,
-      changeDep2,
-      changeType2,
-      changeType4,
       changeDep3,
       changeDep4,
       toFullscreen,
@@ -1102,7 +1128,7 @@
 <style scoped lang="scss">
 $homeNavLengh: 8;
 .home-container {
-  height: calc(100vh - 144px);
+  height: calc(100vh - 144px) !important;
   position: relative;
   box-sizing: border-box;
   overflow: hidden;
@@ -1284,7 +1310,6 @@
 
     .main-card {
       width: 100%;
-      height: 100%;
       .cardTop {
         display: flex;
         align-items: center;

--
Gitblit v1.9.2