From a8ef7c1a4b2ab6acd91a0520e6258bd753d17f20 Mon Sep 17 00:00:00 2001
From: 马宇豪 <978517621@qq.com>
Date: 星期三, 16 八月 2023 15:58:20 +0800
Subject: [PATCH] 人员证书类型

---
 src/views/system/certificate/component/certificateDialog.vue         |  138 +++++++
 src/api/systemManage/certificate/index.ts                            |   53 ++
 src/views/newSpecialWorkSystem/workTicket/zysq/index.vue             |   67 +++
 src/views/newSpecialWorkSystem/workTicket/zysq/components/broken.vue |   29 
 src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue   |   29 
 src/views/newSpecialWorkSystem/workTicket/zysq/components/height.vue |   25 
 src/views/system/certificate/component/certificateMember.vue         |  214 +++++++++++
 src/views/newSpecialWorkSystem/workTicket/zysq/components/hoist.vue  |   31 
 src/views/newSpecialWorkSystem/workTicket/zysq/components/plate.vue  |   27 
 src/views/newSpecialWorkSystem/workTicket/zysq/components/space.vue  |   29 
 src/api/specialWorkSystem/workApply/index.ts                         |    9 
 src/views/newSpecialWorkSystem/workTicket/zysq/components/power.vue  |   29 
 src/views/system/certificate/component/messages.vue                  |  148 ++++++++
 src/views/system/certificate/index.vue                               |  201 +++++++++++
 src/views/newSpecialWorkSystem/workTicket/zysq/components/ground.vue |   27 
 15 files changed, 929 insertions(+), 127 deletions(-)

diff --git a/src/api/specialWorkSystem/workApply/index.ts b/src/api/specialWorkSystem/workApply/index.ts
index 6e99bea..511d8d8 100644
--- a/src/api/specialWorkSystem/workApply/index.ts
+++ b/src/api/specialWorkSystem/workApply/index.ts
@@ -177,6 +177,15 @@
             });
         },
 
+        // 查询特殊作业人员
+        getSpList: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/account/special/list`,
+                method: 'post',
+                data: data
+            });
+        },
+
         // 受限空间申请
         postSpaceApply: (data: object) => {
             return request({
diff --git a/src/api/systemManage/certificate/index.ts b/src/api/systemManage/certificate/index.ts
new file mode 100644
index 0000000..af65eff
--- /dev/null
+++ b/src/api/systemManage/certificate/index.ts
@@ -0,0 +1,53 @@
+import request from '/@/utils/request';
+
+export function certApi() {
+    return {
+        // v2
+        getCerttypeList: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/certtype/page/list`,
+                method: 'post',
+                data: data
+            });
+        },
+        // v2
+        addCerttype: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/certtype/add`,
+                method: 'post',
+                data: data
+            });
+        },
+        // v2
+        modCerttype: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/certtype/mod`,
+                method: 'post',
+                data: data
+            });
+        },
+        // v2
+        deleteCerttype: (id: number) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/certtype/del?id=${id}`,
+                method: 'get'
+            });
+        },
+
+        getCertUsers: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/account/user/certtype/list`,
+                method: 'post',
+                data: data
+            });
+        },
+
+        getCertUnvalid: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/account/user/cert/unvalid/list`,
+                method: 'post',
+                data: data
+            });
+        }
+    };
+}
diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/broken.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/broken.vue
index d33fb44..a7ac8c6 100644
--- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/broken.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/broken.vue
@@ -56,11 +56,11 @@
         </el-col>
         <el-col :span="12">
           <el-form-item label="监护人" prop="guardianUids">
-            <el-select v-model="form.guardianUids" multiple @change="getSafetyIds" clearable>
+            <el-select v-model="form.guardianUids" filterable multiple @change="getSafetyIds" clearable>
               <el-option
-                  v-for="item in workerList"
+                  v-for="item in spList.jhList"
                   :key="item.uid"
-                  :label="item.username"
+                  :label="item.realName"
                   :value="item.uid"
               />
             </el-select>
@@ -70,7 +70,7 @@
       <el-row>
         <el-col :span="12">
           <el-form-item label="作业负责人" prop="headUids">
-            <el-select v-model="form.headUids" multiple @change="getStartEndIds" clearable>
+            <el-select v-model="form.headUids" filterable multiple @change="getStartEndIds" clearable>
               <el-option
                   v-for="item in workerList"
                   :key="item.uid"
@@ -82,11 +82,11 @@
         </el-col>
         <el-col :span="12">
           <el-form-item label="作业人及证件编号" prop="operatorUids">
-            <el-select v-model="form.operatorUids" multiple clearable>
+            <el-select v-model="form.operatorUids" filterable multiple clearable>
               <el-option
-                  v-for="item in workerList"
+                  v-for="item in spList.opList"
                   :key="item.uid"
-                  :label="item.username"
+                  :label="item.realName"
                   :value="item.uid"
               />
             </el-select>
@@ -95,7 +95,7 @@
       </el-row>
       <el-row>
         <el-col :span="12" class="valueSelect">
-          <el-form-item label="关联其他特殊作业" prop="involveOtherWork">
+          <el-form-item label="关联其他特殊作业">
 <!--            <el-select v-model="form.involveOtherWork" multiple clearable>-->
 <!--              <el-option-->
 <!--                  v-for="item in otherWorkList"-->
@@ -223,7 +223,7 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="安全措施确认人" prop="safetyMeasureUids">
-              <el-select v-model="form.safetyMeasureUids" multiple clearable>
+              <el-select v-model="form.safetyMeasureUids" filterable multiple clearable>
                 <el-option
                     v-for="item in workerList"
                     :key="item.uid"
@@ -270,7 +270,7 @@
             </el-table-column>
             <el-table-column prop="approvalUids" label="审批人" align="center">
               <template #default="scope">
-                <el-select v-model="scope.row.approvalUids" multiple :disabled="isFirstRow(scope.$index)" clearable>
+                <el-select v-model="scope.row.approvalUids" filterable multiple :disabled="isFirstRow(scope.$index)" clearable>
                   <el-option
                       v-for="item in workerList"
                       :key="item.uid"
@@ -285,7 +285,7 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="完工验收" prop="acceptUid">
-              <el-select v-model="form.acceptUid" clearable>
+              <el-select v-model="form.acceptUid" filterable clearable>
                 <el-option
                     v-for="item in workerList"
                     :key="item.uid"
@@ -297,7 +297,7 @@
           </el-col>
           <el-col :span="12">
             <el-form-item label="现场开始结束确认人" prop="startOrEndUids">
-              <el-select v-model="form.startOrEndUids" multiple clearable>
+              <el-select v-model="form.startOrEndUids" filterable multiple clearable>
                 <el-option
                     v-for="item in workerList"
                     :key="item.uid"
@@ -311,7 +311,7 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="签字人" prop="workDetail.signUid">
-              <el-select v-model="form.workDetail.signUid" clearable>
+              <el-select v-model="form.workDetail.signUid" filterable clearable>
                 <el-option
                     v-for="item in workerList"
                     :key="item.uid"
@@ -363,7 +363,7 @@
 	export default defineComponent({
 		name: 'brokenForm',
 		components: {workSelect},
-		props:['departList','departList2','workerList','deviceList','otherWorks'],
+		props:['departList','departList2','workerList','deviceList','otherWorks','spList'],
 		setup(props: any, context: any) {
 			const userInfo = useUserInfo()
 			const { userInfos } = storeToRefs(userInfo);
@@ -436,7 +436,6 @@
         workDepId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
         headUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
         analystUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-        involveOtherWork: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
         guardianUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
         riskIdentification: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
         cameraIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue
index f227b4c..008a6a7 100644
--- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/fire.vue
@@ -56,11 +56,11 @@
         </el-col>
         <el-col :span="12">
           <el-form-item label="作业人及证件编号" prop="operatorUids">
-            <el-select v-model="form.operatorUids" multiple clearable>
+            <el-select v-model="form.operatorUids" filterable multiple clearable>
               <el-option
-                  v-for="item in workerList"
+                  v-for="item in spList.opList"
                   :key="item.uid"
-                  :label="item.username"
+                  :label="item.realName"
                   :value="item.uid"
               />
             </el-select>
@@ -75,7 +75,7 @@
         </el-col>
         <el-col :span="12">
           <el-form-item label="作业负责人" prop="headUids">
-            <el-select v-model="form.headUids" multiple @change="getStartEndIds" clearable>
+            <el-select v-model="form.headUids" multiple filterable @change="getStartEndIds" clearable>
               <el-option
                   v-for="item in workerList"
                   :key="item.uid"
@@ -89,7 +89,7 @@
       <el-row>
         <el-col :span="12">
           <el-form-item label="分析人" prop="analystUids">
-            <el-select v-model="form.analystUids" multiple clearable>
+            <el-select v-model="form.analystUids" filterable multiple clearable>
               <el-option
                   v-for="item in workerList"
                   :key="item.uid"
@@ -100,7 +100,7 @@
           </el-form-item>
         </el-col>
         <el-col :span="12" class="valueSelect">
-          <el-form-item label="关联其他特殊作业" prop="involveOtherWork">
+          <el-form-item label="关联其他特殊作业">
             <el-select v-model="form.involveOtherWork" multiple clearable :teleported="false" @click="openWorkSelect">
               <el-option v-for="item in otherWorks" :key="item.workApplyId" :label="item.workContent" :value="item.workApplyId">
               </el-option>
@@ -111,11 +111,11 @@
       <el-row>
         <el-col :span="12">
           <el-form-item label="监护人" prop="guardianUids">
-            <el-select v-model="form.guardianUids" multiple @change="getSafetyIds" clearable>
+            <el-select v-model="form.guardianUids" filterable multiple @change="getSafetyIds" clearable>
               <el-option
-                  v-for="item in workerList"
+                  v-for="item in spList.jhList"
                   :key="item.uid"
-                  :label="item.username"
+                  :label="item.realName"
                   :value="item.uid"
               />
             </el-select>
@@ -212,7 +212,7 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="安全措施确认人" prop="safetyMeasureUids">
-              <el-select v-model="form.safetyMeasureUids" multiple clearable>
+              <el-select v-model="form.safetyMeasureUids" filterable multiple clearable>
                 <el-option
                     v-for="item in workerList"
                     :key="item.uid"
@@ -259,7 +259,7 @@
             </el-table-column>
             <el-table-column prop="approvalUids" label="审批人" align="center">
               <template #default="scope">
-                <el-select v-model="scope.row.approvalUids" multiple :disabled="isFirstRow(scope.$index)" clearable>
+                <el-select v-model="scope.row.approvalUids" filterable multiple :disabled="isFirstRow(scope.$index)" clearable>
                   <el-option
                       v-for="item in workerList"
                       :key="item.uid"
@@ -274,7 +274,7 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="完工验收" prop="acceptUid">
-              <el-select v-model="form.acceptUid" clearable>
+              <el-select v-model="form.acceptUid" filterable clearable>
                 <el-option
                     v-for="item in workerList"
                     :key="item.uid"
@@ -286,7 +286,7 @@
           </el-col>
           <el-col :span="12">
             <el-form-item label="现场开始结束确认人" prop="startOrEndUids">
-              <el-select v-model="form.startOrEndUids" multiple clearable>
+              <el-select v-model="form.startOrEndUids" filterable multiple clearable>
                 <el-option
                     v-for="item in workerList"
                     :key="item.uid"
@@ -328,7 +328,7 @@
 	export default defineComponent({
 		name: 'fireForm',
 		components: {workSelect},
-		props:['departList','departList2','workerList','deviceList','otherWorks'],
+		props:['departList','departList2','workerList','deviceList','otherWorks','spList'],
 		setup(props: any, context: any) {
 			const userInfo = useUserInfo()
 			const { userInfos } = storeToRefs(userInfo);
@@ -398,7 +398,6 @@
         workDepId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
         headUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
         analystUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-        involveOtherWork: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
         guardianUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
         riskIdentification: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
         cameraIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/ground.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/ground.vue
index 1981325..015562c 100644
--- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/ground.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/ground.vue
@@ -24,9 +24,9 @@
           <el-form-item label="作业人及证件编号" prop="operatorUids">
             <el-select v-model="form.operatorUids" multiple clearable>
               <el-option
-                  v-for="item in workerList"
+                  v-for="item in spList.opList"
                   :key="item.uid"
-                  :label="item.username"
+                  :label="item.realName"
                   :value="item.uid"
               />
             </el-select>
@@ -41,7 +41,7 @@
         </el-col>
         <el-col :span="12">
           <el-form-item label="作业负责人" prop="headUids">
-            <el-select v-model="form.headUids" multiple @change="getStartEndIds" clearable>
+            <el-select v-model="form.headUids" multiple filterable @change="getStartEndIds" clearable>
               <el-option
                   v-for="item in workerList"
                   :key="item.uid"
@@ -64,7 +64,7 @@
             </el-form-item>
           </el-col>
           <el-col :span="12" class="valueSelect">
-            <el-form-item label="关联其他特殊作业" prop="involveOtherWork">
+            <el-form-item label="关联其他特殊作业">
 <!--              <el-select v-model="form.involveOtherWork" multiple clearable>-->
 <!--                <el-option-->
 <!--                    v-for="item in otherWorkList"-->
@@ -83,11 +83,11 @@
       <el-row>
         <el-col :span="12">
           <el-form-item label="监护人" prop="guardianUids">
-            <el-select v-model="form.guardianUids" multiple @change="getSafetyIds" clearable>
+            <el-select v-model="form.guardianUids" filterable multiple @change="getSafetyIds" clearable>
               <el-option
-                  v-for="item in workerList"
+                  v-for="item in spList.jhList"
                   :key="item.uid"
-                  :label="item.username"
+                  :label="item.realName"
                   :value="item.uid"
               />
             </el-select>
@@ -206,7 +206,7 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="安全措施确认人" prop="safetyMeasureUids">
-              <el-select v-model="form.safetyMeasureUids" multiple clearable>
+              <el-select v-model="form.safetyMeasureUids" filterable multiple clearable>
                 <el-option
                     v-for="item in workerList"
                     :key="item.uid"
@@ -253,7 +253,7 @@
             </el-table-column>
             <el-table-column prop="approvalUids" label="审批人" align="center">
               <template #default="scope">
-                <el-select v-model="scope.row.approvalUids" multiple :disabled="isFirstRow(scope.$index)" clearable>
+                <el-select v-model="scope.row.approvalUids" filterable multiple :disabled="isFirstRow(scope.$index)" clearable>
                   <el-option
                       v-for="item in workerList"
                       :key="item.uid"
@@ -268,7 +268,7 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="完工验收" prop="acceptUid">
-              <el-select v-model="form.acceptUid" clearable>
+              <el-select v-model="form.acceptUid" filterable clearable>
                 <el-option
                     v-for="item in workerList"
                     :key="item.uid"
@@ -280,7 +280,7 @@
           </el-col>
           <el-col :span="12">
             <el-form-item label="现场开始结束确认人" prop="startOrEndUids">
-              <el-select v-model="form.startOrEndUids" multiple clearable>
+              <el-select v-model="form.startOrEndUids" filterable multiple clearable>
                 <el-option
                     v-for="item in workerList"
                     :key="item.uid"
@@ -294,7 +294,7 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="签字人" prop="workDetail.signUid">
-              <el-select v-model="form.workDetail.signUid" clearable>
+              <el-select v-model="form.workDetail.signUid" filterable clearable>
                 <el-option
                     v-for="item in workerList"
                     :key="item.uid"
@@ -347,7 +347,7 @@
 	export default defineComponent({
 		name: 'groundForm',
 		components: {workSelect},
-		props:['departList','departList2','workerList','deviceList','otherWorks'],
+		props:['departList','departList2','workerList','deviceList','otherWorks','spList'],
 		setup(props: any, context: any) {
 			const userInfo = useUserInfo()
 			const { userInfos } = storeToRefs(userInfo);
@@ -408,7 +408,6 @@
         operatorUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
         workDepId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
         headUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-        involveOtherWork: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
         guardianUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
         riskIdentification: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
         cameraIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/height.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/height.vue
index 84f054a..f7650ee 100644
--- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/height.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/height.vue
@@ -55,11 +55,11 @@
         </el-col>
         <el-col :span="12">
           <el-form-item label="作业人及证件编号" prop="operatorUids">
-            <el-select v-model="form.operatorUids" multiple clearable>
+            <el-select v-model="form.operatorUids" filterable multiple clearable>
               <el-option
-                  v-for="item in workerList"
+                  v-for="item in spList.opList"
                   :key="item.uid"
-                  :label="item.username"
+                  :label="item.realName"
                   :value="item.uid"
               />
             </el-select>
@@ -74,7 +74,7 @@
         </el-col>
         <el-col :span="12">
           <el-form-item label="作业负责人" prop="headUids">
-            <el-select v-model="form.headUids" multiple @change="getStartEndIds" clearable>
+            <el-select v-model="form.headUids" filterable multiple @change="getStartEndIds" clearable>
               <el-option
                   v-for="item in workerList"
                   :key="item.uid"
@@ -88,18 +88,18 @@
       <el-row>
         <el-col :span="12">
           <el-form-item label="监护人" prop="guardianUids">
-            <el-select v-model="form.guardianUids" multiple @change="getSafetyIds" clearable>
+            <el-select v-model="form.guardianUids" filterable multiple @change="getSafetyIds" clearable>
               <el-option
-                  v-for="item in workerList"
+                  v-for="item in spList.jhList"
                   :key="item.uid"
-                  :label="item.username"
+                  :label="item.realName"
                   :value="item.uid"
               />
             </el-select>
           </el-form-item>
         </el-col>
         <el-col :span="12" class="valueSelect">
-          <el-form-item label="关联其他特殊作业" prop="involveOtherWork">
+          <el-form-item label="关联其他特殊作业">
 <!--            <el-select v-model="form.involveOtherWork" multiple clearable>-->
 <!--              <el-option-->
 <!--                  v-for="item in otherWorkList"-->
@@ -183,7 +183,7 @@
         </el-row>
         <el-row>
           <el-col :span="12">
-            <el-form-item label="安全措施确认人" prop="safetyMeasureUids">
+            <el-form-item label="安全措施确认人" filterable prop="safetyMeasureUids">
               <el-select v-model="form.safetyMeasureUids" multiple clearable>
                 <el-option
                     v-for="item in workerList"
@@ -209,7 +209,7 @@
                 </el-form-item>
               </template>
             </el-table-column>
-            <el-table-column prop="approvalUids" label="审批人" align="center">
+            <el-table-column prop="approvalUids" filterable label="审批人" align="center">
               <template #default="scope">
                 <el-select v-model="scope.row.approvalUids" multiple :disabled="isFirstRow(scope.$index)" clearable>
                   <el-option
@@ -237,7 +237,7 @@
             </el-form-item>
           </el-col>
           <el-col :span="12">
-            <el-form-item label="现场开始结束确认人" prop="startOrEndUids">
+            <el-form-item label="现场开始结束确认人" filterable prop="startOrEndUids">
               <el-select v-model="form.startOrEndUids" multiple clearable>
                 <el-option
                     v-for="item in workerList"
@@ -280,7 +280,7 @@
 	export default defineComponent({
 		name: 'heightForm',
 		components: {workSelect},
-		props:['departList','departList2','workerList','deviceList','otherWorks'],
+		props:['departList','departList2','workerList','deviceList','otherWorks','spList'],
 		setup(props: any, context: any) {
 			const userInfo = useUserInfo()
 			const { userInfos } = storeToRefs(userInfo);
@@ -352,7 +352,6 @@
         operatorUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
         workDepId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
         headUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-        involveOtherWork: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
         guardianUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
         riskIdentification: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
         cameraIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/hoist.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/hoist.vue
index 27bd3ff..fb355d4 100644
--- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/hoist.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/hoist.vue
@@ -65,11 +65,11 @@
         </el-col>
         <el-col :span="12">
           <el-form-item label="吊装作业人及证件编号" prop="operatorUids">
-            <el-select v-model="form.operatorUids" multiple clearable>
+            <el-select v-model="form.operatorUids" filterable multiple clearable>
               <el-option
-                  v-for="item in workerList"
+                  v-for="item in spList.opList"
                   :key="item.uid"
-                  :label="item.username"
+                  :label="item.realName"
                   :value="item.uid"
               />
             </el-select>
@@ -83,8 +83,8 @@
           </el-form-item>
         </el-col>
         <el-col :span="12">
-          <el-form-item label="指挥人员" prop="headUids">
-            <el-select v-model="form.headUids" multiple @change="getStartEndIds" clearable>
+          <el-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"
@@ -98,7 +98,7 @@
       <el-row>
         <el-col :span="12">
           <el-form-item label="司索人" prop="workDetail.solicitorUids">
-            <el-select v-model="form.workDetail.solicitorUids" multiple clearable>
+            <el-select v-model="form.workDetail.solicitorUids" filterable multiple clearable>
               <el-option
                   v-for="item in workerList"
                   :key="item.uid"
@@ -109,7 +109,7 @@
           </el-form-item>
         </el-col>
         <el-col :span="12" class="valueSelect">
-          <el-form-item label="关联其他特殊作业" prop="involveOtherWork">
+          <el-form-item label="关联其他特殊作业">
 <!--            <el-select v-model="form.involveOtherWork" multiple clearable>-->
 <!--              <el-option-->
 <!--                  v-for="item in otherWorkList"-->
@@ -128,11 +128,11 @@
       <el-row>
         <el-col :span="12">
           <el-form-item label="监护人" prop="guardianUids">
-            <el-select v-model="form.guardianUids" multiple @change="getSafetyIds" clearable>
+            <el-select v-model="form.guardianUids" filterable multiple @change="getSafetyIds" clearable>
               <el-option
-                  v-for="item in workerList"
+                  v-for="item in spList.jhList"
                   :key="item.uid"
-                  :label="item.username"
+                  :label="item.realName"
                   :value="item.uid"
               />
             </el-select>
@@ -229,7 +229,7 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="安全措施确认人" prop="safetyMeasureUids">
-              <el-select v-model="form.safetyMeasureUids" multiple clearable>
+              <el-select v-model="form.safetyMeasureUids" filterable multiple clearable>
                 <el-option
                     v-for="item in workerList"
                     :key="item.uid"
@@ -276,7 +276,7 @@
             </el-table-column>
             <el-table-column prop="approvalUids" label="审批人" align="center">
               <template #default="scope">
-                <el-select v-model="scope.row.approvalUids" multiple :disabled="isFirstRow(scope.$index)" clearable>
+                <el-select v-model="scope.row.approvalUids" filterable multiple :disabled="isFirstRow(scope.$index)" clearable>
                   <el-option
                       v-for="item in workerList"
                       :key="item.uid"
@@ -291,7 +291,7 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="完工验收" prop="acceptUid">
-              <el-select v-model="form.acceptUid" clearable>
+              <el-select v-model="form.acceptUid" filterable clearable>
                 <el-option
                     v-for="item in workerList"
                     :key="item.uid"
@@ -303,7 +303,7 @@
           </el-col>
           <el-col :span="12">
             <el-form-item label="现场开始结束确认人" prop="startOrEndUids">
-              <el-select v-model="form.startOrEndUids" multiple clearable>
+              <el-select v-model="form.startOrEndUids" filterable multiple clearable>
                 <el-option
                     v-for="item in workerList"
                     :key="item.uid"
@@ -345,7 +345,7 @@
 	export default defineComponent({
 		name: 'hoistForm',
 		components: {workSelect},
-		props:['departList','departList2','workerList','deviceList','otherWorks'],
+		props:['departList','departList2','workerList','deviceList','otherWorks','spList'],
 		setup(props: any, context: any) {
 			const userInfo = useUserInfo()
 			const { userInfos } = storeToRefs(userInfo);
@@ -417,7 +417,6 @@
         workDepId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
         headUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
         analystUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-        involveOtherWork: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
         guardianUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
         riskIdentification: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
         cameraIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/plate.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/plate.vue
index f746c0e..0a47ec3 100644
--- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/plate.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/plate.vue
@@ -144,18 +144,18 @@
       <el-row>
         <el-col :span="12">
           <el-form-item label="作业人及证件编号" prop="operatorUids">
-            <el-select v-model="form.operatorUids" multiple clearable>
+            <el-select v-model="form.operatorUids" filterable multiple clearable>
               <el-option
-                  v-for="item in workerList"
+                  v-for="item in spList.opList"
                   :key="item.uid"
-                  :label="item.username"
+                  :label="item.realName"
                   :value="item.uid"
               />
             </el-select>
           </el-form-item>
         </el-col>
         <el-col :span="12" class="valueSelect">
-          <el-form-item label="关联其他特殊作业" prop="involveOtherWork">
+          <el-form-item label="关联其他特殊作业">
 <!--            <el-select v-model="form.involveOtherWork" multiple clearable>-->
 <!--              <el-option-->
 <!--                  v-for="item in otherWorkList"-->
@@ -179,7 +179,7 @@
         </el-col>
         <el-col :span="12">
           <el-form-item label="作业负责人" prop="headUids">
-            <el-select v-model="form.headUids" multiple @change="getStartEndIds" clearable>
+            <el-select v-model="form.headUids" multiple filterable @change="getStartEndIds" clearable>
               <el-option
                   v-for="item in workerList"
                   :key="item.uid"
@@ -193,11 +193,11 @@
       <el-row>
         <el-col :span="12">
           <el-form-item label="监护人" prop="guardianUids">
-            <el-select v-model="form.guardianUids" multiple @change="getSafetyIds" clearable>
+            <el-select v-model="form.guardianUids" multiple filterable @change="getSafetyIds" clearable>
               <el-option
-                  v-for="item in workerList"
+                  v-for="item in spList.jhList"
                   :key="item.uid"
-                  :label="item.username"
+                  :label="item.realName"
                   :value="item.uid"
               />
             </el-select>
@@ -292,7 +292,7 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="安全措施确认人" prop="safetyMeasureUids">
-              <el-select v-model="form.safetyMeasureUids" multiple clearable>
+              <el-select v-model="form.safetyMeasureUids" filterable multiple clearable>
                 <el-option
                     v-for="item in workerList"
                     :key="item.uid"
@@ -319,7 +319,7 @@
             </el-table-column>
             <el-table-column prop="approvalUids" label="审批人" align="center">
               <template #default="scope">
-                <el-select v-model="scope.row.approvalUids" multiple :disabled="isFirstRow(scope.$index)" clearable>
+                <el-select v-model="scope.row.approvalUids" filterable multiple :disabled="isFirstRow(scope.$index)" clearable>
                   <el-option
                       v-for="item in workerList"
                       :key="item.uid"
@@ -334,7 +334,7 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="完工验收" prop="acceptUid">
-              <el-select v-model="form.acceptUid" clearable>
+              <el-select v-model="form.acceptUid" filterable clearable>
                 <el-option
                     v-for="item in workerList"
                     :key="item.uid"
@@ -346,7 +346,7 @@
           </el-col>
           <el-col :span="12">
             <el-form-item label="现场开始结束确认人" prop="startOrEndUids">
-              <el-select v-model="form.startOrEndUids" multiple clearable>
+              <el-select v-model="form.startOrEndUids" filterable multiple clearable>
                 <el-option
                     v-for="item in workerList"
                     :key="item.uid"
@@ -398,7 +398,7 @@
 	export default defineComponent({
 		name: 'fireForm',
 		components: {workSelect},
-		props:['departList','departList2','workerList','deviceList','otherWorks'],
+		props:['departList','departList2','workerList','deviceList','otherWorks','spList'],
 		setup(props: any, context: any) {
 			const userInfo = useUserInfo()
 			const { userInfos } = storeToRefs(userInfo);
@@ -477,7 +477,6 @@
         operatorUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
         workDepId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
         headUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-        involveOtherWork: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
         guardianUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
         riskIdentification: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
         cameraIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/power.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/power.vue
index 5bfd61f..2b76056 100644
--- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/power.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/power.vue
@@ -79,11 +79,11 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="作业人及证件编号" prop="operatorUids">
-              <el-select v-model="form.operatorUids" multiple clearable>
+              <el-select v-model="form.operatorUids" filterable multiple clearable>
                 <el-option
-                    v-for="item in workerList"
+                    v-for="item in spList.opList"
                     :key="item.uid"
-                    :label="item.username"
+                    :label="item.realName"
                     :value="item.uid"
                 />
               </el-select>
@@ -98,7 +98,7 @@
         </el-col>
         <el-col :span="12">
           <el-form-item label="作业负责人" prop="headUids">
-            <el-select v-model="form.headUids" multiple @change="getStartEndIds" clearable>
+            <el-select v-model="form.headUids" multiple filterable @change="getStartEndIds" clearable>
               <el-option
                   v-for="item in workerList"
                   :key="item.uid"
@@ -112,7 +112,7 @@
       <el-row>
         <el-col :span="12">
           <el-form-item label="分析人" prop="analystUids">
-            <el-select v-model="form.analystUids" multiple clearable>
+            <el-select v-model="form.analystUids" filterable multiple clearable>
               <el-option
                   v-for="item in workerList"
                   :key="item.uid"
@@ -123,7 +123,7 @@
           </el-form-item>
         </el-col>
         <el-col :span="12" class="valueSelect">
-          <el-form-item label="关联其他特殊作业" prop="involveOtherWork">
+          <el-form-item label="关联其他特殊作业">
 <!--            <el-select v-model="form.involveOtherWork" multiple clearable>-->
 <!--              <el-option-->
 <!--                  v-for="item in otherWorkList"-->
@@ -142,11 +142,11 @@
       <el-row>
         <el-col :span="12">
           <el-form-item label="监护人" prop="guardianUids">
-            <el-select v-model="form.guardianUids" multiple @change="getSafetyIds" clearable>
+            <el-select v-model="form.guardianUids" multiple filterable @change="getSafetyIds" clearable>
               <el-option
-                  v-for="item in workerList"
+                  v-for="item in spList.jhList"
                   :key="item.uid"
-                  :label="item.username"
+                  :label="item.realName"
                   :value="item.uid"
               />
             </el-select>
@@ -243,7 +243,7 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="安全措施确认人" prop="safetyMeasureUids">
-              <el-select v-model="form.safetyMeasureUids" multiple clearable>
+              <el-select v-model="form.safetyMeasureUids" filterable multiple clearable>
                 <el-option
                     v-for="item in workerList"
                     :key="item.uid"
@@ -290,7 +290,7 @@
             </el-table-column>
             <el-table-column prop="approvalUids" label="审批人" align="center">
               <template #default="scope">
-                <el-select v-model="scope.row.approvalUids" multiple :disabled="isFirstRow(scope.$index)" clearable>
+                <el-select v-model="scope.row.approvalUids" filterable multiple :disabled="isFirstRow(scope.$index)" clearable>
                   <el-option
                       v-for="item in workerList"
                       :key="item.uid"
@@ -305,7 +305,7 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="完工验收" prop="acceptUid">
-              <el-select v-model="form.acceptUid" clearable>
+              <el-select v-model="form.acceptUid" filterable clearable>
                 <el-option
                     v-for="item in workerList"
                     :key="item.uid"
@@ -317,7 +317,7 @@
           </el-col>
           <el-col :span="12">
             <el-form-item label="现场开始结束确认人" prop="startOrEndUids">
-              <el-select v-model="form.startOrEndUids" multiple clearable>
+              <el-select v-model="form.startOrEndUids" filterable multiple clearable>
                 <el-option
                     v-for="item in workerList"
                     :key="item.uid"
@@ -358,7 +358,7 @@
 	export default defineComponent({
 		name: 'powerForm',
 		components: {workSelect},
-		props:['departList','departList2','workerList','deviceList','otherWorks'],
+		props:['departList','departList2','workerList','deviceList','otherWorks','spList'],
 		setup(props: any, context: any) {
 			const userInfo = useUserInfo()
 			const { userInfos } = storeToRefs(userInfo);
@@ -417,7 +417,6 @@
         workDepId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
         headUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
         analystUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-        involveOtherWork: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
         guardianUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
         riskIdentification: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
         cameraIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/components/space.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/components/space.vue
index 5ad736a..4fcac53 100644
--- a/src/views/newSpecialWorkSystem/workTicket/zysq/components/space.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/zysq/components/space.vue
@@ -44,11 +44,11 @@
         </el-col>
         <el-col :span="12">
           <el-form-item label="作业人" prop="operatorUids">
-            <el-select v-model="form.operatorUids" multiple clearable>
+            <el-select v-model="form.operatorUids" filterable multiple clearable>
               <el-option
-                  v-for="item in workerList"
+                  v-for="item in spList.opList"
                   :key="item.uid"
-                  :label="item.username"
+                  :label="item.realName"
                   :value="item.uid"
               />
             </el-select>
@@ -75,7 +75,7 @@
         </el-col>
         <el-col :span="12">
           <el-form-item label="作业负责人" prop="headUids">
-            <el-select v-model="form.headUids" multiple @change="getStartEndIds" clearable>
+            <el-select v-model="form.headUids" multiple filterable @change="getStartEndIds" clearable>
               <el-option
                   v-for="item in workerList"
                   :key="item.uid"
@@ -89,7 +89,7 @@
       <el-row>
         <el-col :span="12">
           <el-form-item label="分析人" prop="analystUids">
-            <el-select v-model="form.analystUids" multiple clearable>
+            <el-select v-model="form.analystUids" filterable multiple clearable>
               <el-option
                   v-for="item in workerList"
                   :key="item.uid"
@@ -100,7 +100,7 @@
           </el-form-item>
         </el-col>
         <el-col :span="12" class="valueSelect">
-          <el-form-item label="关联其他特殊作业" prop="involveOtherWork">
+          <el-form-item label="关联其他特殊作业">
             <el-select v-model="form.involveOtherWork" multiple clearable :teleported="false" @click="openWorkSelect">
               <el-option v-for="item in otherWorks" :key="item.workApplyId" :label="item.workContent" :value="item.workApplyId">
               </el-option>
@@ -111,11 +111,11 @@
       <el-row>
         <el-col :span="12">
           <el-form-item label="监护人" prop="guardianUids">
-            <el-select v-model="form.guardianUids" multiple @change="getSafetyIds" clearable>
+            <el-select v-model="form.guardianUids" multiple filterable @change="getSafetyIds" clearable>
               <el-option
-                  v-for="item in workerList"
+                  v-for="item in spList.jhList"
                   :key="item.uid"
-                  :label="item.username"
+                  :label="item.realName"
                   :value="item.uid"
               />
             </el-select>
@@ -202,7 +202,7 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="安全措施确认人" prop="safetyMeasureUids">
-              <el-select v-model="form.safetyMeasureUids" multiple clearable>
+              <el-select v-model="form.safetyMeasureUids" filterable multiple clearable>
                 <el-option
                     v-for="item in workerList"
                     :key="item.uid"
@@ -229,7 +229,7 @@
             </el-table-column>
             <el-table-column prop="approvalUids" label="审批人" align="center">
               <template #default="scope">
-                <el-select v-model="scope.row.approvalUids" multiple :disabled="isFirstRow(scope.$index)" clearable>
+                <el-select v-model="scope.row.approvalUids" filterable multiple :disabled="isFirstRow(scope.$index)" clearable>
                   <el-option
                       v-for="item in workerList"
                       :key="item.uid"
@@ -244,7 +244,7 @@
         <el-row>
           <el-col :span="12">
             <el-form-item label="完工验收" prop="acceptUid">
-              <el-select v-model="form.acceptUid" clearable>
+              <el-select v-model="form.acceptUid" filterable clearable>
                 <el-option
                     v-for="item in workerList"
                     :key="item.uid"
@@ -256,7 +256,7 @@
           </el-col>
           <el-col :span="12">
             <el-form-item label="现场开始结束确认人" prop="startOrEndUids">
-              <el-select v-model="form.startOrEndUids" multiple clearable>
+              <el-select v-model="form.startOrEndUids" filterable multiple clearable>
                 <el-option
                     v-for="item in workerList"
                     :key="item.uid"
@@ -297,7 +297,7 @@
 	export default defineComponent({
 		name: 'spaceForm',
 		components: {workSelect},
-		props:['departList','departList2','workerList','deviceList', 'otherWorks'],
+		props:['departList','departList2','workerList','deviceList', 'otherWorks','spList'],
 		setup(props: any, context: any) {
 			const userInfo = useUserInfo()
 			const { userInfos } = storeToRefs(userInfo);
@@ -354,7 +354,6 @@
         workDepId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
         headUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
         analystUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-        involveOtherWork: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
         guardianUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
         riskIdentification: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
         cameraIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
diff --git a/src/views/newSpecialWorkSystem/workTicket/zysq/index.vue b/src/views/newSpecialWorkSystem/workTicket/zysq/index.vue
index 3659ad6..95c6649 100644
--- a/src/views/newSpecialWorkSystem/workTicket/zysq/index.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/zysq/index.vue
@@ -2,28 +2,28 @@
 	<div class="home-container">
 		<el-tabs type="border-card" v-model="activeName" @tab-click="handleClick">
 			<el-tab-pane label="动火作业" name="fire">
-				<fire-form ref="fire" :workerList = allWorkers :deviceList = allDevices :departList=departmentList :departList2=departmentList2 :otherWorks="otherWorks"></fire-form>
+				<fire-form ref="fire" :workerList = allWorkers :deviceList = allDevices :departList=departmentList :departList2=departmentList2 :otherWorks="otherWorks" :spList="spList"></fire-form>
 			</el-tab-pane>
 			<el-tab-pane label="受限空间作业" name="space">
-				<space-form ref="space" :workerList = allWorkers :departList = departmentList :departList2=departmentList2 :deviceList = allDevices :otherWorks="otherWorks"></space-form>
+				<space-form ref="space" :workerList = allWorkers :departList = departmentList :departList2=departmentList2 :deviceList = allDevices :otherWorks="otherWorks" :spList="spList"></space-form>
 			</el-tab-pane>
 			<el-tab-pane label="吊装作业" name="hoist">
-				<hoist-form ref="hoist" :workerList = allWorkers :departList = departmentList :departList2=departmentList2 :deviceList = allDevices :otherWorks="otherWorks"></hoist-form>
+				<hoist-form ref="hoist" :workerList = allWorkers :departList = departmentList :departList2=departmentList2 :deviceList = allDevices :otherWorks="otherWorks" :spList="spList"></hoist-form>
 			</el-tab-pane>
 			<el-tab-pane label="动土作业" name="ground">
-				<ground-form ref="ground" :workerList = allWorkers :departList = departmentList :departList2=departmentList2 :deviceList = allDevices :otherWorks="otherWorks"></ground-form>
+				<ground-form ref="ground" :workerList = allWorkers :departList = departmentList :departList2=departmentList2 :deviceList = allDevices :otherWorks="otherWorks" :spList="spList"></ground-form>
 			</el-tab-pane>
 			<el-tab-pane label="断路作业" name="broken">
-				<broken-form ref="broken" :workerList = allWorkers :departList = departmentList :departList2=departmentList2 :deviceList = allDevices :otherWorks="otherWorks"></broken-form>
+				<broken-form ref="broken" :workerList = allWorkers :departList = departmentList :departList2=departmentList2 :deviceList = allDevices :otherWorks="otherWorks" :spList="spList"></broken-form>
 			</el-tab-pane>
 			<el-tab-pane label="高处作业" name="height">
-				<height-form ref="height" :workerList = allWorkers :departList = departmentList :departList2=departmentList2 :deviceList = allDevices :otherWorks="otherWorks"></height-form>
+				<height-form ref="height" :workerList = allWorkers :departList = departmentList :departList2=departmentList2 :deviceList = allDevices :otherWorks="otherWorks" :spList="spList"></height-form>
 			</el-tab-pane>
 			<el-tab-pane label="临时用电作业" name="power">
-				<power-form ref="power" :workerList = allWorkers :departList = departmentList :departList2=departmentList2 :deviceList = allDevices :otherWorks="otherWorks"></power-form>
+				<power-form ref="power" :workerList = allWorkers :departList = departmentList :departList2=departmentList2 :deviceList = allDevices :otherWorks="otherWorks" :spList="spList"></power-form>
 			</el-tab-pane>
 			<el-tab-pane label="盲板抽堵作业" name="plate">
-				<plate-form ref="plate" :workerList = allWorkers :departList = departmentList :departList2=departmentList2 :deviceList = allDevices :otherWorks="otherWorks"></plate-form>
+				<plate-form ref="plate" :workerList = allWorkers :departList = departmentList :departList2=departmentList2 :deviceList = allDevices :otherWorks="otherWorks" :spList="spList"></plate-form>
 			</el-tab-pane>
 		</el-tabs>
 <!--    <material-dialog ref="material"></material-dialog>-->
@@ -49,6 +49,11 @@
     departmentList2: Array<any>
     otherWorks: Array<any>
     allDevices: Array<any>
+    spList:{
+      opList: Array<any>
+      jhList: Array<any>
+      sfList: Array<any>
+    }
 	}
 	export default defineComponent({
 		name: 'apply',
@@ -71,7 +76,12 @@
 				departmentList: [],
         departmentList2:[],
         otherWorks: [],
-        allDevices: []
+        allDevices: [],
+        spList:{
+          opList: [],
+          jhList: [],
+          sfList: []
+        }
 			});
       const fire = ref()
       const space = ref()
@@ -98,7 +108,8 @@
         getAll();
         getAllDepartment();
         getAllDevice();
-        getOtherWork()
+        getOtherWork();
+        spWorker()
       });
 
 			// 获取用户列表
@@ -114,6 +125,42 @@
 				}
 			};
 
+      const spWorker = async ()=>{
+        for(let id of ['17','18','19']){
+          const res = await workApplyApi().getSpList({roleId: id})
+          if(id == '17'){
+            if (res.data.code === '200') {
+              state.spList.opList = res.data.data
+            } else {
+              ElMessage({
+                type: 'warning',
+                message: res.data.msg
+              });
+            }
+          }
+          if(id == '18'){
+            if (res.data.code === '200') {
+              state.spList.jhList = res.data.data
+            } else {
+              ElMessage({
+                type: 'warning',
+                message: res.data.msg
+              });
+            }
+          }
+          if(id == '19'){
+            if (res.data.code === '200') {
+              state.spList.sfList = res.data.data
+            } else {
+              ElMessage({
+                type: 'warning',
+                message: res.data.msg
+              });
+            }
+          }
+        }
+      }
+
 			// 获取部门列表
 			const getAllDepartment = async () => {
 				let res = await teamManageApi().getAllDepartment();
diff --git a/src/views/system/certificate/component/certificateDialog.vue b/src/views/system/certificate/component/certificateDialog.vue
new file mode 100644
index 0000000..8a7cfcd
--- /dev/null
+++ b/src/views/system/certificate/component/certificateDialog.vue
@@ -0,0 +1,138 @@
+<template>
+    <div class="system-add-role-container">
+        <el-dialog :title="title" v-model="isShowDialog" width="769px">
+            <el-form :model="roleForm" size="default" label-width="90px">
+                <el-row :gutter="35">
+                    <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                        <el-form-item label="证书名称">
+                            <el-input v-model="roleForm.name" placeholder="请输入证书名称" clearable style="width: 100%"></el-input>
+                        </el-form-item>
+                    </el-col>
+                </el-row>
+            </el-form>
+            <template #footer>
+                <span class="dialog-footer">
+                    <el-button @click="isShowDialog = !isShowDialog" size="default">取 消</el-button>
+                    <el-button type="primary" @click="onSubmit" v-throttle size="default">{{ buttonName }}</el-button>
+                </span>
+            </template>
+        </el-dialog>
+    </div>
+</template>
+
+<script lang="ts">
+import { ElMessage } from 'element-plus';
+import { reactive, toRefs, defineComponent } from 'vue';
+import {certApi} from "/@/api/systemManage/certificate";
+
+// 定义接口来定义对象的类型
+interface MenuDataTree {
+    id: number;
+    label: string;
+    children?: MenuDataTree[];
+}
+interface RoleState {
+    title: string;
+    buttonName: string;
+    isShowDialog: boolean;
+    roleForm: {
+      id: null | number
+      name: string;
+    };
+    menuData: Array<MenuDataTree>;
+    menuProps: {
+        children: string;
+        label: string;
+    };
+}
+
+export default defineComponent({
+    name: 'certificateDialog',
+    setup(prop, context) {
+        const state = reactive<RoleState>({
+            isShowDialog: false,
+            title: '',
+            buttonName: '',
+            roleForm: {
+                id: null,
+                name: '', // 证书名称
+            },
+            menuData: [],
+            menuProps: {
+                children: 'children',
+                label: 'label'
+            }
+        });
+        // 打开弹窗
+        const openDialog = (type: string, value: any) => {
+            state.isShowDialog = true;
+            if (type === '新增') {
+                state.title = '新增证书';
+                state.buttonName = '新增';
+                state.roleForm = {
+                  id: null,
+                  name: ''
+                };
+            } else {
+                state.title = '修改证书';
+                state.buttonName = '修改';
+                state.roleForm.id = JSON.parse(JSON.stringify(value)).id
+                state.roleForm.name = JSON.parse(JSON.stringify(value)).name
+            }
+        };
+        // 新增
+        const onSubmit = async () => {
+            if (state.title === '新增证书') {
+                let res = await certApi().addCerttype({name: state.roleForm.name});
+                if (res.data.code === '200') {
+                    ElMessage({
+                        type: 'success',
+                        message: '证书新增成功',
+                        duration: 2000
+                    });
+                    state.isShowDialog = false;
+                    context.emit('refreshCertList');
+                } else {
+                    ElMessage({
+                        type: 'warning',
+                        message: res.data.msg
+                    });
+                }
+            } else {
+                let res = await certApi().modCerttype(state.roleForm);
+                if (res.data.code === '200') {
+                    ElMessage({
+                        type: 'success',
+                        message: '证书修改成功',
+                        duration: 2000
+                    });
+                    state.isShowDialog = false;
+                    context.emit('refreshCertList');
+                } else {
+                    ElMessage({
+                        type: 'warning',
+                        message: res.data.msg
+                    });
+                }
+            }
+        };
+        // 获取菜单结构数据
+        return {
+            onSubmit,
+            openDialog,
+            ...toRefs(state)
+        };
+    }
+});
+</script>
+
+<style scoped lang="scss">
+.system-add-role-container {
+    .menu-data-tree {
+        width: 100%;
+        border: 1px solid var(--el-border-color);
+        border-radius: var(--el-input-border-radius, var(--el-border-radius-base));
+        padding: 5px;
+    }
+}
+</style>
diff --git a/src/views/system/certificate/component/certificateMember.vue b/src/views/system/certificate/component/certificateMember.vue
new file mode 100644
index 0000000..33e53c4
--- /dev/null
+++ b/src/views/system/certificate/component/certificateMember.vue
@@ -0,0 +1,214 @@
+<template>
+  <el-dialog v-model="dialogCertificate" :title="title">
+    <div class="system-user-search mb15">
+      <el-input size="default" v-model.trim="listQuery.searchParams.userName" placeholder="请输入用户名" style="max-width: 180px"> </el-input>
+      <el-button size="default" type="primary" class="ml10" @click="handleSearch">
+        <el-icon>
+          <ele-Search />
+        </el-icon>
+        查询
+      </el-button>
+    </div>
+    <el-table
+        :data="tableData"
+        highlight-current-row
+        style="width: 100%;margin-top: 20px"
+        border
+        :header-cell-style="{background: '#fafafa'}"
+    >
+      <el-table-column property="userName" label="姓名"/>
+      <el-table-column property="depName" label="所属部门"/>
+      <el-table-column property="certTypeName" label="证书类型"/>
+      <el-table-column property="certExpiredAt" label="到期时间"/>
+    </el-table>
+    <br />
+    <el-pagination @size-change="onHandleSizeChange" @current-change="onHandleCurrentChange" class="page-position" :pager-count="5" :page-sizes="[10]" v-model:current-page="listQuery.pageIndex" background v-model:page-size="listQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination>
+    <br />
+    <br />
+  </el-dialog>
+</template>
+
+<script lang="ts">
+	import {toRefs, reactive, defineComponent, ref, defineAsyncComponent, onMounted} from 'vue';
+	import { storeToRefs } from 'pinia';
+	import { initBackEndControlRoutes } from '/@/router/backEnd';
+	import {useUserInfo} from "/@/stores/userInfo";
+	import { Session } from '/@/utils/storage';
+	import { Search, Delete, Edit, View, Plus } from '@element-plus/icons-vue'
+  import {ElMessage, ElMessageBox, ElTable} from 'element-plus'
+  import {certApi} from "/@/api/systemManage/certificate";
+
+
+	interface stateType {
+    title: string
+    dialogCertificate: boolean
+    tableData: Array<any>
+    listQuery: {
+      pageIndex: number
+      pageSize: number
+      searchParams: {
+        userName: string
+        certTypeId: number | null
+      }
+    }
+    total: number | null
+	}
+	export default defineComponent({
+		name: 'certificateMember',
+		components: {},
+		props:[],
+		setup() {
+			const userInfo = useUserInfo()
+			const { userInfos } = storeToRefs(userInfo);
+			const state  = reactive<stateType>({
+        title: '',
+        dialogCertificate: false,
+        tableData: [],
+        total: null,
+        listQuery: {
+          pageIndex: 1,
+          pageSize: 10,
+          searchParams: {
+            userName:'',
+            certTypeId: null
+          }
+        }
+			});
+			// 页面载入时执行方法
+			onMounted(() => {
+
+			});
+      const ctfRef = ref()
+      const openDialog = (type:string,value: any) => {
+        state.tableData = []
+        state.total = null
+        state.listQuery.searchParams.certTypeId = value.id
+        state.dialogCertificate = true
+        if(type == '人员'){
+          state.title = '证书人员'
+          getUserData()
+        }else{
+          state.title = '证书即将到期'
+          getUnvalidData()
+        }
+      }
+
+      const getUserData = async () => {
+        let res = await certApi().getCertUsers(state.listQuery);
+        if (res.data.code === '200') {
+          state.tableData = res.data.data
+          state.total = res.data.total
+        } else {
+          ElMessage({
+            type: 'warning',
+            message: res.data.msg
+          });
+        }
+      }
+
+      const getUnvalidData = async () => {
+        let res = await certApi().getCertUnvalid(state.listQuery);
+        if (res.data.code === '200') {
+          state.tableData = res.data.data
+          state.total = res.data.total
+        } else {
+          ElMessage({
+            type: 'warning',
+            message: res.data.msg
+          });
+        }
+      }
+
+
+      const onHandleSizeChange = (val: number) => {
+        state.listQuery.pageSize = val;
+        if(state.title == '证书人员'){
+          getUserData();
+        }else{
+          getUnvalidData()
+        }
+      }
+
+      const onHandleCurrentChange = (val: number) => {
+        state.listQuery.pageIndex = val;
+        if(state.title == '证书人员'){
+          getUserData();
+        }else{
+          getUnvalidData()
+        }
+      }
+
+      const handleSearch = () => {
+        state.listQuery.pageIndex = 1
+        if(state.title == '证书人员'){
+          getUserData();
+        }else{
+          getUnvalidData()
+        }
+      }
+
+			const renderMenu = async (value: string) => {
+				Session.set('projectId',value)
+				userInfos.value.projectId = value
+				await initBackEndControlRoutes();
+			};
+			return {
+				renderMenu,
+        openDialog,
+        ctfRef,
+				Search,
+        Delete,
+        Edit,
+        View,
+        Plus,
+        onHandleSizeChange,
+        onHandleCurrentChange,
+        handleSearch,
+				...toRefs(state),
+			};
+		},
+	});
+</script>
+
+<style scoped lang="scss">
+	.home-container {
+		height: 100%;
+		overflow: hidden;
+		position: relative;
+		.homeCard{
+			width: 100%;
+			padding: 0 20px;
+			box-sizing: border-box;
+			background: #fff;
+			border-radius: 4px;
+		}
+		.applyBtn{
+			width: 100%;
+			background: #fff;
+			padding-top: 15px;
+			z-index: 5;
+			box-shadow: 0 -3px 8px rgba(150,150,150,.1);
+			display: flex;
+			align-items: center;
+			justify-content: center;
+		}
+		.el-row{
+			margin-bottom: 20px;
+		}
+		.el-row:last-child {
+			margin-bottom: 0;
+		}
+		.el-input{
+			width: 100% !important;
+		}
+		.el-date-editor::v-deep{
+			width: 100%;
+		}
+		.el-select{
+			width: 100%;
+		}
+		.el-cascader{
+			width: 100% !important;
+		}
+	}
+</style>
diff --git a/src/views/system/certificate/component/messages.vue b/src/views/system/certificate/component/messages.vue
new file mode 100644
index 0000000..3db6d1a
--- /dev/null
+++ b/src/views/system/certificate/component/messages.vue
@@ -0,0 +1,148 @@
+<template>
+  <el-dialog v-model="dialogMes" :title="title">
+    <el-table
+        :data="tableData"
+        highlight-current-row
+        style="width: 100%;margin-top: 20px"
+        border
+        :header-cell-style="{background: '#fafafa'}"
+    >
+      <el-table-column property="id" label="发送时间"/>
+      <el-table-column property="roleId" label="预警信息内容"/>
+      <el-table-column property="workTypeDesc" label="预警级别"/>
+      <el-table-column property="roleId" label="接收人">
+        <template #default="scope">
+          {{ roleList.find(i=>i.roleId == scope.row.roleId)?.roleName }}
+        </template>
+      </el-table-column>
+    </el-table>
+  </el-dialog>
+</template>
+
+<script lang="ts">
+	import {toRefs, reactive, defineComponent, ref, defineAsyncComponent, onMounted} from 'vue';
+	import { storeToRefs } from 'pinia';
+	import { initBackEndControlRoutes } from '/@/router/backEnd';
+	import {useUserInfo} from "/@/stores/userInfo";
+	import { Session } from '/@/utils/storage';
+	import { Search, Delete, Edit, View, Plus } from '@element-plus/icons-vue'
+  import {ElMessage, ElMessageBox, ElTable} from 'element-plus'
+	import {userApi} from "/@/api/systemManage/user";
+
+
+	interface stateType {
+    title: string
+    dialogMes: boolean
+    tableData: Array<any>
+    roleList: Array<any>
+    uid: number | null
+	}
+	export default defineComponent({
+		name: 'historyMessages',
+		components: {},
+		props:[],
+		setup() {
+			const userInfo = useUserInfo()
+			const { userInfos } = storeToRefs(userInfo);
+			const state  = reactive<stateType>({
+        title: '',
+        dialogMes: false,
+        tableData: [],
+        roleList: [],
+        uid: null
+			});
+			// 页面载入时执行方法
+			onMounted(() => {
+
+			});
+      const ctfRef = ref()
+      const openDialog = (value: any) => {
+        state.dialogMes = true
+      }
+
+      // const getRoleData = async () => {
+      //   let res = await useRoleApi().getRoleList();
+      //   if (res.data.code === '200') {
+      //     state.roleList = res.data.data;
+      //   } else {
+      //     ElMessage({
+      //       type: 'warning',
+      //       message: res.data.msg
+      //     });
+      //   }
+      // };
+      //
+      // const getCtf = async()=>{
+      //   let res = await userApi().getCtf({uid: state.uid})
+      //   if(res.data.code == 200){
+      //     state.tableData = res.data.data
+      //   }else{
+      //     ElMessage({
+      //       type: 'warning',
+      //       message: res.data.msg
+      //     })
+      //   }
+      // }
+
+			const renderMenu = async (value: string) => {
+				Session.set('projectId',value)
+				userInfos.value.projectId = value
+				await initBackEndControlRoutes();
+			};
+			return {
+				renderMenu,
+        openDialog,
+        ctfRef,
+				Search,
+        Delete,
+        Edit,
+        View,
+        Plus,
+				...toRefs(state),
+			};
+		},
+	});
+</script>
+
+<style scoped lang="scss">
+	.home-container {
+		height: 100%;
+		overflow: hidden;
+		position: relative;
+		.homeCard{
+			width: 100%;
+			padding: 0 20px;
+			box-sizing: border-box;
+			background: #fff;
+			border-radius: 4px;
+		}
+		.applyBtn{
+			width: 100%;
+			background: #fff;
+			padding-top: 15px;
+			z-index: 5;
+			box-shadow: 0 -3px 8px rgba(150,150,150,.1);
+			display: flex;
+			align-items: center;
+			justify-content: center;
+		}
+		.el-row{
+			margin-bottom: 20px;
+		}
+		.el-row:last-child {
+			margin-bottom: 0;
+		}
+		.el-input{
+			width: 100% !important;
+		}
+		.el-date-editor::v-deep{
+			width: 100%;
+		}
+		.el-select{
+			width: 100%;
+		}
+		.el-cascader{
+			width: 100% !important;
+		}
+	}
+</style>
diff --git a/src/views/system/certificate/index.vue b/src/views/system/certificate/index.vue
new file mode 100644
index 0000000..1c22508
--- /dev/null
+++ b/src/views/system/certificate/index.vue
@@ -0,0 +1,201 @@
+<template>
+    <div class="system-role-container">
+        <el-card shadow="hover">
+            <div class="system-user-search mb15">
+                <el-input size="default" v-model.trim="listQuery.searchParams.name" placeholder="请输入证书类型" style="max-width: 180px"> </el-input>
+                <el-button size="default" type="primary" class="ml10" @click="handleSearch">
+                    <el-icon>
+                        <ele-Search />
+                    </el-icon>
+                    查询
+                </el-button>
+                <el-button size="default" type="success" class="ml10" @click="onOpenDialogRef('新增', '')">
+                    <el-icon>
+                        <ele-FolderAdd />
+                    </el-icon>
+                    新增
+                </el-button>
+            </div>
+            <el-table :data="tableData.data" style="width: 100%">
+                <el-table-column prop="name" label="证书类型" show-overflow-tooltip></el-table-column>
+                <el-table-column prop="personCount" label="关联证书人员" show-overflow-tooltip>
+                  <template #default="scope">
+                    <el-button v-if="scope.row.personCount && scope.row.personCount>0" link type="primary" @click="openMembers('人员',scope.row)">{{scope.row.personCount}}</el-button>
+                    <span v-else>0</span>
+                  </template>
+                </el-table-column>
+                <el-table-column prop="unValidCount" label="三个月证书到期" show-overflow-tooltip>
+                  <template #default="scope">
+                    <el-button v-if="scope.row.unValidCount && scope.row.unValidCount>0" link type="danger" @click="openMembers('到期',scope.row)">{{scope.row.unValidCount}}</el-button>
+                    <span v-else>0</span>
+                  </template>
+                </el-table-column>
+<!--                <el-table-column prop="warnCount" label="历史预警信息" show-overflow-tooltip>-->
+<!--                  <template #default="scope">-->
+<!--                    <el-button v-if="scope.row.warnCount && scope.row.warnCount>0" link type="danger" @click="openMes(scope.row)">{{scope.row.warnCount}}</el-button>-->
+<!--                    <span v-else>0</span>-->
+<!--                  </template>-->
+<!--                </el-table-column>-->
+                <el-table-column label="操作" width="150">
+                    <template #default="scope">
+                        <el-button size="small" text type="primary" @click="onOpenDialogRef('修改', scope.row)">修改</el-button>
+                        <el-button size="small" style="color: red" text type="primary" @click="onRowDel(scope.row)">删除</el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+            <br />
+            <el-pagination @size-change="onHandleSizeChange" @current-change="onHandleCurrentChange" class="page-position" :pager-count="5" :page-sizes="[10]" v-model:current-page="listQuery.pageIndex" background v-model:page-size="listQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="tableData.total"> </el-pagination>
+            <br />
+            <br />
+        </el-card>
+        <certificateDialog ref="certificateRef" @refreshCertList="initRoleTableData" />
+        <certificate-member ref="certificateMemRef"></certificate-member>
+        <messages ref="mesRef"></messages>
+    </div>
+</template>
+
+<script lang="ts">
+import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue';
+import { ElMessageBox, ElMessage } from 'element-plus';
+import certificateDialog from '/@/views/system/certificate/component/certificateDialog.vue'
+import certificateMember from '/@/views/system/certificate/component/certificateMember.vue'
+import messages from '/@/views/system/certificate/component/messages.vue'
+import { certApi } from '/@/api/systemManage/certificate';
+import { useMenuApi } from '/@/api/systemManage/menu';
+import { Session } from '/@/utils/storage';
+import { initBackEndControlRoutes } from '/@/router/backEnd';
+import {useUserInfo} from "/@/stores/userInfo";
+import {storeToRefs} from "pinia";
+
+// 定义接口来定义对象的类型
+interface TableData {
+    roleName: string;
+    roleSign: string;
+    describe: string;
+    sort: number;
+    status: boolean;
+    createTime: string;
+}
+interface TableDataState {
+    tableData: {
+        data: Array<TableData>;
+        total: number;
+        loading: boolean;
+    };
+  listQuery: {
+    pageIndex: number
+    pageSize: number
+    searchParams: {
+      name: string
+    }
+  };
+}
+
+export default defineComponent({
+    name: 'certificate',
+    components: {messages, certificateMember, certificateDialog },
+    setup() {
+        const userInfo = useUserInfo();
+        const { userInfos } = storeToRefs(userInfo);
+        const certificateRef = ref();
+        const certificateMemRef = ref();
+        const mesRef = ref();
+        const state = reactive<TableDataState>({
+            tableData: {
+                data: [],
+                total: 0,
+                loading: false,
+            },
+          listQuery: {
+            pageIndex: 1,
+            pageSize: 10,
+            searchParams: {
+              name:''
+            }
+          }
+        });
+        // 初始化表格数据
+        const initRoleTableData = async () => {
+            let res = await certApi().getCerttypeList(state.listQuery);
+            if (res.data.code === '200') {
+                state.tableData.data = res.data.data;
+                state.tableData.total = res.data.total
+            } else {
+                ElMessage({
+                    type: 'warning',
+                    message: res.data.msg
+                });
+            }
+        };
+
+        const onOpenDialogRef = (type: string, value: any) => {
+            certificateRef.value.openDialog(type, value);
+        };
+
+        const openMembers = (type: string, value: any) => {
+          certificateMemRef.value.openDialog(type,value)
+        }
+
+      const openMes = (value: any) => {
+        mesRef.value.openDialog(value)
+      }
+        const onRowDel = (row: any) => {
+            ElMessageBox.confirm(`此操作将永久删除角色名称:“${row.name}”,是否继续?`, '提示', {
+                confirmButtonText: '确认',
+                cancelButtonText: '取消',
+                type: 'warning'
+            })
+                .then(async () => {
+                    let res = await certApi().deleteCerttype(row.id);
+                    if (res.data.code === '200') {
+                        ElMessage({
+                            type: 'success',
+                            duration: 2000,
+                            message: '删除成功'
+                        });
+                        await initRoleTableData();
+                    } else {
+                        ElMessage({
+                            type: 'warning',
+                            message: res.data.msg
+                        });
+                    }
+                })
+                .catch(() => {});
+        };
+        const handleSearch = () => {
+            state.listQuery.pageIndex = 1
+            initRoleTableData();
+        };
+
+      // 分页改变
+      const onHandleSizeChange = (val: number) => {
+        state.listQuery.pageSize = val;
+        initRoleTableData();
+      };
+      // 分页改变
+      const onHandleCurrentChange = (val: number) => {
+        state.listQuery.pageIndex = val;
+        initRoleTableData();
+      };
+        // 页面加载时
+        onMounted(() => {
+            initRoleTableData();
+        });
+        return {
+            onRowDel,
+            handleSearch,
+            certificateRef,
+          certificateMemRef,
+          mesRef,
+            onOpenDialogRef,
+          openMembers,
+            openMes,
+            initRoleTableData,
+            onHandleSizeChange,
+            onHandleCurrentChange,
+            ...toRefs(state)
+        };
+    }
+});
+</script>

--
Gitblit v1.9.2