From c694cffc8541d921e5256d33e14e3237454de950 Mon Sep 17 00:00:00 2001
From: 马宇豪 <978517621@qq.com>
Date: 星期五, 26 一月 2024 09:43:31 +0800
Subject: [PATCH] 新提交

---
 src/views/dataUpload/educateTrain/educateResource/index.vue                               |  217 +
 src/views/dataUpload/saftyBaseInfo/equipInfo/components/addReport.vue                     |  305 ++
 src/views/dataUpload/educateTrain/trainInfo/components/addReport.vue                      |  196 +
 src/utils/toolsValidate.ts                                                                |    2 
 src/views/dataUpload/saftyBaseInfo/certInfo/component/certificateMember.vue               |  214 +
 src/api/dataUpload/contractorManage/index.ts                                              |   69 
 src/assets/excelFiles/missionUpload.xlsx                                                  |    0 
 src/views/dataUpload/saftyBaseInfo/parkingInfo/index.vue                                  |  223 +
 src/views/intellectInspect/inspectBasic/discriminate/index.vue                            |   17 
 src/views/dataUpload/contractorManage/contractorUser/index.vue                            |  230 +
 src/api/dataUpload/educateTrain/index.ts                                                  |   48 
 src/views/loginPage/loginPage.vue                                                         |    2 
 src/api/dataUpload/saftyBaseInfo/judgeReport.ts                                           |  153 +
 src/views/dataUpload/educateTrain/educateResource/components/addReport.vue                |  123 
 src/views/riskWarningSys/warningBigScreen/index.vue                                       |    6 
 src/views/dataUpload/contractorManage/contractorInfo/components/addReport.vue             |  185 +
 src/layout/navBars/breadcrumb/user.vue                                                    |   94 
 src/utils/request.ts                                                                      |    2 
 src/views/dataUpload/saftyBaseInfo/productionInfo/components/addReport.vue                |  286 ++
 src/views/intellectInspect/inspectTaskManage/inspectTask/components/inspectTaskDialog.vue |   20 
 src/views/dataUpload/contractorManage/contractorUser/components/addReport.vue             |  223 +
 src/assets/newMenu/card-14.png                                                            |    0 
 src/views/dataUpload/saftyBaseInfo/certInfo/index.vue                                     |  201 +
 src/views/dataUpload/saftyBaseInfo/certInfo/component/messages.vue                        |  148 +
 src/views/dataUpload/peopleLocate/index.vue                                               |  251 +
 src/assets/excelFiles/pointUpload.xlsx                                                    |    0 
 public/excelFiles/pointUpload.xlsx                                                        |    0 
 src/api/systemManage/user/index.ts                                                        |   14 
 src/views/dataUpload/contractorManage/contractorEnter/components/addReport.vue            |  175 +
 src/views/dataUpload/peopleLocate/components/addReport.vue                                |  291 ++
 src/assets/excelFiles/RFIDUpload.xlsx                                                     |    0 
 src/views/dataUpload/saftyBaseInfo/judgeReport/components/addReport.vue                   |  199 +
 src/views/system/personShiftManage/scheduleManage/schedule/index.vue                      |    1 
 src/views/intellectInspect/intelligentLine/index.vue                                      |    7 
 src/views/dataUpload/contractorManage/contractorEnter/index.vue                           |  219 +
 src/views/dataUpload/saftyBaseInfo/cardInfo/components/addReport.vue                      |  172 +
 src/views/dataUpload/saftyBaseInfo/equipInfo/index.vue                                    |  258 ++
 src/views/newHome/index.vue                                                               |   31 
 src/views/newSpecialWorkSystem/workTicket/wdsp/index.vue                                  |   16 
 src/views/intellectInspect/inspectBasic/facility/components/facilityAreaDialog.vue        |    2 
 src/views/dataUpload/peopleLocate/components/mapLocation.vue                              |  138 +
 src/views/intellectInspect/inspectBasic/discriminate/components/RFIDDialog.vue            |   12 
 src/assets/excelFiles/regionUpload.xlsx                                                   |    0 
 src/views/dataUpload/educateTrain/trainInfo/index.vue                                     |  223 +
 src/views/dataUpload/saftyBaseInfo/cardInfo/index.vue                                     |  219 +
 src/views/specialWorkSystem/specialIndex/index.vue                                        |  119 
 src/views/system/menu/index.vue                                                           |    1 
 src/views/system/role/component/roleDialog.vue                                            |   16 
 public/excelFiles/missionUpload.xlsx                                                      |    0 
 src/views/loginPage/component/accountLogin.vue                                            |    1 
 src/views/dataUpload/saftyBaseInfo/crowInfo/components/addReport.vue                      |  205 +
 src/views/dataUpload/saftyBaseInfo/certInfo/component/certificateDialog.vue               |  138 +
 src/views/intellectInspect/inspectTaskManage/inspectTask/index.vue                        |   19 
 src/views/intellectInspect/inspectBasic/inspectPoint/index.vue                            |   16 
 src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue                                  |   17 
 src/views/dataUpload/contractorManage/contractorInfo/index.vue                            |  226 +
 src/views/intellectInspect/inspectTaskManage/inspectTask/components/upload.vue            |  204 +
 src/views/newSpecialWorkSystem/workTicket/sqjl/index.vue                                  |   60 
 src/assets/newMenu/icon14.png                                                             |    0 
 src/views/dataUpload/saftyBaseInfo/productionInfo/index.vue                               |  270 ++
 src/views/system/user/component/userDialog.vue                                            |   14 
 src/views/dataUpload/saftyBaseInfo/crowInfo/index.vue                                     |  223 +
 public/excelFiles/RFIDUpload.xlsx                                                         |    0 
 /dev/null                                                                                 |  193 -
 src/views/system/user/index.vue                                                           |  119 
 src/views/intellectInspect/inspectBasic/facility/index.vue                                |   16 
 package.json                                                                              |    4 
 src/api/intelligentLine/index.ts                                                          |   46 
 src/views/dataUpload/saftyBaseInfo/parkingInfo/components/addReport.vue                   |  202 +
 src/views/dataUpload/saftyBaseInfo/judgeReport/index.vue                                  |  251 +
 public/excelFiles/regionUpload.xlsx                                                       |    0 
 71 files changed, 7,202 insertions(+), 350 deletions(-)

diff --git a/package.json b/package.json
index c9b6baa..2b4e09b 100644
--- a/package.json
+++ b/package.json
@@ -34,10 +34,12 @@
 		"sortablejs": "^1.15.0",
 		"splitpanes": "^3.1.1",
 		"vue": "^3.2.36",
+		"vue-baidu-map-3x": "^1.0.35",
 		"vue-clipboard3": "^2.0.0",
 		"vue-grid-layout": "^3.0.0-beta1",
 		"vue-i18n": "^9.1.10",
 		"vue-router": "^4.0.15",
+		"vuedraggable": "^4.1.0",
 		"wangeditor": "^4.7.15",
 		"xlsx": "^0.18.5"
 	},
@@ -48,7 +50,7 @@
 		"@types/sortablejs": "^1.13.0",
 		"@typescript-eslint/eslint-plugin": "^5.27.0",
 		"@typescript-eslint/parser": "^5.27.0",
-		"@vitejs/plugin-vue": "^2.3.3",
+		"@vitejs/plugin-vue": "^2.3.4",
 		"@vue/compiler-sfc": "^3.2.36",
 		"dotenv": "^16.0.1",
 		"eslint": "^8.17.0",
diff --git a/public/excelFiles/RFIDUpload.xlsx b/public/excelFiles/RFIDUpload.xlsx
new file mode 100644
index 0000000..ac7d026
--- /dev/null
+++ b/public/excelFiles/RFIDUpload.xlsx
Binary files differ
diff --git a/public/excelFiles/missionUpload.xlsx b/public/excelFiles/missionUpload.xlsx
new file mode 100644
index 0000000..f1298af
--- /dev/null
+++ b/public/excelFiles/missionUpload.xlsx
Binary files differ
diff --git a/public/excelFiles/pointUpload.xlsx b/public/excelFiles/pointUpload.xlsx
new file mode 100644
index 0000000..2d26ce7
--- /dev/null
+++ b/public/excelFiles/pointUpload.xlsx
Binary files differ
diff --git a/public/excelFiles/regionUpload.xlsx b/public/excelFiles/regionUpload.xlsx
new file mode 100644
index 0000000..e1f0397
--- /dev/null
+++ b/public/excelFiles/regionUpload.xlsx
Binary files differ
diff --git a/src/api/dataUpload/contractorManage/index.ts b/src/api/dataUpload/contractorManage/index.ts
new file mode 100644
index 0000000..62ce95e
--- /dev/null
+++ b/src/api/dataUpload/contractorManage/index.ts
@@ -0,0 +1,69 @@
+import request from '/@/utils/request';
+
+export function contractorApi() {
+    return {
+        getContractorList: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/report/assemble/contractor/list`,
+                method: 'post',
+                data: data
+            });
+        },
+        addContractor: (data: Array<any>) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/report/assemble/contractor`,
+                method: 'post',
+                data: data
+            });
+        },
+        delContractor: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/report/assemble/contractor/del`,
+                method: 'post',
+                data: data
+            });
+        },
+        getContractorUserList: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/report/assemble/contractor/user/list`,
+                method: 'post',
+                data: data
+            });
+        },
+        addContractorUser: (data: Array<any>) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/report/assemble/contractor/user`,
+                method: 'post',
+                data: data
+            });
+        },
+        delContractorUser: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/report/assemble/contractor/user/del`,
+                method: 'post',
+                data: data
+            });
+        },
+        getContractorEnterList: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/report/assemble/contractor/user/enter/list`,
+                method: 'post',
+                data: data
+            });
+        },
+        addContractorEnter: (data: Array<any>) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/report/assemble/contractor/user/enter`,
+                method: 'post',
+                data: data
+            });
+        },
+        delContractorEnter: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/report/assemble/contractor/user/enter/del`,
+                method: 'post',
+                data: data
+            });
+        }
+    };
+}
diff --git a/src/api/dataUpload/educateTrain/index.ts b/src/api/dataUpload/educateTrain/index.ts
new file mode 100644
index 0000000..02cae8c
--- /dev/null
+++ b/src/api/dataUpload/educateTrain/index.ts
@@ -0,0 +1,48 @@
+import request from '/@/utils/request';
+
+export function educateTrainApi() {
+    return {
+        getEducateList: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/report/assemble/train/resource/list`,
+                method: 'post',
+                data: data
+            });
+        },
+        addEducate: (data: Array<any>) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/report/assemble/train/resource`,
+                method: 'post',
+                data: data
+            });
+        },
+        delEducate: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/report/assemble/train/resource/del`,
+                method: 'post',
+                data: data
+            });
+        },
+        getTrainList: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/report/assemble/train/info/list`,
+                method: 'post',
+                data: data
+            });
+        },
+        addTrain: (data: Array<any>) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/report/assemble/train/info`,
+                method: 'post',
+                data: data
+            });
+        },
+        delTrain: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/report/assemble/train/info/del`,
+                method: 'post',
+                data: data
+            });
+        }
+    };
+}
diff --git a/src/api/dataUpload/saftyBaseInfo/judgeReport.ts b/src/api/dataUpload/saftyBaseInfo/judgeReport.ts
new file mode 100644
index 0000000..adfbc48
--- /dev/null
+++ b/src/api/dataUpload/saftyBaseInfo/judgeReport.ts
@@ -0,0 +1,153 @@
+import request from '/@/utils/request';
+
+export function judgeReportApi() {
+    return {
+        getCardList: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/report/assemble/certificate/list`,
+                method: 'post',
+                data: data
+            });
+        },
+        addCard: (data: Array<any>) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/report/assemble/certificate`,
+                method: 'post',
+                data: data
+            });
+        },
+        delCard: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/report/assemble/certificate/del`,
+                method: 'post',
+                data: data
+            });
+        },
+        getJudgeList: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/report/assemble/assessment/list`,
+                method: 'post',
+                data: data
+            });
+        },
+        addJudge: (data: Array<any>) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/report/assemble/assessment`,
+                method: 'post',
+                data: data
+            });
+        },
+        delJudge: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/report/assemble/assessment/del`,
+                method: 'post',
+                data: data
+            });
+        },
+        getProductList: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/report/assemble/craft/manage/list`,
+                method: 'post',
+                data: data
+            });
+        },
+        addProduct: (data: Array<any>) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/report/assemble/craft/manage`,
+                method: 'post',
+                data: data
+            });
+        },
+        delProduct: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/report/assemble/craft/manage/del`,
+                method: 'post',
+                data: data
+            });
+        },
+        getParkingList: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/report/assemble/start/stop/manage/list`,
+                method: 'post',
+                data: data
+            });
+        },
+        addParking: (data: Array<any>) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/report/assemble/start/stop/manage`,
+                method: 'post',
+                data: data
+            });
+        },
+        delParking: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/report/assemble/start/stop/manage/del`,
+                method: 'post',
+                data: data
+            });
+        },
+        getCrowList: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/report/assemble/person/list`,
+                method: 'post',
+                data: data
+            });
+        },
+        addCrow: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/report/assemble/person`,
+                method: 'post',
+                data: data
+            });
+        },
+        delCrow: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/report/assemble/person/del`,
+                method: 'post',
+                data: data
+            });
+        },
+        getEquipList: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/report/assemble/device/list`,
+                method: 'post',
+                data: data
+            });
+        },
+        addEquip: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/report/assemble/device`,
+                method: 'post',
+                data: data
+            });
+        },
+        delEquip: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/report/assemble/device/del`,
+                method: 'post',
+                data: data
+            });
+        },
+        getPositionList: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/report/assemble/person/position/list`,
+                method: 'post',
+                data: data
+            });
+        },
+        addPosition: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/report/assemble/person/position`,
+                method: 'post',
+                data: data
+            });
+        },
+        delPosition: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/report/assemble/person/position/del`,
+                method: 'post',
+                data: data
+            });
+        }
+    };
+}
diff --git a/src/api/intelligentLine/index.ts b/src/api/intelligentLine/index.ts
index d79e528..d88aeb2 100644
--- a/src/api/intelligentLine/index.ts
+++ b/src/api/intelligentLine/index.ts
@@ -17,6 +17,50 @@
                 url: import.meta.env.VITE_API_URL_SOCKET + `/ws/namesrv/get/one?srv=safeplatform-websocket`,
                 method: 'get'
             });
-        }
+        },
+
+        uploadMission: (data: object) => {
+            return request({
+                headers: {
+                    "Content-Type": "multipart/form-data",
+                },
+                url: import.meta.env.VITE_API_URL + `/SafeCheckTaskUnit/import`,
+                method: 'post',
+                data: data
+            });
+        },
+
+        uploadRfid: (data: object) => {
+            return request({
+                headers: {
+                    "Content-Type": "multipart/form-data",
+                },
+                url: import.meta.env.VITE_API_URL + `/SafeCheckRfid/import`,
+                method: 'post',
+                data: data
+            });
+        },
+
+        uploadRegion: (data: object) => {
+            return request({
+                headers: {
+                    "Content-Type": "multipart/form-data",
+                },
+                url: import.meta.env.VITE_API_URL + `/safeCheckRegion/import`,
+                method: 'post',
+                data: data
+            });
+        },
+
+        uploadPoint: (data: object) => {
+            return request({
+                headers: {
+                    "Content-Type": "multipart/form-data",
+                },
+                url: import.meta.env.VITE_API_URL + `/safeCheckPoint/import`,
+                method: 'post',
+                data: data
+            });
+        },
     };
 }
diff --git a/src/api/systemManage/user/index.ts b/src/api/systemManage/user/index.ts
index bc6d4fe..ff9950d 100644
--- a/src/api/systemManage/user/index.ts
+++ b/src/api/systemManage/user/index.ts
@@ -91,5 +91,19 @@
                 data: data
             });
         },
+        pwdMod: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/auth/pwd-change`,
+                method: 'post',
+                data: data
+            });
+        },
+        pwdModSelf: (data: object) => {
+            return request({
+                url: import.meta.env.VITE_API_URL + `/auth/pwd-change/self`,
+                method: 'post',
+                data: data
+            });
+        },
     };
 }
diff --git a/src/assets/excelFiles/RFIDUpload.xlsx b/src/assets/excelFiles/RFIDUpload.xlsx
new file mode 100644
index 0000000..ac7d026
--- /dev/null
+++ b/src/assets/excelFiles/RFIDUpload.xlsx
Binary files differ
diff --git a/src/assets/excelFiles/missionUpload.xlsx b/src/assets/excelFiles/missionUpload.xlsx
new file mode 100644
index 0000000..f1298af
--- /dev/null
+++ b/src/assets/excelFiles/missionUpload.xlsx
Binary files differ
diff --git a/src/assets/excelFiles/pointUpload.xlsx b/src/assets/excelFiles/pointUpload.xlsx
new file mode 100644
index 0000000..2d26ce7
--- /dev/null
+++ b/src/assets/excelFiles/pointUpload.xlsx
Binary files differ
diff --git a/src/assets/excelFiles/regionUpload.xlsx b/src/assets/excelFiles/regionUpload.xlsx
new file mode 100644
index 0000000..e1f0397
--- /dev/null
+++ b/src/assets/excelFiles/regionUpload.xlsx
Binary files differ
diff --git a/src/assets/newMenu/card-14.png b/src/assets/newMenu/card-14.png
new file mode 100644
index 0000000..efd7b7a
--- /dev/null
+++ b/src/assets/newMenu/card-14.png
Binary files differ
diff --git a/src/assets/newMenu/icon14.png b/src/assets/newMenu/icon14.png
new file mode 100644
index 0000000..2b1a9b5
--- /dev/null
+++ b/src/assets/newMenu/icon14.png
Binary files differ
diff --git a/src/layout/navBars/breadcrumb/user.vue b/src/layout/navBars/breadcrumb/user.vue
index 6d8e1e8..70ef2c0 100644
--- a/src/layout/navBars/breadcrumb/user.vue
+++ b/src/layout/navBars/breadcrumb/user.vue
@@ -66,6 +66,7 @@
                 <template #dropdown>
                     <el-dropdown-menu>
                         <el-dropdown-item command="/newMenu">{{ $t('message.user.dropdown1') }}</el-dropdown-item>
+                        <el-dropdown-item @click="showPwdDialog = true">修改密码</el-dropdown-item>
                         <!--                    <el-dropdown-item command="wareHouse">{{ $t('message.user.dropdown6') }}</el-dropdown-item>-->
                         <!--                    <el-dropdown-item command="/personal">{{ $t('message.user.dropdown2') }}</el-dropdown-item>-->
                         <!--					<el-dropdown-item command="/404">{{ $t('message.user.dropdown3') }}</el-dropdown-item>-->
@@ -74,6 +75,26 @@
                     </el-dropdown-menu>
                 </template>
             </el-dropdown>
+          <el-dialog title="修改密码" v-model="showPwdDialog" width="500px">
+            <el-form :model="pwdForm" size="default" ref="pwdRef" :rules="pwdFormRules" label-width="110px">
+              <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+                <el-form-item label="新密码" prop="newPassword">
+                  <el-input v-model.trim="pwdForm.newPassword" placeholder="请输入" type="password" show-password>
+                  </el-input>
+                </el-form-item>
+                <el-form-item label="确认新密码" prop="rePassword">
+                  <el-input v-model.trim="pwdForm.rePassword" placeholder="请输入" type="password" show-password>
+                  </el-input>
+                </el-form-item>
+              </el-col>
+            </el-form>
+            <template #footer>
+                <span class="dialog-footer">
+                    <el-button @click="showPwdDialog = !showPwdDialog" size="default">取 消</el-button>
+                    <el-button type="primary" v-throttle @click="onPwdSubmit" size="default">确 定</el-button>
+                </span>
+            </template>
+          </el-dialog>
             <Search ref="searchRef" />
         </div>
     </div>
@@ -102,6 +123,8 @@
 import { dynamicRoutes } from '/@/router/route';
 import Cookies from 'js-cookie';
 import {useRoutesList} from "/@/stores/routesList";
+import {verifyPwd} from "/@/utils/toolsValidate";
+import {userApi} from "/@/api/systemManage/user";
 
 export default defineComponent({
     name: 'layoutBreadcrumbUser',
@@ -116,11 +139,42 @@
         const { userInfos } = storeToRefs(stores);
         const { themeConfig } = storeToRefs(storesThemeConfig);
         const searchRef = ref();
+      const pwdRef = ref();
+      const validatePwd = (rule: any, value: any, callback: any)=>{
+        if(value === ''){
+          callback(new Error('请输入密码'))
+        }else{
+          if(!verifyPwd(value)){
+            callback(new Error('密码须包含字母、数字、特殊字符,长度在6-16之间'))
+          }else{
+            callback()
+          }
+        }
+      }
+      const equalToPassword = (rule: any, value: any, callback: any) => {
+        if(value == ''){
+          callback(new Error("请再次确认密码"))
+        }else if (state.pwdForm.newPassword !== value) {
+          callback(new Error("两次输入的密码不一致"))
+        } else {
+          callback();
+        }
+      };
         const state = reactive({
             isScreenfull: false,
             disabledI18n: 'zh-cn',
             disabledSize: 'large',
-            systemName: ''
+            systemName: '',
+          showPwdDialog: false,
+          pwdForm: {
+            uid: Cookies.get('uid'),
+            newPassword: '',
+            rePassword: ''
+          },
+          pwdFormRules: {
+            newPassword: [{ required: true, validator: validatePwd, trigger: 'blur' }],
+            rePassword: [{ required: true, validator: equalToPassword, trigger: "blur" }]
+          }
         });
         // 设置分割样式
         const layoutUserFlexNum = computed(() => {
@@ -131,6 +185,42 @@
             else num = '';
             return num;
         });
+
+      const onPwdSubmit = async () => {
+        pwdRef.value.validate(async (valid:Boolean) => {
+          if(valid){
+            const {rePassword,...data} = state.pwdForm
+            let res = await userApi().pwdModSelf(data);
+            if (res.data.code === '200') {
+              state.showPwdDialog = false
+              ElMessage({
+                type: 'success',
+                message: '密码修改成功,请重新登录',
+                duration: 2000
+              })
+              setTimeout(()=>{
+                useLoginApi()
+                    .signOut()
+                    .then(() => {
+                      Session.clear()
+                      window.location.href = '/'
+                    })
+              },2000)
+            } else {
+              ElMessage({
+                type: 'warning',
+                message: res.data.msg
+              });
+            }
+          }else{
+            ElMessage({
+              type:'warning',
+              message:'请完善信息'
+            })
+          }
+        })
+      }
+
         // 全屏点击时
         const onScreenfullClick = () => {
             if (!screenfull.isEnabled) {
@@ -281,6 +371,8 @@
         });
         return {
             userInfos,
+          pwdRef,
+          onPwdSubmit,
             backToMenu,
             onLayoutSetingClick,
             onHandleCommandClick,
diff --git a/src/utils/request.ts b/src/utils/request.ts
index 5fd3013..9647e83 100644
--- a/src/utils/request.ts
+++ b/src/utils/request.ts
@@ -9,7 +9,7 @@
 // 配置新建一个 axios 实例
 const service = axios.create({
     // baseURL: import.meta.env.VITE_API_URL as any,
-    timeout: 50000,
+    timeout: 500000,
     headers: { 'Content-Type': 'application/json' }
 });
 
diff --git a/src/utils/toolsValidate.ts b/src/utils/toolsValidate.ts
index 485fd04..8bc79fd 100644
--- a/src/utils/toolsValidate.ts
+++ b/src/utils/toolsValidate.ts
@@ -210,7 +210,7 @@
  */
 export function verifyPhone(val: string) {
     // false: 手机号码不正确
-    if (!/^((12[0-9])|(13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0|1,5-9]))\d{8}$/.test(val)) return false;
+    if (!/^\d{11}$/.test(val)) return false;
     // true: 手机号码正确
     else return true;
 }
diff --git a/src/views/dataUpload/contractorManage/contractorEnter/components/addReport.vue b/src/views/dataUpload/contractorManage/contractorEnter/components/addReport.vue
new file mode 100644
index 0000000..3836d4f
--- /dev/null
+++ b/src/views/dataUpload/contractorManage/contractorEnter/components/addReport.vue
@@ -0,0 +1,175 @@
+<template>
+  <div class="system-add-user-container">
+    <el-dialog :title="title" v-model="isShowDialog" width="50%">
+      <el-form :model="form" size="default" ref="formRef" :rules="rules" label-width="120px">
+        <el-row :gutter="35">
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="人员" prop="userId">
+              <el-select v-model="form.userId" filterable placeholder="请选择人员" clearable>
+                <el-option v-for="(item,index) in userList" :key="index" :label="item.userName" :value="item.uuid"/>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="title == '新增上报'? false : true">
+            <el-form-item label="删除状态" prop="deleted">
+              <el-radio-group v-model="form.deleted">
+                <el-radio label="0">未删除</el-radio>
+                <el-radio label="1">已删除</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <template #footer>
+        <span class="dialog-footer">
+            <el-button @click="isShowDialog = !isShowDialog" size="default">取 消</el-button>
+            <el-button type="primary" v-throttle @click="onSubmit" size="default">确 定</el-button>
+        </span>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script lang="ts">
+import { reactive, toRefs, onMounted, defineComponent, ref } from 'vue';
+import { ElMessageBox, ElMessage } from 'element-plus';
+import axios from "axios";
+import {workApplyApi} from "/@/api/specialWorkSystem/workApply";
+import {contractorApi} from "/@/api/dataUpload/contractorManage";
+
+// 定义接口来定义对象的类型
+interface DataState {
+  title: string
+  isShowDialog: boolean
+  form: {
+    uuid: string
+    companyCode: string
+    userId: string
+    userName: string
+    contractorId: string
+    contractorName: string
+    deleted: string
+  }
+  rules:{}
+  contractorList: []
+  userList: []
+}
+
+export default defineComponent({
+  name: 'reportDialog',
+  setup(props, context) {
+    const formRef = ref()
+    const state = reactive<DataState>({
+      title: '',
+      isShowDialog: false,
+      form: {
+        uuid: '',
+        companyCode: '652310082',
+        contractorId: '',
+        contractorName: '',
+        userId: '',
+        userName: '',
+        deleted: '0'
+      },
+      rules:{
+        userId: [{ required: true, message: '请选择人员', trigger: 'blur' }]
+      },
+      contractorList: [],
+      userList: []
+    })
+
+    // 页面加载时
+    onMounted(() => {
+
+    })
+    // 打开弹窗
+    const open = (type: string, data: object) => {
+      state.isShowDialog = true
+      getDataList()
+      getUserList()
+      if (type === 'add') {
+        state.title = '新增上报';
+        state.form = {
+          uuid: '',
+          companyCode: '652310082',
+          contractorId: '',
+          contractorName: '',
+          userId: '',
+          userName: '',
+          deleted: '0'
+        }
+      }else{
+        state.title = '重新上报';
+        state.form = {
+          uuid: data.uuid,
+          companyCode: '652310082',
+          contractorId: '',
+          contractorName: '',
+          userId: '',
+          userName: '',
+          deleted: '0'
+        }
+      }
+    };
+
+    // 新增修改
+    const onSubmit = async () => {
+      formRef.value.validate(async (valid:Boolean) => {
+        if(valid){
+          state.form.contractorId = state.userList.find(i=>i.uuid == state.form.userId)?.contractorId
+          state.form.contractorName = state.contractorList.find(i=>i.uuid == state.form.contractorId)?.contractorName
+          const res = await contractorApi().addContractorEnter([state.form])
+          if(res.data.code == 200){
+            ElMessage({
+              type:'success',
+              message:'数据上报成功'
+            })
+            state.isShowDialog = false
+          }else{
+            ElMessage({
+              type:'warning',
+              message:res.data.msg
+            })
+          }
+          context.emit('refresh');
+        }else{
+          ElMessage({
+            type:'warning',
+            message:'请完善基本信息'
+          })
+        }
+      })
+    }
+
+    const getDataList = async ()=>{
+      const res = await contractorApi().getContractorList({searchParams: {}, pageIndex: 1, pageSize: 999})
+      if(res.data.code == 200){
+        state.contractorList = res.data.data
+      }else{
+        ElMessage({
+          type: 'warning',
+          message: res.data.msg
+        })
+      }
+    }
+    const getUserList = async ()=>{
+      const res = await contractorApi().getContractorUserList({searchParams: {}, pageIndex: 1, pageSize: 999})
+      if(res.data.code == 200){
+        state.userList = res.data.data
+      }else{
+        ElMessage({
+          type: 'warning',
+          message: res.data.msg
+        })
+      }
+    }
+
+    return {
+      formRef,
+      open,
+      onSubmit,
+      ...toRefs(state)
+    };
+  }
+});
+</script>
diff --git a/src/views/dataUpload/contractorManage/contractorEnter/index.vue b/src/views/dataUpload/contractorManage/contractorEnter/index.vue
new file mode 100644
index 0000000..da0eaf2
--- /dev/null
+++ b/src/views/dataUpload/contractorManage/contractorEnter/index.vue
@@ -0,0 +1,219 @@
+<template>
+    <div class="home-container">
+        <div style="height: 100%">
+          <div class="homeCard">
+            <div class="main-card">
+            <el-row class="cardTop">
+              <el-col :span="12" class="mainCardBtn">
+                <el-button type="primary" icon="Plus" size="default" @click="openDialog('add',{})">新增</el-button>
+              </el-col>
+            </el-row>
+            <el-table :data="reportData" style="width: 100%" height="calc(100% - 48px)" :header-cell-style="{ background: '#fafafa' }">
+              <el-table-column prop="id" label="id" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="createDate" label="上报时间" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="companyCode" label="企业编码" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="contractorId" label="承包商Id" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="createBy" label="创建人" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="createDate" label="创建时间" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="updateBy" label="最新修改人" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="updateDate" label="修改时间" show-overflow-tooltip></el-table-column>
+              <el-table-column label="操作" width="140">
+                  <template #default="scope">
+                    <el-button size="small" text type="primary" @click="openDialog('update',scope.row)">重新上报</el-button>
+                    <el-button style="color: red" size="small" text type="primary" @click="onRowDel(scope.row)">删除</el-button>
+                  </template>
+              </el-table-column>
+            </el-table>
+            <div class="pageBtn">
+              <el-pagination @size-change="onHandleSizeChange" small="false" @current-change="onHandleCurrentChange" class="page-position" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="listQuery.pageIndex" background v-model:page-size="listQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination>
+            </div>
+            </div>
+          </div>
+        </div>
+        <add-report ref="reportRef" @refresh="getData"></add-report>
+    </div>
+</template>
+
+<script lang="ts">
+import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue'
+import { ElMessageBox, ElMessage } from 'element-plus'
+import { Plus } from '@element-plus/icons-vue'
+import addReport from "./components/addReport.vue"
+import {contractorApi} from "/@/api/dataUpload/contractorManage";
+interface TableDataState {
+  reportData: [],
+  listQuery: {
+    searchParams: {}
+    pageIndex: number
+    pageSize: number
+  }
+  total: null | number
+}
+
+export default defineComponent({
+    name: 'contractorEnter',
+    components: {addReport },
+    setup() {
+      const reportRef= ref();
+      const state = reactive<TableDataState>({
+        reportData: [],
+        listQuery: {
+          searchParams: {},
+          pageIndex: 1,
+          pageSize: 10
+        },
+        total: null
+      });
+
+      // 页面加载时
+      onMounted(() => {
+        getData()
+      });
+
+      const getData = async ()=>{
+        const res = await contractorApi().getContractorEnterList(state.listQuery)
+        if(res.data.code == 200){
+          state.reportData = res.data.data
+          state.total = res.data.total
+        }else{
+          ElMessage({
+            type: 'warning',
+            message: res.data.msg
+          })
+        }
+      }
+
+      const openDialog=(type:string,data:object)=>{
+        reportRef.value.open(type,data)
+      }
+
+      // 删除用户
+      const onRowDel = (row: Object) => {
+          ElMessageBox.confirm(`此操作将永久删除该条数据,是否继续?`, '提示', {
+              confirmButtonText: '确认',
+              cancelButtonText: '取消',
+              type: 'warning'
+          })
+              .then(async () => {
+                const res = await contractorApi().delContractorEnter({ids: [row.id]})
+                if(res.data.code == 200){
+                  ElMessage({
+                    type: 'success',
+                    message: '删除成功'
+                  })
+                  await getData()
+                }else{
+                  ElMessage({
+                    type: 'warning',
+                    message: res.data.msg
+                  })
+                }
+              })
+              .catch(() => {});
+      };
+      // 分页改变
+      const onHandleSizeChange = (val: number) => {
+          state.listQuery.pageSize = val;
+          getData()
+      };
+      // 分页改变
+      const onHandleCurrentChange = (val: number) => {
+          state.listQuery.pageIndex = val;
+          getData()
+      };
+
+      return {
+        reportRef,
+        openDialog,
+        getData,
+        onRowDel,
+        onHandleSizeChange,
+        onHandleCurrentChange,
+        ...toRefs(state)
+      };
+    }
+});
+</script>
+<style lang="scss" scoped>
+.home-container {
+  height: calc(100vh - 144px);
+  box-sizing: border-box;
+  overflow: hidden;
+  .demo-tabs {
+    width: 100%;
+    height: 100%;
+
+    &::v-deep(.el-tabs__content) {
+      height: calc(100% - 60px);
+    }
+
+    .el-tab-pane {
+      height: 100%;
+    }
+  }
+  .homeCard {
+    width: 100%;
+    padding: 20px;
+    box-sizing: border-box;
+    background: #fff;
+    border-radius: 4px;
+
+    .main-card {
+      width: 100%;
+      height: 100%;
+      .cardTop {
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        margin-bottom: 20px;
+        .mainCardBtn {
+          margin: 0;
+        }
+      }
+      .pageBtn {
+        height: 60px;
+        display: flex;
+        align-items: center;
+        justify-content: right;
+
+        .demo-pagination-block + .demo-pagination-block {
+          margin-top: 10px;
+        }
+        .demo-pagination-block .demonstration {
+          margin-bottom: 16px;
+        }
+      }
+    }
+    &:last-of-type {
+      height: calc(100% - 100px);
+    }
+  }
+  .el-row {
+    display: flex;
+    align-items: center;
+    margin-bottom: 20px;
+    &:last-child {
+      margin-bottom: 0;
+    }
+    .grid-content {
+      align-items: center;
+      min-height: 36px;
+    }
+
+    .topInfo {
+      display: flex;
+      align-items: center;
+      font-size: 16px;
+      font-weight: bold;
+
+      & > div {
+        white-space: nowrap;
+        margin-right: 20px;
+      }
+    }
+  }
+  .el-card {
+    border: 0;
+  }
+}
+</style>
diff --git a/src/views/dataUpload/contractorManage/contractorInfo/components/addReport.vue b/src/views/dataUpload/contractorManage/contractorInfo/components/addReport.vue
new file mode 100644
index 0000000..96ebef1
--- /dev/null
+++ b/src/views/dataUpload/contractorManage/contractorInfo/components/addReport.vue
@@ -0,0 +1,185 @@
+<template>
+  <div class="system-add-user-container">
+    <el-dialog :title="title" v-model="isShowDialog" width="50%">
+      <el-form :model="form" size="default" ref="formRef" :rules="rules" label-width="120px">
+        <el-row :gutter="35">
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="承包商名称" prop="contractorName">
+              <el-input v-model.trim="form.contractorName" placeholder="承包商名称" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="承包商统一信用码" prop="contractorNumber">
+              <el-input v-model.trim="form.contractorNumber" placeholder="承包商统一信用码" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="承包商法人" prop="contractorPerson">
+              <el-input v-model.trim="form.contractorPerson" placeholder="承包商法人" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="合作状态" prop="contractorState">
+              <el-select v-model="form.contractorState" placeholder="请选择合作状态">
+                <el-option :key="1" label="合作中" :value="1"/>
+                <el-option :key="2" label="曾合作" :value="2"/>
+                <el-option :key="3" label="不合作" :value="3"/>
+              </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="contractorType">
+              <el-input v-model.trim="form.contractorType" placeholder="承包商类型" clearable></el-input>
+            </el-form-item>
+          </el-col>
+<!--          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">-->
+<!--            <el-form-item label="创建人姓名" prop="createBy">-->
+<!--              <el-input v-model.trim="form.createBy" placeholder="创建人姓名" clearable></el-input>-->
+<!--            </el-form-item>-->
+<!--          </el-col>-->
+<!--          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">-->
+<!--            <el-form-item label="修改人姓名" prop="updateBy">-->
+<!--              <el-input v-model.trim="form.updateBy" placeholder="修改人姓名" clearable></el-input>-->
+<!--            </el-form-item>-->
+<!--          </el-col>-->
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="title == '新增上报'? false : true">
+            <el-form-item label="删除状态" prop="deleted">
+              <el-radio-group v-model="form.deleted">
+                <el-radio label="0">未删除</el-radio>
+                <el-radio label="1">已删除</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <template #footer>
+        <span class="dialog-footer">
+            <el-button @click="isShowDialog = !isShowDialog" size="default">取 消</el-button>
+            <el-button type="primary" v-throttle @click="onSubmit" size="default">确 定</el-button>
+        </span>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script lang="ts">
+import { reactive, toRefs, onMounted, defineComponent, ref } from 'vue';
+import { ElMessageBox, ElMessage } from 'element-plus';
+import axios from "axios";
+import {contractorApi} from "/@/api/dataUpload/contractorManage";
+
+// 定义接口来定义对象的类型
+interface DataState {
+  title: string
+  isShowDialog: boolean
+  form: {
+    uuid: string
+    companyCode: string
+    contractorName: string
+    contractorNumber: string
+    contractorPerson: string
+    contractorState: null | number
+    contractorType: string
+    deleted: string
+    // createBy: string
+    // updateBy: string
+  }
+  rules:{}
+}
+
+export default defineComponent({
+  name: 'reportDialog',
+  setup(props, context) {
+    const formRef = ref()
+    const state = reactive<DataState>({
+      title: '',
+      isShowDialog: false,
+      form: {
+        uuid: '',
+        companyCode: '652310082',
+        contractorName: '',
+        contractorNumber: '',
+        contractorPerson: '',
+        contractorState: null,
+        contractorType: '',
+        deleted: '0'
+      },
+      rules:{
+        contractorName: [{ required: true, message: '请填写承包商名称', trigger: 'blur' }],
+        contractorNumber: [{ required: true, message: '请填写承包商统一信用码', trigger: 'blur' }],
+        contractorPerson: [{ required: true, message: '请填写承包商法人', trigger: 'blur' }],
+        contractorState: [{ required: true, message: '请选择合作状态', trigger: 'blur' }],
+        contractorType: [{ required: true, message: '请填写承包商类型', trigger: 'blur' }]
+      }
+    })
+
+    // 页面加载时
+    onMounted(() => {
+
+    })
+    // 打开弹窗
+    const open = (type: string, data: object) => {
+      state.isShowDialog = true;
+      if (type === 'add') {
+        state.title = '新增上报';
+        state.form = {
+          uuid: '',
+          companyCode: '652310082',
+          contractorName: '',
+          contractorNumber: '',
+          contractorPerson: '',
+          contractorState: null,
+          contractorType: '',
+          deleted: '0'
+        }
+      }else{
+        state.title = '重新上报';
+        state.form = {
+          uuid: data.uuid,
+          companyCode: '652310082',
+          contractorName: '',
+          contractorNumber: '',
+          contractorPerson: '',
+          contractorState: null,
+          contractorType: '',
+          deleted: '0'
+        }
+      }
+    };
+
+    // 新增修改
+    const onSubmit = async () => {
+      formRef.value.validate(async (valid:Boolean) => {
+        if(valid){
+          const res = await contractorApi().addContractor([state.form])
+          if(res.data.code == 200){
+            ElMessage({
+              type:'success',
+              message:'数据上报成功'
+            })
+            state.isShowDialog = false
+          }else{
+            ElMessage({
+              type:'warning',
+              message:res.data.msg
+            })
+          }
+          context.emit('refresh');
+        }else{
+          ElMessage({
+            type:'warning',
+            message:'请完善基本信息'
+          })
+        }
+      })
+    }
+
+    return {
+      formRef,
+      open,
+      onSubmit,
+      ...toRefs(state)
+    };
+  }
+});
+</script>
diff --git a/src/views/dataUpload/contractorManage/contractorInfo/index.vue b/src/views/dataUpload/contractorManage/contractorInfo/index.vue
new file mode 100644
index 0000000..383b64f
--- /dev/null
+++ b/src/views/dataUpload/contractorManage/contractorInfo/index.vue
@@ -0,0 +1,226 @@
+<template>
+    <div class="home-container">
+        <div style="height: 100%">
+          <div class="homeCard">
+            <div class="main-card">
+            <el-row class="cardTop">
+              <el-col :span="12" class="mainCardBtn">
+                <el-button type="primary" icon="Plus" size="default" @click="openDialog('add',{})">新增</el-button>
+              </el-col>
+            </el-row>
+            <el-table :data="reportData" style="width: 100%" height="calc(100% - 48px)" :header-cell-style="{ background: '#fafafa' }">
+              <el-table-column prop="id" label="id" show-overflow-tooltip></el-table-column>
+<!--              <el-table-column prop="createDate" label="上报时间" show-overflow-tooltip></el-table-column>-->
+              <el-table-column prop="contractorName" label="承包商名称" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="contractorNumber" label="承包商统一信用码" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="contractorPerson" label="承包商法人" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="contractorState" label="合作状态" show-overflow-tooltip>
+                <template #default="scope">
+                  {{scope.row.contractorState == 1?'合作中':scope.row.contractorState == 2?'曾合作':'不合作'}}
+                </template>
+              </el-table-column>
+              <el-table-column prop="contractorType" label="承包商类型" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="createBy" label="创建人姓名" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="createTime" label="创建时间" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="updateBy" label="最新修改人" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="updateTime" label="修改时间" show-overflow-tooltip></el-table-column>
+              <el-table-column label="操作" width="140">
+                  <template #default="scope">
+                    <el-button size="small" text type="primary" @click="openDialog('update',scope.row)">重新上报</el-button>
+                    <el-button style="color: red" size="small" text type="primary" @click="onRowDel(scope.row)">删除</el-button>
+                  </template>
+              </el-table-column>
+            </el-table>
+            <div class="pageBtn">
+              <el-pagination @size-change="onHandleSizeChange" small="false" @current-change="onHandleCurrentChange" class="page-position" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="listQuery.pageIndex" background v-model:page-size="listQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination>
+            </div>
+            </div>
+          </div>
+        </div>
+        <add-report ref="reportRef" @refresh="getData"></add-report>
+    </div>
+</template>
+
+<script lang="ts">
+import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue'
+import { ElMessageBox, ElMessage } from 'element-plus'
+import { Plus } from '@element-plus/icons-vue'
+import addReport from "./components/addReport.vue"
+import {contractorApi} from "/@/api/dataUpload/contractorManage";
+interface TableDataState {
+  reportData: [],
+  listQuery: {
+    searchParams: {}
+    pageIndex: number
+    pageSize: number
+  }
+  total: null | number
+}
+
+export default defineComponent({
+    name: 'contractorInfo',
+    components: {addReport },
+    setup() {
+      const reportRef= ref();
+      const state = reactive<TableDataState>({
+        reportData: [],
+        listQuery: {
+          searchParams: {},
+          pageIndex: 1,
+          pageSize: 10
+        },
+        total: null
+      });
+
+      // 页面加载时
+      onMounted(() => {
+        getData()
+      });
+
+      const getData = async ()=>{
+        const res = await contractorApi().getContractorList(state.listQuery)
+        if(res.data.code == 200){
+          state.reportData = res.data.data
+          state.total = res.data.total
+        }else{
+          ElMessage({
+            type: 'warning',
+            message: res.data.msg
+          })
+        }
+      }
+
+      const openDialog=(type:string,data:object)=>{
+        reportRef.value.open(type,data)
+      }
+
+      // 删除用户
+      const onRowDel = (row: Object) => {
+          ElMessageBox.confirm(`此操作将永久删除:“${row.contractorName}”,是否继续?`, '提示', {
+              confirmButtonText: '确认',
+              cancelButtonText: '取消',
+              type: 'warning'
+          })
+              .then(async () => {
+                const res = await contractorApi().delContractor({ids: [row.id]})
+                if(res.data.code == 200){
+                  ElMessage({
+                    type: 'success',
+                    message: '删除成功'
+                  })
+                  await getData()
+                }else{
+                  ElMessage({
+                    type: 'warning',
+                    message: res.data.msg
+                  })
+                }
+              })
+              .catch(() => {});
+      };
+      // 分页改变
+      const onHandleSizeChange = (val: number) => {
+          state.listQuery.pageSize = val;
+          getData()
+      };
+      // 分页改变
+      const onHandleCurrentChange = (val: number) => {
+          state.listQuery.pageIndex = val;
+          getData()
+      };
+
+      return {
+        reportRef,
+        openDialog,
+        getData,
+        onRowDel,
+        onHandleSizeChange,
+        onHandleCurrentChange,
+        ...toRefs(state)
+      };
+    }
+});
+</script>
+<style lang="scss" scoped>
+.home-container {
+  height: calc(100vh - 144px);
+  box-sizing: border-box;
+  overflow: hidden;
+  .demo-tabs {
+    width: 100%;
+    height: 100%;
+
+    &::v-deep(.el-tabs__content) {
+      height: calc(100% - 60px);
+    }
+
+    .el-tab-pane {
+      height: 100%;
+    }
+  }
+  .homeCard {
+    width: 100%;
+    padding: 20px;
+    box-sizing: border-box;
+    background: #fff;
+    border-radius: 4px;
+
+    .main-card {
+      width: 100%;
+      height: 100%;
+      .cardTop {
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        margin-bottom: 20px;
+        .mainCardBtn {
+          margin: 0;
+        }
+      }
+      .pageBtn {
+        height: 60px;
+        display: flex;
+        align-items: center;
+        justify-content: right;
+
+        .demo-pagination-block + .demo-pagination-block {
+          margin-top: 10px;
+        }
+        .demo-pagination-block .demonstration {
+          margin-bottom: 16px;
+        }
+      }
+    }
+    &:last-of-type {
+      height: calc(100% - 100px);
+    }
+  }
+  .el-row {
+    display: flex;
+    align-items: center;
+    margin-bottom: 20px;
+    &:last-child {
+      margin-bottom: 0;
+    }
+    .grid-content {
+      align-items: center;
+      min-height: 36px;
+    }
+
+    .topInfo {
+      display: flex;
+      align-items: center;
+      font-size: 16px;
+      font-weight: bold;
+
+      & > div {
+        white-space: nowrap;
+        margin-right: 20px;
+      }
+    }
+  }
+  .el-card {
+    border: 0;
+  }
+}
+</style>
diff --git a/src/views/dataUpload/contractorManage/contractorUser/components/addReport.vue b/src/views/dataUpload/contractorManage/contractorUser/components/addReport.vue
new file mode 100644
index 0000000..c1b5173
--- /dev/null
+++ b/src/views/dataUpload/contractorManage/contractorUser/components/addReport.vue
@@ -0,0 +1,223 @@
+<template>
+  <div class="system-add-user-container">
+    <el-dialog :title="title" v-model="isShowDialog" width="50%">
+      <el-form :model="form" size="default" ref="formRef" :rules="rules" label-width="120px">
+        <el-row :gutter="35">
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="身份证号" prop="cardNumber">
+              <el-input v-model.trim="form.cardNumber" placeholder="身份证号" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="承包商" prop="contractorId">
+              <el-select v-model="form.contractorId" filterable placeholder="请选择承包商" clearable>
+                <el-option v-for="(item,index) in contractorList" :key="index" :label="item.contractorName" :value="item.uuid"/>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="电话" prop="phone">
+              <el-input v-model.trim="form.phone" placeholder="电话" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="岗位" prop="post">
+              <el-input v-model.trim="form.post" placeholder="岗位" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="项目名" prop="projectName">
+              <el-input v-model.trim="form.projectName" placeholder="项目名" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="性别" prop="sex">
+              <el-radio-group v-model="form.sex">
+                <el-radio label="男">男</el-radio>
+                <el-radio label="女">女</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="用户姓名" prop="userName">
+              <el-input v-model.trim="form.userName" placeholder="用户姓名" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="用户状态" prop="userState">
+              <el-radio-group v-model="form.userState">
+                <el-radio :label="1">正常</el-radio>
+                <el-radio :label="0">不合格</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="title == '新增上报'? false : true">
+            <el-form-item label="删除状态" prop="deleted">
+              <el-radio-group v-model="form.deleted">
+                <el-radio label="0">未删除</el-radio>
+                <el-radio label="1">已删除</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <template #footer>
+        <span class="dialog-footer">
+            <el-button @click="isShowDialog = !isShowDialog" size="default">取 消</el-button>
+            <el-button type="primary" v-throttle @click="onSubmit" size="default">确 定</el-button>
+        </span>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script lang="ts">
+import { reactive, toRefs, onMounted, defineComponent, ref } from 'vue';
+import { ElMessageBox, ElMessage } from 'element-plus';
+import axios from "axios";
+import {workApplyApi} from "/@/api/specialWorkSystem/workApply";
+import {contractorApi} from "/@/api/dataUpload/contractorManage";
+
+// 定义接口来定义对象的类型
+interface DataState {
+  title: string
+  isShowDialog: boolean
+  form: {
+    uuid: string
+    cardNumber: string
+    companyCode: string
+    contractorId: string
+    phone: string
+    post: string
+    projectName: string
+    sex: string
+    userName: string
+    userState: null | number
+    deleted: string
+  }
+  rules:{},
+  contractorList: []
+}
+
+export default defineComponent({
+  name: 'reportDialog',
+  setup(props, context) {
+    const formRef = ref()
+    const state = reactive<DataState>({
+      title: '',
+      isShowDialog: false,
+      form: {
+        uuid: '',
+        cardNumber: '',
+        companyCode: '652310082',
+        contractorId: '',
+        phone: '',
+        post: '',
+        projectName: '',
+        sex: '',
+        userName: '',
+        userState: null,
+        deleted: '0'
+      },
+      rules:{
+        cardNumber: [{ required: true, message: '请填写身份证号', trigger: 'blur' }],
+        contractorId: [{ required: true, message: '请选择承包商', trigger: 'blur' }],
+        phone: [{ required: true, message: '请填写电话', trigger: 'blur' }],
+        post: [{ required: true, message: '请填写岗位', trigger: 'blur' }],
+        projectName: [{ required: true, message: '请填写项目名', trigger: 'blur' }],
+        sex: [{ required: true, message: '请选择性别', trigger: 'blur' }],
+        userName: [{ required: true, message: '请填写用户姓名', trigger: 'blur' }],
+        userState: [{ required: true, message: '请选择用户状态', trigger: 'blur' }]
+      },
+      contractorList: []
+    })
+
+    // 页面加载时
+    onMounted(() => {
+
+    })
+    // 打开弹窗
+    const open = (type: string, data: object) => {
+      state.isShowDialog = true
+      getDataList()
+      if (type === 'add') {
+        state.title = '新增上报';
+        state.form = {
+          uuid: '',
+          cardNumber: '',
+          companyCode: '652310082',
+          contractorId: '',
+          phone: '',
+          post: '',
+          projectName: '',
+          sex: '',
+          userName: '',
+          userState: null,
+          deleted: '0'
+        }
+      }else{
+        state.title = '重新上报';
+        state.form = {
+          uuid: data.uuid,
+          cardNumber: '',
+          companyCode: '652310082',
+          contractorId: '',
+          phone: '',
+          post: '',
+          projectName: '',
+          sex: '',
+          userName: '',
+          userState: null,
+          deleted: '0'
+        }
+      }
+    };
+
+    // 新增修改
+    const onSubmit = async () => {
+      formRef.value.validate(async (valid:Boolean) => {
+        if(valid){
+          const res = await contractorApi().addContractorUser([state.form])
+          if(res.data.code == 200){
+            ElMessage({
+              type:'success',
+              message:'数据上报成功'
+            })
+            state.isShowDialog = false
+          }else{
+            ElMessage({
+              type:'warning',
+              message:res.data.msg
+            })
+          }
+          context.emit('refresh')
+        }else{
+          ElMessage({
+            type:'warning',
+            message:'请完善基本信息'
+          })
+        }
+      })
+    }
+
+    const getDataList = async ()=>{
+      const res = await contractorApi().getContractorList({searchParams: {}, pageIndex: 1, pageSize: 999})
+      if(res.data.code == 200){
+        state.contractorList = res.data.data
+      }else{
+        ElMessage({
+          type: 'warning',
+          message: res.data.msg
+        })
+      }
+    }
+
+    return {
+      formRef,
+      open,
+      onSubmit,
+      ...toRefs(state)
+    };
+  }
+});
+</script>
diff --git a/src/views/dataUpload/contractorManage/contractorUser/index.vue b/src/views/dataUpload/contractorManage/contractorUser/index.vue
new file mode 100644
index 0000000..c9ea573
--- /dev/null
+++ b/src/views/dataUpload/contractorManage/contractorUser/index.vue
@@ -0,0 +1,230 @@
+<template>
+    <div class="home-container">
+        <div style="height: 100%">
+          <div class="homeCard">
+            <div class="main-card">
+            <el-row class="cardTop">
+              <el-col :span="12" class="mainCardBtn">
+                <el-button type="primary" icon="Plus" size="default" @click="openDialog('add',{})">新增</el-button>
+              </el-col>
+            </el-row>
+            <el-table :data="reportData" style="width: 100%" height="calc(100% - 48px)" :header-cell-style="{ background: '#fafafa' }">
+              <el-table-column prop="id" label="id" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="createDate" label="上报时间" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="cardNumber" label="身份证号" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="companyCode" label="企业编码" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="contractorId" label="承包商Id" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="createBy" label="创建人" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="createDate" label="创建时间" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="phone" label="电话" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="post" label="岗位" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="projectName" label="项目名" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="sex" label="性别" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="userName" label="用户姓名" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="userState" label="用户状态" show-overflow-tooltip>
+                <template #default="scope">
+                  {{scope.row.userState == 1? '正常': scope.row.userState == 0? '不合格': ''}}
+                </template>
+              </el-table-column>
+              <el-table-column prop="updateBy" label="最新修改人" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="updateDate" label="修改时间" show-overflow-tooltip></el-table-column>
+              <el-table-column label="操作" width="140">
+                  <template #default="scope">
+                    <el-button size="small" text type="primary" @click="openDialog('update',scope.row)">重新上报</el-button>
+                    <el-button style="color: red" size="small" text type="primary" @click="onRowDel(scope.row)">删除</el-button>
+                  </template>
+              </el-table-column>
+            </el-table>
+            <div class="pageBtn">
+              <el-pagination @size-change="onHandleSizeChange" small="false" @current-change="onHandleCurrentChange" class="page-position" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="listQuery.pageIndex" background v-model:page-size="listQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination>
+            </div>
+            </div>
+          </div>
+        </div>
+        <add-report ref="reportRef" @refresh="getData"></add-report>
+    </div>
+</template>
+
+<script lang="ts">
+import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue'
+import { ElMessageBox, ElMessage } from 'element-plus'
+import { Plus } from '@element-plus/icons-vue'
+import addReport from "./components/addReport.vue"
+import {contractorApi} from "/@/api/dataUpload/contractorManage";
+interface TableDataState {
+  reportData: [],
+  listQuery: {
+    searchParams: {}
+    pageIndex: number
+    pageSize: number
+  }
+  total: null | number
+}
+
+export default defineComponent({
+    name: 'contractorUser',
+    components: {addReport },
+    setup() {
+      const reportRef= ref();
+      const state = reactive<TableDataState>({
+        reportData: [],
+        listQuery: {
+          searchParams: {},
+          pageIndex: 1,
+          pageSize: 10
+        },
+        total: null
+      });
+
+      // 页面加载时
+      onMounted(() => {
+        getData()
+      });
+
+      const getData = async ()=>{
+        const res = await contractorApi().getContractorUserList(state.listQuery)
+        if(res.data.code == 200){
+          state.reportData = res.data.data
+          state.total = res.data.total
+        }else{
+          ElMessage({
+            type: 'warning',
+            message: res.data.msg
+          })
+        }
+      }
+
+      const openDialog=(type:string,data:object)=>{
+        reportRef.value.open(type,data)
+      }
+
+      // 删除用户
+      const onRowDel = (row: Object) => {
+          ElMessageBox.confirm(`此操作将永久删除该条数据,是否继续?`, '提示', {
+              confirmButtonText: '确认',
+              cancelButtonText: '取消',
+              type: 'warning'
+          })
+              .then(async () => {
+                const res = await contractorApi().delContractorUser({ids: [row.id]})
+                if(res.data.code == 200){
+                  ElMessage({
+                    type: 'success',
+                    message: '删除成功'
+                  })
+                  await getData()
+                }else{
+                  ElMessage({
+                    type: 'warning',
+                    message: res.data.msg
+                  })
+                }
+              })
+              .catch(() => {});
+      };
+      // 分页改变
+      const onHandleSizeChange = (val: number) => {
+          state.listQuery.pageSize = val;
+          getData()
+      };
+      // 分页改变
+      const onHandleCurrentChange = (val: number) => {
+          state.listQuery.pageIndex = val;
+          getData()
+      };
+
+      return {
+        reportRef,
+        openDialog,
+        getData,
+        onRowDel,
+        onHandleSizeChange,
+        onHandleCurrentChange,
+        ...toRefs(state)
+      };
+    }
+});
+</script>
+<style lang="scss" scoped>
+.home-container {
+  height: calc(100vh - 144px);
+  box-sizing: border-box;
+  overflow: hidden;
+  .demo-tabs {
+    width: 100%;
+    height: 100%;
+
+    &::v-deep(.el-tabs__content) {
+      height: calc(100% - 60px);
+    }
+
+    .el-tab-pane {
+      height: 100%;
+    }
+  }
+  .homeCard {
+    width: 100%;
+    padding: 20px;
+    box-sizing: border-box;
+    background: #fff;
+    border-radius: 4px;
+
+    .main-card {
+      width: 100%;
+      height: 100%;
+      .cardTop {
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        margin-bottom: 20px;
+        .mainCardBtn {
+          margin: 0;
+        }
+      }
+      .pageBtn {
+        height: 60px;
+        display: flex;
+        align-items: center;
+        justify-content: right;
+
+        .demo-pagination-block + .demo-pagination-block {
+          margin-top: 10px;
+        }
+        .demo-pagination-block .demonstration {
+          margin-bottom: 16px;
+        }
+      }
+    }
+    &:last-of-type {
+      height: calc(100% - 100px);
+    }
+  }
+  .el-row {
+    display: flex;
+    align-items: center;
+    margin-bottom: 20px;
+    &:last-child {
+      margin-bottom: 0;
+    }
+    .grid-content {
+      align-items: center;
+      min-height: 36px;
+    }
+
+    .topInfo {
+      display: flex;
+      align-items: center;
+      font-size: 16px;
+      font-weight: bold;
+
+      & > div {
+        white-space: nowrap;
+        margin-right: 20px;
+      }
+    }
+  }
+  .el-card {
+    border: 0;
+  }
+}
+</style>
diff --git a/src/views/dataUpload/educateTrain/educateResource/components/addReport.vue b/src/views/dataUpload/educateTrain/educateResource/components/addReport.vue
new file mode 100644
index 0000000..1c28d83
--- /dev/null
+++ b/src/views/dataUpload/educateTrain/educateResource/components/addReport.vue
@@ -0,0 +1,123 @@
+<template>
+  <div class="system-add-user-container">
+    <el-dialog :title="title" v-model="isShowDialog" width="50%">
+      <el-form :model="form" size="default" ref="formRef" :rules="rules" label-width="120px">
+        <el-row :gutter="35">
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="课程数量" prop="courseNum">
+              <el-input v-model.trim.number="form.courseNum" placeholder="课程数量" type="number" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="课件数量" prop="coursewareNum">
+              <el-input v-model.trim.number="form.coursewareNum" placeholder="课件数量" type="number" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="试题数量" prop="questionsNum">
+              <el-input v-model.trim.number="form.questionsNum" placeholder="试题数量" type="number" clearable></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" v-throttle @click="onSubmit" size="default">确 定</el-button>
+        </span>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script lang="ts">
+import { reactive, toRefs, onMounted, defineComponent, ref } from 'vue';
+import { ElMessageBox, ElMessage } from 'element-plus';
+import axios from "axios";
+import {workApplyApi} from "/@/api/specialWorkSystem/workApply";
+import {educateTrainApi} from "/@/api/dataUpload/educateTrain";
+
+// 定义接口来定义对象的类型
+interface DataState {
+  title: string
+  isShowDialog: boolean
+  form: {
+    courseNum: number | null
+    coursewareNum: number | null
+    questionsNum: number | null
+  }
+  rules:{}
+}
+
+export default defineComponent({
+  name: 'reportDialog',
+  setup(props, context) {
+    const formRef = ref()
+    const state = reactive<DataState>({
+      title: '',
+      isShowDialog: false,
+      form: {
+        courseNum: null,
+        coursewareNum: null,
+        questionsNum: null
+      },
+      rules:{
+        courseNum: [{ required: true, message: '请填写课程数量', trigger: 'blur' }],
+        coursewareNum: [{ required: true, message: '请填写课件数量', trigger: 'blur' }],
+        questionsNum: [{ required: true, message: '请填写试题数量', trigger: 'blur' }]
+      }
+    })
+
+    // 页面加载时
+    onMounted(() => {
+
+    })
+    // 打开弹窗
+    const open = (type: string, data: object) => {
+      state.isShowDialog = true;
+      if (type === 'add') {
+        state.title = '新增上报';
+        state.form = {
+          courseNum: null,
+          coursewareNum: null,
+          questionsNum: null
+        }
+      }
+    };
+
+    // 新增修改
+    const onSubmit = async () => {
+      formRef.value.validate(async (valid:Boolean) => {
+        if(valid){
+          const res = await educateTrainApi().addEducate([state.form])
+          if(res.data.code == 200){
+            ElMessage({
+              type:'success',
+              message:'数据上报成功'
+            })
+            state.isShowDialog = false
+          }else{
+            ElMessage({
+              type:'warning',
+              message:res.data.msg
+            })
+          }
+          context.emit('refresh');
+        }else{
+          ElMessage({
+            type:'warning',
+            message:'请完善基本信息'
+          })
+        }
+      })
+    }
+
+    return {
+      formRef,
+      open,
+      onSubmit,
+      ...toRefs(state)
+    };
+  }
+});
+</script>
diff --git a/src/views/dataUpload/educateTrain/educateResource/index.vue b/src/views/dataUpload/educateTrain/educateResource/index.vue
new file mode 100644
index 0000000..1726c8d
--- /dev/null
+++ b/src/views/dataUpload/educateTrain/educateResource/index.vue
@@ -0,0 +1,217 @@
+<template>
+    <div class="home-container">
+        <div style="height: 100%">
+          <div class="homeCard">
+            <div class="main-card">
+            <el-row class="cardTop">
+              <el-col :span="12" class="mainCardBtn">
+                <el-button type="primary" icon="Plus" size="default" @click="openDialog('add',{})">新增</el-button>
+              </el-col>
+            </el-row>
+            <el-table :data="reportData" style="width: 100%" height="calc(100% - 48px)" :header-cell-style="{ background: '#fafafa' }">
+              <el-table-column prop="id" label="id" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="createDate" label="创建时间" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="courseNum" label="课程数量" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="coursewareNum" label="课件数量" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="questionsNum" label="试题数量" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="updateDate" label="修改时间" show-overflow-tooltip></el-table-column>
+              <el-table-column label="操作" width="140">
+                  <template #default="scope">
+<!--                    <el-button size="small" text type="primary" @click="openDialog('update',scope.row)">重新上报</el-button>-->
+                    <el-button style="color: red" size="small" text type="primary" @click="onRowDel(scope.row)">删除</el-button>
+                  </template>
+              </el-table-column>
+            </el-table>
+            <div class="pageBtn">
+              <el-pagination @size-change="onHandleSizeChange" small="false" @current-change="onHandleCurrentChange" class="page-position" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="listQuery.pageIndex" background v-model:page-size="listQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination>
+            </div>
+            </div>
+          </div>
+        </div>
+        <add-report ref="reportRef" @refresh="getData"></add-report>
+    </div>
+</template>
+
+<script lang="ts">
+import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue'
+import { ElMessageBox, ElMessage } from 'element-plus'
+import { Plus } from '@element-plus/icons-vue'
+import addReport from "./components/addReport.vue"
+import {educateTrainApi} from "/@/api/dataUpload/educateTrain";
+interface TableDataState {
+  reportData: [],
+  listQuery: {
+    searchParams: {}
+    pageIndex: number
+    pageSize: number
+  }
+  total: null | number
+}
+
+export default defineComponent({
+    name: 'educateResource',
+    components: {addReport },
+    setup() {
+      const reportRef= ref();
+      const state = reactive<TableDataState>({
+        reportData: [],
+        listQuery: {
+          searchParams: {},
+          pageIndex: 1,
+          pageSize: 10
+        },
+        total: null
+      });
+
+      // 页面加载时
+      onMounted(() => {
+        getData()
+      });
+
+      const getData = async ()=>{
+        const res = await educateTrainApi().getEducateList(state.listQuery)
+        if(res.data.code == 200){
+          state.reportData = res.data.data
+          state.total = res.data.total
+        }else{
+          ElMessage({
+            type: 'warning',
+            message: res.data.msg
+          })
+        }
+      }
+
+      const openDialog=(type:string,data:object)=>{
+        reportRef.value.open(type,data)
+      }
+
+      // 删除用户
+      const onRowDel = (row: Object) => {
+          ElMessageBox.confirm(`此操作将永久删除该记录,是否继续?`, '提示', {
+              confirmButtonText: '确认',
+              cancelButtonText: '取消',
+              type: 'warning'
+          })
+              .then(async () => {
+                const res = await educateTrainApi().delEducate({ids: [row.id]})
+                if(res.data.code == 200){
+                  ElMessage({
+                    type: 'success',
+                    message: '删除成功'
+                  })
+                  await getData()
+                }else{
+                  ElMessage({
+                    type: 'warning',
+                    message: res.data.msg
+                  })
+                }
+              })
+              .catch(() => {});
+      };
+      // 分页改变
+      const onHandleSizeChange = (val: number) => {
+          state.listQuery.pageSize = val;
+          getData()
+      };
+      // 分页改变
+      const onHandleCurrentChange = (val: number) => {
+          state.listQuery.pageIndex = val;
+          getData()
+      };
+
+      return {
+        reportRef,
+        openDialog,
+        getData,
+        onRowDel,
+        onHandleSizeChange,
+        onHandleCurrentChange,
+        ...toRefs(state)
+      };
+    }
+});
+</script>
+<style lang="scss" scoped>
+.home-container {
+  height: calc(100vh - 144px);
+  box-sizing: border-box;
+  overflow: hidden;
+  .demo-tabs {
+    width: 100%;
+    height: 100%;
+
+    &::v-deep(.el-tabs__content) {
+      height: calc(100% - 60px);
+    }
+
+    .el-tab-pane {
+      height: 100%;
+    }
+  }
+  .homeCard {
+    width: 100%;
+    padding: 20px;
+    box-sizing: border-box;
+    background: #fff;
+    border-radius: 4px;
+
+    .main-card {
+      width: 100%;
+      height: 100%;
+      .cardTop {
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        margin-bottom: 20px;
+        .mainCardBtn {
+          margin: 0;
+        }
+      }
+      .pageBtn {
+        height: 60px;
+        display: flex;
+        align-items: center;
+        justify-content: right;
+
+        .demo-pagination-block + .demo-pagination-block {
+          margin-top: 10px;
+        }
+        .demo-pagination-block .demonstration {
+          margin-bottom: 16px;
+        }
+      }
+    }
+    &:last-of-type {
+      height: calc(100% - 100px);
+    }
+  }
+  .el-row {
+    display: flex;
+    align-items: center;
+    margin-bottom: 20px;
+    &:last-child {
+      margin-bottom: 0;
+    }
+    .grid-content {
+      align-items: center;
+      min-height: 36px;
+    }
+
+    .topInfo {
+      display: flex;
+      align-items: center;
+      font-size: 16px;
+      font-weight: bold;
+
+      & > div {
+        white-space: nowrap;
+        margin-right: 20px;
+      }
+    }
+  }
+  .el-card {
+    border: 0;
+  }
+}
+</style>
diff --git a/src/views/dataUpload/educateTrain/trainInfo/components/addReport.vue b/src/views/dataUpload/educateTrain/trainInfo/components/addReport.vue
new file mode 100644
index 0000000..a4b9934
--- /dev/null
+++ b/src/views/dataUpload/educateTrain/trainInfo/components/addReport.vue
@@ -0,0 +1,196 @@
+<template>
+  <div class="system-add-user-container">
+    <el-dialog :title="title" v-model="isShowDialog" width="50%">
+      <el-form :model="form" size="default" ref="formRef" :rules="rules" label-width="120px">
+        <el-row :gutter="35">
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="考试参与率" prop="examJoinRate">
+              <el-input v-model.trim="form.examJoinRate" placeholder="考试参与率" type="number" clearable>
+                <template #append>%</template>
+              </el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="考试合格率" prop="examPassRate">
+              <el-input v-model.trim="form.examPassRate" placeholder="考试合格率" type="number" clearable>
+                <template #append>%</template>
+              </el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="缺考总数" prop="missExam">
+              <el-input v-model.trim="form.missExam" placeholder="缺考总数" type="number" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="待补课总数" prop="repairNum">
+              <el-input v-model.trim="form.repairNum" placeholder="待补课总数" type="number" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="人均学时" prop="studyAverage">
+              <el-input v-model.trim="form.studyAverage" placeholder="人均学时" type="number" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="学时达标率" prop="studyQualifyRate">
+              <el-input v-model.trim="form.studyQualifyRate" placeholder="学时达标率" type="number" clearable>
+                <template #append>%</template>
+              </el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="培训人数" prop="trainPerson">
+              <el-input v-model.trim.number="form.trainPerson" placeholder="培训人数" type="number" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="培训参与率" prop="trainJoinRate">
+              <el-input v-model.trim="form.trainJoinRate" placeholder="培训参与率" type="number" clearable>
+                <template #append>%</template>
+              </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" v-throttle @click="onSubmit" size="default">确 定</el-button>
+        </span>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script lang="ts">
+import { reactive, toRefs, onMounted, defineComponent, ref } from 'vue';
+import { ElMessageBox, ElMessage } from 'element-plus';
+import axios from "axios";
+import {workApplyApi} from "/@/api/specialWorkSystem/workApply";
+import {educateTrainApi} from "/@/api/dataUpload/educateTrain";
+
+// 定义接口来定义对象的类型
+interface DataState {
+  title: string
+  isShowDialog: boolean
+  form: {
+    examJoinRate: string
+    examPassRate: string
+    missExam: string
+    rankWeek: string
+    repairNum: string
+    studyAverage: string
+    studyQualifyRate: string
+    trainPerson: null | number
+    trainJoinRate: string
+  }
+  rules:{}
+}
+
+export default defineComponent({
+  name: 'reportDialog',
+  setup(props, context) {
+    const formRef = ref()
+    const state = reactive<DataState>({
+      title: '',
+      isShowDialog: false,
+      form: {
+        examJoinRate: '',
+        examPassRate: '',
+        missExam: '',
+        rankWeek: '',
+        repairNum: '',
+        studyAverage: '',
+        studyQualifyRate: '',
+        trainPerson: null,
+        trainJoinRate: ''
+      },
+      rules:{
+        examJoinRate: [{ required: true, message: '请填写考试参与率', trigger: 'blur' }],
+        examPassRate: [{ required: true, message: '请填写考试合格率', trigger: 'blur' }],
+        missExam: [{ required: true, message: '请填写缺考总数', trigger: 'blur' }],
+        repairNum: [{ required: true, message: '请填写待补课总数', trigger: 'blur' }],
+        studyAverage: [{ required: true, message: '请填写人均学时', trigger: 'blur' }],
+        studyQualifyRate: [{ required: true, message: '请填写学时达标率', trigger: 'blur' }],
+        trainPerson: [{ required: true, message: '请填写培训人数', trigger: 'blur' }],
+        trainJoinRate: [{ required: true, message: '请填写培训参与率', trigger: 'blur' }]
+      }
+    })
+
+    // 页面加载时
+    onMounted(() => {
+
+    })
+    // 打开弹窗
+    const open = (type: string, data: object) => {
+      state.isShowDialog = true;
+      if (type === 'add') {
+        state.title = '新增上报';
+        state.form = {
+          examJoinRate: '',
+          examPassRate: '',
+          missExam: '',
+          rankWeek: getWeekNumber(),
+          repairNum: '',
+          studyAverage: '',
+          studyQualifyRate: '',
+          trainPerson: null,
+          trainJoinRate: ''
+        };
+      }
+    };
+
+    // 新增修改
+    const onSubmit = async () => {
+      formRef.value.validate(async (valid:Boolean) => {
+        if(valid){
+          const res = await educateTrainApi().addTrain([state.form])
+          if(res.data.code == 200){
+            ElMessage({
+              type:'success',
+              message:'数据上报成功'
+            })
+            state.isShowDialog = false
+          }else{
+            ElMessage({
+              type:'warning',
+              message:res.data.msg
+            })
+          }
+          context.emit('refresh');
+
+        }else{
+          ElMessage({
+            type:'warning',
+            message:'请完善基本信息'
+          })
+        }
+      })
+    }
+
+    function getWeekNumber() {
+      // 获取当前日期
+      const today = new Date();
+
+      // 获取当前年的第一天
+      const firstDayOfYear = new Date(today.getFullYear(), 0, 1);
+
+      // 计算当前日期与第一天之间的时间差(毫秒)
+      const timeDiff = today - firstDayOfYear;
+
+      // 计算经过的天数,并将其转换为周数
+      const weekNumber = Math.ceil((timeDiff / (24 * 60 * 60 * 1000) + 1) / 7);
+
+      return weekNumber.toString()
+    }
+
+    return {
+      formRef,
+      open,
+      onSubmit,
+      ...toRefs(state)
+    };
+  }
+});
+</script>
diff --git a/src/views/dataUpload/educateTrain/trainInfo/index.vue b/src/views/dataUpload/educateTrain/trainInfo/index.vue
new file mode 100644
index 0000000..df68588
--- /dev/null
+++ b/src/views/dataUpload/educateTrain/trainInfo/index.vue
@@ -0,0 +1,223 @@
+<template>
+    <div class="home-container">
+        <div style="height: 100%">
+          <div class="homeCard">
+            <div class="main-card">
+            <el-row class="cardTop">
+              <el-col :span="12" class="mainCardBtn">
+                <el-button type="primary" icon="Plus" size="default" @click="openDialog('add',{})">新增</el-button>
+              </el-col>
+            </el-row>
+            <el-table :data="reportData" style="width: 100%" height="calc(100% - 48px)" :header-cell-style="{ background: '#fafafa' }">
+              <el-table-column prop="id" label="id" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="createDate" label="上报时间" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="examJoinRate" label="考试参与率" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="examPassRate" label="考试合格率" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="missExam" label="缺考总数" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="rankWeek" label="第几周" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="repairNum" label="待补课总数" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="studyAverage" label="人均学时" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="studyQualifyRate" label="学时达标率" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="trainPerson" label="培训人数" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="trainJoinRate" label="培训参与率" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="updateDate" label="修改时间" show-overflow-tooltip></el-table-column>
+              <el-table-column label="操作" width="140">
+                  <template #default="scope">
+<!--                    <el-button size="small" text type="primary" @click="openDialog('update',scope.row)">重新上报</el-button>-->
+                    <el-button style="color: red" size="small" text type="primary" @click="onRowDel(scope.row)">删除</el-button>
+                  </template>
+              </el-table-column>
+            </el-table>
+            <div class="pageBtn">
+              <el-pagination @size-change="onHandleSizeChange" small="false" @current-change="onHandleCurrentChange" class="page-position" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="listQuery.pageIndex" background v-model:page-size="listQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination>
+            </div>
+            </div>
+          </div>
+        </div>
+        <add-report ref="reportRef" @refresh="getData"></add-report>
+    </div>
+</template>
+
+<script lang="ts">
+import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue'
+import { ElMessageBox, ElMessage } from 'element-plus'
+import { Plus } from '@element-plus/icons-vue'
+import addReport from "./components/addReport.vue"
+import {educateTrainApi} from "/@/api/dataUpload/educateTrain";
+interface TableDataState {
+  reportData: [],
+  listQuery: {
+    searchParams: {}
+    pageIndex: number
+    pageSize: number
+  }
+  total: null | number
+}
+
+export default defineComponent({
+    name: 'trainInfo',
+    components: {addReport },
+    setup() {
+      const reportRef= ref();
+      const state = reactive<TableDataState>({
+        reportData: [],
+        listQuery: {
+          searchParams: {},
+          pageIndex: 1,
+          pageSize: 10
+        },
+        total: null
+      });
+
+      // 页面加载时
+      onMounted(() => {
+        getData()
+      });
+
+      const getData = async ()=>{
+        const res = await educateTrainApi().getTrainList(state.listQuery)
+        if(res.data.code == 200){
+          state.reportData = res.data.data
+          state.total = res.data.total
+        }else{
+          ElMessage({
+            type: 'warning',
+            message: res.data.msg
+          })
+        }
+      }
+
+      const openDialog=(type:string,data:object)=>{
+        reportRef.value.open(type,data)
+      }
+
+      // 删除用户
+      const onRowDel = (row: Object) => {
+          ElMessageBox.confirm(`此操作将永久删除该记录,是否继续?`, '提示', {
+              confirmButtonText: '确认',
+              cancelButtonText: '取消',
+              type: 'warning'
+          })
+              .then(async () => {
+                const res = await educateTrainApi().delTrain({ids: [row.id]})
+                if(res.data.code == 200){
+                  ElMessage({
+                    type: 'success',
+                    message: '删除成功'
+                  })
+                  await getData()
+                }else{
+                  ElMessage({
+                    type: 'warning',
+                    message: res.data.msg
+                  })
+                }
+              })
+              .catch(() => {});
+      };
+      // 分页改变
+      const onHandleSizeChange = (val: number) => {
+          state.listQuery.pageSize = val;
+          getData()
+      };
+      // 分页改变
+      const onHandleCurrentChange = (val: number) => {
+          state.listQuery.pageIndex = val;
+          getData()
+      };
+
+      return {
+        reportRef,
+        openDialog,
+        getData,
+        onRowDel,
+        onHandleSizeChange,
+        onHandleCurrentChange,
+        ...toRefs(state)
+      };
+    }
+});
+</script>
+<style lang="scss" scoped>
+.home-container {
+  height: calc(100vh - 144px);
+  box-sizing: border-box;
+  overflow: hidden;
+  .demo-tabs {
+    width: 100%;
+    height: 100%;
+
+    &::v-deep(.el-tabs__content) {
+      height: calc(100% - 60px);
+    }
+
+    .el-tab-pane {
+      height: 100%;
+    }
+  }
+  .homeCard {
+    width: 100%;
+    padding: 20px;
+    box-sizing: border-box;
+    background: #fff;
+    border-radius: 4px;
+
+    .main-card {
+      width: 100%;
+      height: 100%;
+      .cardTop {
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        margin-bottom: 20px;
+        .mainCardBtn {
+          margin: 0;
+        }
+      }
+      .pageBtn {
+        height: 60px;
+        display: flex;
+        align-items: center;
+        justify-content: right;
+
+        .demo-pagination-block + .demo-pagination-block {
+          margin-top: 10px;
+        }
+        .demo-pagination-block .demonstration {
+          margin-bottom: 16px;
+        }
+      }
+    }
+    &:last-of-type {
+      height: calc(100% - 100px);
+    }
+  }
+  .el-row {
+    display: flex;
+    align-items: center;
+    margin-bottom: 20px;
+    &:last-child {
+      margin-bottom: 0;
+    }
+    .grid-content {
+      align-items: center;
+      min-height: 36px;
+    }
+
+    .topInfo {
+      display: flex;
+      align-items: center;
+      font-size: 16px;
+      font-weight: bold;
+
+      & > div {
+        white-space: nowrap;
+        margin-right: 20px;
+      }
+    }
+  }
+  .el-card {
+    border: 0;
+  }
+}
+</style>
diff --git a/src/views/dataUpload/peopleLocate/components/addReport.vue b/src/views/dataUpload/peopleLocate/components/addReport.vue
new file mode 100644
index 0000000..4eb5c4c
--- /dev/null
+++ b/src/views/dataUpload/peopleLocate/components/addReport.vue
@@ -0,0 +1,291 @@
+<template>
+  <div class="system-add-user-container">
+    <el-dialog :title="title" v-model="isShowDialog" width="50%">
+      <el-form :model="form" size="default" ref="formRef" :rules="rules" label-width="120px">
+        <el-row :gutter="35">
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="序号" prop="serialNumber">
+              <el-input v-model.trim="form.serialNumber" placeholder="序号" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="卡号" prop="cardNo">
+              <el-input v-model.trim="form.cardNo" placeholder="卡号" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="报警人员名称" prop="realName">
+              <el-input v-model.trim="form.realName" placeholder="报警人员名称" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="报警状态" prop="alarmStatus">
+              <el-radio-group v-model="form.alarmStatus">
+                <el-radio label="1">报警</el-radio>
+                <el-radio label="2">已处理</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="报警时间" prop="alarmTime">
+              <el-date-picker v-model="form.alarmTime" value-format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择报警时间" style="width: 100%" />
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="报警信息" prop="alarmInfo">
+              <el-input v-model.trim="form.alarmInfo" :autosize="{ minRows: 1 }" type="textarea" placeholder="报警信息" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="报警类型" prop="alarmType">
+              <el-select v-model="form.alarmType" placeholder="请选择报警类型">
+                <el-option v-for="(item,index) in alarmTypeList" :key="index" :label="item.name" :value="item.value"/>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="报警位置" prop="alarmLocation">
+              <el-input v-model.trim="form.alarmLocation" :autosize="{ minRows: 1 }" type="textarea" placeholder="报警地点所在区域" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="">
+              <el-button type="primary" v-throttle @click="showMapLocation" size="default">获取经纬度</el-button>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="经度">
+              <el-input v-model.trim="form.longitude" placeholder="经度(支持手动输入)" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="纬度">
+              <el-input v-model.trim="form.latitude" placeholder="纬度(支持手动输入)" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="楼层号" prop="floorNo">
+              <el-input v-model.trim="form.floorNo" placeholder="楼层号" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="form.alarmStatus == '2'">
+            <el-form-item label="销警时间" prop="handleTime">
+              <el-date-picker v-model="form.handleTime" value-format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择销警时间" style="width: 100%" />
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="form.alarmStatus == '1'">
+            <el-form-item label="销警时间">
+              <el-date-picker v-model="form.handleTime" value-format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择销警时间" style="width: 100%" />
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="form.alarmStatus == '2'">
+            <el-form-item label="处理信息" prop="handleInfo">
+              <el-input v-model.trim="form.handleInfo" :autosize="{ minRows: 1 }" type="textarea" placeholder="处理信息" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="form.alarmStatus == '1'">
+            <el-form-item label="处理信息">
+              <el-input v-model.trim="form.handleInfo" :autosize="{ minRows: 1 }" type="textarea" placeholder="处理信息" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="跳转地址">
+              <el-input v-model.trim="form.thirdAddress" :autosize="{ minRows: 1 }" type="textarea" placeholder="跳转地址" clearable></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" v-throttle @click="onSubmit" size="default">确 定</el-button>
+        </span>
+      </template>
+    </el-dialog>
+    <mapLocation ref="mapLocation" @giveLatLng="achieveLatLng"></mapLocation>
+  </div>
+</template>
+
+<script lang="ts">
+import { reactive, toRefs, onMounted, defineComponent, ref } from 'vue';
+import { ElMessageBox, ElMessage } from 'element-plus';
+import axios from "axios";
+import {judgeReportApi} from "/@/api/dataUpload/saftyBaseInfo/judgeReport";
+import mapLocation from "./mapLocation.vue"
+
+// 定义接口来定义对象的类型
+interface DataState {
+  title: string
+  isShowDialog: boolean
+  form: {
+    uuid: string
+    serialNumber: string
+    cardNo: string
+    realName: string
+    alarmStatus: string
+    alarmTime: string
+    alarmInfo: string
+    alarmType: string
+    alarmLocation: string
+    longitude: string
+    latitude: string
+    floorNo: string
+    handleTime: string
+    handleInfo: string
+    thirdAddress: string
+  }
+  rules:{}
+  alarmTypeList: Array<alarmType>
+}
+
+interface alarmType {
+  value: string
+  name: string
+}
+
+export default defineComponent({
+  name: 'reportDialog',
+  components: {mapLocation },
+  setup(props, context) {
+    const formRef = ref()
+    const mapLocation = ref()
+    const state = reactive<DataState>({
+      title: '',
+      isShowDialog: false,
+      form: {
+        uuid: '',
+        serialNumber: '',
+        cardNo: '',
+        realName: '',
+        alarmStatus: '',
+        alarmTime: '',
+        alarmInfo: '',
+        alarmType: '',
+        alarmLocation: '',
+        longitude: '',
+        latitude: '',
+        floorNo: '',
+        handleTime: '',
+        handleInfo: '',
+        thirdAddress: 'http://124.88.37.66:8081/location_system_5.4.9/map3d/index.html'
+      },
+      rules:{
+        serialNumber: [{ required: true, message: '请填写序号', trigger: 'blur' }],
+        cardNo: [{ required: true, message: '请填写卡号', trigger: 'blur' }],
+        realName: [{ required: true, message: '请填写报警人员名称', trigger: 'blur' }],
+        alarmStatus: [{ required: true, message: '请选择报警状态', trigger: 'blur' }],
+        alarmTime: [{ required: true, message: '请选择报警时间', trigger: 'blur' }],
+        alarmInfo: [{ required: true, message: '请填写报警信息', trigger: 'blur' }],
+        alarmType: [{ required: true, message: '请选择报警类型', trigger: 'blur' }],
+        alarmLocation: [{ required: true, message: '请填写报警位置', trigger: 'blur' }],
+        floorNo: [{ required: true, message: '请填写楼层号', trigger: 'blur' }],
+        handleTime: [{ required: true, message: '请选择销警时间', trigger: 'blur' }],
+        handleInfo: [{ required: true, message: '请填写处理信息', trigger: 'blur' }]
+      },
+      alarmTypeList: [
+        {value: '01', name: '一键求救报警'},
+        {value: '02', name: '滞留预警'},
+        {value: '03', name: '越界报警'},
+        {value: '04', name: '超员预警'},
+        {value: '05', name: '缺员预警'},
+        {value: '06', name: '静止预警'},
+        {value: '07', name: '作业人员离开报警'},
+        {value: '08', name: '非作业人员闯入报警'}
+      ]
+    })
+
+    // 页面加载时
+    onMounted(() => {
+
+    })
+    // 打开弹窗
+    const open = (type: string, data: object) => {
+      state.isShowDialog = true;
+      if (type === 'add') {
+        state.title = '新增上报';
+        state.form = {
+          uuid: '',
+          serialNumber: '',
+          cardNo: '',
+          realName: '',
+          alarmStatus: '',
+          alarmTime: '',
+          alarmInfo: '',
+          alarmType: '',
+          alarmLocation: '',
+          longitude: '',
+          latitude: '',
+          floorNo: '',
+          handleTime: '',
+          handleInfo: '',
+          thirdAddress: 'http://124.88.37.66:8081/location_system_5.4.9/map3d/index.html'
+        }
+      }else{
+        state.title = '重新上报';
+        state.form = {
+          uuid: data.uuid,
+          serialNumber: '',
+          cardNo: '',
+          realName: '',
+          alarmStatus: '',
+          alarmTime: '',
+          alarmInfo: '',
+          alarmType: '',
+          alarmLocation: '',
+          longitude: '',
+          latitude: '',
+          floorNo: '',
+          handleTime: '',
+          handleInfo: '',
+          thirdAddress: 'http://124.88.37.66:8081/location_system_5.4.9/map3d/index.html'
+        }
+      }
+    };
+
+    // 新增修改
+    const onSubmit = async () => {
+      formRef.value.validate(async (valid:Boolean) => {
+        if(valid){
+          const res = await judgeReportApi().addPosition([state.form])
+          if(res.data.code == '200'){
+            ElMessage({
+              type:'success',
+              message:'数据上报成功'
+            })
+            state.isShowDialog = false
+          }else{
+            ElMessage({
+              type:'warning',
+              message:res.data.msg
+            })
+          }
+          context.emit('refresh');
+        }else{
+          ElMessage({
+            type:'warning',
+            message:'请完善基本信息'
+          })
+        }
+      })
+    }
+    const showMapLocation=()=>{
+      mapLocation.value.openMapLocation(state.form.longitude,state.form.latitude)
+    }
+
+    const achieveLatLng=(lng: string,lat: string)=>{
+      state.form.longitude = lng
+      state.form.latitude = lat
+    }
+
+    return {
+      formRef,
+      mapLocation,
+      open,
+      onSubmit,
+      showMapLocation,
+      achieveLatLng,
+      ...toRefs(state)
+    };
+  }
+});
+</script>
diff --git a/src/views/dataUpload/peopleLocate/components/mapLocation.vue b/src/views/dataUpload/peopleLocate/components/mapLocation.vue
new file mode 100644
index 0000000..e1e24fc
--- /dev/null
+++ b/src/views/dataUpload/peopleLocate/components/mapLocation.vue
@@ -0,0 +1,138 @@
+<template>
+    <el-dialog
+        v-model="mapLocationVisible"
+        append-to-body
+        :close-on-click-modal="false"
+        width="75%"
+        :title="title"
+    >
+        <div class="mapLocation_head">
+            <div>
+                <el-alert
+                    title="点击地点获取经纬度信息"
+                    type="info"
+                    :closable="false"
+                >
+                </el-alert>
+            </div>
+            <div class="mapLocation_latlng">
+                <span>经度:</span>
+                <el-input class="mapLocation_latlng_input" id="lng" v-model="longitude"></el-input>
+            </div>
+            <div class="mapLocation_latlng">
+                <span>纬度:</span>
+                <el-input class="mapLocation_latlng_input" id="lat" v-model="latitude"></el-input>
+            </div>
+        </div>
+        <div class="mapLocation_body">
+          <baidu-map class="map" ak="BkZdiHBj9aGrMdVFM48r2njNiMzsekga" v="3.0" type="API" :center="center" :zoom="15" scroll-wheel-zoom @ready="initMap" @click="getPosition">
+            <bm-marker :position="{lng: longitude, lat: latitude}" :dragging="true" animation="BMAP_ANIMATION_BOUNCE">
+              <bm-label content="选择地点" :labelStyle="{color: 'red', fontSize : '24px'}" :offset="{width: -35, height: 30}"/>
+            </bm-marker>
+          </baidu-map>
+        </div>
+        <div  align="right" style="margin-top: 10px">
+            <el-button @click="mapLocationVisible = false">取消</el-button>
+            <el-button type="primary" @click="submitLatLng()">确认</el-button>
+        </div>
+    </el-dialog>
+</template>
+
+<script lang="ts">
+import {ref, onMounted, reactive, toRefs, defineComponent} from 'vue';
+import { BaiduMap,BmMarker } from 'vue-baidu-map-3x'
+interface DataState{
+  title: string
+  longitude: string
+  latitude: string
+  mapLocationVisible: boolean
+  center: {
+
+  }
+}
+export default defineComponent({
+    name: "mapLocation",
+    components: {BaiduMap,BmMarker},
+    setup(props,context) {
+      const state = reactive<DataState>({
+        title: '',
+        longitude: '',
+        latitude: '',
+        mapLocationVisible: false,
+        center: {
+          lng: '116.404',
+          lat: '39.915'
+        }
+      })
+
+
+
+      onMounted(() => {
+        // ...(mounted钩子中的代码不变)
+      });
+      const map = reactive({})
+
+      const getPosition = ({type, target, point, pixel, overlay})=>{
+        state.longitude = point.lng
+        state.latitude = point.lat
+      }
+
+      const openMapLocation=(longitude:string,latitude:string)=>{
+        state.longitude = longitude
+        state.latitude = latitude
+        state.mapLocationVisible = true
+      }
+
+      const submitLatLng=()=>{
+        state.mapLocationVisible = false
+        context.emit('giveLatLng',state.longitude,state.latitude);
+      }
+
+      const initMap=()=>{
+
+      }
+
+      return {
+        map,
+        getPosition,
+        submitLatLng,
+        initMap,
+        openMapLocation,
+        ...toRefs(state)
+      };
+    }
+})
+</script>
+
+<style lang="scss" scoped>
+.map {
+  width: 100%;
+  height: 500px;
+
+  :deep(.BMap_cpyCtrl){
+    display: none!important;
+    visibility: hidden!important;
+  }
+
+  :deep(.anchorBL) {
+    display: none!important;
+    visibility: hidden!important;
+  }
+}
+.mapLocation_head{
+    width:100%;
+    height:100px;
+}
+.mapLocation_body{
+    width:100%;
+    height:500px
+}
+.mapLocation_latlng{
+    padding-top:10px;
+    display:inline-block;
+    margin-right: 20px;
+}
+.mapLocation_latlng_input{
+    width:250px;
+}
+</style>
diff --git a/src/views/dataUpload/peopleLocate/index.vue b/src/views/dataUpload/peopleLocate/index.vue
new file mode 100644
index 0000000..661b838
--- /dev/null
+++ b/src/views/dataUpload/peopleLocate/index.vue
@@ -0,0 +1,251 @@
+<template>
+    <div class="home-container">
+        <div style="height: 100%">
+          <div class="homeCard">
+            <div class="main-card">
+            <el-row class="cardTop">
+              <el-col :span="12" class="mainCardBtn">
+                <el-button type="primary" icon="Plus" size="default" @click="openDialog('add',{})">新增</el-button>
+              </el-col>
+            </el-row>
+            <el-table :data="reportData" style="width: 100%" height="calc(100% - 48px)" :header-cell-style="{ background: '#fafafa' }">
+              <el-table-column prop="id" label="id" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="createTime" label="上报时间" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="cardNo" label="卡号" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="realName" label="报警人员名称" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="alarmStatus" label="报警状态" show-overflow-tooltip>
+                <template #default="scope">
+                  {{scope.row.alarmStatus == '1'?'报警':scope.row.alarmStatus == '2'?'报警已处理':'--'}}
+                </template>
+              </el-table-column>
+              <el-table-column prop="alarmTime" label="报警时间" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="alarmInfo" label="报警信息" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="alarmType" label="报警类型" show-overflow-tooltip>
+                <template #default="scope">
+                  {{getAlarmType(scope.row.alarmType)}}
+                </template>
+              </el-table-column>
+              <el-table-column prop="alarmLocation" label="报警位置" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="longitude" label="经度" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="latitude" label="纬度" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="floorNo" label="楼层号" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="handleTime" label="销警时间" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="handleInfo" label="处理信息" show-overflow-tooltip></el-table-column>
+              <el-table-column label="操作" width="140">
+                  <template #default="scope">
+                    <el-button size="small" text type="primary" @click="openDialog('update',scope.row)">重新上报</el-button>
+                    <el-button style="color: red" size="small" text type="primary" @click="onRowDel(scope.row)">删除</el-button>
+                  </template>
+              </el-table-column>
+            </el-table>
+            <div class="pageBtn">
+              <el-pagination @size-change="onHandleSizeChange" small="false" @current-change="onHandleCurrentChange" class="page-position" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="listQuery.pageIndex" background v-model:page-size="listQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination>
+            </div>
+            </div>
+          </div>
+        </div>
+        <add-report ref="reportRef" @refresh="getData"></add-report>
+    </div>
+</template>
+
+<script lang="ts">
+import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue'
+import { ElMessageBox, ElMessage } from 'element-plus'
+import { Plus } from '@element-plus/icons-vue'
+import addReport from "./components/addReport.vue"
+import {judgeReportApi} from "/@/api/dataUpload/saftyBaseInfo/judgeReport";
+interface TableDataState {
+  reportData: [],
+  listQuery: {
+    searchParams: {}
+    pageIndex: number
+    pageSize: number
+  }
+  total: null | number
+  alarmTypeList: Array<alarmType>
+}
+interface alarmType {
+  value: string
+  name: string
+}
+export default defineComponent({
+    name: 'contractorInfo',
+    components: {addReport },
+    setup() {
+      const reportRef= ref();
+      const state = reactive<TableDataState>({
+        reportData: [],
+        listQuery: {
+          searchParams: {},
+          pageIndex: 1,
+          pageSize: 10
+        },
+        total: null,
+        alarmTypeList: [
+          {value: '01', name: '一键求救报警'},
+          {value: '02', name: '滞留预警'},
+          {value: '03', name: '越界报警'},
+          {value: '04', name: '超员预警'},
+          {value: '05', name: '缺员预警'},
+          {value: '06', name: '静止预警'},
+          {value: '07', name: '作业人员离开报警'},
+          {value: '08', name: '非作业人员闯入报警'}
+        ]
+      });
+
+      // 页面加载时
+      onMounted(() => {
+        getData()
+      });
+
+      const getData = async ()=>{
+        const res = await judgeReportApi().getPositionList(state.listQuery)
+        if(res.data.code == 200){
+          state.reportData = res.data.data
+          state.total = res.data.total
+        }else{
+          ElMessage({
+            type: 'warning',
+            message: res.data.msg
+          })
+        }
+      }
+
+      const openDialog=(type:string,data:object)=>{
+        reportRef.value.open(type,data)
+      }
+
+      // 删除用户
+      const onRowDel = (row: Object) => {
+          ElMessageBox.confirm(`此操作将永久删除该条数据,是否继续?`, '提示', {
+              confirmButtonText: '确认',
+              cancelButtonText: '取消',
+              type: 'warning'
+          })
+              .then(async () => {
+                const res = await judgeReportApi().delPosition({ids: [row.id]})
+                if(res.data.code == 200){
+                  ElMessage({
+                    type: 'success',
+                    message: '删除成功'
+                  })
+                  await getData()
+                }else{
+                  ElMessage({
+                    type: 'warning',
+                    message: res.data.msg
+                  })
+                }
+              })
+              .catch(() => {});
+      };
+      // 分页改变
+      const onHandleSizeChange = (val: number) => {
+          state.listQuery.pageSize = val;
+          getData()
+      };
+      // 分页改变
+      const onHandleCurrentChange = (val: number) => {
+          state.listQuery.pageIndex = val;
+          getData()
+      };
+
+      const getAlarmType = (type: string)=>{
+        return state.alarmTypeList.find(i=>i.value == type)?.name
+      }
+      return {
+        reportRef,
+        getAlarmType,
+        openDialog,
+        getData,
+        onRowDel,
+        onHandleSizeChange,
+        onHandleCurrentChange,
+        ...toRefs(state)
+      };
+    }
+});
+</script>
+<style lang="scss" scoped>
+.home-container {
+  height: calc(100vh - 144px);
+  box-sizing: border-box;
+  overflow: hidden;
+  .demo-tabs {
+    width: 100%;
+    height: 100%;
+
+    &::v-deep(.el-tabs__content) {
+      height: calc(100% - 60px);
+    }
+
+    .el-tab-pane {
+      height: 100%;
+    }
+  }
+  .homeCard {
+    width: 100%;
+    padding: 20px;
+    box-sizing: border-box;
+    background: #fff;
+    border-radius: 4px;
+
+    .main-card {
+      width: 100%;
+      height: 100%;
+      .cardTop {
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        margin-bottom: 20px;
+        .mainCardBtn {
+          margin: 0;
+        }
+      }
+      .pageBtn {
+        height: 60px;
+        display: flex;
+        align-items: center;
+        justify-content: right;
+
+        .demo-pagination-block + .demo-pagination-block {
+          margin-top: 10px;
+        }
+        .demo-pagination-block .demonstration {
+          margin-bottom: 16px;
+        }
+      }
+    }
+    &:last-of-type {
+      height: calc(100% - 100px);
+    }
+  }
+  .el-row {
+    display: flex;
+    align-items: center;
+    margin-bottom: 20px;
+    &:last-child {
+      margin-bottom: 0;
+    }
+    .grid-content {
+      align-items: center;
+      min-height: 36px;
+    }
+
+    .topInfo {
+      display: flex;
+      align-items: center;
+      font-size: 16px;
+      font-weight: bold;
+
+      & > div {
+        white-space: nowrap;
+        margin-right: 20px;
+      }
+    }
+  }
+  .el-card {
+    border: 0;
+  }
+}
+</style>
diff --git a/src/views/dataUpload/saftyBaseInfo/cardInfo/components/addReport.vue b/src/views/dataUpload/saftyBaseInfo/cardInfo/components/addReport.vue
new file mode 100644
index 0000000..900f4e9
--- /dev/null
+++ b/src/views/dataUpload/saftyBaseInfo/cardInfo/components/addReport.vue
@@ -0,0 +1,172 @@
+<template>
+  <div class="system-add-user-container">
+    <el-dialog :title="title" v-model="isShowDialog" width="50%">
+      <el-form :model="form" size="default" ref="formRef" :rules="rules" label-width="120px">
+        <el-row :gutter="35">
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="证书名称" prop="name">
+              <el-input v-model.trim="form.name" placeholder="证书名称" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="分类名称" prop="cateName">
+              <el-input v-model.trim="form.cateName" placeholder="分类名称" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="发证机构" prop="orgName">
+              <el-input v-model.trim="form.orgName" placeholder="发证机构" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="发证日期">
+              <el-date-picker v-model="form.pusTime" value-format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择发证日期" style="width: 100%" />
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="有效期至">
+              <el-date-picker v-model="form.effectiveTime" value-format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择有效期至" style="width: 100%" />
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="到期提醒时间">
+              <el-date-picker v-model="form.dueTime" value-format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择到期提醒时间" style="width: 100%" />
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="提醒人" prop="notifyUser">
+              <el-input v-model.trim="form.notifyUser" placeholder="提醒人" clearable></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" v-throttle @click="onSubmit" size="default">确 定</el-button>
+        </span>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script lang="ts">
+import { reactive, toRefs, onMounted, defineComponent, ref } from 'vue';
+import { ElMessageBox, ElMessage } from 'element-plus';
+import axios from "axios";
+import {workApplyApi} from "/@/api/specialWorkSystem/workApply";
+import {judgeReportApi} from "/@/api/dataUpload/saftyBaseInfo/judgeReport";
+
+// 定义接口来定义对象的类型
+interface DataState {
+  title: string
+  isShowDialog: boolean
+  form: {
+    uuid: string
+    name: string
+    cateName: string
+    orgName: string
+    pusTime: string
+    effectiveTime: string
+    dueTime: string
+    notifyUser: string
+  }
+  rules:{}
+}
+
+export default defineComponent({
+  name: 'reportDialog',
+  setup(props, context) {
+    const formRef = ref()
+    const state = reactive<DataState>({
+      title: '',
+      isShowDialog: false,
+      form: {
+        uuid:'',
+        name: '',
+        cateName: '',
+        orgName: '',
+        pusTime: '',
+        effectiveTime: '',
+        dueTime: '',
+        notifyUser: ''
+      },
+      rules:{
+        name: [{ required: true, message: '请填写证书名称', trigger: 'blur' }],
+        cateName: [{ required: true, message: '请填写分类名称', trigger: 'blur' }],
+        orgName: [{ required: true, message: '请填写发证机构', trigger: 'blur' }],
+        notifyUser: [{ required: true, message: '请填写提醒人', trigger: 'blur' }]
+      }
+    })
+
+    // 页面加载时
+    onMounted(() => {
+
+    })
+    // 打开弹窗
+    const open = (type: string, data: object) => {
+      state.isShowDialog = true;
+      if (type === 'add') {
+        state.title = '新增上报';
+        state.form = {
+          uuid:'',
+          name: '',
+          cateName: '',
+          orgName: '',
+          pusTime: '',
+          effectiveTime: '',
+          dueTime: '',
+          notifyUser: ''
+        }
+      }else{
+        state.title = '重新上报';
+        state.form = {
+          uuid: data.uuid,
+          name: '',
+          cateName: '',
+          orgName: '',
+          pusTime: '',
+          effectiveTime: '',
+          dueTime: '',
+          notifyUser: ''
+        }
+      }
+    };
+
+    // 新增修改
+    const onSubmit = async () => {
+      formRef.value.validate(async (valid:Boolean) => {
+        if(valid){
+          const res = await judgeReportApi().addCard([state.form])
+          if(res.data.code == 200){
+            ElMessage({
+              type:'success',
+              message:'数据上报成功'
+            })
+            state.isShowDialog = false
+          }else{
+            ElMessage({
+              type:'warning',
+              message:res.data.msg
+            })
+          }
+          context.emit('refresh')
+        }else{
+          ElMessage({
+            type:'warning',
+            message:'请完善基本信息'
+          })
+        }
+      })
+    }
+
+
+    return {
+      formRef,
+      open,
+      onSubmit,
+      ...toRefs(state)
+    };
+  }
+});
+</script>
diff --git a/src/views/dataUpload/saftyBaseInfo/cardInfo/index.vue b/src/views/dataUpload/saftyBaseInfo/cardInfo/index.vue
new file mode 100644
index 0000000..be7b1e6
--- /dev/null
+++ b/src/views/dataUpload/saftyBaseInfo/cardInfo/index.vue
@@ -0,0 +1,219 @@
+<template>
+    <div class="home-container">
+        <div style="height: 100%">
+          <div class="homeCard">
+            <div class="main-card">
+            <el-row class="cardTop">
+              <el-col :span="12" class="mainCardBtn">
+                <el-button type="primary" icon="Plus" size="default" @click="openDialog('add',{})">新增</el-button>
+              </el-col>
+            </el-row>
+            <el-table :data="reportData" style="width: 100%" height="calc(100% - 48px)" :header-cell-style="{ background: '#fafafa' }">
+              <el-table-column prop="id" label="id" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="name" label="证书名称" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="cateName" label="分类名称" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="orgName" label="发证机构" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="pusTime" label="发证日期" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="effectiveTime" label="有效期至" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="dueTime" label="到期提醒时间" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="notifyUser" label="提醒人" show-overflow-tooltip></el-table-column>
+              <el-table-column label="操作" width="140">
+                  <template #default="scope">
+                      <el-button size="small" text type="primary" @click="openDialog('update',scope.row)">重新上报</el-button>
+                      <el-button style="color: red" size="small" text type="primary" @click="onRowDel(scope.row)">删除</el-button>
+                  </template>
+              </el-table-column>
+            </el-table>
+            <div class="pageBtn">
+              <el-pagination @size-change="onHandleSizeChange" small="false" @current-change="onHandleCurrentChange" class="page-position" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="listQuery.pageIndex" background v-model:page-size="listQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination>
+            </div>
+            </div>
+          </div>
+        </div>
+        <add-report ref="reportRef" @refresh="getData"></add-report>
+    </div>
+</template>
+
+<script lang="ts">
+import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue'
+import { ElMessageBox, ElMessage } from 'element-plus'
+import { Plus } from '@element-plus/icons-vue'
+import addReport from "./components/addReport.vue"
+import {judgeReportApi} from "/@/api/dataUpload/saftyBaseInfo/judgeReport";
+interface TableDataState {
+  reportData: [],
+  listQuery: {
+    searchParams: {}
+    pageIndex: number
+    pageSize: number
+  }
+  total: null | number
+}
+
+export default defineComponent({
+    name: 'cardInfo',
+    components: {addReport },
+    setup() {
+      const reportRef= ref();
+      const state = reactive<TableDataState>({
+        reportData: [],
+        listQuery: {
+          searchParams: {},
+          pageIndex: 1,
+          pageSize: 10
+        },
+        total: null
+      });
+
+      // 页面加载时
+      onMounted(() => {
+        getData()
+      });
+
+      const getData = async ()=>{
+        const res = await judgeReportApi().getCardList(state.listQuery)
+        if(res.data.code == 200){
+          state.reportData = res.data.data
+          state.total = res.data.total
+        }else{
+          ElMessage({
+            type: 'warning',
+            message: res.data.msg
+          })
+        }
+      }
+
+      const openDialog=(type:string,data:object)=>{
+        reportRef.value.open(type,data)
+      }
+
+      // 删除用户
+      const onRowDel = (row: Object) => {
+          ElMessageBox.confirm(`此操作将永久删除:“${row.name}”,是否继续?`, '提示', {
+              confirmButtonText: '确认',
+              cancelButtonText: '取消',
+              type: 'warning'
+          })
+              .then(async () => {
+                const res = await judgeReportApi().delCard({ids: [row.id]})
+                if(res.data.code == 200){
+                  ElMessage({
+                    type: 'success',
+                    message: '删除成功'
+                  })
+                  await getData()
+                }else{
+                  ElMessage({
+                    type: 'warning',
+                    message: res.data.msg
+                  })
+                }
+              })
+              .catch(() => {});
+      };
+      // 分页改变
+      const onHandleSizeChange = (val: number) => {
+          state.listQuery.pageSize = val;
+          getData()
+      };
+      // 分页改变
+      const onHandleCurrentChange = (val: number) => {
+          state.listQuery.pageIndex = val;
+          getData()
+      };
+
+      return {
+        reportRef,
+        openDialog,
+        getData,
+        onRowDel,
+        onHandleSizeChange,
+        onHandleCurrentChange,
+        ...toRefs(state)
+      };
+    }
+});
+</script>
+<style lang="scss" scoped>
+.home-container {
+  height: calc(100vh - 144px);
+  box-sizing: border-box;
+  overflow: hidden;
+  .demo-tabs {
+    width: 100%;
+    height: 100%;
+
+    &::v-deep(.el-tabs__content) {
+      height: calc(100% - 60px);
+    }
+
+    .el-tab-pane {
+      height: 100%;
+    }
+  }
+  .homeCard {
+    width: 100%;
+    padding: 20px;
+    box-sizing: border-box;
+    background: #fff;
+    border-radius: 4px;
+
+    .main-card {
+      width: 100%;
+      height: 100%;
+      .cardTop {
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        margin-bottom: 20px;
+        .mainCardBtn {
+          margin: 0;
+        }
+      }
+      .pageBtn {
+        height: 60px;
+        display: flex;
+        align-items: center;
+        justify-content: right;
+
+        .demo-pagination-block + .demo-pagination-block {
+          margin-top: 10px;
+        }
+        .demo-pagination-block .demonstration {
+          margin-bottom: 16px;
+        }
+      }
+    }
+    &:last-of-type {
+      height: calc(100% - 100px);
+    }
+  }
+  .el-row {
+    display: flex;
+    align-items: center;
+    margin-bottom: 20px;
+    &:last-child {
+      margin-bottom: 0;
+    }
+    .grid-content {
+      align-items: center;
+      min-height: 36px;
+    }
+
+    .topInfo {
+      display: flex;
+      align-items: center;
+      font-size: 16px;
+      font-weight: bold;
+
+      & > div {
+        white-space: nowrap;
+        margin-right: 20px;
+      }
+    }
+  }
+  .el-card {
+    border: 0;
+  }
+}
+</style>
diff --git a/src/views/dataUpload/saftyBaseInfo/certInfo/component/certificateDialog.vue b/src/views/dataUpload/saftyBaseInfo/certInfo/component/certificateDialog.vue
new file mode 100644
index 0000000..8a7cfcd
--- /dev/null
+++ b/src/views/dataUpload/saftyBaseInfo/certInfo/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/dataUpload/saftyBaseInfo/certInfo/component/certificateMember.vue b/src/views/dataUpload/saftyBaseInfo/certInfo/component/certificateMember.vue
new file mode 100644
index 0000000..33e53c4
--- /dev/null
+++ b/src/views/dataUpload/saftyBaseInfo/certInfo/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/dataUpload/saftyBaseInfo/certInfo/component/messages.vue b/src/views/dataUpload/saftyBaseInfo/certInfo/component/messages.vue
new file mode 100644
index 0000000..3db6d1a
--- /dev/null
+++ b/src/views/dataUpload/saftyBaseInfo/certInfo/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/dataUpload/saftyBaseInfo/certInfo/index.vue b/src/views/dataUpload/saftyBaseInfo/certInfo/index.vue
new file mode 100644
index 0000000..1c22508
--- /dev/null
+++ b/src/views/dataUpload/saftyBaseInfo/certInfo/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>
diff --git a/src/views/dataUpload/saftyBaseInfo/crowInfo/components/addReport.vue b/src/views/dataUpload/saftyBaseInfo/crowInfo/components/addReport.vue
new file mode 100644
index 0000000..b556190
--- /dev/null
+++ b/src/views/dataUpload/saftyBaseInfo/crowInfo/components/addReport.vue
@@ -0,0 +1,205 @@
+<template>
+  <div class="system-add-user-container">
+    <el-dialog :title="title" v-model="isShowDialog" width="50%">
+      <el-form :model="form" size="default" ref="formRef" :rules="rules" label-width="200px">
+        <el-row :gutter="35">
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="从业人数" prop="cyrs">
+              <el-input v-model.trim.number="form.cyrs" placeholder="从业人数" type="number" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="主要负责人" prop="zyfzr">
+              <el-input v-model.trim="form.zyfzr" placeholder="主要负责人" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="安全负责人" prop="aqfzr">
+              <el-input v-model.trim="form.aqfzr" placeholder="安全负责人" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="生产/经营地址" prop="scjydz">
+              <el-input v-model.trim="form.scjydz" :autosize="{ minRows: 1 }" type="textarea" placeholder="生产/经营地址" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="特殊作业人数" prop="specialNum">
+              <el-input v-model.trim.number="form.specialNum" placeholder="特殊作业人数" type="number" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="特殊作业证书到期人数" prop="specialCertExpireNum">
+              <el-input v-model.trim.number="form.specialCertExpireNum" placeholder="特殊作业证书到期人数" type="number" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="专职安全人员人数" prop="proSafeNum">
+              <el-input v-model.trim.number="form.proSafeNum" placeholder="专职安全人员人数" type="number" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="专职安全人员证书到期人数" prop="proSafeCertExpireNum">
+              <el-input v-model.trim.number="form.proSafeCertExpireNum" placeholder="专职安全人员证书到期人数" type="number" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="专职安全人员复审培训到期人数" prop="proSafeCheckTrainExpireNum">
+              <el-input v-model.trim.number="form.proSafeCheckTrainExpireNum" placeholder="专职安全人员复审培训到期人数" type="number" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="注册安全工程师人数" prop="registSafeNum">
+              <el-input v-model.trim.number="form.registSafeNum" placeholder="注册安全工程师人数" type="number" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="注册安全工程师证书到期人数" prop="registSafeCertExpireNum">
+              <el-input v-model.trim.number="form.registSafeCertExpireNum" placeholder="注册安全工程师证书到期人数" type="number" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="注册安全工程师复审培训到期人数" prop="registSafeCheckTrainExpireNum">
+              <el-input v-model.trim.number="form.registSafeCheckTrainExpireNum" placeholder="注册安全工程师复审培训到期人数" type="number" clearable></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" v-throttle @click="onSubmit" size="default">确 定</el-button>
+        </span>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script lang="ts">
+import { reactive, toRefs, onMounted, defineComponent, ref } from 'vue';
+import { ElMessageBox, ElMessage } from 'element-plus';
+import axios from "axios";
+import {workApplyApi} from "/@/api/specialWorkSystem/workApply";
+import {judgeReportApi} from "/@/api/dataUpload/saftyBaseInfo/judgeReport";
+
+// 定义接口来定义对象的类型
+interface DataState {
+  title: string
+  isShowDialog: boolean
+  form: {
+    cyrs: number | null
+    zyfzr: string
+    aqfzr: string
+    scjydz: string
+    specialNum: number | null
+    specialCertExpireNum: number | null
+    proSafeNum: number | null
+    proSafeCertExpireNum: number | null
+    proSafeCheckTrainExpireNum: number | null
+    registSafeNum: number | null
+    registSafeCertExpireNum: number | null
+    registSafeCheckTrainExpireNum: number | null
+  }
+  rules:{}
+}
+
+export default defineComponent({
+  name: 'reportDialog',
+  setup(props, context) {
+    const formRef = ref()
+    const state = reactive<DataState>({
+      title: '',
+      isShowDialog: false,
+      form: {
+        cyrs: null,
+        zyfzr: '',
+        aqfzr: '',
+        scjydz: '',
+        specialNum: null,
+        specialCertExpireNum: null,
+        proSafeNum: null,
+        proSafeCertExpireNum: null,
+        proSafeCheckTrainExpireNum: null,
+        registSafeNum: null,
+        registSafeCertExpireNum: null,
+        registSafeCheckTrainExpireNum: null
+      },
+      rules:{
+        cyrs: [{ required: true, message: '请填写从业人数', trigger: 'blur' }],
+        zyfzr: [{ required: true, message: '请填写主要负责人', trigger: 'blur' }],
+        aqfzr: [{ required: true, message: '请填写安全负责人', trigger: 'blur' }],
+        scjydz: [{ required: true, message: '请填写生产/经营地址', trigger: 'blur' }],
+        specialNum: [{ required: true, message: '请填写特殊作业人数', trigger: 'blur' }],
+        specialCertExpireNum: [{ required: true, message: '请填写特殊作业证书到期人数', trigger: 'blur' }],
+        proSafeNum: [{ required: true, message: '请填写专职安全人员人数', trigger: 'blur' }],
+        proSafeCertExpireNum: [{ required: true, message: '请填写专职安全人员证书到期人数', trigger: 'blur' }],
+        proSafeCheckTrainExpireNum: [{ required: true, message: '请填写专职安全人员复审培训到期人数', trigger: 'blur' }],
+        registSafeNum: [{ required: true, message: '请填写注册安全工程师人数', trigger: 'blur' }],
+        registSafeCertExpireNum: [{ required: true, message: '请填写注册安全工程师证书到期人数', trigger: 'blur' }],
+        registSafeCheckTrainExpireNum: [{ required: true, message: '请填写注册安全工程师复审培训到期人数', trigger: 'blur' }]
+      }
+    })
+
+    // 页面加载时
+    onMounted(() => {
+
+    })
+    // 打开弹窗
+    const open = (type: string, data: object) => {
+      state.isShowDialog = true;
+      if (type === 'add') {
+        state.title = '新增上报';
+        state.form = {
+          cyrs: null,
+          zyfzr: '',
+          aqfzr: '',
+          scjydz: '',
+          specialNum: null,
+          specialCertExpireNum: null,
+          proSafeNum: null,
+          proSafeCertExpireNum: null,
+          proSafeCheckTrainExpireNum: null,
+          registSafeNum: null,
+          registSafeCertExpireNum: null,
+          registSafeCheckTrainExpireNum: null
+        };
+      }
+    };
+
+    // 新增修改
+    const onSubmit = async () => {
+      formRef.value.validate(async (valid:Boolean) => {
+        if(valid){
+          const res = await judgeReportApi().addCrow(state.form)
+          if(res.data.code == 200){
+            ElMessage({
+              type:'success',
+              message:'数据上报成功'
+            })
+            state.isShowDialog = false
+          }else{
+            ElMessage({
+              type:'warning',
+              message:res.data.msg
+            })
+          }
+          context.emit('refresh')
+        }else{
+          ElMessage({
+            type:'warning',
+            message:'请完善基本信息'
+          })
+        }
+      })
+    }
+
+
+    return {
+      formRef,
+      open,
+      onSubmit,
+      ...toRefs(state)
+    };
+  }
+});
+</script>
diff --git a/src/views/dataUpload/saftyBaseInfo/crowInfo/index.vue b/src/views/dataUpload/saftyBaseInfo/crowInfo/index.vue
new file mode 100644
index 0000000..7531e0e
--- /dev/null
+++ b/src/views/dataUpload/saftyBaseInfo/crowInfo/index.vue
@@ -0,0 +1,223 @@
+<template>
+    <div class="home-container">
+        <div style="height: 100%">
+          <div class="homeCard">
+            <div class="main-card">
+            <el-row class="cardTop">
+              <el-col :span="12" class="mainCardBtn">
+                <el-button type="primary" icon="Plus" size="default" @click="openDialog('add',{})">新增</el-button>
+              </el-col>
+            </el-row>
+            <el-table :data="reportData" style="width: 100%" height="calc(100% - 48px)" :header-cell-style="{ background: '#fafafa' }">
+              <el-table-column prop="id" label="id" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="cyrs" label="从业人数" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="zyfzr" label="主要负责人" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="aqfzr" label="安全负责人" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="scjydz" label="生产/经营地址" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="specialNum" label="特种作业人数" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="specialCertExpireNum" label="特种作业证书到期人数" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="proSafeNum" label="专职安全人员人数" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="proSafeCertExpireNum" label="专职安全人员证书到期人数" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="proSafeCheckTrainExpireNum" label="专职安全人员复审培训到期人数" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="registSafeNum" label="注册安全工程师人数" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="registSafeCertExpireNum" label="注册安全工程师证书到期人数" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="registSafeCheckTrainExpireNum" label="注册安全工程师复审培训到期人数" show-overflow-tooltip></el-table-column>
+              <el-table-column label="操作" width="140">
+                  <template #default="scope">
+                      <el-button style="color: red" size="small" text type="primary" @click="onRowDel(scope.row)">删除</el-button>
+                  </template>
+              </el-table-column>
+            </el-table>
+            <div class="pageBtn">
+              <el-pagination @size-change="onHandleSizeChange" small="false" @current-change="onHandleCurrentChange" class="page-position" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="listQuery.pageIndex" background v-model:page-size="listQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination>
+            </div>
+            </div>
+          </div>
+        </div>
+        <add-report ref="reportRef" @refresh="getData"></add-report>
+    </div>
+</template>
+
+<script lang="ts">
+import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue'
+import { ElMessageBox, ElMessage } from 'element-plus'
+import { Plus } from '@element-plus/icons-vue'
+import addReport from "./components/addReport.vue"
+import {judgeReportApi} from "/@/api/dataUpload/saftyBaseInfo/judgeReport";
+interface TableDataState {
+  reportData: [],
+  listQuery: {
+    searchParams: {}
+    pageIndex: number
+    pageSize: number
+  }
+  total: null | number
+}
+
+export default defineComponent({
+    name: 'crowInfo',
+    components: {addReport },
+    setup() {
+      const reportRef= ref();
+      const state = reactive<TableDataState>({
+        reportData: [],
+        listQuery: {
+          searchParams: {},
+          pageIndex: 1,
+          pageSize: 10
+        },
+        total: null
+      });
+
+      // 页面加载时
+      onMounted(() => {
+        getData()
+      });
+
+      const getData = async ()=>{
+        const res = await judgeReportApi().getCrowList(state.listQuery)
+        if(res.data.code == 200){
+          state.reportData = res.data.data
+          state.total = res.data.total
+        }else{
+          ElMessage({
+            type: 'warning',
+            message: res.data.msg
+          })
+        }
+      }
+
+      const openDialog=(type:string,data:object)=>{
+        reportRef.value.open(type,data)
+      }
+
+      // 删除用户
+      const onRowDel = (row: Object) => {
+          ElMessageBox.confirm(`此操作将永久删除该条数据,是否继续?`, '提示', {
+              confirmButtonText: '确认',
+              cancelButtonText: '取消',
+              type: 'warning'
+          })
+              .then(async () => {
+                const res = await judgeReportApi().delCrow({ids: [row.id]})
+                if(res.data.code == 200){
+                  ElMessage({
+                    type: 'success',
+                    message: '删除成功'
+                  })
+                  await getData()
+                }else{
+                  ElMessage({
+                    type: 'warning',
+                    message: res.data.msg
+                  })
+                }
+              })
+              .catch(() => {});
+      };
+      // 分页改变
+      const onHandleSizeChange = (val: number) => {
+          state.listQuery.pageSize = val;
+          getData()
+      };
+      // 分页改变
+      const onHandleCurrentChange = (val: number) => {
+          state.listQuery.pageIndex = val;
+          getData()
+      };
+
+      return {
+        reportRef,
+        openDialog,
+        getData,
+        onRowDel,
+        onHandleSizeChange,
+        onHandleCurrentChange,
+        ...toRefs(state)
+      };
+    }
+});
+</script>
+<style lang="scss" scoped>
+.home-container {
+  height: calc(100vh - 144px);
+  box-sizing: border-box;
+  overflow: hidden;
+  .demo-tabs {
+    width: 100%;
+    height: 100%;
+
+    &::v-deep(.el-tabs__content) {
+      height: calc(100% - 60px);
+    }
+
+    .el-tab-pane {
+      height: 100%;
+    }
+  }
+  .homeCard {
+    width: 100%;
+    padding: 20px;
+    box-sizing: border-box;
+    background: #fff;
+    border-radius: 4px;
+
+    .main-card {
+      width: 100%;
+      height: 100%;
+      .cardTop {
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        margin-bottom: 20px;
+        .mainCardBtn {
+          margin: 0;
+        }
+      }
+      .pageBtn {
+        height: 60px;
+        display: flex;
+        align-items: center;
+        justify-content: right;
+
+        .demo-pagination-block + .demo-pagination-block {
+          margin-top: 10px;
+        }
+        .demo-pagination-block .demonstration {
+          margin-bottom: 16px;
+        }
+      }
+    }
+    &:last-of-type {
+      height: calc(100% - 100px);
+    }
+  }
+  .el-row {
+    display: flex;
+    align-items: center;
+    margin-bottom: 20px;
+    &:last-child {
+      margin-bottom: 0;
+    }
+    .grid-content {
+      align-items: center;
+      min-height: 36px;
+    }
+
+    .topInfo {
+      display: flex;
+      align-items: center;
+      font-size: 16px;
+      font-weight: bold;
+
+      & > div {
+        white-space: nowrap;
+        margin-right: 20px;
+      }
+    }
+  }
+  .el-card {
+    border: 0;
+  }
+}
+</style>
diff --git a/src/views/dataUpload/saftyBaseInfo/equipInfo/components/addReport.vue b/src/views/dataUpload/saftyBaseInfo/equipInfo/components/addReport.vue
new file mode 100644
index 0000000..da55976
--- /dev/null
+++ b/src/views/dataUpload/saftyBaseInfo/equipInfo/components/addReport.vue
@@ -0,0 +1,305 @@
+<template>
+  <div class="system-add-user-container">
+    <el-dialog :title="title" v-model="isShowDialog" width="50%">
+      <el-form :model="form" size="default" ref="formRef" :rules="rules" label-width="120px">
+        <el-row :gutter="35">
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="编号" prop="no">
+              <el-input v-model.trim="form.no" placeholder="编号" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="设备名称" prop="name">
+              <el-input v-model.trim="form.name" placeholder="设备名称" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="分类" prop="cateName">
+              <el-input v-model.trim="form.cateName" placeholder="分类名称" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="型号" prop="model">
+              <el-input v-model.trim="form.model" placeholder="型号" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="出厂时间">
+              <el-date-picker v-model="form.productionTime" value-format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择出厂时间" style="width: 100%" />
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="是否特种设备">
+              <el-radio-group v-model="form.isSpecial">
+                <el-radio :label="0">是</el-radio>
+                <el-radio :label="1">否</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="是否注册登记">
+              <el-radio-group v-model="form.isRegister">
+                <el-radio :label="0">是</el-radio>
+                <el-radio :label="1">否</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="注册登记编号" prop="registerNo">
+              <el-input v-model.trim="form.registerNo" placeholder="注册登记编号" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="设备状况">
+              <el-select v-model="form.status" placeholder="请选择设备状况">
+                <el-option :key="1" label="1" :value="1"/>
+                <el-option :key="2" label="2" :value="2"/>
+                <el-option :key="3" label="3" :value="3"/>
+              </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="注册登记表">
+              <el-input v-model.trim="form.registerTable" placeholder="注册登记表" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="检验状态">
+              <el-select v-model="form.checkStatus" placeholder="请选择检验状态">
+                <el-option :key="1" label="1" :value="1"/>
+                <el-option :key="2" label="2" :value="2"/>
+                <el-option :key="3" label="3" :value="3"/>
+              </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="下次检验时间">
+              <el-date-picker v-model="form.nextCheckTime" value-format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择下次检验时间" style="width: 100%" />
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="上次校验时间">
+              <el-date-picker v-model="form.lastCheckTime" value-format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择上次校验时间" style="width: 100%" />
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="附件">
+              <el-upload accept=".pdf" :action="uploadUrl" :headers="header" method="post" :on-exceed="showTip" :on-success="handleAvatarSuccess" :limit='1' v-model:file-list="fileList" :before-upload="picSize" :on-remove="handleRemove" :before-remove="beforeRemove">
+                <el-button type="primary">点击上传</el-button>
+                <template #tip>
+                  <div class="el-upload__tip">仅支持上传pdf文件,尺寸小于2M,最多可上传1张</div>
+                </template>
+              </el-upload>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <template #footer>
+        <span class="dialog-footer">
+            <el-button @click="isShowDialog = !isShowDialog" size="default">取 消</el-button>
+            <el-button type="primary" v-throttle @click="onSubmit" size="default">确 定</el-button>
+        </span>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script lang="ts">
+import { reactive, toRefs, onMounted, defineComponent, ref } from 'vue';
+import { ElMessageBox, ElMessage } from 'element-plus';
+import axios from "axios";
+import {workApplyApi} from "/@/api/specialWorkSystem/workApply";
+import {judgeReportApi} from "/@/api/dataUpload/saftyBaseInfo/judgeReport";
+import Cookies from "js-cookie";
+
+// 定义接口来定义对象的类型
+interface DataState {
+  title: string
+  isShowDialog: boolean
+  form: {
+    uuid: string
+    no: string
+    name: string
+    cateName: string
+    model: string
+    productionTime: string
+    isSpecial: number | null
+    isRegister: number | null
+    registerNo: string
+    status: number | null
+    registerTable: string
+    checkStatus: number | null
+    nextCheckTime: string
+    lastCheckTime: string
+    files: string
+  }
+  rules:{}
+  fileList: [],
+  uploadUrl: string,
+  header: {}
+}
+
+export default defineComponent({
+  name: 'reportDialog',
+  setup(props, context) {
+    const formRef = ref()
+    const state = reactive<DataState>({
+      title: '',
+      isShowDialog: false,
+      form: {
+        uuid: '',
+        no: '',
+        name: '',
+        cateName: '',
+        model: '',
+        productionTime: '',
+        isSpecial: null,
+        isRegister: null,
+        registerNo: '',
+        status: null,
+        registerTable: '',
+        checkStatus: null,
+        nextCheckTime: '',
+        lastCheckTime: '',
+        files: ''
+      },
+      rules:{
+        no: [{ required: true, message: '请填写编号', trigger: 'blur' }],
+        name: [{ required: true, message: '请填写设备名称', trigger: 'blur' }],
+        cateName: [{ required: true, message: '请填写分类名称', trigger: 'blur' }],
+        model: [{ required: true, message: '请填写型号', trigger: 'blur' }],
+        registerNo: [{ required: true, message: '请填写注册登记编号', trigger: 'blur' }]
+      },
+      fileList: [],
+      uploadUrl: import.meta.env.VITE_API_URL + '/account/file/upload',
+      header: {
+        uid: Cookies.get('uid'),
+        Authorization: Cookies.get('token')
+      }
+    })
+
+    // 页面加载时
+    onMounted(() => {
+
+    })
+    // 打开弹窗
+    const open = (type: string, data: object) => {
+      state.isShowDialog = true;
+      if (type === 'add') {
+        state.title = '新增上报';
+        state.form = {
+          uuid:'',
+          no: '',
+          name: '',
+          cateName: '',
+          model: '',
+          productionTime: '',
+          isSpecial: null,
+          isRegister: null,
+          registerNo: '',
+          status: null,
+          registerTable: '',
+          checkStatus: null,
+          nextCheckTime: '',
+          lastCheckTime: '',
+          files: ''
+        }
+      }else{
+        state.title = '重新上报';
+        state.form = {
+          uuid: data.uuid,
+          no: '',
+          name: '',
+          cateName: '',
+          model: '',
+          productionTime: '',
+          isSpecial: null,
+          isRegister: null,
+          registerNo: '',
+          status: null,
+          registerTable: '',
+          checkStatus: null,
+          nextCheckTime: '',
+          lastCheckTime: '',
+          files: ''
+        }
+      }
+      state.fileList = []
+    };
+
+    // 新增修改
+    const onSubmit = async () => {
+      formRef.value.validate(async (valid:Boolean) => {
+        if(valid){
+          const res = await judgeReportApi().addEquip([state.form])
+          if(res.data.code == 200){
+            ElMessage({
+              type:'success',
+              message:'数据上报成功'
+            })
+            state.isShowDialog = false
+            state.fileList = []
+          }else{
+            ElMessage({
+              type:'warning',
+              message:res.data.msg
+            })
+          }
+          context.emit('refresh')
+        }else{
+          ElMessage({
+            type:'warning',
+            message:'请完善基本信息'
+          })
+        }
+      })
+    }
+
+    // 图片上传
+    const showTip =()=>{
+      ElMessage({
+        type: 'warning',
+        message: '超出文件上传数量'
+      });
+    }
+
+    const picSize = async(rawFile: any) => {
+      if(rawFile.size / 1024 / 1024 > 2){
+        ElMessage({
+          type: 'warning',
+          message: '文件大小不能超过2M'
+        });
+        return false
+      }
+    }
+
+    const handleAvatarSuccess = (res:any, uploadFile: any) => {
+      if(res){
+        uploadFile.name = res
+        state.form.files = res
+      }else{
+        ElMessage({
+          type: 'warning',
+          message: '文件上传失败'
+        })
+      }
+    }
+
+    const handleRemove = (file, uploadFiles,type) => {
+      state.form.files = ''
+    }
+
+
+    return {
+      formRef,
+      showTip,
+      picSize,
+      handleAvatarSuccess,
+      handleRemove,
+      open,
+      onSubmit,
+      ...toRefs(state)
+    };
+  }
+});
+</script>
diff --git a/src/views/dataUpload/saftyBaseInfo/equipInfo/index.vue b/src/views/dataUpload/saftyBaseInfo/equipInfo/index.vue
new file mode 100644
index 0000000..36f709b
--- /dev/null
+++ b/src/views/dataUpload/saftyBaseInfo/equipInfo/index.vue
@@ -0,0 +1,258 @@
+<template>
+    <div class="home-container">
+        <div style="height: 100%">
+          <div class="homeCard">
+            <div class="main-card">
+            <el-row class="cardTop">
+              <el-col :span="12" class="mainCardBtn">
+                <el-button type="primary" icon="Plus" size="default" @click="openDialog('add',{})">新增</el-button>
+              </el-col>
+            </el-row>
+            <el-table :data="reportData" style="width: 100%" height="calc(100% - 48px)" :header-cell-style="{ background: '#fafafa' }">
+              <el-table-column prop="id" label="id" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="no" label="编号" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="name" label="设备名称" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="cateName" label="分类" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="model" label="型号" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="productionTime" label="出厂时间" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="isSpecial" label="是否特种设备" show-overflow-tooltip>
+                <template #default="scope">
+                  {{scope.row.isSpecial == 0?'是':scope.row.isSpecial == 1?'否':''}}
+                </template>
+              </el-table-column>
+              <el-table-column prop="isRegister" label="是否注册登记" show-overflow-tooltip>
+                <template #default="scope">
+                  {{scope.row.isSpecial == 0?'是':scope.row.isSpecial == 1?'否':''}}
+                </template>
+              </el-table-column>
+              <el-table-column prop="registerNo" label="注册登记编号" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="status" label="设备状况" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="files" label="附件" show-overflow-tooltip>
+                <template #default="scope">
+                  <el-button v-if="scope.row.files !== ''" size="small" text type="primary" @click="openFile(scope.row.files)">查看</el-button>
+                </template>
+              </el-table-column>
+              <el-table-column prop="registerTable" label="注册等级表" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="checkStatus" label="检验状态" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="nextCheckTime" label="下次检验时间" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="lastCheckTime" label="上次校验时间" show-overflow-tooltip></el-table-column>
+              <el-table-column label="操作" width="140">
+                  <template #default="scope">
+                      <el-button size="small" text type="primary" @click="openDialog('update',scope.row)">重新上报</el-button>
+                      <el-button style="color: red" size="small" text type="primary" @click="onRowDel(scope.row)">删除</el-button>
+                  </template>
+              </el-table-column>
+            </el-table>
+            <div class="pageBtn">
+              <el-pagination @size-change="onHandleSizeChange" small="false" @current-change="onHandleCurrentChange" class="page-position" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="listQuery.pageIndex" background v-model:page-size="listQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination>
+            </div>
+            </div>
+          </div>
+        </div>
+        <add-report ref="reportRef" @refresh="getData"></add-report>
+    </div>
+</template>
+
+<script lang="ts">
+import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue'
+import { ElMessageBox, ElMessage } from 'element-plus'
+import { Plus } from '@element-plus/icons-vue'
+import addReport from "./components/addReport.vue"
+import {judgeReportApi} from "/@/api/dataUpload/saftyBaseInfo/judgeReport";
+import axios from "axios";
+import Cookies from "js-cookie";
+interface TableDataState {
+  reportData: [],
+  listQuery: {
+    searchParams: {}
+    pageIndex: number
+    pageSize: number
+  }
+  total: null | number
+}
+
+export default defineComponent({
+    name: 'equipInfo',
+    components: {addReport },
+    setup() {
+      const reportRef= ref();
+      const state = reactive<TableDataState>({
+        reportData: [],
+        listQuery: {
+          searchParams: {},
+          pageIndex: 1,
+          pageSize: 10
+        },
+        total: null
+      });
+
+      // 页面加载时
+      onMounted(() => {
+        getData()
+      });
+
+      const getData = async ()=>{
+        const res = await judgeReportApi().getEquipList(state.listQuery)
+        if(res.data.code == 200){
+          state.reportData = res.data.data
+          state.total = res.data.total
+        }else{
+          ElMessage({
+            type: 'warning',
+            message: res.data.msg
+          })
+        }
+      }
+
+      const openDialog=(type:string,data:object)=>{
+        reportRef.value.open(type,data)
+      }
+
+      // 删除用户
+      const onRowDel = (row: Object) => {
+          ElMessageBox.confirm(`此操作将永久删除:“${row.name}”,是否继续?`, '提示', {
+              confirmButtonText: '确认',
+              cancelButtonText: '取消',
+              type: 'warning'
+          })
+              .then(async () => {
+                const res = await judgeReportApi().delEquip({ids: [row.id]})
+                if(res.data.code == 200){
+                  ElMessage({
+                    type: 'success',
+                    message: '删除成功'
+                  })
+                  await getData()
+                }else{
+                  ElMessage({
+                    type: 'warning',
+                    message: res.data.msg
+                  })
+                }
+              })
+              .catch(() => {});
+      };
+      // 分页改变
+      const onHandleSizeChange = (val: number) => {
+          state.listQuery.pageSize = val;
+          getData()
+      };
+      // 分页改变
+      const onHandleCurrentChange = (val: number) => {
+          state.listQuery.pageIndex = val;
+          getData()
+      };
+
+      const openFile=(file: string)=>{
+        axios.get(import.meta.env.VITE_API_URL + file,{headers:{'Content-Type': 'application/json','Authorization': `${Cookies.get('token')}`,'uid':`${Cookies.get('uid')}`},responseType: 'blob'}).then(res=>{
+          if (res) {
+            const link = document.createElement('a')
+            let blob = new Blob([res.data],{type: 'application/pdf'})
+            link.style.display = "none";
+            link.href = URL.createObjectURL(blob); // 创建URL
+            window.open(link.href)
+          } else {
+            ElMessage({
+              type: 'warning',
+              message: '文件读取失败'
+            });
+          }
+        })
+      }
+
+      return {
+        reportRef,
+        openDialog,
+        getData,
+        onRowDel,
+        onHandleSizeChange,
+        onHandleCurrentChange,
+        openFile,
+        ...toRefs(state)
+      };
+    }
+});
+</script>
+<style lang="scss" scoped>
+.home-container {
+  height: calc(100vh - 144px);
+  box-sizing: border-box;
+  overflow: hidden;
+  .demo-tabs {
+    width: 100%;
+    height: 100%;
+
+    &::v-deep(.el-tabs__content) {
+      height: calc(100% - 60px);
+    }
+
+    .el-tab-pane {
+      height: 100%;
+    }
+  }
+  .homeCard {
+    width: 100%;
+    padding: 20px;
+    box-sizing: border-box;
+    background: #fff;
+    border-radius: 4px;
+
+    .main-card {
+      width: 100%;
+      height: 100%;
+      .cardTop {
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        margin-bottom: 20px;
+        .mainCardBtn {
+          margin: 0;
+        }
+      }
+      .pageBtn {
+        height: 60px;
+        display: flex;
+        align-items: center;
+        justify-content: right;
+
+        .demo-pagination-block + .demo-pagination-block {
+          margin-top: 10px;
+        }
+        .demo-pagination-block .demonstration {
+          margin-bottom: 16px;
+        }
+      }
+    }
+    &:last-of-type {
+      height: calc(100% - 100px);
+    }
+  }
+  .el-row {
+    display: flex;
+    align-items: center;
+    margin-bottom: 20px;
+    &:last-child {
+      margin-bottom: 0;
+    }
+    .grid-content {
+      align-items: center;
+      min-height: 36px;
+    }
+
+    .topInfo {
+      display: flex;
+      align-items: center;
+      font-size: 16px;
+      font-weight: bold;
+
+      & > div {
+        white-space: nowrap;
+        margin-right: 20px;
+      }
+    }
+  }
+  .el-card {
+    border: 0;
+  }
+}
+</style>
diff --git a/src/views/dataUpload/saftyBaseInfo/judgeReport/components/addReport.vue b/src/views/dataUpload/saftyBaseInfo/judgeReport/components/addReport.vue
new file mode 100644
index 0000000..29526a9
--- /dev/null
+++ b/src/views/dataUpload/saftyBaseInfo/judgeReport/components/addReport.vue
@@ -0,0 +1,199 @@
+<template>
+  <div class="system-add-user-container">
+    <el-dialog :title="title" v-model="isShowDialog" width="50%">
+      <el-form :model="form" size="default" ref="formRef" :rules="rules" label-width="120px">
+        <el-row :gutter="35">
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="报告名称" prop="name">
+              <el-input v-model.trim="form.name" placeholder="报告名称" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="备注" prop="remarks">
+              <el-input v-model.trim="form.remarks" :autosize="{ minRows: 1 }" type="textarea" placeholder="备注" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="评价时间" prop="evaluateTime">
+              <el-date-picker v-model="form.evaluateTime" value-format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择评价时间" style="width: 100%" />
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="附件">
+              <el-upload accept=".pdf" :action="uploadUrl" :headers="header" method="post" :on-exceed="showTip" :on-success="handleAvatarSuccess" :limit='1' v-model:file-list="fileList" :before-upload="picSize" :on-remove="handleRemove" :before-remove="beforeRemove">
+                <el-button type="primary">点击上传</el-button>
+                <template #tip>
+                  <div class="el-upload__tip">仅支持上传pdf文件,尺寸小于2M,最多可上传1张</div>
+                </template>
+              </el-upload>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <template #footer>
+        <span class="dialog-footer">
+            <el-button @click="isShowDialog = !isShowDialog" size="default">取 消</el-button>
+            <el-button type="primary" v-throttle @click="onSubmit" size="default">确 定</el-button>
+        </span>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script lang="ts">
+import { reactive, toRefs, onMounted, defineComponent, ref } from 'vue';
+import { ElMessageBox, ElMessage } from 'element-plus';
+import axios from "axios";
+import {workApplyApi} from "/@/api/specialWorkSystem/workApply";
+import {userApi} from '/@/api/systemManage/user'
+import Cookies from "js-cookie";
+import {judgeReportApi} from "/@/api/dataUpload/saftyBaseInfo/judgeReport";
+
+// 定义接口来定义对象的类型
+interface DataState {
+  title: string;
+  isShowDialog: boolean;
+  form: {
+    uuid: string
+    name: string
+    remarks: string
+    evaluateTime: string
+    files: string
+  }
+  rules:{},
+  fileList: [],
+  uploadUrl: string,
+  header: {}
+}
+
+export default defineComponent({
+  name: 'reportDialog',
+  setup(props, context) {
+    const formRef = ref()
+    const state = reactive<DataState>({
+      title: '',
+      isShowDialog: false,
+      form: {
+        uuid: '',
+        name: '',
+        remarks: '',
+        evaluateTime: '',
+        files: ''
+      },
+      rules:{
+        name: [{ required: true, message: '请填写报告名称', trigger: 'blur'}],
+        remarks: [{ required: true, message: '请填写备注', trigger: 'blur'}],
+        evaluateTime: [{ required: true, message: '请选择评价时间', trigger: 'blur'}]
+      },
+      fileList: [],
+      uploadUrl: import.meta.env.VITE_API_URL + '/account/file/upload',
+      header: {
+        uid: Cookies.get('uid'),
+        Authorization: Cookies.get('token')
+      }
+    })
+
+    // 页面加载时
+    onMounted(() => {
+
+    })
+    // 打开弹窗
+    const open = (type: string, data: object) => {
+      state.isShowDialog = true;
+      if (type === 'add') {
+        state.title = '新增上报';
+        state.form = {
+          uuid: '',
+          name: '',
+          remarks: '',
+          evaluateTime: '',
+          files: ''
+        }
+      }else{
+        state.title = '重新上报';
+        state.form = {
+          uuid: data.uuid,
+          name: '',
+          remarks: '',
+          evaluateTime: '',
+          files: ''
+        }
+      }
+      state.fileList = []
+    };
+
+    // 图片上传
+    const showTip =()=>{
+      ElMessage({
+        type: 'warning',
+        message: '超出文件上传数量'
+      });
+    }
+
+    const picSize = async(rawFile: any) => {
+      if(rawFile.size / 1024 / 1024 > 2){
+        ElMessage({
+          type: 'warning',
+          message: '文件大小不能超过2M'
+        });
+        return false
+      }
+    }
+
+    const handleAvatarSuccess = (res:any, uploadFile: any) => {
+      if(res){
+          uploadFile.name = res
+          state.form.files = res
+      }else{
+        ElMessage({
+          type: 'warning',
+          message: '文件上传失败'
+        })
+      }
+    }
+
+    const handleRemove = (file, uploadFiles,type) => {
+      state.form.files = ''
+    }
+
+    // 新增修改
+    const onSubmit = async () => {
+      formRef.value.validate(async (valid:Boolean) => {
+        if(valid){
+            const res = await judgeReportApi().addJudge([state.form])
+            if(res.data.code == '200'){
+              ElMessage({
+                type:'success',
+                message:'数据上报成功'
+              })
+              state.isShowDialog = false
+              state.fileList = []
+            }else{
+              ElMessage({
+                type:'warning',
+                message:res.data.msg
+              })
+            }
+            context.emit('refresh');
+        }else{
+          ElMessage({
+            type:'warning',
+            message:'请完善基本信息'
+          })
+        }
+      })
+    }
+
+    return {
+      formRef,
+      showTip,
+      picSize,
+      handleAvatarSuccess,
+      handleRemove,
+      open,
+      onSubmit,
+      ...toRefs(state)
+    };
+  }
+});
+</script>
diff --git a/src/views/dataUpload/saftyBaseInfo/judgeReport/index.vue b/src/views/dataUpload/saftyBaseInfo/judgeReport/index.vue
new file mode 100644
index 0000000..bf72612
--- /dev/null
+++ b/src/views/dataUpload/saftyBaseInfo/judgeReport/index.vue
@@ -0,0 +1,251 @@
+<template>
+    <div class="home-container">
+        <div style="height: 100%">
+          <div class="homeCard">
+            <div class="main-card">
+            <el-row class="cardTop">
+              <el-col :span="12" class="mainCardBtn">
+                <el-button type="primary" icon="Plus" size="default" @click="openDialog('add',{})">新增</el-button>
+              </el-col>
+            </el-row>
+            <el-table :data="reportData" style="width: 100%" height="calc(100% - 48px)" :header-cell-style="{ background: '#fafafa' }">
+                <el-table-column prop="id" label="id" show-overflow-tooltip></el-table-column>
+                <el-table-column prop="createTime" label="上报时间" show-overflow-tooltip></el-table-column>
+                <el-table-column prop="name" label="报告名称" show-overflow-tooltip></el-table-column>
+                <el-table-column prop="remarks" label="备注" show-overflow-tooltip></el-table-column>
+                <el-table-column prop="evaluateTime" label="评价时间" show-overflow-tooltip></el-table-column>
+                <el-table-column prop="files" label="附件" show-overflow-tooltip>
+                  <template #default="scope">
+                    <el-button v-if="scope.row.files !== ''" size="small" text type="primary" @click="openFile(scope.row.files)">查看</el-button>
+                  </template>
+                </el-table-column>
+                <el-table-column label="操作" width="140">
+                    <template #default="scope">
+                        <el-button size="small" text type="primary" @click="openDialog('update',scope.row)">重新上报</el-button>
+                        <el-button style="color: red" size="small" text type="primary" @click="onRowDel(scope.row)">删除</el-button>
+                    </template>
+                </el-table-column>
+            </el-table>
+            <div class="pageBtn">
+              <el-pagination @size-change="onHandleSizeChange" small="false" @current-change="onHandleCurrentChange" class="page-position" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="listQuery.pageIndex" background v-model:page-size="listQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination>
+            </div>
+            </div>
+          </div>
+        </div>
+        <add-report ref="reportRef" @refresh="getData"></add-report>
+    </div>
+</template>
+
+<script lang="ts">
+import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue'
+import { ElMessageBox, ElMessage } from 'element-plus'
+import { Plus } from '@element-plus/icons-vue'
+import addReport from "./components/addReport.vue"
+import {judgeReportApi} from "/@/api/dataUpload/saftyBaseInfo/judgeReport";
+import axios from "axios";
+import Cookies from "js-cookie";
+
+// 定义接口来定义对象的类型
+interface TableDataRow {
+  id: number|null
+  reportTime: string
+  name: string
+  remarks: string
+  evaluateTime: string
+  files: string
+}
+interface TableDataState {
+  reportData: [],
+  listQuery: {
+    searchParams: {}
+    pageIndex: number
+    pageSize: number
+  }
+  total: null | number
+}
+
+export default defineComponent({
+    name: 'judgeReport',
+    components: {addReport },
+    setup() {
+      const reportRef= ref();
+      const state = reactive<TableDataState>({
+        reportData: [],
+        listQuery: {
+          searchParams: {},
+          pageIndex: 1,
+          pageSize: 10
+        },
+        total: null
+      });
+
+      // 页面加载时
+      onMounted(() => {
+        getData()
+      });
+
+      const getData = async ()=>{
+        const res = await judgeReportApi().getJudgeList(state.listQuery)
+        if(res.data.code == 200){
+          state.reportData = res.data.data
+          state.total = res.data.total
+        }else{
+          ElMessage({
+            type: 'warning',
+            message: res.data.msg
+          })
+        }
+      }
+
+      const openDialog=(type:string,data:object)=>{
+        reportRef.value.open(type,data)
+      }
+
+      const openFile=(file: string)=>{
+        axios.get(import.meta.env.VITE_API_URL + file,{headers:{'Content-Type': 'application/json','Authorization': `${Cookies.get('token')}`,'uid':`${Cookies.get('uid')}`},responseType: 'blob'}).then(res=>{
+          if (res) {
+            const link = document.createElement('a')
+            let blob = new Blob([res.data],{type: 'application/pdf'})
+            link.style.display = "none";
+            link.href = URL.createObjectURL(blob); // 创建URL
+            window.open(link.href)
+          } else {
+            ElMessage({
+              type: 'warning',
+              message: '文件读取失败'
+            });
+          }
+        })
+      }
+
+      // 删除用户
+      const onRowDel = (row: TableDataRow) => {
+          ElMessageBox.confirm(`此操作将永久删除报告名称:“${row.name}”,是否继续?`, '提示', {
+              confirmButtonText: '确认',
+              cancelButtonText: '取消',
+              type: 'warning'
+          })
+              .then(async () => {
+                const res = await judgeReportApi().delJudge({ids: [row.id]})
+                if(res.data.code == '200'){
+                  ElMessage({
+                    type: 'success',
+                    message: '删除成功'
+                  })
+                  await getData()
+                }else{
+                  ElMessage({
+                    type: 'warning',
+                    message: res.data.msg
+                  })
+                }
+              })
+              .catch(() => {});
+      };
+      // 分页改变
+      const onHandleSizeChange = (val: number) => {
+          state.listQuery.pageSize = val;
+          getData()
+      };
+      // 分页改变
+      const onHandleCurrentChange = (val: number) => {
+          state.listQuery.pageIndex = val;
+          getData()
+      };
+
+      return {
+        reportRef,
+        openFile,
+        openDialog,
+        getData,
+        onRowDel,
+        onHandleSizeChange,
+        onHandleCurrentChange,
+        ...toRefs(state)
+      };
+    }
+});
+</script>
+<style lang="scss" scoped>
+.home-container {
+  height: calc(100vh - 144px);
+  box-sizing: border-box;
+  overflow: hidden;
+  .demo-tabs {
+    width: 100%;
+    height: 100%;
+
+    &::v-deep(.el-tabs__content) {
+      height: calc(100% - 60px);
+    }
+
+    .el-tab-pane {
+      height: 100%;
+    }
+  }
+  .homeCard {
+    width: 100%;
+    padding: 20px;
+    box-sizing: border-box;
+    background: #fff;
+    border-radius: 4px;
+
+    .main-card {
+      width: 100%;
+      height: 100%;
+      .cardTop {
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        margin-bottom: 20px;
+        .mainCardBtn {
+          margin: 0;
+        }
+      }
+      .pageBtn {
+        height: 60px;
+        display: flex;
+        align-items: center;
+        justify-content: right;
+
+        .demo-pagination-block + .demo-pagination-block {
+          margin-top: 10px;
+        }
+        .demo-pagination-block .demonstration {
+          margin-bottom: 16px;
+        }
+      }
+    }
+    &:last-of-type {
+      height: calc(100% - 100px);
+    }
+  }
+  .el-row {
+    display: flex;
+    align-items: center;
+    margin-bottom: 20px;
+    &:last-child {
+      margin-bottom: 0;
+    }
+    .grid-content {
+      align-items: center;
+      min-height: 36px;
+    }
+
+    .topInfo {
+      display: flex;
+      align-items: center;
+      font-size: 16px;
+      font-weight: bold;
+
+      & > div {
+        white-space: nowrap;
+        margin-right: 20px;
+      }
+    }
+  }
+  .el-card {
+    border: 0;
+  }
+}
+</style>
diff --git a/src/views/dataUpload/saftyBaseInfo/parkingInfo/components/addReport.vue b/src/views/dataUpload/saftyBaseInfo/parkingInfo/components/addReport.vue
new file mode 100644
index 0000000..d8354cb
--- /dev/null
+++ b/src/views/dataUpload/saftyBaseInfo/parkingInfo/components/addReport.vue
@@ -0,0 +1,202 @@
+<template>
+  <div class="system-add-user-container">
+    <el-dialog :title="title" v-model="isShowDialog" width="50%">
+      <el-form :model="form" size="default" ref="formRef" :rules="rules" label-width="120px">
+        <el-row :gutter="35">
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="方案名称" prop="programmeName">
+              <el-input v-model.trim="form.programmeName" placeholder="方案名称" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="开始时间" prop="startTime">
+              <el-date-picker v-model="form.startTime" value-format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择开始时间" style="width: 100%" />
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="结束时间" prop="endTime">
+              <el-date-picker v-model="form.endTime" value-format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择开始时间" style="width: 100%" />
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="开停车类型" prop="programmeType">
+              <el-radio-group v-model="form.programmeType">
+                <el-radio :label="1">开车</el-radio>
+                <el-radio :label="2">停车</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="负责部门">
+              <el-input v-model.trim="form.responsibleDept" placeholder="负责部门" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="负责人">
+              <el-input v-model.trim="form.responsiblePerson" placeholder="负责人" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="危险工艺">
+              <el-input v-model.trim="form.craftName" :autosize="{ minRows: 1 }" type="textarea" placeholder="危险工艺" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="顺序">
+              <el-input v-model.trim="form.seq" placeholder="顺序" type="number" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="准备">
+              <el-input v-model.trim="form.preparation" placeholder="准备" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="方案">
+              <el-input v-model.trim="form.programme" placeholder="方案" clearable></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" v-throttle @click="onSubmit" size="default">确 定</el-button>
+        </span>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script lang="ts">
+import { reactive, toRefs, onMounted, defineComponent, ref } from 'vue';
+import { ElMessageBox, ElMessage } from 'element-plus';
+import axios from "axios";
+import {workApplyApi} from "/@/api/specialWorkSystem/workApply";
+import {judgeReportApi} from "/@/api/dataUpload/saftyBaseInfo/judgeReport";
+
+// 定义接口来定义对象的类型
+interface DataState {
+  title: string
+  isShowDialog: boolean
+  form: {
+    uuid: string
+    programmeName: string
+    startTime: string
+    endTime: string
+    programmeType: number | null
+    responsibleDept: string
+    responsiblePerson: string
+    craftName: string
+    seq: string
+    preparation: string
+    programme: string
+  }
+  rules:{}
+}
+
+export default defineComponent({
+  name: 'reportDialog',
+  setup(props, context) {
+    const formRef = ref()
+    const state = reactive<DataState>({
+      title: '',
+      isShowDialog: false,
+      form: {
+        uuid:'',
+        programmeName: '',
+        startTime: '',
+        endTime: '',
+        programmeType: null,
+        responsibleDept: '',
+        responsiblePerson: '',
+        craftName: '',
+        seq: '',
+        preparation: '',
+        programme: ''
+      },
+      rules:{
+        programmeName: [{ required: true, message: '请填写方案名称', trigger: 'blur' }],
+        startTime: [{ required: true, message: '请选择开始时间', trigger: 'blur' }],
+        endTime: [{ required: true, message: '请选择结束时间', trigger: 'blur' }],
+        programmeType: [{ required: true, message: '请选择开停车类型', trigger: 'blur' }]
+      }
+    })
+
+    // 页面加载时
+    onMounted(() => {
+
+    })
+    // 打开弹窗
+    const open = (type: string, data: object) => {
+      state.isShowDialog = true;
+      if (type === 'add') {
+        state.title = '新增上报';
+        state.form = {
+          uuid:'',
+          programmeName: '',
+          startTime: '',
+          endTime: '',
+          programmeType: null,
+          responsibleDept: '',
+          responsiblePerson: '',
+          craftName: '',
+          seq: '',
+          preparation: '',
+          programme: ''
+        }
+      }else{
+        state.title = '重新上报';
+        state.form = {
+          uuid: data.uuid,
+          programmeName: '',
+          startTime: '',
+          endTime: '',
+          programmeType: null,
+          responsibleDept: '',
+          responsiblePerson: '',
+          craftName: '',
+          seq: '',
+          preparation: '',
+          programme: ''
+        }
+      }
+    };
+
+    // 新增修改
+    const onSubmit = async () => {
+      formRef.value.validate(async (valid:Boolean) => {
+        if(valid){
+          const res = await judgeReportApi().addParking([state.form])
+          if(res.data.code == 200){
+            ElMessage({
+              type:'success',
+              message:'数据上报成功'
+            })
+            state.isShowDialog = false
+          }else{
+            ElMessage({
+              type:'warning',
+              message:res.data.msg
+            })
+          }
+          context.emit('refresh')
+        }else{
+          ElMessage({
+            type:'warning',
+            message:'请完善基本信息'
+          })
+        }
+      })
+    }
+
+
+    return {
+      formRef,
+      open,
+      onSubmit,
+      ...toRefs(state)
+    };
+  }
+});
+</script>
diff --git a/src/views/dataUpload/saftyBaseInfo/parkingInfo/index.vue b/src/views/dataUpload/saftyBaseInfo/parkingInfo/index.vue
new file mode 100644
index 0000000..055fa85
--- /dev/null
+++ b/src/views/dataUpload/saftyBaseInfo/parkingInfo/index.vue
@@ -0,0 +1,223 @@
+<template>
+    <div class="home-container">
+        <div style="height: 100%">
+          <div class="homeCard">
+            <div class="main-card">
+            <el-row class="cardTop">
+              <el-col :span="12" class="mainCardBtn">
+                <el-button type="primary" icon="Plus" size="default" @click="openDialog('add',{})">新增</el-button>
+              </el-col>
+            </el-row>
+            <el-table :data="reportData" style="width: 100%" height="calc(100% - 48px)" :header-cell-style="{ background: '#fafafa' }">
+              <el-table-column prop="id" label="id" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="reportTime" label="上报时间" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="programmeName" label="方案名称" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="startTime" label="开始时间" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="endTime" label="结束时间" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="programmeType" label="开停车类型" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="responsibleDept" label="负责部门" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="responsiblePerson" label="负责人" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="craftName" label="危险工艺" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="seq" label="顺序" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="preparation" label="准备" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="programme" label="方案" show-overflow-tooltip></el-table-column>
+              <el-table-column label="操作" width="140">
+                  <template #default="scope">
+                      <el-button size="small" text type="primary" @click="openDialog('update',scope.row)">重新上报</el-button>
+                      <el-button style="color: red" size="small" text type="primary" @click="onRowDel(scope.row)">删除</el-button>
+                  </template>
+              </el-table-column>
+            </el-table>
+            <div class="pageBtn">
+              <el-pagination @size-change="onHandleSizeChange" small="false" @current-change="onHandleCurrentChange" class="page-position" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="listQuery.pageIndex" background v-model:page-size="listQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination>
+            </div>
+            </div>
+          </div>
+        </div>
+        <add-report ref="reportRef" @refresh="getData"></add-report>
+    </div>
+</template>
+
+<script lang="ts">
+import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue'
+import { ElMessageBox, ElMessage } from 'element-plus'
+import { Plus } from '@element-plus/icons-vue'
+import addReport from "./components/addReport.vue"
+import {judgeReportApi} from "/@/api/dataUpload/saftyBaseInfo/judgeReport";
+interface TableDataState {
+  reportData: [],
+  listQuery: {
+    searchParams: {}
+    pageIndex: number
+    pageSize: number
+  }
+  total: null | number
+}
+
+export default defineComponent({
+    name: 'parkingInfo',
+    components: {addReport },
+    setup() {
+      const reportRef= ref();
+      const state = reactive<TableDataState>({
+        reportData: [],
+        listQuery: {
+          searchParams: {},
+          pageIndex: 1,
+          pageSize: 10
+        },
+        total: null
+      });
+
+      // 页面加载时
+      onMounted(() => {
+        getData()
+      });
+
+      const getData = async ()=>{
+        const res = await judgeReportApi().getParkingList(state.listQuery)
+        if(res.data.code == 200){
+          state.reportData = res.data.data
+          state.total = res.data.total
+        }else{
+          ElMessage({
+            type: 'warning',
+            message: res.data.msg
+          })
+        }
+      }
+
+      const openDialog=(type:string,data:object)=>{
+        reportRef.value.open(type,data)
+      }
+
+      // 删除用户
+      const onRowDel = (row: Object) => {
+          ElMessageBox.confirm(`此操作将永久删除:“${row.programmeName}”,是否继续?`, '提示', {
+              confirmButtonText: '确认',
+              cancelButtonText: '取消',
+              type: 'warning'
+          })
+              .then(async () => {
+                const res = await judgeReportApi().delParking({ids: [row.id]})
+                if(res.data.code == 200){
+                  ElMessage({
+                    type: 'success',
+                    message: '删除成功'
+                  })
+                  await getData()
+                }else{
+                  ElMessage({
+                    type: 'warning',
+                    message: res.data.msg
+                  })
+                }
+              })
+              .catch(() => {});
+      };
+      // 分页改变
+      const onHandleSizeChange = (val: number) => {
+          state.listQuery.pageSize = val;
+          getData()
+      };
+      // 分页改变
+      const onHandleCurrentChange = (val: number) => {
+          state.listQuery.pageIndex = val;
+          getData()
+      };
+
+      return {
+        reportRef,
+        openDialog,
+        getData,
+        onRowDel,
+        onHandleSizeChange,
+        onHandleCurrentChange,
+        ...toRefs(state)
+      };
+    }
+});
+</script>
+<style lang="scss" scoped>
+.home-container {
+  height: calc(100vh - 144px);
+  box-sizing: border-box;
+  overflow: hidden;
+  .demo-tabs {
+    width: 100%;
+    height: 100%;
+
+    &::v-deep(.el-tabs__content) {
+      height: calc(100% - 60px);
+    }
+
+    .el-tab-pane {
+      height: 100%;
+    }
+  }
+  .homeCard {
+    width: 100%;
+    padding: 20px;
+    box-sizing: border-box;
+    background: #fff;
+    border-radius: 4px;
+
+    .main-card {
+      width: 100%;
+      height: 100%;
+      .cardTop {
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        margin-bottom: 20px;
+        .mainCardBtn {
+          margin: 0;
+        }
+      }
+      .pageBtn {
+        height: 60px;
+        display: flex;
+        align-items: center;
+        justify-content: right;
+
+        .demo-pagination-block + .demo-pagination-block {
+          margin-top: 10px;
+        }
+        .demo-pagination-block .demonstration {
+          margin-bottom: 16px;
+        }
+      }
+    }
+    &:last-of-type {
+      height: calc(100% - 100px);
+    }
+  }
+  .el-row {
+    display: flex;
+    align-items: center;
+    margin-bottom: 20px;
+    &:last-child {
+      margin-bottom: 0;
+    }
+    .grid-content {
+      align-items: center;
+      min-height: 36px;
+    }
+
+    .topInfo {
+      display: flex;
+      align-items: center;
+      font-size: 16px;
+      font-weight: bold;
+
+      & > div {
+        white-space: nowrap;
+        margin-right: 20px;
+      }
+    }
+  }
+  .el-card {
+    border: 0;
+  }
+}
+</style>
diff --git a/src/views/dataUpload/saftyBaseInfo/productionInfo/components/addReport.vue b/src/views/dataUpload/saftyBaseInfo/productionInfo/components/addReport.vue
new file mode 100644
index 0000000..6f72495
--- /dev/null
+++ b/src/views/dataUpload/saftyBaseInfo/productionInfo/components/addReport.vue
@@ -0,0 +1,286 @@
+<template>
+  <div class="system-add-user-container">
+    <el-dialog :title="title" v-model="isShowDialog" width="50%">
+      <el-form :model="form" size="default" ref="formRef" :rules="rules" label-width="160px">
+        <el-row :gutter="35">
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="工艺名称" prop="craftName">
+              <el-input v-model.trim="form.craftName" placeholder="工艺名称" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="工艺简介" prop="craftContent">
+              <el-input v-model.trim="form.craftContent" :autosize="{ minRows: 1 }" type="textarea" placeholder="工艺简介" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="主要生产设备" prop="mainProdEquip">
+              <el-input v-model.trim="form.mainProdEquip" :autosize="{ minRows: 1 }" type="textarea" placeholder="主要生产设备" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="重点部位" prop="keyParts">
+              <el-input v-model.trim="form.keyParts" placeholder="重点部位" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="重大危险源" prop="hazardCode">
+              <el-input v-model.trim="form.hazardCode" :autosize="{ minRows: 1 }" type="textarea" placeholder="重大危险源" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="涉及的危险化学品">
+              <el-input v-model.trim="form.msds" :autosize="{ minRows: 1 }" type="textarea" placeholder="涉及的危险化学品" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="工艺危险特点">
+              <el-input v-model.trim="form.hazardCharacter" placeholder="工艺危险特点" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="重点监控工艺参数指标">
+              <el-input v-model.trim="form.parameterIndex" placeholder="重点监控工艺参数指标" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="现有安全控制手段">
+              <el-input v-model.trim="form.controlMean" placeholder="现有安全控制手段" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="反应类型">
+              <el-input v-model.trim="form.reactionType" placeholder="反应类型" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="重点监控单元">
+              <el-input v-model.trim="form.keyMonitorUnit" placeholder="重点监控单元" clearable></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="工艺图纸">
+              <el-upload accept="image/*" multiple list-type="picture-card" :action="uploadUrl" :headers="header" method="post" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :on-success="handleAvatarSuccess" :limit='2' v-model:file-list="fileList" :before-upload="picSize" :on-remove="handleRemove" :before-remove="beforeRemove">
+                <el-icon><Plus /></el-icon>
+                <template #tip>
+                  <div class="el-upload__tip">上传图片尺寸小于2M,最多可上传2张</div>
+                </template>
+              </el-upload>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <el-dialog v-model="imgDialog">
+        <img width="100%" :src="imageUrl" alt="Preview Image" />
+      </el-dialog>
+      <template #footer>
+        <span class="dialog-footer">
+            <el-button @click="isShowDialog = !isShowDialog" size="default">取 消</el-button>
+            <el-button type="primary" v-throttle @click="onSubmit" size="default">确 定</el-button>
+        </span>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script lang="ts">
+import { reactive, toRefs, onMounted, defineComponent, ref } from 'vue';
+import { ElMessageBox, ElMessage } from 'element-plus';
+import axios from "axios";
+import {workApplyApi} from "/@/api/specialWorkSystem/workApply";
+import Cookies from "js-cookie";
+import {judgeReportApi} from "/@/api/dataUpload/saftyBaseInfo/judgeReport";
+
+// 定义接口来定义对象的类型
+interface DataState {
+  title: string
+  isShowDialog: boolean
+  form: {
+    uuid: string
+    craftName: string
+    craftContent: string
+    mainProdEquip: string
+    keyParts: string
+    hazardCode: string
+    msds: string
+    hazardCharacter: string
+    parameterIndex: string
+    controlMean: string
+    craftDraw: string
+    reactionType: string
+    keyMonitorUnit: string
+  }
+  rules:{},
+  fileList: [],
+  uploadUrl: string,
+  header: {},
+  imgDialog: boolean,
+  imageUrl: string
+}
+
+export default defineComponent({
+  name: 'reportDialog',
+  setup(props, context) {
+    const formRef = ref()
+    const state = reactive<DataState>({
+      title: '',
+      isShowDialog: false,
+      form: {
+        uuid: '',
+        craftName: '',
+        craftContent: '',
+        mainProdEquip: '',
+        keyParts: '',
+        hazardCode: '',
+        msds: '',
+        hazardCharacter: '',
+        parameterIndex: '',
+        controlMean: '',
+        craftDraw: '',
+        reactionType: '',
+        keyMonitorUnit: ''
+      },
+      rules:{
+        craftName: [{ required: true, message: '请填写工艺名称', trigger: 'blur' }],
+        craftContent: [{ required: true, message: '请填写工艺简介', trigger: 'blur' }],
+        mainProdEquip: [{ required: true, message: '请填写主要生产设备', trigger: 'blur' }],
+        keyParts: [{ required: true, message: '请填写重点部位', trigger: 'blur' }],
+        hazardCode: [{ required: true, message: '请填写重大危险源', trigger: 'blur' }]
+      },
+      fileList: [],
+      uploadUrl: import.meta.env.VITE_API_URL + '/account/file/upload',
+      header: {
+        uid: Cookies.get('uid'),
+        Authorization: Cookies.get('token')
+      },
+      imgDialog: false,
+      imageUrl: ''
+    })
+
+    // 页面加载时
+    onMounted(() => {
+
+    })
+    // 打开弹窗
+    const open = (type: string, data: object) => {
+      state.isShowDialog = true;
+      if (type === 'add') {
+        state.title = '新增上报'
+        state.form = {
+          uuid: '',
+          craftName: '',
+          craftContent: '',
+          mainProdEquip: '',
+          keyParts: '',
+          hazardCode: '',
+          msds: '',
+          hazardCharacter: '',
+          parameterIndex: '',
+          controlMean: '',
+          craftDraw: '',
+          reactionType: '',
+          keyMonitorUnit: ''
+        }
+      }else{
+        state.title = '重新上报'
+        state.form = {
+          uuid: data.uuid,
+          craftName: '',
+          craftContent: '',
+          mainProdEquip: '',
+          keyParts: '',
+          hazardCode: '',
+          msds: '',
+          hazardCharacter: '',
+          parameterIndex: '',
+          controlMean: '',
+          craftDraw: '',
+          reactionType: '',
+          keyMonitorUnit: ''
+        }
+      }
+      state.fileList=[]
+    };
+
+    // 新增修改
+    const onSubmit = async () => {
+      formRef.value.validate(async (valid:Boolean) => {
+        if(valid){
+            state.form.craftDraw = state.fileList.map(i=>i.name).join(',')
+            const res = await judgeReportApi().addProduct([state.form])
+            if(res.data.code == '200'){
+              ElMessage({
+                type:'success',
+                message:'数据上报成功'
+              })
+              state.isShowDialog = false
+              state.fileList = []
+            }else{
+              ElMessage({
+                type:'warning',
+                message:res.data.msg
+              })
+            }
+            context.emit('refresh')
+        }else{
+          ElMessage({
+            type:'warning',
+            message:'请完善基本信息'
+          })
+        }
+      })
+    }
+
+    // 图片上传
+    const showTip =()=>{
+      ElMessage({
+        type: 'warning',
+        message: '超出文件上传数量'
+      });
+    }
+
+    const picSize = async(rawFile: any) => {
+      if(rawFile.size / 1024 / 1024 > 2){
+        ElMessage({
+          type: 'warning',
+          message: '文件大小不能超过2M'
+        });
+        return false
+      }
+    }
+
+    const handleAvatarSuccess = (res:any, uploadFile: any) => {
+      if(res){
+        uploadFile.name = res
+      }else{
+        ElMessage({
+          type: 'warning',
+          message: '文件上传失败'
+        })
+      }
+    }
+
+    const handlePictureCardPreview = (uploadFile) => {
+      state.imageUrl = uploadFile.url
+      state.imgDialog = true;
+    }
+
+    const handleRemove = (file, uploadFiles,type) => {
+      state.fileList = uploadFiles
+    }
+
+
+    return {
+      formRef,
+      showTip,
+      picSize,
+      handleAvatarSuccess,
+      handlePictureCardPreview,
+      handleRemove,
+      open,
+      onSubmit,
+      ...toRefs(state)
+    };
+  }
+});
+</script>
diff --git a/src/views/dataUpload/saftyBaseInfo/productionInfo/index.vue b/src/views/dataUpload/saftyBaseInfo/productionInfo/index.vue
new file mode 100644
index 0000000..7325ab5
--- /dev/null
+++ b/src/views/dataUpload/saftyBaseInfo/productionInfo/index.vue
@@ -0,0 +1,270 @@
+<template>
+    <div class="home-container">
+        <div style="height: 100%">
+          <div class="homeCard">
+            <div class="main-card">
+            <el-row class="cardTop">
+              <el-col :span="12" class="mainCardBtn">
+                <el-button type="primary" icon="Plus" size="default" @click="openDialog('add',{})">新增</el-button>
+              </el-col>
+            </el-row>
+            <el-table :data="reportData" style="width: 100%" height="calc(100% - 48px)" :header-cell-style="{ background: '#fafafa' }">
+              <el-table-column prop="id" label="id" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="createTime" label="上报时间" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="craftName" label="工艺名称" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="craftContent" label="工艺简介" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="mainProdEquip" label="主要生产设备" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="keyParts" label="重点部位" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="hazardCode" label="重大危险源" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="msds" label="涉及的危险化学品" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="hazardCharacteristic" label="工艺危险特点" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="parameterIndex" label="重点监控工艺参数指标" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="controlMean" label="现有安全控制手段" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="craftDraw" label="工艺图纸" show-overflow-tooltip>
+                <template #default="scope">
+                  <el-button v-if="scope.row.craftDraw !== ''" v-for="item in scope.row.craftDraw.split(',')" size="small" text type="primary" @click="openFile(item)">查看</el-button>
+                </template>
+              </el-table-column>
+              <el-table-column prop="reactionType" label="反应类型" show-overflow-tooltip></el-table-column>
+              <el-table-column prop="keyMonitorUnit" label="重点监控单元" show-overflow-tooltip></el-table-column>
+              <el-table-column label="操作" width="140">
+                  <template #default="scope">
+                    <el-button size="small" text type="primary" @click="openDialog('update',scope.row)">重新上报</el-button>
+                    <el-button style="color: red" size="small" text type="primary" @click="onRowDel(scope.row)">删除</el-button>
+                  </template>
+              </el-table-column>
+            </el-table>
+            <div class="pageBtn">
+              <el-pagination @size-change="onHandleSizeChange" small="false" @current-change="onHandleCurrentChange" class="page-position" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="listQuery.pageIndex" background v-model:page-size="listQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination>
+            </div>
+            </div>
+          </div>
+        </div>
+        <add-report ref="reportRef" @refresh="getData"></add-report>
+    </div>
+</template>
+
+<script lang="ts">
+import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue'
+import { ElMessageBox, ElMessage } from 'element-plus'
+import { Plus } from '@element-plus/icons-vue'
+import addReport from "./components/addReport.vue"
+import {judgeReportApi} from "/@/api/dataUpload/saftyBaseInfo/judgeReport";
+import axios from "axios";
+import Cookies from "js-cookie";
+
+// 定义接口来定义对象的类型
+interface TableDataRow {
+  id: number|null
+  reportTime: string
+  craftName: string
+  craftContent: string
+  mainProdEquip: string
+  keyParts: string
+  hazardCode: string
+  msds: string
+  hazardCharacter: string
+  parameterIndex: string
+  controlMean: string
+  craftDraw: string
+  reactionType: string
+  keyMonitorUnit: string
+}
+interface TableDataState {
+  reportData: [],
+  listQuery: {
+    searchParams: {}
+    pageIndex: number
+    pageSize: number
+  }
+  total: null | number
+  baseUrl: string
+}
+
+export default defineComponent({
+    name: 'productionInfo',
+    components: {addReport },
+    setup() {
+      const reportRef= ref();
+      const state = reactive<TableDataState>({
+        reportData: [],
+        listQuery: {
+          searchParams: {},
+          pageIndex: 1,
+          pageSize: 10
+        },
+        total: null,
+        baseUrl: import.meta.env.VITE_API_URL
+      });
+
+      // 页面加载时
+      onMounted(() => {
+        getData()
+        console.log(state.baseUrl)
+      });
+
+      const getData = async ()=>{
+        const res = await judgeReportApi().getProductList(state.listQuery)
+        if(res.data.code == 200){
+          state.reportData = res.data.data
+          state.total = res.data.total
+        }else{
+          ElMessage({
+            type: 'warning',
+            message: res.data.msg
+          })
+        }
+      }
+
+      const openDialog=(type:string,data:object)=>{
+        reportRef.value.open(type,data)
+      }
+
+      // 删除用户
+      const onRowDel = (row: TableDataRow) => {
+          ElMessageBox.confirm(`此操作将永久删除账户名称:“${row.craftName}”,是否继续?`, '提示', {
+              confirmButtonText: '确认',
+              cancelButtonText: '取消',
+              type: 'warning'
+          })
+              .then(async () => {
+                const res = await judgeReportApi().delProduct({ids: [row.id]})
+                if(res.data.code == 200){
+                  ElMessage({
+                    type: 'success',
+                    message: '删除成功'
+                  })
+                  await getData()
+                }else{
+                  ElMessage({
+                    type: 'warning',
+                    message: res.data.msg
+                  })
+                }
+              })
+              .catch(() => {});
+      };
+      // 分页改变
+      const onHandleSizeChange = (val: number) => {
+          state.listQuery.pageSize = val;
+          getData()
+      };
+      // 分页改变
+      const onHandleCurrentChange = (val: number) => {
+          state.listQuery.pageIndex = val;
+          getData()
+      };
+
+      const openFile=(file: string)=>{
+        axios.get(import.meta.env.VITE_API_URL + file,{headers:{'Content-Type': 'application/json','Authorization': `${Cookies.get('token')}`,'uid':`${Cookies.get('uid')}`},responseType: 'blob'}).then(res=>{
+          if (res) {
+            const link = document.createElement('a')
+            let blob = new Blob([res.data],{type: res.data.type})
+            link.style.display = "none";
+            link.href = URL.createObjectURL(blob); // 创建URL
+            window.open(link.href)
+          } else {
+            ElMessage({
+              type: 'warning',
+              message: '文件读取失败'
+            });
+          }
+        })
+      }
+
+      return {
+        reportRef,
+        openDialog,
+        openFile,
+        getData,
+        onRowDel,
+        onHandleSizeChange,
+        onHandleCurrentChange,
+        ...toRefs(state)
+      };
+    }
+});
+</script>
+<style lang="scss" scoped>
+.home-container {
+  height: calc(100vh - 144px);
+  box-sizing: border-box;
+  overflow: hidden;
+  .demo-tabs {
+    width: 100%;
+    height: 100%;
+
+    &::v-deep(.el-tabs__content) {
+      height: calc(100% - 60px);
+    }
+
+    .el-tab-pane {
+      height: 100%;
+    }
+  }
+  .homeCard {
+    width: 100%;
+    padding: 20px;
+    box-sizing: border-box;
+    background: #fff;
+    border-radius: 4px;
+
+    .main-card {
+      width: 100%;
+      height: 100%;
+      .cardTop {
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+        margin-bottom: 20px;
+        .mainCardBtn {
+          margin: 0;
+        }
+      }
+      .pageBtn {
+        height: 60px;
+        display: flex;
+        align-items: center;
+        justify-content: right;
+
+        .demo-pagination-block + .demo-pagination-block {
+          margin-top: 10px;
+        }
+        .demo-pagination-block .demonstration {
+          margin-bottom: 16px;
+        }
+      }
+    }
+    &:last-of-type {
+      height: calc(100% - 100px);
+    }
+  }
+  .el-row {
+    display: flex;
+    align-items: center;
+    margin-bottom: 20px;
+    &:last-child {
+      margin-bottom: 0;
+    }
+    .grid-content {
+      align-items: center;
+      min-height: 36px;
+    }
+
+    .topInfo {
+      display: flex;
+      align-items: center;
+      font-size: 16px;
+      font-weight: bold;
+
+      & > div {
+        white-space: nowrap;
+        margin-right: 20px;
+      }
+    }
+  }
+  .el-card {
+    border: 0;
+  }
+}
+</style>
diff --git a/src/views/intellectInspect/inspectBasic/discriminate/components/RFIDDialog.vue b/src/views/intellectInspect/inspectBasic/discriminate/components/RFIDDialog.vue
index e9b55fb..c39453d 100644
--- a/src/views/intellectInspect/inspectBasic/discriminate/components/RFIDDialog.vue
+++ b/src/views/intellectInspect/inspectBasic/discriminate/components/RFIDDialog.vue
@@ -14,12 +14,12 @@
                         </el-form-item>
                     </el-col>
                     <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
-                        <el-form-item label="处理人所属车间" prop="exceptionHandlerDepId">
-                            <el-cascader @change="getUser" :options="departmentData" :props="{ emitPath: false, checkStrictly: true, value: 'depId', label: 'depName' }" placeholder="请输入RFID所属车间" clearable class="input-add" v-model="RFIDForm.exceptionHandlerDepId"> </el-cascader>
+                        <el-form-item label="处理人所属车间">
+                            <el-cascader @change="getUser" :options="departmentData" filterable :props="{ emitPath: false, checkStrictly: true, value: 'depId', label: 'depName'}" placeholder="请输入RFID所属车间" clearable class="input-add" v-model="RFIDForm.exceptionHandlerDepId"> </el-cascader>
                         </el-form-item>
                     </el-col>
                     <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
-                        <el-form-item label="异常处理人" prop="exceptionHandlerId">
+                        <el-form-item label="异常处理人">
                             <el-select v-model="RFIDForm.exceptionHandlerId" filterable class="input-add" placeholder="请输入异常处理人">
                                 <el-option v-for="item in userList" :key="item.uid" :label="item.realName" :value="item.uid"></el-option>
                             </el-select>
@@ -27,7 +27,7 @@
                     </el-col>
                     <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
                         <el-form-item label="RFID所属车间" prop="rfidDepartmentId">
-                            <el-cascader :options="departmentData" :props="{ emitPath: false, checkStrictly: true, value: 'depId', label: 'depName' }" placeholder="请输入RFID所属车间" clearable class="input-add" v-model="RFIDForm. rfidDepartmentId"> </el-cascader>
+                            <el-cascader :options="departmentData" filterable :props="{ emitPath: false, checkStrictly: true, value: 'depId', label: 'depName' }" placeholder="请输入RFID所属车间" clearable class="input-add" v-model="RFIDForm. rfidDepartmentId"> </el-cascader>
                         </el-form-item>
                     </el-col>
                     <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
@@ -108,8 +108,8 @@
                 rfid: [{ required: true, message: '请填写RFID编码', trigger: 'blur' }],
                 rfidName: [{ required: true, message: '请填写RFID名称', trigger: 'change' }],
                 rfidDepartmentId: [{ required: true, message: '请选择', trigger: 'change' }],
-                exceptionHandlerDepId: [{ required: true, message: '请选择', trigger: 'change' }],
-                exceptionHandlerId: [{ required: true, message: '请选择', trigger: 'change' }]
+                // exceptionHandlerDepId: [{ required: true, message: '请选择', trigger: 'change' }],
+                // exceptionHandlerId: [{ required: true, message: '请选择', trigger: 'change' }]
             },
 
             fileList: [],
diff --git a/src/views/intellectInspect/inspectBasic/discriminate/index.vue b/src/views/intellectInspect/inspectBasic/discriminate/index.vue
index 8c99fb4..d8e4506 100644
--- a/src/views/intellectInspect/inspectBasic/discriminate/index.vue
+++ b/src/views/intellectInspect/inspectBasic/discriminate/index.vue
@@ -22,6 +22,7 @@
                     </el-icon>
                     新增RFID
                 </el-button>
+                <el-button type="primary" :icon="Upload" size="default" @click="openUploadDialog('id')">导入</el-button>
             </div>
             <el-table :data="RFIDData.data" style="width: 100%">
                 <el-table-column type="index" label="序号" width="60" />
@@ -47,6 +48,7 @@
             <br />
         </el-card>
         <RFIDDialog ref="RFIDDialogRef" @refreshRFID="initRFIDTableData" />
+        <upload-dialog ref="uploadRef" @refresh="initRFIDTableData"></upload-dialog>
     </div>
 </template>
 
@@ -54,8 +56,9 @@
 import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue';
 import { ElMessageBox, ElMessage } from 'element-plus';
 import RFIDDialog from './components/RFIDDialog.vue';
+import uploadDialog from '/@/views/intellectInspect/inspectTaskManage/inspectTask/components/upload.vue'
 import { RFIDApi } from '/@/api/intellectInspectSystem/RFID';
-import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue';
+import { Edit, View, Plus, Delete, Refresh, Search, Download, Upload } from '@element-plus/icons-vue';
 import type { UploadProps, UploadUserFile } from 'element-plus'
 import {departmentApi} from "/@/api/systemManage/department";
 // 定义接口来定义对象的类型
@@ -85,9 +88,10 @@
 
 export default defineComponent({
     name: 'RFID',
-    components: { RFIDDialog, Edit, Delete },
+    components: { RFIDDialog, uploadDialog },
     setup() {
         const RFIDDialogRef = ref();
+        const uploadRef = ref()
         const state = reactive<TableDataState>({
             RFIDData: {
                 data: [],
@@ -159,6 +163,10 @@
             }
         };
 
+      const openUploadDialog = (type: string)=>{
+        uploadRef.value.open(type)
+      }
+
         const handleSearch = () => {
             initRFIDTableData();
         };
@@ -181,13 +189,16 @@
         return {
             Edit,
             Delete,
+          Upload,
+          uploadRef,
+          openUploadDialog,
             handleSearch,
             onOpenDialogRef,
             onHandleSizeChange,
             onDelProductionDevice,
             onHandleCurrentChange,
-            RFIDDialog,
             RFIDDialogRef,
+
             initRFIDTableData,
             ...toRefs(state)
         };
diff --git a/src/views/intellectInspect/inspectBasic/facility/components/facilityAreaDialog.vue b/src/views/intellectInspect/inspectBasic/facility/components/facilityAreaDialog.vue
index 544a43a..de6a87e 100644
--- a/src/views/intellectInspect/inspectBasic/facility/components/facilityAreaDialog.vue
+++ b/src/views/intellectInspect/inspectBasic/facility/components/facilityAreaDialog.vue
@@ -17,7 +17,7 @@
                     </el-col>
                     <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
                         <el-form-item label="所属部门" prop="regionDepartmentId">
-                            <el-cascader :options="departmentData" :props="{ emitPath: false, checkStrictly: true, value: 'depId', label: 'depName' }" placeholder="请输入RFID所属车间" clearable class="input-add" v-model="facilityAreaForm.regionDepartmentId"> </el-cascader>
+                            <el-cascader :options="departmentData" filterable :props="{ emitPath: false, checkStrictly: true, value: 'depId', label: 'depName' }" placeholder="请选择所属部门" clearable class="input-add" v-model="facilityAreaForm.regionDepartmentId"> </el-cascader>
                         </el-form-item>
                     </el-col>
                 </el-row>
diff --git a/src/views/intellectInspect/inspectBasic/facility/index.vue b/src/views/intellectInspect/inspectBasic/facility/index.vue
index 347224b..785ba6a 100644
--- a/src/views/intellectInspect/inspectBasic/facility/index.vue
+++ b/src/views/intellectInspect/inspectBasic/facility/index.vue
@@ -24,6 +24,7 @@
                     </el-icon>
                     新增设备区域
                 </el-button>
+              <el-button type="primary" :icon="Upload" size="default" @click="openUploadDialog('区域')">导入</el-button>
             </div>
             <el-table :data="facilityAreaData.data" style="width: 100%">
                 <el-table-column type="index" label="序号" width="60" />
@@ -47,6 +48,7 @@
             <br />
         </el-card>
         <facilityAreaDialog ref="facilityAreaDialogRef" @refreshFacilityArea="initFacilityAreaTableData" />
+      <upload-dialog ref="uploadRef" @refresh="initFacilityAreaTableData"></upload-dialog>
     </div>
 </template>
 
@@ -54,8 +56,9 @@
 import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue';
 import { ElMessageBox, ElMessage } from 'element-plus';
 import facilityAreaDialog from './components/facilityAreaDialog.vue';
+import uploadDialog from '/@/views/intellectInspect/inspectTaskManage/inspectTask/components/upload.vue'
 import { facilityAreaApi } from '/@/api/intellectInspectSystem/facilityAreaManage';
-import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue';
+import { Edit, View, Plus, Delete, Refresh, Search, Download, Upload } from '@element-plus/icons-vue';
 
 // 定义接口来定义对象的类型
 interface TableData {
@@ -89,9 +92,10 @@
 
 export default defineComponent({
     name: 'facilityArea',
-    components: { facilityAreaDialog, Edit, Delete },
+    components: { facilityAreaDialog, Edit, Delete, uploadDialog },
     setup() {
         const facilityAreaDialogRef = ref();
+        const uploadRef = ref()
         const state = reactive<TableDataState>({
             facilityAreaData: {
                 data: [],
@@ -137,6 +141,11 @@
         const onOpenDialogRef = (type: string, value: any) => {
             facilityAreaDialogRef.value.openFacilityAreaDialog(type, value, state.facilityAreaTypeList);
         };
+
+        const openUploadDialog = (type: string)=>{
+          uploadRef.value.open(type)
+        }
+
         // 删除
         const onDelProductionDevice = (row: any) => {
             ElMessageBox.confirm(`此操作将永久删除该条设备区域:“${row.region}”,是否继续?`, '提示', {
@@ -185,6 +194,9 @@
         return {
             Edit,
             Delete,
+          Upload,
+          uploadRef,
+          openUploadDialog,
             handleSearch,
             onOpenDialogRef,
             onHandleSizeChange,
diff --git a/src/views/intellectInspect/inspectBasic/inspectPoint/index.vue b/src/views/intellectInspect/inspectBasic/inspectPoint/index.vue
index 62064e6..7a4211e 100644
--- a/src/views/intellectInspect/inspectBasic/inspectPoint/index.vue
+++ b/src/views/intellectInspect/inspectBasic/inspectPoint/index.vue
@@ -24,6 +24,7 @@
                     </el-icon>
                     新增巡检点
                 </el-button>
+              <el-button type="primary" :icon="Upload" size="default" @click="openUploadDialog('点')">导入</el-button>
             </div>
             <el-table :data="inspectPointData.data" style="width: 100%">
                 <el-table-column type="index" label="序号" width="60" />
@@ -47,6 +48,7 @@
             <br />
         </el-card>
         <inspectPointDialog ref="inspectPointDialogRef" @refreshInspectPoint="initInspectPointTableData" />
+      <upload-dialog ref="uploadRef" @refresh="initInspectPointTableData"></upload-dialog>
     </div>
 </template>
 
@@ -54,9 +56,10 @@
 import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue';
 import { ElMessageBox, ElMessage } from 'element-plus';
 import inspectPointDialog from './components/inspectPointDialog.vue';
+import uploadDialog from '/@/views/intellectInspect/inspectTaskManage/inspectTask/components/upload.vue'
 import { inspectPointApi } from '/@/api/intellectInspectSystem/inspectPointManage';
 import { facilityAreaApi } from '/@/api/intellectInspectSystem/facilityAreaManage';
-import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue';
+import { Edit, View, Plus, Delete, Refresh, Search, Download, Upload } from '@element-plus/icons-vue';
 import { RFIDApi } from '/@/api/intellectInspectSystem/RFID';
 
 // 定义接口来定义对象的类型
@@ -89,9 +92,10 @@
 
 export default defineComponent({
     name: 'productionDevice',
-    components: { inspectPointDialog, Edit, Delete },
+    components: { inspectPointDialog, Edit, Delete, uploadDialog },
     setup() {
         const inspectPointDialogRef = ref();
+      const uploadRef = ref()
         const state = reactive<TableDataState>({
             inspectPointData: {
                 data: [],
@@ -151,6 +155,11 @@
         const onOpenDialogRef = (type: string, value: any) => {
             inspectPointDialogRef.value.openInspectPointDialog(type, value, state.regionNameList, state.RFIDList);
         };
+
+        const openUploadDialog = (type: string)=>{
+          uploadRef.value.open(type)
+        }
+
         // 删除
         const onDelProductionDevice = (row: any) => {
             ElMessageBox.confirm(`此操作将永久删除该巡检点:“${row.code}”,是否继续?`, '提示', {
@@ -200,6 +209,9 @@
         return {
             Edit,
             Delete,
+          Upload,
+          uploadRef,
+          openUploadDialog,
             handleSearch,
             onOpenDialogRef,
             onHandleSizeChange,
diff --git a/src/views/intellectInspect/inspectTaskManage/inspectTask/components/inspectTaskDialog.vue b/src/views/intellectInspect/inspectTaskManage/inspectTask/components/inspectTaskDialog.vue
index 610775a..237c0db 100644
--- a/src/views/intellectInspect/inspectTaskManage/inspectTask/components/inspectTaskDialog.vue
+++ b/src/views/intellectInspect/inspectTaskManage/inspectTask/components/inspectTaskDialog.vue
@@ -99,7 +99,7 @@
                                             <!--                                            </div>-->
                                             <div class="text item" v-for="i in RFIDList">
                                                 <div v-if="i.id == item.rfidId">
-                                                    关联RFID:<span>{{ i.rfidName }}</span>
+                                                    关联RFID:<span>{{ i.rfid }}</span>
                                                 </div>
                                             </div>
                                             <!--                                            <div class="text item">-->
@@ -151,11 +151,11 @@
                         <el-option v-for="item in inspectPointAllList" :key="item.id" :value="item.id" :label="item.code"></el-option>
                     </el-select>
                 </el-form-item>
-                <el-form-item label="所属设备区域" prop="regionId">
-                    <el-input v-model="inspectPointForm.regionId" class="input-add" readonly />
+                <el-form-item label="所属设备区域" prop="region">
+                    <el-input v-model="inspectPointForm.region" class="input-add" readonly />
                 </el-form-item>
-                <el-form-item label="关联RFID" prop="rfidId">
-                    <el-input v-model="inspectPointForm.rfidId" class="input-add" readonly />
+                <el-form-item label="关联RFID" prop="rfid">
+                    <el-input v-model="inspectPointForm.rfid" class="input-add" readonly />
                 </el-form-item>
                 <el-form-item label="选择巡检指标" prop="quotaId">
                     <el-select v-model="inspectPointForm.quotaId" @change="giveQuotaUnit" placeholder="请选择巡检指标" class="input-add">
@@ -253,7 +253,7 @@
     code: string;
     regionId: number;
     rfidId: number;
-    rfidName: string;
+    rfid: string;
     region: string;
 }
 interface classGroup {
@@ -275,8 +275,10 @@
     pointId: number | null;
     pointUuid: string | null;
     regionId: number | null;
+    region: string
     regionUuid: string | null;
     rfidId: number | null;
+    rfid: string
     quotaId: number | null;
     quotaUnit: string | null;
     execSequence: number | null;
@@ -305,8 +307,10 @@
                 pointId: null,
                 pointUuid: null,
                 regionId: null,
+                region: '',
                 regionUuid: null,
                 rfidId: null,
+                rfid: '',
                 quotaId: null,
                 quotaUnit: null,
                 execSequence: null,
@@ -395,8 +399,10 @@
                     pointId: null,
                     pointUuid: null,
                     regionId: null,
+                    region: '',
                     regionUuid: null,
                     rfidId: null,
+                    rfid: '',
                     quotaId: null,
                     quotaUnit: null,
                     execSequence: null,
@@ -566,7 +572,9 @@
 
         const giveRegionAndRFID = () => {
             data.inspectPointForm.regionId = data.inspectPointAllList.find((item) => item.id === data.inspectPointForm.pointId)?.regionId as number;
+            data.inspectPointForm.region = data.inspectPointAllList.find((item) => item.id === data.inspectPointForm.pointId)?.region as string;
             data.inspectPointForm.rfidId = data.inspectPointAllList.find((item) => item.id === data.inspectPointForm.pointId)?.rfidId as number;
+          data.inspectPointForm.rfid = data.inspectPointAllList.find((item) => item.id === data.inspectPointForm.pointId)?.rfid as string;
         };
 
         const giveClassGroup = () => {
diff --git a/src/views/intellectInspect/inspectTaskManage/inspectTask/components/upload.vue b/src/views/intellectInspect/inspectTaskManage/inspectTask/components/upload.vue
new file mode 100644
index 0000000..8aec706
--- /dev/null
+++ b/src/views/intellectInspect/inspectTaskManage/inspectTask/components/upload.vue
@@ -0,0 +1,204 @@
+<template>
+  <div class="system-add-user-container">
+    <el-dialog :title="title" v-model="isShowDialog" width="50%">
+      <el-form :model="form" size="default" ref="formRef" :rules="rules" label-width="120px">
+        <el-row :gutter="35">
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="模板">
+              <el-button type="primary" @click="downloadFile">点击下载模板</el-button>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="文件上传">
+              <el-upload accept=".xlsx,.xls" :auto-upload="false" method="post" :on-exceed="showTip" :limit='1' v-model:file-list="fileList" :before-upload="picSize" :on-remove="handleRemove" :before-remove="beforeRemove">
+                <el-button type="primary">点击上传</el-button>
+                <template #tip>
+                  <div class="el-upload__tip">尺寸小于2M,最多可上传1份</div>
+                </template>
+              </el-upload>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <template #footer>
+        <span class="dialog-footer">
+            <el-button @click="isShowDialog = !isShowDialog" size="default">取 消</el-button>
+            <el-button type="primary" v-throttle @click="onSubmit" size="default">确认导入</el-button>
+        </span>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script lang="ts">
+import { reactive, toRefs, onMounted, defineComponent, ref } from 'vue';
+import { ElMessageBox, ElMessage } from 'element-plus';
+import axios from "axios";
+import Cookies from "js-cookie";
+import * as XLSX from "xlsx";
+import {judgeReportApi} from "/@/api/dataUpload/saftyBaseInfo/judgeReport";
+import { lineApi } from "/@/api/intelligentLine/index";
+
+// 定义接口来定义对象的类型
+interface DataState {
+  title: string;
+  isShowDialog: boolean;
+  form: {
+    files: any
+  }
+  rules:{},
+  fileList: [],
+  uploadUrl: string,
+  header: {}
+}
+
+export default defineComponent({
+  name: 'reportDialog',
+  setup(props, context) {
+    const formRef = ref()
+    const state = reactive<DataState>({
+      title: '',
+      isShowDialog: false,
+      form: {
+        files: ''
+      },
+      rules:{
+      },
+      fileList: [],
+      uploadUrl: '',
+      header: {
+        uid: Cookies.get('uid'),
+        Authorization: Cookies.get('token')
+      }
+    })
+
+    // 页面加载时
+    onMounted(() => {
+
+    })
+    // 打开弹窗
+    const open = (type: string) => {
+      state.isShowDialog = true;
+      if (type === '任务') {
+        state.title = '巡检单元导入';
+      }
+      if(type == 'id'){
+        state.title = '巡检RFID导入';
+      }
+      if(type == '区域'){
+        state.title = '巡检区域导入';
+      }
+      if(type == '点'){
+        state.title = '巡检点导入';
+      }
+      state.form = {
+        files: ''
+      }
+      state.fileList = []
+    };
+
+
+
+    // 图片上传
+    const showTip =()=>{
+      ElMessage({
+        type: 'warning',
+        message: '超出文件上传数量'
+      });
+    }
+
+    const picSize = async(rawFile: any) => {
+      if(rawFile.size / 1024 / 1024 > 2){
+        ElMessage({
+          type: 'warning',
+          message: '文件大小不能超过2M'
+        });
+        return false
+      }
+    }
+
+
+    const handleRemove = (file, uploadFiles,type) => {
+      state.fileList = []
+    }
+
+    const downloadFile=()=>{
+      let filePath = ''
+      let name = ''
+      if(state.title == '巡检单元导入'){
+        filePath = 'excelFiles/missionUpload.xlsx'
+        name = '巡检单元导入模板.xlsx'
+      }
+      if(state.title == '巡检RFID导入'){
+        filePath = 'excelFiles/RFIDUpload.xlsx'
+        name = '巡检RFID导入模板.xlsx'
+      }
+      if(state.title == '巡检区域导入'){
+        filePath = 'excelFiles/regionUpload.xlsx'
+        name = '巡检区域导入模板.xlsx'
+      }
+      if(state.title == '巡检点导入'){
+        filePath = 'excelFiles/pointUpload.xlsx'
+        name = '巡检点导入模板.xlsx'
+      }
+      const link = document.createElement('a')
+      link.href = filePath
+      link.target = '_blank'
+      link.download = name
+      link.click()
+    }
+
+    // 新增修改
+    const onSubmit = async () => {
+      if(state.fileList.length == 0){
+        ElMessage({
+          type: 'warning',
+          message: '请先选择导入文件'
+        })
+        return
+      }else{
+        let res = {}
+        if(state.title == '巡检单元导入'){
+          res = await lineApi().uploadMission({file: state.fileList[0].raw})
+        }
+        if(state.title == '巡检RFID导入'){
+          res = await lineApi().uploadRfid({file: state.fileList[0].raw})
+        }
+        if(state.title == '巡检区域导入'){
+          res = await lineApi().uploadRegion({file: state.fileList[0].raw})
+        }
+        if(state.title == '巡检点导入'){
+          res = await lineApi().uploadPoint({file: state.fileList[0].raw})
+        }
+        if(res.data.code == 200){
+          ElMessage({
+            type: 'success',
+            message: res.data.msg,
+            duration: 4000
+          })
+          state.fileList = []
+          state.isShowDialog = false
+          context.emit('refresh')
+        }else{
+          ElMessage({
+            type: 'warning',
+            message: res.data.msg,
+            duration: 4000
+          })
+        }
+      }
+    }
+
+    return {
+      formRef,
+      downloadFile,
+      showTip,
+      picSize,
+      handleRemove,
+      open,
+      onSubmit,
+      ...toRefs(state)
+    };
+  }
+});
+</script>
diff --git a/src/views/intellectInspect/inspectTaskManage/inspectTask/index.vue b/src/views/intellectInspect/inspectTaskManage/inspectTask/index.vue
index 5feb9f9..bb6a6fd 100644
--- a/src/views/intellectInspect/inspectTaskManage/inspectTask/index.vue
+++ b/src/views/intellectInspect/inspectTaskManage/inspectTask/index.vue
@@ -31,12 +31,13 @@
                     <el-row class="cardTop">
                         <el-col :span="12" class="mainCardBtn">
                             <el-button type="primary" :icon="Plus" size="default" @click="openInspectTaskDialog('新增', {})">新增</el-button>
+                          <el-button type="primary" :icon="Upload" size="default" @click="openUploadDialog('任务')">导入</el-button>
                             <!--                            <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button>-->
                         </el-col>
                         <el-button type="primary" :icon="Refresh" size="default" />
                     </el-row>
                     <el-table ref="multipleTableRef" :data="tableData.inspectTaskData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }" @selection-change="handleSelectionChange">
-                        <el-table-column type="selection" width="55" />
+<!--                        <el-table-column type="selection" width="55" />-->
                         <el-table-column property="unitName" label="任务名称" />
                         <el-table-column property="workType" label="任务类型">
                             <template #default="scope">
@@ -121,15 +122,17 @@
             </div>
         </div>
         <inspect-task-dialog ref="inspectTaskDialogRef" @refreshInspectTask="getInspectionTask"></inspect-task-dialog>
+        <upload-dialog ref="uploadRef" @refresh="getInspectionTask"></upload-dialog>
     </div>
 </template>
 
 <script lang="ts">
 import { toRefs, reactive, ref, onMounted } from 'vue';
-import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue';
+import { Edit, View, Plus, Delete, Refresh, Search, Download, Upload } from '@element-plus/icons-vue';
 import { ElTable, ElMessage, ElMessageBox } from 'element-plus';
 import { inspectTaskApi } from '/@/api/intellectInspectSystem/inspectTask';
-import inspectTaskDialog from './components/inspectTaskDialog.vue';
+import inspectTaskDialog from './components/inspectTaskDialog.vue'
+import uploadDialog from './components/upload.vue'
 import { departmentApi } from '/@/api/systemManage/department';
 import { teamManageApi } from '/@/api/systemManage/personShiftManage/teamManage';
 import { inspectPointApi } from '/@/api/intellectInspectSystem/inspectPointManage';
@@ -178,9 +181,10 @@
 }
 export default {
     name: 'index',
-    components: { inspectTaskDialog },
+    components: { inspectTaskDialog, uploadDialog },
     setup() {
         const inspectTaskDialogRef = ref();
+        const uploadRef = ref()
         const state = reactive<stateType>({
             tableData: {
                 inspectTaskData: [],
@@ -425,6 +429,10 @@
             }
         };
 
+        const openUploadDialog = (type: string)=>{
+          uploadRef.value.open(type)
+        }
+
         // 分页改变
         const onHandleSizeChange = (val: number) => {
             state.tableData.params.pageSize = val;
@@ -467,7 +475,9 @@
             Delete,
             Refresh,
             Plus,
+            Upload,
             reset,
+          openUploadDialog,
             changeStatus,
             changeGroup,
             parseNumber,
@@ -476,6 +486,7 @@
             onHandleSizeChange,
             onHandleCurrentChange,
             inspectTaskDialogRef,
+            uploadRef,
             openInspectTaskDialog,
             ...toRefs(state)
         };
diff --git a/src/views/intellectInspect/intelligentLine/index.vue b/src/views/intellectInspect/intelligentLine/index.vue
index bacc19e..b447b2c 100644
--- a/src/views/intellectInspect/intelligentLine/index.vue
+++ b/src/views/intellectInspect/intelligentLine/index.vue
@@ -147,6 +147,7 @@
     initialY:number|null
     xOffset:number|null
     yOffset:number|null
+    timer: null | any
 }
 export default {
     name: 'intelligentLine',
@@ -168,11 +169,12 @@
             initialX: 0,
             initialY: 0,
             xOffset: 0,
-            yOffset: 0
+            yOffset: 0,
+            timer: null
         });
 
         onMounted(() => {
-            setInterval(() => {
+            state.timer = setInterval(() => {
                 state.present = new Date().toLocaleString();
             }, 1000);
             let curId = route.query.id
@@ -294,6 +296,7 @@
                     console.log('socket已经关闭');
                 };
             })
+            clearInterval(state.timer)
           draggableElement.value.removeEventListener('mousedown', handleMouseDown);
           draggableElement.value.removeEventListener('mousemove', handleMouseMove);
           draggableElement.value.removeEventListener('mouseup', handleMouseUp);
diff --git a/src/views/loginPage/component/accountLogin.vue b/src/views/loginPage/component/accountLogin.vue
index cbe9579..d67fed6 100644
--- a/src/views/loginPage/component/accountLogin.vue
+++ b/src/views/loginPage/component/accountLogin.vue
@@ -311,7 +311,6 @@
             onSignIn,
             identify,
             confirmIdentity,
-            validatePass,
             validatePass2,
             ...toRefs(state)
         };
diff --git a/src/views/loginPage/loginPage.vue b/src/views/loginPage/loginPage.vue
index ee6db15..5316985 100644
--- a/src/views/loginPage/loginPage.vue
+++ b/src/views/loginPage/loginPage.vue
@@ -7,7 +7,7 @@
             <el-col :md="12">
                 <div class="loginContL">
                     <div class="apTitleT">新疆国泰新华</div>
-                    <div class="apTitleB">安全风险预警监测系统(试运行)</div>
+                    <div class="apTitleB">安全风险预警监测系统</div>
                     <span></span>
                 </div>
             </el-col>
diff --git a/src/views/newHome/index.vue b/src/views/newHome/index.vue
index e04132f..5e11dcb 100644
--- a/src/views/newHome/index.vue
+++ b/src/views/newHome/index.vue
@@ -21,7 +21,7 @@
         <div class="leftCont"></div>
         <div class="topCont">
             <div class="topInfo">
-                <div class="topTit">新疆国泰新华<br />安全风险预警监测系统(试运行)</div>
+                <div class="topTit">新疆国泰新华<br />安全风险预警监测系统</div>
                 <div class="topTime">
                     <div class="time">
                         {{ time }}
@@ -91,6 +91,16 @@
                     </div>
                   </div>
                   <img class="bgImg" src="../../assets/newMenu/card-12.png" />
+                </div>
+                <div class="grid-content cont-bg-2" v-throttle @click="render('12')">
+                  <div class="toplayer">
+                    <img class="iconImg" src="../../assets/newMenu/icon14.png" />
+                    <div>
+                      <div class="itemTit">监管数据融合互通系统</div>
+                      <div class="enTit">Regulatory Data Integration and Interoperability System</div>
+                    </div>
+                  </div>
+                  <img class="bgImg" src="../../assets/newMenu/card-14.png" />
                 </div>
                 <div class="grid-content cont-bg-2" v-throttle @click="render('7')">
                     <div class="toplayer">
@@ -183,7 +193,7 @@
 </template>
 
 <script lang="ts">
-import { toRefs, reactive, computed, defineComponent, onMounted } from 'vue';
+import {toRefs, reactive, computed, defineComponent, onMounted, onUnmounted} from 'vue';
 import { storeToRefs } from 'pinia';
 import { useThemeConfig } from '/@/stores/themeConfig';
 import logoMini from '/@/assets/logo-mini.svg';
@@ -216,6 +226,7 @@
     date: string;
     weekDay: string;
     dayTime: string;
+    timer: null | any
 }
 
 export default defineComponent({
@@ -250,7 +261,8 @@
             date: '',
             weekDay: '',
             dayTime: '',
-            isScreenfull: false
+            isScreenfull: false,
+              timer: null
         });
 
         const userName = computed(() =>{
@@ -360,7 +372,7 @@
           window.open('http://10.211.134.139:5522/#/login');
         }
         const toManLocation = () =>{
-          window.open('http://10.211.134.138:8081/GUOTAI');
+          window.open('http://124.88.37.66:8081/location_system_5.4.9/login/login.html?company=GUOTAI&version=5.4.9');
         }
         const throttle = (renderMenu: any, delay: number) => {
             let flag = true;
@@ -422,12 +434,17 @@
             state.once += 1;
             NextLoading.done();
             getDateTime();
-            setInterval(() => {
+            state.timer = setInterval(() => {
                 getDateTime();
-            }, 1000);
+            }, 30000);
             // loginBg();
             // loginApp()
-        });
+        })
+
+      onUnmounted(() => {
+        clearInterval(state.timer)
+      });
+
         return {
             render,
             userName,
diff --git a/src/views/newSpecialWorkSystem/workTicket/sqjl/index.vue b/src/views/newSpecialWorkSystem/workTicket/sqjl/index.vue
index 6882547..11544dc 100644
--- a/src/views/newSpecialWorkSystem/workTicket/sqjl/index.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/sqjl/index.vue
@@ -50,6 +50,11 @@
                                 <el-button type="primary" :icon="Refresh" size="default" @click="reLoadData()" />
                             </el-row>
                             <el-table ref="multipleTableRef" :data="applyData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }">
+                              <el-table-column property="workPermitNo" label="作业编号" align="center">
+                                <template #default="scope">
+                                  {{scope.row.workPermitNo?scope.row.workPermitNo:'—'}}
+                                </template>
+                              </el-table-column>
                                 <el-table-column property="seDepName" label="事业部" align="center"/>
                                 <el-table-column property="applyDepName" label="作业所在车间" align="center"/>
                                 <el-table-column property="workContent" label="作业内容" align="center"/>
@@ -87,7 +92,7 @@
                                     {{scope.row.guardianList.length}}
                                   </template>
                                 </el-table-column>
-                                <el-table-column label="风险研判" align="center">
+                                <el-table-column label="作业状态" align="center">
                                     <template #default="scope">
                                         <el-tag>{{ statusList.find(i=>i.value === scope.row.status)?.label }}</el-tag>
                                     </template>
@@ -98,7 +103,7 @@
                                         <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button>
 <!--                                        <el-button link type="success" size="small" :icon="Finished">修改</el-button>-->
 <!--                                        <el-button link type="success" size="small" :icon="Download">正式办票</el-button>-->
-<!--                                        <el-button :disabled="scope.row.status == 7 ? false : true" link type="primary" size="small" :icon="Download" @click="downLoadBtn(scope.row)">导出作业票</el-button>-->
+                                        <el-button link type="primary" size="small" :icon="Download" @click="downLoadRecord(scope.row)">作业票预览</el-button>
                                     </template>
                                 </el-table-column>
                             </el-table>
@@ -203,15 +208,15 @@
                         </span>
                     </template>
                 </el-dialog>
-                <el-dialog v-model="downLoadDialog" title="提示" width="30%" center>
-                    <span>您确定要导出该条记录吗?</span>
-                    <template #footer>
-                                <span class="dialog-footer">
-                                    <el-button @click="downLoadDialog = false" size="default">取消</el-button>
-                                    <el-button type="primary" @click="conFirmDownLoad" size="default">确认</el-button>
-                                </span>
-                    </template>
-                </el-dialog>
+<!--                <el-dialog v-model="downLoadDialog" title="提示" width="30%" center>-->
+<!--                    <span>您确定要导出该条记录吗?</span>-->
+<!--                    <template #footer>-->
+<!--                                <span class="dialog-footer">-->
+<!--                                    <el-button @click="downLoadDialog = false" size="default">取消</el-button>-->
+<!--                                    <el-button type="primary" @click="conFirmDownLoad" size="default">确认</el-button>-->
+<!--                                </span>-->
+<!--                    </template>-->
+<!--                </el-dialog>-->
 <!--            </el-tab-pane>-->
 <!--            <el-tab-pane label="已通过" name="2">-->
 <!--                <div style="height: 100%">-->
@@ -276,13 +281,10 @@
     dialogDetails: boolean;
     dialogStatus: boolean;
     deleteDialog: boolean;
-    downLoadDialog: boolean;
     pageIndex1: number;
     pageSize1: number;
     chosenIndex: null | number;
     deleteId: null | number;
-    downLoadId: null | number;
-    downLoadName: string;
     totalSize1: number;
     activeName: string;
     addRecord: {};
@@ -340,13 +342,10 @@
             dialogDetails: false,
             dialogStatus: false,
             deleteDialog: false,
-            downLoadDialog: false,
             addRecord: {},
             details: {},
             statusInfo: {},
             deleteId: null,
-            downLoadId: null,
-            downLoadName: '',
             deleteArr: [],
             dep4List: [
               {id:49,name:'电石事业部'},
@@ -567,26 +566,21 @@
             state.deleteDialog = false;
         };
 
-        // 导出图表
-        const downLoadBtn = (row:any) =>{
-            state.downLoadId = row.workApplyId;
-            state.downLoadName = row.workTypeDesc + row.workPermitNo
-            state.downLoadDialog = true;
-        }
 
         // 导出方法
-        const downLoadRecord = async (data: any) => {
+        const downLoadRecord = (row: any) => {
             // let res = await workApplyApi().postPrinting(data);
-            axios.post(import.meta.env.VITE_API_URL + `/work/apply/printingPdf`,data,{headers:{'Content-Type': 'application/json','Authorization': `${Cookies.get('token')}`,'uid':`${Cookies.get('uid')}`},responseType: 'blob'}).then(res=>{
+            console.log(row,555)
+            axios.post(import.meta.env.VITE_API_URL + `/specialwork9step/work/down/load/pdf`,{ id: row.id},{headers:{'Content-Type': 'application/json','Authorization': `${Cookies.get('token')}`,'uid':`${Cookies.get('uid')}`},responseType: 'blob'}).then(res=>{
                 if (res) {
                     const link = document.createElement('a')
                     let blob = new Blob([res.data],{type: 'application/pdf'})
                     link.style.display = "none";
                     link.href = URL.createObjectURL(blob); // 创建URL
-                    link.setAttribute("download", state.downLoadName + "作业证.pdf");
-                    document.body.appendChild(link);
-                    link.click();
-                    document.body.removeChild(link);
+                    link.setAttribute("download", row.workTypeDesc + row.workPermitNo + "作业证.pdf");
+                    document.body.appendChild(link)
+                    window.open(link.href)
+                    document.body.removeChild(link)
                 } else {
                     ElMessage({
                         type: 'warning',
@@ -595,11 +589,6 @@
                 }
             })
 
-        };
-
-        const conFirmDownLoad = () => {
-            downLoadRecord({ applyWorkId: state.downLoadId });
-            state.downLoadDialog = false;
         };
 
         const handleSizeChange1 = (val: number) => {
@@ -649,9 +638,8 @@
             viewRecord,
             viewStatus,
             deleteRecordBtn,
-            downLoadBtn,
+            downLoadRecord,
             conFirmDelete,
-            conFirmDownLoad,
             getListByPage,
             handleSizeChange1,
             handleCurrentChange1,
diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsp/index.vue b/src/views/newSpecialWorkSystem/workTicket/wdsp/index.vue
index 84dfa62..51866d3 100644
--- a/src/views/newSpecialWorkSystem/workTicket/wdsp/index.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/wdsp/index.vue
@@ -238,14 +238,14 @@
 export default defineComponent({
     name: 'myApproval',
     components: {
-        fire: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsp/components/fireLog.vue')),
-        space: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsp/components/spaceLog.vue')),
-        hoist: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsp/components/hoistLog.vue')),
-        ground: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsp/components/groundLog.vue')),
-        broken: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsp/components/brokenLog.vue')),
-        height: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsp/components/heightLog.vue')),
-        power: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsp/components/powerLog.vue')),
-        plate: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsp/components/plateLog.vue'))
+        fire: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsp/components/fireLog.vue')),
+        space: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsp/components/spaceLog.vue')),
+        hoist: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsp/components/hoistLog.vue')),
+        ground: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsp/components/groundLog.vue')),
+        broken: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsp/components/brokenLog.vue')),
+        height: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsp/components/heightLog.vue')),
+        power: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsp/components/powerLog.vue')),
+        plate: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsp/components/plateLog.vue'))
     },
     setup() {
         const userInfo = useUserInfo();
diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue
index 5eee2f8..8502469 100644
--- a/src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue
@@ -6,7 +6,7 @@
                     <el-row class="homeCard">
                       <div class="basic-line" style="display:flex;white-space:nowrap;line-height: 40px">
                         <span>时间筛选:</span>
-                        <el-date-picker v-model="timeRange" value-format="YYYY-MM-DD HH:mm:ss" type="datetimerange" @change="giveTime()" range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间" />
+                        <el-date-picker v-model="timeRange" value-format="YYYY-MM-DD" type="daterange" @change="giveTime" range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间" />
                       </div>
                       <div class="basic-line" style="display:flex;white-space:nowrap;line-height: 40px">
                         <span>负责人:</span>
@@ -44,7 +44,7 @@
                             <el-row class="cardTop">
                                 <el-col :span="12" class="mainCardBtn">
                                     <el-button type="primary" :icon="Plus" size="default" @click="toApply()">申请</el-button>
-                                    <el-button type="primary" :icon="Download" size="default" @click="exportSheet()">导出当日记录</el-button>
+                                    <el-button type="primary" :icon="Download" size="default" @click="exportSheet()">导出记录</el-button>
                                 </el-col>
                                 <el-button type="primary" :icon="Refresh" size="default" @click="reLoadData()" />
                             </el-row>
@@ -93,7 +93,7 @@
                                         <el-button v-else link type="primary" size="small" @click="openReport('查看', scope.row)">查看研判报告</el-button>
                                     </template>
                                 </el-table-column>
-                                <el-table-column fixed="right" label="操作" align="center" width="300">
+                                <el-table-column fixed="right" label="操作" align="center" width="150">
                                     <template #default="scope">
                                         <span v-if="scope.row.status == -1">已废止</span>
                                         <el-button v-if="scope.row.status == 0 || scope.row.status == 1" link type="danger" size="small" :icon="Delete" @click="abortRecordBtn(scope.row)">作废</el-button>
@@ -293,7 +293,7 @@
         const giveTime = () => {
           if (state.timeRange && state.timeRange !== null) {
             state.searPara.startTime = state.timeRange[0];
-            state.searPara.endTime = state.timeRange[1];
+            state.searPara.endTime = state.timeRange[1]
           } else {
             state.searPara.startTime = '';
             state.searPara.endTime = '';
@@ -382,6 +382,7 @@
 
         // 关键词查询记录
         const searchRecord = async () => {
+          state.pageIndex1 = 1
           getListByPage();
         };
         // 重置搜索
@@ -485,13 +486,17 @@
         // 导出方法
         const exportSheet = async () => {
             // let res = await workApplyApi().postPrinting(data);
-            axios.post(import.meta.env.VITE_API_URL + `/specialwork9step/work/export/excel`,{},{headers:{'Content-Type': 'application/json','Authorization': `${Cookies.get('token')}`,'uid':`${Cookies.get('uid')}`},responseType: 'blob'}).then(res=>{
+            axios.post(import.meta.env.VITE_API_URL + `/specialwork9step/work/export/excel`,{startTime: state.searPara.startTime,endTime: state.searPara.endTime,secondDepId: state.searPara.secondDepId},{headers:{'Content-Type': 'application/json','Authorization': `${Cookies.get('token')}`,'uid':`${Cookies.get('uid')}`},responseType: 'blob'}).then(res=>{
                 if (res) {
                     const link = document.createElement('a')
                     let blob = new Blob([res.data],{type: 'application/excel'})
                     link.style.display = "none";
                     link.href = URL.createObjectURL(blob); // 创建URL
-                    link.setAttribute("download", "作业申报记录.xlsx");
+                    if(state.searPara.startTime !== '' && state.searPara.endTime !==''){
+                      link.setAttribute("download", state.searPara.startTime + '—' + state.searPara.endTime +"作业申报记录.xlsx")
+                    }else{
+                      link.setAttribute("download", "作业申报记录.xlsx")
+                    }
                     document.body.appendChild(link);
                     link.click();
                     document.body.removeChild(link);
diff --git a/src/views/riskWarningSys/warningBigScreen/index.vue b/src/views/riskWarningSys/warningBigScreen/index.vue
index 53f4a47..15c75bc 100644
--- a/src/views/riskWarningSys/warningBigScreen/index.vue
+++ b/src/views/riskWarningSys/warningBigScreen/index.vue
@@ -215,6 +215,7 @@
         depProps: object;
         departList: Array<any>;
         lastTrain: number | null;
+        timer: any|null
     }
     export default defineComponent({
         name: 'warningScreen',
@@ -256,13 +257,14 @@
                     emitPath: false
                 },
                 departList: [],
+                timer: null
             });
             // 页面载入时执行方法
             onMounted(() => {
                 state.depValue = screenTheme.value.depId
                 getTime();
                 getAllDepartment();
-                setInterval(()=>{
+                state.timer = setInterval(()=>{
                     getTime()
                 },1000)
                 getTheme()
@@ -363,7 +365,7 @@
             };
 
             onBeforeUnmount(() =>{
-                clearInterval()
+                clearInterval(state.timer)
             })
             // 隐患状态列表
             // const getDeviceRecord = async () => {
diff --git a/src/views/specialWorkSystem/specialIndex/index.vue b/src/views/specialWorkSystem/specialIndex/index.vue
index ce6908a..9e3b2f9 100644
--- a/src/views/specialWorkSystem/specialIndex/index.vue
+++ b/src/views/specialWorkSystem/specialIndex/index.vue
@@ -252,14 +252,15 @@
       </div>
     </div>
     <el-dialog v-model="dialogDetails" title="作业申请详情" center>
-      <fire v-if="dialogType == 1" :details = details></fire>
-      <space v-else-if="dialogType == 2" :details = details></space>
-      <hoist v-else-if="dialogType == 3" :details = details></hoist>
-      <ground v-else-if="dialogType == 4" :details = details></ground>
-      <broken v-else-if="dialogType == 5" :details = details></broken>
-      <height v-else-if="dialogType == 6" :details = details></height>
-      <power v-else-if="dialogType == 7" :details = details></power>
-      <plate v-else :details = details></plate>
+<!--      <fire v-if="dialogType == 1" :details = details></fire>-->
+<!--      <space v-else-if="dialogType == 2" :details = details></space>-->
+<!--      <hoist v-else-if="dialogType == 3" :details = details></hoist>-->
+<!--      <ground v-else-if="dialogType == 4" :details = details></ground>-->
+<!--      <broken v-else-if="dialogType == 5" :details = details></broken>-->
+<!--      <height v-else-if="dialogType == 6" :details = details></height>-->
+<!--      <power v-else-if="dialogType == 7" :details = details></power>-->
+<!--      <plate v-else :details = details></plate>-->
+<!--      <detail-log :type=dialogType :statusList=statusList :details = details></detail-log>-->
       <template #footer>
               <span class="dialog-footer">
                 <el-button type="primary" @click="dialogDetails = false"
@@ -371,24 +372,24 @@
   components: {
     VideoDetail,
     WorkRecord,
-    fire: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/fireLog.vue')),
-    space: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/spaceLog.vue')),
-    hoist: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/hoistLog.vue')),
-    ground: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/groundLog.vue')),
-    broken: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/brokenLog.vue')),
-    height: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/heightLog.vue')),
-    power: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/powerLog.vue')),
-    plate: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/plateLog.vue'))
+    // fire: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/fireLog.vue')),
+    // space: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/spaceLog.vue')),
+    // hoist: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/hoistLog.vue')),
+    // ground: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/groundLog.vue')),
+    // broken: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/brokenLog.vue')),
+    // height: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/heightLog.vue')),
+    // power: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/powerLog.vue')),
+    // plate: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/plateLog.vue'))
   },
   setup() {
-    const userInfo = useUserInfo();
-    const { userInfos } = storeToRefs(userInfo);
-    const router = useRouter();
+    const userInfo = useUserInfo()
+    const { userInfos } = storeToRefs(userInfo)
+    const router = useRouter()
     const reviewFormRef = ref<FormInstance>()
     const zyfb = ref("eChartZyfb" + Date.now() + Math.random())
     const slfx = ref("eChartSlfx" + Date.now() + Math.random())
     const zyqs = ref("eChartZyqs" + Date.now() + Math.random())
-    const videoRef = ref();
+    const videoRef = ref()
     const recordRef = ref()
     const state = reactive<stateType>({
       pageIndex: 1,
@@ -897,44 +898,44 @@
     };
 
     // 查看记录
-    const viewDetail = (row: any) => {
-      state.dialogType = row.workType
-      state.details = JSON.parse(JSON.stringify(row));
-      if(state.details.workDetail.otherSpecialWork == '' || !state.details.workDetail.otherSpecialWork){
-        state.details.workDetail.otherSpecialWork=[]
-      }
-      else {
-        const a = state.details.workDetail.otherSpecialWork
-        state.details.workDetail.otherSpecialWork = a.split(',').map((item) => {
-          return state.workTypeList.find((i: { id: number }) => i.id === Number(item))?.name;
-        });
-      }
-      if(state.details.workDetail.involvedDepIds == '' || !state.details.workDetail.involvedDepIds){
-        state.details.workDetail.involvedDepIds=[]
-      }
-      else {
-        const a = state.details.workDetail.involvedDepIds
-        state.details.workDetail.involvedDepIds = a.split(',').map((item) => {
-          return state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(item))?.depName;
-        });
-      }
-      if(state.details.workDetail.csDepId){
-        state.details.workDetail.csDepId = state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(state.details.workDetail.csDepId))?.depName;
-      }
-      if(state.details.workDetail.operationDepId){
-        state.details.workDetail.operationDepId = state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(state.details.workDetail.operationDepId))?.depName;
-      }
-      if(state.details.workDetail.gbPath){
-        state.details.workDetail.gbPath = state.details.workDetail.gbPath.split(',')
-      }
-      if(state.details.workDetail.bcPath){
-        state.details.workDetail.bcPath = state.details.workDetail.bcPath.split(',')
-      }
-      if(state.details.workDetail.bpLocationMapPath){
-        state.details.workDetail.bpLocationMapPath = state.details.workDetail.bpLocationMapPath.split(',')
-      }
-      state.dialogDetails = true;
-    };
+    // const viewDetail = (row: any) => {
+    //   state.dialogType = row.workType
+    //   state.details = JSON.parse(JSON.stringify(row));
+    //   if(state.details.workDetail.otherSpecialWork == '' || !state.details.workDetail.otherSpecialWork){
+    //     state.details.workDetail.otherSpecialWork=[]
+    //   }
+    //   else {
+    //     const a = state.details.workDetail.otherSpecialWork
+    //     state.details.workDetail.otherSpecialWork = a.split(',').map((item) => {
+    //       return state.workTypeList.find((i: { id: number }) => i.id === Number(item))?.name;
+    //     });
+    //   }
+    //   if(state.details.workDetail.involvedDepIds == '' || !state.details.workDetail.involvedDepIds){
+    //     state.details.workDetail.involvedDepIds=[]
+    //   }
+    //   else {
+    //     const a = state.details.workDetail.involvedDepIds
+    //     state.details.workDetail.involvedDepIds = a.split(',').map((item) => {
+    //       return state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(item))?.depName;
+    //     });
+    //   }
+    //   if(state.details.workDetail.csDepId){
+    //     state.details.workDetail.csDepId = state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(state.details.workDetail.csDepId))?.depName;
+    //   }
+    //   if(state.details.workDetail.operationDepId){
+    //     state.details.workDetail.operationDepId = state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(state.details.workDetail.operationDepId))?.depName;
+    //   }
+    //   if(state.details.workDetail.gbPath){
+    //     state.details.workDetail.gbPath = state.details.workDetail.gbPath.split(',')
+    //   }
+    //   if(state.details.workDetail.bcPath){
+    //     state.details.workDetail.bcPath = state.details.workDetail.bcPath.split(',')
+    //   }
+    //   if(state.details.workDetail.bpLocationMapPath){
+    //     state.details.workDetail.bpLocationMapPath = state.details.workDetail.bpLocationMapPath.split(',')
+    //   }
+    //   state.dialogDetails = true;
+    // };
 
     // const handleReview = (row: object)=>{
     //   state.dialogReview = true
@@ -1052,7 +1053,7 @@
       toApply,
       searchRecord,
       clearSearch,
-      viewDetail,
+      // viewDetail,
       viewRecord,
       viewTicket,
       downLoadTicket,
diff --git a/src/views/specialWorkSystem/workTicket/wdsp/components/brokenLog.vue b/src/views/specialWorkSystem/workTicket/wdsp/components/brokenLog.vue
deleted file mode 100644
index dcb6adc..0000000
--- a/src/views/specialWorkSystem/workTicket/wdsp/components/brokenLog.vue
+++ /dev/null
@@ -1,152 +0,0 @@
-<template>
-	<div style="height: 100%">
-		<el-form :model="details" label-width="150px">
-			<el-form-item label="作业申请单号">
-				<el-input v-model="details.workPermitNo" readonly />
-			</el-form-item>
-			<el-form-item label="申请人">
-				<el-input v-model="details.applyUname" readonly />
-			</el-form-item>
-			<el-form-item label="部门名称">
-				<el-input v-model="details.depName" readonly />
-			</el-form-item>
-			<el-form-item label="作业人">
-				<el-input v-model="details.operators" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="作业类型">
-				<el-input v-model="details.workTypeDesc" readonly />
-			</el-form-item>
-			<el-form-item label="作业等级">
-				<el-input v-model="details.workLevelDesc" readonly />
-			</el-form-item>
-			<el-form-item label="作业内容">
-				<el-input v-model="details.workContent" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="作业地址">
-				<el-input v-model="details.workLocation" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="作业单位ID">
-				<el-input v-model="details.workDetail.operationDepId" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="断路原因">
-				<el-input v-model="details.workDetail.bcReason" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="断路地段说明">
-				<el-input v-model="details.workDetail.bcExplain" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="涉及相关部门">
-				<el-input v-model="details.workDetail.involvedDepIds" readonly type="textarea"/>
-			</el-form-item>
-			<el-form-item label="图片">
-				<el-image v-for="item in details.workDetail.bcPath" :preview-src-list="details.workDetail.bcPath" style="width: 150px; height: 150px;margin-right: 50px;margin-bottom: 20px" :src="item" fit="cover" />
-			</el-form-item>
-			<el-form-item label="期望开始时间">
-				<el-input v-model="details.expStartTime" readonly />
-			</el-form-item>
-			<el-form-item label="期望结束时间">
-				<el-input v-model="details.expEndTime" readonly />
-			</el-form-item>
-			<el-form-item label="申请时间">
-				<el-input v-model="details.applyTime" readonly />
-			</el-form-item>
-<!--			<el-form-item label="当前层级">-->
-<!--				<el-input v-model="details.stepId" readonly />-->
-<!--			</el-form-item>-->
-<!--			<el-form-item label="上一层级">-->
-<!--				<el-input v-model="details.preStepId" readonly />-->
-<!--			</el-form-item>-->
-<!--			<el-form-item label="下一层级">-->
-<!--				<el-input v-model="details.nextStepId" readonly />-->
-<!--			</el-form-item>-->
-			<el-form-item label="层级审批类型">
-				<el-input v-model="details.stepTypeDesc" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.stepSerial && details.stepSerial!=null" label="层级排序号">
-				<el-input v-model="details.stepSerial" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.stepStartApprovalTime && details.stepStartApprovalTime!=null" label="层级预期开始审批时间">
-				<el-input v-model="details.stepStartApprovalTime" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.stepFinishApprovalTime && details.stepFinishApprovalTime!=null" label="层级预期结束审批时间">
-				<el-input v-model="details.stepFinishApprovalTime" readonly />
-			</el-form-item>
-			<el-form-item label="审批人姓名">
-				<el-input v-model="details.unitApprovalUname" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.unitApprovalStartTime && details.unitApprovalStartTime!=null"  label="单元审批开始时间">
-				<el-input v-model="details.unitApprovalStartTime" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.unitApprovalEndTime && details.unitApprovalEndTime!=null" label="单元审批结束时间">
-				<el-input v-model="details.unitApprovalEndTime" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.unitResultDesc && details.unitResultDesc!=null" label="单元审批结果">
-				<el-input v-model="details.unitResultDesc" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.statusDesc && details.statusDesc!=null" label="当前状态">
-				<el-input v-model="details.statusDesc" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.stepApprovalResultDesc && details.stepApprovalResultDesc!=null" label="审批结果">
-				<el-input v-model="details.stepApprovalResultDesc" readonly />
-			</el-form-item>
-		</el-form>
-	</div>
-</template>
-
-<script lang="ts">
-	import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue';
-	import { storeToRefs } from 'pinia';
-	import { initBackEndControlRoutes } from '/@/router/backEnd';
-	import {useUserInfo} from "/@/stores/userInfo";
-	import { Session } from '/@/utils/storage';
-	import { Search } from '@element-plus/icons-vue'
-	import { ElMessage } from 'element-plus'
-	import type { FormInstance, FormRules } from 'element-plus'
-	import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-
-
-	interface stateType {
-		form: Object,
-		workerList: Array<any>,
-		workTypeList: Array<any>,
-		workLevelList: Array<any>,
-		otherWorkList: Array<any>
-	}
-	export default defineComponent({
-		name: 'space',
-		components: {},
-		props:['details'],
-		setup() {
-			const userInfo = useUserInfo()
-			const { userInfos } = storeToRefs(userInfo);
-			return {
-				Search
-			};
-		},
-	});
-</script>
-
-<style scoped lang="scss">
-	.home-container {
-		height: 100%;
-		overflow: hidden;
-		position: relative;
-		.el-row{
-			margin-bottom: 20px;
-		}
-		.el-row:last-child {
-			margin-bottom: 0;
-		}
-		.el-input{
-			width: 100% !important;
-		}
-		.el-date-editor::v-deep{
-			width: 100%;
-		}
-		.el-select{
-			width: 100%;
-		}
-		.el-cascader{
-			width: 100% !important;
-		}
-	}
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/wdsp/components/fireLog.vue b/src/views/specialWorkSystem/workTicket/wdsp/components/fireLog.vue
deleted file mode 100644
index ed30241..0000000
--- a/src/views/specialWorkSystem/workTicket/wdsp/components/fireLog.vue
+++ /dev/null
@@ -1,137 +0,0 @@
-<template>
-	<div style="height: 100%">
-		<el-form :model="details" label-width="150px">
-			<el-form-item label="作业申请单号">
-				<el-input v-model="details.workPermitNo" readonly />
-			</el-form-item>
-			<el-form-item label="申请人">
-				<el-input v-model="details.applyUname" readonly />
-			</el-form-item>
-			<el-form-item label="部门名称">
-				<el-input v-model="details.depName" readonly />
-			</el-form-item>
-			<el-form-item label="作业人">
-				<el-input v-model="details.operators" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="作业类型">
-				<el-input v-model="details.workTypeDesc" readonly />
-			</el-form-item>
-			<el-form-item label="作业等级">
-				<el-input v-model="details.workLevelDesc" readonly />
-			</el-form-item>
-			<el-form-item label="作业内容">
-				<el-input v-model="details.workContent" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="作业地址">
-				<el-input v-model="details.workLocation" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="作业方式">
-				<el-input v-model="details.workDetail.hotMethod" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="关联其他作业">
-				<el-input v-model="details.workDetail.otherSpecialWork" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="申请时间">
-				<el-input v-model="details.applyTime" readonly />
-			</el-form-item>
-<!--			<el-form-item label="当前层级">-->
-<!--				<el-input v-model="details.stepId" readonly />-->
-<!--			</el-form-item>-->
-<!--			<el-form-item label="上一层级">-->
-<!--				<el-input v-model="details.preStepId" readonly />-->
-<!--			</el-form-item>-->
-<!--			<el-form-item label="下一层级">-->
-<!--				<el-input v-model="details.nextStepId" readonly />-->
-<!--			</el-form-item>-->
-			<el-form-item label="层级审批类型">
-				<el-input v-model="details.stepTypeDesc" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.stepSerial && details.stepSerial!=null" label="层级排序号">
-				<el-input v-model="details.stepSerial" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.stepStartApprovalTime && details.stepStartApprovalTime!=null" label="层级预期开始审批时间">
-				<el-input v-model="details.stepStartApprovalTime" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.stepFinishApprovalTime && details.stepFinishApprovalTime!=null" label="层级预期结束审批时间">
-				<el-input v-model="details.stepFinishApprovalTime" readonly />
-			</el-form-item>
-			<el-form-item label="审批人姓名">
-				<el-input v-model="details.unitApprovalUname" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.unitApprovalStartTime && details.unitApprovalStartTime!=null"  label="单元审批开始时间">
-				<el-input v-model="details.unitApprovalStartTime" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.unitApprovalEndTime && details.unitApprovalEndTime!=null" label="单元审批结束时间">
-				<el-input v-model="details.unitApprovalEndTime" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.unitResultDesc && details.unitResultDesc!=null" label="单元审批结果">
-				<el-input v-model="details.unitResultDesc" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.statusDesc && details.statusDesc!=null" label="当前状态">
-				<el-input v-model="details.statusDesc" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.stepApprovalResultDesc && details.stepApprovalResultDesc!=null" label="审批结果">
-				<el-input v-model="details.stepApprovalResultDesc" readonly />
-			</el-form-item>
-		</el-form>
-	</div>
-</template>
-
-<script lang="ts">
-	import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue';
-	import { storeToRefs } from 'pinia';
-	import { initBackEndControlRoutes } from '/@/router/backEnd';
-	import {useUserInfo} from "/@/stores/userInfo";
-	import { Session } from '/@/utils/storage';
-	import { Search } from '@element-plus/icons-vue'
-	import { ElMessage } from 'element-plus'
-	import type { FormInstance, FormRules } from 'element-plus'
-	import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-
-
-	interface stateType {
-		form: Object,
-		workerList: Array<any>,
-		workTypeList: Array<any>,
-		workLevelList: Array<any>,
-		otherWorkList: Array<any>
-	}
-	export default defineComponent({
-		name: 'fire',
-		components: {},
-		props:['details'],
-		setup() {
-			const userInfo = useUserInfo()
-			const { userInfos } = storeToRefs(userInfo);
-			return {
-				Search
-			};
-		},
-	});
-</script>
-
-<style scoped lang="scss">
-	.home-container {
-		height: 100%;
-		overflow: hidden;
-		position: relative;
-		.el-row{
-			margin-bottom: 20px;
-		}
-		.el-row:last-child {
-			margin-bottom: 0;
-		}
-		.el-input{
-			width: 100% !important;
-		}
-		.el-date-editor::v-deep{
-			width: 100%;
-		}
-		.el-select{
-			width: 100%;
-		}
-		.el-cascader{
-			width: 100% !important;
-		}
-	}
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/wdsp/components/groundLog.vue b/src/views/specialWorkSystem/workTicket/wdsp/components/groundLog.vue
deleted file mode 100644
index 244330e..0000000
--- a/src/views/specialWorkSystem/workTicket/wdsp/components/groundLog.vue
+++ /dev/null
@@ -1,152 +0,0 @@
-<template>
-	<div style="height: 100%">
-		<el-form :model="details" label-width="150px">
-			<el-form-item label="作业申请单号">
-				<el-input v-model="details.workPermitNo" readonly />
-			</el-form-item>
-			<el-form-item label="申请人">
-				<el-input v-model="details.applyUname" readonly />
-			</el-form-item>
-			<el-form-item label="部门名称">
-				<el-input v-model="details.depName" readonly />
-			</el-form-item>
-			<el-form-item label="作业人">
-				<el-input v-model="details.operators" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="作业类型">
-				<el-input v-model="details.workTypeDesc" readonly />
-			</el-form-item>
-			<el-form-item label="作业等级">
-				<el-input v-model="details.workLevelDesc" readonly />
-			</el-form-item>
-			<el-form-item label="作业内容">
-				<el-input v-model="details.workContent" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="作业地址">
-				<el-input v-model="details.workLocation" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="作业单位">
-				<el-input v-model="details.workDetail.operationDepId" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="范围">
-				<el-input v-model="details.workDetail.gbScope" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="动土方式">
-				<el-input v-model="details.workDetail.gbMethod" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="关联其他作业">
-				<el-input v-model="details.workDetail.otherSpecialWork" readonly type="textarea"/>
-			</el-form-item>
-			<el-form-item label="图片">
-				<el-image v-for="item in details.workDetail.gbPath" :preview-src-list="details.workDetail.gbPath" style="width: 150px; height: 150px;margin-right: 50px;margin-bottom: 20px" :src="item" fit="cover" />
-			</el-form-item>
-			<el-form-item label="期望开始时间">
-				<el-input v-model="details.expStartTime" readonly />
-			</el-form-item>
-			<el-form-item label="期望结束时间">
-				<el-input v-model="details.expEndTime" readonly />
-			</el-form-item>
-			<el-form-item label="申请时间">
-				<el-input v-model="details.applyTime" readonly />
-			</el-form-item>
-<!--			<el-form-item label="当前层级">-->
-<!--				<el-input v-model="details.stepId" readonly />-->
-<!--			</el-form-item>-->
-<!--			<el-form-item label="上一层级">-->
-<!--				<el-input v-model="details.preStepId" readonly />-->
-<!--			</el-form-item>-->
-<!--			<el-form-item label="下一层级">-->
-<!--				<el-input v-model="details.nextStepId" readonly />-->
-<!--			</el-form-item>-->
-			<el-form-item label="层级审批类型">
-				<el-input v-model="details.stepTypeDesc" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.stepSerial && details.stepSerial!=null" label="层级排序号">
-				<el-input v-model="details.stepSerial" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.stepStartApprovalTime && details.stepStartApprovalTime!=null" label="层级预期开始审批时间">
-				<el-input v-model="details.stepStartApprovalTime" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.stepFinishApprovalTime && details.stepFinishApprovalTime!=null" label="层级预期结束审批时间">
-				<el-input v-model="details.stepFinishApprovalTime" readonly />
-			</el-form-item>
-			<el-form-item label="审批人姓名">
-				<el-input v-model="details.unitApprovalUname" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.unitApprovalStartTime && details.unitApprovalStartTime!=null"  label="单元审批开始时间">
-				<el-input v-model="details.unitApprovalStartTime" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.unitApprovalEndTime && details.unitApprovalEndTime!=null" label="单元审批结束时间">
-				<el-input v-model="details.unitApprovalEndTime" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.unitResultDesc && details.unitResultDesc!=null" label="单元审批结果">
-				<el-input v-model="details.unitResultDesc" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.statusDesc && details.statusDesc!=null" label="当前状态">
-				<el-input v-model="details.statusDesc" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.stepApprovalResultDesc && details.stepApprovalResultDesc!=null" label="审批结果">
-				<el-input v-model="details.stepApprovalResultDesc" readonly />
-			</el-form-item>
-		</el-form>
-	</div>
-</template>
-
-<script lang="ts">
-	import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue';
-	import { storeToRefs } from 'pinia';
-	import { initBackEndControlRoutes } from '/@/router/backEnd';
-	import {useUserInfo} from "/@/stores/userInfo";
-	import { Session } from '/@/utils/storage';
-	import { Search } from '@element-plus/icons-vue'
-	import { ElMessage } from 'element-plus'
-	import type { FormInstance, FormRules } from 'element-plus'
-	import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-
-
-	interface stateType {
-		form: Object,
-		workerList: Array<any>,
-		workTypeList: Array<any>,
-		workLevelList: Array<any>,
-		otherWorkList: Array<any>
-	}
-	export default defineComponent({
-		name: 'space',
-		components: {},
-		props:['details'],
-		setup() {
-			const userInfo = useUserInfo()
-			const { userInfos } = storeToRefs(userInfo);
-			return {
-				Search
-			};
-		},
-	});
-</script>
-
-<style scoped lang="scss">
-	.home-container {
-		height: 100%;
-		overflow: hidden;
-		position: relative;
-		.el-row{
-			margin-bottom: 20px;
-		}
-		.el-row:last-child {
-			margin-bottom: 0;
-		}
-		.el-input{
-			width: 100% !important;
-		}
-		.el-date-editor::v-deep{
-			width: 100%;
-		}
-		.el-select{
-			width: 100%;
-		}
-		.el-cascader{
-			width: 100% !important;
-		}
-	}
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/wdsp/components/heightLog.vue b/src/views/specialWorkSystem/workTicket/wdsp/components/heightLog.vue
deleted file mode 100644
index 0fb8a7a..0000000
--- a/src/views/specialWorkSystem/workTicket/wdsp/components/heightLog.vue
+++ /dev/null
@@ -1,146 +0,0 @@
-<template>
-	<div style="height: 100%">
-		<el-form :model="details" label-width="150px">
-			<el-form-item label="作业申请单号">
-				<el-input v-model="details.workPermitNo" readonly />
-			</el-form-item>
-			<el-form-item label="申请人">
-				<el-input v-model="details.applyUname" readonly />
-			</el-form-item>
-			<el-form-item label="部门名称">
-				<el-input v-model="details.depName" readonly />
-			</el-form-item>
-			<el-form-item label="作业人">
-				<el-input v-model="details.operators" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="作业类型">
-				<el-input v-model="details.workTypeDesc" readonly />
-			</el-form-item>
-			<el-form-item label="作业等级">
-				<el-input v-model="details.workLevelDesc" readonly />
-			</el-form-item>
-			<el-form-item label="作业内容">
-				<el-input v-model="details.workContent" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="作业地址">
-				<el-input v-model="details.workLocation" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="作业单位ID">
-				<el-input v-model="details.workDetail.operationDepId" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="作业高度">
-				<el-input v-model="details.workDetail.operationHeight" readonly type="textarea"><template #append>米(m)</template></el-input>
-			</el-form-item>
-			<el-form-item label="关联其他作业">
-				<el-input v-model="details.workDetail.otherSpecialWork" readonly type="textarea"/>
-			</el-form-item>
-			<el-form-item label="期望开始时间">
-				<el-input v-model="details.expStartTime" readonly />
-			</el-form-item>
-			<el-form-item label="期望结束时间">
-				<el-input v-model="details.expEndTime" readonly />
-			</el-form-item>
-			<el-form-item label="申请时间">
-				<el-input v-model="details.applyTime" readonly />
-			</el-form-item>
-<!--			<el-form-item label="当前层级">-->
-<!--				<el-input v-model="details.stepId" readonly />-->
-<!--			</el-form-item>-->
-<!--			<el-form-item label="上一层级">-->
-<!--				<el-input v-model="details.preStepId" readonly />-->
-<!--			</el-form-item>-->
-<!--			<el-form-item label="下一层级">-->
-<!--				<el-input v-model="details.nextStepId" readonly />-->
-<!--			</el-form-item>-->
-			<el-form-item label="层级审批类型">
-				<el-input v-model="details.stepTypeDesc" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.stepSerial && details.stepSerial!=null" label="层级排序号">
-				<el-input v-model="details.stepSerial" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.stepStartApprovalTime && details.stepStartApprovalTime!=null" label="层级预期开始审批时间">
-				<el-input v-model="details.stepStartApprovalTime" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.stepFinishApprovalTime && details.stepFinishApprovalTime!=null" label="层级预期结束审批时间">
-				<el-input v-model="details.stepFinishApprovalTime" readonly />
-			</el-form-item>
-			<el-form-item label="审批人姓名">
-				<el-input v-model="details.unitApprovalUname" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.unitApprovalStartTime && details.unitApprovalStartTime!=null"  label="单元审批开始时间">
-				<el-input v-model="details.unitApprovalStartTime" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.unitApprovalEndTime && details.unitApprovalEndTime!=null" label="单元审批结束时间">
-				<el-input v-model="details.unitApprovalEndTime" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.unitResultDesc && details.unitResultDesc!=null" label="单元审批结果">
-				<el-input v-model="details.unitResultDesc" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.statusDesc && details.statusDesc!=null" label="当前状态">
-				<el-input v-model="details.statusDesc" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.stepApprovalResultDesc && details.stepApprovalResultDesc!=null" label="审批结果">
-				<el-input v-model="details.stepApprovalResultDesc" readonly />
-			</el-form-item>
-		</el-form>
-	</div>
-</template>
-
-<script lang="ts">
-	import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue';
-	import { storeToRefs } from 'pinia';
-	import { initBackEndControlRoutes } from '/@/router/backEnd';
-	import {useUserInfo} from "/@/stores/userInfo";
-	import { Session } from '/@/utils/storage';
-	import { Search } from '@element-plus/icons-vue'
-	import { ElMessage } from 'element-plus'
-	import type { FormInstance, FormRules } from 'element-plus'
-	import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-
-
-	interface stateType {
-		form: Object,
-		workerList: Array<any>,
-		workTypeList: Array<any>,
-		workLevelList: Array<any>,
-		otherWorkList: Array<any>
-	}
-	export default defineComponent({
-		name: 'space',
-		components: {},
-		props:['details'],
-		setup() {
-			const userInfo = useUserInfo()
-			const { userInfos } = storeToRefs(userInfo);
-			return {
-				Search
-			};
-		},
-	});
-</script>
-
-<style scoped lang="scss">
-	.home-container {
-		height: 100%;
-		overflow: hidden;
-		position: relative;
-		.el-row{
-			margin-bottom: 20px;
-		}
-		.el-row:last-child {
-			margin-bottom: 0;
-		}
-		.el-input{
-			width: 100% !important;
-		}
-		.el-date-editor::v-deep{
-			width: 100%;
-		}
-		.el-select{
-			width: 100%;
-		}
-		.el-cascader{
-			width: 100% !important;
-		}
-	}
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/wdsp/components/hoistLog.vue b/src/views/specialWorkSystem/workTicket/wdsp/components/hoistLog.vue
deleted file mode 100644
index 3b4dc2a..0000000
--- a/src/views/specialWorkSystem/workTicket/wdsp/components/hoistLog.vue
+++ /dev/null
@@ -1,146 +0,0 @@
-<template>
-	<div style="height: 100%">
-		<el-form :model="details" label-width="150px">
-			<el-form-item label="作业申请单号">
-				<el-input v-model="details.workPermitNo" readonly />
-			</el-form-item>
-			<el-form-item label="申请人">
-				<el-input v-model="details.applyUname" readonly />
-			</el-form-item>
-			<el-form-item label="部门名称">
-				<el-input v-model="details.depName" readonly />
-			</el-form-item>
-			<el-form-item label="作业人">
-				<el-input v-model="details.operators" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="作业类型">
-				<el-input v-model="details.workTypeDesc" readonly />
-			</el-form-item>
-			<el-form-item label="作业等级">
-				<el-input v-model="details.workLevelDesc" readonly />
-			</el-form-item>
-			<el-form-item label="作业内容">
-				<el-input v-model="details.workContent" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="作业地址">
-				<el-input v-model="details.workLocation" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="吊装工具名称">
-				<el-input v-model="details.workDetail.hoistingToolName" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="起吊物体重量">
-				<el-input v-model="details.workDetail.weightMass" readonly type="textarea"><template #append>吨(t)</template></el-input>
-			</el-form-item>
-			<el-form-item label="关联其他作业">
-				<el-input v-model="details.workDetail.otherSpecialWork" readonly type="textarea"/>
-			</el-form-item>
-			<el-form-item label="期望开始时间">
-				<el-input v-model="details.expStartTime" readonly />
-			</el-form-item>
-			<el-form-item label="期望结束时间">
-				<el-input v-model="details.expEndTime" readonly />
-			</el-form-item>
-			<el-form-item label="申请时间">
-				<el-input v-model="details.applyTime" readonly />
-			</el-form-item>
-<!--			<el-form-item label="当前层级">-->
-<!--				<el-input v-model="details.stepId" readonly />-->
-<!--			</el-form-item>-->
-<!--			<el-form-item label="上一层级">-->
-<!--				<el-input v-model="details.preStepId" readonly />-->
-<!--			</el-form-item>-->
-<!--			<el-form-item label="下一层级">-->
-<!--				<el-input v-model="details.nextStepId" readonly />-->
-<!--			</el-form-item>-->
-			<el-form-item label="层级审批类型">
-				<el-input v-model="details.stepTypeDesc" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.stepSerial && details.stepSerial!=null" label="层级排序号">
-				<el-input v-model="details.stepSerial" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.stepStartApprovalTime && details.stepStartApprovalTime!=null" label="层级预期开始审批时间">
-				<el-input v-model="details.stepStartApprovalTime" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.stepFinishApprovalTime && details.stepFinishApprovalTime!=null" label="层级预期结束审批时间">
-				<el-input v-model="details.stepFinishApprovalTime" readonly />
-			</el-form-item>
-			<el-form-item label="审批人姓名">
-				<el-input v-model="details.unitApprovalUname" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.unitApprovalStartTime && details.unitApprovalStartTime!=null"  label="单元审批开始时间">
-				<el-input v-model="details.unitApprovalStartTime" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.unitApprovalEndTime && details.unitApprovalEndTime!=null" label="单元审批结束时间">
-				<el-input v-model="details.unitApprovalEndTime" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.unitResultDesc && details.unitResultDesc!=null" label="单元审批结果">
-				<el-input v-model="details.unitResultDesc" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.statusDesc && details.statusDesc!=null" label="当前状态">
-				<el-input v-model="details.statusDesc" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.stepApprovalResultDesc && details.stepApprovalResultDesc!=null" label="审批结果">
-				<el-input v-model="details.stepApprovalResultDesc" readonly />
-			</el-form-item>
-		</el-form>
-	</div>
-</template>
-
-<script lang="ts">
-	import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue';
-	import { storeToRefs } from 'pinia';
-	import { initBackEndControlRoutes } from '/@/router/backEnd';
-	import {useUserInfo} from "/@/stores/userInfo";
-	import { Session } from '/@/utils/storage';
-	import { Search } from '@element-plus/icons-vue'
-	import { ElMessage } from 'element-plus'
-	import type { FormInstance, FormRules } from 'element-plus'
-	import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-
-
-	interface stateType {
-		form: Object,
-		workerList: Array<any>,
-		workTypeList: Array<any>,
-		workLevelList: Array<any>,
-		otherWorkList: Array<any>
-	}
-	export default defineComponent({
-		name: 'space',
-		components: {},
-		props:['details'],
-		setup() {
-			const userInfo = useUserInfo()
-			const { userInfos } = storeToRefs(userInfo);
-			return {
-				Search
-			};
-		},
-	});
-</script>
-
-<style scoped lang="scss">
-	.home-container {
-		height: 100%;
-		overflow: hidden;
-		position: relative;
-		.el-row{
-			margin-bottom: 20px;
-		}
-		.el-row:last-child {
-			margin-bottom: 0;
-		}
-		.el-input{
-			width: 100% !important;
-		}
-		.el-date-editor::v-deep{
-			width: 100%;
-		}
-		.el-select{
-			width: 100%;
-		}
-		.el-cascader{
-			width: 100% !important;
-		}
-	}
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/wdsp/components/plateLog.vue b/src/views/specialWorkSystem/workTicket/wdsp/components/plateLog.vue
deleted file mode 100644
index f307fc0..0000000
--- a/src/views/specialWorkSystem/workTicket/wdsp/components/plateLog.vue
+++ /dev/null
@@ -1,170 +0,0 @@
-<template>
-	<div style="height: 100%">
-		<el-form :model="details" label-width="150px">
-			<el-form-item label="作业申请单号">
-				<el-input v-model="details.workPermitNo" readonly />
-			</el-form-item>
-			<el-form-item label="申请人">
-				<el-input v-model="details.applyUname" readonly />
-			</el-form-item>
-			<el-form-item label="部门名称">
-				<el-input v-model="details.depName" readonly />
-			</el-form-item>
-			<el-form-item label="作业人">
-				<el-input v-model="details.operators" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="作业类型">
-				<el-input v-model="details.workTypeDesc" readonly />
-			</el-form-item>
-			<el-form-item label="作业等级">
-				<el-input v-model="details.workLevelDesc" readonly />
-			</el-form-item>
-			<el-form-item label="作业内容">
-				<el-input v-model="details.workContent" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="作业地址">
-				<el-input v-model="details.workLocation" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="盲板编号">
-				<el-input v-model="details.workDetail.bpCode" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="主要介质">
-				<el-input v-model="details.workDetail.mainMedia" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="温度">
-				<el-input v-model="details.workDetail.temperature" readonly type="textarea"><template #append>摄氏度(℃)</template></el-input>
-			</el-form-item>
-			<el-form-item label="压力">
-				<el-input v-model="details.workDetail.pressure" readonly type="textarea"><template #append>千帕(kPa)</template></el-input>
-			</el-form-item>
-			<el-form-item label="盲板材质">
-				<el-input v-model="details.workDetail.bpMaterialQuality" readonly type="textarea"/>
-			</el-form-item>
-			<el-form-item label="盲板规格">
-				<el-input v-model="details.workDetail.bpSpecification" readonly type="textarea"/>
-			</el-form-item>
-			<el-form-item label="盲板位置">
-				<el-input v-model="details.workDetail.bpLocation" readonly type="textarea"/>
-			</el-form-item>
-			<el-form-item label="装盲板时间">
-				<el-input v-model="details.workDetail.installBpTime" readonly/>
-			</el-form-item>
-			<el-form-item label="拆盲板时间">
-				<el-input v-model="details.workDetail.uninstallBpTime" readonly/>
-			</el-form-item>
-			<el-form-item label="关联其他作业">
-				<el-input v-model="details.workDetail.otherSpecialWork" readonly type="textarea"/>
-			</el-form-item>
-			<el-form-item label="盲板位置图">
-				<el-image v-for="item in details.workDetail.bpLocationMapPath" :preview-src-list="details.workDetail.bpLocationMapPath" style="width: 150px; height: 150px;margin-right: 50px;margin-bottom: 20px" :src="item" fit="cover" />
-			</el-form-item>
-			<el-form-item label="期望开始时间">
-				<el-input v-model="details.expStartTime" readonly />
-			</el-form-item>
-			<el-form-item label="期望结束时间">
-				<el-input v-model="details.expEndTime" readonly />
-			</el-form-item>
-			<el-form-item label="申请时间">
-				<el-input v-model="details.applyTime" readonly />
-			</el-form-item>
-<!--			<el-form-item label="当前层级">-->
-<!--				<el-input v-model="details.stepId" readonly />-->
-<!--			</el-form-item>-->
-<!--			<el-form-item label="上一层级">-->
-<!--				<el-input v-model="details.preStepId" readonly />-->
-<!--			</el-form-item>-->
-<!--			<el-form-item label="下一层级">-->
-<!--				<el-input v-model="details.nextStepId" readonly />-->
-<!--			</el-form-item>-->
-			<el-form-item label="层级审批类型">
-				<el-input v-model="details.stepTypeDesc" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.stepSerial && details.stepSerial!=null" label="层级排序号">
-				<el-input v-model="details.stepSerial" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.stepStartApprovalTime && details.stepStartApprovalTime!=null" label="层级预期开始审批时间">
-				<el-input v-model="details.stepStartApprovalTime" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.stepFinishApprovalTime && details.stepFinishApprovalTime!=null" label="层级预期结束审批时间">
-				<el-input v-model="details.stepFinishApprovalTime" readonly />
-			</el-form-item>
-			<el-form-item label="审批人姓名">
-				<el-input v-model="details.unitApprovalUname" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.unitApprovalStartTime && details.unitApprovalStartTime!=null"  label="单元审批开始时间">
-				<el-input v-model="details.unitApprovalStartTime" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.unitApprovalEndTime && details.unitApprovalEndTime!=null" label="单元审批结束时间">
-				<el-input v-model="details.unitApprovalEndTime" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.unitResultDesc && details.unitResultDesc!=null" label="单元审批结果">
-				<el-input v-model="details.unitResultDesc" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.statusDesc && details.statusDesc!=null" label="当前状态">
-				<el-input v-model="details.statusDesc" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.stepApprovalResultDesc && details.stepApprovalResultDesc!=null" label="审批结果">
-				<el-input v-model="details.stepApprovalResultDesc" readonly />
-			</el-form-item>
-		</el-form>
-	</div>
-</template>
-
-<script lang="ts">
-	import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue';
-	import { storeToRefs } from 'pinia';
-	import { initBackEndControlRoutes } from '/@/router/backEnd';
-	import {useUserInfo} from "/@/stores/userInfo";
-	import { Session } from '/@/utils/storage';
-	import { Search } from '@element-plus/icons-vue'
-	import { ElMessage } from 'element-plus'
-	import type { FormInstance, FormRules } from 'element-plus'
-	import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-
-
-	interface stateType {
-		form: Object,
-		workerList: Array<any>,
-		workTypeList: Array<any>,
-		workLevelList: Array<any>,
-		otherWorkList: Array<any>
-	}
-	export default defineComponent({
-		name: 'space',
-		components: {},
-		props:['details'],
-		setup() {
-			const userInfo = useUserInfo()
-			const { userInfos } = storeToRefs(userInfo);
-			return {
-				Search
-			};
-		},
-	});
-</script>
-
-<style scoped lang="scss">
-	.home-container {
-		height: 100%;
-		overflow: hidden;
-		position: relative;
-		.el-row{
-			margin-bottom: 20px;
-		}
-		.el-row:last-child {
-			margin-bottom: 0;
-		}
-		.el-input{
-			width: 100% !important;
-		}
-		.el-date-editor::v-deep{
-			width: 100%;
-		}
-		.el-select{
-			width: 100%;
-		}
-		.el-cascader{
-			width: 100% !important;
-		}
-	}
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/wdsp/components/powerLog.vue b/src/views/specialWorkSystem/workTicket/wdsp/components/powerLog.vue
deleted file mode 100644
index f3c893c..0000000
--- a/src/views/specialWorkSystem/workTicket/wdsp/components/powerLog.vue
+++ /dev/null
@@ -1,149 +0,0 @@
-<template>
-	<div style="height: 100%">
-		<el-form :model="details" label-width="150px">
-			<el-form-item label="作业申请单号">
-				<el-input v-model="details.workPermitNo" readonly />
-			</el-form-item>
-			<el-form-item label="申请人">
-				<el-input v-model="details.applyUname" readonly />
-			</el-form-item>
-			<el-form-item label="部门名称">
-				<el-input v-model="details.depName" readonly />
-			</el-form-item>
-			<el-form-item label="作业人">
-				<el-input v-model="details.operators" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="作业类型">
-				<el-input v-model="details.workTypeDesc" readonly />
-			</el-form-item>
-			<el-form-item label="作业等级">
-				<el-input v-model="details.workLevelDesc" readonly />
-			</el-form-item>
-			<el-form-item label="作业内容">
-				<el-input v-model="details.workContent" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="作业地址">
-				<el-input v-model="details.workLocation" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="电源接入点">
-				<el-input v-model="details.workDetail.powerAccessPoint" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="工作电压">
-				<el-input v-model="details.workDetail.workingVoltage" readonly type="textarea"><template #append>伏特(v)</template></el-input>
-			</el-form-item>
-			<el-form-item label="用电设备及功率">
-				<el-input v-model="details.workDetail.equipmentAndPower" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="关联其他作业">
-				<el-input v-model="details.workDetail.otherSpecialWork" readonly type="textarea"/>
-			</el-form-item>
-			<el-form-item label="期望开始时间">
-				<el-input v-model="details.expStartTime" readonly />
-			</el-form-item>
-			<el-form-item label="期望结束时间">
-				<el-input v-model="details.expEndTime" readonly />
-			</el-form-item>
-			<el-form-item label="申请时间">
-				<el-input v-model="details.applyTime" readonly />
-			</el-form-item>
-<!--			<el-form-item label="当前层级">-->
-<!--				<el-input v-model="details.stepId" readonly />-->
-<!--			</el-form-item>-->
-<!--			<el-form-item label="上一层级">-->
-<!--				<el-input v-model="details.preStepId" readonly />-->
-<!--			</el-form-item>-->
-<!--			<el-form-item label="下一层级">-->
-<!--				<el-input v-model="details.nextStepId" readonly />-->
-<!--			</el-form-item>-->
-			<el-form-item label="层级审批类型">
-				<el-input v-model="details.stepTypeDesc" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.stepSerial && details.stepSerial!=null" label="层级排序号">
-				<el-input v-model="details.stepSerial" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.stepStartApprovalTime && details.stepStartApprovalTime!=null" label="层级预期开始审批时间">
-				<el-input v-model="details.stepStartApprovalTime" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.stepFinishApprovalTime && details.stepFinishApprovalTime!=null" label="层级预期结束审批时间">
-				<el-input v-model="details.stepFinishApprovalTime" readonly />
-			</el-form-item>
-			<el-form-item label="审批人姓名">
-				<el-input v-model="details.unitApprovalUname" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.unitApprovalStartTime && details.unitApprovalStartTime!=null"  label="单元审批开始时间">
-				<el-input v-model="details.unitApprovalStartTime" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.unitApprovalEndTime && details.unitApprovalEndTime!=null" label="单元审批结束时间">
-				<el-input v-model="details.unitApprovalEndTime" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.unitResultDesc && details.unitResultDesc!=null" label="单元审批结果">
-				<el-input v-model="details.unitResultDesc" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.statusDesc && details.statusDesc!=null" label="当前状态">
-				<el-input v-model="details.statusDesc" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.stepApprovalResultDesc && details.stepApprovalResultDesc!=null" label="审批结果">
-				<el-input v-model="details.stepApprovalResultDesc" readonly />
-			</el-form-item>
-		</el-form>
-	</div>
-</template>
-
-<script lang="ts">
-	import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue';
-	import { storeToRefs } from 'pinia';
-	import { initBackEndControlRoutes } from '/@/router/backEnd';
-	import {useUserInfo} from "/@/stores/userInfo";
-	import { Session } from '/@/utils/storage';
-	import { Search } from '@element-plus/icons-vue'
-	import { ElMessage } from 'element-plus'
-	import type { FormInstance, FormRules } from 'element-plus'
-	import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-
-
-	interface stateType {
-		form: Object,
-		workerList: Array<any>,
-		workTypeList: Array<any>,
-		workLevelList: Array<any>,
-		otherWorkList: Array<any>
-	}
-	export default defineComponent({
-		name: 'space',
-		components: {},
-		props:['details'],
-		setup() {
-			const userInfo = useUserInfo()
-			const { userInfos } = storeToRefs(userInfo);
-			return {
-				Search
-			};
-		},
-	});
-</script>
-
-<style scoped lang="scss">
-	.home-container {
-		height: 100%;
-		overflow: hidden;
-		position: relative;
-		.el-row{
-			margin-bottom: 20px;
-		}
-		.el-row:last-child {
-			margin-bottom: 0;
-		}
-		.el-input{
-			width: 100% !important;
-		}
-		.el-date-editor::v-deep{
-			width: 100%;
-		}
-		.el-select{
-			width: 100%;
-		}
-		.el-cascader{
-			width: 100% !important;
-		}
-	}
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/wdsp/components/spaceLog.vue b/src/views/specialWorkSystem/workTicket/wdsp/components/spaceLog.vue
deleted file mode 100644
index d9feabc..0000000
--- a/src/views/specialWorkSystem/workTicket/wdsp/components/spaceLog.vue
+++ /dev/null
@@ -1,149 +0,0 @@
-<template>
-	<div style="height: 100%">
-		<el-form :model="details" label-width="150px">
-			<el-form-item label="作业申请单号">
-				<el-input v-model="details.workPermitNo" readonly />
-			</el-form-item>
-			<el-form-item label="申请人">
-				<el-input v-model="details.applyUname" readonly />
-			</el-form-item>
-			<el-form-item label="部门名称">
-				<el-input v-model="details.depName" readonly />
-			</el-form-item>
-			<el-form-item label="作业人">
-				<el-input v-model="details.operators" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="作业类型">
-				<el-input v-model="details.workTypeDesc" readonly />
-			</el-form-item>
-			<el-form-item label="作业等级">
-				<el-input v-model="details.workLevelDesc" readonly />
-			</el-form-item>
-			<el-form-item label="作业内容">
-				<el-input v-model="details.workContent" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="作业地址">
-				<el-input v-model="details.workLocation" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="受限空间所属单位">
-				<el-input v-model="details.workDetail.csDepId" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="受限空间名称">
-				<el-input v-model="details.workDetail.csName" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="空间原有介质名称">
-				<el-input v-model="details.workDetail.csOriginalName" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="关联其他作业">
-				<el-input v-model="details.workDetail.otherSpecialWork" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="期望开始时间">
-				<el-input v-model="details.expStartTime" readonly />
-			</el-form-item>
-			<el-form-item label="期望结束时间">
-				<el-input v-model="details.expEndTime" readonly />
-			</el-form-item>
-			<el-form-item label="申请时间">
-				<el-input v-model="details.applyTime" readonly />
-			</el-form-item>
-<!--			<el-form-item label="当前层级">-->
-<!--				<el-input v-model="details.stepId" readonly />-->
-<!--			</el-form-item>-->
-<!--			<el-form-item label="上一层级">-->
-<!--				<el-input v-model="details.preStepId" readonly />-->
-<!--			</el-form-item>-->
-<!--			<el-form-item label="下一层级">-->
-<!--				<el-input v-model="details.nextStepId" readonly />-->
-<!--			</el-form-item>-->
-			<el-form-item label="层级审批类型">
-				<el-input v-model="details.stepTypeDesc" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.stepSerial && details.stepSerial!=null" label="层级排序号">
-				<el-input v-model="details.stepSerial" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.stepStartApprovalTime && details.stepStartApprovalTime!=null" label="层级预期开始审批时间">
-				<el-input v-model="details.stepStartApprovalTime" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.stepFinishApprovalTime && details.stepFinishApprovalTime!=null" label="层级预期结束审批时间">
-				<el-input v-model="details.stepFinishApprovalTime" readonly />
-			</el-form-item>
-			<el-form-item label="审批人姓名">
-				<el-input v-model="details.unitApprovalUname" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.unitApprovalStartTime && details.unitApprovalStartTime!=null"  label="单元审批开始时间">
-				<el-input v-model="details.unitApprovalStartTime" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.unitApprovalEndTime && details.unitApprovalEndTime!=null" label="单元审批结束时间">
-				<el-input v-model="details.unitApprovalEndTime" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.unitResultDesc && details.unitResultDesc!=null" label="单元审批结果">
-				<el-input v-model="details.unitResultDesc" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.statusDesc && details.statusDesc!=null" label="当前状态">
-				<el-input v-model="details.statusDesc" readonly />
-			</el-form-item>
-			<el-form-item v-if="details.stepApprovalResultDesc && details.stepApprovalResultDesc!=null" label="审批结果">
-				<el-input v-model="details.stepApprovalResultDesc" readonly />
-			</el-form-item>
-		</el-form>
-	</div>
-</template>
-
-<script lang="ts">
-	import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue';
-	import { storeToRefs } from 'pinia';
-	import { initBackEndControlRoutes } from '/@/router/backEnd';
-	import {useUserInfo} from "/@/stores/userInfo";
-	import { Session } from '/@/utils/storage';
-	import { Search } from '@element-plus/icons-vue'
-	import { ElMessage } from 'element-plus'
-	import type { FormInstance, FormRules } from 'element-plus'
-	import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-
-
-	interface stateType {
-		form: Object,
-		workerList: Array<any>,
-		workTypeList: Array<any>,
-		workLevelList: Array<any>,
-		otherWorkList: Array<any>
-	}
-	export default defineComponent({
-		name: 'space',
-		components: {},
-		props:['details'],
-		setup() {
-			const userInfo = useUserInfo()
-			const { userInfos } = storeToRefs(userInfo);
-			return {
-				Search
-			};
-		},
-	});
-</script>
-
-<style scoped lang="scss">
-	.home-container {
-		height: 100%;
-		overflow: hidden;
-		position: relative;
-		.el-row{
-			margin-bottom: 20px;
-		}
-		.el-row:last-child {
-			margin-bottom: 0;
-		}
-		.el-input{
-			width: 100% !important;
-		}
-		.el-date-editor::v-deep{
-			width: 100%;
-		}
-		.el-select{
-			width: 100%;
-		}
-		.el-cascader{
-			width: 100% !important;
-		}
-	}
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/wdsp/index.vue b/src/views/specialWorkSystem/workTicket/wdsp/index.vue
deleted file mode 100644
index 84dfa62..0000000
--- a/src/views/specialWorkSystem/workTicket/wdsp/index.vue
+++ /dev/null
@@ -1,815 +0,0 @@
-<template>
-    <div class="home-container">
-<!--        <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">-->
-<!--            <el-tab-pane label="申请中" name="1">-->
-                <div style="height: 100%">
-                    <el-row class="homeCard">
-                        <span>作业类型:</span>
-                        <el-col :span="10">
-                            <div class="grid-content topInfo">
-                                <el-select v-model="searchWord">
-                                    <el-option
-                                            v-for="item in workType"
-                                            :key="item.id"
-                                            :label="item.name"
-                                            :value="item.id"
-                                    />
-                                </el-select>
-                                <el-button type="primary" @click="searchRecord">查询</el-button>
-                                <el-button plain @click="clearSearch">重置</el-button>
-                            </div>
-                        </el-col>
-                    </el-row>
-                    <div class="homeCard">
-                        <div class="main-card">
-                            <el-row class="cardTop">
-                                <el-col :span="12" class="mainCardBtn">
-                                    <el-button type="primary" :icon="Plus" size="default" @click="toApply()">申请</el-button>
-                                    <!--									<el-button type="danger" :icon="Delete" size="default">删除</el-button>-->
-                                    <!--									<el-button type="success" size="default">设置分类</el-button>-->
-                                </el-col>
-                                <el-button type="primary" :icon="Refresh" size="default" @click="reLoadData()" />
-                            </el-row>
-                            <el-table ref="multipleTableRef" :data="applyData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }">
-                                <el-table-column property="applyUname" label="申请人" />
-                                <el-table-column property="depName" label="部门名称" />
-                                <el-table-column property="operators" label="作业人" />
-                                <el-table-column property="workTypeDesc" label="作业类型" />
-                                <el-table-column property="workLevelDesc" label="作业等级" />
-                                <el-table-column property="applyTime" label="申请时间" width="180" />
-                                <el-table-column label="审批状态" align="center" width="180">
-                                    <template #default="scope">
-                                        <el-tag :type="scope.row.status==2?'success':(scope.row.status==8||scope.row.status==9)?'warning':'danger'">{{ scope.row.statusDesc }}</el-tag>
-                                    </template>
-                                </el-table-column>
-                                <el-table-column fixed="right" label="操作" align="center" width="250">
-                                    <template #default="scope">
-                                        <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button>
-                                        <el-button link type="success" size="small" :icon="Finished" @click="viewStatus(scope.row)">进度</el-button>
-<!--                                        <el-button link type="warning" size="small" :icon="Delete" @click="deleteRecordBtn(scope.row)">终止</el-button>-->
-                                    </template>
-                                </el-table-column>
-                            </el-table>
-                            <div class="pageBtn">
-                                <el-pagination v-model:currentPage="pageIndex1" v-model:page-size="pageSize1" :page-sizes="[10, 15]" small="false" background layout="total, sizes, prev, pager, next, jumper" :total="totalSize1" @size-change="handleSizeChange1" @current-change="handleCurrentChange1" />
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <el-dialog v-model="dialogDetails" title="作业审批详情" center>
-                    <fire v-if="dialogType == 1" :details = details></fire>
-                    <space v-else-if="dialogType == 2" :details = details></space>
-                    <hoist v-else-if="dialogType == 3" :details = details></hoist>
-                    <ground v-else-if="dialogType == 4" :details = details></ground>
-                    <broken v-else-if="dialogType == 5" :details = details></broken>
-                    <height v-else-if="dialogType == 6" :details = details></height>
-                    <power v-else-if="dialogType == 7" :details = details></power>
-                    <plate v-else :details = details></plate>
-                    <template #footer>
-                      <span class="dialog-footer">
-                        <el-button type="primary" @click="dialogDetails = false"
-                        >确认</el-button
-                        >
-                      </span>
-                    </template>
-                </el-dialog>
-                <el-dialog v-model="dialogStatus" title="作业审批进度" center width="60%">
-                    <el-form v-if="approveInfo.operators.length > 0" style="margin-bottom: 40px">
-                        <el-form-item label="申请作业人">
-                            <el-input v-model="approveInfo.operators" readonly type="textarea" />
-                        </el-form-item>
-                    </el-form>
-                    <div style="display: flex; flex-direction: column-reverse">
-                        <div v-for="(item, index) in approveInfo.approvalSteps" class="stepItem">
-                            <div class="stepNum">{{ item.stepSerial }}</div>
-                            <div class="stepCard">
-                                <el-card class="box-card" shadow="always">
-                                    <div class="text">
-                                        审批结果:<span class="bold-text">{{ item.approvalResultDesc }}</span>
-                                    </div>
-                                    <div class="text">
-                                        审批层级:<span class="bold-text">{{ item.typeDesc }}</span>
-                                    </div>
-                                    <div class="text" v-if="item.auditTypeDesc">
-                                        审批类型:<span class="bold-text">{{ item.auditTypeDesc }}</span>
-                                    </div>
-                                    <div class="text" v-show="item.startApprovalTime != null">
-                                        开始时间:<span>{{ item.startApprovalTime }}</span>
-                                    </div>
-                                    <div class="approveUnit">
-                                        <div class="item-tit"><span>审批人</span><span>审批状态</span></div>
-                                        <div class="item-cont" v-for="i in item.stepUnits">
-                                            <span>{{ i.approvalUname }}</span
-                                            ><span>{{ i.resultDesc }}</span>
-                                        </div>
-                                    </div>
-                                    <div class="approveItem">
-                                        <div class="item-tit">
-                                            <span>审批项目</span>
-<!--                                            <span>类型</span>-->
-                                            <div>措施标准</div>
-                                        </div>
-                                        <div class="item-cont" v-for="i in item.stepItems">
-                                            <span>{{ i.itemName }}</span>
-<!--                                            <span>{{ i.typeDesc }}</span>-->
-                                            <div v-if="i.measure !== null">
-                                                <div>
-                                                    <span>作业类型:</span><span>{{ i.measure.workTypeDesc }}</span>
-                                                </div>
-                                                <div>
-                                                    <span>措施内容:</span><span>{{ i.measure.context }}</span>
-                                                </div>
-                                            </div>
-                                            <div v-if="i.stand !== null">
-                                                <div>
-                                                    <span>标题名称:</span><span>{{ i.stand.title }}</span>
-                                                </div>
-                                                <div>
-                                                    <span>标准内容:</span><span>{{ i.stand.typeDesc }}</span>
-                                                </div>
-                                            </div>
-                                        </div>
-                                    </div>
-                                    <div class="text" v-show="item.expFinishApprovalTime != null">
-                                        期望结束时间:<span>{{ item.expFinishApprovalTime }}</span>
-                                    </div>
-                                    <div class="text" v-show="item.finishApprovalTime != null">
-                                        结束时间:<span>{{ item.finishApprovalTime }}</span>
-                                    </div>
-                                </el-card>
-                            </div>
-                        </div>
-                    </div>
-                </el-dialog>
-                <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear">
-                    <span>您确定要终止该条审批吗?</span>
-                    <template #footer>
-                        <span class="dialog-footer">
-                            <el-button @click="deleteDialog = false" size="default">取消</el-button>
-                            <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button>
-                        </span>
-                    </template>
-                </el-dialog>
-<!--            </el-tab-pane>-->
-<!--            <el-tab-pane label="已通过" name="2">-->
-<!--                <div style="height: 100%">-->
-<!--                    <el-row class="homeCard">-->
-<!--                        <el-col :span="8">-->
-<!--                            <div class="grid-content topInfo">-->
-<!--                                <el-input v-model="searchWord" placeholder="作业证名称"></el-input>-->
-<!--                                <el-button type="primary">查询</el-button>-->
-<!--                                <el-button plain>重置</el-button>-->
-<!--                            </div>-->
-<!--                        </el-col>-->
-<!--                    </el-row>-->
-<!--                    <div class="homeCard">-->
-<!--                        <div class="main-card">-->
-<!--                            <el-table ref="multipleTableRef" :data="passedData" style="width: 100%" height="calc(100% - 48px)" :header-cell-style="{ background: '#fafafa' }" @selection-change="handleSelectionChange">-->
-<!--                                <el-table-column type="selection" width="55" />-->
-<!--                                <el-table-column type="index" label="编号" width="200" />-->
-<!--                                <el-table-column property="level" label="作业证等级" width="180" sortable />-->
-<!--                                <el-table-column property="applyDate" label="申请日期" sortable />-->
-<!--                                <el-table-column property="name" label="申请人" width="180" />-->
-<!--                                <el-table-column property="department" label="申请部门" width="180" />-->
-<!--                                <el-table-column label="申请状态" width="180">-->
-<!--                                    <template #default="scope">-->
-<!--                                        <el-tag type="success">{{ scope.row.status }}</el-tag>-->
-<!--                                    </template>-->
-<!--                                </el-table-column>-->
-<!--                            </el-table>-->
-<!--                            <div class="pageBtn">-->
-<!--                                <el-pagination v-model:currentPage="pageIndex2" v-model:page-size="pageSize2" :page-sizes="[10, 15]" small="false" background layout="total, sizes, prev, pager, next, jumper" :total="totalSize2" @size-change="handleSizeChange2" @current-change="handleCurrentChange2" />-->
-<!--                            </div>-->
-<!--                        </div>-->
-<!--                    </div>-->
-<!--                </div>-->
-<!--            </el-tab-pane>-->
-<!--        </el-tabs>-->
-    </div>
-</template>
-
-<script lang="ts">
-import {toRefs, reactive, defineComponent, ref, onMounted, defineAsyncComponent} from 'vue';
-import { storeToRefs } from 'pinia';
-import { initBackEndControlRoutes } from '/@/router/backEnd';
-import { useUserInfo } from '/@/stores/userInfo';
-import { Session } from '/@/utils/storage';
-import { useRouter } from 'vue-router';
-import { Edit, View, Plus, Delete, Refresh, Search, Finished } from '@element-plus/icons-vue';
-import { ElTable } from 'element-plus';
-import { FormInstance, FormRules, ElMessage } from 'element-plus';
-import { workApprovalApi } from '/@/api/specialWorkSystem/workApproval';
-import type { TabsPaneContext } from 'element-plus';
-import {teamManageApi} from "/@/api/systemManage/basicDateManage/personShiftManage/teamManage";
-
-// 定义接口来定义对象的类型
-interface stateType {
-    applyData: Array<string>;
-    workTimeList: Array<string>;
-    multipleSelection: Array<any>;
-    deleteArr: Array<any>;
-    approveInfo: Object;
-    dialogDetails: boolean;
-    dialogStatus: boolean;
-    deleteDialog: boolean;
-    pageIndex1: number;
-    pageSize1: number;
-    chosenIndex: null | number;
-    deleteId: null | number;
-    searchWord: string;
-    totalSize1: number;
-    activeName: string;
-    addRecord: {};
-    details: {};
-    statusInfo: {};
-    workType: Array<type>;
-    dialogType: number | null;
-    departmentList: Array<any>;
-    departmentRecursionList: Array<DepartmentState>;
-}
-interface type {
-    id: number;
-    name: string;
-}
-interface DepartmentState {
-    depId: number;
-    depName: string;
-}
-export default defineComponent({
-    name: 'myApproval',
-    components: {
-        fire: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsp/components/fireLog.vue')),
-        space: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsp/components/spaceLog.vue')),
-        hoist: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsp/components/hoistLog.vue')),
-        ground: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsp/components/groundLog.vue')),
-        broken: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsp/components/brokenLog.vue')),
-        height: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsp/components/heightLog.vue')),
-        power: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsp/components/powerLog.vue')),
-        plate: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsp/components/plateLog.vue'))
-    },
-    setup() {
-        const userInfo = useUserInfo();
-        const { userInfos } = storeToRefs(userInfo);
-        const router = useRouter();
-        const state = reactive<stateType>({
-            pageIndex1: 1,
-            pageSize1: 10,
-            totalSize1: 0,
-            dialogType: null,
-            activeName: '1',
-            departmentList: [],
-            departmentRecursionList: [],
-            chosenIndex: null,
-            searchWord: '',
-            applyData: [],
-            workTimeList: [],
-            multipleSelection: [],
-            approveInfo: {
-                approvalSteps: [],
-                operators: []
-            },
-            dialogDetails: false,
-            dialogStatus: false,
-            deleteDialog: false,
-            addRecord: {},
-            details: {},
-            statusInfo: {},
-            deleteId: null,
-            deleteArr: [],
-            workType: [
-                { id: 1, name: '动火作业' },
-                { id: 2, name: '受限空间作业' },
-                { id: 3, name: '吊装作业' },
-                { id: 4, name: '动土作业' },
-                { id: 5, name: '断路作业' },
-                { id: 6, name: '高处作业' },
-                { id: 7, name: '临时用电作业' },
-                { id: 8, name: '盲板抽堵作业' }
-            ]
-        });
-        interface User {
-            name: string;
-            list: [];
-            info: string;
-        }
-
-        // 刷新
-        const reLoadData = async () => {
-            getListByPage();
-        };
-
-        // 填写表单
-        const toApply = () => {
-            router.push({
-                path: 'zysq'
-            });
-        };
-
-        const handleClick = (tab: TabsPaneContext, event: Event) => {
-            console.log(tab, event);
-        };
-
-        // 获取部门列表
-        const getAllDepartment = async () => {
-            let res = await teamManageApi().getAllDepartment();
-            if (res.data.code === '200') {
-                state.departmentList = JSON.parse(JSON.stringify(res.data.data))
-                recursion(state.departmentList);
-            } else {
-                ElMessage({
-                    type: 'warning',
-                    message: res.data.msg
-                });
-            }
-        };
-
-        // 获取层级审批数据
-        // const getApprovalData = async (id) => {
-        //     let res = await workApprovalApi().getApprovalData({workApplyId: id});
-        //     if (res.data.code === '200') {
-        //         console.log(res.data.data,'层级数据')
-        //         // state.departmentList = JSON.parse(JSON.stringify(res.data.data))
-        //         // recursion(state.departmentList);
-        //     } else {
-        //         ElMessage({
-        //             type: 'warning',
-        //             message: res.data.msg
-        //         });
-        //     }
-        // };
-
-        const recursion = (value: any) => {
-            for (let i of value) {
-                if (i.children.length !== 0) {
-                    state.departmentRecursionList.push(i);
-                    recursion(i.children);
-                } else {
-                    state.departmentRecursionList.push(i);
-                }
-            }
-        };
-
-        // 分页获取工作时间组列表
-        const getListByPage = async () => {
-            const data = { pageSize: state.pageSize1, pageIndex: state.pageIndex1, searchParams: { workType: state.searchWord } };
-            let res = await workApprovalApi().getApprovalListPage(data);
-            if (res.data.code === '200') {
-                state.applyData = JSON.parse(JSON.stringify(res.data.data));
-                state.applyData = state.applyData.map((item) => {
-                    if (item.operators == null || item.operators == []) {
-                        item.operators = [];
-                    } else {
-                        item.operators = Array.from(item.operators, ({ operatorUname }) => operatorUname);
-                    }
-                    return item;
-                });
-                state.totalSize1 = res.data.total;
-            } else {
-                ElMessage({
-                    type: 'warning',
-                    message: res.data.msg
-                });
-            }
-        };
-
-        // 关键词查询记录
-        const searchRecord = async () => {
-            if (state.searchWord == '') {
-                ElMessage({
-                    type: 'warning',
-                    message: '请输入查询关键词'
-                });
-            } else {
-                getListByPage();
-            }
-        };
-        // 重置搜索
-        const clearSearch = async () => {
-            state.searchWord = '';
-            getListByPage();
-        };
-
-        // 查看进度
-        const viewStatus = (row) => {
-            getStatus({ workApplyId: row.workApplyId });
-            state.dialogStatus = true;
-        };
-
-        // 查询进度方法
-        const getStatus = async (data: any) => {
-            let res = await workApprovalApi().getApprovalStatus(data);
-            if (res.data.code === '200') {
-                state.approveInfo = JSON.parse(JSON.stringify(res.data.data));
-                state.approveInfo.operators = Array.from(state.approveInfo.operators, ({ operatorUname }) => operatorUname);
-                console.log(state.approveInfo, '我的审批');
-            } else {
-                ElMessage({
-                    type: 'warning',
-                    message: res.data.msg
-                });
-            }
-        };
-
-        const deleteRecordBtn = (row) => {
-            state.deleteId = row.workApplyId;
-            state.deleteDialog = true;
-        };
-
-        // 取消申请方法
-        const deleteRecord = async (data: any) => {
-            let res = await workApprovalApi().postAbord(data);
-            if (res.data.code === '200') {
-                ElMessage({
-                    type: 'success',
-                    message: '取消成功!'
-                });
-                getListByPage();
-            } else {
-                ElMessage({
-                    type: 'warning',
-                    message: res.data.msg
-                });
-            }
-        };
-
-        const conFirmDelete = () => {
-            deleteRecord({ workApplyId: state.deleteId });
-            state.deleteDialog = false;
-        };
-
-        const handleSizeChange1 = (val: number) => {
-            state.pageSize1 = val;
-            getListByPage();
-        };
-        const handleCurrentChange1 = (val: number) => {
-            state.pageIndex1 = val;
-            getListByPage();
-        };
-
-        // 查看记录
-        const viewRecord = (row: any) => {
-            state.dialogType = row.workType
-            state.details = JSON.parse(JSON.stringify(row));
-            console.log(state.details,'details')
-            // getApprovalData(state.details.workApplyId)
-            if(state.details.workDetail.otherSpecialWork == '' || !state.details.workDetail.otherSpecialWork){
-                state.details.workDetail.otherSpecialWork=[]
-            }
-            else {
-                console.log(state.details.workDetail.otherSpecialWork,'split')
-                const a = state.details.workDetail.otherSpecialWork
-                state.details.workDetail.otherSpecialWork = a.split(',').map((item) => {
-                    return state.workType.find((i: { id: number }) => i.id === Number(item))?.name;
-                });
-            }
-            if(state.details.workDetail.involvedDepIds == '' || !state.details.workDetail.involvedDepIds){
-                state.details.workDetail.involvedDepIds=[]
-            }
-            else {
-                const a = state.details.workDetail.involvedDepIds
-                state.details.workDetail.involvedDepIds = a.split(',').map((item) => {
-                    return state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(item))?.depName;
-                });
-            }
-            if(state.details.workDetail.csDepId){
-                state.details.workDetail.csDepId = state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(state.details.workDetail.csDepId))?.depName;
-            }
-            if(state.details.workDetail.operationDepId){
-                state.details.workDetail.operationDepId = state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(state.details.workDetail.operationDepId))?.depName;
-            }
-            if(state.details.workDetail.gbPath){
-                state.details.workDetail.gbPath = state.details.workDetail.gbPath.split(',')
-            }
-            if(state.details.workDetail.bcPath){
-                state.details.workDetail.bcPath = state.details.workDetail.bcPath.split(',')
-            }
-            if(state.details.workDetail.bpLocationMapPath){
-                state.details.workDetail.bpLocationMapPath = state.details.workDetail.bpLocationMapPath.split(',')
-            }
-            state.dialogDetails = true;
-        };
-
-        // 折线图
-        const renderMenu = async (value: string) => {
-            Session.set('projectId', value);
-            userInfos.value.projectId = value;
-            await initBackEndControlRoutes();
-        };
-
-        // 页面载入时执行方法
-        onMounted(() => {
-            getListByPage();
-            getAllDepartment()
-        });
-
-        return {
-            View,
-            Edit,
-            Delete,
-            Refresh,
-            Plus,
-            Finished,
-            reLoadData,
-            toApply,
-            handleClick,
-            searchRecord,
-            clearSearch,
-            viewRecord,
-            viewStatus,
-            deleteRecordBtn,
-            conFirmDelete,
-            getListByPage,
-            handleSizeChange1,
-            handleCurrentChange1,
-            ...toRefs(state)
-        };
-    }
-});
-</script>
-
-<style scoped lang="scss">
-$homeNavLengh: 8;
-.home-container {
-    height: calc(100vh - 144px);
-    box-sizing: border-box;
-    overflow: hidden;
-    .demo-tabs {
-        width: 100%;
-        height: 100%;
-
-        &::v-deep(.el-tabs__content) {
-            height: calc(100% - 60px);
-        }
-
-        .el-tab-pane {
-            height: 100%;
-        }
-    }
-    .homeCard {
-        width: 100%;
-        padding: 20px;
-        box-sizing: border-box;
-        background: #fff;
-        border-radius: 4px;
-
-        .main-card {
-            width: 100%;
-            height: 100%;
-            .cardTop {
-                display: flex;
-                align-items: center;
-                justify-content: space-between;
-                margin-bottom: 20px;
-                .mainCardBtn {
-                    margin: 0;
-                }
-            }
-            .pageBtn {
-                height: 60px;
-                display: flex;
-                align-items: center;
-                justify-content: right;
-
-                .demo-pagination-block + .demo-pagination-block {
-                    margin-top: 10px;
-                }
-                .demo-pagination-block .demonstration {
-                    margin-bottom: 16px;
-                }
-            }
-        }
-        &:last-of-type {
-            height: calc(100% - 100px);
-        }
-    }
-    .stepItem {
-        display: flex;
-        align-items: flex-start;
-        margin-top: 30px;
-        margin-left: 30px;
-        padding-bottom: 30px;
-        padding-left: 40px;
-        border-left: 1px solid #a0cfff;
-        position: relative;
-        &:first-of-type {
-            margin-top: 30px;
-        }
-        &:first-of-type {
-            margin-bottom: 0;
-            border-left: none;
-        }
-        .stepNum {
-            position: absolute;
-            width: 40px;
-            height: 40px;
-            border-radius: 20px;
-            box-sizing: border-box;
-            font-size: 18px;
-            color: #333;
-            border: 1px solid #a0cfff;
-            line-height: 38px;
-            text-align: center;
-            left: -20px;
-            top: -30px;
-            background: #d9ecff;
-        }
-        .stepCard {
-            width: 100%;
-            margin-top: -30px;
-
-            .box-card {
-                width: 100%;
-
-                .card-header {
-                    display: flex;
-                    justify-content: space-between;
-                    align-items: center;
-
-                    span {
-                        font-weight: bold;
-                        margin-left: 10px;
-                    }
-                }
-
-                .text {
-                    width: 100%;
-                    font-size: 14px;
-                    margin-bottom: 10px;
-                    padding-left: 10px;
-
-                    span {
-                        color: #409eff;
-                    }
-
-                    .bold-text{
-                        font-weight: bolder;
-                    }
-
-                    &:last-of-type {
-                        margin-bottom: 0;
-                    }
-                }
-                .approveUnit {
-                    width: 100%;
-                    font-size: 14px;
-                    margin-bottom: 20px;
-                    padding: 10px 15px;
-                    border: 1px solid #fff;
-                    background: #ecf8ff;
-                    border-radius: 6px;
-                    .item-tit {
-                        width: 100%;
-                        display: flex;
-                        color: #409eff;
-                        align-items: flex-start;
-                        justify-content: space-between;
-                        padding-bottom: 10px;
-                        border-bottom: 1px solid #a0cfff;
-
-                        & > span {
-                            flex: 1;
-                            &:last-of-type{
-                                text-align: center;
-                            }
-                        }
-                        & > div {
-                            flex: 1;
-                            text-align: center;
-                        }
-                    }
-                    .item-cont {
-                        width: 100%;
-                        display: flex;
-                        align-items: center;
-                        justify-content: space-between;
-                        padding: 10px 0;
-                        border-bottom: 1px solid #c6e2ff;
-
-                        & > span {
-                            flex: 1;
-                            &:last-of-type{
-                                text-align: center;
-                            }
-                        }
-                        & > div {
-                            flex: 1;
-                            text-align: center;
-
-                            & > div {
-                                text-align: left;
-                                width: 100%;
-                                display: flex;
-                                justify-content: center;
-                                align-items: center;
-                                span {
-                                    width: 45%;
-                                    &:first-of-type {
-                                        width: 30%;
-                                    }
-                                }
-                            }
-                        }
-                        &:last-of-type {
-                            border-bottom: 0;
-                        }
-                    }
-                }
-                .approveItem {
-                    width: 100%;
-                    font-size: 14px;
-                    margin-bottom: 20px;
-                    padding: 10px 15px;
-                    background: #ecf8ff;
-                    border: 1px solid #fff;
-                    border-radius: 6px;
-                    .item-tit {
-                        width: 100%;
-                        display: flex;
-                        color: #409eff;
-                        align-items: flex-start;
-                        justify-content: space-between;
-                        padding-bottom: 10px;
-                        border-bottom: 1px solid #a0cfff;
-
-                        & > span {
-                            flex: 1;
-                        }
-                        & > div {
-                            flex: 2;
-                            text-align: center;
-                        }
-                    }
-                    .item-cont {
-                        width: 100%;
-                        display: flex;
-                        align-items: center;
-                        justify-content: space-between;
-                        padding: 10px 0;
-                        border-bottom: 1px solid #c6e2ff;
-
-                        & > span {
-                            flex: 1;
-                        }
-                        & > div {
-                            flex: 2;
-                            text-align: center;
-
-                            & > div {
-                                text-align: left;
-                                width: 100%;
-                                display: flex;
-                                justify-content: center;
-                                align-items: flex-start;
-                                margin-bottom: 10px;
-                                span {
-                                    width: 50%;
-                                    &:first-of-type {
-                                        width: 25%;
-                                    }
-                                }
-                            }
-                        }
-                        &:last-of-type {
-                            border-bottom: 0;
-                        }
-                    }
-                }
-            }
-        }
-        &:hover .card-header {
-            color: #0098f5;
-        }
-        &:hover .stepNum {
-            border: 2px solid #0098f5;
-            color: #0098f5;
-        }
-    }
-    .el-row {
-        display: flex;
-        align-items: center;
-        margin-bottom: 20px;
-        &:last-child {
-            margin-bottom: 0;
-        }
-        .grid-content {
-            align-items: center;
-            min-height: 36px;
-        }
-
-        .topInfo {
-            display: flex;
-            align-items: center;
-            font-size: 16px;
-            font-weight: bold;
-
-            & > div {
-                white-space: nowrap;
-                margin-right: 20px;
-            }
-        }
-    }
-    .el-card {
-        border: 0;
-    }
-}
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/wdsq/components/brokenLog.vue b/src/views/specialWorkSystem/workTicket/wdsq/components/brokenLog.vue
deleted file mode 100644
index b32213d..0000000
--- a/src/views/specialWorkSystem/workTicket/wdsq/components/brokenLog.vue
+++ /dev/null
@@ -1,131 +0,0 @@
-<template>
-	<div style="height: 100%">
-		<el-form :model="details" label-width="150px">
-			<el-form-item label="作业申请单号">
-				<el-input v-model="details.workPermitNo" readonly />
-			</el-form-item>
-			<el-form-item label="申请人">
-				<el-input v-model="details.applyUname" readonly />
-			</el-form-item>
-			<el-form-item label="部门名称">
-				<el-input v-model="details.depName" readonly />
-			</el-form-item>
-			<el-form-item label="作业人">
-				<el-input v-model="details.operators" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="作业类型">
-				<el-input v-model="details.workTypeDesc" readonly />
-			</el-form-item>
-			<el-form-item label="作业等级">
-				<el-input v-model="details.workLevelDesc" readonly />
-			</el-form-item>
-			<el-form-item label="作业内容">
-				<el-input v-model="details.workContent" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="作业地址">
-				<el-input v-model="details.workLocation" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="作业单位">
-				<el-input v-model="details.workDetail.operationDepId" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="断路原因">
-				<el-input v-model="details.workDetail.bcReason" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="断路地段说明">
-				<el-input v-model="details.workDetail.bcExplain" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="涉及相关部门">
-				<el-input v-model="details.workDetail.involvedDepIds" readonly type="textarea"/>
-			</el-form-item>
-			<el-form-item label="图片">
-				<el-image v-for="item in details.workDetail.bcPath" :preview-src-list="details.workDetail.bcPath" style="width: 150px; height: 150px;margin-right: 50px;margin-bottom: 20px" :src="item" fit="cover" />
-			</el-form-item>
-      <el-form-item label="物资状态">
-        <span>{{ details.materialStatus==0?'未关联物资':(details.materialStatus==1?'必选物资配备不足':(details.materialStatus==2?'必选物资配备齐全':(details.materialStatus==3?'物资配置专业':(details.materialStatus==4?'物资配置高端':'-')))) }}</span>
-      </el-form-item>
-			<el-form-item label="关联物资" v-if="details.workMaterial.length>0">
-				<el-table :data="details.workMaterial" style="width: 100%" border>
-          <el-table-column prop="bigClassifyName" label="物资类型" align="center"/>
-          <el-table-column prop="materialName" label="物资名称" align="center"/>
-          <el-table-column prop="configurationLevel" label="配置级别" align="center">
-            <template #default="scope">
-              {{scope.row.configurationLevel == 0?'必选':(scope.row.configurationLevel == 1? '可选':'高配')}}
-            </template>
-          </el-table-column>
-          <el-table-column prop="useCount" label="配置数量" align="center"/>
-				</el-table>
-			</el-form-item>
-			<el-form-item label="期望开始时间">
-				<el-input v-model="details.expStartTime" readonly />
-			</el-form-item>
-			<el-form-item label="期望结束时间">
-				<el-input v-model="details.expEndTime" readonly />
-			</el-form-item>
-			<el-form-item label="申请时间">
-				<el-input v-model="details.applyTime" readonly />
-			</el-form-item>
-			<el-form-item label="当前状态">
-				<el-input v-model="details.statusDesc" readonly />
-			</el-form-item>
-		</el-form>
-	</div>
-</template>
-
-<script lang="ts">
-	import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue';
-	import { storeToRefs } from 'pinia';
-	import { initBackEndControlRoutes } from '/@/router/backEnd';
-	import {useUserInfo} from "/@/stores/userInfo";
-	import { Session } from '/@/utils/storage';
-	import { Search } from '@element-plus/icons-vue'
-	import { ElMessage } from 'element-plus'
-	import type { FormInstance, FormRules } from 'element-plus'
-	import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-
-
-	interface stateType {
-		form: Object,
-		workerList: Array<any>,
-		workTypeList: Array<any>,
-		workLevelList: Array<any>,
-		otherWorkList: Array<any>
-	}
-	export default defineComponent({
-		name: 'space',
-		components: {},
-		props:['details'],
-		setup() {
-			const userInfo = useUserInfo()
-			const { userInfos } = storeToRefs(userInfo);
-			return {
-				Search
-			};
-		},
-	});
-</script>
-
-<style scoped lang="scss">
-	.home-container {
-		height: 100%;
-		overflow: hidden;
-		position: relative;
-		.el-row{
-			margin-bottom: 20px;
-		}
-		.el-row:last-child {
-			margin-bottom: 0;
-		}
-		.el-input{
-			width: 100% !important;
-		}
-		.el-date-editor::v-deep{
-			width: 100%;
-		}
-		.el-select{
-			width: 100%;
-		}
-		.el-cascader{
-			width: 100% !important;
-		}
-	}
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/wdsq/components/fireLog.vue b/src/views/specialWorkSystem/workTicket/wdsq/components/fireLog.vue
deleted file mode 100644
index 6386a7e..0000000
--- a/src/views/specialWorkSystem/workTicket/wdsq/components/fireLog.vue
+++ /dev/null
@@ -1,122 +0,0 @@
-<template>
-	<div style="height: 100%">
-		<el-form :model="details" label-width="150px">
-			<el-form-item label="作业申请单号">
-				<el-input v-model="details.workPermitNo" readonly />
-			</el-form-item>
-			<el-form-item label="申请人">
-				<el-input v-model="details.applyUname" readonly />
-			</el-form-item>
-			<el-form-item label="部门名称">
-				<el-input v-model="details.depName" readonly />
-			</el-form-item>
-			<el-form-item label="作业人">
-				<el-input v-model="details.operators" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="作业类型">
-				<el-input v-model="details.workTypeDesc" readonly />
-			</el-form-item>
-			<el-form-item label="作业等级">
-				<el-input v-model="details.workLevelDesc" readonly />
-			</el-form-item>
-			<el-form-item label="作业内容">
-				<el-input v-model="details.workContent" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="作业地址">
-				<el-input v-model="details.workLocation" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="作业方式">
-				<el-input v-model="details.workDetail.hotMethod" readonly type="textarea" />
-			</el-form-item>
-      <el-form-item label="物资状态">
-        <span>{{ details.materialStatus==0?'未关联物资':(details.materialStatus==1?'必选物资配备不足':(details.materialStatus==2?'必选物资配备齐全':(details.materialStatus==3?'物资配置专业':(details.materialStatus==4?'物资配置高端':'-')))) }}</span>
-      </el-form-item>
-			<el-form-item label="关联物资" v-if="details.workMaterial&&details.workMaterial.length>0">
-				<el-table :data="details.workMaterial" style="width: 100%" border>
-					<el-table-column prop="bigClassifyName" label="物资类型" align="center"/>
-					<el-table-column prop="materialName" label="物资名称" align="center"/>
-					<el-table-column prop="configurationLevel" label="配置级别" align="center">
-						<template #default="scope">
-							{{scope.row.configurationLevel == 0?'必选':(scope.row.configurationLevel == 1? '可选':'高配')}}
-						</template>
-					</el-table-column>
-					<el-table-column prop="useCount" label="配置数量" align="center"/>
-				</el-table>
-			</el-form-item>
-			<el-form-item label="关联其他作业">
-				<el-input v-model="details.workDetail.otherSpecialWork" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="期望开始时间">
-				<el-input v-model="details.expStartTime" readonly />
-			</el-form-item>
-			<el-form-item label="期望结束时间">
-				<el-input v-model="details.expEndTime" readonly />
-			</el-form-item>
-			<el-form-item label="申请时间">
-				<el-input v-model="details.applyTime" readonly />
-			</el-form-item>
-			<el-form-item label="当前状态">
-				<el-input v-model="details.statusDesc" readonly />
-			</el-form-item>
-		</el-form>
-	</div>
-</template>
-
-<script lang="ts">
-	import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue';
-	import { storeToRefs } from 'pinia';
-	import { initBackEndControlRoutes } from '/@/router/backEnd';
-	import {useUserInfo} from "/@/stores/userInfo";
-	import { Session } from '/@/utils/storage';
-	import { Search } from '@element-plus/icons-vue'
-	import { ElMessage } from 'element-plus'
-	import type { FormInstance, FormRules } from 'element-plus'
-	import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-
-
-	interface stateType {
-		form: Object,
-		workerList: Array<any>,
-		workTypeList: Array<any>,
-		workLevelList: Array<any>,
-		otherWorkList: Array<any>
-	}
-	export default defineComponent({
-		name: 'fire',
-		components: {},
-		props:['details'],
-		setup() {
-			const userInfo = useUserInfo()
-			const { userInfos } = storeToRefs(userInfo);
-			return {
-				Search
-			};
-		},
-	});
-</script>
-
-<style scoped lang="scss">
-	.home-container {
-		height: 100%;
-		overflow: hidden;
-		position: relative;
-		.el-row{
-			margin-bottom: 20px;
-		}
-		.el-row:last-child {
-			margin-bottom: 0;
-		}
-		.el-input{
-			width: 100% !important;
-		}
-		.el-date-editor::v-deep{
-			width: 100%;
-		}
-		.el-select{
-			width: 100%;
-		}
-		.el-cascader{
-			width: 100% !important;
-		}
-	}
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/wdsq/components/groundLog.vue b/src/views/specialWorkSystem/workTicket/wdsq/components/groundLog.vue
deleted file mode 100644
index ed728d7..0000000
--- a/src/views/specialWorkSystem/workTicket/wdsq/components/groundLog.vue
+++ /dev/null
@@ -1,131 +0,0 @@
-<template>
-	<div style="height: 100%">
-		<el-form :model="details" label-width="150px">
-			<el-form-item label="作业申请单号">
-				<el-input v-model="details.workPermitNo" readonly />
-			</el-form-item>
-			<el-form-item label="申请人">
-				<el-input v-model="details.applyUname" readonly />
-			</el-form-item>
-			<el-form-item label="部门名称">
-				<el-input v-model="details.depName" readonly />
-			</el-form-item>
-			<el-form-item label="作业人">
-				<el-input v-model="details.operators" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="作业类型">
-				<el-input v-model="details.workTypeDesc" readonly />
-			</el-form-item>
-			<el-form-item label="作业等级">
-				<el-input v-model="details.workLevelDesc" readonly />
-			</el-form-item>
-			<el-form-item label="作业内容">
-				<el-input v-model="details.workContent" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="作业地址">
-				<el-input v-model="details.workLocation" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="作业单位">
-				<el-input v-model="details.workDetail.operationDepId" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="范围">
-				<el-input v-model="details.workDetail.gbScope" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="动土方式">
-				<el-input v-model="details.workDetail.gbMethod" readonly type="textarea" />
-			</el-form-item>
-      <el-form-item label="物资状态">
-        <span>{{ details.materialStatus==0?'未关联物资':(details.materialStatus==1?'必选物资配备不足':(details.materialStatus==2?'必选物资配备齐全':(details.materialStatus==3?'物资配置专业':(details.materialStatus==4?'物资配置高端':'-')))) }}</span>
-      </el-form-item>
-			<el-form-item label="关联物资" v-if="details.workMaterial&&details.workMaterial.length>0">
-				<el-table :data="details.workMaterial" style="width: 100%" border>
-          <el-table-column prop="bigClassifyName" label="物资类型" align="center"/>
-          <el-table-column prop="materialName" label="物资名称" align="center"/>
-          <el-table-column prop="configurationLevel" label="配置级别" align="center">
-            <template #default="scope">
-              {{scope.row.configurationLevel == 0?'必选':(scope.row.configurationLevel == 1? '可选':'高配')}}
-            </template>
-          </el-table-column>
-          <el-table-column prop="useCount" label="配置数量" align="center"/>
-				</el-table>
-			</el-form-item>
-			<el-form-item label="关联其他作业">
-				<el-input v-model="details.workDetail.otherSpecialWork" readonly type="textarea"/>
-			</el-form-item>
-			<el-form-item label="图片">
-				<el-image v-for="item in details.workDetail.gbPath" :preview-src-list="details.workDetail.gbPath" style="width: 150px; height: 150px;margin-right: 50px;margin-bottom: 20px" :src="item" fit="cover" />
-			</el-form-item>
-			<el-form-item label="期望开始时间">
-				<el-input v-model="details.expStartTime" readonly />
-			</el-form-item>
-			<el-form-item label="期望结束时间">
-				<el-input v-model="details.expEndTime" readonly />
-			</el-form-item>
-			<el-form-item label="申请时间">
-				<el-input v-model="details.applyTime" readonly />
-			</el-form-item>
-			<el-form-item label="当前状态">
-				<el-input v-model="details.statusDesc" readonly />
-			</el-form-item>
-		</el-form>
-	</div>
-</template>
-
-<script lang="ts">
-	import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue';
-	import { storeToRefs } from 'pinia';
-	import { initBackEndControlRoutes } from '/@/router/backEnd';
-	import {useUserInfo} from "/@/stores/userInfo";
-	import { Session } from '/@/utils/storage';
-	import { Search } from '@element-plus/icons-vue'
-	import { ElMessage } from 'element-plus'
-	import type { FormInstance, FormRules } from 'element-plus'
-	import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-
-
-	interface stateType {
-		form: Object,
-		workerList: Array<any>,
-		workTypeList: Array<any>,
-		workLevelList: Array<any>,
-		otherWorkList: Array<any>
-	}
-	export default defineComponent({
-		name: 'space',
-		components: {},
-		props:['details'],
-		setup() {
-			const userInfo = useUserInfo()
-			const { userInfos } = storeToRefs(userInfo);
-			return {
-				Search
-			};
-		},
-	});
-</script>
-
-<style scoped lang="scss">
-	.home-container {
-		height: 100%;
-		overflow: hidden;
-		position: relative;
-		.el-row{
-			margin-bottom: 20px;
-		}
-		.el-row:last-child {
-			margin-bottom: 0;
-		}
-		.el-input{
-			width: 100% !important;
-		}
-		.el-date-editor::v-deep{
-			width: 100%;
-		}
-		.el-select{
-			width: 100%;
-		}
-		.el-cascader{
-			width: 100% !important;
-		}
-	}
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/wdsq/components/heightLog.vue b/src/views/specialWorkSystem/workTicket/wdsq/components/heightLog.vue
deleted file mode 100644
index f95c6e9..0000000
--- a/src/views/specialWorkSystem/workTicket/wdsq/components/heightLog.vue
+++ /dev/null
@@ -1,125 +0,0 @@
-<template>
-	<div style="height: 100%">
-		<el-form :model="details" label-width="150px">
-			<el-form-item label="作业申请单号">
-				<el-input v-model="details.workPermitNo" readonly />
-			</el-form-item>
-			<el-form-item label="申请人">
-				<el-input v-model="details.applyUname" readonly />
-			</el-form-item>
-			<el-form-item label="部门名称">
-				<el-input v-model="details.depName" readonly />
-			</el-form-item>
-			<el-form-item label="作业人">
-				<el-input v-model="details.operators" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="作业类型">
-				<el-input v-model="details.workTypeDesc" readonly />
-			</el-form-item>
-			<el-form-item label="作业等级">
-				<el-input v-model="details.workLevelDesc" readonly />
-			</el-form-item>
-			<el-form-item label="作业内容">
-				<el-input v-model="details.workContent" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="作业地址">
-				<el-input v-model="details.workLocation" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="作业单位">
-				<el-input v-model="details.workDetail.operationDepId" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="作业高度">
-				<el-input v-model="details.workDetail.operationHeight" readonly type="textarea"><template #append>米(m)</template></el-input>
-			</el-form-item>
-      <el-form-item label="物资状态">
-        <span>{{ details.materialStatus==0?'未关联物资':(details.materialStatus==1?'必选物资配备不足':(details.materialStatus==2?'必选物资配备齐全':(details.materialStatus==3?'物资配置专业':(details.materialStatus==4?'物资配置高端':'-')))) }}</span>
-      </el-form-item>
-			<el-form-item label="关联物资" v-if="details.workMaterial&&details.workMaterial.length>0">
-				<el-table :data="details.workMaterial" style="width: 100%" border>
-          <el-table-column prop="bigClassifyName" label="物资类型" align="center"/>
-          <el-table-column prop="materialName" label="物资名称" align="center"/>
-          <el-table-column prop="configurationLevel" label="配置级别" align="center">
-            <template #default="scope">
-              {{scope.row.configurationLevel == 0?'必选':(scope.row.configurationLevel == 1? '可选':'高配')}}
-            </template>
-          </el-table-column>
-          <el-table-column prop="useCount" label="配置数量" align="center"/>
-				</el-table>
-			</el-form-item>
-			<el-form-item label="关联其他作业">
-				<el-input v-model="details.workDetail.otherSpecialWork" readonly type="textarea"/>
-			</el-form-item>
-			<el-form-item label="期望开始时间">
-				<el-input v-model="details.expStartTime" readonly />
-			</el-form-item>
-			<el-form-item label="期望结束时间">
-				<el-input v-model="details.expEndTime" readonly />
-			</el-form-item>
-			<el-form-item label="申请时间">
-				<el-input v-model="details.applyTime" readonly />
-			</el-form-item>
-			<el-form-item label="当前状态">
-				<el-input v-model="details.statusDesc" readonly />
-			</el-form-item>
-		</el-form>
-	</div>
-</template>
-
-<script lang="ts">
-	import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue';
-	import { storeToRefs } from 'pinia';
-	import { initBackEndControlRoutes } from '/@/router/backEnd';
-	import {useUserInfo} from "/@/stores/userInfo";
-	import { Session } from '/@/utils/storage';
-	import { Search } from '@element-plus/icons-vue'
-	import { ElMessage } from 'element-plus'
-	import type { FormInstance, FormRules } from 'element-plus'
-	import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-
-
-	interface stateType {
-		form: Object,
-		workerList: Array<any>,
-		workTypeList: Array<any>,
-		workLevelList: Array<any>,
-		otherWorkList: Array<any>
-	}
-	export default defineComponent({
-		name: 'space',
-		components: {},
-		props:['details'],
-		setup() {
-			const userInfo = useUserInfo()
-			const { userInfos } = storeToRefs(userInfo);
-			return {
-				Search
-			};
-		},
-	});
-</script>
-
-<style scoped lang="scss">
-	.home-container {
-		height: 100%;
-		overflow: hidden;
-		position: relative;
-		.el-row{
-			margin-bottom: 20px;
-		}
-		.el-row:last-child {
-			margin-bottom: 0;
-		}
-		.el-input{
-			width: 100% !important;
-		}
-		.el-date-editor::v-deep{
-			width: 100%;
-		}
-		.el-select{
-			width: 100%;
-		}
-		.el-cascader{
-			width: 100% !important;
-		}
-	}
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/wdsq/components/hoistLog.vue b/src/views/specialWorkSystem/workTicket/wdsq/components/hoistLog.vue
deleted file mode 100644
index 1086537..0000000
--- a/src/views/specialWorkSystem/workTicket/wdsq/components/hoistLog.vue
+++ /dev/null
@@ -1,125 +0,0 @@
-<template>
-	<div style="height: 100%">
-		<el-form :model="details" label-width="150px">
-			<el-form-item label="作业申请单号">
-				<el-input v-model="details.workPermitNo" readonly />
-			</el-form-item>
-			<el-form-item label="申请人">
-				<el-input v-model="details.applyUname" readonly />
-			</el-form-item>
-			<el-form-item label="部门名称">
-				<el-input v-model="details.depName" readonly />
-			</el-form-item>
-			<el-form-item label="作业人">
-				<el-input v-model="details.operators" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="作业类型">
-				<el-input v-model="details.workTypeDesc" readonly />
-			</el-form-item>
-			<el-form-item label="作业等级">
-				<el-input v-model="details.workLevelDesc" readonly />
-			</el-form-item>
-			<el-form-item label="作业内容">
-				<el-input v-model="details.workContent" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="作业地址">
-				<el-input v-model="details.workLocation" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="吊装工具名称">
-				<el-input v-model="details.workDetail.hoistingToolName" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="起吊物体重量">
-				<el-input v-model="details.workDetail.weightMass" readonly type="textarea"><template #append>吨(t)</template></el-input>
-			</el-form-item>
-      <el-form-item label="物资状态">
-        <span>{{ details.materialStatus==0?'未关联物资':(details.materialStatus==1?'必选物资配备不足':(details.materialStatus==2?'必选物资配备齐全':(details.materialStatus==3?'物资配置专业':(details.materialStatus==4?'物资配置高端':'-')))) }}</span>
-      </el-form-item>
-			<el-form-item label="关联物资" v-if="details.workMaterial&&details.workMaterial.length>0">
-				<el-table :data="details.workMaterial" style="width: 100%" border>
-          <el-table-column prop="bigClassifyName" label="物资类型" align="center"/>
-          <el-table-column prop="materialName" label="物资名称" align="center"/>
-          <el-table-column prop="configurationLevel" label="配置级别" align="center">
-            <template #default="scope">
-              {{scope.row.configurationLevel == 0?'必选':(scope.row.configurationLevel == 1? '可选':'高配')}}
-            </template>
-          </el-table-column>
-          <el-table-column prop="useCount" label="配置数量" align="center"/>
-				</el-table>
-			</el-form-item>
-			<el-form-item label="关联其他作业">
-				<el-input v-model="details.workDetail.otherSpecialWork" readonly type="textarea"/>
-			</el-form-item>
-			<el-form-item label="期望开始时间">
-				<el-input v-model="details.expStartTime" readonly />
-			</el-form-item>
-			<el-form-item label="期望结束时间">
-				<el-input v-model="details.expEndTime" readonly />
-			</el-form-item>
-			<el-form-item label="申请时间">
-				<el-input v-model="details.applyTime" readonly />
-			</el-form-item>
-			<el-form-item label="当前状态">
-				<el-input v-model="details.statusDesc" readonly />
-			</el-form-item>
-		</el-form>
-	</div>
-</template>
-
-<script lang="ts">
-	import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue';
-	import { storeToRefs } from 'pinia';
-	import { initBackEndControlRoutes } from '/@/router/backEnd';
-	import {useUserInfo} from "/@/stores/userInfo";
-	import { Session } from '/@/utils/storage';
-	import { Search } from '@element-plus/icons-vue'
-	import { ElMessage } from 'element-plus'
-	import type { FormInstance, FormRules } from 'element-plus'
-	import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-
-
-	interface stateType {
-		form: Object,
-		workerList: Array<any>,
-		workTypeList: Array<any>,
-		workLevelList: Array<any>,
-		otherWorkList: Array<any>
-	}
-	export default defineComponent({
-		name: 'space',
-		components: {},
-		props:['details'],
-		setup() {
-			const userInfo = useUserInfo()
-			const { userInfos } = storeToRefs(userInfo);
-			return {
-				Search
-			};
-		},
-	});
-</script>
-
-<style scoped lang="scss">
-	.home-container {
-		height: 100%;
-		overflow: hidden;
-		position: relative;
-		.el-row{
-			margin-bottom: 20px;
-		}
-		.el-row:last-child {
-			margin-bottom: 0;
-		}
-		.el-input{
-			width: 100% !important;
-		}
-		.el-date-editor::v-deep{
-			width: 100%;
-		}
-		.el-select{
-			width: 100%;
-		}
-		.el-cascader{
-			width: 100% !important;
-		}
-	}
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/wdsq/components/plateLog.vue b/src/views/specialWorkSystem/workTicket/wdsq/components/plateLog.vue
deleted file mode 100644
index 69620a3..0000000
--- a/src/views/specialWorkSystem/workTicket/wdsq/components/plateLog.vue
+++ /dev/null
@@ -1,149 +0,0 @@
-<template>
-	<div style="height: 100%">
-		<el-form :model="details" label-width="150px">
-			<el-form-item label="作业申请单号">
-				<el-input v-model="details.workPermitNo" readonly />
-			</el-form-item>
-			<el-form-item label="申请人">
-				<el-input v-model="details.applyUname" readonly />
-			</el-form-item>
-			<el-form-item label="部门名称">
-				<el-input v-model="details.depName" readonly />
-			</el-form-item>
-			<el-form-item label="作业人">
-				<el-input v-model="details.operators" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="作业类型">
-				<el-input v-model="details.workTypeDesc" readonly />
-			</el-form-item>
-			<el-form-item label="作业等级">
-				<el-input v-model="details.workLevelDesc" readonly />
-			</el-form-item>
-			<el-form-item label="作业内容">
-				<el-input v-model="details.workContent" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="作业地址">
-				<el-input v-model="details.workLocation" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="盲板编号">
-				<el-input v-model="details.workDetail.bpCode" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="主要介质">
-				<el-input v-model="details.workDetail.mainMedia" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="温度">
-				<el-input v-model="details.workDetail.temperature" readonly type="textarea"><template #append>摄氏度(℃)</template></el-input>
-			</el-form-item>
-			<el-form-item label="压力">
-				<el-input v-model="details.workDetail.pressure" readonly type="textarea"><template #append>千帕(kPa)</template></el-input>
-			</el-form-item>
-			<el-form-item label="盲板材质">
-				<el-input v-model="details.workDetail.bpMaterialQuality" readonly type="textarea"/>
-			</el-form-item>
-			<el-form-item label="盲板规格">
-				<el-input v-model="details.workDetail.bpSpecification" readonly type="textarea"/>
-			</el-form-item>
-			<el-form-item label="盲板位置">
-				<el-input v-model="details.workDetail.bpLocation" readonly type="textarea"/>
-			</el-form-item>
-			<el-form-item label="装盲板时间">
-				<el-input v-model="details.workDetail.installBpTime" readonly/>
-			</el-form-item>
-			<el-form-item label="拆盲板时间">
-				<el-input v-model="details.workDetail.uninstallBpTime" readonly/>
-			</el-form-item>
-      <el-form-item label="物资状态">
-        <span>{{ details.materialStatus==0?'未关联物资':(details.materialStatus==1?'必选物资配备不足':(details.materialStatus==2?'必选物资配备齐全':(details.materialStatus==3?'物资配置专业':(details.materialStatus==4?'物资配置高端':'-')))) }}</span>
-      </el-form-item>
-			<el-form-item label="关联物资" v-if="details.workMaterial&&details.workMaterial.length>0">
-				<el-table :data="details.workMaterial" style="width: 100%" border>
-          <el-table-column prop="bigClassifyName" label="物资类型" align="center"/>
-          <el-table-column prop="materialName" label="物资名称" align="center"/>
-          <el-table-column prop="configurationLevel" label="配置级别" align="center">
-            <template #default="scope">
-              {{scope.row.configurationLevel == 0?'必选':(scope.row.configurationLevel == 1? '可选':'高配')}}
-            </template>
-          </el-table-column>
-          <el-table-column prop="useCount" label="配置数量" align="center"/>
-				</el-table>
-			</el-form-item>
-			<el-form-item label="关联其他作业">
-				<el-input v-model="details.workDetail.otherSpecialWork" readonly type="textarea"/>
-			</el-form-item>
-			<el-form-item label="盲板位置图">
-				<el-image v-for="item in details.workDetail.bpLocationMapPath" :preview-src-list="details.workDetail.bpLocationMapPath" style="width: 150px; height: 150px;margin-right: 50px;margin-bottom: 20px" :src="item" fit="cover" />
-			</el-form-item>
-			<el-form-item label="期望开始时间">
-				<el-input v-model="details.expStartTime" readonly />
-			</el-form-item>
-			<el-form-item label="期望结束时间">
-				<el-input v-model="details.expEndTime" readonly />
-			</el-form-item>
-			<el-form-item label="申请时间">
-				<el-input v-model="details.applyTime" readonly />
-			</el-form-item>
-			<el-form-item label="当前状态">
-				<el-input v-model="details.statusDesc" readonly />
-			</el-form-item>
-		</el-form>
-	</div>
-</template>
-
-<script lang="ts">
-	import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue';
-	import { storeToRefs } from 'pinia';
-	import { initBackEndControlRoutes } from '/@/router/backEnd';
-	import {useUserInfo} from "/@/stores/userInfo";
-	import { Session } from '/@/utils/storage';
-	import { Search } from '@element-plus/icons-vue'
-	import { ElMessage } from 'element-plus'
-	import type { FormInstance, FormRules } from 'element-plus'
-	import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-
-
-	interface stateType {
-		form: Object,
-		workerList: Array<any>,
-		workTypeList: Array<any>,
-		workLevelList: Array<any>,
-		otherWorkList: Array<any>
-	}
-	export default defineComponent({
-		name: 'space',
-		components: {},
-		props:['details'],
-		setup() {
-			const userInfo = useUserInfo()
-			const { userInfos } = storeToRefs(userInfo);
-			return {
-				Search
-			};
-		},
-	});
-</script>
-
-<style scoped lang="scss">
-	.home-container {
-		height: 100%;
-		overflow: hidden;
-		position: relative;
-		.el-row{
-			margin-bottom: 20px;
-		}
-		.el-row:last-child {
-			margin-bottom: 0;
-		}
-		.el-input{
-			width: 100% !important;
-		}
-		.el-date-editor::v-deep{
-			width: 100%;
-		}
-		.el-select{
-			width: 100%;
-		}
-		.el-cascader{
-			width: 100% !important;
-		}
-	}
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/wdsq/components/powerLog.vue b/src/views/specialWorkSystem/workTicket/wdsq/components/powerLog.vue
deleted file mode 100644
index cf81c13..0000000
--- a/src/views/specialWorkSystem/workTicket/wdsq/components/powerLog.vue
+++ /dev/null
@@ -1,128 +0,0 @@
-<template>
-	<div style="height: 100%">
-		<el-form :model="details" label-width="150px">
-			<el-form-item label="作业申请单号">
-				<el-input v-model="details.workPermitNo" readonly />
-			</el-form-item>
-			<el-form-item label="申请人">
-				<el-input v-model="details.applyUname" readonly />
-			</el-form-item>
-			<el-form-item label="部门名称">
-				<el-input v-model="details.depName" readonly />
-			</el-form-item>
-			<el-form-item label="作业人">
-				<el-input v-model="details.operators" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="作业类型">
-				<el-input v-model="details.workTypeDesc" readonly />
-			</el-form-item>
-			<el-form-item label="作业等级">
-				<el-input v-model="details.workLevelDesc" readonly />
-			</el-form-item>
-			<el-form-item label="作业内容">
-				<el-input v-model="details.workContent" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="作业地址">
-				<el-input v-model="details.workLocation" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="电源接入点">
-				<el-input v-model="details.workDetail.powerAccessPoint" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="工作电压">
-				<el-input v-model="details.workDetail.workingVoltage" readonly type="textarea"><template #append>伏特(v)</template></el-input>
-			</el-form-item>
-			<el-form-item label="用电设备及功率">
-				<el-input v-model="details.workDetail.equipmentAndPower" readonly type="textarea" />
-			</el-form-item>
-      <el-form-item label="物资状态">
-        <span>{{ details.materialStatus==0?'未关联物资':(details.materialStatus==1?'必选物资配备不足':(details.materialStatus==2?'必选物资配备齐全':(details.materialStatus==3?'物资配置专业':(details.materialStatus==4?'物资配置高端':'-')))) }}</span>
-      </el-form-item>
-			<el-form-item label="关联物资" v-if="details.workMaterial&&details.workMaterial.length>0">
-				<el-table :data="details.workMaterial" style="width: 100%" border>
-          <el-table-column prop="bigClassifyName" label="物资类型" align="center"/>
-          <el-table-column prop="materialName" label="物资名称" align="center"/>
-          <el-table-column prop="configurationLevel" label="配置级别" align="center">
-            <template #default="scope">
-              {{scope.row.configurationLevel == 0?'必选':(scope.row.configurationLevel == 1? '可选':'高配')}}
-            </template>
-          </el-table-column>
-          <el-table-column prop="useCount" label="配置数量" align="center"/>
-				</el-table>
-			</el-form-item>
-			<el-form-item label="关联其他作业">
-				<el-input v-model="details.workDetail.otherSpecialWork" readonly type="textarea"/>
-			</el-form-item>
-			<el-form-item label="期望开始时间">
-				<el-input v-model="details.expStartTime" readonly />
-			</el-form-item>
-			<el-form-item label="期望结束时间">
-				<el-input v-model="details.expEndTime" readonly />
-			</el-form-item>
-			<el-form-item label="申请时间">
-				<el-input v-model="details.applyTime" readonly />
-			</el-form-item>
-			<el-form-item label="当前状态">
-				<el-input v-model="details.statusDesc" readonly />
-			</el-form-item>
-		</el-form>
-	</div>
-</template>
-
-<script lang="ts">
-	import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue';
-	import { storeToRefs } from 'pinia';
-	import { initBackEndControlRoutes } from '/@/router/backEnd';
-	import {useUserInfo} from "/@/stores/userInfo";
-	import { Session } from '/@/utils/storage';
-	import { Search } from '@element-plus/icons-vue'
-	import { ElMessage } from 'element-plus'
-	import type { FormInstance, FormRules } from 'element-plus'
-	import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-
-
-	interface stateType {
-		form: Object,
-		workerList: Array<any>,
-		workTypeList: Array<any>,
-		workLevelList: Array<any>,
-		otherWorkList: Array<any>
-	}
-	export default defineComponent({
-		name: 'space',
-		components: {},
-		props:['details'],
-		setup() {
-			const userInfo = useUserInfo()
-			const { userInfos } = storeToRefs(userInfo);
-			return {
-				Search
-			};
-		},
-	});
-</script>
-
-<style scoped lang="scss">
-	.home-container {
-		height: 100%;
-		overflow: hidden;
-		position: relative;
-		.el-row{
-			margin-bottom: 20px;
-		}
-		.el-row:last-child {
-			margin-bottom: 0;
-		}
-		.el-input{
-			width: 100% !important;
-		}
-		.el-date-editor::v-deep{
-			width: 100%;
-		}
-		.el-select{
-			width: 100%;
-		}
-		.el-cascader{
-			width: 100% !important;
-		}
-	}
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/wdsq/components/spaceLog.vue b/src/views/specialWorkSystem/workTicket/wdsq/components/spaceLog.vue
deleted file mode 100644
index d6b4606..0000000
--- a/src/views/specialWorkSystem/workTicket/wdsq/components/spaceLog.vue
+++ /dev/null
@@ -1,128 +0,0 @@
-<template>
-	<div style="height: 100%">
-		<el-form :model="details" label-width="150px">
-			<el-form-item label="作业申请单号">
-				<el-input v-model="details.workPermitNo" readonly />
-			</el-form-item>
-			<el-form-item label="申请人">
-				<el-input v-model="details.applyUname" readonly />
-			</el-form-item>
-			<el-form-item label="部门名称">
-				<el-input v-model="details.depName" readonly />
-			</el-form-item>
-			<el-form-item label="作业人">
-				<el-input v-model="details.operators" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="作业类型">
-				<el-input v-model="details.workTypeDesc" readonly />
-			</el-form-item>
-			<el-form-item label="作业等级">
-				<el-input v-model="details.workLevelDesc" readonly />
-			</el-form-item>
-			<el-form-item label="作业内容">
-				<el-input v-model="details.workContent" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="作业地址">
-				<el-input v-model="details.workLocation" readonly type="textarea"/>
-			</el-form-item>
-			<el-form-item label="受限空间所属单位">
-				<el-input v-model="details.workDetail.csDepId" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="受限空间名称">
-				<el-input v-model="details.workDetail.csName" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="空间原有介质名称">
-				<el-input v-model="details.workDetail.csOriginalName" readonly type="textarea" />
-			</el-form-item>
-      <el-form-item label="物资状态">
-        <span>{{ details.materialStatus==0?'未关联物资':(details.materialStatus==1?'必选物资配备不足':(details.materialStatus==2?'必选物资配备齐全':(details.materialStatus==3?'物资配置专业':(details.materialStatus==4?'物资配置高端':'-')))) }}</span>
-      </el-form-item>
-			<el-form-item label="关联物资" v-if="details.workMaterial&&details.workMaterial.length>0">
-				<el-table :data="details.workMaterial" style="width: 100%" border>
-          <el-table-column prop="bigClassifyName" label="物资类型" align="center"/>
-          <el-table-column prop="materialName" label="物资名称" align="center"/>
-          <el-table-column prop="configurationLevel" label="配置级别" align="center">
-            <template #default="scope">
-              {{scope.row.configurationLevel == 0?'必选':(scope.row.configurationLevel == 1? '可选':'高配')}}
-            </template>
-          </el-table-column>
-          <el-table-column prop="useCount" label="配置数量" align="center"/>
-				</el-table>
-			</el-form-item>
-			<el-form-item label="关联其他作业">
-				<el-input v-model="details.workDetail.otherSpecialWork" readonly type="textarea" />
-			</el-form-item>
-			<el-form-item label="期望开始时间">
-				<el-input v-model="details.expStartTime" readonly />
-			</el-form-item>
-			<el-form-item label="期望结束时间">
-				<el-input v-model="details.expEndTime" readonly />
-			</el-form-item>
-			<el-form-item label="申请时间">
-				<el-input v-model="details.applyTime" readonly />
-			</el-form-item>
-			<el-form-item label="当前状态">
-				<el-input v-model="details.statusDesc" readonly />
-			</el-form-item>
-		</el-form>
-	</div>
-</template>
-
-<script lang="ts">
-	import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue';
-	import { storeToRefs } from 'pinia';
-	import { initBackEndControlRoutes } from '/@/router/backEnd';
-	import {useUserInfo} from "/@/stores/userInfo";
-	import { Session } from '/@/utils/storage';
-	import { Search } from '@element-plus/icons-vue'
-	import { ElMessage } from 'element-plus'
-	import type { FormInstance, FormRules } from 'element-plus'
-	import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-
-
-	interface stateType {
-		form: Object,
-		workerList: Array<any>,
-		workTypeList: Array<any>,
-		workLevelList: Array<any>,
-		otherWorkList: Array<any>
-	}
-	export default defineComponent({
-		name: 'space',
-		components: {},
-		props:['details'],
-		setup() {
-			const userInfo = useUserInfo()
-			const { userInfos } = storeToRefs(userInfo);
-			return {
-				Search
-			};
-		},
-	});
-</script>
-
-<style scoped lang="scss">
-	.home-container {
-		height: 100%;
-		overflow: hidden;
-		position: relative;
-		.el-row{
-			margin-bottom: 20px;
-		}
-		.el-row:last-child {
-			margin-bottom: 0;
-		}
-		.el-input{
-			width: 100% !important;
-		}
-		.el-date-editor::v-deep{
-			width: 100%;
-		}
-		.el-select{
-			width: 100%;
-		}
-		.el-cascader{
-			width: 100% !important;
-		}
-	}
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/wdsq/index.vue b/src/views/specialWorkSystem/workTicket/wdsq/index.vue
deleted file mode 100644
index 340b902..0000000
--- a/src/views/specialWorkSystem/workTicket/wdsq/index.vue
+++ /dev/null
@@ -1,877 +0,0 @@
-<template>
-    <div class="home-container">
-<!--        <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">-->
-<!--            <el-tab-pane label="申请中" name="1">-->
-                <div style="height: 100%">
-                    <el-row class="homeCard">
-                        <span>作业类型:</span>
-                        <el-col :span="10">
-                            <div class="grid-content topInfo">
-                                <el-select v-model="searchWord">
-                                    <el-option
-                                            v-for="item in workType"
-                                            :key="item.id"
-                                            :label="item.name"
-                                            :value="item.id"
-                                    />
-                                </el-select>
-
-                                <el-button type="primary" @click="searchRecord">查询</el-button>
-                                <el-button plain @click="clearSearch">重置</el-button>
-                            </div>
-                        </el-col>
-                    </el-row>
-                    <div class="homeCard">
-                        <div class="main-card">
-                            <el-row class="cardTop">
-                                <el-col :span="12" class="mainCardBtn">
-                                    <el-button type="primary" :icon="Plus" size="default" @click="toApply()">申请</el-button>
-                                    <!--									<el-button type="danger" :icon="Delete" size="default">删除</el-button>-->
-                                    <!--									<el-button type="success" size="default">设置分类</el-button>-->
-                                </el-col>
-                                <el-button type="primary" :icon="Refresh" size="default" @click="reLoadData()" />
-                            </el-row>
-                            <el-table ref="multipleTableRef" :data="applyData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }">
-                                <el-table-column property="workPermitNo" label="作业申请单号" width="180" />
-                                <el-table-column property="applyUname" label="申请人" />
-                                <el-table-column property="depName" label="部门名称" />
-                                <el-table-column property="operators" label="作业人" />
-                                <el-table-column property="workTypeDesc" label="作业类型" />
-                                <el-table-column property="workLevelDesc" label="作业等级" />
-                                <el-table-column property="materialStatus" label="物资状态" align="center" width="180">
-                                  <template #default="scope">
-                                    <span>{{ scope.row.materialStatus==0?'未关联物资':(scope.row.materialStatus==1?'必选物资配备不足':(scope.row.materialStatus==2?'必选物资配备齐全':(scope.row.materialStatus==3?'物资配置专业':(scope.row.materialStatus==4?'物资配置高端':'-')))) }}</span>
-                                  </template>
-                                </el-table-column>
-                                <el-table-column property="applyTime" label="申请时间" width="180" />
-                                <el-table-column label="申请状态" align="center" width="180">
-                                    <template #default="scope">
-                                        <el-tag :type="scope.row.status==2?'success':(scope.row.status==8||scope.row.status==9)?'warning':'danger'">{{ scope.row.statusDesc }}</el-tag>
-                                    </template>
-                                </el-table-column>
-                                <el-table-column fixed="right" label="操作" align="center" width="300">
-                                    <template #default="scope">
-                                        <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button>
-                                        <el-button link type="success" size="small" :icon="Finished" @click="viewStatus(scope.row)">进度</el-button>
-                                        <el-button link type="warning" size="small" :icon="Delete" @click="deleteRecordBtn(scope.row)">取消</el-button>
-                                        <el-button :disabled="scope.row.status == 7 ? false : true" link type="primary" size="small" :icon="Download" @click="downLoadBtn(scope.row)">导出作业票</el-button>
-                                    </template>
-                                </el-table-column>
-                            </el-table>
-                            <div class="pageBtn">
-                                <el-pagination v-model:currentPage="pageIndex1" v-model:page-size="pageSize1" :page-sizes="[10, 15]" small="false" background layout="total, sizes, prev, pager, next, jumper" :total="totalSize1" @size-change="handleSizeChange1" @current-change="handleCurrentChange1" />
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <el-dialog v-model="dialogDetails" title="作业申请详情" center>
-                    <fire v-if="dialogType == 1" :details = details></fire>
-                    <space v-else-if="dialogType == 2" :details = details></space>
-                    <hoist v-else-if="dialogType == 3" :details = details></hoist>
-                    <ground v-else-if="dialogType == 4" :details = details></ground>
-                    <broken v-else-if="dialogType == 5" :details = details></broken>
-                    <height v-else-if="dialogType == 6" :details = details></height>
-                    <power v-else-if="dialogType == 7" :details = details></power>
-                    <plate v-else :details = details></plate>
-                    <template #footer>
-                      <span class="dialog-footer">
-                        <el-button type="primary" @click="dialogDetails = false"
-                        >确认</el-button
-                        >
-                      </span>
-                    </template>
-                </el-dialog>
-                <el-dialog v-model="dialogStatus" title="作业申请进度" width="60%">
-                    <el-form v-if="approveInfo.operators.length > 0" style="margin-bottom: 40px">
-                        <el-form-item label="申请作业人">
-                            <el-input v-model="approveInfo.operators" readonly type="textarea" />
-                        </el-form-item>
-                    </el-form>
-                    <div style="display: flex; flex-direction: column-reverse">
-                        <div v-for="(item, index) in approveInfo.approvalSteps" class="stepItem">
-                            <div class="stepNum">{{ item.stepSerial }}</div>
-                            <div class="stepCard">
-                                <el-card class="box-card" shadow="always">
-                                    <div class="text">
-                                        审批结果:<span class="bold-text">{{ item.approvalResultDesc }}</span>
-                                    </div>
-                                    <div class="text">
-                                        审批类型:<span class="bold-text">{{ item.typeDesc }}</span>
-                                    </div>
-                                    <div class="text" v-if="item.auditTypeDesc">
-                                        审批类型:<span class="bold-text">{{ item.auditTypeDesc }}</span>
-                                    </div>
-                                    <div class="text" v-show="item.startApprovalTime != null">
-                                        开始时间:<span>{{ item.startApprovalTime }}</span>
-                                    </div>
-                                    <div class="approveUnit">
-                                        <div class="item-tit"><span>审批人</span><span>审批状态</span></div>
-                                        <div class="item-cont" v-for="i in item.stepUnits">
-                                            <span>{{ i.approvalUname }}</span
-                                            ><span>{{ i.resultDesc }}</span>
-                                        </div>
-                                    </div>
-                                    <div class="approveItem">
-                                        <div class="item-tit">
-                                            <span>审批项目</span>
-<!--                                            <span>类型</span>-->
-                                            <div>措施标准</div>
-                                        </div>
-                                        <div class="item-cont" v-for="i in item.stepItems">
-                                            <span>{{ i.itemName }}</span>
-<!--                                            <span>{{ i.typeDesc }}</span>-->
-                                            <div v-if="i.measure !== null">
-                                                <div>
-                                                    <span>作业类型:</span><span>{{ i.measure.workTypeDesc }}</span>
-                                                </div>
-                                                <div>
-                                                    <span>措施内容:</span><span>{{ i.measure.context }}</span>
-                                                </div>
-                                            </div>
-                                            <div v-if="i.stand !== null">
-                                                <div>
-                                                    <span>标题名称:</span><span>{{ i.stand.title }}</span>
-                                                </div>
-                                                <div>
-                                                    <span>标准内容:</span><span>{{ i.stand.typeDesc }}</span>
-                                                </div>
-                                            </div>
-                                        </div>
-                                    </div>
-                                    <div class="text" v-show="item.expFinishApprovalTime && item.expFinishApprovalTime != null">
-                                        期望结束时间:<span>{{ item.expFinishApprovalTime }}</span>
-                                    </div>
-                                    <div class="text" v-show="item.finishApprovalTime != null">
-                                        结束时间:<span>{{ item.finishApprovalTime }}</span>
-                                    </div>
-                                </el-card>
-                            </div>
-                        </div>
-                    </div>
-                </el-dialog>
-                <el-dialog v-model="deleteDialog" title="提示" width="30%" center>
-                    <span>您确定要取消该条申请吗?</span>
-                    <template #footer>
-                        <span class="dialog-footer">
-                            <el-button @click="deleteDialog = false" size="default">取消</el-button>
-                            <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button>
-                        </span>
-                    </template>
-                </el-dialog>
-                <el-dialog v-model="downLoadDialog" title="提示" width="30%" center>
-                    <span>您确定要导出该条记录吗?</span>
-                    <template #footer>
-                                <span class="dialog-footer">
-                                    <el-button @click="downLoadDialog = false" size="default">取消</el-button>
-                                    <el-button type="primary" @click="conFirmDownLoad" size="default">确认</el-button>
-                                </span>
-                    </template>
-                </el-dialog>
-<!--            </el-tab-pane>-->
-<!--            <el-tab-pane label="已通过" name="2">-->
-<!--                <div style="height: 100%">-->
-<!--                    <el-row class="homeCard">-->
-<!--                        <el-col :span="8">-->
-<!--                            <div class="grid-content topInfo">-->
-<!--                                <el-input v-model="searchWord" placeholder="作业证名称"></el-input>-->
-<!--                                <el-button type="primary">查询</el-button>-->
-<!--                                <el-button plain>重置</el-button>-->
-<!--                            </div>-->
-<!--                        </el-col>-->
-<!--                    </el-row>-->
-<!--                    <div class="homeCard">-->
-<!--                        <div class="main-card">-->
-<!--                            <el-table ref="multipleTableRef" :data="passedData" style="width: 100%" height="calc(100% - 48px)" :header-cell-style="{ background: '#fafafa' }" @selection-change="handleSelectionChange">-->
-<!--                                <el-table-column type="selection" width="55" />-->
-<!--                                <el-table-column type="index" label="编号" width="200" />-->
-<!--                                <el-table-column property="level" label="作业证等级" width="180" sortable />-->
-<!--                                <el-table-column property="applyDate" label="申请日期" sortable />-->
-<!--                                <el-table-column property="name" label="申请人" width="180" />-->
-<!--                                <el-table-column property="department" label="申请部门" width="180" />-->
-<!--                                <el-table-column label="申请状态" width="180">-->
-<!--                                    <template #default="scope">-->
-<!--                                        <el-tag type="success">{{ scope.row.status }}</el-tag>-->
-<!--                                    </template>-->
-<!--                                </el-table-column>-->
-<!--                            </el-table>-->
-<!--                            <div class="pageBtn">-->
-<!--                                <el-pagination v-model:currentPage="pageIndex2" v-model:page-size="pageSize2" :page-sizes="[10, 15]" small="false" background layout="total, sizes, prev, pager, next, jumper" :total="totalSize2" @size-change="handleSizeChange2" @current-change="handleCurrentChange2" />-->
-<!--                            </div>-->
-<!--                        </div>-->
-<!--                    </div>-->
-<!--                </div>-->
-<!--            </el-tab-pane>-->
-<!--        </el-tabs>-->
-    </div>
-</template>
-
-<script lang="ts">
-import {toRefs, reactive, defineComponent, ref, onMounted, defineAsyncComponent} from 'vue';
-import { storeToRefs } from 'pinia';
-import { initBackEndControlRoutes } from '/@/router/backEnd';
-import { useUserInfo } from '/@/stores/userInfo';
-import { Session } from '/@/utils/storage';
-import { useRouter } from 'vue-router';
-import { Edit, View, Plus, Delete, Refresh, Search, Finished, Download } from '@element-plus/icons-vue';
-import { ElTable } from 'element-plus';
-import { FormInstance, FormRules, ElMessage } from 'element-plus';
-import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-import type { TabsPaneContext } from 'element-plus';
-import {teamManageApi} from "/@/api/systemManage/basicDateManage/personShiftManage/teamManage";
-import Cookies from 'js-cookie';
-import axios from 'axios';
-
-// 定义接口来定义对象的类型
-interface stateType {
-    applyData: Array<string>;
-    workTimeList: Array<string>;
-    multipleSelection: Array<any>;
-    deleteArr: Array<any>;
-    approveInfo: Object;
-    dialogDetails: boolean;
-    dialogStatus: boolean;
-    deleteDialog: boolean;
-    downLoadDialog: boolean;
-    pageIndex1: number;
-    pageSize1: number;
-    chosenIndex: null | number;
-    deleteId: null | number;
-    downLoadId: null | number;
-    downLoadName: string;
-    searchWord: string;
-    totalSize1: number;
-    activeName: string;
-    addRecord: {};
-    details: {};
-    statusInfo: {};
-    workType: Array<type>;
-    dialogType: number | null;
-    departmentList: Array<any>;
-    departmentRecursionList: Array<DepartmentState>;
-}
-interface type {
-    id: number;
-    name: string;
-}
-interface DepartmentState {
-    depId: number;
-    depName: string;
-}
-export default defineComponent({
-    name: 'myApply',
-    components: {
-        fire: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/fireLog.vue')),
-        space: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/spaceLog.vue')),
-        hoist: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/hoistLog.vue')),
-        ground: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/groundLog.vue')),
-        broken: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/brokenLog.vue')),
-        height: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/heightLog.vue')),
-        power: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/powerLog.vue')),
-        plate: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/plateLog.vue'))
-    },
-    setup() {
-        const userInfo = useUserInfo();
-        const { userInfos } = storeToRefs(userInfo);
-        const router = useRouter();
-        const state = reactive<stateType>({
-            pageIndex1: 1,
-            pageSize1: 10,
-            totalSize1: 0,
-            dialogType: null,
-            activeName: '1',
-            departmentList: [],
-            departmentRecursionList: [],
-            chosenIndex: null,
-            searchWord: '',
-            applyData: [],
-            workTimeList: [],
-            multipleSelection: [],
-            approveInfo: {
-                approvalSteps: [],
-                operators: []
-            },
-            dialogDetails: false,
-            dialogStatus: false,
-            deleteDialog: false,
-            downLoadDialog: false,
-            addRecord: {},
-            details: {},
-            statusInfo: {},
-            deleteId: null,
-            downLoadId: null,
-            downLoadName: '',
-            deleteArr: [],
-            workType: [
-                { id: 1, name: '动火作业' },
-                { id: 2, name: '受限空间作业' },
-                { id: 3, name: '吊装作业' },
-                { id: 4, name: '动土作业' },
-                { id: 5, name: '断路作业' },
-                { id: 6, name: '高处作业' },
-                { id: 7, name: '临时用电作业' },
-                { id: 8, name: '盲板抽堵作业' }
-            ]
-        });
-        interface User {
-            name: string;
-            list: [];
-            info: string;
-        }
-
-        // 刷新
-        const reLoadData = async () => {
-            getListByPage();
-        };
-
-        // 填写表单
-        const toApply = () => {
-            router.push({
-                path: 'zysq'
-            });
-        };
-
-        const handleClick = (tab: TabsPaneContext, event: Event) => {
-        };
-
-        // 获取部门列表
-        const getAllDepartment = async () => {
-            let res = await teamManageApi().getAllDepartment();
-            if (res.data.code === '200') {
-                state.departmentList = JSON.parse(JSON.stringify(res.data.data))
-                recursion(state.departmentList);
-            } else {
-                ElMessage({
-                    type: 'warning',
-                    message: res.data.msg
-                });
-            }
-        };
-
-        const recursion = (value: any) => {
-            for (let i of value) {
-                if (i.children.length !== 0) {
-                    state.departmentRecursionList.push(i);
-                    recursion(i.children);
-                } else {
-                    state.departmentRecursionList.push(i);
-                }
-            }
-        };
-
-        // 分页获取
-        const getListByPage = async () => {
-            const data = { pageSize: state.pageSize1, pageIndex: state.pageIndex1, searchParams: { workType: state.searchWord } };
-            let res = await workApplyApi().getApplyListPage(data);
-            if (res.data.code === '200') {
-                state.applyData = JSON.parse(JSON.stringify(res.data.data));
-                console.log(state.applyData,'applyData')
-                state.applyData = state.applyData.map((item) => {
-                    if (item.operators == null || item.operators == []) {
-                        item.operators = [];
-                    } else {
-                        item.operators = Array.from(item.operators, ({ operatorUname }) => operatorUname);
-                    }
-                    return item;
-                });
-                state.totalSize1 = res.data.total;
-            } else {
-                ElMessage({
-                    type: 'warning',
-                    message: res.data.msg
-                });
-            }
-        };
-
-        // 表格数据格式化
-        const toNames = (row, column, cellValue, index) => {
-            if (row.list == []) {
-                return [];
-            } else {
-                const nameList = [];
-                for (let i = 0; i < row.list.length; i++) {
-                    for (let t = 0; t < state.workTimeList.length; t++) {
-                        if (row.list[i] == state.workTimeList[t].id) {
-                            nameList.push(state.workTimeList[t].name);
-                        }
-                    }
-                }
-                return nameList.join();
-            }
-        };
-
-        // 关键词查询记录
-        const searchRecord = async () => {
-            if (state.searchWord == '') {
-                ElMessage({
-                    type: 'warning',
-                    message: '请输入查询关键词'
-                });
-            } else {
-                getListByPage();
-            }
-        };
-        // 重置搜索
-        const clearSearch = async () => {
-            state.searchWord = '';
-            getListByPage();
-        };
-
-        // 查看进度
-        const viewStatus = (row) => {
-            getStatus({ workApplyId: row.workApplyId });
-            state.dialogStatus = true;
-        };
-
-        // 查询进度方法
-        const getStatus = async (data: any) => {
-            let res = await workApplyApi().getStatus(data);
-            if (res.data.code === '200') {
-                state.approveInfo = JSON.parse(JSON.stringify(res.data.data));
-                state.approveInfo.operators = Array.from(state.approveInfo.operators, ({ operatorUname }) => operatorUname);
-            } else {
-                ElMessage({
-                    type: 'warning',
-                    message: res.data.msg
-                });
-            }
-        };
-
-        const deleteRecordBtn = (row) => {
-            state.deleteId = row.workApplyId;
-            state.deleteDialog = true;
-        };
-
-        // 取消申请方法
-        const deleteRecord = async (data: any) => {
-            let res = await workApplyApi().cancelApply(data);
-            if (res.data.code === '200') {
-                ElMessage({
-                    type: 'success',
-                    message: '删除成功!'
-                });
-                getListByPage();
-            } else {
-                ElMessage({
-                    type: 'warning',
-                    message: res.data.msg
-                });
-            }
-        };
-
-        const conFirmDelete = () => {
-            deleteRecord({ workApplyId: state.deleteId });
-            state.deleteDialog = false;
-        };
-
-        // 导出图表
-        const downLoadBtn = (row:any) =>{
-            state.downLoadId = row.workApplyId;
-            state.downLoadName = row.workTypeDesc + row.workPermitNo
-            state.downLoadDialog = true;
-        }
-
-        // 导出方法
-        const downLoadRecord = async (data: any) => {
-            // let res = await workApplyApi().postPrinting(data);
-            axios.post(import.meta.env.VITE_API_URL + `/work/apply/printingPdf`,data,{headers:{'Content-Type': 'application/json','Authorization': `${Cookies.get('token')}`,'uid':`${Cookies.get('uid')}`},responseType: 'blob'}).then(res=>{
-                if (res) {
-                    const link = document.createElement('a')
-                    let blob = new Blob([res.data],{type: 'application/pdf'})
-                    link.style.display = "none";
-                    link.href = URL.createObjectURL(blob); // 创建URL
-                    link.setAttribute("download", state.downLoadName + "作业证.pdf");
-                    document.body.appendChild(link);
-                    link.click();
-                    document.body.removeChild(link);
-                } else {
-                    ElMessage({
-                        type: 'warning',
-                        message: res.data.msg
-                    });
-                }
-            })
-
-        };
-
-        const conFirmDownLoad = () => {
-            downLoadRecord({ applyWorkId: state.downLoadId });
-            state.downLoadDialog = false;
-        };
-
-        const handleSizeChange1 = (val: number) => {
-            state.pageSize1 = val;
-            getListByPage();
-        };
-        const handleCurrentChange1 = (val: number) => {
-            state.pageIndex1 = val;
-            getListByPage();
-        };
-
-        // 查看记录
-        const viewRecord = (row: any) => {
-            state.dialogType = row.workType
-            state.details = JSON.parse(JSON.stringify(row));
-            if(state.details.workDetail.otherSpecialWork == '' || !state.details.workDetail.otherSpecialWork){
-                state.details.workDetail.otherSpecialWork=[]
-            }
-            else {
-                const a = state.details.workDetail.otherSpecialWork
-                state.details.workDetail.otherSpecialWork = a.split(',').map((item) => {
-                    return state.workType.find((i: { id: number }) => i.id === Number(item))?.name;
-                });
-            }
-            if(state.details.workDetail.involvedDepIds == '' || !state.details.workDetail.involvedDepIds){
-                state.details.workDetail.involvedDepIds=[]
-            }
-            else {
-                const a = state.details.workDetail.involvedDepIds
-                state.details.workDetail.involvedDepIds = a.split(',').map((item) => {
-                    return state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(item))?.depName;
-                });
-            }
-            if(state.details.workDetail.csDepId){
-                state.details.workDetail.csDepId = state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(state.details.workDetail.csDepId))?.depName;
-            }
-            if(state.details.workDetail.operationDepId){
-                state.details.workDetail.operationDepId = state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(state.details.workDetail.operationDepId))?.depName;
-            }
-            if(state.details.workDetail.gbPath){
-                state.details.workDetail.gbPath = state.details.workDetail.gbPath.split(',')
-            }
-            if(state.details.workDetail.bcPath){
-                state.details.workDetail.bcPath = state.details.workDetail.bcPath.split(',')
-            }
-            if(state.details.workDetail.bpLocationMapPath){
-                state.details.workDetail.bpLocationMapPath = state.details.workDetail.bpLocationMapPath.split(',')
-            }
-            state.dialogDetails = true;
-        };
-
-        // 折线图
-        const renderMenu = async (value: string) => {
-            Session.set('projectId', value);
-            userInfos.value.projectId = value;
-            await initBackEndControlRoutes();
-        };
-
-        // 页面载入时执行方法
-        onMounted(() => {
-            getListByPage();
-            getAllDepartment()
-        });
-
-        return {
-            View,
-            Edit,
-            Delete,
-            Refresh,
-            Plus,
-            Finished,
-            Download,
-            reLoadData,
-            toApply,
-            handleClick,
-            toNames,
-            searchRecord,
-            clearSearch,
-            viewRecord,
-            viewStatus,
-            deleteRecordBtn,
-            downLoadBtn,
-            conFirmDelete,
-            conFirmDownLoad,
-            getListByPage,
-            handleSizeChange1,
-            handleCurrentChange1,
-            ...toRefs(state)
-        };
-    }
-});
-</script>
-
-<style scoped lang="scss">
-$homeNavLengh: 8;
-.home-container {
-    height: calc(100vh - 144px);
-    box-sizing: border-box;
-    overflow: hidden;
-    .demo-tabs {
-        width: 100%;
-        height: 100%;
-
-        &::v-deep(.el-tabs__content) {
-            height: calc(100% - 60px);
-        }
-
-        .el-tab-pane {
-            height: 100%;
-        }
-    }
-    .homeCard {
-        width: 100%;
-        padding: 20px;
-        box-sizing: border-box;
-        background: #fff;
-        border-radius: 4px;
-
-        .main-card {
-            width: 100%;
-            height: 100%;
-            .cardTop {
-                display: flex;
-                align-items: center;
-                justify-content: space-between;
-                margin-bottom: 20px;
-                .mainCardBtn {
-                    margin: 0;
-                }
-            }
-            .pageBtn {
-                height: 60px;
-                display: flex;
-                align-items: center;
-                justify-content: right;
-
-                .demo-pagination-block + .demo-pagination-block {
-                    margin-top: 10px;
-                }
-                .demo-pagination-block .demonstration {
-                    margin-bottom: 16px;
-                }
-            }
-        }
-        &:last-of-type {
-            height: calc(100% - 100px);
-        }
-    }
-    .stepItem {
-        display: flex;
-        align-items: flex-start;
-        margin-top: 30px;
-        margin-left: 30px;
-        padding-bottom: 30px;
-        padding-left: 40px;
-        border-left: 1px solid #a0cfff;
-        position: relative;
-        &:first-of-type {
-            margin-top: 30px;
-        }
-        &:first-of-type {
-            margin-bottom: 0;
-            border-left: none;
-        }
-        .stepNum {
-            position: absolute;
-            width: 40px;
-            height: 40px;
-            border-radius: 20px;
-            box-sizing: border-box;
-            font-size: 18px;
-            color: #333;
-            border: 1px solid #a0cfff;
-            line-height: 38px;
-            text-align: center;
-            left: -20px;
-            top: -30px;
-            background: #d9ecff;
-        }
-        .stepCard {
-            width: 100%;
-            margin-top: -30px;
-
-            .box-card {
-                width: 100%;
-
-                .card-header {
-                    display: flex;
-                    justify-content: space-between;
-                    align-items: center;
-
-                    span {
-                        font-weight: bold;
-                        margin-left: 10px;
-                    }
-                }
-
-                .text {
-                    width: 100%;
-                    font-size: 14px;
-                    margin-bottom: 10px;
-                    padding-left: 10px;
-
-                    span {
-                        color: #409eff;
-                    }
-
-                    .bold-text{
-                        font-weight: bolder;
-                    }
-
-                    &:last-of-type {
-                        margin-bottom: 0;
-                    }
-                }
-                .approveUnit {
-                    width: 100%;
-                    font-size: 14px;
-                    margin-bottom: 20px;
-                    padding: 10px 15px;
-                    border: 1px solid #fff;
-                    background: #ecf8ff;
-                    border-radius: 6px;
-                    .item-tit {
-                        width: 100%;
-                        display: flex;
-                        color: #409eff;
-                        align-items: flex-start;
-                        justify-content: space-between;
-                        padding-bottom: 10px;
-                        border-bottom: 1px solid #a0cfff;
-
-                        & > span {
-                            flex: 1;
-                            &:last-of-type{
-                                text-align: center;
-                            }
-                        }
-                        & > div {
-                            flex: 1;
-                            text-align: center;
-                        }
-                    }
-                    .item-cont {
-                        width: 100%;
-                        display: flex;
-                        align-items: center;
-                        justify-content: space-between;
-                        padding: 10px 0;
-                        border-bottom: 1px solid #c6e2ff;
-
-                        & > span {
-                            flex: 1;
-                            &:last-of-type{
-                                text-align: center;
-                            }
-                        }
-                        & > div {
-                            flex: 1;
-                            text-align: center;
-
-                            & > div {
-                                text-align: left;
-                                width: 100%;
-                                display: flex;
-                                justify-content: center;
-                                align-items: center;
-                                span {
-                                    width: 45%;
-                                    &:first-of-type {
-                                        width: 30%;
-                                    }
-                                }
-                            }
-                        }
-                        &:last-of-type {
-                            border-bottom: 0;
-                        }
-                    }
-                }
-                .approveItem {
-                    width: 100%;
-                    font-size: 14px;
-                    margin-bottom: 20px;
-                    padding: 10px 15px;
-                    background: #ecf8ff;
-                    border: 1px solid #fff;
-                    border-radius: 6px;
-                    .item-tit {
-                        width: 100%;
-                        display: flex;
-                        color: #409eff;
-                        align-items: flex-start;
-                        justify-content: space-between;
-                        padding-bottom: 10px;
-                        border-bottom: 1px solid #a0cfff;
-
-                        & > span {
-                            flex: 1;
-                        }
-                        & > div {
-                            flex: 2;
-                            text-align: center;
-                        }
-                    }
-                    .item-cont {
-                        width: 100%;
-                        display: flex;
-                        align-items: center;
-                        justify-content: space-between;
-                        padding: 10px 0;
-                        border-bottom: 1px solid #c6e2ff;
-
-                        & > span {
-                            flex: 1;
-                        }
-                        & > div {
-                            flex: 2;
-                            text-align: center;
-
-                            & > div {
-                                text-align: left;
-                                width: 100%;
-                                display: flex;
-                                justify-content: center;
-                                align-items: flex-start;
-                                margin-bottom: 10px;
-                                span {
-                                    width: 50%;
-                                    &:first-of-type {
-                                        width: 25%;
-                                    }
-                                }
-                            }
-                        }
-                        &:last-of-type {
-                            border-bottom: 0;
-                        }
-                    }
-                }
-            }
-        }
-        &:hover .card-header {
-            color: #0098f5;
-        }
-        &:hover .stepNum {
-            border: 2px solid #0098f5;
-            color: #0098f5;
-        }
-    }
-    .el-row {
-        display: flex;
-        align-items: center;
-        margin-bottom: 20px;
-        &:last-child {
-            margin-bottom: 0;
-        }
-        .grid-content {
-            align-items: center;
-            min-height: 36px;
-        }
-
-        .topInfo {
-            display: flex;
-            align-items: center;
-            font-size: 16px;
-            font-weight: bold;
-
-            & > div {
-                white-space: nowrap;
-                margin-right: 20px;
-            }
-        }
-    }
-    .el-card {
-        border: 0;
-    }
-}
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/wdsqjl/index.vue b/src/views/specialWorkSystem/workTicket/wdsqjl/index.vue
deleted file mode 100644
index e38b1c2..0000000
--- a/src/views/specialWorkSystem/workTicket/wdsqjl/index.vue
+++ /dev/null
@@ -1,904 +0,0 @@
-<template>
-    <div class="home-container">
-<!--        <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">-->
-<!--            <el-tab-pane label="申请中" name="1">-->
-                <div style="height: 100%">
-                    <el-row class="homeCard">
-                        <el-col :span="5" style="display:flex;align-items: center">
-                            <span style="white-space: nowrap">作业类型:</span>
-                            <div class="grid-content topInfo">
-                                <el-select v-model="searchWord">
-                                    <el-option
-                                            v-for="item in workType"
-                                            :key="item.id"
-                                            :label="item.name"
-                                            :value="item.id"
-                                    />
-                                </el-select>
-                            </div>
-                        </el-col>
-                        <el-col :span="5" style="display:flex;align-items: center">
-                            <span style="white-space: nowrap">申请部门:</span>
-                            <div class="grid-content topInfo">
-                                <el-cascader v-model="searchDep" :options="departmentList" :props="casProps" :show-all-levels="false"/>
-                            </div>
-                        </el-col>
-                        <el-col :span="8" style="display:flex;align-items: center;">
-                            <span style="white-space: nowrap;margin-left: 20px">申请时间:</span>
-                            <div class="grid-content topInfo">
-                                <el-date-picker
-                                        v-model="searchDate"
-                                        type="daterange"
-                                        unlink-panels
-                                        range-separator="至"
-                                        start-placeholder="开始日期"
-                                        end-placeholder="结束日期"
-                                        format="YYYY-MM-DD" value-format="YYYY-MM-DD HH:mm:ss"
-                                />
-                            </div>
-                        </el-col>
-                        <el-button type="primary" style="margin-left: 20px" @click="searchRecord">查询</el-button>
-                        <el-button plain @click="clearSearch">重置</el-button>
-                    </el-row>
-                    <div class="homeCard">
-                        <div class="main-card">
-                            <el-row class="cardTop">
-                                <el-col :span="12" class="mainCardBtn">
-                                    <el-button type="primary" :icon="Plus" size="default" @click="toApply()">申请</el-button>
-                                    <!--									<el-button type="danger" :icon="Delete" size="default">删除</el-button>-->
-                                    <!--									<el-button type="success" size="default">设置分类</el-button>-->
-                                </el-col>
-                                <el-button type="primary" :icon="Refresh" size="default" @click="reLoadData()" />
-                            </el-row>
-                            <el-table ref="multipleTableRef" :data="applyData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }">
-                                <el-table-column property="workPermitNo" label="作业申请单号" width="180" align="center"/>
-                                <el-table-column property="applyUname" label="申请人" align="center"/>
-                                <el-table-column property="depName" label="部门名称" align="center"/>
-                                <el-table-column property="operators" label="作业人" align="center"/>
-                                <el-table-column property="workTypeDesc" label="作业类型" align="center"/>
-                                <el-table-column property="workLevelDesc" label="作业等级" align="center"/>
-                                <el-table-column property="materialStatus" label="物资状态" align="center" width="180">
-                                  <template #default="scope">
-                                    <span>{{ scope.row.materialStatus==0?'未关联物资':(scope.row.materialStatus==1?'必选物资配备不足':(scope.row.materialStatus==2?'必选物资配备齐全':(scope.row.materialStatus==3?'物资配置专业':(scope.row.materialStatus==4?'物资配置高端':'-')))) }}</span>
-                                  </template>
-                                </el-table-column>
-                                <el-table-column property="applyTime" label="申请时间" width="180" align="center"/>
-                                <el-table-column label="申请状态" align="center" width="140">
-                                    <template #default="scope">
-                                        <el-tag :type="scope.row.status==2?'success':(scope.row.status==8||scope.row.status==9)?'warning':'danger'">{{ scope.row.statusDesc }}</el-tag>
-                                    </template>
-                                </el-table-column>
-                                <el-table-column label="作业状态" align="center">
-                                  <template #default="scope">
-                                    <el-tag :type="scope.row.working == null? 'danger':scope.row.working.workStatus==2?'success':scope.row.working.workStatus==1?'warning':'danger'">{{ scope.row.working==null?'未开始':scope.row.working.workStatus == 1?'开始': scope.row.working.workStatus == 2?'结束':'未开始'}}</el-tag>
-                                  </template>
-                                </el-table-column>
-                                <el-table-column label="验收状态" align="center">
-                                  <template #default="scope">
-                                    <el-tag :type="scope.row.working == null? 'danger':scope.row.working.workAcceptStatus==2?'success':scope.row.working.workAcceptStatus== 1?'warning':'danger'">{{ scope.row.working==null?'未开始':scope.row.working.workAcceptStatus == 1?'等待验收': scope.row.working.workAcceptStatus == 2? '已验收':'未开始'}}</el-tag>
-                                  </template>
-                                </el-table-column>
-                                <el-table-column fixed="right" label="操作" align="center" width="250">
-                                    <template #default="scope">
-                                        <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button>
-                                        <el-button link type="success" size="small" :icon="Finished" @click="viewStatus(scope.row)">进度</el-button>
-                                        <el-button :disabled="scope.row.working && scope.row.working.workAcceptStatus == 2 ? false : true" link type="primary" size="small" :icon="Download" @click="downLoadBtn(scope.row)">导出作业票</el-button>
-                                    </template>
-                                </el-table-column>
-                            </el-table>
-                            <div class="pageBtn">
-                                <el-pagination v-model:currentPage="pageIndex1" v-model:page-size="pageSize1" :page-sizes="[10, 15]" small="false" background layout="total, sizes, prev, pager, next, jumper" :total="totalSize1" @size-change="handleSizeChange1" @current-change="handleCurrentChange1" />
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <el-dialog v-model="dialogDetails" title="作业申请详情" center>
-                    <fire v-if="dialogType == 1" :details = details></fire>
-                    <space v-else-if="dialogType == 2" :details = details></space>
-                    <hoist v-else-if="dialogType == 3" :details = details></hoist>
-                    <ground v-else-if="dialogType == 4" :details = details></ground>
-                    <broken v-else-if="dialogType == 5" :details = details></broken>
-                    <height v-else-if="dialogType == 6" :details = details></height>
-                    <power v-else-if="dialogType == 7" :details = details></power>
-                    <plate v-else :details = details></plate>
-                    <template #footer>
-                      <span class="dialog-footer">
-                        <el-button type="primary" @click="dialogDetails = false"
-                        >确认</el-button
-                        >
-                      </span>
-                    </template>
-                </el-dialog>
-                <el-dialog v-model="dialogStatus" title="作业申请进度" width="60%">
-                    <el-form v-if="approveInfo.operators.length > 0" style="margin-bottom: 40px">
-                        <el-form-item label="申请作业人">
-                            <el-input v-model="approveInfo.operators" readonly type="textarea" />
-                        </el-form-item>
-                    </el-form>
-                    <div style="display: flex; flex-direction: column-reverse">
-                        <div v-for="(item, index) in approveInfo.approvalSteps" class="stepItem">
-                            <div class="stepNum">{{ item.stepSerial }}</div>
-                            <div class="stepCard">
-                                <el-card class="box-card" shadow="always">
-                                    <div class="text">
-                                        审批结果:<span>{{ item.approvalResultDesc }}</span>
-                                    </div>
-                                    <div class="text" v-if="item.approvalTypeDesc">
-                                        层级类型:<span>{{ item.approvalTypeDesc }}</span>
-                                    </div>
-                                    <div class="text" v-if="item.auditTypeDesc">
-                                        审批类型:<span>{{ item.auditTypeDesc }}</span>
-                                    </div>
-                                    <div class="text" v-if="item.personTypeDesc">
-                                        人员类型:<span>{{ item.personTypeDesc }}</span>
-                                    </div>
-                                    <div class="text" v-if="item.contentTypeDesc">
-                                        内容类型:<span>{{ item.contentTypeDesc }}</span>
-                                    </div>
-                                    <div class="text" v-show="item.startApprovalTime != null">
-                                        开始时间:<span>{{ item.startApprovalTime }}</span>
-                                    </div>
-                                    <div class="approveUnit">
-                                        <div class="item-tit"><span>审批人</span><span>审批状态</span></div>
-                                        <div class="item-cont" v-for="i in item.stepUnits">
-                                            <span>{{ i.approvalUname }}</span
-                                            ><span>{{ i.resultDesc }}</span>
-                                        </div>
-                                    </div>
-                                    <div class="approveItem" v-if="item.contentType==1">
-                                        <div class="item-tit">
-                                            <span>审批项目</span>
-<!--                                            <span>类型</span>-->
-                                            <div>措施标准</div>
-                                        </div>
-                                        <div class="item-cont" v-for="i in item.stepItems">
-                                            <span>{{ i.itemName }}</span>
-<!--                                            <span>{{ i.typeDesc }}</span>-->
-                                            <div v-if="i.measure !== null">
-                                                <div>
-                                                    <span>作业类型:</span><span>{{ i.measure.workTypeDesc }}</span>
-                                                </div>
-                                                <div>
-                                                    <span>措施内容:</span><span>{{ i.measure.context }}</span>
-                                                </div>
-                                            </div>
-                                            <div v-if="i.stand !== null">
-                                                <div>
-                                                    <span>标题名称:</span><span>{{ i.stand.title }}</span>
-                                                </div>
-                                                <div>
-                                                    <span>标准内容:</span><span>{{ i.stand.typeDesc }}</span>
-                                                </div>
-                                            </div>
-                                        </div>
-                                    </div>
-                                    <div class="text" v-show="item.expFinishApprovalTime != null">
-                                        期望结束时间:<span>{{ item.expFinishApprovalTime }}</span>
-                                    </div>
-                                    <div class="text" v-show="item.finishApprovalTime != null">
-                                        结束时间:<span>{{ item.finishApprovalTime }}</span>
-                                    </div>
-                                </el-card>
-                            </div>
-                        </div>
-                    </div>
-                </el-dialog>
-                <el-dialog v-model="downLoadDialog" title="提示" width="30%" center>
-                    <span>您确定要导出该条记录吗?</span>
-                    <template #footer>
-                                <span class="dialog-footer">
-                                    <el-button @click="downLoadDialog = false" size="default">取消</el-button>
-                                    <el-button type="primary" @click="conFirmDownLoad" size="default">确认</el-button>
-                                </span>
-                    </template>
-                </el-dialog>
-<!--            </el-tab-pane>-->
-<!--            <el-tab-pane label="已通过" name="2">-->
-<!--                <div style="height: 100%">-->
-<!--                    <el-row class="homeCard">-->
-<!--                        <el-col :span="8">-->
-<!--                            <div class="grid-content topInfo">-->
-<!--                                <el-input v-model="searchWord" placeholder="作业证名称"></el-input>-->
-<!--                                <el-button type="primary">查询</el-button>-->
-<!--                                <el-button plain>重置</el-button>-->
-<!--                            </div>-->
-<!--                        </el-col>-->
-<!--                    </el-row>-->
-<!--                    <div class="homeCard">-->
-<!--                        <div class="main-card">-->
-<!--                            <el-table ref="multipleTableRef" :data="passedData" style="width: 100%" height="calc(100% - 48px)" :header-cell-style="{ background: '#fafafa' }" @selection-change="handleSelectionChange">-->
-<!--                                <el-table-column type="selection" width="55" />-->
-<!--                                <el-table-column type="index" label="编号" width="200" />-->
-<!--                                <el-table-column property="level" label="作业证等级" width="180" sortable />-->
-<!--                                <el-table-column property="applyDate" label="申请日期" sortable />-->
-<!--                                <el-table-column property="name" label="申请人" width="180" />-->
-<!--                                <el-table-column property="department" label="申请部门" width="180" />-->
-<!--                                <el-table-column label="申请状态" width="180">-->
-<!--                                    <template #default="scope">-->
-<!--                                        <el-tag type="success">{{ scope.row.status }}</el-tag>-->
-<!--                                    </template>-->
-<!--                                </el-table-column>-->
-<!--                            </el-table>-->
-<!--                            <div class="pageBtn">-->
-<!--                                <el-pagination v-model:currentPage="pageIndex2" v-model:page-size="pageSize2" :page-sizes="[10, 15]" small="false" background layout="total, sizes, prev, pager, next, jumper" :total="totalSize2" @size-change="handleSizeChange2" @current-change="handleCurrentChange2" />-->
-<!--                            </div>-->
-<!--                        </div>-->
-<!--                    </div>-->
-<!--                </div>-->
-<!--            </el-tab-pane>-->
-<!--        </el-tabs>-->
-    </div>
-</template>
-
-<script lang="ts">
-import {toRefs, reactive, defineComponent, ref, onMounted, defineAsyncComponent} from 'vue';
-import { storeToRefs } from 'pinia';
-import { initBackEndControlRoutes } from '/@/router/backEnd';
-import { useUserInfo } from '/@/stores/userInfo';
-import { Session } from '/@/utils/storage';
-import { useRouter } from 'vue-router';
-import { Edit, View, Plus, Delete, Refresh, Search, Finished, Download } from '@element-plus/icons-vue';
-import { ElTable } from 'element-plus';
-import { FormInstance, FormRules, ElMessage } from 'element-plus';
-import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-import type { TabsPaneContext } from 'element-plus';
-import {teamManageApi} from "/@/api/systemManage/basicDateManage/personShiftManage/teamManage";
-import Cookies from 'js-cookie';
-import axios from 'axios';
-
-// 定义接口来定义对象的类型
-interface stateType {
-    applyData: Array<string>;
-    workTimeList: Array<string>;
-    multipleSelection: Array<any>;
-    deleteArr: Array<any>;
-    casProps: {};
-    approveInfo: Object;
-    dialogDetails: boolean;
-    dialogStatus: boolean;
-    deleteDialog: boolean;
-    downLoadDialog: boolean;
-    pageIndex1: number;
-    pageSize1: number;
-    chosenIndex: null | number;
-    deleteId: null | number;
-    downLoadId: null | number;
-    downLoadName: string;
-    searchWord: number | null;
-    searchDep: number | null;
-    searchDate: Array<any>,
-    totalSize1: number;
-    activeName: string;
-    addRecord: {};
-    details: {};
-    statusInfo: {};
-    workType: Array<type>;
-    dialogType: number | null;
-    departmentList: Array<any>;
-    departmentRecursionList: Array<DepartmentState>;
-}
-interface type {
-    id: number;
-    name: string;
-}
-interface DepartmentState {
-    depId: number;
-    depName: string;
-}
-export default defineComponent({
-    name: 'myApply',
-    components: {
-        fire: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/fireLog.vue')),
-        space: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/spaceLog.vue')),
-        hoist: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/hoistLog.vue')),
-        ground: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/groundLog.vue')),
-        broken: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/brokenLog.vue')),
-        height: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/heightLog.vue')),
-        power: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/powerLog.vue')),
-        plate: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/plateLog.vue'))
-    },
-    setup() {
-        const userInfo = useUserInfo();
-        const { userInfos } = storeToRefs(userInfo);
-        const router = useRouter();
-        const state = reactive<stateType>({
-            pageIndex1: 1,
-            pageSize1: 10,
-            totalSize1: 0,
-            dialogType: null,
-            activeName: '1',
-            departmentList: [],
-            departmentRecursionList: [],
-            chosenIndex: null,
-            searchWord: null,
-            searchDep: null,
-            searchDate: [],
-            applyData: [],
-            workTimeList: [],
-            multipleSelection: [],
-            approveInfo: {
-                approvalSteps: [],
-                operators: []
-            },
-            casProps: {
-                expandTrigger: 'hover',
-                emitPath: false,
-                value: 'depId',
-                label: 'depName',
-                checkStrictly: true
-            },
-            dialogDetails: false,
-            dialogStatus: false,
-            deleteDialog: false,
-            downLoadDialog: false,
-            addRecord: {},
-            details: {},
-            statusInfo: {},
-            deleteId: null,
-            downLoadId: null,
-            downLoadName: '',
-            deleteArr: [],
-            workType: [
-                { id: 1, name: '动火作业' },
-                { id: 2, name: '受限空间作业' },
-                { id: 3, name: '吊装作业' },
-                { id: 4, name: '动土作业' },
-                { id: 5, name: '断路作业' },
-                { id: 6, name: '高处作业' },
-                { id: 7, name: '临时用电作业' },
-                { id: 8, name: '盲板抽堵作业' }
-            ]
-        });
-        interface User {
-            name: string;
-            list: [];
-            info: string;
-        }
-
-        // 刷新
-        const reLoadData = async () => {
-            getListByPage();
-        };
-
-        // 填写表单
-        const toApply = () => {
-            router.push({
-                path: 'zysq'
-            });
-        };
-
-        const handleClick = (tab: TabsPaneContext, event: Event) => {
-        };
-
-        // 获取部门列表
-        const getAllDepartment = async () => {
-            let res = await teamManageApi().getAllDepartment();
-            if (res.data.code === '200') {
-                state.departmentList = JSON.parse(JSON.stringify(res.data.data))
-                // recursion(state.departmentList);
-            } else {
-                ElMessage({
-                    type: 'warning',
-                    message: res.data.msg
-                });
-            }
-        };
-
-        // const recursion = (value: any) => {
-        //     for (let i of value) {
-        //         if (i.children.length !== 0) {
-        //             state.departmentRecursionList.push(i);
-        //             recursion(i.children);
-        //         } else {
-        //             state.departmentRecursionList.push(i);
-        //         }
-        //     }
-        // };
-
-        // 分页获取列表
-        const getListByPage = async () => {
-            const dateRange = JSON.parse(JSON.stringify(state.searchDate))
-            if(dateRange[1]){dateRange[1] = dateRange[1].replace('00:00:00','23:59:59')}
-            const data = { pageSize: state.pageSize1, pageIndex: state.pageIndex1, searchParams: { workType: state.searchWord, applyDepId: state.searchDep,applyStartTime: dateRange[0],applyEndTime: dateRange[1]} };
-            let res = await workApplyApi().getApplyList(data);
-            if (res.data.code === '200') {
-                state.applyData = JSON.parse(JSON.stringify(res.data.data));
-                state.applyData = state.applyData.map((item) => {
-                    if (item.operators == null || item.operators == []) {
-                        item.operators = [];
-                    } else {
-                        item.operators = Array.from(item.operators, ({ operatorUname }) => operatorUname);
-                    }
-                    return item;
-                });
-                state.totalSize1 = res.data.total;
-            } else {
-                ElMessage({
-                    type: 'warning',
-                    message: res.data.msg
-                });
-            }
-        };
-
-        // 表格数据格式化
-        const toNames = (row, column, cellValue, index) => {
-            if (row.list == []) {
-                return [];
-            } else {
-                const nameList = [];
-                for (let i = 0; i < row.list.length; i++) {
-                    for (let t = 0; t < state.workTimeList.length; t++) {
-                        if (row.list[i] == state.workTimeList[t].id) {
-                            nameList.push(state.workTimeList[t].name);
-                        }
-                    }
-                }
-                return nameList.join();
-            }
-        };
-
-        // 关键词查询记录
-        const searchRecord = async () => {
-            if (state.searchWord == null && state.searchDep == null && state.searchDate == []) {
-                ElMessage({
-                    type: 'warning',
-                    message: '请输入查询关键词'
-                });
-            } else {
-                getListByPage();
-            }
-        };
-        // 重置搜索
-        const clearSearch = async () => {
-            state.searchWord = null;
-            state.searchDep = null;
-            state.searchDate = []
-            getListByPage();
-        };
-
-        // 查看进度
-        const viewStatus = (row) => {
-            getStatus({ workApplyId: row.workApplyId });
-        };
-
-        // 查询进度方法
-        const getStatus = async (data: any) => {
-            let res = await workApplyApi().getAllStatus(data);
-            if (res.data.code === '200') {
-                state.approveInfo = JSON.parse(JSON.stringify(res.data.data));
-                state.approveInfo.operators = Array.from(state.approveInfo.operators, ({ operatorUname }) => operatorUname);
-                state.dialogStatus = true;
-            } else {
-                ElMessage({
-                    type: 'warning',
-                    message: res.data.msg
-                });
-            }
-        };
-
-        const deleteRecordBtn = (row) => {
-            state.deleteId = row.workApplyId;
-            state.deleteDialog = true;
-        };
-
-        // 导出图表
-        const downLoadBtn = (row:any) =>{
-            state.downLoadId = row.workApplyId;
-            state.downLoadName = row.workTypeDesc + row.workPermitNo
-            state.downLoadDialog = true;
-        }
-
-        // 导出方法
-        const downLoadRecord = async (data: any) => {
-            // let res = await workApplyApi().postPrinting(data);
-            axios.post(import.meta.env.VITE_API_URL + `/work/apply/printingPdf`,data,{headers:{'Content-Type': 'application/json','Authorization': `${Cookies.get('token')}`,'uid':`${Cookies.get('uid')}`},responseType: 'blob'}).then(res=>{
-                if (res) {
-                    const link = document.createElement('a')
-                    let blob = new Blob([res.data],{type: 'application/pdf'})
-                    link.style.display = "none";
-                    link.href = URL.createObjectURL(blob); // 创建URL
-                    link.setAttribute("download", state.downLoadName + "作业证.pdf");
-                    document.body.appendChild(link);
-                    link.click();
-                    document.body.removeChild(link);
-                } else {
-                    ElMessage({
-                        type: 'warning',
-                        message: '导出失败'
-                    });
-                }
-            })
-
-        };
-
-        const conFirmDownLoad = () => {
-            downLoadRecord({ applyWorkId: state.downLoadId });
-            state.downLoadDialog = false;
-        };
-
-        const handleSizeChange1 = (val: number) => {
-            state.pageSize1 = val;
-            getListByPage();
-        };
-        const handleCurrentChange1 = (val: number) => {
-            state.pageIndex1 = val;
-            getListByPage();
-        };
-
-        // 查看记录
-        const viewRecord = (row: any) => {
-            state.dialogType = row.workType
-            state.details = JSON.parse(JSON.stringify(row));
-            if(state.details.workDetail.otherSpecialWork == '' || !state.details.workDetail.otherSpecialWork){
-                state.details.workDetail.otherSpecialWork=[]
-            }
-            else {
-                const a = state.details.workDetail.otherSpecialWork
-                state.details.workDetail.otherSpecialWork = a.split(',').map((item) => {
-                    return state.workType.find((i: { id: number }) => i.id === Number(item))?.name;
-                });
-            }
-            if(state.details.workDetail.involvedDepIds == '' || !state.details.workDetail.involvedDepIds){
-                state.details.workDetail.involvedDepIds=[]
-            }
-            else {
-                const a = state.details.workDetail.involvedDepIds
-                state.details.workDetail.involvedDepIds = a.split(',').map((item) => {
-                    return state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(item))?.depName;
-                });
-            }
-            if(state.details.workDetail.csDepId){
-                state.details.workDetail.csDepId = state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(state.details.workDetail.csDepId))?.depName;
-            }
-            if(state.details.workDetail.operationDepId){
-                state.details.workDetail.operationDepId = state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(state.details.workDetail.operationDepId))?.depName;
-            }
-            if(state.details.workDetail.gbPath){
-                state.details.workDetail.gbPath = state.details.workDetail.gbPath.split(',')
-            }
-            if(state.details.workDetail.bcPath){
-                state.details.workDetail.bcPath = state.details.workDetail.bcPath.split(',')
-            }
-            if(state.details.workDetail.bpLocationMapPath){
-                state.details.workDetail.bpLocationMapPath = state.details.workDetail.bpLocationMapPath.split(',')
-            }
-            state.dialogDetails = true;
-        };
-
-        // 折线图
-        const renderMenu = async (value: string) => {
-            Session.set('projectId', value);
-            userInfos.value.projectId = value;
-            await initBackEndControlRoutes();
-        };
-
-        // 页面载入时执行方法
-        onMounted(() => {
-            getListByPage();
-            getAllDepartment()
-        });
-
-        return {
-            View,
-            Edit,
-            Delete,
-            Refresh,
-            Plus,
-            Finished,
-            Download,
-            reLoadData,
-            toApply,
-            handleClick,
-            toNames,
-            searchRecord,
-            clearSearch,
-            viewRecord,
-            viewStatus,
-            deleteRecordBtn,
-            downLoadBtn,
-            conFirmDownLoad,
-            getListByPage,
-            handleSizeChange1,
-            handleCurrentChange1,
-            ...toRefs(state)
-        };
-    }
-});
-</script>
-
-<style scoped lang="scss">
-$homeNavLengh: 8;
-.home-container {
-    height: calc(100vh - 144px);
-    box-sizing: border-box;
-    overflow: hidden;
-    .demo-tabs {
-        width: 100%;
-        height: 100%;
-
-        &::v-deep(.el-tabs__content) {
-            height: calc(100% - 60px);
-        }
-
-        .el-tab-pane {
-            height: 100%;
-        }
-    }
-    .homeCard {
-        width: 100%;
-        padding: 20px;
-        box-sizing: border-box;
-        background: #fff;
-        border-radius: 4px;
-
-        .main-card {
-            width: 100%;
-            height: 100%;
-            .cardTop {
-                display: flex;
-                align-items: center;
-                justify-content: space-between;
-                margin-bottom: 20px;
-                .mainCardBtn {
-                    margin: 0;
-                }
-            }
-            .pageBtn {
-                height: 60px;
-                display: flex;
-                align-items: center;
-                justify-content: right;
-
-                .demo-pagination-block + .demo-pagination-block {
-                    margin-top: 10px;
-                }
-                .demo-pagination-block .demonstration {
-                    margin-bottom: 16px;
-                }
-            }
-        }
-        &:last-of-type {
-            height: calc(100% - 100px);
-        }
-    }
-    .stepItem {
-        display: flex;
-        align-items: flex-start;
-        margin-top: 30px;
-        margin-left: 30px;
-        padding-bottom: 30px;
-        padding-left: 40px;
-        border-left: 1px solid #a0cfff;
-        position: relative;
-        &:first-of-type {
-            margin-top: 30px;
-        }
-        &:first-of-type {
-            margin-bottom: 0;
-            border-left: none;
-        }
-        .stepNum {
-            position: absolute;
-            width: 40px;
-            height: 40px;
-            border-radius: 20px;
-            box-sizing: border-box;
-            font-size: 18px;
-            color: #333;
-            border: 1px solid #a0cfff;
-            line-height: 38px;
-            text-align: center;
-            left: -20px;
-            top: -30px;
-            background: #d9ecff;
-        }
-        .stepCard {
-            width: 100%;
-            margin-top: -30px;
-
-            .box-card {
-                width: 100%;
-
-                .card-header {
-                    display: flex;
-                    justify-content: space-between;
-                    align-items: center;
-
-                    span {
-                        font-weight: bold;
-                        margin-left: 10px;
-                    }
-                }
-
-                .text {
-                    width: 100%;
-                    font-size: 14px;
-                    margin-bottom: 10px;
-                    padding-left: 10px;
-
-                    span {
-                        font-weight: bolder;
-                        color: #409eff;
-                    }
-
-                    &:last-of-type {
-                        margin-bottom: 0;
-                    }
-                }
-                .approveUnit {
-                    width: 100%;
-                    font-size: 14px;
-                    margin-bottom: 20px;
-                    padding: 10px 15px;
-                    border: 1px solid #fff;
-                    background: #ecf8ff;
-                    border-radius: 6px;
-                    .item-tit {
-                        width: 100%;
-                        display: flex;
-                        color: #409eff;
-                        align-items: flex-start;
-                        justify-content: space-between;
-                        padding-bottom: 10px;
-                        border-bottom: 1px solid #a0cfff;
-
-                        & > span {
-                            flex: 1;
-                            &:last-of-type{
-                                text-align: center;
-                            }
-                        }
-                        & > div {
-                            flex: 1;
-                            text-align: center;
-                        }
-                    }
-                    .item-cont {
-                        width: 100%;
-                        display: flex;
-                        align-items: center;
-                        justify-content: space-between;
-                        padding: 10px 0;
-                        border-bottom: 1px solid #c6e2ff;
-
-                        & > span {
-                            flex: 1;
-                            &:last-of-type{
-                                text-align: center;
-                            }
-                        }
-                        & > div {
-                            flex: 1;
-                            text-align: center;
-
-                            & > div {
-                                text-align: left;
-                                width: 100%;
-                                display: flex;
-                                justify-content: center;
-                                align-items: center;
-                                span {
-                                    width: 45%;
-                                    &:first-of-type {
-                                        width: 30%;
-                                    }
-                                }
-                            }
-                        }
-                        &:last-of-type {
-                            border-bottom: 0;
-                        }
-                    }
-                }
-                .approveItem {
-                    width: 100%;
-                    font-size: 14px;
-                    margin-bottom: 20px;
-                    padding: 10px 15px;
-                    background: #ecf8ff;
-                    border: 1px solid #fff;
-                    border-radius: 6px;
-                    .item-tit {
-                        width: 100%;
-                        display: flex;
-                        color: #409eff;
-                        align-items: flex-start;
-                        justify-content: space-between;
-                        padding-bottom: 10px;
-                        border-bottom: 1px solid #a0cfff;
-
-                        & > span {
-                            flex: 1;
-                        }
-                        & > div {
-                            flex: 2;
-                            text-align: center;
-                        }
-                    }
-                    .item-cont {
-                        width: 100%;
-                        display: flex;
-                        align-items: center;
-                        justify-content: space-between;
-                        padding: 10px 0;
-                        border-bottom: 1px solid #c6e2ff;
-
-                        & > span {
-                            flex: 1;
-                        }
-                        & > div {
-                            flex: 2;
-                            text-align: center;
-
-                            & > div {
-                                text-align: left;
-                                width: 100%;
-                                display: flex;
-                                justify-content: center;
-                                align-items: flex-start;
-                                margin-bottom: 10px;
-                                span {
-                                    width: 50%;
-                                    &:first-of-type {
-                                        width: 25%;
-                                    }
-                                }
-                            }
-                        }
-                        &:last-of-type {
-                            border-bottom: 0;
-                        }
-                    }
-                }
-            }
-        }
-        &:hover .card-header {
-            color: #0098f5;
-        }
-        &:hover .stepNum {
-            border: 2px solid #0098f5;
-            color: #0098f5;
-        }
-    }
-    .el-row {
-        display: flex;
-        align-items: center;
-        margin-bottom: 20px;
-        &:last-child {
-            margin-bottom: 0;
-        }
-        .grid-content {
-            align-items: center;
-            min-height: 36px;
-        }
-
-        .topInfo {
-            width: 100%;
-            display: flex;
-            align-items: center;
-            font-size: 16px;
-            font-weight: bold;
-
-            & > div {
-                white-space: nowrap;
-                margin-right: 20px;
-            }
-        }
-    }
-}
-.el-card {
-    border: 0;
-}
-.el-input{
-    width: 100% !important;
-}
-::v-deep(.el-date-editor){
-    width: 100%;
-}
-.el-select{
-    width: 100%;
-}
-:deep(.el-cascader){
-    width: 100% !important;
-}
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/zysq/components/broken.vue b/src/views/specialWorkSystem/workTicket/zysq/components/broken.vue
deleted file mode 100644
index 65df3eb..0000000
--- a/src/views/specialWorkSystem/workTicket/zysq/components/broken.vue
+++ /dev/null
@@ -1,518 +0,0 @@
-<template>
-	<div class="home-container">
-		<div style="height: 100%">
-		<el-form :model="form" label-width="150px" :rules="applyRules" ref="ruleFormRef">
-			<div class="homeCard">
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="作业人" prop="operatorUids">
-						<el-select v-model="form.operatorUids" multiple>
-							<el-option
-									v-for="item in workerList"
-									:key="item.uid"
-									:label="item.username"
-									:value="item.uid"
-							/>
-						</el-select>
-					</el-form-item>
-				</el-col>
-				<el-col :span="12">
-					<el-form-item label="作业时间" prop="workTimeLine">
-						<el-date-picker
-								v-model="form.workTimeLine"
-								format="YYYY-MM-DD HH:mm"
-								value-format="YYYY-MM-DD HH:mm:00"
-								type="datetimerange"
-								range-separator="至"
-								start-placeholder="开始时间"
-								end-placeholder="结束时间"
-						/>
-					</el-form-item>
-				</el-col>
-			</el-row>
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="作业内容" prop="workContent">
-						<el-input
-								v-model="form.workContent"
-								autosize
-								type="textarea"
-								placeholder="请输入作业内容"
-						/>
-					</el-form-item>
-				</el-col>
-				<el-col :span="12">
-					<el-form-item label="作业地址" prop="workLocation">
-						<el-input
-								v-model="form.workLocation"
-								autosize
-								type="textarea"
-								placeholder="请输入作业地址"
-						/>
-					</el-form-item>
-				</el-col>
-			</el-row>
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="危害辨识" prop="hazardIdentification">
-						<el-input
-								v-model="form.hazardIdentification"
-								placeholder="请输入危害辨识"
-						/>
-					</el-form-item>
-				</el-col>
-        <el-col :span="12">
-          <el-form-item label="关联视频设备" prop="cameraIds">
-            <el-select v-model="form.cameraIds" multiple>
-              <el-option
-                  v-for="item in deviceList"
-                  :key="item.id"
-                  :label="item.name"
-                  :value="item.id"
-              />
-            </el-select>
-          </el-form-item>
-        </el-col>
-			</el-row>
-				<el-divider border-style="dashed"/>
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="作业单位" prop="workDetail.operationDepId">
-<!--						<el-select v-model="form.workDetail.operationDepId">-->
-<!--							<el-option-->
-<!--									v-for="item in csDepList"-->
-<!--									:key="item.value"-->
-<!--									:label="item.label"-->
-<!--									:value="item.value"-->
-<!--							/>-->
-<!--						</el-select>-->
-						<el-cascader v-model="form.workDetail.operationDepId" :options="departList" :props="casProps2" :show-all-levels="false" @change="handleChange2" />
-					</el-form-item>
-				</el-col>
-				<el-col :span="12">
-					<el-form-item label="断路原因" prop="workDetail.bcReason">
-						<el-input
-								v-model="form.workDetail.bcReason"
-								autosize
-								type="textarea"
-								placeholder="请输入"
-						/>
-					</el-form-item>
-				</el-col>
-			</el-row>
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="断路地段说明" prop="workDetail.bcExplain">
-						<el-input
-								v-model="form.workDetail.bcExplain"
-								autosize
-								type="textarea"
-								placeholder="请输入"
-						/>
-					</el-form-item>
-				</el-col>
-				<el-col :span="12">
-					<el-form-item label="涉及相关部门" prop="workDetail.involvedDepIds">
-						<el-cascader v-model="form.workDetail.involvedDepIds" :options="departList" :props="casProps" :show-all-levels="false" @change="handleChange" />
-					</el-form-item>
-				</el-col>
-			</el-row>
-			<el-row>
-				<el-col :span="24">
-					<el-form-item label="图片上传" prop="workDetail.bcPath">
-						<el-upload accept="image/*" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='imgLimit' v-model:file-list="fileList" :http-request="upload" :action="uploadUrl" list-type="picture-card" :before-remove="beforeRemove" :before-upload="getUploadUrl">
-							<el-icon><Plus /></el-icon>
-							<template #tip>
-								<div class="el-upload__tip">上传jpg/png图片尺寸小于500KB,最多可上传3张</div>
-							</template>
-						</el-upload>
-					</el-form-item>
-				</el-col>
-			</el-row>
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="选择关联物资">
-						<el-button type="primary" @click="openMaList">选择物资标准</el-button>
-					</el-form-item>
-				</el-col>
-			</el-row>
-			</div>
-		</el-form>
-      <material-dialog ref="material" @conFirmMaterials="conFirmMaterials"></material-dialog>
-		<div class="applyBtn">
-			<el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)">发起申请</el-button>
-		</div>
-	</div>
-	<el-dialog v-model="dialogVisible">
-		<img w-full :src="dialogImageUrl" alt="Preview Image" />
-	</el-dialog>
-	</div>
-</template>
-
-<script lang="ts">
-import {toRefs, reactive, defineComponent, ref, defineAsyncComponent} from 'vue';
-	import { storeToRefs } from 'pinia';
-	import { initBackEndControlRoutes } from '/@/router/backEnd';
-	import {useUserInfo} from "/@/stores/userInfo";
-	import { Session } from '/@/utils/storage';
-	import { Search } from '@element-plus/icons-vue'
-	import { ElMessage, ElMessageBox } from 'element-plus'
-	import type { FormInstance, FormRules, UploadProps, UploadUserFile } from 'element-plus'
-	import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-	import axios from 'axios';
-
-	interface stateType {
-		form: Object,
-		csDepList: Array<any>,
-		fileList: Array<file>,
-		uploadUrl: string,
-		dialogVisible: Boolean,
-		dialogImageUrl: string | null,
-		imgLimit: number,
-		casProps: {},
-		casProps2: {},
-		isOverSize: boolean,
-	}
-	interface file {
-		url: string;
-	}
-	export default defineComponent({
-		name: 'brokenForm',
-		components: {
-      materialDialog: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/zysq/components/materialDialog.vue')),
-    },
-		props:['workerList','departList','deviceList'],
-		setup(props: any, context: any) {
-			const userInfo = useUserInfo()
-			const { userInfos } = storeToRefs(userInfo);
-			const state  = reactive<stateType>({
-				form: {
-					operatorUids: [],
-					workType: 5,
-					workLevel: 0,
-					workContent: '',
-					workLocation: '',
-					hazardIdentification: '',
-          cameraIds: [],
-          maBaseId: null,
-					workDetail:{
-						operationDepId: null,
-						bcReason: '',
-						bcExplain: '',
-						bcPath: [],
-						involvedDepIds: []
-					},
-          receiveUids: [],
-					workTimeLine: [],
-					expStartTime: '',
-					expEndTime: ''
-				},
-				isOverSize: false,
-				fileList: [],
-				imgLimit: 3,
-				uploadUrl: '',
-				dialogVisible: false,
-				dialogImageUrl: null,
-				csDepList: [
-					{
-						label: "单位一",
-						value: 1
-					},
-					{
-						label: "单位二",
-						value: 2
-					},
-					{
-						label: "单位三",
-						value: 3
-					},
-					{
-						label: "单位四",
-						value: 4
-					},
-					{
-						label: "单位五",
-						value: 5
-					},
-					{
-						label: "单位六",
-						value: 6
-					}
-				],
-				casProps: {
-					emitPath: false,
-					value: 'depId',
-					label: 'depName',
-					multiple: true,
-          expandTrigger: 'hover'
-				},
-				casProps2: {
-					emitPath: false,
-					value: 'depId',
-					label: 'depName',
-					multiple: false,
-					expandTrigger: 'hover',
-					checkStrictly: true
-				}
-			});
-      const material = ref()
-			const ruleFormRef = ref<FormInstance>()
-			const applyRules = reactive<FormRules>({
-				operatorUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				workType: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				workContent: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				workLocation: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				hazardIdentification: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-        cameraIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				workTimeLine: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				"workDetail.operationDepId": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				"workDetail.bcReason": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				"workDetail.bcExplain": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				"workDetail.bcPath": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				"workDetail.involvedDepIds": [{ required: true, message: '该内容不能为空', trigger: 'blur' }]
-			});
-
-			// const toZero = (value: string | number,index: number,name: string,x:number) =>{
-			// 	if(!value){
-			// 		state.materialList[index][name][x].value = 0
-			// 	}
-			// }
-
-      const openMaList = ()=>{
-        if(state.form.operatorUids == []){
-          ElMessage({
-            type: 'warning',
-            message: '请先选择作业人再获取相应物资配置'
-          });
-        }else{
-          if(material.value.receiveUids.length==0){
-            material.value.receiveUids = state.form.operatorUids
-          }
-          material.value.getMaList(state.form.workType,state.form.workLevel)
-          material.value.workerList = props.workerList
-        }
-      }
-      const conFirmMaterials = (receiveUids: Array<number>,chosenId: number) =>{
-        state.form.maBaseId = null
-        state.form.receiveUids = []
-        state.form.receiveUids = receiveUids
-        state.form.maBaseId = chosenId
-      }
-
-			const submitForm = async (formEl: FormInstance | undefined) => {
-				if (!formEl) return
-				await formEl.validate(async (valid, fields) => {
-					if (valid) {
-            // if (state.form.wmAddReqDTOList == null  || state.form.wmAddReqDTOList.length == 0){
-            //   ElMessage({
-            //     type: 'warning',
-            //     message: '请确认关联物资的配置'
-            //   });
-            //   return
-            // }
-						state.form.expStartTime = JSON.parse(JSON.stringify(state.form.workTimeLine))[0]
-						state.form.expEndTime = JSON.parse(JSON.stringify(state.form.workTimeLine))[1]
-						let { workTimeLine, ...data } = JSON.parse(JSON.stringify(state.form))
-						data.workDetail.involvedDepIds = data.workDetail.involvedDepIds.join(',')
-						data.workDetail.bcPath = data.workDetail.bcPath.join(',')
-						const res = await workApplyApi().postBrokenApply(data)
-						if (res.data.code === '200') {
-								ElMessage({
-									type: 'success',
-									message: '提交成功!'
-								});
-								formEl.resetFields()
-								state.form.workDetail.bcPath = []
-								state.fileList = []
-						} else {
-							ElMessage({
-								type: 'warning',
-								message: res.data.msg
-							});
-						}
-            material.value.maBaseId = null
-            material.value.receiveUids = []
-					} else {
-						console.log('error submit!', fields)
-					}
-				})
-			}
-
-			const handlePreview: UploadProps['onPreview'] = (uploadFile) => {
-				console.log(uploadFile);
-			};
-
-			const handlePictureCardPreview = (uploadFile: { url: string }) => {
-				state.dialogImageUrl = uploadFile.url!;
-				state.dialogVisible = true;
-			};
-
-			const getUploadUrl = async (rawFile: any) => {
-				const fileSize = rawFile.size / 1024 < 500 ? '1' : '0'
-				if(fileSize === '0'){
-					ElMessage({
-						type: 'warning',
-						message: '文件大小不能超过500k。'
-					});
-					state.isOverSize = true
-					return false
-				}else{
-					const res = await workApplyApi().getUploadUrl(rawFile.name);
-					state.form.workDetail.bcPath.push(res.data.data.fileName)
-					state.uploadUrl = res.data.data.uploadUrl;
-					console.log(res.data.data.fileName,'name')
-				}
-			};
-
-			const upload = async (params: any) => {
-				// const formData = new FormData();
-				// formData.append('file', state.fileList[0].raw);
-				let reader = new FileReader();
-				reader.readAsArrayBuffer(params.file);
-				reader.onload = async () => {
-					axios
-							.put(state.uploadUrl, reader.result, {
-								header: { 'Content-Type': 'multipart/form-data' }
-							})
-							.then(() => {
-								// if (state.fileList.length === 2) {
-								// 	state.fileList.splice(0, 1);
-								// }
-								// console.log(state.form.workDetail.bcPath,'bcPath')
-							});
-				};
-			};
-
-			const beforeRemove = (file: {}, fileList: []) => {
-				const result = new Promise((resolve, reject) => {
-					if(!state.isOverSize){
-						ElMessageBox.confirm('此操作将删除该图片, 是否继续?', '提示', {
-							confirmButtonText: '确定',
-							cancelButtonText: '取消',
-							type: 'warning'
-						})
-								.then(() => {
-									// console.log(state.workDetail.bcPath,'path')
-									const list = JSON.parse(JSON.stringify(state.form.workDetail.bcPath))
-									fileList.map((item,index)=>{
-										if(item.uid === file.uid){
-											fileList.splice(index,1)
-											state.form.workDetail.bcPath.splice(index,1)
-											deletePic(false,list[index])
-										}
-									})
-									// 请求删除接口
-								})
-								.catch(() => {
-									reject(false);
-								});
-					}else{
-						const list = JSON.parse(JSON.stringify(state.form.workDetail.bcPath))
-						fileList.map((item,index)=>{
-							if(item.uid === file.uid){
-								fileList.splice(index,1)
-								state.form.workDetail.bcPath.splice(index,1)
-								deletePic(true,list[index])
-							}
-						})
-						state.isOverSize = false
-					}
-				});
-				return result;
-			};
-
-
-			// 删除图片接口
-			const deletePic = async(isOverSize:boolean,fileName:string)=>{
-				console.log(fileName,'fileName')
-				const res = await workApplyApi().deleteFile({fileName: fileName})
-				if (res.data.code === '200') {
-					ElMessage({
-						type: isOverSize ? 'error' : 'success',
-						message: isOverSize ? '上传失败':'删除成功!'
-					});
-				} else {
-					ElMessage({
-						type: 'warning',
-						message: res.data.msg
-					});
-				}
-			}
-
-			const showTip =()=>{
-				ElMessage({
-					type: 'warning',
-					message: '超出文件上传数量'
-				});
-			}
-
-			// 折线图
-			const renderMenu = async (value: string) => {
-				Session.set('projectId',value)
-				userInfos.value.projectId = value
-				await initBackEndControlRoutes();
-			};
-			return {
-				renderMenu,
-				Search,
-				ruleFormRef,
-				applyRules,
-        material,
-        conFirmMaterials,
-        openMaList,
-				handlePreview,
-				getUploadUrl,
-				beforeRemove,
-				upload,
-				showTip,
-				submitForm,
-				handlePictureCardPreview,
-				...toRefs(state),
-			};
-		},
-	});
-</script>
-
-<style scoped lang="scss">
-	.home-container {
-		height: 100%;
-		overflow: hidden;
-		position: relative;
-		.homeCard{
-			width: 100%;
-			padding: 20px;
-			box-sizing: border-box;
-			background: #fff;
-			border-radius: 4px;
-			margin-bottom: 20px;
-		}
-		.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%;
-		}
-		:deep(.el-cascader){
-			width: 100% !important;
-		}
-	}
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/zysq/components/fire.vue b/src/views/specialWorkSystem/workTicket/zysq/components/fire.vue
deleted file mode 100644
index bc19fc9..0000000
--- a/src/views/specialWorkSystem/workTicket/zysq/components/fire.vue
+++ /dev/null
@@ -1,382 +0,0 @@
-<template>
-	<div class="home-container">
-		<div style="height: 100%">
-		<el-form :model="form" label-width="150px" :rules="applyRules" ref="ruleFormRef">
-			<div class="homeCard">
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="作业人" prop="operatorUids">
-						<el-select v-model="form.operatorUids" multiple>
-							<el-option
-									v-for="item in workerList"
-									:key="item.uid"
-									:label="item.username"
-									:value="item.uid"
-							/>
-						</el-select>
-					</el-form-item>
-				</el-col>
-				<el-col :span="12">
-					<el-form-item label="作业时间" prop="workTimeLine">
-						<el-date-picker
-								v-model="form.workTimeLine"
-								format="YYYY-MM-DD HH:mm"
-								value-format="YYYY-MM-DD HH:mm:00"
-								type="datetimerange"
-								range-separator="至"
-								start-placeholder="开始时间"
-								end-placeholder="结束时间"
-						/>
-					</el-form-item>
-				</el-col>
-			</el-row>
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="作业等级" prop="workLevel">
-						<el-select v-model="form.workLevel">
-							<el-option
-									v-for="item in workLevelList"
-									:key="item.value"
-									:label="item.label"
-									:value="item.value"
-							/>
-						</el-select>
-					</el-form-item>
-				</el-col>
-				<el-col :span="12">
-					<el-form-item label="作业内容" prop="workContent">
-						<el-input
-								v-model="form.workContent"
-								autosize
-								type="textarea"
-								placeholder="请输入作业内容"
-						/>
-					</el-form-item>
-				</el-col>
-			</el-row>
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="作业地址" prop="workLocation">
-						<el-input
-								v-model="form.workLocation"
-								autosize
-								type="textarea"
-								placeholder="请输入作业地址"
-						/>
-					</el-form-item>
-				</el-col>
-				<el-col :span="12">
-					<el-form-item label="危害辨识" prop="hazardIdentification">
-						<el-input
-								v-model="form.hazardIdentification"
-								placeholder="请输入危害辨识"
-						/>
-					</el-form-item>
-				</el-col>
-			</el-row>
-      <el-row>
-        <el-col :span="12">
-          <el-form-item label="关联视频设备" prop="cameraIds">
-            <el-select v-model="form.cameraIds" multiple>
-              <el-option
-                  v-for="item in deviceList"
-                  :key="item.id"
-                  :label="item.name"
-                  :value="item.id"
-              />
-            </el-select>
-          </el-form-item>
-        </el-col>
-      </el-row>
-				<el-divider border-style="dashed"/>
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="动火方式" prop="workDetail.hotMethod">
-						<el-input
-								v-model="form.workDetail.hotMethod"
-								autosize
-								type="textarea"
-								placeholder="请输入动火方式"
-						/>
-					</el-form-item>
-				</el-col>
-				<el-col :span="12">
-					<el-form-item label="关联作业" prop="workDetail.otherSpecialWork">
-						<el-select v-model="form.workDetail.otherSpecialWork" multiple>
-							<el-option
-									v-for="item in otherWorkList"
-									:key="item.value"
-									:label="item.label"
-									:value="item.label"
-							/>
-						</el-select>
-					</el-form-item>
-				</el-col>
-			</el-row>
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="选择关联物资">
-						<el-button type="primary" @click="openMaList">选择物资标准</el-button>
-					</el-form-item>
-				</el-col>
-			</el-row>
-			</div>
-		</el-form>
-		<material-dialog ref="material" @conFirmMaterials="conFirmMaterials"></material-dialog>
-		<div class="applyBtn">
-			<el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)">发起申请</el-button>
-		</div>
-	</div>
-	</div>
-</template>
-
-<script lang="ts">
-	import { toRefs, reactive, defineComponent, ref, defineAsyncComponent, onMounted } from 'vue';
-	import { storeToRefs } from 'pinia';
-	import { initBackEndControlRoutes } from '/@/router/backEnd';
-	import {useUserInfo} from "/@/stores/userInfo";
-	import { Session } from '/@/utils/storage';
-	import { Search } from '@element-plus/icons-vue'
-	import { ElMessage, ElMessageBox } from 'element-plus'
-	import type { FormInstance, FormRules } from 'element-plus'
-	import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-	interface stateType {
-		form: Object,
-		workLevelList: Array<any>,
-		otherWorkList: Array<any>,
-		equipmentDialog: boolean
-	}
-	export default defineComponent({
-		name: 'fireForm',
-		components: {
-      materialDialog: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/zysq/components/materialDialog.vue')),
-    },
-		props:['workerList','deviceList'],
-		setup(props: any, context: any) {
-			const userInfo = useUserInfo()
-			const { userInfos } = storeToRefs(userInfo);
-			const state  = reactive<stateType>({
-				equipmentDialog: false,
-				form: {
-					operatorUids: [],
-					workType: 1,
-					workLevel: null,
-					workContent: '',
-					workLocation: '',
-          maBaseId: null,
-					hazardIdentification: '',
-          cameraIds: [],
-					workDetail:{
-						hotMethod: '',
-						otherSpecialWork: []
-					},
-          receiveUids: [],
-					workTimeLine: [],
-					expStartTime: '',
-					expEndTime: ''
-				},
-				workLevelList: [
-					{
-						label: "一级动火作业",
-						value: 1
-					},
-					{
-						label: "二级动火作业",
-						value: 2
-					},
-					{
-						label: "特级动火作业",
-						value: 3
-					}
-				],
-				otherWorkList: [
-					{
-						label: "动火作业",
-						value: 1
-					},
-					{
-						label: "受限空间作业",
-						value: 2
-					},
-					{
-						label: "吊装作业",
-						value: 3
-					},
-					{
-						label: "动土作业",
-						value: 4
-					},
-					{
-						label: "断路作业",
-						value: 5
-					},
-					{
-						label: "高处作业",
-						value: 6
-					},
-					{
-						label: "临时用电作业",
-						value: 7
-					},
-					{
-						label: "盲板抽堵作业",
-						value: 8
-					}
-				]
-			});
-      const material = ref()
-			const ruleFormRef = ref<FormInstance>()
-			const applyRules = reactive<FormRules>({
-				operatorUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				workType: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				workLevel: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				workContent: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				workLocation: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				hazardIdentification: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-        cameraIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				workTimeLine: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				"workDetail.hotMethod": [{ required: true, message: '该内容不能为空', trigger: 'blur' }]
-			});
-
-			// 页面载入时执行方法
-			onMounted(() => {
-
-			});
-			// const toZero = (value: string | number,index: number,name: string,x:number) =>{
-			// 	if(!value){
-			// 		state.materialList[index][name][x].value = 0
-			// 	}
-			// }
-      const openMaList = ()=>{
-        if(state.form.workLevel == null || state.form.operatorUids == []){
-          ElMessage({
-            type: 'warning',
-            message: '请先选择作业人和作业等级再获取相应物资配置'
-          });
-        }else{
-          if(material.value.receiveUids.length==0){
-            material.value.receiveUids = state.form.operatorUids
-          }
-          material.value.getMaList(state.form.workType,state.form.workLevel)
-          material.value.workerList = props.workerList
-        }
-      }
-      const conFirmMaterials = (receiveUids: Array<number>,chosenId: number) =>{
-        state.form.maBaseId = null
-        state.form.receiveUids = []
-        state.form.receiveUids = receiveUids
-        state.form.maBaseId = chosenId
-      }
-			const submitForm = async (formEl: FormInstance | undefined) => {
-				if (!formEl) return
-				await formEl.validate(async (valid, fields) => {
-					if (valid) {
-            // if (state.form.wmAddReqDTOList == null  || state.form.wmAddReqDTOList.length == 0){
-            //   ElMessage({
-            //     type: 'warning',
-            //     message: '请确认关联物资的配置'
-            //   });
-            //   return
-            // }
-						state.form.expStartTime = JSON.parse(JSON.stringify(state.form.workTimeLine))[0]
-						state.form.expEndTime = JSON.parse(JSON.stringify(state.form.workTimeLine))[1]
-						let { workTimeLine, ...data } = JSON.parse(JSON.stringify(state.form))
-						data.workDetail.otherSpecialWork = data.workDetail.otherSpecialWork.join(',')
-						const res = await workApplyApi().postFireApply(data)
-						if (res.data.code === '200') {
-								ElMessage({
-									type: 'success',
-									message: '提交成功!'
-								});
-								formEl.resetFields()
-						} else {
-							ElMessage({
-								type: 'warning',
-								message: res.data.msg
-							});
-						}
-            material.value.maBaseId = null
-            material.value.receiveUids = []
-					} else {
-						console.log('error submit!', fields)
-					}
-				})
-			}
-
-			// 折线图
-			const renderMenu = async (value: string) => {
-				Session.set('projectId',value)
-				userInfos.value.projectId = value
-				await initBackEndControlRoutes();
-			};
-			return {
-				renderMenu,
-				Search,
-        material,
-				ruleFormRef,
-				applyRules,
-        openMaList,
-        conFirmMaterials,
-				submitForm,
-				...toRefs(state),
-			};
-		},
-	});
-</script>
-
-<style scoped lang="scss">
-	.home-container {
-		height: 100%;
-		overflow: hidden;
-		position: relative;
-		.homeCard{
-			width: 100%;
-			padding: 20px;
-			box-sizing: border-box;
-			background: #fff;
-			border-radius: 4px;
-			margin-bottom: 20px;
-		}
-		.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;
-		}
-	}
-
-	.tab-i{
-		margin-bottom: 15px;
-
-		&:last-of-type{
-			margin-bottom: 0;
-		}
-		::v-deep(.el-form-item){
-			.el-form-item__label{
-				margin-bottom: 4px;
-			}
-		}
-	}
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/zysq/components/ground.vue b/src/views/specialWorkSystem/workTicket/zysq/components/ground.vue
deleted file mode 100644
index 6838d8e..0000000
--- a/src/views/specialWorkSystem/workTicket/zysq/components/ground.vue
+++ /dev/null
@@ -1,577 +0,0 @@
- <template>
-	<div class="home-container">
-		<div style="height: 100%">
-		<el-form :model="form" label-width="150px" :rules="applyRules" ref="ruleFormRef">
-			<div class="homeCard">
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="作业人" prop="operatorUids">
-						<el-select v-model="form.operatorUids" multiple>
-							<el-option
-								v-for="item in workerList"
-								:key="item.uid"
-								:label="item.username"
-								:value="item.uid"
-							/>
-						</el-select>
-					</el-form-item>
-				</el-col>
-				<el-col :span="12">
-					<el-form-item label="作业时间" prop="workTimeLine">
-						<el-date-picker
-								v-model="form.workTimeLine"
-								format="YYYY-MM-DD HH:mm"
-								value-format="YYYY-MM-DD HH:mm:00"
-								type="datetimerange"
-								range-separator="至"
-								start-placeholder="开始时间"
-								end-placeholder="结束时间"
-						/>
-					</el-form-item>
-				</el-col>
-			</el-row>
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="作业内容" prop="workContent">
-						<el-input
-								v-model="form.workContent"
-								autosize
-								type="textarea"
-								placeholder="请输入作业内容"
-						/>
-					</el-form-item>
-				</el-col>
-				<el-col :span="12">
-					<el-form-item label="作业地址" prop="workLocation">
-						<el-input
-								v-model="form.workLocation"
-								autosize
-								type="textarea"
-								placeholder="请输入作业地址"
-						/>
-					</el-form-item>
-				</el-col>
-			</el-row>
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="危害辨识" prop="hazardIdentification">
-						<el-input
-								v-model="form.hazardIdentification"
-								placeholder="请输入危害辨识"
-						/>
-					</el-form-item>
-				</el-col>
-        <el-col :span="12">
-          <el-form-item label="关联视频设备" prop="cameraIds">
-            <el-select v-model="form.cameraIds" multiple>
-              <el-option
-                  v-for="item in deviceList"
-                  :key="item.id"
-                  :label="item.name"
-                  :value="item.id"
-              />
-            </el-select>
-          </el-form-item>
-        </el-col>
-			</el-row>
-				<el-divider border-style="dashed"/>
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="作业单位" prop="workDetail.operationDepId">
-<!--						<el-select v-model="form.workDetail.operationDepId">-->
-<!--							<el-option-->
-<!--									v-for="item in csDepList"-->
-<!--									:key="item.value"-->
-<!--									:label="item.label"-->
-<!--									:value="item.value"-->
-<!--							/>-->
-<!--						</el-select>-->
-						<el-cascader v-model="form.workDetail.operationDepId" :options="departList" :props="casProps" :show-all-levels="false" @change="handleChange" />
-					</el-form-item>
-				</el-col>
-				<el-col :span="12">
-					<el-form-item label="范围" prop="workDetail.gbScope">
-						<el-input
-								v-model="form.workDetail.gbScope"
-								autosize
-								type="textarea"
-								placeholder="请输入"
-						/>
-					</el-form-item>
-				</el-col>
-			</el-row>
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="动土方式" prop="workDetail.gbMethod">
-						<el-input
-								v-model="form.workDetail.gbMethod"
-								autosize
-								type="textarea"
-								placeholder="请输入"
-						/>
-					</el-form-item>
-				</el-col>
-				<el-col :span="12">
-					<el-form-item label="关联作业" prop="workDetail.otherSpecialWork">
-						<el-select v-model="form.workDetail.otherSpecialWork" multiple>
-							<el-option v-for="item in otherWorkList" :key="item.value" :label="item.label" :value="item.label" />
-						</el-select>
-					</el-form-item>
-				</el-col>
-			</el-row>
-			<el-row>
-				<el-col :span="24">
-					<el-form-item label="图片上传" prop="workDetail.gbPath">
-						<el-upload accept="image/*" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='imgLimit' v-model:file-list="fileList" :http-request="upload" :action="uploadUrl" list-type="picture-card" :before-remove="beforeRemove" :before-upload="getUploadUrl">
-							<el-icon><Plus /></el-icon>
-							<template #tip>
-								<div class="el-upload__tip">上传jpg/png图片尺寸小于500KB,最多可上传3张</div>
-							</template>
-						</el-upload>
-					</el-form-item>
-				</el-col>
-			</el-row>
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="选择关联物资">
-						<el-button type="primary" @click="openMaList">选择物资标准</el-button>
-					</el-form-item>
-				</el-col>
-			</el-row>
-			</div>
-		</el-form>
-      <material-dialog ref="material" @conFirmMaterials="conFirmMaterials"></material-dialog>
-		<div class="applyBtn">
-			<el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)">发起申请</el-button>
-		</div>
-	</div>
-	<el-dialog v-model="dialogVisible">
-		<img w-full :src="dialogImageUrl" alt="Preview Image" />
-	</el-dialog>
-	</div>
-</template>
-
-<script lang="ts">
-	import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue';
-	import { storeToRefs } from 'pinia';
-	import { initBackEndControlRoutes } from '/@/router/backEnd';
-	import {useUserInfo} from "/@/stores/userInfo";
-	import { Session } from '/@/utils/storage';
-	import { Search,Plus } from '@element-plus/icons-vue'
-	import { ElMessage, ElMessageBox } from 'element-plus'
-	import type { FormInstance, FormRules, UploadProps, UploadUserFile } from 'element-plus'
-	import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-	import axios from 'axios';
-
-	interface stateType {
-		equipmentDialog: boolean,
-		form: Object,
-		csDepList: Array<any>,
-		otherWorkList: Array<any>,
-		fileList: Array<file>,
-		uploadUrl: string,
-		dialogVisible: Boolean,
-		dialogImageUrl: string | null,
-		imgLimit: number,
-		casProps: {},
-		isOverSize: Boolean
-	}
-	interface file {
-		url: string;
-	}
-	export default {
-		name: 'groundForm',
-		components: {
-      materialDialog: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/zysq/components/materialDialog.vue')),
-    },
-		props:['workerList','departList', 'deviceList'],
-		setup(props: any, context: any) {
-			const userInfo = useUserInfo()
-			const { userInfos } = storeToRefs(userInfo);
-			const state  = reactive<stateType>({
-				equipmentDialog: false,
-				form: {
-					operatorUids: [],
-					workType: 4,
-					workLevel: 0,
-					workContent: '',
-					workLocation: '',
-					hazardIdentification: '',
-          cameraIds: [],
-          maBaseId: null,
-					workDetail:{
-						operationDepId: null,
-						gbScope: '',
-						gbMethod: '',
-						gbPath: [],
-						otherSpecialWork: []
-					},
-          receiveUids: [],
-					workTimeLine: [],
-					expStartTime: '',
-					expEndTime: ''
-				},
-				isOverSize: false,
-				fileList: [],
-				imgLimit: 3,
-				uploadUrl: '',
-				dialogVisible: false,
-				dialogImageUrl: null,
-				csDepList: [
-					{
-						label: "单位一",
-						value: 1
-					},
-					{
-						label: "单位二",
-						value: 2
-					},
-					{
-						label: "单位三",
-						value: 3
-					},
-					{
-						label: "单位四",
-						value: 4
-					},
-					{
-						label: "单位五",
-						value: 5
-					},
-					{
-						label: "单位六",
-						value: 6
-					}
-				],
-				otherWorkList: [
-					{
-						label: '动火作业',
-						value: 1
-					},
-					{
-						label: '受限空间作业',
-						value: 2
-					},
-					{
-						label: '吊装作业',
-						value: 3
-					},
-					{
-						label: '动土作业',
-						value: 4
-					},
-					{
-						label: '断路作业',
-						value: 5
-					},
-					{
-						label: '高处作业',
-						value: 6
-					},
-					{
-						label: '临时用电作业',
-						value: 7
-					},
-					{
-						label: '盲板抽堵作业',
-						value: 8
-					}
-				],
-				casProps: {
-					emitPath: false,
-					value: 'depId',
-					label: 'depName',
-					multiple: false,
-					expandTrigger: 'hover',
-					checkStrictly: true
-				}
-			});
-      const material = ref()
-			const ruleFormRef = ref<FormInstance>()
-			const applyRules = reactive<FormRules>({
-				operatorUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				workType: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				workContent: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				workLocation: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				hazardIdentification: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-        cameraIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				workTimeLine: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				"workDetail.operationDepId": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				"workDetail.gbScope": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				"workDetail.gbMethod": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				"workDetail.gbPath": [{ required: true, message: '该内容不能为空', trigger: 'blur' }]
-			});
-			// const toZero = (value: string | number,index: number,name: string,x:number) =>{
-			// 	if(!value){
-			// 		state.materialList[index][name][x].value = 0
-			// 	}
-			// }
-
-      const openMaList = ()=>{
-        if(state.form.operatorUids == []){
-          ElMessage({
-            type: 'warning',
-            message: '请先选择作业人再获取相应物资配置'
-          });
-        }else{
-          if(material.value.receiveUids.length==0){
-            material.value.receiveUids = state.form.operatorUids
-          }
-          material.value.getMaList(state.form.workType,state.form.workLevel)
-          material.value.workerList = props.workerList
-        }
-      }
-      const conFirmMaterials = (receiveUids: Array<number>,chosenId: number) =>{
-        state.form.maBaseId = null
-        state.form.receiveUids = []
-        state.form.receiveUids = receiveUids
-        state.form.maBaseId = chosenId
-      }
-
-			const submitForm = async (formEl: FormInstance | undefined) => {
-				if (!formEl) return
-				await formEl.validate(async (valid, fields) => {
-					if (valid) {
-            // if (state.form.wmAddReqDTOList == null  || state.form.wmAddReqDTOList.length == 0){
-            //   ElMessage({
-            //     type: 'warning',
-            //     message: '请确认关联物资的配置'
-            //   });
-            //   return
-            // }
-						state.form.expStartTime = JSON.parse(JSON.stringify(state.form.workTimeLine))[0]
-						state.form.expEndTime = JSON.parse(JSON.stringify(state.form.workTimeLine))[1]
-						let { workTimeLine, ...data } = JSON.parse(JSON.stringify(state.form))
-						data.workDetail.otherSpecialWork = data.workDetail.otherSpecialWork.join(',')
-						data.workDetail.gbPath = data.workDetail.gbPath.join(',')
-						const res = await workApplyApi().postGroundApply(data)
-						if (res.data.code === '200') {
-								ElMessage({
-									type: 'success',
-									message: '提交成功!'
-								});
-								formEl.resetFields()
-								state.form.workDetail.gbPath = []
-								state.fileList = []
-						} else {
-							ElMessage({
-								type: 'warning',
-								message: res.data.msg
-							});
-						}
-            material.value.maBaseId = null
-            material.value.receiveUids = []
-					} else {
-						console.log('error submit!', fields)
-					}
-				})
-			}
-
-			const handlePreview: UploadProps['onPreview'] = (uploadFile) => {
-				console.log(uploadFile);
-			};
-
-			const handlePictureCardPreview = (uploadFile: { url: string }) => {
-				state.dialogImageUrl = uploadFile.url!;
-				state.dialogVisible = true;
-			};
-
-			const getUploadUrl = async (rawFile: any) => {
-				const fileSize = rawFile.size / 1024 < 500 ? '1' : '0'
-				if(fileSize === '0'){
-					ElMessage({
-						type: 'warning',
-						message: '文件大小不能超过500k。'
-					});
-					state.isOverSize = true
-					return false
-				}else{
-					const res = await workApplyApi().getUploadUrl(rawFile.name);
-					state.form.workDetail.gbPath.push(res.data.data.fileName)
-					state.uploadUrl = res.data.data.uploadUrl;
-				}
-			};
-
-			const upload = async (params: any) => {
-				// const formData = new FormData();
-				// formData.append('file', state.fileList[0].raw);
-				let reader = new FileReader();
-				reader.readAsArrayBuffer(params.file);
-				reader.onload = async () => {
-					axios
-							.put(state.uploadUrl, reader.result, {
-								header: { 'Content-Type': 'multipart/form-data' }
-							})
-							.then(() => {
-								// if (state.fileList.length === 2) {
-								// 	state.fileList.splice(0, 1);
-								// }
-								// console.log(state.form.workDetail.gbPath,'gbpath')
-							});
-				};
-			};
-
-			const beforeRemove = (file: {}, fileList: []) => {
-				const result = new Promise((resolve, reject) => {
-					if(!state.isOverSize){
-						ElMessageBox.confirm('此操作将删除该图片, 是否继续?', '提示', {
-							confirmButtonText: '确定',
-							cancelButtonText: '取消',
-							type: 'warning'
-						})
-								.then(() => {
-									// console.log(state.workDetail.gbPath,'path')
-									const list = JSON.parse(JSON.stringify(state.form.workDetail.gbPath))
-									fileList.map((item,index)=>{
-										if(item.uid === file.uid){
-											fileList.splice(index,1)
-											state.form.workDetail.gbPath.splice(index,1)
-											// 请求删除接口
-											deletePic(false,list[index])
-										}
-									})
-								})
-								.catch(() => {
-									reject(false);
-								});
-					}else{
-						const list = JSON.parse(JSON.stringify(state.form.workDetail.gbPath))
-						fileList.map((item,index)=>{
-							if(item.uid === file.uid){
-								fileList.splice(index,1)
-								state.form.workDetail.gbPath.splice(index,1)
-								deletePic(true,list[index])
-							}
-						})
-						state.isOverSize = false
-					}
-				});
-				return result;
-			};
-
-
-			// 删除图片接口
-			const deletePic = async(isOverSize:boolean,fileName:string)=>{
-				const res = await workApplyApi().deleteFile({fileName: fileName})
-				if (res.data.code === '200') {
-					ElMessage({
-						type: isOverSize ? 'error' : 'success',
-						message: isOverSize ? '上传失败':'删除成功!'
-					});
-				} else {
-					ElMessage({
-						type: 'warning',
-						message: res.data.msg
-					});
-				}
-			}
-
-			const showTip =()=>{
-				ElMessage({
-					type: 'warning',
-					message: '超出文件上传数量'
-				});
-			}
-
-			// const handleRemove: UploadProps['onRemove'] = (uploadFile, uploadFiles) => {
-			// 	console.log('2111111111111')
-			// };
-
-			// 折线图
-			const renderMenu = async (value: string) => {
-				Session.set('projectId',value)
-				userInfos.value.projectId = value
-				await initBackEndControlRoutes();
-			};
-			return {
-				renderMenu,
-				Search,
-				Plus,
-				ruleFormRef,
-				applyRules,
-        material,
-        openMaList,
-        conFirmMaterials,
-				handlePreview,
-				getUploadUrl,
-				beforeRemove,
-				upload,
-				showTip,
-				submitForm,
-				handlePictureCardPreview,
-				...toRefs(state),
-			};
-		},
-	};
-</script>
-
-<style scoped lang="scss">
-	.avatar-uploader .avatar {
-		width: 178px;
-		height: 178px;
-		display: block;
-	}
-	.home-container {
-		height: 100%;
-		overflow: hidden;
-		position: relative;
-		.homeCard{
-			width: 100%;
-			padding: 20px;
-			box-sizing: border-box;
-			background: #fff;
-			border-radius: 4px;
-			margin-bottom: 20px;
-		}
-		.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%;
-		}
-		:deep(.el-cascader){
-			width: 100% !important;
-		}
-	}
-</style>
-<style>
-	.avatar-uploader .el-upload {
-		border: 1px dashed var(--el-border-color);
-		border-radius: 6px;
-		cursor: pointer;
-		position: relative;
-		overflow: hidden;
-		transition: var(--el-transition-duration-fast);
-	}
-
-	.avatar-uploader .el-upload:hover {
-		border-color: var(--el-color-primary);
-	}
-
-	.el-icon.avatar-uploader-icon {
-		font-size: 28px;
-		color: #8c939d;
-		width: 178px;
-		height: 178px;
-		text-align: center;
-	}
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/zysq/components/height.vue b/src/views/specialWorkSystem/workTicket/zysq/components/height.vue
deleted file mode 100644
index af25685..0000000
--- a/src/views/specialWorkSystem/workTicket/zysq/components/height.vue
+++ /dev/null
@@ -1,443 +0,0 @@
-<template>
-	<div class="home-container">
-		<div style="height: 100%">
-		<el-form :model="form" label-width="150px" :rules="applyRules" ref="ruleFormRef">
-			<div class="homeCard">
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="作业人" prop="operatorUids">
-						<el-select v-model="form.operatorUids" multiple>
-							<el-option
-									v-for="item in workerList"
-									:key="item.uid"
-									:label="item.username"
-									:value="item.uid"
-							/>
-						</el-select>
-					</el-form-item>
-				</el-col>
-				<el-col :span="12">
-					<el-form-item label="作业时间" prop="workTimeLine">
-						<el-date-picker
-								v-model="form.workTimeLine"
-								format="YYYY-MM-DD HH:mm"
-								value-format="YYYY-MM-DD HH:mm:00"
-								type="datetimerange"
-								range-separator="至"
-								start-placeholder="开始时间"
-								end-placeholder="结束时间"
-						/>
-					</el-form-item>
-				</el-col>
-			</el-row>
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="作业等级" prop="workLevel">
-						<el-select v-model="form.workLevel">
-							<el-option
-									v-for="item in workLevelList"
-									:key="item.value"
-									:label="item.label"
-									:value="item.value"
-							/>
-						</el-select>
-					</el-form-item>
-				</el-col>
-				<el-col :span="12">
-					<el-form-item label="作业内容" prop="workContent">
-						<el-input
-								v-model="form.workContent"
-								autosize
-								type="textarea"
-								placeholder="请输入作业内容"
-						/>
-					</el-form-item>
-				</el-col>
-			</el-row>
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="作业地址" prop="workLocation">
-						<el-input
-								v-model="form.workLocation"
-								autosize
-								type="textarea"
-								placeholder="请输入作业地址"
-						/>
-					</el-form-item>
-				</el-col>
-				<el-col :span="12">
-					<el-form-item label="危害辨识" prop="hazardIdentification">
-						<el-input
-								v-model="form.hazardIdentification"
-								placeholder="请输入危害辨识"
-						/>
-					</el-form-item>
-				</el-col>
-			</el-row>
-        <el-row>
-          <el-col :span="12">
-            <el-form-item label="关联视频设备" prop="cameraIds">
-              <el-select v-model="form.cameraIds" multiple>
-                <el-option
-                    v-for="item in deviceList"
-                    :key="item.id"
-                    :label="item.name"
-                    :value="item.id"
-                />
-              </el-select>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row>
-          <el-col :span="12">
-            <el-form-item label="关联设备" prop="cameraIds">
-              <el-select v-model="form.cameraIds" multiple>
-                <el-option
-                    v-for="item in deviceList"
-                    :key="item.id"
-                    :label="item.name"
-                    :value="item.id"
-                />
-              </el-select>
-            </el-form-item>
-          </el-col>
-        </el-row>
-				<el-divider border-style="dashed"/>
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="作业单位" prop="workDetail.operationDepId">
-						<!--						<el-select v-model="form.workDetail.operationDepId">-->
-						<!--							<el-option-->
-						<!--									v-for="item in heDepList"-->
-						<!--									:key="item.value"-->
-						<!--									:label="item.label"-->
-						<!--									:value="item.value"-->
-						<!--							/>-->
-						<!--						</el-select>-->
-						<el-cascader v-model="form.workDetail.operationDepId" :options="departList" :props="casProps" :show-all-levels="false" @change="handleChange" />
-					</el-form-item>
-				</el-col>
-				<el-col :span="12">
-					<el-form-item label="作业高度" prop="workDetail.operationHeight">
-						<el-input
-								v-model="form.workDetail.operationHeight"
-								type="number"
-								placeholder="请输入作业高度(大于等于0)"
-						>
-							<template #append>米(m)</template>
-						</el-input>
-					</el-form-item>
-				</el-col>
-			</el-row>
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="关联作业" prop="workDetail.otherSpecialWork">
-						<el-select v-model="form.workDetail.otherSpecialWork" multiple>
-							<el-option
-									v-for="item in otherWorkList"
-									:key="item.value"
-									:label="item.label"
-									:value="item.label"
-							/>
-						</el-select>
-					</el-form-item>
-				</el-col>
-				<el-col :span="12">
-					<el-form-item label="选择关联物资">
-						<el-button type="primary" @click="openMaList">选择物资标准</el-button>
-					</el-form-item>
-				</el-col>
-			</el-row>
-			</div>
-		</el-form>
-      <material-dialog ref="material" @conFirmMaterials="conFirmMaterials"></material-dialog>
-		<div class="applyBtn">
-			<el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)">发起申请</el-button>
-		</div>
-	</div>
-	</div>
-</template>
-
-<script lang="ts">
-import {toRefs, reactive, defineComponent, ref, defineAsyncComponent} from 'vue';
-	import { storeToRefs } from 'pinia';
-	import { initBackEndControlRoutes } from '/@/router/backEnd';
-	import {useUserInfo} from "/@/stores/userInfo";
-	import { Session } from '/@/utils/storage';
-	import { Search } from '@element-plus/icons-vue'
-	import { ElMessage, ElMessageBox } from 'element-plus'
-	import type { FormInstance, FormRules } from 'element-plus'
-	import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-
-
-	interface stateType {
-		equipmentDialog: boolean,
-		form: Object,
-		workTypeList: Array<any>,
-		workLevelList: Array<any>,
-		heDepList: Array<any>,
-		otherWorkList: Array<any>,
-		casProps:{}
-	}
-	export default defineComponent({
-		name: 'heightForm',
-		components: {
-      materialDialog: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/zysq/components/materialDialog.vue')),
-    },
-		props:['workerList','departList','deviceList'],
-		setup(props: any, context: any) {
-			const userInfo = useUserInfo()
-			const { userInfos } = storeToRefs(userInfo);
-			const state  = reactive<stateType>({
-				equipmentDialog: false,
-				form: {
-					operatorUids: [],
-					workType: 6,
-					workLevel: null,
-					workContent: '',
-					workLocation: '',
-					hazardIdentification: '',
-          cameraIds: [],
-          maBaseId: null,
-					workDetail:{
-						operationDepId: '',
-						operationHeight: null,
-						otherSpecialWork: []
-					},
-          receiveUids: [],
-					workTimeLine: [],
-					expStartTime: '',
-					expEndTime: ''
-				},
-				heDepList: [
-					{
-						label: "单位一",
-						value: 1
-					},
-					{
-						label: "单位二",
-						value: 2
-					},
-					{
-						label: "单位三",
-						value: 3
-					},
-					{
-						label: "单位四",
-						value: 4
-					},
-					{
-						label: "单位五",
-						value: 5
-					},
-					{
-						label: "单位六",
-						value: 6
-					}
-				],
-				casProps: {
-					emitPath: false,
-					value: 'depId',
-					label: 'depName',
-					multiple: false,
-					expandTrigger: 'hover',
-					checkStrictly: true
-				},
-				workTypeList: [
-					{
-						label: "类型一",
-						value: 1
-					},
-					{
-						label: "类型二",
-						value: 2
-					}
-				],
-				workLevelList: [
-					{
-						label: "一级高处作业",
-						value: 4
-					},
-					{
-						label: "二级高处作业",
-						value: 5
-					},
-					{
-						label: "三级高处作业",
-						value: 6
-					},
-					{
-						label: "特级高处作业",
-						value: 7
-					}
-				],
-				otherWorkList: [
-					{
-						label: "动火作业",
-						value: 1
-					},
-					{
-						label: "受限空间作业",
-						value: 2
-					},
-					{
-						label: "吊装作业",
-						value: 3
-					},
-					{
-						label: "动土作业",
-						value: 4
-					},
-					{
-						label: "断路作业",
-						value: 5
-					},
-					{
-						label: "高处作业",
-						value: 6
-					},
-					{
-						label: "临时用电作业",
-						value: 7
-					},
-					{
-						label: "盲板抽堵作业",
-						value: 8
-					}
-				]
-			});
-      const material = ref()
-			const ruleFormRef = ref<FormInstance>()
-			const applyRules = reactive<FormRules>({
-				operatorUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				workType: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				workLevel: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				workContent: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				workLocation: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				hazardIdentification: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-        cameraIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				workTimeLine: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				"workDetail.operationDepId": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				"workDetail.operationHeight": [{ required: true, message: '该内容不能为空', trigger: 'blur' }]
-			});
-
-			// const toZero = (value: string | number,index: number,name: string,x:number) =>{
-			// 	if(!value){
-			// 		state.materialList[index][name][x].value = 0
-			// 	}
-			// }
-      const openMaList = ()=>{
-        if(state.form.workLevel == null || state.form.operatorUids == []){
-          ElMessage({
-            type: 'warning',
-            message: '请先选择作业人和作业等级再获取相应物资配置'
-          });
-        }else{
-          if(material.value.receiveUids.length==0){
-            material.value.receiveUids = state.form.operatorUids
-          }
-          material.value.getMaList(state.form.workType,state.form.workLevel)
-          material.value.workerList = props.workerList
-        }
-      }
-      const conFirmMaterials = (receiveUids: Array<number>,chosenId: number) =>{
-        state.form.maBaseId = null
-        state.form.receiveUids = []
-        state.form.receiveUids = receiveUids
-        state.form.maBaseId = chosenId
-      }
-
-			const submitForm = async (formEl: FormInstance | undefined) => {
-				if (!formEl) return
-				await formEl.validate(async (valid, fields) => {
-					if (valid) {
-						state.form.expStartTime = JSON.parse(JSON.stringify(state.form.workTimeLine))[0]
-						state.form.expEndTime = JSON.parse(JSON.stringify(state.form.workTimeLine))[1]
-						let { workTimeLine, ...data } = JSON.parse(JSON.stringify(state.form))
-						data.workDetail.otherSpecialWork = data.workDetail.otherSpecialWork.join(',')
-						const res = await workApplyApi().postHeightApply(data)
-						if (res.data.code === '200') {
-								ElMessage({
-									type: 'success',
-									message: '提交成功!'
-								});
-								formEl.resetFields()
-						} else {
-							ElMessage({
-								type: 'warning',
-								message: res.data.msg
-							});
-						}
-            material.value.maBaseId = null
-            material.value.receiveUids = []
-					} else {
-						console.log('error submit!', fields)
-					}
-				})
-			}
-
-
-			// 折线图
-			const renderMenu = async (value: string) => {
-				Session.set('projectId',value)
-				userInfos.value.projectId = value
-				await initBackEndControlRoutes();
-			};
-			return {
-				renderMenu,
-				Search,
-				ruleFormRef,
-				applyRules,
-        material,
-        openMaList,
-        conFirmMaterials,
-				submitForm,
-				...toRefs(state),
-			};
-		},
-	});
-</script>
-
-<style scoped lang="scss">
-	.home-container {
-		height: 100%;
-		overflow: hidden;
-		position: relative;
-		.homeCard{
-			width: 100%;
-			padding: 20px;
-			box-sizing: border-box;
-			background: #fff;
-			border-radius: 4px;
-			margin-bottom: 20px;
-		}
-		.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%;
-		}
-		:deep(.el-cascader){
-			width: 100% !important;
-		}
-	}
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/zysq/components/hoist.vue b/src/views/specialWorkSystem/workTicket/zysq/components/hoist.vue
deleted file mode 100644
index e1ee0c5..0000000
--- a/src/views/specialWorkSystem/workTicket/zysq/components/hoist.vue
+++ /dev/null
@@ -1,324 +0,0 @@
-<template>
-	<div class="home-container">
-		<div style="height: 100%">
-		<el-form :model="form" label-width="150px" :rules="applyRules" ref="ruleFormRef">
-			<div class="homeCard">
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="作业人" prop="operatorUids">
-						<el-select v-model="form.operatorUids" multiple>
-							<el-option
-									v-for="item in workerList"
-									:key="item.uid"
-									:label="item.username"
-									:value="item.uid"
-							/>
-						</el-select>
-					</el-form-item>
-				</el-col>
-				<el-col :span="12">
-					<el-form-item label="作业时间" prop="workTimeLine">
-						<el-date-picker
-								v-model="form.workTimeLine"
-								format="YYYY-MM-DD HH:mm"
-								value-format="YYYY-MM-DD HH:mm:00"
-								type="datetimerange"
-								range-separator="至"
-								start-placeholder="开始时间"
-								end-placeholder="结束时间"
-						/>
-					</el-form-item>
-				</el-col>
-			</el-row>
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="作业等级" prop="workLevel">
-						<el-select v-model="form.workLevel">
-							<el-option
-									v-for="item in workLevelList"
-									:key="item.value"
-									:label="item.label"
-									:value="item.value"
-							/>
-						</el-select>
-					</el-form-item>
-				</el-col>
-				<el-col :span="12">
-					<el-form-item label="作业内容" prop="workContent">
-						<el-input
-								v-model="form.workContent"
-								autosize
-								type="textarea"
-								placeholder="请输入作业内容"
-						/>
-					</el-form-item>
-				</el-col>
-			</el-row>
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="作业地址" prop="workLocation">
-						<el-input
-								v-model="form.workLocation"
-								autosize
-								type="textarea"
-								placeholder="请输入作业地址"
-						/>
-					</el-form-item>
-				</el-col>
-				<el-col :span="12">
-					<el-form-item label="危害辨识" prop="hazardIdentification">
-						<el-input
-								v-model="form.hazardIdentification"
-								placeholder="请输入危害辨识"
-						/>
-					</el-form-item>
-				</el-col>
-			</el-row>
-        <el-row>
-          <el-col :span="12">
-            <el-form-item label="关联视频设备" prop="cameraIds">
-              <el-select v-model="form.cameraIds" multiple>
-                <el-option
-                    v-for="item in deviceList"
-                    :key="item.id"
-                    :label="item.name"
-                    :value="item.id"
-                />
-              </el-select>
-            </el-form-item>
-          </el-col>
-        </el-row>
-				<el-divider border-style="dashed"/>
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="吊装工具名称" prop="workDetail.hoistingToolName">
-						<el-input
-								v-model="form.workDetail.hoistingToolName"
-								autosize
-								type="textarea"
-								placeholder="请输入"
-						/>
-					</el-form-item>
-				</el-col>
-				<el-col :span="12">
-					<el-form-item label="起吊物体质量" prop="workDetail.weightMass">
-						<el-input
-								v-model="form.workDetail.weightMass"
-								type="number"
-								placeholder="请输入起吊物体质量(大于等于0)"
-						>
-							<template #append>吨(t)</template>
-						</el-input>
-					</el-form-item>
-				</el-col>
-			</el-row>
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="选择关联物资">
-						<el-button type="primary" @click="openMaList">选择物资标准</el-button>
-					</el-form-item>
-				</el-col>
-			</el-row>
-			</div>
-		</el-form>
-      <material-dialog ref="material" @conFirmMaterials="conFirmMaterials"></material-dialog>
-		<div class="applyBtn">
-			<el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)">发起申请</el-button>
-		</div>
-	</div>
-	</div>
-</template>
-
-<script lang="ts">
-import {toRefs, reactive, defineComponent, ref, defineAsyncComponent} from 'vue';
-	import { storeToRefs } from 'pinia';
-	import { initBackEndControlRoutes } from '/@/router/backEnd';
-	import {useUserInfo} from "/@/stores/userInfo";
-	import { Session } from '/@/utils/storage';
-	import { Search } from '@element-plus/icons-vue'
-	import { ElMessage, ElMessageBox } from 'element-plus'
-	import type { FormInstance, FormRules } from 'element-plus'
-	import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-
-	interface stateType {
-		equipmentDialog: boolean,
-		form: Object,
-		workLevelList: Array<any>
-	}
-	export default defineComponent({
-		name: 'hoistForm',
-		components: {
-      materialDialog: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/zysq/components/materialDialog.vue')),
-    },
-		props:['workerList','deviceList'],
-		setup(props: any, context: any) {
-			const userInfo = useUserInfo()
-			const { userInfos } = storeToRefs(userInfo);
-			const state  = reactive<stateType>({
-				equipmentDialog: false,
-				form: {
-					operatorUids: [],
-					workType: 3,
-					workLevel: null,
-					workContent: '',
-					workLocation: '',
-          maBaseId: null,
-					hazardIdentification: '',
-          cameraIds: [],
-					workDetail:{
-						hoistingToolName: '',
-						weightMass: null
-					},
-          receiveUids: [],
-					workTimeLine: [],
-					expStartTime: '',
-					expEndTime: ''
-				},
-				workLevelList: [
-					{
-						label: "一级吊装作业",
-						value: 8
-					},
-					{
-						label: "二级吊装作业",
-						value: 9
-					},
-					{
-						label: "三级吊装作业",
-						value: 10
-					}
-				]
-			});
-      const material = ref()
-			const ruleFormRef = ref<FormInstance>()
-			const applyRules = reactive<FormRules>({
-				operatorUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				workType: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				workLevel: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				workContent: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				workLocation: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				hazardIdentification: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-        cameraIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				workTimeLine: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				"workDetail.hoistingToolName": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				"workDetail.weightMass": [{ required: true, message: '该内容不能为空', trigger: 'blur' }]
-			});
-
-			// const toZero = (value: string | number,index: number,name: string,x:number) =>{
-			// 	if(!value){
-			// 		state.materialList[index][name][x].value = 0
-			// 	}
-			// }
-      const openMaList = ()=>{
-        if(state.form.workLevel == null || state.form.operatorUids == []){
-          ElMessage({
-            type: 'warning',
-            message: '请先选择作业人和作业等级再获取相应物资配置'
-          });
-        }else{
-          if(material.value.receiveUids.length==0){
-            material.value.receiveUids = state.form.operatorUids
-          }
-          material.value.getMaList(state.form.workType,state.form.workLevel)
-          material.value.workerList = props.workerList
-        }
-      }
-      const conFirmMaterials = (receiveUids: Array<number>,chosenId: number) =>{
-        state.form.maBaseId = null
-        state.form.receiveUids = []
-        state.form.receiveUids = receiveUids
-        state.form.maBaseId = chosenId
-      }
-			const submitForm = async (formEl: FormInstance | undefined) => {
-				if (!formEl) return
-				await formEl.validate(async (valid, fields) => {
-					if (valid) {
-						state.form.expStartTime = JSON.parse(JSON.stringify(state.form.workTimeLine))[0]
-						state.form.expEndTime = JSON.parse(JSON.stringify(state.form.workTimeLine))[1]
-						let { workTimeLine, ...data } = JSON.parse(JSON.stringify(state.form))
-						data.workDetail.weightMass = Number(data.workDetail.weightMass)
-						const res = await workApplyApi().postHoistApply(data)
-						if (res.data.code === '200') {
-								ElMessage({
-									type: 'success',
-									message: '提交成功!'
-								});
-								formEl.resetFields()
-						} else {
-							ElMessage({
-								type: 'warning',
-								message: res.data.msg
-							});
-						}
-            material.value.maBaseId = null
-            material.value.receiveUids = []
-					} else {
-						console.log('error submit!', fields)
-					}
-				})
-			}
-
-			// 折线图
-			const renderMenu = async (value: string) => {
-				Session.set('projectId',value)
-				userInfos.value.projectId = value
-				await initBackEndControlRoutes();
-			};
-			return {
-				renderMenu,
-				Search,
-				ruleFormRef,
-				applyRules,
-        material,
-        openMaList,
-        conFirmMaterials,
-				submitForm,
-				...toRefs(state),
-			};
-		},
-	});
-</script>
-
-<style scoped lang="scss">
-	.home-container {
-		height: 100%;
-		overflow: hidden;
-		position: relative;
-		.homeCard{
-			width: 100%;
-			padding: 20px;
-			box-sizing: border-box;
-			background: #fff;
-			border-radius: 4px;
-			margin-bottom: 20px;
-		}
-		.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/specialWorkSystem/workTicket/zysq/components/materialDialog.vue b/src/views/specialWorkSystem/workTicket/zysq/components/materialDialog.vue
deleted file mode 100644
index 384515a..0000000
--- a/src/views/specialWorkSystem/workTicket/zysq/components/materialDialog.vue
+++ /dev/null
@@ -1,293 +0,0 @@
-<template>
-    <el-dialog v-model="equipmentDialog" title="关联物资标准" width="40%" center @close="closeMaterial">
-      <div class="standard" v-for="item in materialList">
-        <div>{{ item.name }}</div>
-        <el-button @click="openList(item)" type="success">选用</el-button>
-      </div>
-
-      <el-dialog v-model="equipDetailDialog" title="物资标准详情" width="75%" center @open="openDetail">
-        <div class="choose-receiver">
-          <span>选择其他作业关联人员</span>
-          <el-select v-model="receiveUids" multiple @change="changeReceiver">
-            <el-option
-                v-for="item in workerList"
-                :key="item.uid"
-                :label="item.username"
-                :value="item.uid"
-            />
-          </el-select>
-        </div>
-        <table class="table">
-          <tr>
-            <th class="w-25">物资名称</th>
-            <th class="w-15">标准值</th>
-            <th class="w-15">级别</th>
-            <th class="w-30">关联人员与个数</th>
-            <th class="w-15">实际使用</th>
-          </tr>
-          <tr v-for="(item,index) in materialDetail">
-            <td class="w-25">{{item.materialName}}</td>
-<!--              <td class="w-1">-->
-<!--                <el-select v-model="addList[index].depId" @change="changeDep($event,index)">-->
-<!--                  <el-option-->
-<!--                      v-for="i in item.msList"-->
-<!--                      :key="i.depId"-->
-<!--                      :label="i.depName"-->
-<!--                      :value="i.depId"-->
-<!--                  />-->
-<!--                </el-select>-->
-<!--              </td>-->
-<!--              <td class="w-15">-->
-<!--                  {{stockCount[index]}}-->
-<!--              </td>-->
-            <td class="w-15">{{item.standVal}}</td>
-            <td class="w-15">{{item.configurationLevelName}}</td>
-            <td class="w-30">
-              {{item.receiveUnames}}
-            </td>
-<!--              <td class="w-15">-->
-<!--                <el-input type="number" v-model.number="addList[index].useCount"/>-->
-<!--              </td>-->
-            <td class="w-15">
-              {{item.receiveCount}}
-            </td>
-          </tr>
-        </table>
-        <template #footer>
-          <span class="dialog-footer">
-            <el-button @click="closeChoose()" size="default">取消</el-button>
-            <el-button type="primary" @click="submitMaterials" size="default">确认</el-button>
-          </span>
-        </template>
-      </el-dialog>
-    </el-dialog>
-</template>
-
-<script lang="ts">
-import {workApplyApi} from "/@/api/specialWorkSystem/workApply";
-
-interface stateType {
-  equipmentDialog:boolean
-  materialList: Array<any>
-  equipDetailDialog: boolean
-  materialDetail: Array<any>
-  stockCount: Array<number>
-  chosenId: number | null,
-  receiveUids: Array<number>
-}
-
-
-import { reactive, toRefs, ref } from 'vue';
-import { approveBasicApi } from '/@/api/specialWorkSystem/approveBasic';
-import {ElMessage, ElMessageBox} from 'element-plus';
-import {useUserInfo} from "/@/stores/userInfo";
-import {storeToRefs} from "pinia";
-
-export default {
-    name: 'materialDialog',
-    setup(props: any, context: any) {
-        const userInfo = useUserInfo()
-        const { userInfos } = storeToRefs(userInfo);
-        const approveBasicFormRef = ref();
-        const state = reactive<stateType>({
-          chosenId: null,
-          equipmentDialog: false,
-          materialList: [],
-          equipDetailDialog: false,
-          materialDetail: [],
-          stockCount: [],
-          receiveUids: []
-        });
-
-      // 确认物资标准
-      const getMaList = async(type:number,level:number) =>{
-          const data = {workType: type,workLevel: level}
-          const res = await workApplyApi().getMaterial(data)
-          if (res.data.code === '200') {
-            if(res.data.data && res.data.data.length>0){
-              state.materialList = JSON.parse(JSON.stringify(res.data.data))
-              state.equipmentDialog = true
-            }else{
-              ElMessage({
-                type: 'warning',
-                message: '暂时查询不到物资标准信息'
-              });
-            }
-          } else {
-            ElMessage({
-              type: 'warning',
-              message: res.data.msg
-            });
-          }
-      }
-      const openList = async(item:object)=>{
-        state.chosenId = item.id
-        const data = {maBaseId: state.chosenId,receiveUids:state.receiveUids}
-        const res = await workApplyApi().getMaterialDetail(data)
-        if (res.data.code === '200') {
-          if(res.data.data && res.data.data.length>0){
-            state.materialDetail = res.data.data
-            state.equipDetailDialog = true
-          }else{
-            ElMessage({
-              type: 'warning',
-              message: '暂时查询不到物资标准信息'
-            });
-          }
-        } else {
-          ElMessage({
-            type: 'warning',
-            message: res.data.msg
-          });
-        }
-        // state.stockCount = []
-        // if(item.mcList && item.mcList.length>0){
-        //   for(let j in item.mcList){
-        //     if(item.mcList[j].msList == null || item.mcList[j].msList.length==0){
-        //       item.mcList.splice(j,1)
-        //     }
-        //   }
-        //   state.materialDetail = item.mcList
-        //   for(let i in state.materialDetail){
-        //       state.addList.push(
-        //           {
-        //             materialId: state.materialDetail[i].materialId,
-        //             depId: null,
-        //             depName: '',
-        //             useCount: null
-        //           }
-        //       )
-        //     for(let x in state.materialDetail[i].msList){
-        //       if(state.materialDetail[i].msList[x].depId == userInfos.value.depId){
-        //         state.addList[i].depId = userInfos.value.depId
-        //         state.addList[i].depName = state.materialDetail[i].msList[x].depName
-        //         state.stockCount[i] = state.materialDetail[i].msList.find((e) => e.depId == state.addList[i].depId).stockCount
-        //       }
-        //     }
-        //   }
-        // }
-      }
-      const changeReceiver = async ()=>{
-        const data = {maBaseId: state.chosenId,receiveUids:state.receiveUids}
-        const res = await workApplyApi().getMaterialDetail(data)
-        if (res.data.code === '200') {
-          if(res.data.data && res.data.data.length>0){
-            state.materialDetail = res.data.data
-          }else{
-            ElMessage({
-              type: 'warning',
-              message: '暂时查询不到物资标准信息'
-            });
-          }
-        } else {
-          ElMessage({
-            type: 'warning',
-            message: res.data.msg
-          });
-        }
-      }
-      const openDetail = ()=>{
-      }
-      const submitMaterials = ()=>{
-        // if(state.addList.length > 0 && (state.addList.some((e) => e.depId == null && e.useCount != null ) || state.addList.some((e) => e.useCount == null && e.depId != null))){
-        //   ElMessage({
-        //     type: 'warning',
-        //     message: '出库部门或实际使用值不可为空'
-        //   });
-        //   return
-        // }
-        // for(let i in state.materialDetail){
-        //   if(state.materialDetail[i].configurationLevelName == '必选' && state.addList[i].depId != null && state.addList[i].useCount <= 0){
-        //     ElMessage({
-        //       type: 'warning',
-        //       message: '必选物资数量不能小于等于0'
-        //     });
-        //     return
-        //   }
-        //   if((state.stockCount[i] !=null && state.addList[i].useCount !=null) && (state.stockCount[i] < state.addList[i].useCount)){
-        //     ElMessage({
-        //       type: 'warning',
-        //       message: '物资配置数量超出库存量,请重新配置'
-        //     });
-        //     return
-        //   }
-        // }
-        // if(state.addList.length > 0){
-        //   for(let n in state.addList){
-        //     if(state.addList[n].depId == null && state.addList[n].useCount == null){
-        //       state.addList.splice(n,1)
-        //     }
-        //   }
-        // }
-        console.log(state.receiveUids,state.chosenId,'666666666')
-        context.emit('conFirmMaterials',state.receiveUids,state.chosenId)
-        state.equipDetailDialog = false
-        state.equipmentDialog = false
-      }
-
-      const closeMaterial = ()=>{
-
-      }
-      const closeChoose = () =>{
-        state.equipDetailDialog = false
-      }
-        return {
-            ...toRefs(state),
-            getMaList,
-            openList,
-            changeReceiver,
-            openDetail,
-            closeChoose,
-            closeMaterial,
-            submitMaterials
-        };
-    }
-};
-</script>
-
-<style lang="scss" scoped>
-  .standard{
-    width: 100%;
-    display: flex;
-    margin-bottom: 20px;
-    align-items: center;
-    justify-content: space-between;
-  }
-
-  .table{
-    width: 100%;
-    border-collapse: collapse;
-    margin-top: 20px;
-    tr{
-      width: 100%;
-      border: 1px solid #ccc;
-      th,td{
-        padding: 6px 0;
-        border-left: 1px solid #ccc;
-        &:first-of-type{
-          border-left: none;
-        }
-      }
-      td{
-        font-weight: bolder;
-      }
-
-      .w-15{
-        width: 15%;
-        text-align: center;
-      }
-      .w-20{
-        width: 20%;
-        text-align: center;
-      }
-      .w-25{
-        width: 25%;
-        text-align: center;
-      }
-      .w-30{
-        width: 30%;
-        text-align: center;
-      }
-    }
-  }
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/zysq/components/plate.vue b/src/views/specialWorkSystem/workTicket/zysq/components/plate.vue
deleted file mode 100644
index 5b57061..0000000
--- a/src/views/specialWorkSystem/workTicket/zysq/components/plate.vue
+++ /dev/null
@@ -1,635 +0,0 @@
-<template>
-	<div class="home-container">
-		<div style="height: 100%">
-		<el-form :model="form" label-width="150px" :rules="applyRules" ref="ruleFormRef">
-			<div class="homeCard">
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="作业人" prop="operatorUids">
-						<el-select v-model="form.operatorUids" multiple>
-							<el-option
-									v-for="item in workerList"
-									:key="item.uid"
-									:label="item.username"
-									:value="item.uid"
-							/>
-						</el-select>
-					</el-form-item>
-				</el-col>
-				<el-col :span="12">
-					<el-form-item label="作业时间" prop="workTimeLine">
-						<el-date-picker
-								v-model="form.workTimeLine"
-								format="YYYY-MM-DD HH:mm"
-								value-format="YYYY-MM-DD HH:mm:00"
-								type="datetimerange"
-								range-separator="至"
-								start-placeholder="开始时间"
-								end-placeholder="结束时间"
-						/>
-					</el-form-item>
-				</el-col>
-			</el-row>
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="作业等级" prop="workLevel">
-						<el-select v-model="form.workLevel">
-							<el-option
-									v-for="item in workLevelList"
-									:key="item.value"
-									:label="item.label"
-									:value="item.value"
-							/>
-						</el-select>
-					</el-form-item>
-				</el-col>
-				<el-col :span="12">
-					<el-form-item label="作业内容" prop="workContent">
-						<el-input
-								v-model="form.workContent"
-								autosize
-								type="textarea"
-								placeholder="请输入作业内容"
-						/>
-					</el-form-item>
-				</el-col>
-			</el-row>
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="作业地址" prop="workLocation">
-						<el-input
-								v-model="form.workLocation"
-								autosize
-								type="textarea"
-								placeholder="请输入作业地址"
-						/>
-					</el-form-item>
-				</el-col>
-				<el-col :span="12">
-					<el-form-item label="危害辨识" prop="hazardIdentification">
-						<el-input
-								v-model="form.hazardIdentification"
-								placeholder="请输入危害辨识"
-						/>
-					</el-form-item>
-				</el-col>
-			</el-row>
-        <el-row>
-          <el-col :span="12">
-            <el-form-item label="关联视频设备" prop="cameraIds">
-              <el-select v-model="form.cameraIds" multiple>
-                <el-option
-                    v-for="item in deviceList"
-                    :key="item.id"
-                    :label="item.name"
-                    :value="item.id"
-                />
-              </el-select>
-            </el-form-item>
-          </el-col>
-        </el-row>
-				<el-divider border-style="dashed"/>
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="盲板编号" prop="workDetail.bpCode">
-						<el-input
-								v-model="form.workDetail.bpCode"
-								autosize
-								type="textarea"
-								placeholder="请输入"
-						/>
-					</el-form-item>
-				</el-col>
-				<el-col :span="12">
-					<el-form-item label="主要介质" prop="workDetail.mainMedia">
-						<el-input
-								v-model="form.workDetail.mainMedia"
-								autosize
-								type="textarea"
-								placeholder="请输入"
-						/>
-					</el-form-item>
-				</el-col>
-			</el-row>
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="温度" prop="workDetail.temperature">
-						<el-input
-								v-model="form.workDetail.temperature"
-								type="number"
-								placeholder="请输入温度(大于等于0)"
-						>
-							<template #append>摄氏度(℃)</template>
-						</el-input>
-					</el-form-item>
-				</el-col>
-				<el-col :span="12">
-					<el-form-item label="压力" prop="workDetail.pressure">
-						<el-input
-								v-model="form.workDetail.pressure"
-								type="number"
-								placeholder="请输入压力(大于等于0)"
-						>
-							<template #append>千帕(kPa)</template>
-						</el-input>
-					</el-form-item>
-				</el-col>
-			</el-row>
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="盲板材质" prop="workDetail.bpMaterialQuality">
-						<el-input
-								v-model="form.workDetail.bpMaterialQuality"
-								autosize
-								type="textarea"
-								placeholder="请输入"
-						/>
-					</el-form-item>
-				</el-col>
-				<el-col :span="12">
-					<el-form-item label="盲板规格" prop="workDetail.bpSpecification">
-						<el-input
-								v-model="form.workDetail.bpSpecification"
-								autosize
-								type="textarea"
-								placeholder="请输入"
-						/>
-					</el-form-item>
-				</el-col>
-			</el-row>
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="盲板时间" prop="workDetail.installLine">
-						<el-date-picker
-								v-model="form.workDetail.installLine"
-								format="YYYY-MM-DD HH:mm"
-								value-format="YYYY-MM-DD HH:mm:00"
-								type="datetimerange"
-								range-separator="--"
-								start-placeholder="装盲板时间"
-								end-placeholder="拆盲板时间"
-						/>
-					</el-form-item>
-				</el-col>
-			</el-row>
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="盲板位置" prop="workDetail.bpLocation">
-						<el-input
-								v-model="form.workDetail.bpLocation"
-								autosize
-								type="textarea"
-								placeholder="请输入"
-						/>
-					</el-form-item>
-				</el-col>
-				<el-col :span="12">
-					<el-form-item label="关联作业" prop="workDetail.otherSpecialWork">
-						<el-select v-model="form.workDetail.otherSpecialWork" multiple>
-							<el-option
-									v-for="item in otherWorkList"
-									:key="item.value"
-									:label="item.label"
-									:value="item.label"
-							/>
-						</el-select>
-					</el-form-item>
-				</el-col>
-			</el-row>
-			<el-row>
-				<el-col :span="24">
-					<el-form-item label="盲板位置图" prop="workDetail.bpLocationMapPath">
-						<el-upload accept="image/*" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='imgLimit' v-model:file-list="fileList" :http-request="upload" :action="uploadUrl" list-type="picture-card" :before-remove="beforeRemove" :before-upload="getUploadUrl">
-							<el-icon><Plus /></el-icon>
-							<template #tip>
-								<div class="el-upload__tip">上传jpg/png图片尺寸小于500KB,最多可上传3张</div>
-							</template>
-						</el-upload>
-					</el-form-item>
-				</el-col>
-			</el-row>
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="选择关联物资">
-						<el-button type="primary" @click="openMaList">选择物资标准</el-button>
-					</el-form-item>
-				</el-col>
-			</el-row>
-			</div>
-		</el-form>
-      <material-dialog ref="material" @conFirmMaterials="conFirmMaterials"></material-dialog>
-		<div class="applyBtn">
-			<el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)">发起申请</el-button>
-		</div>
-	</div>
-	<el-dialog v-model="dialogVisible">
-		<img w-full :src="dialogImageUrl" alt="Preview Image" />
-	</el-dialog>
-	</div>
-</template>
-
-<script lang="ts">
-import {toRefs, reactive, defineComponent, ref, defineAsyncComponent} from 'vue';
-	import { storeToRefs } from 'pinia';
-	import { initBackEndControlRoutes } from '/@/router/backEnd';
-	import {useUserInfo} from "/@/stores/userInfo";
-	import { Session } from '/@/utils/storage';
-	import { Search } from '@element-plus/icons-vue'
-	import { ElMessage, ElMessageBox } from 'element-plus'
-	import type { FormInstance, FormRules, UploadProps, UploadUserFile } from 'element-plus'
-	import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-	import axios from 'axios';
-
-	interface stateType {
-		form: Object,
-		csDepList: Array<any>,
-		otherWorkList: Array<any>,
-		workLevelList: Array<any>,
-		fileList: Array<file>,
-		uploadUrl: string,
-		dialogVisible: Boolean,
-		dialogImageUrl: string | null,
-		imgLimit: number,
-		isOverSize: boolean,
-		equipmentDialog: boolean
-	}
-	interface file {
-		url: string;
-	}
-	export default defineComponent({
-		name: 'plateForm',
-		components: {
-      materialDialog: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/zysq/components/materialDialog.vue')),
-    },
-		props:['workerList','deviceList'],
-		setup(props: any, context: any) {
-			const userInfo = useUserInfo()
-			const { userInfos } = storeToRefs(userInfo);
-			const state  = reactive<stateType>({
-				equipmentDialog: false,
-				form: {
-					operatorUids: [],
-					workType: 8,
-					workLevel: null,
-					workContent: '',
-					workLocation: '',
-          maBaseId: null,
-					hazardIdentification: '',
-          cameraIds: [],
-					workDetail:{
-						bpCode: '',
-						mainMedia: '',
-						temperature: null,
-						pressure: null,
-						bpMaterialQuality: '',
-						bpSpecification: '',
-						bpLocation: '',
-						bpLocationMapPath: [],
-						installLine: [],
-						installBpTime: '',
-						uninstallBpTime: '',
-						otherSpecialWork: []
-					},
-					receiveUids: [],
-					workTimeLine: [],
-					expStartTime: '',
-					expEndTime: ''
-				},
-				isOverSize: false,
-				fileList: [],
-				imgLimit: 3,
-				uploadUrl: '',
-				dialogVisible: false,
-				dialogImageUrl: null,
-				workLevelList: [
-					{
-						label: "抽盲板作业",
-						value: 11
-					},
-					{
-						label: "堵盲板作业",
-						value: 12
-					}
-				],
-				csDepList: [
-					{
-						label: "单位一",
-						value: 1
-					},
-					{
-						label: "单位二",
-						value: 2
-					},
-					{
-						label: "单位三",
-						value: 3
-					},
-					{
-						label: "单位四",
-						value: 4
-					},
-					{
-						label: "单位五",
-						value: 5
-					},
-					{
-						label: "单位六",
-						value: 6
-					}
-				],
-				otherWorkList: [
-					{
-						label: "动火作业",
-						value: 1
-					},
-					{
-						label: "受限空间作业",
-						value: 2
-					},
-					{
-						label: "吊装作业",
-						value: 3
-					},
-					{
-						label: "动土作业",
-						value: 4
-					},
-					{
-						label: "断路作业",
-						value: 5
-					},
-					{
-						label: "高处作业",
-						value: 6
-					},
-					{
-						label: "临时用电作业",
-						value: 7
-					},
-					{
-						label: "盲板抽堵作业",
-						value: 8
-					}
-				]
-			});
-      const material = ref()
-			const ruleFormRef = ref<FormInstance>()
-			const applyRules = reactive<FormRules>({
-				operatorUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				workType: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				workLevel: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				workContent: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				workLocation: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				hazardIdentification: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-        cameraIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				workTimeLine: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				"workDetail.bpCode": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				"workDetail.mainMedia": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				"workDetail.temperature": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				"workDetail.pressure": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				"workDetail.bpMaterialQuality": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				"workDetail.bpSpecification": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				"workDetail.installLine": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				"workDetail.bpLocation": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				"workDetail.bpLocationMapPath": [{ required: true, message: '该内容不能为空', trigger: 'blur' }]
-			});
-
-			// const toZero = (value: string | number,index: number,name: string,x:number) =>{
-			// 	if(!value){
-			// 		state.materialList[index][name][x].value = 0
-			// 	}
-			// }
-      const openMaList = ()=>{
-        if(state.form.workLevel == null || state.form.operatorUids == []){
-          ElMessage({
-            type: 'warning',
-            message: '请先选择作业人和作业等级再获取相应物资配置'
-          });
-        }else{
-          if(material.value.receiveUids.length==0){
-            material.value.receiveUids = state.form.operatorUids
-          }
-          material.value.getMaList(state.form.workType,state.form.workLevel)
-          material.value.workerList = props.workerList
-        }
-      }
-      const conFirmMaterials = (receiveUids: Array<number>,chosenId: number) =>{
-        state.form.maBaseId = null
-        state.form.receiveUids = []
-        state.form.receiveUids = receiveUids
-        state.form.maBaseId = chosenId
-      }
-			const submitForm = async (formEl: FormInstance | undefined) => {
-				if (!formEl) return
-				await formEl.validate(async (valid, fields) => {
-					if (valid) {
-						state.form.expStartTime = JSON.parse(JSON.stringify(state.form.workTimeLine))[0]
-						state.form.expEndTime = JSON.parse(JSON.stringify(state.form.workTimeLine))[1]
-						state.form.workDetail.installBpTime = JSON.parse(JSON.stringify(state.form.workDetail.installLine))[0]
-						state.form.workDetail.uninstallBpTime = JSON.parse(JSON.stringify(state.form.workDetail.installLine))[1]
-						let { workTimeLine, ...data } = JSON.parse(JSON.stringify(state.form))
-						let { installLine, ...data2 } = JSON.parse(JSON.stringify(state.form.workDetail))
-						data.workDetail = data2
-						data.workDetail.otherSpecialWork = data.workDetail.otherSpecialWork.join(',')
-						data.workDetail.bpLocationMapPath = data.workDetail.bpLocationMapPath.join(',')
-						data.workDetail.temperature = Number(data.workDetail.temperature)
-						data.workDetail.pressure = Number(data.workDetail.pressure)
-						const res = await workApplyApi().postPlateApply(data)
-						if (res.data.code === '200') {
-								ElMessage({
-									type: 'success',
-									message: '提交成功!'
-								});
-								formEl.resetFields()
-								state.form.workDetail.bpLocationMapPath = []
-								state.fileList = []
-						} else {
-							ElMessage({
-								type: 'warning',
-								message: res.data.msg
-							});
-						}
-            material.value.maBaseId = null
-            material.value.receiveUids = []
-					} else {
-						console.log('error submit!', fields)
-					}
-				})
-			}
-			const handlePreview: UploadProps['onPreview'] = (uploadFile) => {
-				console.log(uploadFile);
-			};
-
-			const handlePictureCardPreview = (uploadFile: { url: string }) => {
-				state.dialogImageUrl = uploadFile.url!;
-				state.dialogVisible = true;
-			};
-
-			const getUploadUrl = async (rawFile: any) => {
-				const fileSize = rawFile.size / 1024 < 500 ? '1' : '0'
-				if(fileSize === '0'){
-					ElMessage({
-						type: 'warning',
-						message: '文件大小不能超过500k。'
-					});
-					state.isOverSize = true
-					return false
-				}else{
-					const res = await workApplyApi().getUploadUrl(rawFile.name);
-					state.form.workDetail.bpLocationMapPath.push(res.data.data.fileName)
-					state.uploadUrl = res.data.data.uploadUrl;
-					console.log(res.data.data.fileName,'name')
-				}
-			};
-
-			const upload = async (params: any) => {
-				// const formData = new FormData();
-				// formData.append('file', state.fileList[0].raw);
-				let reader = new FileReader();
-				reader.readAsArrayBuffer(params.file);
-				reader.onload = async () => {
-					axios
-							.put(state.uploadUrl, reader.result, {
-								header: { 'Content-Type': 'multipart/form-data' }
-							})
-							.then(() => {
-								// if (state.fileList.length === 2) {
-								// 	state.fileList.splice(0, 1);
-								// }
-								// console.log(state.form.workDetail.bpLocationMapPath,'bpLocationMapPath')
-							});
-				};
-			};
-
-			const beforeRemove = (file: {}, fileList: []) => {
-				const result = new Promise((resolve, reject) => {
-					if(!state.isOverSize){
-						ElMessageBox.confirm('此操作将删除该图片, 是否继续?', '提示', {
-							confirmButtonText: '确定',
-							cancelButtonText: '取消',
-							type: 'warning'
-						})
-								.then(() => {
-									// console.log(state.workDetail.bpLocationMapPath,'path')
-									const list = JSON.parse(JSON.stringify(state.form.workDetail.bpLocationMapPath))
-									fileList.map((item,index)=>{
-										if(item.uid === file.uid){
-											fileList.splice(index,1)
-											state.form.workDetail.bpLocationMapPath.splice(index,1)
-											deletePic(false,list[index])
-										}
-									})
-									// 请求删除接口
-								})
-								.catch(() => {
-									reject(false);
-								});
-					}else{
-						const list = JSON.parse(JSON.stringify(state.form.workDetail.bpLocationMapPath))
-						fileList.map((item,index)=>{
-							if(item.uid === file.uid){
-								fileList.splice(index,1)
-								state.form.workDetail.bpLocationMapPath.splice(index,1)
-								deletePic(true,list[index])
-							}
-						})
-						state.isOverSize = false
-					}
-				});
-				return result;
-			};
-
-
-			// 删除图片接口
-			const deletePic = async(isOverSize:boolean,fileName:string)=>{
-				console.log(fileName,'fileName')
-				const res = await workApplyApi().deleteFile({fileName: fileName})
-				if (res.data.code === '200') {
-					ElMessage({
-						type: isOverSize ? 'error' : 'success',
-						message: isOverSize ? '上传失败':'删除成功!'
-					});
-				} else {
-					ElMessage({
-						type: 'warning',
-						message: res.data.msg
-					});
-				}
-			}
-			const showTip =()=>{
-				ElMessage({
-					type: 'warning',
-					message: '超出文件上传数量'
-				});
-			}
-
-			// 折线图
-			const renderMenu = async (value: string) => {
-				Session.set('projectId',value)
-				userInfos.value.projectId = value
-				await initBackEndControlRoutes();
-			};
-			return {
-				renderMenu,
-				Search,
-				ruleFormRef,
-				applyRules,
-        material,
-        openMaList,
-        conFirmMaterials,
-				handlePreview,
-				getUploadUrl,
-				beforeRemove,
-				upload,
-				showTip,
-				submitForm,
-				handlePictureCardPreview,
-				...toRefs(state),
-			};
-		},
-	});
-</script>
-
-<style scoped lang="scss">
-	.home-container {
-		height: 100%;
-		overflow: hidden;
-		position: relative;
-		.homeCard{
-			width: 100%;
-			padding: 20px;
-			box-sizing: border-box;
-			background: #fff;
-			border-radius: 4px;
-			margin-bottom: 20px;
-		}
-		.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/specialWorkSystem/workTicket/zysq/components/power.vue b/src/views/specialWorkSystem/workTicket/zysq/components/power.vue
deleted file mode 100644
index 5c2c575..0000000
--- a/src/views/specialWorkSystem/workTicket/zysq/components/power.vue
+++ /dev/null
@@ -1,308 +0,0 @@
-<template>
-	<div class="home-container">
-		<div style="height: 100%">
-		<el-form :model="form" label-width="150px" :rules="applyRules" ref="ruleFormRef">
-			<div class="homeCard">
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="作业人" prop="operatorUids">
-						<el-select v-model="form.operatorUids" multiple>
-							<el-option
-									v-for="item in workerList"
-									:key="item.uid"
-									:label="item.username"
-									:value="item.uid"
-							/>
-						</el-select>
-					</el-form-item>
-				</el-col>
-				<el-col :span="12">
-					<el-form-item label="作业时间" prop="workTimeLine">
-						<el-date-picker
-								v-model="form.workTimeLine"
-								format="YYYY-MM-DD HH:mm"
-								value-format="YYYY-MM-DD HH:mm:00"
-								type="datetimerange"
-								range-separator="至"
-								start-placeholder="开始时间"
-								end-placeholder="结束时间"
-						/>
-					</el-form-item>
-				</el-col>
-			</el-row>
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="作业内容" prop="workContent">
-						<el-input
-								v-model="form.workContent"
-								autosize
-								type="textarea"
-								placeholder="请输入作业内容"
-						/>
-					</el-form-item>
-				</el-col>
-				<el-col :span="12">
-					<el-form-item label="作业地址" prop="workLocation">
-						<el-input
-								v-model="form.workLocation"
-								autosize
-								type="textarea"
-								placeholder="请输入作业地址"
-						/>
-					</el-form-item>
-				</el-col>
-			</el-row>
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="危害辨识" prop="hazardIdentification">
-						<el-input
-								v-model="form.hazardIdentification"
-								placeholder="请输入危害辨识"
-						/>
-					</el-form-item>
-				</el-col>
-        <el-col :span="12">
-          <el-form-item label="关联视频设备" prop="cameraIds">
-            <el-select v-model="form.cameraIds" multiple>
-              <el-option
-                  v-for="item in deviceList"
-                  :key="item.id"
-                  :label="item.name"
-                  :value="item.id"
-              />
-            </el-select>
-          </el-form-item>
-        </el-col>
-			</el-row>
-				<el-divider border-style="dashed"/>
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="电源接入点" prop="workDetail.powerAccessPoint">
-						<el-input
-								v-model="form.workDetail.powerAccessPoint"
-								autosize
-								type="textarea"
-								placeholder="请输入"
-						/>
-					</el-form-item>
-				</el-col>
-				<el-col :span="12">
-					<el-form-item label="工作电压" prop="workDetail.workingVoltage">
-						<el-input
-								v-model="form.workDetail.workingVoltage"
-								type="number"
-								placeholder="请输入工作电压(大于等于0)"
-						>
-							<template #append>伏特(v)</template>
-						</el-input>
-					</el-form-item>
-				</el-col>
-			</el-row>
-				<el-row>
-					<el-col :span="12">
-						<el-form-item label="用电设备及功率" prop="workDetail.equipmentAndPower">
-							<el-input
-									v-model="form.workDetail.equipmentAndPower"
-									autosize
-									type="textarea"
-									placeholder="请输入"
-							/>
-						</el-form-item>
-					</el-col>
-					<el-col :span="12">
-						<el-form-item label="选择关联物资">
-							<el-button type="primary" @click="openMaList">选择物资标准</el-button>
-						</el-form-item>
-					</el-col>
-				</el-row>
-			</div>
-		</el-form>
-      <material-dialog ref="material" @conFirmMaterials="conFirmMaterials"></material-dialog>
-		<div class="applyBtn">
-			<el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)">发起申请</el-button>
-		</div>
-	</div>
-	</div>
-</template>
-
-<script lang="ts">
-import {toRefs, reactive, defineComponent, ref, defineAsyncComponent} from 'vue';
-	import { storeToRefs } from 'pinia';
-	import { initBackEndControlRoutes } from '/@/router/backEnd';
-	import {useUserInfo} from "/@/stores/userInfo";
-	import { Session } from '/@/utils/storage';
-	import { Search } from '@element-plus/icons-vue'
-	import { ElMessage, ElMessageBox } from 'element-plus'
-	import type { FormInstance, FormRules } from 'element-plus'
-	import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-
-	interface stateType {
-		form: Object,
-		equipmentDialog: boolean
-	}
-	export default defineComponent({
-		name: 'powerForm',
-		components: {
-      materialDialog: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/zysq/components/materialDialog.vue')),
-    },
-		props:['workerList','deviceList'],
-		setup(props: any, context: any) {
-			const userInfo = useUserInfo()
-			const { userInfos } = storeToRefs(userInfo);
-			const state  = reactive<stateType>({
-				equipmentDialog: false,
-				form: {
-					operatorUids: [],
-					workType: 7,
-					workLevel: 0,
-					workContent: '',
-					workLocation: '',
-          maBaseId: null,
-					hazardIdentification: '',
-          cameraIds: [],
-					workDetail:{
-						powerAccessPoint: '',
-						workingVoltage: null,
-						equipmentAndPower: ''
-					},
-          receiveUids: [],
-					workTimeLine: [],
-					expStartTime: '',
-					expEndTime: ''
-				}
-			});
-      const material = ref()
-			const ruleFormRef = ref<FormInstance>()
-			const applyRules = reactive<FormRules>({
-				operatorUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				workType: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				workContent: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				workLocation: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				hazardIdentification: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-        cameraIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				workTimeLine: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				"workDetail.powerAccessPoint": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				"workDetail.workingVoltage": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				"workDetail.equipmentAndPower": [{ required: true, message: '该内容不能为空', trigger: 'blur' }]
-			});
-
-			// const toZero = (value: string | number,index: number,name: string,x:number) =>{
-			// 	if(!value){
-			// 		state.materialList[index][name][x].value = 0
-			// 	}
-			// }
-
-      const openMaList = ()=>{
-        if(state.form.operatorUids == []){
-          ElMessage({
-            type: 'warning',
-            message: '请先选择作业人再获取相应物资配置'
-          });
-        }else{
-          if(material.value.receiveUids.length==0){
-            material.value.receiveUids = state.form.operatorUids
-          }
-          material.value.getMaList(state.form.workType,state.form.workLevel)
-          material.value.workerList = props.workerList
-        }
-      }
-      const conFirmMaterials = (receiveUids: Array<number>,chosenId: number) =>{
-        state.form.maBaseId = null
-        state.form.receiveUids = []
-        state.form.receiveUids = receiveUids
-        state.form.maBaseId = chosenId
-      }
-
-			const submitForm = async (formEl: FormInstance | undefined) => {
-				if (!formEl) return
-				await formEl.validate(async (valid, fields) => {
-					if (valid) {
-						state.form.expStartTime = JSON.parse(JSON.stringify(state.form.workTimeLine))[0]
-						state.form.expEndTime = JSON.parse(JSON.stringify(state.form.workTimeLine))[1]
-						let { workTimeLine, ...data } = JSON.parse(JSON.stringify(state.form))
-						// data.workDetail.weightMass = Number(data.workDetail.weightMass)
-						const res = await workApplyApi().postPowerApply(data)
-						if (res.data.code === '200') {
-								ElMessage({
-									type: 'success',
-									message: '提交成功!'
-								});
-								formEl.resetFields()
-						} else {
-							ElMessage({
-								type: 'warning',
-								message: res.data.msg
-							});
-						}
-            material.value.maBaseId = null
-            material.value.receiveUids = []
-					} else {
-						console.log('error submit!', fields)
-					}
-				})
-			}
-
-			// 折线图
-			const renderMenu = async (value: string) => {
-				Session.set('projectId',value)
-				userInfos.value.projectId = value
-				await initBackEndControlRoutes();
-			};
-			return {
-				renderMenu,
-				Search,
-				ruleFormRef,
-				applyRules,
-        material,
-        openMaList,
-        conFirmMaterials,
-				submitForm,
-				...toRefs(state),
-			};
-		},
-	});
-</script>
-
-<style scoped lang="scss">
-	.home-container {
-		height: 100%;
-		overflow: hidden;
-		position: relative;
-		.homeCard{
-			width: 100%;
-			padding: 20px;
-			box-sizing: border-box;
-			background: #fff;
-			border-radius: 4px;
-			margin-bottom: 20px;
-		}
-		.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/specialWorkSystem/workTicket/zysq/components/space.vue b/src/views/specialWorkSystem/workTicket/zysq/components/space.vue
deleted file mode 100644
index ed158e2..0000000
--- a/src/views/specialWorkSystem/workTicket/zysq/components/space.vue
+++ /dev/null
@@ -1,393 +0,0 @@
-<template>
-	<div class="home-container">
-		<div style="height: 100%">
-		<el-form :model="form" label-width="150px" :rules="applyRules" ref="ruleFormRef">
-			<div class="homeCard">
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="作业人" prop="operatorUids">
-						<el-select v-model="form.operatorUids" multiple>
-							<el-option
-									v-for="item in workerList"
-									:key="item.uid"
-									:label="item.username"
-									:value="item.uid"
-							/>
-						</el-select>
-					</el-form-item>
-				</el-col>
-				<el-col :span="12">
-					<el-form-item label="作业时间" prop="workTimeLine">
-						<el-date-picker
-								v-model="form.workTimeLine"
-								format="YYYY-MM-DD HH:mm"
-								value-format="YYYY-MM-DD HH:mm:00"
-								type="datetimerange"
-								range-separator="至"
-								start-placeholder="开始时间"
-								end-placeholder="结束时间"
-						/>
-					</el-form-item>
-				</el-col>
-			</el-row>
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="作业内容" prop="workContent">
-						<el-input
-								v-model="form.workContent"
-								autosize
-								type="textarea"
-								placeholder="请输入作业内容"
-						/>
-					</el-form-item>
-				</el-col>
-				<el-col :span="12">
-					<el-form-item label="作业地址" prop="workLocation">
-						<el-input
-								v-model="form.workLocation"
-								autosize
-								type="textarea"
-								placeholder="请输入作业地址"
-						/>
-					</el-form-item>
-				</el-col>
-			</el-row>
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="危害辨识" prop="hazardIdentification">
-						<el-input
-								v-model="form.hazardIdentification"
-								placeholder="请输入危害辨识"
-						/>
-					</el-form-item>
-				</el-col>
-        <el-col :span="12">
-          <el-form-item label="关联视频设备" prop="cameraIds">
-            <el-select v-model="form.cameraIds" multiple>
-              <el-option
-                  v-for="item in deviceList"
-                  :key="item.id"
-                  :label="item.name"
-                  :value="item.id"
-              />
-            </el-select>
-          </el-form-item>
-        </el-col>
-			</el-row>
-				<el-divider border-style="dashed" />
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="受限空间所属单位" prop="workDetail.csDepId">
-<!--						<el-select v-model="form.workDetail.csDepId">-->
-<!--							<el-option-->
-<!--									v-for="item in csDepList"-->
-<!--									:key="item.value"-->
-<!--									:label="item.label"-->
-<!--									:value="item.value"-->
-<!--							/>-->
-<!--						</el-select>-->
-						<el-cascader v-model="form.workDetail.csDepId" :options="departList" :props="casProps" :show-all-levels="false" @change="handleChange" />
-					</el-form-item>
-				</el-col>
-				<el-col :span="12">
-					<el-form-item label="受限空间名称" prop="workDetail.csName">
-						<el-input
-								v-model="form.workDetail.csName"
-								autosize
-								type="textarea"
-								placeholder="请输入"
-						/>
-					</el-form-item>
-				</el-col>
-			</el-row>
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="空间内原有介质" prop="workDetail.csOriginalName">
-						<el-input
-								v-model="form.workDetail.csOriginalName"
-								autosize
-								type="textarea"
-								placeholder="请输入"
-						/>
-					</el-form-item>
-				</el-col>
-				<el-col :span="12">
-					<el-form-item label="关联作业" prop="workDetail.otherSpecialWork">
-						<el-select v-model="form.workDetail.otherSpecialWork" multiple>
-							<el-option v-for="item in otherWorkList" :key="item.value" :label="item.label" :value="item.label" />
-						</el-select>
-					</el-form-item>
-				</el-col>
-			</el-row>
-			<el-row>
-				<el-col :span="12">
-					<el-form-item label="选择关联物资">
-						<el-button type="primary" @click="openMaList">选择物资标准</el-button>
-					</el-form-item>
-				</el-col>
-			</el-row>
-			</div>
-		</el-form>
-      <material-dialog ref="material" @conFirmMaterials="conFirmMaterials"></material-dialog>
-		<div class="applyBtn">
-			<el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)">发起申请</el-button>
-		</div>
-	</div>
-	</div>
-</template>
-
-<script lang="ts">
-import {toRefs, reactive, defineComponent, ref, defineAsyncComponent} from 'vue';
-	import { storeToRefs } from 'pinia';
-	import { initBackEndControlRoutes } from '/@/router/backEnd';
-	import {useUserInfo} from "/@/stores/userInfo";
-	import { Session } from '/@/utils/storage';
-	import { Search } from '@element-plus/icons-vue'
-	import { ElMessage, ElMessageBox } from 'element-plus'
-	import type { FormInstance, FormRules } from 'element-plus'
-	import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-
-	interface stateType {
-		form: Object,
-		csDepList: Array<any>,
-		otherWorkList: Array<any>,
-		casProps: {},
-		equipmentDialog: boolean
-	}
-	export default defineComponent({
-		name: 'spaceForm',
-		components: {
-      materialDialog: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/zysq/components/materialDialog.vue')),
-    },
-		props:['workerList','departList','deviceList'],
-		setup(props: any, context: any) {
-			const userInfo = useUserInfo()
-			const { userInfos } = storeToRefs(userInfo);
-			const state  = reactive<stateType>({
-				equipmentDialog: false,
-				form: {
-					operatorUids: [],
-					workType: 2,
-					workLevel: 0,
-					workContent: '',
-					workLocation: '',
-          maBaseId: null,
-					hazardIdentification: '',
-          cameraIds: [],
-					workDetail:{
-						csDepId: null,
-						csName: '',
-						csOriginalName: '',
-						otherSpecialWork: []
-					},
-          receiveUids: [],
-					workTimeLine: [],
-					expStartTime: '',
-					expEndTime: ''
-				},
-				csDepList: [
-					{
-						label: "单位一",
-						value: 1
-					},
-					{
-						label: "单位二",
-						value: 2
-					},
-					{
-						label: "单位三",
-						value: 3
-					},
-					{
-						label: "单位四",
-						value: 4
-					},
-					{
-						label: "单位五",
-						value: 5
-					},
-					{
-						label: "单位六",
-						value: 6
-					}
-				],
-				casProps: {
-					emitPath: false,
-					value: 'depId',
-					label: 'depName',
-					multiple: false,
-					expandTrigger: 'hover',
-					checkStrictly: true
-				},
-				otherWorkList: [
-					{
-						label: '动火作业',
-						value: 1
-					},
-					{
-						label: '受限空间作业',
-						value: 2
-					},
-					{
-						label: '吊装作业',
-						value: 3
-					},
-					{
-						label: '动土作业',
-						value: 4
-					},
-					{
-						label: '断路作业',
-						value: 5
-					},
-					{
-						label: '高处作业',
-						value: 6
-					},
-					{
-						label: '临时用电作业',
-						value: 7
-					},
-					{
-						label: '盲板抽堵作业',
-						value: 8
-					}
-				]
-			});
-      const material = ref()
-			const ruleFormRef = ref<FormInstance>()
-			const applyRules = reactive<FormRules>({
-				operatorUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				workType: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				workContent: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				workLocation: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				hazardIdentification: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-        cameraIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				workTimeLine: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				"workDetail.csDepId": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				"workDetail.csName": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
-				"workDetail.csOriginalName": [{ required: true, message: '该内容不能为空', trigger: 'blur' }]
-			});
-
-			// const toZero = (value: string | number,index: number,name: string,x:number) =>{
-			// 	if(!value){
-			// 		state.materialList[index][name][x].value = 0
-			// 	}
-			// }
-
-      const openMaList = ()=>{
-        if(state.form.operatorUids == []){
-          ElMessage({
-            type: 'warning',
-            message: '请先选择作业人再获取相应物资配置'
-          });
-        }else{
-          if(material.value.receiveUids.length==0){
-            material.value.receiveUids = state.form.operatorUids
-          }
-          material.value.getMaList(state.form.workType,state.form.workLevel)
-          material.value.workerList = props.workerList
-        }
-      }
-      const conFirmMaterials = (receiveUids: Array<number>,chosenId: number) =>{
-        state.form.maBaseId = null
-        state.form.receiveUids = []
-        state.form.receiveUids = receiveUids
-        state.form.maBaseId = chosenId
-      }
-
-			const submitForm = async (formEl: FormInstance | undefined) => {
-				if (!formEl) return
-				await formEl.validate(async (valid, fields) => {
-					if (valid) {
-						state.form.expStartTime = JSON.parse(JSON.stringify(state.form.workTimeLine))[0]
-						state.form.expEndTime = JSON.parse(JSON.stringify(state.form.workTimeLine))[1]
-						let { workTimeLine, ...data } = JSON.parse(JSON.stringify(state.form))
-						data.workDetail.otherSpecialWork = data.workDetail.otherSpecialWork.join(',')
-						console.log(data,'data')
-						const res = await workApplyApi().postSpaceApply(data)
-						if (res.data.code === '200') {
-								ElMessage({
-									type: 'success',
-									message: '提交成功!'
-								});
-								formEl.resetFields()
-						} else {
-							ElMessage({
-								type: 'warning',
-								message: res.data.msg
-							});
-						}
-            material.value.maBaseId = null
-            material.value.receiveUids = []
-					} else {
-						console.log('error submit!', fields)
-					}
-				})
-			}
-
-
-			// 折线图
-			const renderMenu = async (value: string) => {
-				Session.set('projectId',value)
-				userInfos.value.projectId = value
-				await initBackEndControlRoutes();
-			};
-			return {
-				renderMenu,
-				Search,
-				ruleFormRef,
-				applyRules,
-        material,
-        openMaList,
-        conFirmMaterials,
-				submitForm,
-				...toRefs(state),
-			};
-		},
-	});
-</script>
-
-<style scoped lang="scss">
-	.home-container {
-		height: 100%;
-		overflow: hidden;
-		position: relative;
-		.homeCard{
-			width: 100%;
-			padding: 20px;
-			box-sizing: border-box;
-			background: #fff;
-			border-radius: 4px;
-			margin-bottom: 20px;
-		}
-		.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%;
-		}
-		:deep(.el-cascader){
-			width: 100% !important;
-		}
-	}
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/zysq/index.vue b/src/views/specialWorkSystem/workTicket/zysq/index.vue
deleted file mode 100644
index 3584dfc..0000000
--- a/src/views/specialWorkSystem/workTicket/zysq/index.vue
+++ /dev/null
@@ -1,193 +0,0 @@
-<template>
-	<div class="home-container">
-		<el-tabs type="border-card" @tab-change="switchTab">
-			<el-tab-pane label="动火作业">
-				<fire-form ref="fire" :workerList = allWorkers :deviceList = allDevices></fire-form>
-			</el-tab-pane>
-			<el-tab-pane label="受限空间作业">
-				<space-form ref="space" :workerList = allWorkers :departList = departmentList :deviceList = allDevices></space-form>
-			</el-tab-pane>
-			<el-tab-pane label="吊装作业">
-				<hoist-form ref="hoist" :workerList = allWorkers :deviceList = allDevices></hoist-form>
-			</el-tab-pane>
-			<el-tab-pane label="动土作业">
-				<ground-form ref="ground" :workerList = allWorkers :departList = departmentList :deviceList = allDevices></ground-form>
-			</el-tab-pane>
-			<el-tab-pane label="断路作业">
-				<broken-form ref="broken" :workerList = allWorkers :departList = departmentList :deviceList = allDevices></broken-form>
-			</el-tab-pane>
-			<el-tab-pane label="高处作业">
-				<height-form ref="height" :workerList = allWorkers :departList = departmentList :deviceList = allDevices></height-form>
-			</el-tab-pane>
-			<el-tab-pane label="临时用电作业">
-				<power-form ref="power" :workerList = allWorkers :deviceList = allDevices></power-form>
-			</el-tab-pane>
-			<el-tab-pane label="盲板抽堵作业">
-				<plate-form ref="plate" :workerList = allWorkers :deviceList = allDevices></plate-form>
-			</el-tab-pane>
-		</el-tabs>
-    <material-dialog ref="material"></material-dialog>
-	</div>
-</template>
-
-<script lang="ts">
-	import {toRefs, reactive, defineComponent, ref, defineAsyncComponent, onMounted} from 'vue';
-	import { storeToRefs } from 'pinia';
-	import { initBackEndControlRoutes } from '/@/router/backEnd';
-	import {useUserInfo} from "/@/stores/userInfo";
-	import { Session } from '/@/utils/storage';
-	import { Search } from '@element-plus/icons-vue'
-	import { ElMessage } from 'element-plus'
-	import type { FormInstance, FormRules } from 'element-plus'
-	import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-	import {teamManageApi} from "/@/api/systemManage/basicDateManage/personShiftManage/teamManage";
-
-	interface stateType {
-		allWorkers: Array<any>
-		departmentList: Array<any>
-    allDevices: Array<any>
-	}
-	export default defineComponent({
-		name: 'apply',
-		components: {
-			fireForm: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/zysq/components/fire.vue')),
-			spaceForm: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/zysq/components/space.vue')),
-			hoistForm: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/zysq/components/hoist.vue')),
-			groundForm: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/zysq/components/ground.vue')),
-			brokenForm: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/zysq/components/broken.vue')),
-			heightForm: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/zysq/components/height.vue')),
-			powerForm: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/zysq/components/power.vue')),
-			plateForm: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/zysq/components/plate.vue')),
-      materialDialog: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/zysq/components/materialDialog.vue'))
-		},
-		setup() {
-			const userInfo = useUserInfo()
-			const { userInfos } = storeToRefs(userInfo);
-			const state  = reactive<stateType>({
-				allWorkers: [],
-				departmentList: [],
-        allDevices: []
-			});
-      const fire = ref()
-      const space = ref()
-      const hoist = ref()
-      const ground = ref()
-      const broken = ref()
-      const height = ref()
-      const power = ref()
-      const plate = ref()
-      const material = ref()
-			// 获取用户列表
-			const getAll = async ()=>{
-				const res = await workApplyApi().getAllUsers()
-				if (res.data.code === '200') {
-					state.allWorkers = JSON.parse(JSON.stringify(res.data.data))
-				} else {
-					ElMessage({
-						type: 'warning',
-						message: res.data.msg
-					});
-				}
-			};
-
-			// 获取部门列表
-			const getAllDepartment = async () => {
-				let res = await teamManageApi().getAllDepartment();
-				if (res.data.code === '200') {
-					state.departmentList = JSON.parse(JSON.stringify(res.data.data))
-				} else {
-					ElMessage({
-						type: 'warning',
-						message: res.data.msg
-					});
-				}
-			};
-
-      // 获取设备列表
-      const getAllDevice = async ()=>{
-        const res = await workApplyApi().getAllDevices()
-        if (res.data.code === '200') {
-          state.allDevices = JSON.parse(JSON.stringify(res.data.data))
-        } else {
-          ElMessage({
-            type: 'warning',
-            message: res.data.msg
-          });
-        }
-      };
-
-      const switchTab = (name)=>{
-        console.log(name,'name')
-        fire.value.form.resetFields()
-        material.value.maBaseId = null
-        material.value.receiveUids = []
-      }
-
-
-			// 页面载入时执行方法
-			onMounted(() => {
-				getAll();
-				getAllDepartment();
-        getAllDevice()
-			});
-
-			return {
-				...toRefs(state),
-        fire,
-        space,
-        broken,
-        ground,
-        height,
-        hoist,
-        plate,
-        power,
-        material,
-        switchTab
-			};
-		},
-	});
-</script>
-
-<style scoped lang="scss">
-	.home-container {
-		height: 100%;
-		overflow: hidden;
-		position: relative;
-		.homeCard{
-			width: 100%;
-			padding: 20px;
-			box-sizing: border-box;
-			background: #fff;
-			border-radius: 4px;
-			margin-bottom: 20px;
-		}
-		.applyBtn{
-			width: 100%;
-			background: #fff;
-			height: 80px;
-			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/menu/index.vue b/src/views/system/menu/index.vue
index c4a0e9b..1beb8fb 100644
--- a/src/views/system/menu/index.vue
+++ b/src/views/system/menu/index.vue
@@ -97,6 +97,7 @@
                 { id: '4', name: '智能安全巡检系统', key: 3 },
                 { id: '5', name: '智能安全风险综合预警预报平台', key: 4 },
                 { id: '6', name: '应急管理系统', key: 5 },
+                { id: '12', name: '监管数据融合互通系统', key: 11 },
                 { id: '7', name: '安全目标责任管理系统', key: 6 },
                 { id: '8', name: '安全事故管理系统', key: 7 },
                 { id: '9', name: '设备综合管控系统', key: 8 },
diff --git a/src/views/system/personShiftManage/scheduleManage/schedule/index.vue b/src/views/system/personShiftManage/scheduleManage/schedule/index.vue
index 1c49a53..5a1dec0 100644
--- a/src/views/system/personShiftManage/scheduleManage/schedule/index.vue
+++ b/src/views/system/personShiftManage/scheduleManage/schedule/index.vue
@@ -160,7 +160,6 @@
             departmentList: [],
             workerList: [],
             casProps: {
-                expandTrigger: 'hover',
                 emitPath: false,
                 value: 'depId',
                 label: 'depName'
diff --git a/src/views/system/role/component/roleDialog.vue b/src/views/system/role/component/roleDialog.vue
index 9bdaac2..253814a 100644
--- a/src/views/system/role/component/roleDialog.vue
+++ b/src/views/system/role/component/roleDialog.vue
@@ -46,9 +46,11 @@
     buttonName: string;
     isShowRoleDialog: boolean;
     roleForm: {
+      defaultFlag: number | null
         roleName: string;
         roleCode: string;
         roleInfo: string;
+      specialWorkFlag: number | null
     };
     menuData: Array<MenuDataTree>;
     menuProps: {
@@ -65,9 +67,11 @@
             title: '',
             buttonName: '',
             roleForm: {
+                defaultFlag: 0,
                 roleName: '', // 角色名称
                 roleCode: '', // 角色标识
-                roleInfo: '' // 排序
+                roleInfo: '', // 排序
+              specialWorkFlag: 0
             },
             menuData: [],
             menuProps: {
@@ -82,14 +86,22 @@
                 state.title = '新增角色';
                 state.buttonName = '新增';
                 state.roleForm = {
+                  defaultFlag: 0,
                     roleName: '',
                     roleCode: '',
-                    roleInfo: ''
+                    roleInfo: '',
+                  specialWorkFlag: 0
                 };
             } else {
                 state.title = '修改角色';
                 state.buttonName = '修改';
                 state.roleForm = JSON.parse(JSON.stringify(value));
+                if(!state.roleForm.defaultFlag){
+                  state.roleForm.defaultFlag = 0
+                }
+              if(!state.roleForm.specialWorkFlag){
+                state.roleForm.specialWorkFlag = 0
+              }
             }
         };
         // 新增
diff --git a/src/views/system/user/component/userDialog.vue b/src/views/system/user/component/userDialog.vue
index 3808e30..1570fce 100644
--- a/src/views/system/user/component/userDialog.vue
+++ b/src/views/system/user/component/userDialog.vue
@@ -93,7 +93,7 @@
 import { reactive, toRefs, onMounted, defineComponent, ref } from 'vue';
 import { ElMessageBox, ElMessage } from 'element-plus';
 import { userApi } from '/@/api/systemManage/user';
-import {verifyPwd} from "/@/utils/toolsValidate";
+import {verifyPhone, verifyPwd} from "/@/utils/toolsValidate";
 
 // 定义接口来定义对象的类型
 interface DeptData {}
@@ -134,6 +134,16 @@
     name: 'user',
     setup(props, context) {
         const userRef = ref()
+        const checkPhone = (rule: any, value: any, callback: any) => {
+          if (value == '') {
+            return callback(new Error('该内容不能为空'))
+          }
+          setTimeout(() => {
+            if (!verifyPhone(value)) {
+              callback(new Error('手机号格式不正确'))
+            }else callback();
+          }, 400)
+        }
         let validatePwd = (rule: any, value: any, callback: any)=>{
           if(value === ''){
             callback(new Error('请输入密码'))
@@ -170,7 +180,7 @@
                 roleIds: [{ required: true, message: '请选择用户角色', trigger: 'change' }],
                 depId: [{ required: true, message: '请选择部门', trigger: 'change' }],
                 positionIds: [{ required: true, message: '请选择职务', trigger: 'change' }],
-                phone: [{ required: true, message: '请填写手机号', trigger: 'blur' }],
+                phone: [{ required: true, validator: checkPhone, trigger: 'blur' }],
                 type: [{ required: true, message: '请填写用户类型', trigger: 'blur' }],
                 gender: [{ required: true, message: '请选择性别', trigger: 'change' }],
                 password: [{ required: true, validator: validatePwd, trigger: 'blur' }],
diff --git a/src/views/system/user/index.vue b/src/views/system/user/index.vue
index 9f0672f..5aca7e7 100644
--- a/src/views/system/user/index.vue
+++ b/src/views/system/user/index.vue
@@ -60,6 +60,7 @@
                     <template #default="scope">
                         <el-button :disabled="scope.row.userName === 'admin'" size="small" text type="primary" @click="onOpenUserDialog('查看', scope.row)">查看</el-button>
                         <el-button :disabled="scope.row.userName === 'admin'" size="small" text type="primary" @click="onOpenUserDialog('修改', scope.row)">修改</el-button>
+                        <el-button size="small" text type="primary" @click="onPwdDialog(scope.row.uid)">修改密码</el-button>
                         <el-button size="small" text type="primary" @click="onCertificate(scope.row)">证书管理</el-button>
                         <el-button style="color: red" :disabled="scope.row.userName === 'admin'" size="small" text type="primary" @click="onRowDel(scope.row)">删除</el-button>
                     </template>
@@ -72,6 +73,26 @@
         </el-card>
         <userDialog ref="userRef" @getUserList="initUserTableData" />
         <dialog-certificate ref="ctfRef" @getUserList="initUserTableData"></dialog-certificate>
+      <el-dialog title="修改密码" v-model="showPwdDialog" width="500px">
+        <el-form :model="pwdForm" size="default" ref="pwdRef" :rules="pwdFormRules" label-width="110px">
+          <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+            <el-form-item label="新密码" prop="newPassword">
+              <el-input v-model.trim="pwdForm.newPassword" placeholder="请输入" type="password" show-password>
+              </el-input>
+            </el-form-item>
+            <el-form-item label="确认新密码" prop="rePassword">
+              <el-input v-model.trim="pwdForm.rePassword" placeholder="请输入" type="password" show-password>
+              </el-input>
+            </el-form-item>
+          </el-col>
+        </el-form>
+        <template #footer>
+                <span class="dialog-footer">
+                    <el-button @click="showPwdDialog = !showPwdDialog" size="default">取 消</el-button>
+                    <el-button type="primary" v-throttle @click="onPwdSubmit" size="default">确 定</el-button>
+                </span>
+        </template>
+      </el-dialog>
     </div>
 </template>
 
@@ -84,6 +105,10 @@
 import { dutyApi } from '/@/api/systemManage/duty';
 import { departmentApi } from '/@/api/systemManage/department';
 import { useRoleApi } from '/@/api/systemManage/role';
+import {verifyPwd} from "/@/utils/toolsValidate";
+import {useLoginApi} from "/@/api/login";
+import {Session} from "/@/utils/storage";
+import Cookies from "js-cookie";
 
 // 定义接口来定义对象的类型
 interface TableDataRow {
@@ -121,6 +146,13 @@
     dutyList: [];
     userTypeList: Array<{id:number,name:string}>;
     props:{}
+    showPwdDialog: boolean
+    pwdForm: {
+      uid: number|string| null
+      newPassword: string
+      rePassword: string
+    }
+    pwdFormRules: {}
 }
 
 export default defineComponent({
@@ -128,7 +160,28 @@
     components: { userDialog,dialogCertificate },
     setup() {
         const userRef = ref();
+        const pwdRef = ref();
         const ctfRef = ref()
+        let validatePwd = (rule: any, value: any, callback: any)=>{
+          if(value === ''){
+            callback(new Error('请输入密码'))
+          }else{
+            if(!verifyPwd(value)){
+              callback(new Error('密码须包含字母、数字、特殊字符,长度在6-16之间'))
+            }else{
+              callback()
+            }
+          }
+        }
+      const equalToPassword = (rule: any, value: any, callback: any) => {
+        if(value == ''){
+          callback(new Error("请再次确认密码"))
+        }else if (state.pwdForm.newPassword !== value) {
+          callback(new Error("两次输入的密码不一致"))
+        } else {
+          callback();
+        }
+      };
         const state = reactive<TableDataState>({
             userTableData: {
                 data: [],
@@ -157,7 +210,17 @@
                 { id: 1, name: '超级管理员' },
                 { id: 2, name: '管理员' },
                 { id: 3, name: '普通员工' }
-            ]
+            ],
+          showPwdDialog: false,
+          pwdForm: {
+            uid: null,
+            newPassword: '',
+            rePassword: ''
+          },
+          pwdFormRules: {
+            newPassword: [{ required: true, validator: validatePwd, trigger: 'blur' }],
+            rePassword: [{ required: true, validator: equalToPassword, trigger: "blur" }]
+          }
         });
         // 初始化表格数据
         const initUserTableData = async () => {
@@ -218,6 +281,57 @@
             userRef.value.openDialog(type, value, state.departmentList, state.roleList, state.dutyList);
         };
 
+        const onPwdDialog = (uid: string)=>{
+          state.pwdForm = {
+            uid: uid,
+            newPassword: '',
+            rePassword: ''
+          }
+          state.showPwdDialog = true
+        }
+
+        const onPwdSubmit = async () => {
+          pwdRef.value.validate(async (valid:Boolean) => {
+            if(valid){
+              const {rePassword,...data} = state.pwdForm
+              let res = await userApi().pwdMod(data);
+              if (res.data.code === '200') {
+                state.showPwdDialog = false;
+                if(state.pwdForm.uid == Cookies.get('uid')){
+                  ElMessage({
+                    type: 'success',
+                    message: '密码修改成功,请重新登录',
+                    duration: 2000
+                  })
+                  setTimeout(()=>{
+                    useLoginApi()
+                        .signOut()
+                        .then(() => {
+                          Session.clear()
+                          window.location.href = '/'
+                        })
+                  },2000)
+                }else{
+                  ElMessage({
+                    type: 'success',
+                    message: '修改密码成功',
+                    duration: 2000
+                  })
+                }
+              } else {
+                ElMessage({
+                  type: 'warning',
+                  message: res.data.msg
+                });
+              }
+            }else{
+              ElMessage({
+                type:'warning',
+                message:'请完善信息'
+              })
+            }
+          })
+        }
         const onCertificate = (value: any)=>{
           ctfRef.value.openDialog(value);
         }
@@ -267,6 +381,9 @@
         return {
             userRef,
             ctfRef,
+          pwdRef,
+          onPwdDialog,
+          onPwdSubmit,
             onOpenUserDialog,
             onCertificate,
             onRowDel,

--
Gitblit v1.9.2