From e6ce09ca661049fd9a4034e4db5a7584cae5c1ec Mon Sep 17 00:00:00 2001
From: Your Name <123456>
Date: 星期二, 20 九月 2022 10:41:37 +0800
Subject: [PATCH] Merge branch 'master' of https://sinanoaq.cn:8888/r/gtqt

---
 src/views/specialWorkSystem/workTicket/allApplys/components/groundLog.vue      |  116 ++
 src/views/specialWorkSystem/workTicket/allApplys/components/hoistLog.vue       |  110 ++
 src/views/system/personShiftManage/scheduleManage/schedule/index.vue           |    6 
 src/views/system/appVersion/index.vue                                          |  673 ++++++++++++
 src/views/system/personShiftManage/scheduleManage/strategy/index.vue           |    6 
 src/views/specialWorkSystem/workTicket/allApplys/components/brokenLog.vue      |  116 ++
 src/views/specialWorkSystem/workTicket/allApplys/components/spaceLog.vue       |  113 ++
 src/views/specialWorkSystem/workPlan/reserveSum/index.vue                      |   26 
 src/views/system/menu/index.vue                                                |   16 
 src/views/specialWorkSystem/workPlan/workAppoint/index.vue                     |    6 
 src/views/riskWarningSys/warningBigScreen/index.vue                            |  230 ++++
 src/views/loginPage/component/accountLogin.vue                                 |  175 +++
 src/views/specialWorkSystem/workTicket/allApplys/components/powerLog.vue       |  113 ++
 src/views/specialWorkSystem/workTicket/allApplys/components/heightLog.vue      |  110 ++
 src/views/system/personShiftManage/personTimeManage/durationManage/index.vue   |    8 
 src/layout/navBars/breadcrumb/user.vue                                         |  184 ++-
 src/views/specialWorkSystem/workTicket/myApproval/index.vue                    |    2 
 src/views/system/personShiftManage/personTimeManage/timeStrategy/index.vue     |    8 
 src/views/specialWorkSystem/workTicket/allApplys/components/fireLog.vue        |  107 +
 src/views/system/personShiftManage/personTimeManage/workingHoursSet/index.vue  |    8 
 src/views/specialWorkSystem/workProcess/gasCheck/index.vue                     |    2 
 src/views/specialWorkSystem/workPlan/workReservation/index.vue                 |   42 
 src/views/specialWorkSystem/workTicket/myJobApply/index.vue                    |    4 
 src/views/specialWorkSystem/workTicket/allApplys/components/plateLog.vue       |  134 ++
 src/layout/navBars/breadcrumb/breadcrumb.vue                                   |    1 
 src/views/system/personShiftManage/personTimeManage/holidayTime/index.vue      |   12 
 src/views/specialWorkSystem/workTicket/allApplys/index.vue                     |  905 ++++++++++++++++
 src/views/accidentManagementSystem/workInjuryDeclaration/component/openAdd.vue |    4 
 src/views/system/personShiftManage/personTimeManage/holidayTimeGroup/index.vue |    8 
 src/views/specialWorkSystem/workProcess/workCheck/index.vue                    |    2 
 30 files changed, 3,118 insertions(+), 129 deletions(-)

diff --git a/src/layout/navBars/breadcrumb/breadcrumb.vue b/src/layout/navBars/breadcrumb/breadcrumb.vue
index 541a841..e66356e 100644
--- a/src/layout/navBars/breadcrumb/breadcrumb.vue
+++ b/src/layout/navBars/breadcrumb/breadcrumb.vue
@@ -124,7 +124,6 @@
 
 <style scoped lang="scss">
 .layout-navbars-breadcrumb {
-	flex: 1;
 	height: inherit;
 	display: flex;
 	align-items: center;
diff --git a/src/layout/navBars/breadcrumb/user.vue b/src/layout/navBars/breadcrumb/user.vue
index 993fbd9..b838098 100644
--- a/src/layout/navBars/breadcrumb/user.vue
+++ b/src/layout/navBars/breadcrumb/user.vue
@@ -2,7 +2,7 @@
     <div class="layout-navbars-breadcrumb-user pr15" :style="{ flex: layoutUserFlexNum }">
         <div class="logo">
             <img @click="toHome" src="../../../assets/menu/companyLogo.png" />
-            <span style="font-size: 32px; color: #409eff; font-weight: bolder; border-left: 2px solid #409eff; padding-left: 10px">{{ systemName }}</span>
+            <span>{{ systemName }}</span>
         </div>
         <div style="display: flex; align-items: center; padding-right: 5px">
             <div @click="backToMenu()" class="backBtn">返回首页</div>
@@ -298,71 +298,133 @@
 </script>
 
 <style scoped lang="scss">
-.layout-navbars-breadcrumb-user {
-    display: flex;
-    align-items: center;
-    justify-content: space-between;
-
-    .logo {
-        height: 75%;
-        padding: 5px 10px;
-        display: flex;
-        align-items: center;
-        overflow: hidden;
-        box-sizing: border-box;
-        img {
-            height: 100%;
+    @media screen and (min-width: 1400px) {
+        .logo{
+            img {
+                height: 100%;
+                cursor: pointer;
+            }
+            span{
+                font-size: 32px;
+                color: #409eff;
+                font-weight: bolder;
+                border-left: 2px solid #409eff;
+                padding-left: 10px
+            }
+        }
+        .backBtn {
+            font-size: 16px;
             cursor: pointer;
-        }
-    }
-    &-link {
-        height: 100%;
-        display: flex;
-        align-items: center;
-        white-space: nowrap;
-        &-photo {
-            width: 25px;
-            height: 25px;
-            border-radius: 100%;
-        }
-    }
-    &-icon {
-        padding: 0 10px;
-        cursor: pointer;
-        color: var(--next-bg-topBarColor);
-        height: 80px;
-        line-height: 80px;
-        display: flex;
-        align-items: center;
-        &:hover {
-            background: var(--next-color-user-hover);
-            i {
-                display: inline-block;
-                animation: logoAnimation 0.3s ease-in-out;
+            margin-right: 20px;
+
+            &:hover {
+                color: #409eff;
+                font-weight: bolder;
             }
         }
     }
-    ::v-deep(.el-dropdown) {
-        color: var(--next-bg-topBarColor);
-    }
-    ::v-deep(.el-badge) {
-        height: 40px;
-        line-height: 40px;
-        display: flex;
-        align-items: center;
-    }
-    ::v-deep(.el-badge__content.is-fixed) {
-        top: 12px;
-    }
-    .backBtn {
-        font-size: 16px;
-        cursor: pointer;
-        margin-right: 20px;
+    @media screen and (min-width: 1200px) and (max-width: 1400px) {
+        .logo{
+            img {
+                height: 90%;
+                cursor: pointer;
+            }
+            span{
+                font-size: 28px;
+                color: #409eff;
+                font-weight: bolder;
+                border-left: 2px solid #409eff;
+                padding-left: 10px
+            }
+        }
+        .backBtn {
+            font-size: 14px;
+            cursor: pointer;
+            margin-right: 20px;
 
-        &:hover {
-            color: #409eff;
-            font-weight: bolder;
+            &:hover {
+                color: #409eff;
+                font-weight: bolder;
+            }
         }
     }
-}
+    @media screen and (max-width: 1024px) {
+        .logo{
+            img {
+                width: 60%;
+                height: auto;
+                cursor: pointer;
+            }
+            span{
+                font-size: 22px;
+                color: #409eff;
+                font-weight: bolder;
+                border-left: 2px solid #409eff;
+                padding-left: 10px
+            }
+        }
+        .backBtn {
+            font-size: 12px;
+            cursor: pointer;
+            margin-right: 20px;
+
+            &:hover {
+                color: #409eff;
+                font-weight: bolder;
+            }
+        }
+    }
+    .layout-navbars-breadcrumb-user {
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
+
+        .logo {
+            height: 75%;
+            padding: 5px 10px;
+            display: flex;
+            align-items: center;
+            overflow: hidden;
+            box-sizing: border-box;
+        }
+        &-link {
+            height: 100%;
+            display: flex;
+            align-items: center;
+            white-space: nowrap;
+            &-photo {
+                width: 25px;
+                height: 25px;
+                border-radius: 100%;
+            }
+        }
+        &-icon {
+            padding: 0 10px;
+            cursor: pointer;
+            color: var(--next-bg-topBarColor);
+            height: 80px;
+            line-height: 80px;
+            display: flex;
+            align-items: center;
+            &:hover {
+                background: var(--next-color-user-hover);
+                i {
+                    display: inline-block;
+                    animation: logoAnimation 0.3s ease-in-out;
+                }
+            }
+        }
+        ::v-deep(.el-dropdown) {
+            color: var(--next-bg-topBarColor);
+        }
+        ::v-deep(.el-badge) {
+            height: 40px;
+            line-height: 40px;
+            display: flex;
+            align-items: center;
+        }
+        ::v-deep(.el-badge__content.is-fixed) {
+            top: 12px;
+        }
+    }
 </style>
diff --git a/src/views/accidentManagementSystem/workInjuryDeclaration/component/openAdd.vue b/src/views/accidentManagementSystem/workInjuryDeclaration/component/openAdd.vue
index 2c82752..cccc214 100644
--- a/src/views/accidentManagementSystem/workInjuryDeclaration/component/openAdd.vue
+++ b/src/views/accidentManagementSystem/workInjuryDeclaration/component/openAdd.vue
@@ -530,10 +530,10 @@
 .textarea {
 	height: 168px !important;
 }
-.textarea ::v-deep .el-textarea__inner {
+.textarea ::v-deep(.el-textarea__inner) {
 	height: 168px !important;
 }
-::v-deep .el-table__cell {
+::v-deep(.el-table__cell) {
 	font-weight: 400;
 }
 .el-divider--horizontal {
diff --git a/src/views/loginPage/component/accountLogin.vue b/src/views/loginPage/component/accountLogin.vue
index 8da2b39..a7d06a9 100644
--- a/src/views/loginPage/component/accountLogin.vue
+++ b/src/views/loginPage/component/accountLogin.vue
@@ -19,7 +19,7 @@
         </el-form-item>
         <el-form-item class="login-animation4 codeDeal">
             <el-checkbox v-model="saveCode" label="记住密码" size="large" />
-            <span class="forgetCode">忘记密码?</span>
+            <span class="forgetCode" @click="identify">忘记密码?</span>
         </el-form-item>
         <el-form-item class="login-animation4">
             <el-button type="primary" class="login-content-submit" round @click="onSignIn" :loading="loading.signIn">
@@ -27,10 +27,49 @@
             </el-button>
         </el-form-item>
     </el-form>
+    <el-dialog v-model="identifyDialog" title="重置密码须进行身份校验(仅供测试)" width="30%" center @close="clearIdentity">
+        <el-form :model="identity" label-width="80px" ref="identifyRef" :rules="identityRules">
+            <el-form-item label="姓名" prop="userName">
+                <el-input v-model="identity.userName"/>
+            </el-form-item>
+            <el-form-item label="身份证号" prop="ID">
+                <el-input v-model="identity.ID"/>
+            </el-form-item>
+            <el-form-item label="手机号" prop="phone">
+                <el-input v-model="identity.phone"/>
+            </el-form-item>
+        </el-form>
+        <template #footer>
+              <span class="dialog-footer">
+                <el-button type="warning" @click="identifyDialog = false" size="default">取消</el-button>
+                <el-button type="primary" @click="confirmIdentity(identifyRef)" size="default">确认</el-button>
+              </span>
+        </template>
+    </el-dialog>
+    <el-dialog v-model="changeDialog" title="修改密码" width="30%" center @close="clearCode">
+        <el-form :model="codeForm" label-width="80px" ref="codeRef" :rules="codeRules">
+            <el-form-item label="密码" prop="pass">
+                <el-input v-model="codeForm.pass" type="password" autocomplete="off" />
+            </el-form-item>
+            <el-form-item label="确认密码" prop="checkPass">
+                <el-input
+                        v-model="codeForm.checkPass"
+                        type="password"
+                        autocomplete="off"
+                />
+            </el-form-item>
+        </el-form>
+        <template #footer>
+              <span class="dialog-footer">
+                <el-button type="warning" @click="changeDialog = false" size="default">取消</el-button>
+                <el-button type="primary" @click="confirmChange(codeRef)" size="default">确认修改</el-button>
+              </span>
+        </template>
+    </el-dialog>
 </template>
 
 <script lang="ts">
-import { toRefs, reactive, defineComponent, computed } from 'vue';
+import {toRefs, reactive, defineComponent, computed, ref} from 'vue';
 import { useRoute, useRouter } from 'vue-router';
 import { ElMessage } from 'element-plus';
 import { useI18n } from 'vue-i18n';
@@ -44,7 +83,10 @@
 import { NextLoading } from '/@/utils/loading';
 import { useLoginApi } from '/@/api/login';
 import { useUserInfo } from '/@/stores/userInfo';
-
+import { ElMessage } from 'element-plus'
+import type { FormInstance, FormRules } from 'element-plus'
+import {workApplyApi} from "/@/api/specialWorkSystem/workApply";
+import {verifyPhone,verifyIdCard} from "/@/utils/toolsValidate"
 export default defineComponent({
     name: 'accountLogin',
     setup() {
@@ -60,8 +102,47 @@
             },
             loading: {
                 signIn: false
-            }
+            },
+            identity:{
+                name: '',
+                ID: '',
+                phone: ''
+            },
+            codeForm:{
+                pass: '',
+                checkPass: ''
+            },
+            identifyDialog: false,
+            changeDialog: false
         });
+        const identifyRef = ref<FormInstance>()
+        const codeRef = ref<FormInstance>()
+        const checkCode = (rule: any, value: any, callback: any) => {
+            if (value == '') {
+                return callback(new Error('该内容不能为空'))
+            }
+            setTimeout(() => {
+                if (!verifyIdCard(value)) {
+                    callback(new Error('身份证格式不正确'))
+                }else callback();
+            }, 400)
+        }
+        const checkPhone = (rule: any, value: any, callback: any) => {
+            if (value == '') {
+                return callback(new Error('该内容不能为空'))
+            }
+            setTimeout(() => {
+                if (!verifyPhone(value)) {
+                    callback(new Error('手机号格式不正确'))
+                }else callback();
+            }, 400)
+        }
+        const identityRules = reactive({
+            userName: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+            ID: [{ required: true, validator: checkCode, trigger: 'blur'}],
+            phone: [{ required: true, validator: checkPhone, trigger: 'blur' }]
+        });
+
         // 时间获取
         const currentTime = computed(() => {
             return formatAxis(new Date());
@@ -126,8 +207,94 @@
             // 添加 loading,防止第一次进入界面时出现短暂空白
             // NextLoading.start();
         };
+
+        // 修改密码
+        const identify =()=>{
+            state.identifyDialog = true
+        }
+
+        // 提交验证
+        const confirmIdentity = (formEl: FormInstance | undefined) => {
+            if (!formEl) return
+            formEl.validate((valid) => {
+                if (valid) {
+                    state.identifyDialog = false
+                    state.changeDialog = true
+                } else {
+                    console.log('error submit!')
+                    return false
+                }
+            })
+        }
+        const clearIdentity = ()=>{
+            state.identity = {
+                name: '',
+                ID: '',
+                phone: ''
+            }
+        }
+        // 修改密码
+        const validatePass = (rule: any, value: any, callback: any) => {
+            if (value === '') {
+                callback(new Error('请输入密码'))
+            } else {
+                if (state.codeForm.checkPass !== '') {
+                    if (!codeRef.value) return
+                    codeRef.value.validateField('checkPass', () => null)
+                }
+                callback()
+            }
+        }
+        const validatePass2 = (rule: any, value: any, callback: any) => {
+            if (value === '') {
+                callback(new Error('请输入密码'))
+            } else if (value !== state.codeForm.pass) {
+                callback(new Error("两次输入的密码不一致!"))
+            } else {
+                callback()
+            }
+        }
+
+        const codeRules = reactive({
+            pass: [{ required: true, validator: validatePass, trigger: 'blur' }],
+            checkPass: [{ required: true, validator: validatePass2, trigger: 'blur' }]
+        })
+
+        const confirmChange = (formEl: FormInstance | undefined) => {
+            if (!formEl) return
+            formEl.validate((valid) => {
+                if (valid) {
+                    ElMessage({
+                        type: 'success',
+                        message: '修改成功,请使用新密码登录'
+                    });
+                    state.changeDialog = false
+                    router.push('/login');
+                } else {
+                    console.log('error submit!')
+                    return false
+                }
+            })
+        }
+        const clearCode=()=>{
+            state.codeForm = {
+                pass: '',
+                checkPass: ''
+            }
+        }
         return {
+            identifyRef,
+            codeRef,
+            identityRules,
+            codeRules,
+            clearIdentity,
             onSignIn,
+            identify,
+            confirmIdentity,
+            confirmChange,
+            clearCode,
+            validatePass,
+            validatePass2,
             ...toRefs(state)
         };
     }
diff --git a/src/views/riskWarningSys/warningBigScreen/index.vue b/src/views/riskWarningSys/warningBigScreen/index.vue
index d8744f2..25941cb 100644
--- a/src/views/riskWarningSys/warningBigScreen/index.vue
+++ b/src/views/riskWarningSys/warningBigScreen/index.vue
@@ -1,5 +1,25 @@
 <template>
     <div id="container" class="dark">
+        <div class="warn-dialog" :class="dialogShow">
+            <div>预警消息</div>
+            <p>企业8月份总体安全生产预警指数SPI风险值高于预警阈值,可能存在未处理隐患,请注意查阅相关风险因素,采取风险防控措施。</p>
+            <span @click="dialogShow = 'hide'">关闭</span>
+        </div>
+        <div class="info-panel" :class="dialogHide"  @click="openDialog">
+            <div class="info-tit">
+                <div>
+                    <el-icon><Bell /></el-icon>
+                    <div style="margin-left: 10px">消息预警</div>
+                </div>
+                <div @click.stop="dialogHide = 'hide'">X</div>
+            </div>
+            <div class="info-desc">
+                企业8月份总体安全生产预警指数SPI风险值高于预警阈值。
+            </div>
+            <div class="info-num">
+                1
+            </div>
+        </div>
         <div class="header-content">
             <div class="logo">
                 <img v-if="screenTheme.isDark" src="../../../assets/warningScreen/logo_dark.png" alt="" />
@@ -170,7 +190,9 @@
         isScreenfull: boolean;
         currentTime: string;
         spiValue: number;
-        spiOptions: Array<any>
+        spiOptions: Array<any>;
+        dialogShow: string;
+        dialogHide: string
     }
     export default defineComponent({
         name: 'warningScreen',
@@ -201,6 +223,8 @@
                 isScreenfull: false,
                 currentTime: '',
                 spiValue: 0,
+                dialogShow: 'hide',
+                dialogHide: 'showup',
                 spiOptions: [
                     {
                         value: 0,
@@ -303,6 +327,18 @@
                 });
             };
 
+            const openDialog = () => {
+                if(state.dialogShow == 'hide'){
+                    state.dialogShow = 'showup'
+                }else{
+                    state.dialogShow = 'hide'
+                }
+            };
+
+            const closeInfo = ()=>{
+                state.dialogHide = 'hide'
+            };
+
             const jumpPage = (num) =>{
                 router.push({
                     path: 'screenPage',
@@ -335,6 +371,8 @@
                 router,
                 props,
                 screenTheme,
+                openDialog,
+                closeInfo,
                 changeTheme,
                 onScreenfullClick,
                 jumpPage,
@@ -347,6 +385,13 @@
 
 <style scoped lang="scss">
     $homeNavLengh: 8;
+    .hide{
+        display: none;
+    }
+
+    .showup{
+        display: block;
+    }
     .dark {
         width: 100%;
         height: 100%;
@@ -356,6 +401,97 @@
         background: url('../../../assets/warningScreen/riskprocast.jpg') no-repeat center;
         background-size: 100% 100%;
         color: #11FEEE;
+
+        .warn-dialog{
+            position: absolute;
+            z-index: 999999;
+            top: 25%;
+            left: 50%;
+            width: 50%;
+            height: 50%;
+            transform: translateX(-50%);
+            border-radius: 8px;
+            transition: .3s;
+            box-shadow: 0 15px 30px rgba(0,0,0,.2);
+            border: 1px solid rgba(17,254,238,.4);
+            padding: 1.5rem;
+            background: rgba(0,16,32,.8);
+
+            div{
+                font-size: 1.5rem;
+                text-align: center;
+            }
+
+            p{
+                margin-top: 20px;
+                font-size: 1.125rem;
+                line-height: 28px;
+                text-align: left
+            }
+
+            span{
+                position: inherit;
+                right: 20px;
+                top: 20px;
+                font-size: 1rem;
+                cursor: pointer;
+            }
+        }
+
+        .info-panel{
+            position: absolute;
+            width: 20%;
+            right: 50px;
+            bottom: 50px;
+            z-index: 9999999;
+            font-size: 1rem;
+            padding: 0 10px;
+            border-radius: 4px;
+            cursor: pointer;
+            box-shadow: 0 15px 30px rgba(0,0,0,.2);
+            border: 1px solid rgba(17,254,238,.4);
+            background: rgba(0,16,32,.8);
+
+            .info-tit{
+                display: flex;
+                align-items: center;
+                padding: 10px;
+                border-bottom: 1px solid rgba(17,254,238,.4);
+                justify-content: space-between;
+
+                &>div{
+                    display: flex;
+                    align-items: center;
+
+                    img{
+                        width: 18px;
+                        height: 18px;
+                        margin-right: 10px;
+                    }
+                }
+            }
+
+            .info-desc{
+                padding: 15px 10px;
+                white-space: nowrap;
+                text-overflow: ellipsis;
+                overflow: hidden;
+            }
+            .info-num{
+                position: inherit;
+                width: 24px;
+                height: 24px;
+                line-height: 24px;
+                text-align: center;
+                left: -12px;
+                top: -12px;
+                color: #fff;
+                z-index: 999999999;
+                border-radius: 50%;
+                border: 1px solid #ff0000;
+                background: #ff0000;
+            }
+        }
 
         .header-content {
             width: 100%;
@@ -576,6 +712,98 @@
         background-size: 100% 100%;
         color: #000;
 
+        .warn-dialog{
+            position: absolute;
+            z-index: 999999;
+            top: 25%;
+            left: 50%;
+            width: 50%;
+            height: 50%;
+            transform: translateX(-50%);
+            border-radius: 8px;
+            transition: .3s;
+            box-shadow: 0 15px 30px rgba(0,0,0,.2);
+            border: 1px solid #ccc;
+            padding: 1.5rem;
+            background: #fff;
+
+            div{
+                font-size: 1.5rem;
+                text-align: center;
+            }
+
+            p{
+                margin-top: 20px;
+                font-size: 1.125rem;
+                line-height: 28px;
+                text-align: left
+            }
+
+            span{
+                position: inherit;
+                right: 20px;
+                top: 20px;
+                font-size: 1rem;
+                cursor: pointer;
+            }
+        }
+
+        .info-panel{
+            position: absolute;
+            width: 20%;
+            right: 50px;
+            bottom: 50px;
+            z-index: 9999999;
+            font-size: 1rem;
+            color: #333;
+            padding: 0 10px;
+            border-radius: 4px;
+            cursor: pointer;
+            box-shadow: 0 15px 30px rgba(0,0,0,.2);
+            border: 1px solid #ccc;
+            background: #fff;
+
+            .info-tit{
+                display: flex;
+                align-items: center;
+                padding: 10px;
+                border-bottom: 1px solid #ccc;
+                justify-content: space-between;
+
+                &>div{
+                    display: flex;
+                    align-items: center;
+
+                    img{
+                        width: 18px;
+                        height: 18px;
+                        margin-right: 10px;
+                    }
+                }
+            }
+
+            .info-desc{
+                padding: 15px 10px;
+                white-space: nowrap;
+                text-overflow: ellipsis;
+                overflow: hidden;
+            }
+            .info-num{
+                position: inherit;
+                width: 24px;
+                height: 24px;
+                line-height: 24px;
+                text-align: center;
+                left: -12px;
+                top: -12px;
+                color: #fff;
+                z-index: 999999999;
+                border-radius: 50%;
+                border: 1px solid #ff0000;
+                background: #ff0000;
+            }
+        }
+
         .header-content {
             width: 100%;
             height: 7.8%;
diff --git a/src/views/specialWorkSystem/workPlan/reserveSum/index.vue b/src/views/specialWorkSystem/workPlan/reserveSum/index.vue
index 09fcc2d..a1ecf9f 100644
--- a/src/views/specialWorkSystem/workPlan/reserveSum/index.vue
+++ b/src/views/specialWorkSystem/workPlan/reserveSum/index.vue
@@ -156,9 +156,31 @@
 				option = {
 					tooltip: {
 						trigger: 'axis',
+						// axisPointer: {
+						// 	type: 'shadow' // 'shadow' as default; can also be 'line' or 'shadow'
+						// },
 						axisPointer: {
-							type: 'shadow' // 'shadow' as default; can also be 'line' or 'shadow'
-						}
+							type: "cross",
+							label: {
+								formatter: function (params) {
+									if (params.seriesData.length === 0) {
+										window.mouseCurValue = params.value;
+									}
+								}
+							}
+						},
+						formatter: function (params) {
+							let res = "", sum = 0;
+							for (let i = 0; i < params.length; i++) {
+								let series = params[i];
+								sum += Number(series.data);
+								if (sum >= window.mouseCurValue) {
+									res = series.axisValue + "<br/>" + series.marker + series.seriesName + ":" + series.data + "<br/>";
+									break;
+								}
+							}
+							return res;
+						},
 					},
 					legend: {},
 					grid: {
diff --git a/src/views/specialWorkSystem/workPlan/workAppoint/index.vue b/src/views/specialWorkSystem/workPlan/workAppoint/index.vue
index 6430e3a..8a62f68 100644
--- a/src/views/specialWorkSystem/workPlan/workAppoint/index.vue
+++ b/src/views/specialWorkSystem/workPlan/workAppoint/index.vue
@@ -369,7 +369,7 @@
 				if (res.data.code === '200') {
 					ElMessage({
 						type: 'success',
-						message: res.data.msg
+						message: '添加成功!'
 					});
 					getListByPage();
 				} else {
@@ -386,7 +386,7 @@
 				if (res.data.code === '200') {
 					ElMessage({
 						type: 'success',
-						message: res.data.msg
+						message: '修改成功!'
 					});
 					getListByPage();
 				} else {
@@ -463,7 +463,7 @@
 				if (res.data.code === '200') {
 					ElMessage({
 						type: 'success',
-						message: res.data.msg
+						message: '删除成功!'
 					});
 					getListByPage();
 				} else {
diff --git a/src/views/specialWorkSystem/workPlan/workReservation/index.vue b/src/views/specialWorkSystem/workPlan/workReservation/index.vue
index 8e696b2..ae30465 100644
--- a/src/views/specialWorkSystem/workPlan/workReservation/index.vue
+++ b/src/views/specialWorkSystem/workPlan/workReservation/index.vue
@@ -2,12 +2,12 @@
 	<div class="home-container">
 		<div style="height: 100%">
 			<el-row class="homeCard">
-				<el-col :span="6" 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="6" 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="6" style="display:flex;align-items: center;">
 					<span style="white-space: nowrap;margin-left: 20px">预约日期:</span>
 					<div class="grid-content topInfo">
@@ -142,55 +142,72 @@
 		</el-dialog>
 		<el-dialog v-model="dialogAddRecord" title="作业预约编辑" @close="closeAdd">
 			<el-form :model="addRecord" label-width="120px" ref="addRef" :rules="addRules">
-				<el-form-item label="申请部门" prop="applyDepId">
-					<el-cascader placeholder="若选择部门非本人所在部门,则记录不会出现在该页面" :disabled = isDisabled v-model="addRecord.applyDepId" :options="departmentList" :props="casProps" :show-all-levels="false" @change="handleChange" />
-				</el-form-item>
+<!--				<el-form-item label="申请部门" prop="applyDepId">-->
+<!--					<el-cascader placeholder="若选择部门非本人所在部门,则记录不会出现在该页面" :disabled = isDisabled v-model="addRecord.applyDepId" :options="departmentList" :props="casProps" :show-all-levels="false" @change="handleChange" />-->
+<!--				</el-form-item>-->
 				<el-form-item label="预约时间" prop="appointmentTime">
 					<el-date-picker
 							v-model="addRecord.appointmentTime"
 							type="date"
 							format="YYYY-MM-DD" value-format="YYYY-MM-DD"
 							:disabled = isDisabled
+							placeholder="请选择预约时间段"
 					/>
 				</el-form-item>
 				<el-form-item label="动火作业" prop="hotWork">
 					<el-input
 							v-model="addRecord.hotWork"
+							type="number"
+							placeholder="预约数量(没有则为0)"
 					/>
 				</el-form-item>
 				<el-form-item label="受限空间作业" prop="confinedSpaceOper">
 					<el-input
 							v-model="addRecord.confinedSpaceOper"
+							type="number"
+							placeholder="预约数量(没有则为0)"
 					/>
 				</el-form-item>
 				<el-form-item label="吊装作业" prop="liftingOper">
 					<el-input
 							v-model="addRecord.liftingOper"
+							type="number"
+							placeholder="预约数量(没有则为0)"
 					/>
 				</el-form-item>
 				<el-form-item label="动土作业" prop="groundBreakingOper">
 					<el-input
 							v-model="addRecord.groundBreakingOper"
+							type="number"
+							placeholder="预约数量(没有则为0)"
 					/>
 				</el-form-item>
 				<el-form-item label="断路作业" prop="openCircuitOper">
 					<el-input
 							v-model="addRecord.openCircuitOper"
+							type="number"
+							placeholder="预约数量(没有则为0)"
 					/>
 				</el-form-item>
 				<el-form-item label="高处作业" prop="workAtHeight">
 					<el-input
 							v-model="addRecord.workAtHeight"
+							type="number"
+							placeholder="预约数量(没有则为0)"
 					/>
 				</el-form-item>
 				<el-form-item label="临时用电作业" prop="temporaryPowerOper">
 					<el-input
 							v-model="addRecord.temporaryPowerOper"
+							type="number"
+							placeholder="预约数量(没有则为0)"
 					/>
 				</el-form-item>
 				<el-form-item label="盲板抽堵作业" prop="blindPlatePluggingOper">
 					<el-input
 							v-model="addRecord.blindPlatePluggingOper"
+							type="number"
+							placeholder="预约数量(没有则为0)"
 					/>
 				</el-form-item>
 			</el-form>
@@ -299,7 +316,6 @@
 
 			const addRef = ref<FormInstance>();
 			const addRules = reactive<FormRules>({
-				applyDepId: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
 				appointmentTime: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
 				hotWork: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
 				groundBreakingOper: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
@@ -369,7 +385,7 @@
 				if (res.data.code === '200') {
 					ElMessage({
 						type: 'success',
-						message: res.data.msg
+						message: '添加成功!'
 					});
 					getListByPage();
 				} else {
@@ -386,7 +402,7 @@
 				if (res.data.code === '200') {
 					ElMessage({
 						type: 'success',
-						message: res.data.msg
+						message: '修改成功!'
 					});
 					getListByPage();
 				} else {
@@ -463,7 +479,7 @@
 				if (res.data.code === '200') {
 					ElMessage({
 						type: 'success',
-						message: res.data.msg
+						message: '删除成功!'
 					});
 					getListByPage();
 				} else {
diff --git a/src/views/specialWorkSystem/workProcess/gasCheck/index.vue b/src/views/specialWorkSystem/workProcess/gasCheck/index.vue
index 4c44f17..a724e75 100644
--- a/src/views/specialWorkSystem/workProcess/gasCheck/index.vue
+++ b/src/views/specialWorkSystem/workProcess/gasCheck/index.vue
@@ -325,7 +325,7 @@
 				if (res.data.code === '200') {
 					ElMessage({
 						type: 'success',
-						message: res.data.msg
+						message: '添加成功!'
 					});
 					getListByPage();
 				} else {
diff --git a/src/views/specialWorkSystem/workProcess/workCheck/index.vue b/src/views/specialWorkSystem/workProcess/workCheck/index.vue
index 79adf36..cc23da6 100644
--- a/src/views/specialWorkSystem/workProcess/workCheck/index.vue
+++ b/src/views/specialWorkSystem/workProcess/workCheck/index.vue
@@ -436,7 +436,7 @@
 				if (res.data.code === '200') {
 					ElMessage({
 						type: 'success',
-						message: res.data.msg
+						message: '添加成功!'
 					});
 					getListByPage();
 				} else {
diff --git a/src/views/specialWorkSystem/workTicket/allApplys/components/brokenLog.vue b/src/views/specialWorkSystem/workTicket/allApplys/components/brokenLog.vue
new file mode 100644
index 0000000..b87725d
--- /dev/null
+++ b/src/views/specialWorkSystem/workTicket/allApplys/components/brokenLog.vue
@@ -0,0 +1,116 @@
+<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="期望开始时间">
+				<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/allApplys/components/fireLog.vue b/src/views/specialWorkSystem/workTicket/allApplys/components/fireLog.vue
new file mode 100644
index 0000000..5bf55f2
--- /dev/null
+++ b/src/views/specialWorkSystem/workTicket/allApplys/components/fireLog.vue
@@ -0,0 +1,107 @@
+<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.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/allApplys/components/groundLog.vue b/src/views/specialWorkSystem/workTicket/allApplys/components/groundLog.vue
new file mode 100644
index 0000000..e05a39b
--- /dev/null
+++ b/src/views/specialWorkSystem/workTicket/allApplys/components/groundLog.vue
@@ -0,0 +1,116 @@
+<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.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/allApplys/components/heightLog.vue b/src/views/specialWorkSystem/workTicket/allApplys/components/heightLog.vue
new file mode 100644
index 0000000..179d224
--- /dev/null
+++ b/src/views/specialWorkSystem/workTicket/allApplys/components/heightLog.vue
@@ -0,0 +1,110 @@
+<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="关联其他作业">
+				<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/allApplys/components/hoistLog.vue b/src/views/specialWorkSystem/workTicket/allApplys/components/hoistLog.vue
new file mode 100644
index 0000000..0e4e53b
--- /dev/null
+++ b/src/views/specialWorkSystem/workTicket/allApplys/components/hoistLog.vue
@@ -0,0 +1,110 @@
+<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.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/allApplys/components/plateLog.vue b/src/views/specialWorkSystem/workTicket/allApplys/components/plateLog.vue
new file mode 100644
index 0000000..142b69d
--- /dev/null
+++ b/src/views/specialWorkSystem/workTicket/allApplys/components/plateLog.vue
@@ -0,0 +1,134 @@
+<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.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/allApplys/components/powerLog.vue b/src/views/specialWorkSystem/workTicket/allApplys/components/powerLog.vue
new file mode 100644
index 0000000..7c3b754
--- /dev/null
+++ b/src/views/specialWorkSystem/workTicket/allApplys/components/powerLog.vue
@@ -0,0 +1,113 @@
+<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.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/allApplys/components/spaceLog.vue b/src/views/specialWorkSystem/workTicket/allApplys/components/spaceLog.vue
new file mode 100644
index 0000000..4b65d15
--- /dev/null
+++ b/src/views/specialWorkSystem/workTicket/allApplys/components/spaceLog.vue
@@ -0,0 +1,113 @@
+<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.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/allApplys/index.vue b/src/views/specialWorkSystem/workTicket/allApplys/index.vue
new file mode 100644
index 0000000..a720953
--- /dev/null
+++ b/src/views/specialWorkSystem/workTicket/allApplys/index.vue
@@ -0,0 +1,905 @@
+<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="5" 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="date"
+                                        format="YYYY-MM-DD" value-format="YYYY-MM-DD"
+                                />
+                            </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" />
+                                <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>
+                                        <el-button 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">
+                                        审批类型:<span>{{ item.typeDesc }}</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>
+                    <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>;
+    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: string;
+    searchDep: number | null;
+    searchDate: 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/myJobApply/components/fireLog.vue')),
+        space: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/myJobApply/components/spaceLog.vue')),
+        hoist: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/myJobApply/components/hoistLog.vue')),
+        ground: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/myJobApply/components/groundLog.vue')),
+        broken: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/myJobApply/components/brokenLog.vue')),
+        height: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/myJobApply/components/heightLog.vue')),
+        power: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/myJobApply/components/powerLog.vue')),
+        plate: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/myJobApply/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: '',
+            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: 'workApply'
+            });
+        };
+
+        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));
+                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 == ''&& state.searchDep == null && state.searchDate == '') {
+                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/printing`,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/vnd.openxmlformats-officedocument.wordprocessingml.document'})
+                    link.style.display = "none";
+                    link.href = URL.createObjectURL(blob); // 创建URL
+                    link.setAttribute("download", state.downLoadName + "作业证.docx");
+                    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 {
+                        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/myApproval/index.vue b/src/views/specialWorkSystem/workTicket/myApproval/index.vue
index 3c207b0..2d3e22c 100644
--- a/src/views/specialWorkSystem/workTicket/myApproval/index.vue
+++ b/src/views/specialWorkSystem/workTicket/myApproval/index.vue
@@ -418,7 +418,7 @@
             if (res.data.code === '200') {
                 ElMessage({
                     type: 'success',
-                    message: res.data.msg
+                    message: '取消成功!'
                 });
                 getListByPage();
             } else {
diff --git a/src/views/specialWorkSystem/workTicket/myJobApply/index.vue b/src/views/specialWorkSystem/workTicket/myJobApply/index.vue
index bd1a108..a88f732 100644
--- a/src/views/specialWorkSystem/workTicket/myJobApply/index.vue
+++ b/src/views/specialWorkSystem/workTicket/myJobApply/index.vue
@@ -437,7 +437,7 @@
             if (res.data.code === '200') {
                 ElMessage({
                     type: 'success',
-                    message: res.data.msg
+                    message: '删除成功!'
                 });
                 getListByPage();
             } else {
@@ -453,7 +453,7 @@
             state.deleteDialog = false;
         };
 
-        // 导出
+        // 导出图表
         const downLoadBtn = (row:any) =>{
             state.downLoadId = row.workApplyId;
             state.downLoadName = row.workTypeDesc + row.workPermitNo
diff --git a/src/views/system/appVersion/index.vue b/src/views/system/appVersion/index.vue
new file mode 100644
index 0000000..af65464
--- /dev/null
+++ b/src/views/system/appVersion/index.vue
@@ -0,0 +1,673 @@
+<template>
+    <div class="home-container">
+        <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" @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="dialogAddRecord = true">新增</el-button>
+                            <!--						<el-button type="warning" :icon="Edit" size="default" plain>修改</el-button>-->
+<!--                            <el-button type="danger" :icon="Delete" size="default" plain @click="deleteBatchBtn">删除</el-button>-->
+                        </el-col>
+                        <el-button type="primary" :icon="Refresh" size="default" @click="reLoadData()" />
+                    </el-row>
+                    <el-table ref="multipleTableRef" :data="tableData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }" @selection-change="handleSelectionChange">
+<!--                        <el-table-column type="selection" width="100" />-->
+                        <el-table-column type="index" label="排序" width="80" align="center"/>
+                        <el-table-column property="fileType" label="文件类型" align="center" :show-overflow-tooltip="true"/>
+                        <el-table-column property="fileName" label="文件名称" align="center" :show-overflow-tooltip="true"/>
+                        <el-table-column property="link" label="文件链接" align="center"/>
+                        <el-table-column property="version" label="版本号" align="center">
+                            <template #default="scope">
+                                <el-tag>{{ scope.row.version }}</el-tag>
+                            </template>
+                        </el-table-column>
+                        <el-table-column property="info" label="备注" align="center"/>
+                        <el-table-column property="createTime" label="创建时间" align="center"/>
+                        <el-table-column property="updateTime" label="更新时间" align="center"/>
+                        <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="primary" size="small" :icon="Edit" @click="editRecordBtn(scope.$index, scope.row)">修改</el-button>
+                                <el-button link type="danger" size="small" :icon="Delete" @click="deleteRecordBtn(scope.row)">删除</el-button>
+                            </template>
+                        </el-table-column>
+                    </el-table>
+                    <div class="pageBtn">
+                        <el-pagination v-model:currentPage="pageIndex" v-model:page-size="pageSize" :page-sizes="[10, 15]" small="false" background layout="total, sizes, prev, pager, next, jumper" :total="totalSize" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
+                    </div>
+                </div>
+            </div>
+        </div>
+        <el-dialog v-model="dialogDetails" title="APP版本信息">
+            <el-form :model="details" label-width="120px">
+                <el-form-item label="文件类型">
+                    <el-input v-model="details.fileType" readonly />
+                </el-form-item>
+                <el-form-item label="文件名称">
+                    <el-input v-model="details.fileName" readonly />
+                </el-form-item>
+                <el-form-item label="文件链接">
+                    <el-input v-model="details.link" type="textarea" readonly />
+                </el-form-item>
+                <el-form-item label="版本号">
+                    <el-input v-model="details.version" type="textarea" readonly />
+                </el-form-item>
+                <el-form-item label="备注">
+                    <el-input v-model="details.info" type="textarea" readonly />
+                </el-form-item>
+                <el-form-item label="创建时间">
+                    <el-input v-model="details.createTime" readonly />
+                </el-form-item>
+                <el-form-item label="更新时间">
+                    <el-input v-model="details.updateTime" readonly />
+                </el-form-item>
+                <el-form-item>
+                    <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button>
+                </el-form-item>
+            </el-form>
+        </el-dialog>
+        <el-dialog v-model="dialogAddRecord" title="APP版本信息编辑" @close="closeAdd" @open="openAdd">
+            <el-form :model="addRecord" label-width="150px" ref="addRef" :rules="addRules">
+                <el-form-item label="文件类型" prop="fileType">
+                    <el-input v-model="addRecord.fileType"> </el-input>
+                </el-form-item>
+                <el-form-item label="文件名称" prop="fileName">
+                    <el-input v-model="addRecord.fileName"> </el-input>
+                </el-form-item>
+                <el-form-item label="上传文件" prop="link">
+                    <el-upload accept=".apk" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='fileLimit' v-model:file-list="fileList" :http-request="upload" :action="uploadUrl" :on-remove="handleRemove" :before-remove="beforeRemove" :before-upload="getUploadUrl">
+                        <el-button type="primary" plain>选择文件</el-button>
+                        <template #tip>
+                            <div class="el-upload__tip">上传新版APP</div>
+                        </template>
+                    </el-upload>
+                </el-form-item>
+                <el-form-item label="版本号" prop="version">
+                    <el-input v-model="addRecord.version"> </el-input>
+                </el-form-item>
+                <el-form-item label="备注">
+                    <el-input v-model="addRecord.info" type="textarea"> </el-input>
+                </el-form-item>
+                <el-form-item>
+                    <el-button type="warning" @click="dialogAddRecord = false" size="default" plain>取消</el-button>
+                    <el-button type="primary" @click="confirmAddRecord(addRef)" size="default">确认</el-button>
+                </el-form-item>
+            </el-form>
+        </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-dialog v-model="deleteSetDialog" title="提示" width="30%" center>-->
+<!--            <span>您确定要删除这些记录吗?</span>-->
+<!--            <template #footer>-->
+<!--                <span class="dialog-footer">-->
+<!--                    <el-button @click="deleteSetDialog = false" size="default">取消</el-button>-->
+<!--                    <el-button type="primary" @click="conFirmDeleteBatch" size="default">确认</el-button>-->
+<!--                </span>-->
+<!--            </template>-->
+<!--        </el-dialog>-->
+    </div>
+</template>
+
+<script lang="ts">
+import { toRefs, reactive, ref, onMounted } from 'vue';
+import { storeToRefs } from 'pinia';
+import { initBackEndControlRoutes } from '/@/router/backEnd';
+import { useUserInfo } from '/@/stores/userInfo';
+import { Session } from '/@/utils/storage';
+import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue';
+import { ElMessage, ElTable } from 'element-plus'
+import type { FormInstance, FormRules, UploadProps, UploadUserFile } from 'element-plus'
+import { teamManageApi } from '/@/api/systemManage/basicDateManage/personShiftManage/teamManage';
+
+// 定义接口来定义对象的类型
+interface stateType {
+    tableData: Array<any>;
+    departmentList: Array<any>;
+    casProps: {};
+    multipleSelection: Array<any>;
+    deleteArr: Array<any>;
+    dialogDetails: boolean;
+    dialogAddRecord: boolean;
+    deleteDialog: boolean;
+    deleteSetDialog: boolean;
+    pageIndex: number;
+    pageSize: number;
+    chosenIndex: null | number;
+    deleteId: null | number;
+    searchWord: string;
+    totalSize: number;
+    addRecord: {
+        groupName: string;
+        department: number | null;
+        depId: number | null;
+        groupMembers: Array<any>;
+        groupInfo: string;
+    };
+    details: {
+        groupName: string;
+        department: number | null;
+        groupMembers: Array<any>;
+        groupInfo: string;
+    };
+    fileLimit: number
+}
+
+export default {
+    name: 'appVersion',
+    components: {},
+    setup() {
+        const userInfo = useUserInfo();
+        const { userInfos } = storeToRefs(userInfo);
+
+        const state = reactive<stateType>({
+            pageIndex: 1,
+            pageSize: 10,
+            totalSize: 0,
+            chosenIndex: null,
+            searchWord: '',
+            tableData: [
+                {
+                    fileType: '国泰APP',
+                    fileName: '4',
+                    link: 'http',
+                    version: '4.0',
+                    info: '最新',
+                    createTime: '2022-09-10',
+                    updateTime: '2022-09-19'
+                },
+                {
+                    fileType: '国泰APP',
+                    fileName: '3',
+                    link: 'http',
+                    version: '3.0',
+                    info: '',
+                    createTime: '2022-09-10',
+                    updateTime: '2022-09-19'
+                },
+                {
+                    fileType: '国泰APP',
+                    fileName: '2',
+                    link: 'http',
+                    version: '2.0',
+                    info: '',
+                    createTime: '2022-09-10',
+                    updateTime: '2022-09-19'
+                },
+                {
+                    fileType: '国泰APP',
+                    fileName: '1',
+                    link: 'http',
+                    version: '1.0',
+                    info: '',
+                    createTime: '2022-09-10',
+                    updateTime: '2022-09-19'
+                }
+            ],
+            fileLimit: 1,
+            departmentList: [],
+            department: '',
+            workTypeList: [
+                {
+                    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: {
+                expandTrigger: 'hover',
+                emitPath: false,
+                value: 'depId',
+                label: 'depName'
+            },
+            multipleSelection: [],
+            dialogDetails: false,
+            dialogAddRecord: false,
+            deleteDialog: false,
+            deleteSetDialog: false,
+            addRecord: {
+                groupName: '',
+                department: null,
+                groupMembers: [],
+                depId: null,
+                groupInfo: ''
+            },
+            details: {
+                groupName: '',
+                department: null,
+                groupMembers: [],
+                depId: null,
+                groupInfo: ''
+            },
+            deleteId: null,
+            deleteArr: []
+        });
+        interface User {
+            groupName: string;
+            department: number | null;
+            depId: number;
+            groupMembers: Array<any>;
+            groupInfo: string;
+        }
+        // const multipleTableRef = ref<InstanceType<typeof ElTable>>();
+        // const toggleSelection = (rows?: User[]) => {
+        //     if (rows) {
+        //         rows.forEach((row) => {
+        //             // TODO: improvement typing when refactor table
+        //             // eslint-disable-next-line @typescript-eslint/ban-ts-comment
+        //             // @ts-expect-error
+        //             multipleTableRef.value!.toggleRowSelection(row, undefined);
+        //         });
+        //     } else {
+        //         multipleTableRef.value!.clearSelection();
+        //     }
+        // };
+
+        // 多选
+        // const handleSelectionChange = (val: User[]) => {
+        //     state.multipleSelection = JSON.parse(JSON.stringify(val));
+        //     state.deleteArr = state.multipleSelection.map((item) => {
+        //         item = item.id;
+        //         return item;
+        //     });
+        // };
+
+        const addRef = ref<FormInstance>();
+        const addRules = reactive<FormRules>({
+            groupName: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+            department: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
+            groupMembers: [{ required: true, message: '该内容不能为空', trigger: 'blur' }]
+        });
+
+        // 页面载入时执行方法
+        onMounted(() => {
+            // getListByPage();
+            // getAllDepartment();
+        });
+
+        // 分页获取物资标准列表
+        const getListByPage = async () => {
+            const data = { pageSize: state.pageSize, pageIndex: state.pageIndex, searchParams: { groupName: state.searchWord, containGroupMemberEnable: true } };
+            let res = await teamManageApi().getRecordPage(data);
+            if (res.data.code === '200') {
+                state.tableData = res.data.data.map((item) => {
+                    if (!item.groupMembers || item.groupMembers == null) {
+                        item.groupMembers = [];
+                    } else {
+                        item.groupMembers = Array.from(item.groupMembers, ({ username }) => username);
+                    }
+                    return item;
+                });
+                state.totalSize = res.data.total;
+            } else {
+                ElMessage({
+                    type: 'warning',
+                    message: res.data.msg
+                });
+            }
+        };
+
+        // 获取部门列表
+        const getAllDepartment = async () => {
+            let res = await teamManageApi().getAllDepartment();
+            if (res.data.code === '200') {
+                state.departmentList = res.data.data;
+            } else {
+                ElMessage({
+                    type: 'warning',
+                    message: res.data.msg
+                });
+            }
+        };
+
+        // const handleChange = async (value) => {
+        //     state.addRecord.depId = value;
+        //     console.log(state.addRecord.department, 'de');
+        //     let res = await teamManageApi().getAllMember(value);
+        //     if (res.data.code === '200') {
+        //         state.workerList = res.data.data;
+        //     } 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 addRecord = async (data: any) => {
+            let res = await teamManageApi().addRecord(data);
+            if (res.data.code === '200') {
+                ElMessage({
+                    type: 'success',
+                    message: '添加成功!'
+                });
+                getListByPage();
+            } else {
+                ElMessage({
+                    type: 'warning',
+                    message: res.data.msg
+                });
+            }
+        };
+
+        // 修改工作时段方法
+        const editRecordBtn = async (index, row) => {
+            state.addRecord = JSON.parse(JSON.stringify(row));
+            state.addRecord.department = '';
+            state.addRecord.groupMembers = [];
+            state.dialogAddRecord = true;
+            state.chosenIndex = index;
+        };
+
+        const editRecord = async (data: any) => {
+            let res = await teamManageApi().updateRecord(data);
+            if (res.data.code === '200') {
+                ElMessage({
+                    type: 'success',
+                    message: '修改成功!'
+                });
+                getListByPage();
+            } else {
+                ElMessage({
+                    type: 'warning',
+                    message: res.data.msg
+                });
+            }
+        };
+
+        // 新增修改记录
+        const confirmAddRecord = async (formEl: FormInstance | undefined) => {
+            if (!formEl) return;
+            await formEl.validate(async (valid, fields) => {
+                if (valid) {
+                    const data = {
+                        groupName: state.addRecord.groupName,
+                        groupInfo: state.addRecord.groupInfo,
+                        depId: state.addRecord.depId,
+                        groupMemberIds: state.addRecord.groupMembers
+                    };
+                    if (state.chosenIndex == null) {
+                        await addRecord(data);
+                    } else {
+                        data.groupId = JSON.stringify(state.addRecord.groupId);
+                        await editRecord(data);
+                    }
+                    state.dialogAddRecord = false;
+                } else {
+                    console.log('error submit!', fields);
+                }
+            });
+        };
+
+        // 删除工作时间组方法
+        const deleteRecord = async (data: any) => {
+            let res = await teamManageApi().deleteRecord(data);
+            if (res.data.code === '200') {
+                ElMessage({
+                    type: 'success',
+                    message: '删除成功!'
+                });
+                getListByPage();
+            } else {
+                ElMessage({
+                    type: 'warning',
+                    message: res.data.msg
+                });
+            }
+        };
+
+        const deleteRecordBtn = (row) => {
+            console.log(row, 'row');
+            state.deleteId = row.groupId;
+            state.deleteDialog = true;
+        };
+
+        const conFirmDelete = () => {
+            deleteRecord({ groupId: state.deleteId });
+            state.deleteDialog = false;
+        };
+
+        // 批量删除
+        // const deleteBatchBtn = async () => {
+        //     ElMessage({
+        //         type: 'warning',
+        //         message: '抱歉,本页面暂不支持批量删除'
+        //     });
+            // if (state.deleteArr.length > 0) {
+            // 	state.deleteSetDialog = true
+            // } else {
+            // 	ElMessage({
+            // 		type: 'warning',
+            // 		message: '请先选择要删除的记录'
+            // 	});
+            // }
+        // };
+
+        // const conFirmDeleteBatch = async () => {
+        // 	let res = await teamManageApi().deletBatchRecord({ids: state.deleteArr});
+        // 	if (res.data.code === '200') {
+        // 		state.deleteSetDialog = false
+        // 		ElMessage({
+        // 			type: 'success',
+        // 			message: res.data.msg
+        // 		});
+        // 		getListByPage()
+        // 	} else {
+        // 		ElMessage({
+        // 			type: 'warning',
+        // 			message: res.data.msg
+        // 		});
+        // 		state.deleteSetDialog = false
+        // 	}
+        // }
+
+        const handleSizeChange = (val: number) => {
+            state.pageSize = val;
+            getListByPage();
+        };
+        const handleCurrentChange = (val: number) => {
+            state.pageIndex = val;
+            getListByPage();
+        };
+
+        // 查看记录
+        const viewRecord = (row) => {
+            state.details = JSON.parse(JSON.stringify(row));
+            state.dialogDetails = true;
+        };
+
+        // 刷新
+        const reLoadData = async () => {
+            getListByPage();
+        };
+
+        const closeAdd = () => {
+            state.addRecord = {};
+            state.chosenIndex = null;
+        };
+        const openAdd = () => {
+            if (state.chosenIndex == null) {
+                state.addRecord.info = '';
+            }
+        };
+        const indexClear = () => {
+            state.deleteId = null;
+        };
+
+        // 折线图
+        const renderMenu = async (value: string) => {
+            Session.set('projectId', value);
+            userInfos.value.projectId = value;
+            await initBackEndControlRoutes();
+        };
+        return {
+            addRef,
+            addRules,
+            View,
+            Edit,
+            Delete,
+            Refresh,
+            Plus,
+            searchRecord,
+            clearSearch,
+            viewRecord,
+            deleteRecordBtn,
+            conFirmDelete,
+            getListByPage,
+            reLoadData,
+            deleteRecord,
+            handleSizeChange,
+            handleCurrentChange,
+            confirmAddRecord,
+            closeAdd,
+            openAdd,
+            indexClear,
+            editRecordBtn,
+            ...toRefs(state)
+        };
+    }
+};
+</script>
+
+<style scoped lang="scss">
+$homeNavLengh: 8;
+.home-container {
+    height: calc(100vh - 144px);
+    box-sizing: border-box;
+    overflow: hidden;
+    .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-input {
+    width: 100% !important;
+}
+.el-date-editor::v-deep {
+    width: 100%;
+}
+.el-select {
+    width: 100% !important;
+}
+.el-tabs{
+    width: 100%;
+}
+</style>
diff --git a/src/views/system/menu/index.vue b/src/views/system/menu/index.vue
index 4c69c1a..c4a0e9b 100644
--- a/src/views/system/menu/index.vue
+++ b/src/views/system/menu/index.vue
@@ -2,7 +2,7 @@
     <div class="system-menu-container">
         <el-card shadow="hover">
             <div class="system-menu-search mb15">
-                <el-select size="default" v-model="projectId" placeholder="请选择项目名称" style="max-width: 180px" @change="getMenuList()">
+                <el-select size="default" v-model="projectId" placeholder="请选择项目名称" style="min-width: 350px" @change="getMenuList()">
                     <el-option v-for="item in projectList" :key="item.key" :value="item.id" :label="item.name"> </el-option>
                 </el-select>
                 <el-button size="default" type="primary" class="ml10" @click="getMenuList">
@@ -92,16 +92,16 @@
             menuTableData: [],
             projectList: [
                 { id: '1', name: '安全基础信息系统', key: 0 },
-                { id: '2', name: '双重预防系统', key: 1 },
-                { id: '3', name: '特殊作业系统', key: 2 },
-                { id: '4', name: '智能巡检系统', key: 3 },
-                { id: '5', name: '安全风险综合预警预报平台', key: 4 },
+                { id: '2', name: '智能安全双重预防系统', key: 1 },
+                { id: '3', name: '智能安全特殊作业系统', key: 2 },
+                { id: '4', name: '智能安全巡检系统', key: 3 },
+                { id: '5', name: '智能安全风险综合预警预报平台', key: 4 },
                 { id: '6', name: '应急管理系统', key: 5 },
-                { id: '7', name: '目标责任管理系统', key: 6 },
-                { id: '8', name: '事故管理系统', key: 7 },
+                { id: '7', name: '安全目标责任管理系统', key: 6 },
+                { id: '8', name: '安全事故管理系统', key: 7 },
                 { id: '9', name: '设备综合管控系统', key: 8 },
                 { id: '10', name: '安全知识图谱系统', key: 9 },
-                { id: '11', name: '危险化学品全生命周期安全', key: 10 }
+                { id: '11', name: '智能安全危险化学品全生命周期管控系统', key: 10 }
             ]
         });
         // // 获取 vuex 中的路由
diff --git a/src/views/system/personShiftManage/personTimeManage/durationManage/index.vue b/src/views/system/personShiftManage/personTimeManage/durationManage/index.vue
index 40cb89e..725f36c 100644
--- a/src/views/system/personShiftManage/personTimeManage/durationManage/index.vue
+++ b/src/views/system/personShiftManage/personTimeManage/durationManage/index.vue
@@ -286,7 +286,7 @@
             if (res.data.code === '200') {
                 ElMessage({
                     type: 'success',
-                    message: res.data.msg
+                    message: '添加成功!'
                 });
                 getListByPage();
             } else {
@@ -303,7 +303,7 @@
             if (res.data.code === '200') {
                 ElMessage({
                     type: 'success',
-                    message: res.data.msg
+                    message: '修改成功!'
                 });
                 getListByPage();
             } else {
@@ -320,7 +320,7 @@
             if (res.data.code === '200') {
                 ElMessage({
                     type: 'success',
-                    message: res.data.msg
+                    message: '删除成功!'
                 });
                 getListByPage();
             } else {
@@ -358,7 +358,7 @@
                 state.deleteSetDialog = false;
                 ElMessage({
                     type: 'success',
-                    message: res.data.msg
+                    message: '删除成功!'
                 });
                 getListByPage();
             } else {
diff --git a/src/views/system/personShiftManage/personTimeManage/holidayTime/index.vue b/src/views/system/personShiftManage/personTimeManage/holidayTime/index.vue
index d063204..76d97f4 100644
--- a/src/views/system/personShiftManage/personTimeManage/holidayTime/index.vue
+++ b/src/views/system/personShiftManage/personTimeManage/holidayTime/index.vue
@@ -166,7 +166,7 @@
 }
 
 export default {
-    name: 'workingHours',
+    name: 'holidayTime',
     components: {},
     setup() {
         const userInfo = useUserInfo();
@@ -377,7 +377,7 @@
             if (res.data.code === '200') {
                 ElMessage({
                     type: 'success',
-                    message: res.data.msg
+                    message: '添加成功!'
                 });
                 getListByPage();
             } else {
@@ -392,8 +392,6 @@
         const editRecordBtn = (index, row) => {
             state.dialogAddRecord = true;
             state.chosenIndex = index;
-            console.log(row, '编辑时的row');
-            console.log(state.tableData, '编辑时的tableData');
             state.addRecord = JSON.parse(JSON.stringify(row));
             state.addRecord.ruleNumber = row.ruleNumber.split(',').map((i) => {
                 return Number(i);
@@ -406,7 +404,7 @@
             if (res.data.code === '200') {
                 ElMessage({
                     type: 'success',
-                    message: res.data.msg
+                    message: '修改成功!'
                 });
                 getListByPage();
             } else {
@@ -466,7 +464,7 @@
             if (res.data.code === '200') {
                 ElMessage({
                     type: 'success',
-                    message: res.data.msg
+                    message: '删除成功!'
                 });
                 getListByPage();
             } else {
@@ -505,7 +503,7 @@
                 state.deleteSetDialog = false;
                 ElMessage({
                     type: 'success',
-                    message: res.data.msg
+                    message: '删除成功!'
                 });
                 getListByPage();
             } else {
diff --git a/src/views/system/personShiftManage/personTimeManage/holidayTimeGroup/index.vue b/src/views/system/personShiftManage/personTimeManage/holidayTimeGroup/index.vue
index e834d40..b37119d 100644
--- a/src/views/system/personShiftManage/personTimeManage/holidayTimeGroup/index.vue
+++ b/src/views/system/personShiftManage/personTimeManage/holidayTimeGroup/index.vue
@@ -282,7 +282,7 @@
             if (res.data.code === '200') {
                 ElMessage({
                     type: 'success',
-                    message: res.data.msg
+                    message: '添加成功!'
                 });
                 getListByPage();
             } else {
@@ -299,7 +299,7 @@
             if (res.data.code === '200') {
                 ElMessage({
                     type: 'success',
-                    message: res.data.msg
+                    message: '修改成功!'
                 });
                 getListByPage();
             } else {
@@ -339,7 +339,7 @@
             if (res.data.code === '200') {
                 ElMessage({
                     type: 'success',
-                    message: res.data.msg
+                    message: '删除成功!'
                 });
                 getListByPage();
             } else {
@@ -378,7 +378,7 @@
                 state.deleteSetDialog = false;
                 ElMessage({
                     type: 'success',
-                    message: res.data.msg
+                    message: '删除成功!'
                 });
                 getListByPage();
             } else {
diff --git a/src/views/system/personShiftManage/personTimeManage/timeStrategy/index.vue b/src/views/system/personShiftManage/personTimeManage/timeStrategy/index.vue
index 2b54b8f..1e88df2 100644
--- a/src/views/system/personShiftManage/personTimeManage/timeStrategy/index.vue
+++ b/src/views/system/personShiftManage/personTimeManage/timeStrategy/index.vue
@@ -312,7 +312,7 @@
             if (res.data.code === '200') {
                 ElMessage({
                     type: 'success',
-                    message: res.data.msg
+                    message: '添加成功!'
                 });
                 getListByPage();
             } else {
@@ -329,7 +329,7 @@
             if (res.data.code === '200') {
                 ElMessage({
                     type: 'success',
-                    message: res.data.msg
+                    message: '修改成功!'
                 });
                 getListByPage();
             } else {
@@ -376,7 +376,7 @@
             if (res.data.code === '200') {
                 ElMessage({
                     type: 'success',
-                    message: res.data.msg
+                    message: '删除成功!'
                 });
                 getListByPage();
             } else {
@@ -415,7 +415,7 @@
                 state.deleteSetDialog = false;
                 ElMessage({
                     type: 'success',
-                    message: res.data.msg
+                    message: '删除成功!'
                 });
                 getListByPage();
             } else {
diff --git a/src/views/system/personShiftManage/personTimeManage/workingHoursSet/index.vue b/src/views/system/personShiftManage/personTimeManage/workingHoursSet/index.vue
index c911247..cdff199 100644
--- a/src/views/system/personShiftManage/personTimeManage/workingHoursSet/index.vue
+++ b/src/views/system/personShiftManage/personTimeManage/workingHoursSet/index.vue
@@ -284,7 +284,7 @@
             if (res.data.code === '200') {
                 ElMessage({
                     type: 'success',
-                    message: res.data.msg
+                    message: '添加成功!'
                 });
                 getListByPage();
             } else {
@@ -301,7 +301,7 @@
             if (res.data.code === '200') {
                 ElMessage({
                     type: 'success',
-                    message: res.data.msg
+                    message: '修改成功!'
                 });
                 getListByPage();
             } else {
@@ -341,7 +341,7 @@
             if (res.data.code === '200') {
                 ElMessage({
                     type: 'success',
-                    message: res.data.msg
+                    message: '删除成功!'
                 });
                 getListByPage();
             } else {
@@ -380,7 +380,7 @@
                 state.deleteSetDialog = false;
                 ElMessage({
                     type: 'success',
-                    message: res.data.msg
+                    message: '删除成功!'
                 });
                 getListByPage();
             } else {
diff --git a/src/views/system/personShiftManage/scheduleManage/schedule/index.vue b/src/views/system/personShiftManage/scheduleManage/schedule/index.vue
index bd31f9b..782352c 100644
--- a/src/views/system/personShiftManage/scheduleManage/schedule/index.vue
+++ b/src/views/system/personShiftManage/scheduleManage/schedule/index.vue
@@ -302,7 +302,7 @@
             if (res.data.code === '200') {
                 ElMessage({
                     type: 'success',
-                    message: res.data.msg
+                    message: '添加成功!'
                 });
                 getListByPage();
             } else {
@@ -327,7 +327,7 @@
             if (res.data.code === '200') {
                 ElMessage({
                     type: 'success',
-                    message: res.data.msg
+                    message: '修改成功!'
                 });
                 getListByPage();
             } else {
@@ -368,7 +368,7 @@
             if (res.data.code === '200') {
                 ElMessage({
                     type: 'success',
-                    message: res.data.msg
+                    message: '删除成功!'
                 });
                 getListByPage();
             } else {
diff --git a/src/views/system/personShiftManage/scheduleManage/strategy/index.vue b/src/views/system/personShiftManage/scheduleManage/strategy/index.vue
index 22c0ca4..1bfcc22 100644
--- a/src/views/system/personShiftManage/scheduleManage/strategy/index.vue
+++ b/src/views/system/personShiftManage/scheduleManage/strategy/index.vue
@@ -401,7 +401,7 @@
             if (res.data.code === '200') {
                 ElMessage({
                     type: 'success',
-                    message: res.data.msg
+                    message: '添加成功!'
                 });
                 getListByPage();
             } else {
@@ -418,7 +418,7 @@
             if (res.data.code === '200') {
                 ElMessage({
                     type: 'success',
-                    message: res.data.msg
+                    message: '修改成功!'
                 });
                 getListByPage();
             } else {
@@ -461,7 +461,7 @@
             if (res.data.code === '200') {
                 ElMessage({
                     type: 'success',
-                    message: res.data.msg
+                    message: '删除成功!'
                 });
                 getListByPage();
             } else {

--
Gitblit v1.9.2