From baf475f44f0a940bbdc2dde36fff9cdf97da58bc Mon Sep 17 00:00:00 2001
From: 马宇豪 <978517621@qq.com>
Date: 星期四, 17 八月 2023 16:43:28 +0800
Subject: [PATCH] 证书修改

---
 src/views/system/user/component/dialogCertificate.vue                |    8 
 src/views/newSpecialWorkSystem/workTicket/zysq/components/broken.vue |  291 +++++-
 src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue   |  317 ++++++-
 src/views/newSpecialWorkSystem/workTicket/zysq/components/height.vue |  291 +++++-
 src/views/newSpecialWorkSystem/workerManage/guardianBase/index.vue   |    4 
 src/views/newSpecialWorkSystem/workerManage/aqyBase/index.vue        |    4 
 src/views/newSpecialWorkSystem/workTicket/zysq/components/hoist.vue  |  293 +++++-
 src/views/newSpecialWorkSystem/workTicket/zysq/components/plate.vue  |  291 +++++-
 src/views/newSpecialWorkSystem/workTicket/zysq/components/space.vue  |  310 +++++-
 src/views/system/user/component/ctfDialog.vue                        |   65 
 src/views/newSpecialWorkSystem/workTicket/zysq/components/power.vue  |  312 +++++-
 src/views/newSpecialWorkSystem/workTicket/zysq/components/ground.vue |  291 +++++-
 src/views/newSpecialWorkSystem/workerManage/operatorBase/index.vue   |    4 
 13 files changed, 1,989 insertions(+), 492 deletions(-)

diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/broken.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/broken.vue
index a7ac8c6..fb4cbf7 100644
--- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/broken.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/broken.vue
@@ -56,40 +56,43 @@
         </el-col>
         <el-col :span="12">
           <el-form-item label="监护人" prop="guardianUids">
-            <el-select v-model="form.guardianUids" filterable multiple @change="getSafetyIds" clearable>
-              <el-option
-                  v-for="item in spList.jhList"
-                  :key="item.uid"
-                  :label="item.realName"
-                  :value="item.uid"
-              />
-            </el-select>
+<!--            <el-select v-model="form.guardianUids" filterable multiple @change="getSafetyIds" clearable>-->
+<!--              <el-option-->
+<!--                  v-for="item in spList.jhList"-->
+<!--                  :key="item.uid"-->
+<!--                  :label="item.realName"-->
+<!--                  :value="item.uid"-->
+<!--              />-->
+<!--            </el-select>-->
+            <el-cascader style="width: 100%" v-model="form.guardianUids" :options="spList.jhList" :props="cas3Props" filterable @change="singleSelect($event,'监护人')" :show-all-levels="false"/>
           </el-form-item>
         </el-col>
       </el-row>
       <el-row>
         <el-col :span="12">
           <el-form-item label="作业负责人" prop="headUids">
-            <el-select v-model="form.headUids" filterable multiple @change="getStartEndIds" clearable>
-              <el-option
-                  v-for="item in workerList"
-                  :key="item.uid"
-                  :label="item.username"
-                  :value="item.uid"
-              />
-            </el-select>
+<!--            <el-select v-model="form.headUids" filterable multiple @change="getStartEndIds" clearable>-->
+<!--              <el-option-->
+<!--                  v-for="item in workerList"-->
+<!--                  :key="item.uid"-->
+<!--                  :label="item.username"-->
+<!--                  :value="item.uid"-->
+<!--              />-->
+<!--            </el-select>-->
+            <el-cascader style="width: 100%" v-model="form.headUids" :options="workerList" :props="casProps" @change="getStartEndIds" filterable :show-all-levels="false"/>
           </el-form-item>
         </el-col>
         <el-col :span="12">
-          <el-form-item label="作业人及证件编号" prop="operatorUids">
-            <el-select v-model="form.operatorUids" filterable multiple clearable>
-              <el-option
-                  v-for="item in spList.opList"
-                  :key="item.uid"
-                  :label="item.realName"
-                  :value="item.uid"
-              />
-            </el-select>
+          <el-form-item label="作业人" prop="operatorUids">
+<!--            <el-select v-model="form.operatorUids" filterable multiple clearable>-->
+<!--              <el-option-->
+<!--                  v-for="item in spList.opList"-->
+<!--                  :key="item.uid"-->
+<!--                  :label="item.realName"-->
+<!--                  :value="item.uid"-->
+<!--              />-->
+<!--            </el-select>-->
+            <el-cascader style="width: 100%" v-model="form.operatorUids" :options="spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>
           </el-form-item>
         </el-col>
       </el-row>
@@ -223,14 +226,15 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="安全措施确认人" prop="safetyMeasureUids">
-              <el-select v-model="form.safetyMeasureUids" filterable multiple clearable>
-                <el-option
-                    v-for="item in workerList"
-                    :key="item.uid"
-                    :label="item.username"
-                    :value="item.uid"
-                />
-              </el-select>
+<!--              <el-select v-model="form.safetyMeasureUids" filterable multiple clearable>-->
+<!--                <el-option-->
+<!--                    v-for="item in workerList"-->
+<!--                    :key="item.uid"-->
+<!--                    :label="item.username"-->
+<!--                    :value="item.uid"-->
+<!--                />-->
+<!--              </el-select>-->
+              <el-cascader style="width: 100%" v-model="form.safetyMeasureUids" :options="workerList" :props="casProps" filterable @change="singleSelect($event,'确认人')" :show-all-levels="false"/>
             </el-form-item>
           </el-col>
         </el-row>
@@ -285,26 +289,28 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="完工验收" prop="acceptUid">
-              <el-select v-model="form.acceptUid" filterable clearable>
-                <el-option
-                    v-for="item in workerList"
-                    :key="item.uid"
-                    :label="item.username"
-                    :value="item.uid"
-                />
-              </el-select>
+<!--              <el-select v-model="form.acceptUid" filterable clearable>-->
+<!--                <el-option-->
+<!--                    v-for="item in workerList"-->
+<!--                    :key="item.uid"-->
+<!--                    :label="item.username"-->
+<!--                    :value="item.uid"-->
+<!--                />-->
+<!--              </el-select>-->
+              <el-cascader style="width: 100%" v-model="form.acceptUid" :options="workerList" :props="cas4Props" filterable :show-all-levels="false"/>
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="现场开始结束确认人" prop="startOrEndUids">
-              <el-select v-model="form.startOrEndUids" filterable multiple clearable>
-                <el-option
-                    v-for="item in workerList"
-                    :key="item.uid"
-                    :label="item.username"
-                    :value="item.uid"
-                />
-              </el-select>
+<!--              <el-select v-model="form.startOrEndUids" filterable multiple clearable>-->
+<!--                <el-option-->
+<!--                    v-for="item in workerList"-->
+<!--                    :key="item.uid"-->
+<!--                    :label="item.username"-->
+<!--                    :value="item.uid"-->
+<!--                />-->
+<!--              </el-select>-->
+              <el-cascader style="width: 100%" v-model="form.startOrEndUids" :options="workerList" :props="casProps" filterable @change="singleSelect($event,'结束人')" :show-all-levels="false"/>
             </el-form-item>
           </el-col>
         </el-row>
@@ -344,12 +350,17 @@
   import workSelect from "/@/views/newSpecialWorkSystem/workTicket/zysq/components/workSelect.vue";
   import {UploadProps} from "element-plus/es";
   import axios from "axios";
+  import {userApi} from "/@/api/systemManage/user";
 	interface stateType {
 		form: Object,
 		equipmentDialog: boolean,
     props:{},
     depProps:{},
     depProps2:{},
+    casProps:{}
+    cas2Props: {}
+    cas3Props: {}
+    cas4Props: {}
     safetyMeasureBasicList: [],
     fileList: Array<file>,
     uploadUrl: string,
@@ -420,6 +431,122 @@
           emitPath: false,
           multiple: true
         },
+        casProps: {
+          value: 'uid',
+          label: 'username',
+          multiple: true,
+          lazy: true,
+          async lazyLoad(node, resolve){
+            const { value, level } = node
+            let nodes = []
+            if(value == 0){
+              nodes = props.workerList
+            }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,
+              username: node.label + '(' +item.certTypeName +' ' + item.certExpiredAt + ')',
+              leaf: level >= 1
+            }))
+            resolve(nodes)
+          }
+        },
+        cas2Props: {
+          value: 'uid',
+          label: 'realName',
+          multiple: true,
+          checkStrictly: false,
+          lazy: true,
+          async lazyLoad(node, resolve){
+            const { value, level } = node
+            let nodes = []
+            if(value == 0){
+              nodes = props.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)
+          }
+        },
+        cas3Props: {
+          value: 'uid',
+          label: 'realName',
+          multiple: true,
+          lazy: true,
+          async lazyLoad(node, resolve){
+            const { value, level } = node
+            let nodes = []
+            if(value == 0){
+              nodes = props.spList.jhList
+            }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)
+          }
+        },
+        cas4Props: {
+          value: 'uid',
+          label: 'username',
+          lazy: true,
+          async lazyLoad(node, resolve){
+            const { value, level } = node
+            let nodes = []
+            if(value == 0){
+              nodes = props.workerList
+            }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,
+              username: node.label + '(' +item.certTypeName +' ' + item.certExpiredAt + ')',
+              leaf: level >= 1
+            }))
+            resolve(nodes)
+          }
+        },
         fileList: [],
         imgLimit: 3,
         uploadUrl: '',
@@ -489,9 +616,22 @@
         }
       };
 
-      const getStartEndIds = ()=>{
+      const getStartEndIds = (value)=>{
+        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)
+            }
+          }
+          state.form.headUids = temp
+        }
         state.form.startOrEndUids = state.form.headUids
-        state.form.approvalDepBasicList[0].approvalUids = state.form.headUids
+        state.form.approvalDepBasicList[0].approvalUids = [...new Set(state.form.headUids.map((i)=>i[0]))]
       }
 
       const getSafetyIds = ()=>{
@@ -500,6 +640,45 @@
 
       const isFirstRow = (index)=> {
         return index === 0;
+      }
+
+      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]
+          }
+        })
+      }
+
+      const transform2Obj = (arr: Array<any>)=>{
+        return {
+          uid: arr[0],
+          certificate: arr[1].split(',')[0],
+          certExpiredAt: arr[1].split(',')[1],
+          certTypeName: arr[1].split(',')[2]
+        }
+      }
+
+      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}
+        }
       }
 
       const submitForm = async (formEl: FormInstance | undefined) => {
@@ -520,7 +699,14 @@
             }
             state.form.workDetail.involvedDepIds = state.form.workDetail.involvedDepIds.join(',')
             state.form.workDetail.bcPath = state.form.workDetail.bcPath.join(',')
-            const res = await workApplyApi().submitBrokenApply(state.form)
+            const data = state.form
+            data.operatorUids = transformArr(data.operatorUids)
+            data.headUids = transformArr(data.headUids)
+            data.guardianUids = transformArr(data.guardianUids)
+            data.safetyMeasureUids = transformArr(data.safetyMeasureUids)
+            data.startOrEndUids = transformArr(data.startOrEndUids)
+            data.acceptUid = transform2Obj(data.acceptUid)
+            const res = await workApplyApi().submitBrokenApply(data)
             if (res.data.code === '200') {
               ElMessage({
                 type: 'success',
@@ -686,6 +872,7 @@
         beforeRemove,
         openWorkSelect,
         getSelected,
+        singleSelect,
         workSelectRef,
 				Search,
 				ruleFormRef,
diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue
index 008a6a7..ec18d58 100644
--- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue
@@ -55,15 +55,16 @@
           </el-form-item>
         </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 spList.opList"
-                  :key="item.uid"
-                  :label="item.realName"
-                  :value="item.uid"
-              />
-            </el-select>
+          <el-form-item label="作业人" prop="operatorUids">
+<!--            <el-select v-model="form.operatorUids" filterable multiple clearable>-->
+<!--              <el-option-->
+<!--                  v-for="item in spList.opList"-->
+<!--                  :key="item.uid"-->
+<!--                  :label="item.realName"-->
+<!--                  :value="item.uid"-->
+<!--              />-->
+<!--            </el-select>-->
+            <el-cascader style="width: 100%" v-model="form.operatorUids" :options="spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>
           </el-form-item>
         </el-col>
       </el-row>
@@ -75,28 +76,30 @@
         </el-col>
         <el-col :span="12">
           <el-form-item label="作业负责人" prop="headUids">
-            <el-select v-model="form.headUids" multiple filterable @change="getStartEndIds" clearable>
-              <el-option
-                  v-for="item in workerList"
-                  :key="item.uid"
-                  :label="item.username"
-                  :value="item.uid"
-              />
-            </el-select>
+<!--            <el-select v-model="form.headUids" multiple filterable @change="getStartEndIds" clearable>-->
+<!--              <el-option-->
+<!--                  v-for="item in workerList"-->
+<!--                  :key="item.uid"-->
+<!--                  :label="item.username"-->
+<!--                  :value="item.uid"-->
+<!--              />-->
+<!--            </el-select>-->
+            <el-cascader style="width: 100%" v-model="form.headUids" :options="workerList" :props="casProps" @change="getStartEndIds" filterable :show-all-levels="false"/>
           </el-form-item>
         </el-col>
 			</el-row>
       <el-row>
         <el-col :span="12">
           <el-form-item label="分析人" prop="analystUids">
-            <el-select v-model="form.analystUids" filterable multiple clearable>
-              <el-option
-                  v-for="item in workerList"
-                  :key="item.uid"
-                  :label="item.username"
-                  :value="item.uid"
-              />
-            </el-select>
+<!--            <el-select v-model="form.analystUids" filterable multiple clearable>-->
+<!--              <el-option-->
+<!--                  v-for="item in workerList"-->
+<!--                  :key="item.uid"-->
+<!--                  :label="item.username"-->
+<!--                  :value="item.uid"-->
+<!--              />-->
+<!--            </el-select>-->
+            <el-cascader style="width: 100%" v-model="form.analystUids" :options="workerList" :props="casProps" filterable @change="singleSelect($event,'分析人')" :show-all-levels="false"/>
           </el-form-item>
         </el-col>
         <el-col :span="12" class="valueSelect">
@@ -111,14 +114,15 @@
       <el-row>
         <el-col :span="12">
           <el-form-item label="监护人" prop="guardianUids">
-            <el-select v-model="form.guardianUids" filterable multiple @change="getSafetyIds" clearable>
-              <el-option
-                  v-for="item in spList.jhList"
-                  :key="item.uid"
-                  :label="item.realName"
-                  :value="item.uid"
-              />
-            </el-select>
+<!--            <el-select v-model="form.guardianUids" filterable multiple @change="getSafetyIds" clearable>-->
+<!--              <el-option-->
+<!--                  v-for="item in spList.jhList"-->
+<!--                  :key="item.uid"-->
+<!--                  :label="item.realName"-->
+<!--                  :value="item.uid"-->
+<!--              />-->
+<!--            </el-select>-->
+            <el-cascader style="width: 100%" v-model="form.guardianUids" :options="spList.jhList" :props="cas3Props" filterable @change="singleSelect($event,'监护人')" :show-all-levels="false"/>
           </el-form-item>
         </el-col>
         <el-col :span="12">
@@ -212,14 +216,15 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="安全措施确认人" prop="safetyMeasureUids">
-              <el-select v-model="form.safetyMeasureUids" filterable multiple clearable>
-                <el-option
-                    v-for="item in workerList"
-                    :key="item.uid"
-                    :label="item.username"
-                    :value="item.uid"
-                />
-              </el-select>
+<!--              <el-select v-model="form.safetyMeasureUids" filterable multiple clearable>-->
+<!--                <el-option-->
+<!--                    v-for="item in workerList"-->
+<!--                    :key="item.uid"-->
+<!--                    :label="item.username"-->
+<!--                    :value="item.uid"-->
+<!--                />-->
+<!--              </el-select>-->
+              <el-cascader style="width: 100%" v-model="form.safetyMeasureUids" :options="workerList" :props="casProps" filterable @change="singleSelect($event,'确认人')" :show-all-levels="false"/>
             </el-form-item>
           </el-col>
         </el-row>
@@ -274,26 +279,28 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="完工验收" prop="acceptUid">
-              <el-select v-model="form.acceptUid" filterable clearable>
-                <el-option
-                    v-for="item in workerList"
-                    :key="item.uid"
-                    :label="item.username"
-                    :value="item.uid"
-                />
-              </el-select>
+<!--              <el-select v-model="form.acceptUid" filterable clearable>-->
+<!--                <el-option-->
+<!--                    v-for="item in workerList"-->
+<!--                    :key="item.uid"-->
+<!--                    :label="item.username"-->
+<!--                    :value="item.uid"-->
+<!--                />-->
+<!--              </el-select>-->
+              <el-cascader style="width: 100%" v-model="form.acceptUid" :options="workerList" :props="cas4Props" filterable :show-all-levels="false"/>
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="现场开始结束确认人" prop="startOrEndUids">
-              <el-select v-model="form.startOrEndUids" filterable multiple clearable>
-                <el-option
-                    v-for="item in workerList"
-                    :key="item.uid"
-                    :label="item.username"
-                    :value="item.uid"
-                />
-              </el-select>
+<!--              <el-select v-model="form.startOrEndUids" filterable multiple clearable>-->
+<!--                <el-option-->
+<!--                    v-for="item in workerList"-->
+<!--                    :key="item.uid"-->
+<!--                    :label="item.username"-->
+<!--                    :value="item.uid"-->
+<!--                />-->
+<!--              </el-select>-->
+              <el-cascader style="width: 100%" v-model="form.startOrEndUids" :options="workerList" :props="casProps" filterable @change="singleSelect($event,'结束人')" :show-all-levels="false"/>
             </el-form-item>
           </el-col>
         </el-row>
@@ -317,12 +324,17 @@
 	import type { FormInstance, FormRules } from 'element-plus'
 	import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
   import workSelect from "/@/views/newSpecialWorkSystem/workTicket/zysq/components/workSelect.vue";
+  import {userApi} from "/@/api/systemManage/user";
 	interface stateType {
 		form: Object,
 		workLevelList: Array<any>,
 		equipmentDialog: boolean,
-    props:{},
-    depProps:{},
+    props:{}
+    depProps:{}
+    casProps:{}
+    cas2Props: {}
+    cas3Props: {}
+    cas4Props: {}
     safetyMeasureBasicList: []
 	}
 	export default defineComponent({
@@ -374,6 +386,122 @@
 						value: 3
 					}
 				],
+        casProps: {
+          value: 'uid',
+          label: 'username',
+          multiple: true,
+          lazy: true,
+          async lazyLoad(node, resolve){
+            const { value, level } = node
+            let nodes = []
+            if(value == 0){
+              nodes = props.workerList
+            }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,
+              username: node.label + '(' +item.certTypeName +' ' + item.certExpiredAt + ')',
+              leaf: level >= 1
+            }))
+            resolve(nodes)
+          }
+        },
+        cas2Props: {
+          value: 'uid',
+          label: 'realName',
+          multiple: true,
+          checkStrictly: false,
+          lazy: true,
+          async lazyLoad(node, resolve){
+            const { value, level } = node
+            let nodes = []
+            if(value == 0){
+              nodes = props.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)
+          }
+        },
+        cas3Props: {
+          value: 'uid',
+          label: 'realName',
+          multiple: true,
+          lazy: true,
+          async lazyLoad(node, resolve){
+            const { value, level } = node
+            let nodes = []
+            if(value == 0){
+              nodes = props.spList.jhList
+            }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)
+          }
+        },
+        cas4Props: {
+          value: 'uid',
+          label: 'username',
+          lazy: true,
+          async lazyLoad(node, resolve){
+            const { value, level } = node
+            let nodes = []
+            if(value == 0){
+              nodes = props.workerList
+            }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,
+              username: node.label + '(' +item.certTypeName +' ' + item.certExpiredAt + ')',
+              leaf: level >= 1
+            }))
+            resolve(nodes)
+          }
+        },
         props:{
           expandTrigger: 'hover',
           label: 'depName',
@@ -413,7 +541,7 @@
 			// 页面载入时执行方法
 			onMounted(() => {
         getBasicData()
-      });
+      })
 
       const openWorkSelect = ()=>{
         workSelectRef.value.openDialog(state.form.involveOtherWork)
@@ -451,9 +579,22 @@
         }
       };
 
-      const getStartEndIds = ()=>{
+      const getStartEndIds = (value)=>{
+        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)
+            }
+          }
+          state.form.headUids = temp
+        }
         state.form.startOrEndUids = state.form.headUids
-        state.form.approvalDepBasicList[0].approvalUids = state.form.headUids
+        state.form.approvalDepBasicList[0].approvalUids = [...new Set(state.form.headUids.map((i)=>i[0]))]
       }
 
       const getSafetyIds = ()=>{
@@ -464,8 +605,47 @@
         return index === 0;
       }
 
+      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]
+          }
+        })
+      }
+
+      const transform2Obj = (arr: Array<any>)=>{
+        return {
+          uid: arr[0],
+          certificate: arr[1].split(',')[0],
+          certExpiredAt: arr[1].split(',')[1],
+          certTypeName: arr[1].split(',')[2]
+        }
+      }
+
+      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.analystUids = temp}
+          if(type == '监护人'){state.form.guardianUids = temp}
+          if(type == '确认人'){state.form.safetyMeasureUids = temp}
+          if(type == '结束人'){state.form.startOrEndUids = temp}
+        }
+      }
+
       const submitForm = async (formEl: FormInstance | undefined) => {
-        console.log(state.form.involveOtherWork,555)
         if (!formEl) return
         await formEl.validate(async (valid, fields) => {
           if (valid) {
@@ -481,7 +661,15 @@
             // if(Array.isArray(state.form.involveOtherWork)){
             //   state.form.involveOtherWork = state.form.involveOtherWork.join(',')
             // }
-            const res = await workApplyApi().submitFireApply(state.form)
+            const data = state.form
+            data.operatorUids = transformArr(data.operatorUids)
+            data.headUids = transformArr(data.headUids)
+            data.analystUids = transformArr(data.analystUids)
+            data.guardianUids = transformArr(data.guardianUids)
+            data.safetyMeasureUids = transformArr(data.safetyMeasureUids)
+            data.startOrEndUids = transformArr(data.startOrEndUids)
+            data.acceptUid = transform2Obj(data.acceptUid)
+            const res = await workApplyApi().submitFireApply(data)
             if (res.data.code === '200') {
               ElMessage({
                 type: 'success',
@@ -544,6 +732,7 @@
         openWorkSelect,
         getSelected,
         workSelectRef,
+        singleSelect,
 				Search,
 				ruleFormRef,
 				applyRules,
diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/ground.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/ground.vue
index 015562c..e1d3000 100644
--- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/ground.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/ground.vue
@@ -21,15 +21,16 @@
           </el-form-item>
         </el-col>
         <el-col :span="12">
-          <el-form-item label="作业人及证件编号" prop="operatorUids">
-            <el-select v-model="form.operatorUids" multiple clearable>
-              <el-option
-                  v-for="item in spList.opList"
-                  :key="item.uid"
-                  :label="item.realName"
-                  :value="item.uid"
-              />
-            </el-select>
+          <el-form-item label="作业人" prop="operatorUids">
+<!--            <el-select v-model="form.operatorUids" multiple clearable>-->
+<!--              <el-option-->
+<!--                  v-for="item in spList.opList"-->
+<!--                  :key="item.uid"-->
+<!--                  :label="item.realName"-->
+<!--                  :value="item.uid"-->
+<!--              />-->
+<!--            </el-select>-->
+            <el-cascader style="width: 100%" v-model="form.operatorUids" :options="spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>
           </el-form-item>
         </el-col>
       </el-row>
@@ -41,14 +42,15 @@
         </el-col>
         <el-col :span="12">
           <el-form-item label="作业负责人" prop="headUids">
-            <el-select v-model="form.headUids" multiple filterable @change="getStartEndIds" clearable>
-              <el-option
-                  v-for="item in workerList"
-                  :key="item.uid"
-                  :label="item.username"
-                  :value="item.uid"
-              />
-            </el-select>
+<!--            <el-select v-model="form.headUids" multiple filterable @change="getStartEndIds" clearable>-->
+<!--              <el-option-->
+<!--                  v-for="item in workerList"-->
+<!--                  :key="item.uid"-->
+<!--                  :label="item.username"-->
+<!--                  :value="item.uid"-->
+<!--              />-->
+<!--            </el-select>-->
+            <el-cascader style="width: 100%" v-model="form.headUids" :options="workerList" :props="casProps" @change="getStartEndIds" filterable :show-all-levels="false"/>
           </el-form-item>
         </el-col>
 			</el-row>
@@ -83,14 +85,15 @@
       <el-row>
         <el-col :span="12">
           <el-form-item label="监护人" prop="guardianUids">
-            <el-select v-model="form.guardianUids" filterable multiple @change="getSafetyIds" clearable>
-              <el-option
-                  v-for="item in spList.jhList"
-                  :key="item.uid"
-                  :label="item.realName"
-                  :value="item.uid"
-              />
-            </el-select>
+<!--            <el-select v-model="form.guardianUids" filterable multiple @change="getSafetyIds" clearable>-->
+<!--              <el-option-->
+<!--                  v-for="item in spList.jhList"-->
+<!--                  :key="item.uid"-->
+<!--                  :label="item.realName"-->
+<!--                  :value="item.uid"-->
+<!--              />-->
+<!--            </el-select>-->
+            <el-cascader style="width: 100%" v-model="form.guardianUids" :options="spList.jhList" :props="cas3Props" filterable @change="singleSelect($event,'监护人')" :show-all-levels="false"/>
           </el-form-item>
         </el-col>
         <el-col :span="12">
@@ -206,14 +209,15 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="安全措施确认人" prop="safetyMeasureUids">
-              <el-select v-model="form.safetyMeasureUids" filterable multiple clearable>
-                <el-option
-                    v-for="item in workerList"
-                    :key="item.uid"
-                    :label="item.username"
-                    :value="item.uid"
-                />
-              </el-select>
+<!--              <el-select v-model="form.safetyMeasureUids" filterable multiple clearable>-->
+<!--                <el-option-->
+<!--                    v-for="item in workerList"-->
+<!--                    :key="item.uid"-->
+<!--                    :label="item.username"-->
+<!--                    :value="item.uid"-->
+<!--                />-->
+<!--              </el-select>-->
+              <el-cascader style="width: 100%" v-model="form.safetyMeasureUids" :options="workerList" :props="casProps" filterable @change="singleSelect($event,'确认人')" :show-all-levels="false"/>
             </el-form-item>
           </el-col>
         </el-row>
@@ -268,26 +272,28 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="完工验收" prop="acceptUid">
-              <el-select v-model="form.acceptUid" filterable clearable>
-                <el-option
-                    v-for="item in workerList"
-                    :key="item.uid"
-                    :label="item.username"
-                    :value="item.uid"
-                />
-              </el-select>
+<!--              <el-select v-model="form.acceptUid" filterable clearable>-->
+<!--                <el-option-->
+<!--                    v-for="item in workerList"-->
+<!--                    :key="item.uid"-->
+<!--                    :label="item.username"-->
+<!--                    :value="item.uid"-->
+<!--                />-->
+<!--              </el-select>-->
+              <el-cascader style="width: 100%" v-model="form.acceptUid" :options="workerList" :props="cas4Props" filterable :show-all-levels="false"/>
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="现场开始结束确认人" prop="startOrEndUids">
-              <el-select v-model="form.startOrEndUids" filterable multiple clearable>
-                <el-option
-                    v-for="item in workerList"
-                    :key="item.uid"
-                    :label="item.username"
-                    :value="item.uid"
-                />
-              </el-select>
+<!--              <el-select v-model="form.startOrEndUids" filterable multiple clearable>-->
+<!--                <el-option-->
+<!--                    v-for="item in workerList"-->
+<!--                    :key="item.uid"-->
+<!--                    :label="item.username"-->
+<!--                    :value="item.uid"-->
+<!--                />-->
+<!--              </el-select>-->
+              <el-cascader style="width: 100%" v-model="form.startOrEndUids" :options="workerList" :props="casProps" filterable @change="singleSelect($event,'结束人')" :show-all-levels="false"/>
             </el-form-item>
           </el-col>
         </el-row>
@@ -329,11 +335,16 @@
 	import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
   import workSelect from "/@/views/newSpecialWorkSystem/workTicket/zysq/components/workSelect.vue";
   import axios from "axios";
+  import {userApi} from "/@/api/systemManage/user";
 	interface stateType {
 		form: Object,
 		equipmentDialog: boolean,
     props:{},
     depProps:{},
+    casProps:{}
+    cas2Props: {}
+    cas3Props: {}
+    cas4Props: {}
     safetyMeasureBasicList: [],
     fileList: Array<file>,
     uploadUrl: string,
@@ -392,6 +403,122 @@
           value: 'depId',
           checkStrictly: true,
           emitPath: false
+        },
+        casProps: {
+          value: 'uid',
+          label: 'username',
+          multiple: true,
+          lazy: true,
+          async lazyLoad(node, resolve){
+            const { value, level } = node
+            let nodes = []
+            if(value == 0){
+              nodes = props.workerList
+            }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,
+              username: node.label + '(' +item.certTypeName +' ' + item.certExpiredAt + ')',
+              leaf: level >= 1
+            }))
+            resolve(nodes)
+          }
+        },
+        cas2Props: {
+          value: 'uid',
+          label: 'realName',
+          multiple: true,
+          checkStrictly: false,
+          lazy: true,
+          async lazyLoad(node, resolve){
+            const { value, level } = node
+            let nodes = []
+            if(value == 0){
+              nodes = props.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)
+          }
+        },
+        cas3Props: {
+          value: 'uid',
+          label: 'realName',
+          multiple: true,
+          lazy: true,
+          async lazyLoad(node, resolve){
+            const { value, level } = node
+            let nodes = []
+            if(value == 0){
+              nodes = props.spList.jhList
+            }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)
+          }
+        },
+        cas4Props: {
+          value: 'uid',
+          label: 'username',
+          lazy: true,
+          async lazyLoad(node, resolve){
+            const { value, level } = node
+            let nodes = []
+            if(value == 0){
+              nodes = props.workerList
+            }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,
+              username: node.label + '(' +item.certTypeName +' ' + item.certExpiredAt + ')',
+              leaf: level >= 1
+            }))
+            resolve(nodes)
+          }
         },
         fileList: [],
         imgLimit: 3,
@@ -459,9 +586,22 @@
         }
       };
 
-      const getStartEndIds = ()=>{
+      const getStartEndIds = (value)=>{
+        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)
+            }
+          }
+          state.form.headUids = temp
+        }
         state.form.startOrEndUids = state.form.headUids
-        state.form.approvalDepBasicList[0].approvalUids = state.form.headUids
+        state.form.approvalDepBasicList[0].approvalUids = [...new Set(state.form.headUids.map((i)=>i[0]))]
       }
 
       const getSafetyIds = ()=>{
@@ -470,6 +610,45 @@
 
       const isFirstRow = (index)=> {
         return index === 0;
+      }
+
+      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]
+          }
+        })
+      }
+
+      const transform2Obj = (arr: Array<any>)=>{
+        return {
+          uid: arr[0],
+          certificate: arr[1].split(',')[0],
+          certExpiredAt: arr[1].split(',')[1],
+          certTypeName: arr[1].split(',')[2]
+        }
+      }
+
+      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}
+        }
       }
 
       const submitForm = async (formEl: FormInstance | undefined) => {
@@ -489,7 +668,14 @@
               state.form.involveOtherWork = state.form.involveOtherWork.join(',')
             }
             state.form.workDetail.gbPath = state.form.workDetail.gbPath.join(',')
-            const res = await workApplyApi().submitGroundApply(state.form)
+            const data = state.form
+            data.operatorUids = transformArr(data.operatorUids)
+            data.headUids = transformArr(data.headUids)
+            data.guardianUids = transformArr(data.guardianUids)
+            data.safetyMeasureUids = transformArr(data.safetyMeasureUids)
+            data.startOrEndUids = transformArr(data.startOrEndUids)
+            data.acceptUid = transform2Obj(data.acceptUid)
+            const res = await workApplyApi().submitGroundApply(data)
             if (res.data.code === '200') {
               ElMessage({
                 type: 'success',
@@ -656,6 +842,7 @@
         beforeRemove,
         openWorkSelect,
         getSelected,
+        singleSelect,
         workSelectRef,
 				Search,
 				ruleFormRef,
diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/height.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/height.vue
index f7650ee..48bf616 100644
--- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/height.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/height.vue
@@ -54,15 +54,16 @@
           </el-form-item>
         </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 spList.opList"
-                  :key="item.uid"
-                  :label="item.realName"
-                  :value="item.uid"
-              />
-            </el-select>
+          <el-form-item label="作业人" prop="operatorUids">
+<!--            <el-select v-model="form.operatorUids" filterable multiple clearable>-->
+<!--              <el-option-->
+<!--                  v-for="item in spList.opList"-->
+<!--                  :key="item.uid"-->
+<!--                  :label="item.realName"-->
+<!--                  :value="item.uid"-->
+<!--              />-->
+<!--            </el-select>-->
+            <el-cascader style="width: 100%" v-model="form.operatorUids" :options="spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>
           </el-form-item>
         </el-col>
       </el-row>
@@ -74,28 +75,30 @@
         </el-col>
         <el-col :span="12">
           <el-form-item label="作业负责人" prop="headUids">
-            <el-select v-model="form.headUids" filterable multiple @change="getStartEndIds" clearable>
-              <el-option
-                  v-for="item in workerList"
-                  :key="item.uid"
-                  :label="item.username"
-                  :value="item.uid"
-              />
-            </el-select>
+<!--            <el-select v-model="form.headUids" filterable multiple @change="getStartEndIds" clearable>-->
+<!--              <el-option-->
+<!--                  v-for="item in workerList"-->
+<!--                  :key="item.uid"-->
+<!--                  :label="item.username"-->
+<!--                  :value="item.uid"-->
+<!--              />-->
+<!--            </el-select>-->
+            <el-cascader style="width: 100%" v-model="form.headUids" :options="workerList" :props="casProps" @change="getStartEndIds" filterable :show-all-levels="false"/>
           </el-form-item>
         </el-col>
 			</el-row>
       <el-row>
         <el-col :span="12">
           <el-form-item label="监护人" prop="guardianUids">
-            <el-select v-model="form.guardianUids" filterable multiple @change="getSafetyIds" clearable>
-              <el-option
-                  v-for="item in spList.jhList"
-                  :key="item.uid"
-                  :label="item.realName"
-                  :value="item.uid"
-              />
-            </el-select>
+<!--            <el-select v-model="form.guardianUids" filterable multiple @change="getSafetyIds" clearable>-->
+<!--              <el-option-->
+<!--                  v-for="item in spList.jhList"-->
+<!--                  :key="item.uid"-->
+<!--                  :label="item.realName"-->
+<!--                  :value="item.uid"-->
+<!--              />-->
+<!--            </el-select>-->
+            <el-cascader style="width: 100%" v-model="form.guardianUids" :options="spList.jhList" :props="cas3Props" filterable @change="singleSelect($event,'监护人')" :show-all-levels="false"/>
           </el-form-item>
         </el-col>
         <el-col :span="12" class="valueSelect">
@@ -184,14 +187,15 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="安全措施确认人" filterable prop="safetyMeasureUids">
-              <el-select v-model="form.safetyMeasureUids" multiple clearable>
-                <el-option
-                    v-for="item in workerList"
-                    :key="item.uid"
-                    :label="item.username"
-                    :value="item.uid"
-                />
-              </el-select>
+<!--              <el-select v-model="form.safetyMeasureUids" multiple clearable>-->
+<!--                <el-option-->
+<!--                    v-for="item in workerList"-->
+<!--                    :key="item.uid"-->
+<!--                    :label="item.username"-->
+<!--                    :value="item.uid"-->
+<!--                />-->
+<!--              </el-select>-->
+              <el-cascader style="width: 100%" v-model="form.safetyMeasureUids" :options="workerList" :props="casProps" filterable @change="singleSelect($event,'确认人')" :show-all-levels="false"/>
             </el-form-item>
           </el-col>
         </el-row>
@@ -226,26 +230,28 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="完工验收" prop="acceptUid">
-              <el-select v-model="form.acceptUid" clearable>
-                <el-option
-                    v-for="item in workerList"
-                    :key="item.uid"
-                    :label="item.username"
-                    :value="item.uid"
-                />
-              </el-select>
+<!--              <el-select v-model="form.acceptUid" clearable>-->
+<!--                <el-option-->
+<!--                    v-for="item in workerList"-->
+<!--                    :key="item.uid"-->
+<!--                    :label="item.username"-->
+<!--                    :value="item.uid"-->
+<!--                />-->
+<!--              </el-select>-->
+              <el-cascader style="width: 100%" v-model="form.acceptUid" :options="workerList" :props="cas4Props" filterable :show-all-levels="false"/>
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="现场开始结束确认人" filterable prop="startOrEndUids">
-              <el-select v-model="form.startOrEndUids" multiple clearable>
-                <el-option
-                    v-for="item in workerList"
-                    :key="item.uid"
-                    :label="item.username"
-                    :value="item.uid"
-                />
-              </el-select>
+<!--              <el-select v-model="form.startOrEndUids" multiple clearable>-->
+<!--                <el-option-->
+<!--                    v-for="item in workerList"-->
+<!--                    :key="item.uid"-->
+<!--                    :label="item.username"-->
+<!--                    :value="item.uid"-->
+<!--                />-->
+<!--              </el-select>-->
+              <el-cascader style="width: 100%" v-model="form.startOrEndUids" :options="workerList" :props="casProps" filterable @change="singleSelect($event,'结束人')" :show-all-levels="false"/>
             </el-form-item>
           </el-col>
         </el-row>
@@ -269,12 +275,17 @@
 	import type { FormInstance, FormRules } from 'element-plus'
 	import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
   import workSelect from "/@/views/newSpecialWorkSystem/workTicket/zysq/components/workSelect.vue";
+  import {userApi} from "/@/api/systemManage/user";
 	interface stateType {
 		form: Object,
 		workLevelList: Array<any>,
 		equipmentDialog: boolean,
     props:{},
     depProps:{},
+    casProps:{}
+    cas2Props: {}
+    cas3Props: {}
+    cas4Props: {}
     safetyMeasureBasicList: []
 	}
 	export default defineComponent({
@@ -334,6 +345,122 @@
           label: 'depName',
           value: 'depId',
           emitPath: false
+        },
+        casProps: {
+          value: 'uid',
+          label: 'username',
+          multiple: true,
+          lazy: true,
+          async lazyLoad(node, resolve){
+            const { value, level } = node
+            let nodes = []
+            if(value == 0){
+              nodes = props.workerList
+            }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,
+              username: node.label + '(' +item.certTypeName +' ' + item.certExpiredAt + ')',
+              leaf: level >= 1
+            }))
+            resolve(nodes)
+          }
+        },
+        cas2Props: {
+          value: 'uid',
+          label: 'realName',
+          multiple: true,
+          checkStrictly: false,
+          lazy: true,
+          async lazyLoad(node, resolve){
+            const { value, level } = node
+            let nodes = []
+            if(value == 0){
+              nodes = props.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)
+          }
+        },
+        cas3Props: {
+          value: 'uid',
+          label: 'realName',
+          multiple: true,
+          lazy: true,
+          async lazyLoad(node, resolve){
+            const { value, level } = node
+            let nodes = []
+            if(value == 0){
+              nodes = props.spList.jhList
+            }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)
+          }
+        },
+        cas4Props: {
+          value: 'uid',
+          label: 'username',
+          lazy: true,
+          async lazyLoad(node, resolve){
+            const { value, level } = node
+            let nodes = []
+            if(value == 0){
+              nodes = props.workerList
+            }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,
+              username: node.label + '(' +item.certTypeName +' ' + item.certExpiredAt + ')',
+              leaf: level >= 1
+            }))
+            resolve(nodes)
+          }
         },
         depProps:{
           expandTrigger: 'hover',
@@ -401,9 +528,22 @@
         }
       };
 
-      const getStartEndIds = ()=>{
+      const getStartEndIds = (value)=>{
+        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)
+            }
+          }
+          state.form.headUids = temp
+        }
         state.form.startOrEndUids = state.form.headUids
-        state.form.approvalDepBasicList[0].approvalUids = state.form.headUids
+        state.form.approvalDepBasicList[0].approvalUids = [...new Set(state.form.headUids.map((i)=>i[0]))]
       }
 
       const getSafetyIds = ()=>{
@@ -412,6 +552,45 @@
 
       const isFirstRow = (index)=> {
         return index === 0;
+      }
+
+      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]
+          }
+        })
+      }
+
+      const transform2Obj = (arr: Array<any>)=>{
+        return {
+          uid: arr[0],
+          certificate: arr[1].split(',')[0],
+          certExpiredAt: arr[1].split(',')[1],
+          certTypeName: arr[1].split(',')[2]
+        }
+      }
+
+      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}
+        }
       }
 
       const submitForm = async (formEl: FormInstance | undefined) => {
@@ -430,7 +609,14 @@
             // if(Array.isArray(state.form.involveOtherWork)){
             //   state.form.involveOtherWork = state.form.involveOtherWork.join(',')
             // }
-            const res = await workApplyApi().submitHeightApply(state.form)
+            const data = state.form
+            data.operatorUids = transformArr(data.operatorUids)
+            data.headUids = transformArr(data.headUids)
+            data.guardianUids = transformArr(data.guardianUids)
+            data.safetyMeasureUids = transformArr(data.safetyMeasureUids)
+            data.startOrEndUids = transformArr(data.startOrEndUids)
+            data.acceptUid = transform2Obj(data.acceptUid)
+            const res = await workApplyApi().submitHeightApply(data)
             if (res.data.code === '200') {
               ElMessage({
                 type: 'success',
@@ -497,6 +683,7 @@
         findParent,
         openWorkSelect,
         getSelected,
+        singleSelect,
         workSelectRef,
 				Search,
 				ruleFormRef,
diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/hoist.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/hoist.vue
index fb355d4..e17cd1a 100644
--- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/hoist.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/hoist.vue
@@ -64,15 +64,16 @@
           </el-form-item>
         </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 spList.opList"
-                  :key="item.uid"
-                  :label="item.realName"
-                  :value="item.uid"
-              />
-            </el-select>
+          <el-form-item label="作业人" prop="operatorUids">
+<!--            <el-select v-model="form.operatorUids" filterable multiple clearable>-->
+<!--              <el-option-->
+<!--                  v-for="item in spList.opList"-->
+<!--                  :key="item.uid"-->
+<!--                  :label="item.realName"-->
+<!--                  :value="item.uid"-->
+<!--              />-->
+<!--            </el-select>-->
+            <el-cascader style="width: 100%" v-model="form.operatorUids" :options="spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>
           </el-form-item>
         </el-col>
       </el-row>
@@ -84,14 +85,15 @@
         </el-col>
         <el-col :span="12">
           <el-form-item label="作业负责人" prop="headUids">
-            <el-select v-model="form.headUids" multiple filterable @change="getStartEndIds" clearable>
-              <el-option
-                  v-for="item in workerList"
-                  :key="item.uid"
-                  :label="item.username"
-                  :value="item.uid"
-              />
-            </el-select>
+<!--            <el-select v-model="form.headUids" multiple filterable @change="getStartEndIds" clearable>-->
+<!--              <el-option-->
+<!--                  v-for="item in workerList"-->
+<!--                  :key="item.uid"-->
+<!--                  :label="item.username"-->
+<!--                  :value="item.uid"-->
+<!--              />-->
+<!--            </el-select>-->
+            <el-cascader style="width: 100%" v-model="form.headUids" :options="workerList" :props="casProps" @change="getStartEndIds" filterable :show-all-levels="false"/>
           </el-form-item>
         </el-col>
 			</el-row>
@@ -128,14 +130,15 @@
       <el-row>
         <el-col :span="12">
           <el-form-item label="监护人" prop="guardianUids">
-            <el-select v-model="form.guardianUids" filterable multiple @change="getSafetyIds" clearable>
-              <el-option
-                  v-for="item in spList.jhList"
-                  :key="item.uid"
-                  :label="item.realName"
-                  :value="item.uid"
-              />
-            </el-select>
+<!--            <el-select v-model="form.guardianUids" filterable multiple @change="getSafetyIds" clearable>-->
+<!--              <el-option-->
+<!--                  v-for="item in spList.jhList"-->
+<!--                  :key="item.uid"-->
+<!--                  :label="item.realName"-->
+<!--                  :value="item.uid"-->
+<!--              />-->
+<!--            </el-select>-->
+            <el-cascader style="width: 100%" v-model="form.guardianUids" :options="spList.jhList" :props="cas3Props" filterable @change="singleSelect($event,'监护人')" :show-all-levels="false"/>
           </el-form-item>
         </el-col>
         <el-col :span="12">
@@ -229,14 +232,15 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="安全措施确认人" prop="safetyMeasureUids">
-              <el-select v-model="form.safetyMeasureUids" filterable multiple clearable>
-                <el-option
-                    v-for="item in workerList"
-                    :key="item.uid"
-                    :label="item.username"
-                    :value="item.uid"
-                />
-              </el-select>
+<!--              <el-select v-model="form.safetyMeasureUids" filterable multiple clearable>-->
+<!--                <el-option-->
+<!--                    v-for="item in workerList"-->
+<!--                    :key="item.uid"-->
+<!--                    :label="item.username"-->
+<!--                    :value="item.uid"-->
+<!--                />-->
+<!--              </el-select>-->
+              <el-cascader style="width: 100%" v-model="form.safetyMeasureUids" :options="workerList" :props="casProps" filterable @change="singleSelect($event,'确认人')" :show-all-levels="false"/>
             </el-form-item>
           </el-col>
         </el-row>
@@ -291,26 +295,28 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="完工验收" prop="acceptUid">
-              <el-select v-model="form.acceptUid" filterable clearable>
-                <el-option
-                    v-for="item in workerList"
-                    :key="item.uid"
-                    :label="item.username"
-                    :value="item.uid"
-                />
-              </el-select>
+<!--              <el-select v-model="form.acceptUid" filterable clearable>-->
+<!--                <el-option-->
+<!--                    v-for="item in workerList"-->
+<!--                    :key="item.uid"-->
+<!--                    :label="item.username"-->
+<!--                    :value="item.uid"-->
+<!--                />-->
+<!--              </el-select>-->
+              <el-cascader style="width: 100%" v-model="form.acceptUid" :options="workerList" :props="cas4Props" filterable :show-all-levels="false"/>
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="现场开始结束确认人" prop="startOrEndUids">
-              <el-select v-model="form.startOrEndUids" filterable multiple clearable>
-                <el-option
-                    v-for="item in workerList"
-                    :key="item.uid"
-                    :label="item.username"
-                    :value="item.uid"
-                />
-              </el-select>
+<!--              <el-select v-model="form.startOrEndUids" filterable multiple clearable>-->
+<!--                <el-option-->
+<!--                    v-for="item in workerList"-->
+<!--                    :key="item.uid"-->
+<!--                    :label="item.username"-->
+<!--                    :value="item.uid"-->
+<!--                />-->
+<!--              </el-select>-->
+              <el-cascader style="width: 100%" v-model="form.startOrEndUids" :options="workerList" :props="casProps" filterable @change="singleSelect($event,'结束人')" :show-all-levels="false"/>
             </el-form-item>
           </el-col>
         </el-row>
@@ -334,12 +340,17 @@
 	import type { FormInstance, FormRules } from 'element-plus'
 	import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
   import workSelect from "/@/views/newSpecialWorkSystem/workTicket/zysq/components/workSelect.vue";
+  import {userApi} from "/@/api/systemManage/user";
 	interface stateType {
 		form: Object,
 		workLevelList: Array<any>,
 		equipmentDialog: boolean,
     props:{},
     depProps:{},
+    casProps:{}
+    cas2Props: {}
+    cas3Props: {}
+    cas4Props: {}
     safetyMeasureBasicList: []
 	}
 	export default defineComponent({
@@ -405,7 +416,123 @@
           value: 'depId',
           checkStrictly: true,
           emitPath: false
-        }
+        },
+        casProps: {
+          value: 'uid',
+          label: 'username',
+          multiple: true,
+          lazy: true,
+          async lazyLoad(node, resolve){
+            const { value, level } = node
+            let nodes = []
+            if(value == 0){
+              nodes = props.workerList
+            }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,
+              username: node.label + '(' +item.certTypeName +' ' + item.certExpiredAt + ')',
+              leaf: level >= 1
+            }))
+            resolve(nodes)
+          }
+        },
+        cas2Props: {
+          value: 'uid',
+          label: 'realName',
+          multiple: true,
+          checkStrictly: false,
+          lazy: true,
+          async lazyLoad(node, resolve){
+            const { value, level } = node
+            let nodes = []
+            if(value == 0){
+              nodes = props.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)
+          }
+        },
+        cas3Props: {
+          value: 'uid',
+          label: 'realName',
+          multiple: true,
+          lazy: true,
+          async lazyLoad(node, resolve){
+            const { value, level } = node
+            let nodes = []
+            if(value == 0){
+              nodes = props.spList.jhList
+            }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)
+          }
+        },
+        cas4Props: {
+          value: 'uid',
+          label: 'username',
+          lazy: true,
+          async lazyLoad(node, resolve){
+            const { value, level } = node
+            let nodes = []
+            if(value == 0){
+              nodes = props.workerList
+            }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,
+              username: node.label + '(' +item.certTypeName +' ' + item.certExpiredAt + ')',
+              leaf: level >= 1
+            }))
+            resolve(nodes)
+          }
+        },
 			});
 			const ruleFormRef = ref<FormInstance>()
 			const applyRules = reactive<FormRules>({
@@ -469,9 +596,22 @@
         }
       };
 
-      const getStartEndIds = ()=>{
+      const getStartEndIds = (value)=>{
+        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)
+            }
+          }
+          state.form.headUids = temp
+        }
         state.form.startOrEndUids = state.form.headUids
-        state.form.approvalDepBasicList[0].approvalUids = state.form.headUids
+        state.form.approvalDepBasicList[0].approvalUids = [...new Set(state.form.headUids.map((i)=>i[0]))]
       }
 
       const getSafetyIds = ()=>{
@@ -480,6 +620,45 @@
 
       const isFirstRow = (index)=> {
         return index === 0;
+      }
+
+      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]
+          }
+        })
+      }
+
+      const transform2Obj = (arr: Array<any>)=>{
+        return {
+          uid: arr[0],
+          certificate: arr[1].split(',')[0],
+          certExpiredAt: arr[1].split(',')[1],
+          certTypeName: arr[1].split(',')[2]
+        }
+      }
+
+      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}
+        }
       }
 
       const submitForm = async (formEl: FormInstance | undefined) => {
@@ -499,7 +678,14 @@
             //   state.form.involveOtherWork = state.form.involveOtherWork.join(',')
             // }
             state.form.workDetail.solicitorUids = state.form.workDetail.solicitorUids.join(',')
-            const res = await workApplyApi().submitHoistApply(state.form)
+            const data = state.form
+            data.operatorUids = transformArr(data.operatorUids)
+            data.headUids = transformArr(data.headUids)
+            data.guardianUids = transformArr(data.guardianUids)
+            data.safetyMeasureUids = transformArr(data.safetyMeasureUids)
+            data.startOrEndUids = transformArr(data.startOrEndUids)
+            data.acceptUid = transform2Obj(data.acceptUid)
+            const res = await workApplyApi().submitHoistApply(data)
             if (res.data.code === '200') {
               ElMessage({
                 type: 'success',
@@ -567,6 +753,7 @@
         findParent,
         openWorkSelect,
         getSelected,
+        singleSelect,
         workSelectRef,
 				Search,
 				ruleFormRef,
diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/plate.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/plate.vue
index 0a47ec3..54240e7 100644
--- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/plate.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/plate.vue
@@ -143,15 +143,16 @@
         </el-row>
       <el-row>
         <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 spList.opList"
-                  :key="item.uid"
-                  :label="item.realName"
-                  :value="item.uid"
-              />
-            </el-select>
+          <el-form-item label="作业人" prop="operatorUids">
+<!--            <el-select v-model="form.operatorUids" filterable multiple clearable>-->
+<!--              <el-option-->
+<!--                  v-for="item in spList.opList"-->
+<!--                  :key="item.uid"-->
+<!--                  :label="item.realName"-->
+<!--                  :value="item.uid"-->
+<!--              />-->
+<!--            </el-select>-->
+            <el-cascader style="width: 100%" v-model="form.operatorUids" :options="spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>
           </el-form-item>
         </el-col>
         <el-col :span="12" class="valueSelect">
@@ -179,28 +180,30 @@
         </el-col>
         <el-col :span="12">
           <el-form-item label="作业负责人" prop="headUids">
-            <el-select v-model="form.headUids" multiple filterable @change="getStartEndIds" clearable>
-              <el-option
-                  v-for="item in workerList"
-                  :key="item.uid"
-                  :label="item.username"
-                  :value="item.uid"
-              />
-            </el-select>
+<!--            <el-select v-model="form.headUids" multiple filterable @change="getStartEndIds" clearable>-->
+<!--              <el-option-->
+<!--                  v-for="item in workerList"-->
+<!--                  :key="item.uid"-->
+<!--                  :label="item.username"-->
+<!--                  :value="item.uid"-->
+<!--              />-->
+<!--            </el-select>-->
+            <el-cascader style="width: 100%" v-model="form.headUids" :options="workerList" :props="casProps" @change="getStartEndIds" filterable :show-all-levels="false"/>
           </el-form-item>
         </el-col>
 			</el-row>
       <el-row>
         <el-col :span="12">
           <el-form-item label="监护人" prop="guardianUids">
-            <el-select v-model="form.guardianUids" multiple filterable @change="getSafetyIds" clearable>
-              <el-option
-                  v-for="item in spList.jhList"
-                  :key="item.uid"
-                  :label="item.realName"
-                  :value="item.uid"
-              />
-            </el-select>
+<!--            <el-select v-model="form.guardianUids" multiple filterable @change="getSafetyIds" clearable>-->
+<!--              <el-option-->
+<!--                  v-for="item in spList.jhList"-->
+<!--                  :key="item.uid"-->
+<!--                  :label="item.realName"-->
+<!--                  :value="item.uid"-->
+<!--              />-->
+<!--            </el-select>-->
+            <el-cascader style="width: 100%" v-model="form.guardianUids" :options="spList.jhList" :props="cas3Props" filterable @change="singleSelect($event,'监护人')" :show-all-levels="false"/>
           </el-form-item>
         </el-col>
         <el-col :span="12">
@@ -292,14 +295,15 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="安全措施确认人" prop="safetyMeasureUids">
-              <el-select v-model="form.safetyMeasureUids" filterable multiple clearable>
-                <el-option
-                    v-for="item in workerList"
-                    :key="item.uid"
-                    :label="item.username"
-                    :value="item.uid"
-                />
-              </el-select>
+<!--              <el-select v-model="form.safetyMeasureUids" filterable multiple clearable>-->
+<!--                <el-option-->
+<!--                    v-for="item in workerList"-->
+<!--                    :key="item.uid"-->
+<!--                    :label="item.username"-->
+<!--                    :value="item.uid"-->
+<!--                />-->
+<!--              </el-select>-->
+              <el-cascader style="width: 100%" v-model="form.safetyMeasureUids" :options="workerList" :props="casProps" filterable @change="singleSelect($event,'确认人')" :show-all-levels="false"/>
             </el-form-item>
           </el-col>
         </el-row>
@@ -334,26 +338,28 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="完工验收" prop="acceptUid">
-              <el-select v-model="form.acceptUid" filterable clearable>
-                <el-option
-                    v-for="item in workerList"
-                    :key="item.uid"
-                    :label="item.username"
-                    :value="item.uid"
-                />
-              </el-select>
+<!--              <el-select v-model="form.acceptUid" filterable clearable>-->
+<!--                <el-option-->
+<!--                    v-for="item in workerList"-->
+<!--                    :key="item.uid"-->
+<!--                    :label="item.username"-->
+<!--                    :value="item.uid"-->
+<!--                />-->
+<!--              </el-select>-->
+              <el-cascader style="width: 100%" v-model="form.acceptUid" :options="workerList" :props="cas4Props" filterable :show-all-levels="false"/>
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="现场开始结束确认人" prop="startOrEndUids">
-              <el-select v-model="form.startOrEndUids" filterable multiple clearable>
-                <el-option
-                    v-for="item in workerList"
-                    :key="item.uid"
-                    :label="item.username"
-                    :value="item.uid"
-                />
-              </el-select>
+<!--              <el-select v-model="form.startOrEndUids" filterable multiple clearable>-->
+<!--                <el-option-->
+<!--                    v-for="item in workerList"-->
+<!--                    :key="item.uid"-->
+<!--                    :label="item.username"-->
+<!--                    :value="item.uid"-->
+<!--                />-->
+<!--              </el-select>-->
+              <el-cascader style="width: 100%" v-model="form.startOrEndUids" :options="workerList" :props="casProps" filterable @change="singleSelect($event,'结束人')" :show-all-levels="false"/>
             </el-form-item>
           </el-col>
         </el-row>
@@ -379,12 +385,17 @@
   import workSelect from "/@/views/newSpecialWorkSystem/workTicket/zysq/components/workSelect.vue";
   import {UploadProps} from "element-plus/es";
   import axios from "axios";
+  import {userApi} from "/@/api/systemManage/user";
 	interface stateType {
 		form: Object,
 		workLevelList: Array<any>,
 		equipmentDialog: boolean,
     props:{},
     depProps:{},
+    casProps:{}
+    cas2Props: {}
+    cas3Props: {}
+    cas4Props: {}
     safetyMeasureBasicList: [],
     fileList: Array<file>,
     uploadUrl: string,
@@ -462,6 +473,122 @@
           checkStrictly: true,
           emitPath: false
         },
+        casProps: {
+          value: 'uid',
+          label: 'username',
+          multiple: true,
+          lazy: true,
+          async lazyLoad(node, resolve){
+            const { value, level } = node
+            let nodes = []
+            if(value == 0){
+              nodes = props.workerList
+            }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,
+              username: node.label + '(' +item.certTypeName +' ' + item.certExpiredAt + ')',
+              leaf: level >= 1
+            }))
+            resolve(nodes)
+          }
+        },
+        cas2Props: {
+          value: 'uid',
+          label: 'realName',
+          multiple: true,
+          checkStrictly: false,
+          lazy: true,
+          async lazyLoad(node, resolve){
+            const { value, level } = node
+            let nodes = []
+            if(value == 0){
+              nodes = props.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)
+          }
+        },
+        cas3Props: {
+          value: 'uid',
+          label: 'realName',
+          multiple: true,
+          lazy: true,
+          async lazyLoad(node, resolve){
+            const { value, level } = node
+            let nodes = []
+            if(value == 0){
+              nodes = props.spList.jhList
+            }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)
+          }
+        },
+        cas4Props: {
+          value: 'uid',
+          label: 'username',
+          lazy: true,
+          async lazyLoad(node, resolve){
+            const { value, level } = node
+            let nodes = []
+            if(value == 0){
+              nodes = props.workerList
+            }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,
+              username: node.label + '(' +item.certTypeName +' ' + item.certExpiredAt + ')',
+              leaf: level >= 1
+            }))
+            resolve(nodes)
+          }
+        },
         fileList: [],
         imgLimit: 3,
         uploadUrl: '',
@@ -538,9 +665,22 @@
         }
       };
 
-      const getStartEndIds = ()=>{
+      const getStartEndIds = (value)=>{
+        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)
+            }
+          }
+          state.form.headUids = temp
+        }
         state.form.startOrEndUids = state.form.headUids
-        state.form.approvalDepBasicList[0].approvalUids = state.form.headUids
+        state.form.approvalDepBasicList[0].approvalUids = [...new Set(state.form.headUids.map((i)=>i[0]))]
       }
 
       const getSafetyIds = ()=>{
@@ -549,6 +689,45 @@
 
       const isFirstRow = (index)=> {
         return index === 0;
+      }
+
+      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]
+          }
+        })
+      }
+
+      const transform2Obj = (arr: Array<any>)=>{
+        return {
+          uid: arr[0],
+          certificate: arr[1].split(',')[0],
+          certExpiredAt: arr[1].split(',')[1],
+          certTypeName: arr[1].split(',')[2]
+        }
+      }
+
+      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}
+        }
       }
 
       const submitForm = async (formEl: FormInstance | undefined) => {
@@ -568,7 +747,14 @@
             //   state.form.involveOtherWork = state.form.involveOtherWork.join(',')
             // }
             state.form.workDetail.bpLocationMapPath = state.form.workDetail.bpLocationMapPath.join(',')
-            const res = await workApplyApi().submitPlateApply(state.form)
+            const data = state.form
+            data.operatorUids = transformArr(data.operatorUids)
+            data.headUids = transformArr(data.headUids)
+            data.guardianUids = transformArr(data.guardianUids)
+            data.safetyMeasureUids = transformArr(data.safetyMeasureUids)
+            data.startOrEndUids = transformArr(data.startOrEndUids)
+            data.acceptUid = transform2Obj(data.acceptUid)
+            const res = await workApplyApi().submitPlateApply(data)
             if (res.data.code === '200') {
               ElMessage({
                 type: 'success',
@@ -735,6 +921,7 @@
         beforeRemove,
         openWorkSelect,
         getSelected,
+        singleSelect,
         workSelectRef,
 				Search,
 				ruleFormRef,
diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/power.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/power.vue
index 2b76056..635a6f8 100644
--- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/power.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/power.vue
@@ -78,15 +78,16 @@
       </el-row>
         <el-row>
           <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 spList.opList"
-                    :key="item.uid"
-                    :label="item.realName"
-                    :value="item.uid"
-                />
-              </el-select>
+            <el-form-item label="作业人" prop="operatorUids">
+<!--              <el-select v-model="form.operatorUids" filterable multiple clearable>-->
+<!--                <el-option-->
+<!--                    v-for="item in spList.opList"-->
+<!--                    :key="item.uid"-->
+<!--                    :label="item.realName"-->
+<!--                    :value="item.uid"-->
+<!--                />-->
+<!--              </el-select>-->
+              <el-cascader style="width: 100%" v-model="form.operatorUids" :options="spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>
             </el-form-item>
           </el-col>
         </el-row>
@@ -98,28 +99,30 @@
         </el-col>
         <el-col :span="12">
           <el-form-item label="作业负责人" prop="headUids">
-            <el-select v-model="form.headUids" multiple filterable @change="getStartEndIds" clearable>
-              <el-option
-                  v-for="item in workerList"
-                  :key="item.uid"
-                  :label="item.username"
-                  :value="item.uid"
-              />
-            </el-select>
+<!--            <el-select v-model="form.headUids" multiple filterable @change="getStartEndIds" clearable>-->
+<!--              <el-option-->
+<!--                  v-for="item in workerList"-->
+<!--                  :key="item.uid"-->
+<!--                  :label="item.username"-->
+<!--                  :value="item.uid"-->
+<!--              />-->
+<!--            </el-select>-->
+            <el-cascader style="width: 100%" v-model="form.headUids" :options="workerList" :props="casProps" @change="getStartEndIds" filterable :show-all-levels="false"/>
           </el-form-item>
         </el-col>
 			</el-row>
       <el-row>
         <el-col :span="12">
           <el-form-item label="分析人" prop="analystUids">
-            <el-select v-model="form.analystUids" filterable multiple clearable>
-              <el-option
-                  v-for="item in workerList"
-                  :key="item.uid"
-                  :label="item.username"
-                  :value="item.uid"
-              />
-            </el-select>
+<!--            <el-select v-model="form.analystUids" filterable multiple clearable>-->
+<!--              <el-option-->
+<!--                  v-for="item in workerList"-->
+<!--                  :key="item.uid"-->
+<!--                  :label="item.username"-->
+<!--                  :value="item.uid"-->
+<!--              />-->
+<!--            </el-select>-->
+            <el-cascader style="width: 100%" v-model="form.analystUids" :options="workerList" :props="casProps" filterable @change="singleSelect($event,'分析人')" :show-all-levels="false"/>
           </el-form-item>
         </el-col>
         <el-col :span="12" class="valueSelect">
@@ -142,14 +145,15 @@
       <el-row>
         <el-col :span="12">
           <el-form-item label="监护人" prop="guardianUids">
-            <el-select v-model="form.guardianUids" multiple filterable @change="getSafetyIds" clearable>
-              <el-option
-                  v-for="item in spList.jhList"
-                  :key="item.uid"
-                  :label="item.realName"
-                  :value="item.uid"
-              />
-            </el-select>
+<!--            <el-select v-model="form.guardianUids" multiple filterable @change="getSafetyIds" clearable>-->
+<!--              <el-option-->
+<!--                  v-for="item in spList.jhList"-->
+<!--                  :key="item.uid"-->
+<!--                  :label="item.realName"-->
+<!--                  :value="item.uid"-->
+<!--              />-->
+<!--            </el-select>-->
+            <el-cascader style="width: 100%" v-model="form.guardianUids" :options="spList.jhList" :props="cas3Props" filterable @change="singleSelect($event,'监护人')" :show-all-levels="false"/>
           </el-form-item>
         </el-col>
         <el-col :span="12">
@@ -243,14 +247,15 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="安全措施确认人" prop="safetyMeasureUids">
-              <el-select v-model="form.safetyMeasureUids" filterable multiple clearable>
-                <el-option
-                    v-for="item in workerList"
-                    :key="item.uid"
-                    :label="item.username"
-                    :value="item.uid"
-                />
-              </el-select>
+<!--              <el-select v-model="form.safetyMeasureUids" filterable multiple clearable>-->
+<!--                <el-option-->
+<!--                    v-for="item in workerList"-->
+<!--                    :key="item.uid"-->
+<!--                    :label="item.username"-->
+<!--                    :value="item.uid"-->
+<!--                />-->
+<!--              </el-select>-->
+              <el-cascader style="width: 100%" v-model="form.safetyMeasureUids" :options="workerList" :props="casProps" filterable @change="singleSelect($event,'确认人')" :show-all-levels="false"/>
             </el-form-item>
           </el-col>
         </el-row>
@@ -305,26 +310,28 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="完工验收" prop="acceptUid">
-              <el-select v-model="form.acceptUid" filterable clearable>
-                <el-option
-                    v-for="item in workerList"
-                    :key="item.uid"
-                    :label="item.username"
-                    :value="item.uid"
-                />
-              </el-select>
+<!--              <el-select v-model="form.acceptUid" filterable clearable>-->
+<!--                <el-option-->
+<!--                    v-for="item in workerList"-->
+<!--                    :key="item.uid"-->
+<!--                    :label="item.username"-->
+<!--                    :value="item.uid"-->
+<!--                />-->
+<!--              </el-select>-->
+              <el-cascader style="width: 100%" v-model="form.acceptUid" :options="workerList" :props="cas4Props" filterable :show-all-levels="false"/>
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="现场开始结束确认人" prop="startOrEndUids">
-              <el-select v-model="form.startOrEndUids" filterable multiple clearable>
-                <el-option
-                    v-for="item in workerList"
-                    :key="item.uid"
-                    :label="item.username"
-                    :value="item.uid"
-                />
-              </el-select>
+<!--              <el-select v-model="form.startOrEndUids" filterable multiple clearable>-->
+<!--                <el-option-->
+<!--                    v-for="item in workerList"-->
+<!--                    :key="item.uid"-->
+<!--                    :label="item.username"-->
+<!--                    :value="item.uid"-->
+<!--                />-->
+<!--              </el-select>-->
+              <el-cascader style="width: 100%" v-model="form.startOrEndUids" :options="workerList" :props="casProps" filterable @change="singleSelect($event,'结束人')" :show-all-levels="false"/>
             </el-form-item>
           </el-col>
         </el-row>
@@ -348,11 +355,16 @@
 	import type { FormInstance, FormRules } from 'element-plus'
 	import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
   import workSelect from "/@/views/newSpecialWorkSystem/workTicket/zysq/components/workSelect.vue";
+  import {userApi} from "/@/api/systemManage/user";
 	interface stateType {
 		form: Object,
 		equipmentDialog: boolean,
     props:{},
     depProps:{},
+    casProps:{}
+    cas2Props: {}
+    cas3Props: {}
+    cas4Props: {}
     safetyMeasureBasicList: []
 	}
 	export default defineComponent({
@@ -405,7 +417,123 @@
           value: 'depId',
           checkStrictly: true,
           emitPath: false
-        }
+        },
+        casProps: {
+          value: 'uid',
+          label: 'username',
+          multiple: true,
+          lazy: true,
+          async lazyLoad(node, resolve){
+            const { value, level } = node
+            let nodes = []
+            if(value == 0){
+              nodes = props.workerList
+            }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,
+              username: node.label + '(' +item.certTypeName +' ' + item.certExpiredAt + ')',
+              leaf: level >= 1
+            }))
+            resolve(nodes)
+          }
+        },
+        cas2Props: {
+          value: 'uid',
+          label: 'realName',
+          multiple: true,
+          checkStrictly: false,
+          lazy: true,
+          async lazyLoad(node, resolve){
+            const { value, level } = node
+            let nodes = []
+            if(value == 0){
+              nodes = props.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)
+          }
+        },
+        cas3Props: {
+          value: 'uid',
+          label: 'realName',
+          multiple: true,
+          lazy: true,
+          async lazyLoad(node, resolve){
+            const { value, level } = node
+            let nodes = []
+            if(value == 0){
+              nodes = props.spList.jhList
+            }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)
+          }
+        },
+        cas4Props: {
+          value: 'uid',
+          label: 'username',
+          lazy: true,
+          async lazyLoad(node, resolve){
+            const { value, level } = node
+            let nodes = []
+            if(value == 0){
+              nodes = props.workerList
+            }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,
+              username: node.label + '(' +item.certTypeName +' ' + item.certExpiredAt + ')',
+              leaf: level >= 1
+            }))
+            resolve(nodes)
+          }
+        },
 			});
 			const ruleFormRef = ref<FormInstance>()
 			const applyRules = reactive<FormRules>({
@@ -469,9 +597,22 @@
         }
       };
 
-      const getStartEndIds = ()=>{
+      const getStartEndIds = (value)=>{
+        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)
+            }
+          }
+          state.form.headUids = temp
+        }
         state.form.startOrEndUids = state.form.headUids
-        state.form.approvalDepBasicList[0].approvalUids = state.form.headUids
+        state.form.approvalDepBasicList[0].approvalUids = [...new Set(state.form.headUids.map((i)=>i[0]))]
       }
 
       const getSafetyIds = ()=>{
@@ -480,6 +621,46 @@
 
       const isFirstRow = (index)=> {
         return index === 0;
+      }
+
+      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]
+          }
+        })
+      }
+
+      const transform2Obj = (arr: Array<any>)=>{
+        return {
+          uid: arr[0],
+          certificate: arr[1].split(',')[0],
+          certExpiredAt: arr[1].split(',')[1],
+          certTypeName: arr[1].split(',')[2]
+        }
+      }
+
+      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.analystUids = temp}
+          if(type == '监护人'){state.form.guardianUids = temp}
+          if(type == '确认人'){state.form.safetyMeasureUids = temp}
+          if(type == '结束人'){state.form.startOrEndUids = temp}
+        }
       }
 
       const submitForm = async (formEl: FormInstance | undefined) => {
@@ -499,7 +680,15 @@
             //   state.form.involveOtherWork = state.form.involveOtherWork.join(',')
             // }
             state.form.workDetail.electricityUids = state.form.workDetail.electricityUids.join(',')
-            const res = await workApplyApi().submitPowerApply(state.form)
+            const data = state.form
+            data.operatorUids = transformArr(data.operatorUids)
+            data.headUids = transformArr(data.headUids)
+            data.analystUids = transformArr(data.analystUids)
+            data.guardianUids = transformArr(data.guardianUids)
+            data.safetyMeasureUids = transformArr(data.safetyMeasureUids)
+            data.startOrEndUids = transformArr(data.startOrEndUids)
+            data.acceptUid = transform2Obj(data.acceptUid)
+            const res = await workApplyApi().submitPowerApply(data)
             if (res.data.code === '200') {
               ElMessage({
                 type: 'success',
@@ -567,6 +756,7 @@
         findParent,
         openWorkSelect,
         getSelected,
+        singleSelect,
         workSelectRef,
 				Search,
 				ruleFormRef,
diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/space.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/space.vue
index 4fcac53..df2e3bd 100644
--- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/space.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/space.vue
@@ -44,14 +44,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 spList.opList"
-                  :key="item.uid"
-                  :label="item.realName"
-                  :value="item.uid"
-              />
-            </el-select>
+<!--            <el-select v-model="form.operatorUids" filterable multiple clearable>-->
+<!--              <el-option-->
+<!--                  v-for="item in spList.opList"-->
+<!--                  :key="item.uid"-->
+<!--                  :label="item.realName"-->
+<!--                  :value="item.uid"-->
+<!--              />-->
+<!--            </el-select>-->
+            <el-cascader style="width: 100%" v-model="form.operatorUids" :options="spList.opList" :props="cas2Props" @change="singleSelect($event,'作业人')" filterable :show-all-levels="false"/>
           </el-form-item>
         </el-col>
       </el-row>
@@ -75,28 +76,30 @@
         </el-col>
         <el-col :span="12">
           <el-form-item label="作业负责人" prop="headUids">
-            <el-select v-model="form.headUids" multiple filterable @change="getStartEndIds" clearable>
-              <el-option
-                  v-for="item in workerList"
-                  :key="item.uid"
-                  :label="item.username"
-                  :value="item.uid"
-              />
-            </el-select>
+<!--            <el-select v-model="form.headUids" multiple filterable @change="getStartEndIds" clearable>-->
+<!--              <el-option-->
+<!--                  v-for="item in workerList"-->
+<!--                  :key="item.uid"-->
+<!--                  :label="item.username"-->
+<!--                  :value="item.uid"-->
+<!--              />-->
+<!--            </el-select>-->
+            <el-cascader style="width: 100%" v-model="form.headUids" :options="workerList" :props="casProps" @change="getStartEndIds" filterable :show-all-levels="false"/>
           </el-form-item>
         </el-col>
 			</el-row>
       <el-row>
         <el-col :span="12">
           <el-form-item label="分析人" prop="analystUids">
-            <el-select v-model="form.analystUids" filterable multiple clearable>
-              <el-option
-                  v-for="item in workerList"
-                  :key="item.uid"
-                  :label="item.username"
-                  :value="item.uid"
-              />
-            </el-select>
+<!--            <el-select v-model="form.analystUids" filterable multiple clearable>-->
+<!--              <el-option-->
+<!--                  v-for="item in workerList"-->
+<!--                  :key="item.uid"-->
+<!--                  :label="item.username"-->
+<!--                  :value="item.uid"-->
+<!--              />-->
+<!--            </el-select>-->
+            <el-cascader style="width: 100%" v-model="form.analystUids" :options="workerList" :props="casProps" filterable @change="singleSelect($event,'分析人')" :show-all-levels="false"/>
           </el-form-item>
         </el-col>
         <el-col :span="12" class="valueSelect">
@@ -111,14 +114,15 @@
       <el-row>
         <el-col :span="12">
           <el-form-item label="监护人" prop="guardianUids">
-            <el-select v-model="form.guardianUids" multiple filterable @change="getSafetyIds" clearable>
-              <el-option
-                  v-for="item in spList.jhList"
-                  :key="item.uid"
-                  :label="item.realName"
-                  :value="item.uid"
-              />
-            </el-select>
+<!--            <el-select v-model="form.guardianUids" multiple filterable @change="getSafetyIds" clearable>-->
+<!--              <el-option-->
+<!--                  v-for="item in spList.jhList"-->
+<!--                  :key="item.uid"-->
+<!--                  :label="item.realName"-->
+<!--                  :value="item.uid"-->
+<!--              />-->
+<!--            </el-select>-->
+            <el-cascader style="width: 100%" v-model="form.guardianUids" :options="spList.jhList" :props="cas3Props" filterable @change="singleSelect($event,'监护人')" :show-all-levels="false"/>
           </el-form-item>
         </el-col>
         <el-col :span="12">
@@ -202,14 +206,15 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="安全措施确认人" prop="safetyMeasureUids">
-              <el-select v-model="form.safetyMeasureUids" filterable multiple clearable>
-                <el-option
-                    v-for="item in workerList"
-                    :key="item.uid"
-                    :label="item.username"
-                    :value="item.uid"
-                />
-              </el-select>
+<!--              <el-select v-model="form.safetyMeasureUids" filterable multiple clearable>-->
+<!--                <el-option-->
+<!--                    v-for="item in workerList"-->
+<!--                    :key="item.uid"-->
+<!--                    :label="item.username"-->
+<!--                    :value="item.uid"-->
+<!--                />-->
+<!--              </el-select>-->
+              <el-cascader style="width: 100%" v-model="form.safetyMeasureUids" :options="workerList" :props="casProps" filterable @change="singleSelect($event,'确认人')" :show-all-levels="false"/>
             </el-form-item>
           </el-col>
         </el-row>
@@ -244,26 +249,28 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="完工验收" prop="acceptUid">
-              <el-select v-model="form.acceptUid" filterable clearable>
-                <el-option
-                    v-for="item in workerList"
-                    :key="item.uid"
-                    :label="item.username"
-                    :value="item.uid"
-                />
-              </el-select>
+<!--              <el-select v-model="form.acceptUid" filterable clearable>-->
+<!--                <el-option-->
+<!--                    v-for="item in workerList"-->
+<!--                    :key="item.uid"-->
+<!--                    :label="item.username"-->
+<!--                    :value="item.uid"-->
+<!--                />-->
+<!--              </el-select>-->
+              <el-cascader style="width: 100%" v-model="form.acceptUid" :options="workerList" :props="cas4Props" filterable :show-all-levels="false"/>
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="现场开始结束确认人" prop="startOrEndUids">
-              <el-select v-model="form.startOrEndUids" filterable multiple clearable>
-                <el-option
-                    v-for="item in workerList"
-                    :key="item.uid"
-                    :label="item.username"
-                    :value="item.uid"
-                />
-              </el-select>
+<!--              <el-select v-model="form.startOrEndUids" filterable multiple clearable>-->
+<!--                <el-option-->
+<!--                    v-for="item in workerList"-->
+<!--                    :key="item.uid"-->
+<!--                    :label="item.username"-->
+<!--                    :value="item.uid"-->
+<!--                />-->
+<!--              </el-select>-->
+              <el-cascader style="width: 100%" v-model="form.startOrEndUids" :options="workerList" :props="casProps" filterable @change="singleSelect($event,'结束人')" :show-all-levels="false"/>
             </el-form-item>
           </el-col>
         </el-row>
@@ -287,11 +294,16 @@
 	import type { FormInstance, FormRules } from 'element-plus'
 	import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
   import workSelect from "/@/views/newSpecialWorkSystem/workTicket/zysq/components/workSelect.vue";
+import {userApi} from "/@/api/systemManage/user";
 	interface stateType {
 		form: Object,
 		equipmentDialog: boolean,
     props:{},
     depProps:{},
+    casProps:{}
+    cas2Props: {}
+    cas3Props: {}
+    cas4Props: {}
     safetyMeasureBasicList: []
 	}
 	export default defineComponent({
@@ -342,7 +354,123 @@
           value: 'depId',
           checkStrictly: true,
           emitPath: false
-        }
+        },
+        casProps: {
+          value: 'uid',
+          label: 'username',
+          multiple: true,
+          lazy: true,
+          async lazyLoad(node, resolve){
+            const { value, level } = node
+            let nodes = []
+            if(value == 0){
+              nodes = props.workerList
+            }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,
+              username: node.label + '(' +item.certTypeName +' ' + item.certExpiredAt + ')',
+              leaf: level >= 1
+            }))
+            resolve(nodes)
+          }
+        },
+        cas2Props: {
+          value: 'uid',
+          label: 'realName',
+          multiple: true,
+          checkStrictly: false,
+          lazy: true,
+          async lazyLoad(node, resolve){
+            const { value, level } = node
+            let nodes = []
+            if(value == 0){
+              nodes = props.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)
+          }
+        },
+        cas3Props: {
+          value: 'uid',
+          label: 'realName',
+          multiple: true,
+          lazy: true,
+          async lazyLoad(node, resolve){
+            const { value, level } = node
+            let nodes = []
+            if(value == 0){
+              nodes = props.spList.jhList
+            }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)
+          }
+        },
+        cas4Props: {
+          value: 'uid',
+          label: 'username',
+          lazy: true,
+          async lazyLoad(node, resolve){
+            const { value, level } = node
+            let nodes = []
+            if(value == 0){
+              nodes = props.workerList
+            }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,
+              username: node.label + '(' +item.certTypeName +' ' + item.certExpiredAt + ')',
+              leaf: level >= 1
+            }))
+            resolve(nodes)
+          }
+        },
 			});
 			const ruleFormRef = ref<FormInstance>()
 			const applyRules = reactive<FormRules>({
@@ -406,9 +534,22 @@
         }
       };
 
-      const getStartEndIds = ()=>{
+      const getStartEndIds = (value)=>{
+        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)
+            }
+          }
+          state.form.headUids = temp
+        }
         state.form.startOrEndUids = state.form.headUids
-        state.form.approvalDepBasicList[0].approvalUids = state.form.headUids
+        state.form.approvalDepBasicList[0].approvalUids = [...new Set(state.form.headUids.map((i)=>i[0]))]
       }
 
       const getSafetyIds = ()=>{
@@ -417,6 +558,46 @@
 
       const isFirstRow = (index)=> {
         return index === 0;
+      }
+
+      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]
+          }
+        })
+      }
+
+      const transform2Obj = (arr: Array<any>)=>{
+        return {
+          uid: arr[0],
+          certificate: arr[1].split(',')[0],
+          certExpiredAt: arr[1].split(',')[1],
+          certTypeName: arr[1].split(',')[2]
+        }
+      }
+
+      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.analystUids = temp}
+          if(type == '监护人'){state.form.guardianUids = temp}
+          if(type == '确认人'){state.form.safetyMeasureUids = temp}
+          if(type == '结束人'){state.form.startOrEndUids = temp}
+        }
       }
 
       const submitForm = async (formEl: FormInstance | undefined) => {
@@ -435,7 +616,15 @@
             // if(Array.isArray(state.form.involveOtherWork)){
             //   state.form.involveOtherWork = state.form.involveOtherWork.join(',')
             // }
-            const res = await workApplyApi().submitSpaceApply(state.form)
+            const data = state.form
+            data.operatorUids = transformArr(data.operatorUids)
+            data.headUids = transformArr(data.headUids)
+            data.analystUids = transformArr(data.analystUids)
+            data.guardianUids = transformArr(data.guardianUids)
+            data.safetyMeasureUids = transformArr(data.safetyMeasureUids)
+            data.startOrEndUids = transformArr(data.startOrEndUids)
+            data.acceptUid = transform2Obj(data.acceptUid)
+            const res = await workApplyApi().submitSpaceApply(data)
             if (res.data.code === '200') {
               ElMessage({
                 type: 'success',
@@ -502,6 +691,7 @@
         findParent,
         openWorkSelect,
         getSelected,
+        singleSelect,
         workSelectRef,
 				Search,
 				ruleFormRef,
diff --git a/src/views/newSpecialWorkSystem/workerManage/aqyBase/index.vue b/src/views/newSpecialWorkSystem/workerManage/aqyBase/index.vue
index ec8a832..e287f17 100644
--- a/src/views/newSpecialWorkSystem/workerManage/aqyBase/index.vue
+++ b/src/views/newSpecialWorkSystem/workerManage/aqyBase/index.vue
@@ -28,8 +28,8 @@
                 <el-table-column prop="realName" label="真实姓名" show-overflow-tooltip></el-table-column>
                 <el-table-column prop="depName" label="部门" show-overflow-tooltip></el-table-column>
                 <el-table-column prop="phone" label="手机号" show-overflow-tooltip></el-table-column>
-                <el-table-column prop="email" label="证书编号" show-overflow-tooltip></el-table-column>
-                <el-table-column prop="gmtCreate" label="证书有效期至" show-overflow-tooltip></el-table-column>
+<!--                <el-table-column prop="email" label="证书编号" show-overflow-tooltip></el-table-column>-->
+                <el-table-column prop="expireTime" label="证书有效期至" show-overflow-tooltip></el-table-column>
                 <el-table-column label="操作" width="140">
                     <template #default="scope">
                         <el-button :disabled="scope.row.userName === 'admin'" size="small" text type="primary" @click="onOpenUserDialog('查看', scope.row)">查看</el-button>
diff --git a/src/views/newSpecialWorkSystem/workerManage/guardianBase/index.vue b/src/views/newSpecialWorkSystem/workerManage/guardianBase/index.vue
index 06c033a..6fd0746 100644
--- a/src/views/newSpecialWorkSystem/workerManage/guardianBase/index.vue
+++ b/src/views/newSpecialWorkSystem/workerManage/guardianBase/index.vue
@@ -28,8 +28,8 @@
             <el-table-column prop="realName" label="真实姓名" show-overflow-tooltip></el-table-column>
             <el-table-column prop="depName" label="部门" show-overflow-tooltip></el-table-column>
             <el-table-column prop="phone" label="手机号" show-overflow-tooltip></el-table-column>
-            <el-table-column prop="email" label="证书编号" show-overflow-tooltip></el-table-column>
-            <el-table-column prop="gmtCreate" label="证书有效期至" show-overflow-tooltip></el-table-column>
+<!--            <el-table-column prop="email" label="证书编号" show-overflow-tooltip></el-table-column>-->
+            <el-table-column prop="expireTime" label="证书有效期至" show-overflow-tooltip></el-table-column>
             <el-table-column label="操作" width="140">
               <template #default="scope">
                 <el-button :disabled="scope.row.userName === 'admin'" size="small" text type="primary" @click="onOpenUserDialog('查看', scope.row)">查看</el-button>
diff --git a/src/views/newSpecialWorkSystem/workerManage/operatorBase/index.vue b/src/views/newSpecialWorkSystem/workerManage/operatorBase/index.vue
index 2b5fdff..07eb7ba 100644
--- a/src/views/newSpecialWorkSystem/workerManage/operatorBase/index.vue
+++ b/src/views/newSpecialWorkSystem/workerManage/operatorBase/index.vue
@@ -28,8 +28,8 @@
             <el-table-column prop="realName" label="真实姓名" show-overflow-tooltip></el-table-column>
             <el-table-column prop="depName" label="部门" show-overflow-tooltip></el-table-column>
             <el-table-column prop="phone" label="手机号" show-overflow-tooltip></el-table-column>
-            <el-table-column prop="email" label="证书编号" show-overflow-tooltip></el-table-column>
-            <el-table-column prop="gmtCreate" label="证书有效期至" show-overflow-tooltip></el-table-column>
+<!--            <el-table-column prop="email" label="证书编号" show-overflow-tooltip></el-table-column>-->
+            <el-table-column prop="expireTime" label="证书有效期至" show-overflow-tooltip></el-table-column>
             <el-table-column label="操作" width="140">
               <template #default="scope">
                 <el-button :disabled="scope.row.userName === 'admin'" size="small" text type="primary" @click="onOpenUserDialog('查看', scope.row)">查看</el-button>
diff --git a/src/views/system/user/component/ctfDialog.vue b/src/views/system/user/component/ctfDialog.vue
index a8f7f59..60f9f2f 100644
--- a/src/views/system/user/component/ctfDialog.vue
+++ b/src/views/system/user/component/ctfDialog.vue
@@ -3,13 +3,13 @@
         <el-dialog :title="title" v-model="isShowCtfDialog" width="769px" @close="restForm">
             <el-form :model="ctfForm" size="default" ref="ctfRef" :rules="ctfFormRules" 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="roleId">
-                        <el-select v-model="ctfForm.roleId" placeholder="请选择" clearable class="w100" :disabled="disabled">
-                          <el-option v-for="item in roleData" :key="item.roleId" :label="item.roleName" :value="item.roleId"> </el-option>
-                        </el-select>
-                      </el-form-item>
-                    </el-col>
+<!--                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">-->
+<!--                      <el-form-item label="关联角色" prop="roleId">-->
+<!--                        <el-select v-model="ctfForm.roleId" placeholder="请选择" clearable class="w100" :disabled="disabled">-->
+<!--                          <el-option v-for="item in roleData" :key="item.roleId" :label="item.roleName" :value="item.roleId"> </el-option>-->
+<!--                        </el-select>-->
+<!--                      </el-form-item>-->
+<!--                    </el-col>-->
                     <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
                         <el-form-item label="证书编号" prop="certNo">
                             <el-input v-model.trim="ctfForm.certNo" :disabled="disabled" placeholder="" clearable></el-input>
@@ -21,10 +21,10 @@
                         </el-form-item>
                     </el-col>
                   <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
-                    <el-form-item label="作业类型" prop="workType">
-                      <el-select v-model="ctfForm.workType" placeholder="请选择作业类型" :disabled="disabled">
+                    <el-form-item label="证书类型" prop="certTypeId">
+                      <el-select v-model="ctfForm.certTypeId" placeholder="请选择证书类型" :disabled="disabled">
                         <el-option
-                            v-for="item in workTypeList"
+                            v-for="item in certTypeIdList"
                             :key="item.id"
                             :label="item.name"
                             :value="item.id"
@@ -64,6 +64,7 @@
 import {workApplyApi} from "/@/api/specialWorkSystem/workApply";
 import axios from "axios";
 import {useUserInfo} from "/@/stores/userInfo";
+import {certApi} from "/@/api/systemManage/certificate";
 
 // 定义接口来定义对象的类型
 interface DeptData {}
@@ -78,10 +79,9 @@
     dialogImg: boolean
     ctfForm: {
       userCertId?: string
-      roleId: number| null
       certNo: string
       certExpiredAt: string
-      workType: number| null
+      certTypeId: number| null
       certUrl: string
       uid: string | null
     };
@@ -90,7 +90,7 @@
     fileList: Array<file>
     delList: Array<any>
     uploadUrl: string
-    workTypeList: Array<any>
+    certTypeIdList: Array<any>
 }
 interface file {
   url: string;
@@ -111,48 +111,37 @@
             dialogImg: false,
             ctfForm: {
               userCertId: '',
-              roleId: null,
               certNo: '',
               certExpiredAt: '',
-              workType: null,
+              certTypeId: null,
               certUrl: '',
               uid: ''
             },
             ctfFormRules:{
-                roleId: [{ required: true, message: '请选择证书相关角色', trigger: 'blur' }],
                 certNo: [{ required: true, message: '请输入证书编号', trigger: 'blur' }],
                 certExpiredAt: [{ required: true, message: '请选择证书到期时间', trigger: 'change' }],
-                workType: [{ required: true, message: '请选择作业类型', trigger: 'blur' }],
+                certTypeId: [{ required: true, message: '请选择证书类型', trigger: 'blur' }],
                 certUrl: [{ required: true, message: '请上传证书', trigger: 'change' }],
             },
             dialogImageUrl: null,
             fileList: [],
             delList: [],
             uploadUrl: '',
-            workTypeList: [
-              { id: 1, name: '动火作业' },
-              { id: 2, name: '受限空间作业' },
-              { id: 3, name: '吊装作业' },
-              { id: 4, name: '动土作业' },
-              { id: 5, name: '断路作业' },
-              { id: 6, name: '高处作业' },
-              { id: 7, name: '临时用电作业' },
-              { id: 8, name: '盲板抽堵作业' }
-            ]
+            certTypeIdList: []
         });
 
         // 打开弹窗
         const openDialog = (type: string, value: any, uid: string) => {
-            state.isShowCtfDialog = true;
+            state.isShowCtfDialog = true
+            getCerttypeList()
             state.fileList = []
             if (type === 'add') {
                 state.disabled = false
                 state.title = '新增证书';
                 state.ctfForm = {
-                  roleId: null,
                   certNo: '',
                   certExpiredAt: '',
-                  workType: null,
+                  certTypeId: null,
                   certUrl: '',
                   uid: uid
                 };
@@ -174,7 +163,6 @@
               if(type === 'edit'){
                 state.disabled = false
                 state.title = '修改证书';
-                console.log(state.ctfForm,'555')
               }else{
                 state.disabled = true
                 state.title = '查看';
@@ -186,6 +174,18 @@
         const isValidKey =(key: string | number | symbol, data:object): key is keyof typeof data => {
           return key in data
         }
+
+        const getCerttypeList = async () => {
+          let res = await certApi().getCerttypeList({pageIndex: 1, pageSize: 99, searchParams: {name:''}});
+          if (res.data.code === '200') {
+            state.certTypeIdList = res.data.data;
+          } else {
+            ElMessage({
+              type: 'warning',
+              message: res.data.msg
+            });
+          }
+        };
 
         // 新增修改
         const onSubmit = async () => {
@@ -322,10 +322,9 @@
       const restForm = ()=>{
         state.ctfForm = {
           userCertId: '',
-          roleId: null,
           certNo: '',
           certExpiredAt: '',
-          workType: null,
+          certTypeId: null,
           certUrl: '',
           uid: ''
         }
diff --git a/src/views/system/user/component/dialogCertificate.vue b/src/views/system/user/component/dialogCertificate.vue
index dab9297..889400d 100644
--- a/src/views/system/user/component/dialogCertificate.vue
+++ b/src/views/system/user/component/dialogCertificate.vue
@@ -12,13 +12,7 @@
     >
       <el-table-column type="index" label="序号" width="80"/>
       <el-table-column property="id" label="证件Id"/>
-      <el-table-column property="roleId" label="相关角色">
-        <template #default="scope">
-          {{ roleList.find(i=>i.roleId == scope.row.roleId)?.roleName }}
-        </template>
-      </el-table-column>
-      <el-table-column property="workTypeDesc" label="作业类型"/>
-      <el-table-column property="roleCode" label="角色编号"/>
+      <el-table-column property="certTypeName" label="证书类型"/>
       <el-table-column property="certNo" label="证件编号"/>
       <el-table-column fixed="right" label="操作" align="center" width="250">
         <template #default="scope">

--
Gitblit v1.9.2