diff --git a/attendance-performance-manager-ui/admin/public/index.html b/attendance-performance-manager-ui/admin/public/index.html
index f8fb00fd6da2f7c9b232a917ed0b42734495254d..a7cc0362da79aca6e23911cd92d250186421a3ed 100644
--- a/attendance-performance-manager-ui/admin/public/index.html
+++ b/attendance-performance-manager-ui/admin/public/index.html
@@ -5,7 +5,7 @@
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <meta name="viewport" content="width=device-width,initial-scale=1.0">
     <link rel="icon" href="<%= BASE_URL %>favicon.ico">
-    <title>鑰冨嫟缁╂晥绠$悊骞冲彴</title>
+    <title>鏅烘収鏀垮姟缁╂晥绠$悊绯荤粺</title>
     <link rel="stylesheet" href="https://unpkg.com/element-ui@2.15.5/lib/theme-chalk/index.css">
   </head>
   <body>
diff --git a/attendance-performance-manager-ui/admin/src/assets/mixins/table.js b/attendance-performance-manager-ui/admin/src/assets/mixins/table.js
index 99f65233cb12e25491c51a34acc170ed634071aa..9e3c608af233c80386f82227f97b946a9a315c78 100644
--- a/attendance-performance-manager-ui/admin/src/assets/mixins/table.js
+++ b/attendance-performance-manager-ui/admin/src/assets/mixins/table.js
@@ -57,7 +57,8 @@ export default {
         .then(({ data }) => {
           this.tableData = this.beforeRender(
             Object.assign({}, this.tableData, data)
-          );
+          )
+          console.log(this.tableData,'')
           this.afterRender(this.tableData);
         })
         .catch(error => {
@@ -245,6 +246,21 @@ export default {
       }
       return info
     },
+    // 鏍煎紡鍖栧憳宸ョ被鍨�
+    formatterStatus(row, column, val){
+        const content = formatter(this.tableData, column, val);
+        if (content) {
+          if (val == '1') {
+            return <el-tag size='mini'>鍏ㄨ亴</el-tag>
+          } else if (val == '2') {
+            return <el-tag size='mini'>鍏艰亴</el-tag>
+          } else if (val == '3') {
+            return <el-tag size='mini'>瀹炰範</el-tag>
+          }
+        } else {
+          return val
+        }
+    },
     // 澶氶€夎〃鏍艰
     handleSelectionChange(val) {
       this.selection = val.map(i => i.id);
diff --git a/attendance-performance-manager-ui/admin/src/assets/utils/common.js b/attendance-performance-manager-ui/admin/src/assets/utils/common.js
new file mode 100644
index 0000000000000000000000000000000000000000..5d53aa71459ed0bc79d0ae543c0e2c1434243dd8
--- /dev/null
+++ b/attendance-performance-manager-ui/admin/src/assets/utils/common.js
@@ -0,0 +1,177 @@
+/**
+* @desc 鍏嬮殕
+* @param obj 鍏嬮殕婧�
+*/
+export const deepClone = (obj) => {
+    let newObj = Array.isArray(obj) ? [] : {};
+    if (obj && typeof obj === "object") {
+        for (let key in obj) {
+            if (obj.hasOwnProperty(key)) {
+                newObj[key] =
+                    obj && typeof obj[key] === "object"
+                        ? deepClone(obj[key])
+                        : obj[key];
+            }
+        }
+    }
+    return newObj;
+}
+
+
+
+/**
+* @desc 寤虹珛鏍戝瀷
+* @param data 鏁版嵁婧�
+* @param parentId 鏍硅妭鐐�
+* @param id id 鍖归厤椤�
+* @param pid parentId鍖归厤椤�
+*/
+export const toTreeData = (data, parentId, id, pid) => {
+    // 寤虹珛涓爲褰㈢粨鏋�,闇€瑕佸畾涔変釜鏈€椤跺眰鐨勭埗鑺傜偣锛宲Id鏄�-1
+    let parent = [];
+    for (let i = 0; i < data.length; i++) {
+        if (data[i][pid] != parentId) {
+        } else {
+            let obj = {};
+            for (let key in data[i]) {
+                obj[key] = data[i][key]
+            }
+            obj['children'] = [];
+            parent.push(obj);
+        }
+
+    }
+    fnChildren(parent);
+    function fnChildren(parent) {
+        if (data.length !== 0) {
+            for (let i = 0; i < parent.length; i++) {
+                for (let j = 0; j < data.length; j++) {
+                    if (parent[i].id == data[j][pid]) {
+                        let obj = {};
+                        for (let k in data[j]) {
+                            obj[k] = data[j][k]
+                        }
+                        obj["children"] = [];
+                        parent[i].children.push(obj);
+                    }
+                }
+                fnChildren(parent[i].children);
+            }
+        }
+    }
+    return deleteEmptyChildren(parent);
+
+}
+
+export const deleteEmptyChildren = (arr) => {
+    if (arr.length) {
+        for (let i in arr) {
+            if (arr[i].children.length) {
+                deleteEmptyChildren(arr[i].children)
+            } else {
+                delete arr[i].children;
+            }
+        }
+    }
+    return arr
+}
+
+export const parentTreeNode = (treeList, parentKEY, id) => {
+    let temp = []
+    let searchFn = function (treeList, id) {
+        for (let i = 0; i < treeList.length; i++) {
+            let item = treeList[i]
+            if (item.id === id) {
+                temp.push(item)
+                searchFn(treeList, item[parentKEY])
+                break
+            } else {
+                if (item.children) {
+                    searchFn(item.children, id)
+                }
+            }
+        }
+    }
+    searchFn(treeList, id)
+    return temp
+}
+
+
+export const childrenTreeNode = (treeList, parentKEY, id) => {
+    let temp = [{ id: id }];
+    let searchFn = function (treeList, id) {
+        for (let i = 0; i < treeList.length; i++) {
+            let item = treeList[i];
+            if (item[parentKEY] === id) {
+                temp.push(item);
+                searchFn(treeList, item.id);
+                // break;
+            } else {
+                if (item.children) {
+                    searchFn(item.children, id);
+                }
+            }
+            // console.log("run");
+        }
+    };
+    searchFn(treeList, id);
+    return temp;
+}
+
+
+export const getItemData = (list, key, value) => {
+    for (let i = 0; i < list.length; i++) {
+        let item = list[i];
+        if (item[key] === value) {
+            return item;
+        } else {
+            if (item.children && item.children.length > 0) {
+                let res = getItemData(item.children, key, value);
+                if (res) {
+                    return res;
+                }
+            }
+        }
+    }
+}
+
+
+
+/**
+* @desc 鍙跺瓙鑺傜偣鏌ヨ鏍硅妭鐐�
+* @param tree 鏁版嵁婧�
+* @param parentId 鏍硅妭鐐�
+* @param config id children 鍖归厤椤�
+*/
+
+export const getTreeIds = (tree, nodeId, config) => {
+    const { children = 'children', id = 'id' } = config || {}
+    const toFlatArray = (tree, parentId) => {
+        return tree.reduce((t, _) => {
+            const child = _[children]
+            return [
+                ...t,
+                parentId ? { ..._, parentId } : _,
+                ...(child && child.length ? toFlatArray(child, _[id]) : [])]
+        }, [])
+    }
+
+    const getIds = flatArray => {
+        let ids = [nodeId]
+        let child = flatArray.find(_ => _[id] === nodeId)
+        while (child && child.parentId) {
+            ids = [child.parentId, ...ids]
+            child = flatArray.find(_ => _[id] === child.parentId)
+        }
+        return ids
+    }
+
+
+    return getIds(toFlatArray(tree))
+
+
+
+}
+
+
+
diff --git a/attendance-performance-manager-ui/admin/src/assets/utils/globalComponents.js b/attendance-performance-manager-ui/admin/src/assets/utils/globalComponents.js
index 08b454306a377de3a187c81f3bde729e0c982bb6..99f89e5c8ce0d35cb5bba539733a4ced5cbdb13e 100644
--- a/attendance-performance-manager-ui/admin/src/assets/utils/globalComponents.js
+++ b/attendance-performance-manager-ui/admin/src/assets/utils/globalComponents.js
@@ -15,7 +15,6 @@ import FileUpload from '@/components/FileUpload';
 import Editor from '@/components/Editor';
 import Map from '@/components/Map';
 import MapDetail from '@/components/MapDetail';
-
 const Prototype = function() {};
 
 Prototype.install = (Vue, options) => {
diff --git a/attendance-performance-manager-ui/admin/src/components/Breadcrumb.vue b/attendance-performance-manager-ui/admin/src/components/Breadcrumb.vue
index 07a82bae5ae811f74f466ef76e71cb09d0bc3c2f..0f6bde9d07509209196c6e598bf88a370806174f 100644
--- a/attendance-performance-manager-ui/admin/src/components/Breadcrumb.vue
+++ b/attendance-performance-manager-ui/admin/src/components/Breadcrumb.vue
@@ -70,7 +70,7 @@ export default {
       const type = urlArray.pop();
 
       group.unshift({
-        name: "鑰冨嫟缁╂晥绠$悊绯荤粺"
+        name: "鏅烘収鏀垮姟缁╂晥绠$悊绯荤粺"
       })
       if(types[type]) {
         group.push({
diff --git a/attendance-performance-manager-ui/admin/src/components/Header.vue b/attendance-performance-manager-ui/admin/src/components/Header.vue
index f4619bad764f9dee53f4320329458e261cb55c1d..5b1d3e3543100d224180f23dc01f9e0a99022a55 100644
--- a/attendance-performance-manager-ui/admin/src/components/Header.vue
+++ b/attendance-performance-manager-ui/admin/src/components/Header.vue
@@ -8,26 +8,27 @@
         <div class="layout-logo flex">
           <i class="el-icon-menu" @click='showMobileMenu=!showMobileMenu'> </i>
           <router-link to="/">
-            <img src="../assets/images/logo.png" style="margin-bottom:5px" height="40" alt="">
-             <b style="color:white;font-size:18px;">&nbsp;&nbsp;&nbsp; 鑰冨嫟缁╂晥绠$悊绯荤粺 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b>
+            <!-- <img src="../assets/images/logo.png" style="margin-bottom:5px" height="40" alt=""> -->
+             <b style="color:white;font-size:20px;">&nbsp;&nbsp;&nbsp; 鏅烘収鏀垮姟缁╂晥绠$悊绯荤粺 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b>
           </router-link>
 
         </div>
         <!-- 涓€绾ц彍鍗� -->
         <ul class="menu-list flex">
           <li v-for='item in menu' :key='item.id'>
-            <!-- :active='submenu.path === item.path' -->
-            <router-link :to="item.path" :title="item.name" replace>
+            <span @click="RouterTo(item.path)" :class="{active:activePath === item.path}">
               <i :class="'el-icon-'+item.icon"></i>
               {{item.name}}
-            </router-link>
+            </span>
           </li>
           
         </ul>
       </div>
 
       <div class="controllBar">
-        <i class="el-icon-bell" style="font-size: 15px;margin-right: 10px" > 娑堟伅</i>
+        <el-badge :value="12" class="item">
+          <i class="el-icon-bell" style="font-size: 15px;margin-right: 10px" > 娑堟伅</i>
+        </el-badge>
       </div>
       <div class="controllBar" @click="returnHome">
         <i class="el-icon-s-home" style="font-size: 15px;margin-right: 10px" > 棣栭〉</i>
@@ -48,28 +49,15 @@
 
       </div>
     </div>
-
     <!-- 涓€绾ц彍鍗� -->
     <ul class="mobile-menu-list flex flex-pack-justify" v-if='showMobileMenu'>
-      <li v-for='item in menu' :key='item.id'>
-        <router-link :to="item.path" :active='submenu.path === item.path' :title="item.name">
+      <li v-for='item in menu' :key='item.id' @click="RouterTo(item.path)">
+        <span :class="{active:activePath === item.path}">
           <i :class="'el-icon-'+item.icon"></i>
           {{item.name}}
-        </router-link>
+        </span>
       </li>
     </ul>
-
-    <!-- 浜岀骇鑿滃崟 -->
-    <!-- <div class="layout-submenu-wrapper flex" v-if='submenu.children && submenu.children.length'>
-      <div class="layout-submenu">
-        <ul class="submenu-list flex">
-          <li v-for='item in submenu.children' :key='item.id'>
-            <a :href="item.path" target="blank" v-if='item.isOut'>{{item.name}}</a>
-            <router-link :to="item.path" :active='group === item.path' v-else>{{item.name}}</router-link>
-          </li>
-        </ul>
-      </div>
-    </div> -->
   </div>
 </template>
 
@@ -77,6 +65,17 @@
 export default {
   name: "Header",
   methods: {
+    // 瀵艰埅鏍忚矾鐢辫烦杞�
+    RouterTo(path){
+      window.sessionStorage.CurrentSecondPath = path
+      this.$store.commit('setCurrentSecondPath',path)
+      this.$store.commit('setThirdPath',path)
+      this.$router.push({path})
+      let thirdArr = this.headBar.children.find(item => item.path === path)
+      this.$store.commit('setCurrentThirdArr',thirdArr.children)
+      this.$emit('changePath',path)//瑙﹀彂鐐瑰嚮浜嬩欢
+      
+    },
     returnHome(){
       this.$router.replace({path:'/'})
     },
@@ -99,44 +98,8 @@ export default {
   },
   beforeDestroy() {
     console.log("beforeDestroy");
-    //window.removeEventListener("message", this.getsocketData, false);
   },
-    mounted() {
-    // console.log("mounted");
-    // this.$nextTick(function () {
-    //   console.log("login websocket:"+"ws://"+process.env.VUE_APP_WEBSOCKET_API +"/ws?accessToken="+ this.$store.state.userData.id)
-    //   createSocket(
-    //     "ws://" +
-    //       process.env.VUE_APP_WEBSOCKET_API +
-    //       "/ws?accessToken=" +
-    //       this.$store.state.userData.id
-    //   );
-    // });
-
-    //    let _this = this;
-    // const getsocketData = (e) => {i
-    //   // 鍒涘缓鎺ユ敹娑堟伅鍑芥暟
-    //   const data = e && e.detail.data;
-
-    //   let obj = JSON.parse(data);
-    //   if (obj.type == "SEND_TO_ALL_REQUEST") {
-    //     vm.refreshData();
-    //     let content = JSON.parse(obj.body.content);
-    //     _this.$notify({
-    //       title: "璀﹀憡",
-    //       message: content,
-    //       type: "warning",
-    //       duration: 8000,
-    //     });
-
-    //   }
-    // };
-
-    // this.getsocketData = getsocketData;
-    // // 娉ㄥ唽鐩戝惉浜嬩欢
-    // window.addEventListener("onmessageWS", getsocketData,false);
-      // console.log(this.menu,'鑿滃崟鏁版嵁')
-    },
+  mounted() {},
   computed: {
     group() {
       const relativeGroup = this.$store.state.group;
@@ -164,39 +127,6 @@ export default {
       }else{
         return this.headBar.children
       }
-      // return this.userData.children.map(item=>{
-      //   const url = item.path ? item.url : (item.childList[0] ? (item.childList[0].url || '') : '');
-      //   return {
-      //     name: item.name,
-      //     path: url,
-      //     id: item.id,
-      //     icon: item.imgPath,
-      //     children: item.childList.map(sub=>{
-      //       return {
-      //         name: sub.name,
-      //         path: sub.url ? sub.url : (sub.childList[0] ? (sub.childList[0].url || 0) : ''),
-      //         id: sub.id,
-      //         parentId: sub.parentId,
-      //         icon: sub.imgPath,
-      //         isOut: /^https?\:\/\//.test(sub.url)
-      //       }
-      //     })
-      //   }
-      // })
-    },
-    submenu() {
-      if(!this.menu.length) return {};
-      let matchMenu = {};
-      this.menu.forEach(item=>{
-        const menu = item;
-        item.children.forEach(item=>{
-          if(item.path === this.group) {
-            matchMenu = menu;
-            return;
-          }
-        })
-      })
-      return matchMenu
     },
     // 浜岀骇鑿滃崟鏁版嵁
     headBar() {
@@ -205,6 +135,10 @@ export default {
     userData(){
       return this.$store.state.userData
     },
+    // 浜岀骇璺緞
+    activePath(){
+      return this.$store.state.CurrentSecondPath
+    }
   },
   data() {
     return {
@@ -212,8 +146,7 @@ export default {
     }
   },
   created(){
-    console.log(this.userData,'鐢ㄦ埛鏁版嵁')
-    console.log(this.menu,'瀵艰埅鏍忔暟鎹�')
+    
   }
 }
 </script>
@@ -241,19 +174,19 @@ export default {
 
     .menu-list{
       li{
-        a{
+        span{
           display: block;
-          padding: 0 12px;
+          padding: 0 16px;
           height: 100%;
           color: #eee;
-          &.router-link-active,
-          &[active]{
-            //background: #1890ff;
-            color: #fff;
-            list-style-type:none;
-            border-bottom:3px solid #fff;
-            padding-bottom: 2px;
-          }
+          cursor: pointer;
+          margin-right: 20px;
+        }
+        .active{
+          color: #fff;
+          list-style-type:none;
+          border-bottom:3px solid #fff;
+          padding-bottom: 2px;
         }
       }
 
@@ -313,19 +246,17 @@ export default {
     .mobile-menu-list{
       display: flex;
       background: #222333;
-      padding: 0 10px;
+      padding: 10px;
       li{
-        padding: 8px 5px;
-        a{
-          width: 1em;
+        span{
           display: block;
+          padding: 0 12px;
+          height: 100%;
           color: #eee;
-          font-size: 14px;
-          word-break: break-all;
-          &.router-link-active,
-          &[active]{
-            color: #1890ff;
-          }
+          cursor: pointer;
+        }
+        .active{
+          color: #1890ff;
         }
       }
     }
diff --git a/attendance-performance-manager-ui/admin/src/components/HeaderLeft.vue b/attendance-performance-manager-ui/admin/src/components/HeaderLeft.vue
index 59adf53f1f4c8caf0dcb162160d6b450deb259c7..4a93dacf91458710fb2e9d5087d2a5646be69ae1 100644
--- a/attendance-performance-manager-ui/admin/src/components/HeaderLeft.vue
+++ b/attendance-performance-manager-ui/admin/src/components/HeaderLeft.vue
@@ -72,7 +72,26 @@ export default {
                     this.$message.success("宸查€€鍑虹櫥褰�");
                     this.$store.commit("logout");
                     this.$router.replace("/login");
-                });
+                })
+        },
+        // 澶勭悊杩斿洖瀵艰埅鏍�
+        mapMenu(arr){
+           if(arr.length === 0) return []
+           let result = arr.map(item => {
+               const url = item.url
+                ? item.url
+                : item.childList[0]
+                ? item.childList[0].url || ""
+                : "";
+                return {
+                    name: item.name,
+                    path: url,
+                    id: item.id,
+                    icon: item.imgPath,
+                    children:item.childList.length === 0? []:this.mapMenu(item.childList)
+                }
+           })
+           return result
         },
     },
     computed: {
@@ -101,34 +120,7 @@ export default {
             return this.userData.flat;
         },
         menu() {
-            if (!this.userData.barList) return [];
-            return this.userData.barList.map((item) => {
-                const url = item.url
-                    ? item.url
-                    : item.childList[0]
-                    ? item.childList[0].url || ""
-                    : "";
-                return {
-                    name: item.name,
-                    path: url,
-                    id: item.id,
-                    icon: item.imgPath,
-                    children: item.childList.map((sub) => {
-                        return {
-                            name: sub.name,
-                            path: sub.url
-                                ? sub.url
-                                : sub.childList[0]
-                                ? sub.childList[0].url || 0
-                                : "",
-                            id: sub.id,
-                            parentId: sub.parentId,
-                            icon: sub.imgPath,
-                            isOut: /^https?\:\/\//.test(sub.url),
-                        };
-                    }),
-                };
-            });
+            return this.mapMenu(this.userData.barList)
         },
         defaultActive() {
             this.search = "";
@@ -156,6 +148,9 @@ export default {
     data() {
         return {};
     },
+    created(){
+        console.log(this.menu,'鑿滃崟')
+    }
 };
 </script>
 
diff --git a/attendance-performance-manager-ui/admin/src/components/tabPane.vue b/attendance-performance-manager-ui/admin/src/components/tabPane.vue
new file mode 100644
index 0000000000000000000000000000000000000000..40cfb1a3fa1e340d96f0a81a7a28707fc130ec17
--- /dev/null
+++ b/attendance-performance-manager-ui/admin/src/components/tabPane.vue
@@ -0,0 +1,31 @@
+<template>
+    <div>
+        <el-menu :default-active="activeName" class="el-menu-demo" mode="horizontal" @select="handleClick" v-if="thirdList.length>0">
+            <el-menu-item :index="item.path"  v-for="(item,index) in thirdList" :key="index">{{item.name}}</el-menu-item>
+        </el-menu>
+    </div>  
+</template>
+
+<script>
+export default {
+    props:{
+        thirdList:{
+            type:Boolean,
+            default:[]
+        },
+        activeName:{
+            type:String,
+            default:''
+        }
+    },
+    methods:{
+        handleClick(key, keyPath){
+            this.$emit('handleClick',key)
+        }
+    }
+}
+</script>
+
+<style>
+
+</style>
\ No newline at end of file
diff --git a/attendance-performance-manager-ui/admin/src/router.js b/attendance-performance-manager-ui/admin/src/router.js
index 626f62ac791932572c61a2684dbc08626b3770a4..973035143f3744ed9a2d1b976f99be8e0a4861e2 100644
--- a/attendance-performance-manager-ui/admin/src/router.js
+++ b/attendance-performance-manager-ui/admin/src/router.js
@@ -39,12 +39,15 @@ const router = new Router({
                 ...restBuilder('task', 'system/task'), // 绯荤粺绠$悊--浠诲姟绠$悊
 
                 //閮ㄩ棬
-                ...restBuilder('dept', 'dept'),
+                ...restBuilder('dept', 'dept'),//閮ㄩ棬
+
                 ...restBuilder('staff', 'staff'),//鑺卞悕鍐� 鍛樺伐淇℃伅
                 ...restBuilder('staff/care', 'staff/care'),// 鍛樺伐鍏虫€€淇℃伅
                 ...restBuilder('care/template', 'care/template'),// 鍏虫€€闂€欎俊鎭�
-                ...restBuilder('job', 'job'),// 鑱屼綅淇℃伅
                 ...restBuilder('staff/black', 'staff/black'),// 鍛樺伐榛戝悕鍗曚俊鎭�
+
+
+                ...restBuilder('job', 'job'),// 鑱屼綅淇℃伅
                 ...restBuilder('staff/adjust/log', 'staff/adjust/log'),// 鍛樺伐璋冨矖淇℃伅
                 ...restBuilder('staff/regular', 'staff/regular'),// 鍛樺伐杞淇℃伅
                 ...restBuilder('staff/leave', 'staff/leave'),// 鍛樺伐绂昏亴淇℃伅
@@ -108,7 +111,7 @@ function builder(path, component = path, requiresAuth = false) {
         component: getComponent(component),
         meta: {
             requiresAuth: requiresAuth
-        }
+        },
     }
 }
 
diff --git a/attendance-performance-manager-ui/admin/src/store.js b/attendance-performance-manager-ui/admin/src/store.js
index d5bbfaaf32669dcebd508bb6e07afd447b1f9bc2..de3fae8990bb9a9ab2a093c11f191bd9341e1a30 100644
--- a/attendance-performance-manager-ui/admin/src/store.js
+++ b/attendance-performance-manager-ui/admin/src/store.js
@@ -7,14 +7,25 @@ Vue.use(Vuex)
 let userData = {};
 let currentParentName = ''
 let headBar = []
-
+let CurrentThirdArr = []
+let ThirdPath = ''
+let CurrentSecondPath = ''
 try {
   userData = JSON.parse(window.sessionStorage.userData || '{}');
   currentParentName = window.sessionStorage.currentParentName || ''
   headBar = JSON.parse(window.sessionStorage.headBar || '{}')
+
+  CurrentThirdArr = JSON.parse(window.sessionStorage.CurrentThirdArr || '{}')
+
+  ThirdPath = window.sessionStorage.ThirdPath || ''
+  CurrentSecondPath = window.sessionStorage.CurrentSecondPath || ''
 } catch (error) {
   console.log('鏈粠session涓幏鍙栧埌userData')
   console.log('鏈粠session涓幏鍙栧埌currentParentName')
+  console.log('鏈粠session涓幏鍙栧埌headBar')
+  console.log('鏈粠session涓幏鍙栧埌CurrentThirdArr')
+  console.log('鏈粠session涓幏鍙栧埌ThirdPath')
+  console.log('鏈粠session涓幏鍙栧埌CurrentSecondPath')
 }
 
 function convertTreeToList(root, array) {
@@ -54,7 +65,10 @@ export default new Vuex.Store({
     userData,//鐢ㄦ埛鏁版嵁
     group: '',
     headBar,
-    currentParentName//褰撳墠閫夋嫨鑿滃崟
+    currentParentName,//褰撳墠閫夋嫨涓€绾ц彍鍗�
+    CurrentSecondPath,//褰撳墠浜岀骇鑿滃崟璺緞
+    CurrentThirdArr,
+    ThirdPath
   },
   // 鍚屾瀛樺偍鏁版嵁
   mutations: {
@@ -65,6 +79,7 @@ export default new Vuex.Store({
       window.sessionStorage.userData = JSON.stringify(data);
       window.sessionStorage.token = data.token;
     },
+    // 澶撮儴瀵艰埅鏍忔暟鎹�
     setHeadBar(state,data){
       state.headBar = data
       window.sessionStorage.headBar = JSON.stringify(data)
@@ -72,16 +87,36 @@ export default new Vuex.Store({
     logout(state) {
       state.userData = {};
       state.isLogin = false;
-      window.sessionStorage.userData = '';
-      window.sessionStorage.token = '';
+      // window.sessionStorage.userData = '';
+      // window.sessionStorage.token = '';
+      // window.sessionStorage.headBar = ''
+      // window.sessionStorage.currentParentName = ''
+      // window.sessionStorage.CurrentSecondPath = ''
+      // window.sessionStorage.CurrentThirdArr = ''
+      window.sessionStorage.clear()
     },
     setGroup(state, data) {
       state.group = data;
     },
+    // 褰撳墠浠ュ強瀵艰埅鍚�
     setCurrentParentName(state,data){
       state.currentParentName = data
       window.sessionStorage.currentParentName = data
-    }
+    },
+    setCurrentSecondPath(state,data){
+      state.CurrentSecondPath = data
+      window.sessionStorage.CurrentSecondPath = data
+    },
+    // 褰撳墠涓夌骇瀵艰埅鏍�
+    setCurrentThirdArr(state,data){
+      state.CurrentThirdArr = data
+      window.sessionStorage.CurrentThirdArr = JSON.stringify(data)
+    },
+    // 褰撳墠涓夌骇瀵艰埅鏍忚矾寰�
+    setThirdPath(state,data){
+      state.ThirdPath = data
+      window.sessionStorage.ThirdPath = data
+    },
   },
   // 寮傛浠诲姟
   actions: {
diff --git a/attendance-performance-manager-ui/admin/src/views/Home.vue b/attendance-performance-manager-ui/admin/src/views/Home.vue
index a7d2bbd69be27050aea96389ed5e53344c9532f4..52902da6afb62065a6b8c3fef8fa0ff5ed1332c6 100644
--- a/attendance-performance-manager-ui/admin/src/views/Home.vue
+++ b/attendance-performance-manager-ui/admin/src/views/Home.vue
@@ -2,7 +2,7 @@
     <div class="page page-home">
         <!-- 娆㈣繋浣狅紝{{userData}} -->
         <el-row type="flex" align="top" justify="space-between" :gutter="40">
-            <el-col :span="6">
+            <el-col :span="6" :xs="12">
                 <el-card>
                     <div class="data_left">
                         <div class="title">浠婃棩鏁版嵁娲炲療</div>
@@ -38,9 +38,8 @@
                         </div>
                     </div>
                 </el-card>
-                
             </el-col>
-            <el-col :span="18">
+            <el-col :span="18" :xs="12">
                 <el-card class="right_card">
                     <div class="data_right">
                         <div class="title">绉戝鍖栥€佺簿缁嗗寲銆佷互浜轰负鏈煡琛屽悎涓€鐨勭鐞嗙悊蹇�</div>
@@ -71,26 +70,7 @@ export default {
             return this.$store.state.userData;
         },
         menu() {
-            if(!this.userData.barList) return []
-            return this.userData.barList.map(item=>{
-                const url = item.url ? item.url : (item.childList[0] ? (item.childList[0].url || '') : '');
-                return {
-                name: item.name,
-                path: url,
-                id: item.id,
-                icon: item.imgPath,
-                children: item.childList.map(sub=>{
-                    return {
-                    name: sub.name,
-                    path: sub.url ? sub.url : (sub.childList[0] ? (sub.childList[0].url || 0) : ''),
-                    id: sub.id,
-                    parentId: sub.parentId,
-                    icon: sub.imgPath,
-                    isOut: /^https?\:\/\//.test(sub.url)
-                    }
-                })
-                }
-            })
+            return this.mapMenu(this.userData.barList)
         }
     },
     data(){
@@ -138,6 +118,8 @@ export default {
     created(){
         this.$store.commit('setHeadBar',[])
         this.$store.commit("setCurrentParentName",'')
+        this.$store.commit('setCurrentThirdArr',[])
+        console.log(this.menu,'鑿滃崟')
     },
     methods:{
         tabChildren(name){
@@ -147,20 +129,41 @@ export default {
             // 璺敱璺宠浆
             if(result.children.length>0){
                 this.$router.push({path:result.children[0].path})
+                this.$store.commit('CurrentSecondPath',result.children[0].path)
+                this.$store.commit('setCurrentThirdArr',result.children[0].children)
             }else{
                 this.$message.error('鏆傛湭瀹屾垚娣诲姞');
             }
             
-        }
+        },
+        mapMenu(arr){
+           if(arr.length === 0) return []
+           let result = arr.map(item => {
+               const url = item.url
+                ? item.url
+                : item.childList[0]
+                ? item.childList[0].url || ""
+                : "";
+                return {
+                    name: item.name,
+                    path: url,
+                    id: item.id,
+                    icon: item.imgPath,
+                    children:item.childList.length === 0? []:this.mapMenu(item.childList)
+                }
+           })
+           return result
+        },
     }
 }
 </script>
 <style scoped lang="less">
 .page-home{
     width: 100%;
+    min-width: 1400px;
     height: 100vh;
     box-sizing: border-box;
-    padding: 2% 5%;
+    // padding: 2% 5%;
     background-color: #f3f2f2;
     .data_left{
         .cell1{
diff --git a/attendance-performance-manager-ui/admin/src/views/Layout.vue b/attendance-performance-manager-ui/admin/src/views/Layout.vue
index d6297493cb559eebdbbc237e0f59b5b82afd19ca..f14ee833b6d5af1259f4adbc99a854b9472c5352 100644
--- a/attendance-performance-manager-ui/admin/src/views/Layout.vue
+++ b/attendance-performance-manager-ui/admin/src/views/Layout.vue
@@ -1,13 +1,19 @@
 <template>
     <div :style="menuPageCss" class="pages page-layout">
-        <LayoutHeader v-if="menuPage!=='left'"></LayoutHeader>
+        <LayoutHeader v-if="menuPage!=='left'" @changePath="changePath"></LayoutHeader>
         <LayoutHeaderLeft @toggle="toggle" :isOpen="isOpen" v-if="menuPage==='left'" />
-        <router-view :class="{'active': !isOpen}" />
+        <div style="padding:20px">
+            <el-card>
+                <TabPane :thirdList="thirdList" :activeName="activeName" @handleClick="handleClick"></TabPane>
+                <router-view :class="{'active': !isOpen}" />            
+            </el-card> 
+        </div>
     </div>
 </template>
 <script>
 import LayoutHeader from "../components/Header";
 import LayoutHeaderLeft from "../components/HeaderLeft";
+import TabPane from '../components/tabPane.vue'
 const isPC = /(iPhone|iPad|iPod|iOS|Android)/i.test(navigator.userAgent);
 //鑿滃崟浣嶇疆锛氬彇鍊硷細 left :鑿滃崟鍦ㄥ乏闈紝 top :鑿滃崟鍦ㄤ笂闈�
 const MenuPage = "top";
@@ -16,12 +22,15 @@ export default {
     components: {
         LayoutHeader,
         LayoutHeaderLeft,
+        TabPane
     },
     data() {
         return {
             isOpen: isPC,
             menuPage: MenuPage,
-        };
+            isfresh:true,
+            path:''
+        }
     },
     computed: {
         menuPageCss() {
@@ -29,13 +38,29 @@ export default {
             return {
                 "--padding-top": this.menuPage === "left" ? "60px" : "0px",
                 "--margin-left": this.menuPage === "left" ? "200px" : "0px",
-            };
+            }
         },
+        thirdList(){
+            if(!this.$store.state.CurrentThirdArr) return []
+            return this.$store.state.CurrentThirdArr
+        },
+        activeName(){
+            return this.$store.state.ThirdPath
+        }
     },
     methods: {
         toggle() {
             this.isOpen = !this.isOpen;
         },
+        changePath(e){
+            this.path = e
+        },
+        handleClick(key){
+            this.$store.commit('setThirdPath',key)
+            this.$router.push({
+                path:key
+            })
+        }
     },
 };
 </script>
@@ -44,11 +69,11 @@ export default {
 .page {
     min-height: calc(100vh - 100px);
     width: 100%;
-
     position: relative;
     background: #fff;
-    padding: var(--padding-top) 5px 5px 5px;
-    margin-left: 60px;
+    // var(--padding-top) 5px 5px 5px;
+    padding: 20px;
+    // margin-left: 60px;
     &.active {
         margin-left: var(--margin-left);
     }
diff --git a/attendance-performance-manager-ui/admin/src/views/staff/adjust/log/dialogshow.vue b/attendance-performance-manager-ui/admin/src/views/staff/adjust/log/dialogshow.vue
index fec43856a86ded33b0663c2eb8e4ccd5720c32fa..9d0c3b86bbeb2ad1ce0c76f9283b3c2662f8759f 100644
--- a/attendance-performance-manager-ui/admin/src/views/staff/adjust/log/dialogshow.vue
+++ b/attendance-performance-manager-ui/admin/src/views/staff/adjust/log/dialogshow.vue
@@ -3,7 +3,7 @@
     <el-dialog :title="title" :visible.sync="open" width="90%" append-to-body>
         <el-form ref="form" :model="form" :rules="rules" label-width="120px">
             <el-row>
-                                            <Field label="鍛樺伐ID" prop="staffId" v-model="form.staffId" placeholder="璇疯緭鍏ュ憳宸D"/>
+                            <Field label="鍛樺伐ID" prop="staffId" v-model="form.staffId" placeholder="璇疯緭鍏ュ憳宸D"/>
                             <Field label="鍛樺伐濮撳悕" prop="fullName" v-model="form.fullName" placeholder="璇疯緭鍏ュ憳宸ュ鍚�"/>
                             <Field label="鎬у埆1鐢�2濂�" prop="gender" v-model="form.gender" type="select" :enumData="dict.gender" placeholder="璇烽€夋嫨鎬у埆1鐢�2濂�"/>
                             <Field label="鍑虹敓鏃ユ湡" prop="birthday" v-model="form.birthday" type="date" />
diff --git a/attendance-performance-manager-ui/admin/src/views/staff/black/list.vue b/attendance-performance-manager-ui/admin/src/views/staff/black/list.vue
index c9e4172293caaf477dc37ae72856b59e76421b6f..6f33e7aa8b800575a313e8343004a862f61947a4 100644
--- a/attendance-performance-manager-ui/admin/src/views/staff/black/list.vue
+++ b/attendance-performance-manager-ui/admin/src/views/staff/black/list.vue
@@ -1,9 +1,6 @@
 <template>
     <div class="page">
-        <LayoutTable :data="tableData" :config="tableConfig">
-                    </LayoutTable>
-
-
+        <LayoutTable :data="tableData" :config="tableConfig"></LayoutTable>
         <drawer-show ref="drawerform" @ok="getData" />
     </div>
 </template>
@@ -16,7 +13,7 @@
         name: "StaffBlackList",
         components: {
             drawerShow
-},
+        },
         mixins: [table],
         created() {
         },
diff --git a/attendance-performance-manager-ui/admin/src/views/staff/dialogshow.vue b/attendance-performance-manager-ui/admin/src/views/staff/dialogshow.vue
index 38f499497bd2b7525971b7a39ae936ad063b0bb2..12017d10b4c2a5c5cbdf1c5d344f841a95964d4e 100644
--- a/attendance-performance-manager-ui/admin/src/views/staff/dialogshow.vue
+++ b/attendance-performance-manager-ui/admin/src/views/staff/dialogshow.vue
@@ -3,25 +3,25 @@
     <el-dialog :title="title" :visible.sync="open" width="90%" append-to-body>
         <el-form ref="form" :model="form" :rules="rules" label-width="120px">
             <el-row>
-                                            <Field label="鍛樺伐濮撳悕" prop="name" v-model="form.name" placeholder="璇疯緭鍏ュ憳宸ュ鍚�"/>
-                            <Field label="鎬у埆" prop="gender" v-model="form.gender" type="select" :enumData="dict.gender" placeholder="璇烽€夋嫨鎬у埆"/>
-                            <Field label="鍑虹敓鏃ユ湡" prop="birthday" v-model="form.birthday" type="date" />
-                            <Field label="鐓х墖" prop="photoPath" v-model="form.photoPath" type="textarea" placeholder="璇疯緭鍏ョ収鐗�"/>
-                            <Field label="鑱旂郴鐢佃瘽" prop="phoneNumber" v-model="form.phoneNumber" placeholder="璇疯緭鍏ヨ仈绯荤數璇�"/>
-                            <Field label="韬唤璇佸彿鐮�" prop="idCard" v-model="form.idCard" placeholder="璇疯緭鍏ヨ韩浠借瘉鍙风爜"/>
-                            <Field label="宸ュ彿" prop="workNum" v-model="form.workNum" placeholder="璇疯緭鍏ュ伐鍙�"/>
-                            <Field label="鏀挎不闈㈣矊 " prop="politicalstatus" v-model="form.politicalstatus" type="select" :enumData="dict.politicalstatus" placeholder="璇烽€夋嫨鏀挎不闈㈣矊 "/>
-                            <Field label="鎵€灞為儴闂�" prop="deptId" v-model="form.deptId" placeholder="璇疯緭鍏ユ墍灞為儴闂�"/>
-                            <Field label="鎵€灞為儴闂ㄥ悕绉�" prop="deptName" v-model="form.deptName" placeholder="璇疯緭鍏ユ墍灞為儴闂ㄥ悕绉�"/>
-                            <Field label="鑱屼綅ID" prop="positionId" v-model="form.positionId" placeholder="璇疯緭鍏ヨ亴浣岻D"/>
-                            <Field label="鑱屼綅鍚嶇О" prop="positionName" v-model="form.positionName" placeholder="璇疯緭鍏ヨ亴浣嶅悕绉�"/>
-                            <Field label="鍛樺伐绫诲瀷" prop="staffType" v-model="form.staffType" type="select" :enumData="dict.staffType" placeholder="璇烽€夋嫨鍛樺伐绫诲瀷"/>
-                            <Field label="鍛樺伐鐘舵€�" prop="status" v-model="form.status" type="select" :enumData="dict.status" placeholder="璇烽€夋嫨鍛樺伐鐘舵€�"/>
-                            <Field label="鍏ヨ亴鐧昏琛�" prop="registerPath" v-model="form.registerPath" type="textarea" placeholder="璇疯緭鍏ュ叆鑱岀櫥璁拌〃"/>
-                            <Field label="鍏ヨ亴鏃堕棿" prop="entryDate" v-model="form.entryDate" type="date" />
-                            <Field label="杞鏃堕棿" prop="regularDate" v-model="form.regularDate" type="date" />
-                            <Field label="绂昏亴鏃堕棿" prop="leaveDate" v-model="form.leaveDate" type="date" />
-                            <Field label="澶囨敞" prop="remark" v-model="form.remark" type="textarea" placeholder="璇疯緭鍏ュ娉�"/>
+                <Field label="鍛樺伐濮撳悕" prop="name" v-model="form.name" placeholder="璇疯緭鍏ュ憳宸ュ鍚�"/>
+                <Field label="鎬у埆" prop="gender" v-model="form.gender" type="select" :enumData="dict.gender" placeholder="璇烽€夋嫨鎬у埆"/>
+                <Field label="鍑虹敓鏃ユ湡" prop="birthday" v-model="form.birthday" type="date" />
+                <Field label="鐓х墖" prop="photoPath" v-model="form.photoPath" type="textarea" placeholder="璇疯緭鍏ョ収鐗�"/>
+                <Field label="鑱旂郴鐢佃瘽" prop="phoneNumber" v-model="form.phoneNumber" placeholder="璇疯緭鍏ヨ仈绯荤數璇�"/>
+                <Field label="韬唤璇佸彿鐮�" prop="idCard" v-model="form.idCard" placeholder="璇疯緭鍏ヨ韩浠借瘉鍙风爜"/>
+                <Field label="宸ュ彿" prop="workNum" v-model="form.workNum" placeholder="璇疯緭鍏ュ伐鍙�"/>
+                <Field label="鏀挎不闈㈣矊 " prop="politicalstatus" v-model="form.politicalstatus" type="select" :enumData="dict.politicalstatus" placeholder="璇烽€夋嫨鏀挎不闈㈣矊 "/>
+                <Field label="鎵€灞為儴闂�" prop="deptId" v-model="form.deptId" placeholder="璇疯緭鍏ユ墍灞為儴闂�"/>
+                <Field label="鎵€灞為儴闂ㄥ悕绉�" prop="deptName" v-model="form.deptName" placeholder="璇疯緭鍏ユ墍灞為儴闂ㄥ悕绉�"/>
+                <Field label="鑱屼綅ID" prop="positionId" v-model="form.positionId" placeholder="璇疯緭鍏ヨ亴浣岻D"/>
+                <Field label="鑱屼綅鍚嶇О" prop="positionName" v-model="form.positionName" placeholder="璇疯緭鍏ヨ亴浣嶅悕绉�"/>
+                <Field label="鍛樺伐绫诲瀷" prop="staffType" v-model="form.staffType" type="select" :enumData="dict.staffType" placeholder="璇烽€夋嫨鍛樺伐绫诲瀷"/>
+                <Field label="鍛樺伐鐘舵€�" prop="status" v-model="form.status" type="select" :enumData="dict.status" placeholder="璇烽€夋嫨鍛樺伐鐘舵€�"/>
+                <Field label="鍏ヨ亴鐧昏琛�" prop="registerPath" v-model="form.registerPath" type="textarea" placeholder="璇疯緭鍏ュ叆鑱岀櫥璁拌〃"/>
+                <Field label="鍏ヨ亴鏃堕棿" prop="entryDate" v-model="form.entryDate" type="date" />
+                <Field label="杞鏃堕棿" prop="regularDate" v-model="form.regularDate" type="date" />
+                <Field label="绂昏亴鏃堕棿" prop="leaveDate" v-model="form.leaveDate" type="date" />
+                <Field label="澶囨敞" prop="remark" v-model="form.remark" type="textarea" placeholder="璇疯緭鍏ュ娉�"/>
 
             </el-row>
 
diff --git a/attendance-performance-manager-ui/admin/src/views/staff/drawershow.vue b/attendance-performance-manager-ui/admin/src/views/staff/drawershow.vue
index 0239b0084d79443768d1c304ef5b06ef6fc6aa72..947988a35b26524a6ee1b3bd796e343855ddac75 100644
--- a/attendance-performance-manager-ui/admin/src/views/staff/drawershow.vue
+++ b/attendance-performance-manager-ui/admin/src/views/staff/drawershow.vue
@@ -7,26 +7,25 @@
             size="50%">
         <el-form ref="form" :model="form" :rules="rules" label-width="120px">
             <el-row>
-                                            <Field label="鍛樺伐濮撳悕" prop="name" v-model="form.name" placeholder="璇疯緭鍏ュ憳宸ュ鍚�"/>
-                            <Field label="鎬у埆" prop="gender" v-model="form.gender" type="select" :enumData="dict.gender" placeholder="璇烽€夋嫨鎬у埆"/>
-                            <Field label="鍑虹敓鏃ユ湡" prop="birthday" v-model="form.birthday" type="date" />
-                            <Field label="鐓х墖" prop="photoPath" v-model="form.photoPath" type="textarea" placeholder="璇疯緭鍏ョ収鐗�"/>
-                            <Field label="鑱旂郴鐢佃瘽" prop="phoneNumber" v-model="form.phoneNumber" placeholder="璇疯緭鍏ヨ仈绯荤數璇�"/>
-                            <Field label="韬唤璇佸彿鐮�" prop="idCard" v-model="form.idCard" placeholder="璇疯緭鍏ヨ韩浠借瘉鍙风爜"/>
-                            <Field label="宸ュ彿" prop="workNum" v-model="form.workNum" placeholder="璇疯緭鍏ュ伐鍙�"/>
-                            <Field label="鏀挎不闈㈣矊 " prop="politicalstatus" v-model="form.politicalstatus" type="select" :enumData="dict.politicalstatus" placeholder="璇烽€夋嫨鏀挎不闈㈣矊 "/>
-                            <Field label="鎵€灞為儴闂�" prop="deptId" v-model="form.deptId" placeholder="璇疯緭鍏ユ墍灞為儴闂�"/>
-                            <Field label="鎵€灞為儴闂ㄥ悕绉�" prop="deptName" v-model="form.deptName" placeholder="璇疯緭鍏ユ墍灞為儴闂ㄥ悕绉�"/>
-                            <Field label="鑱屼綅ID" prop="positionId" v-model="form.positionId" placeholder="璇疯緭鍏ヨ亴浣岻D"/>
-                            <Field label="鑱屼綅鍚嶇О" prop="positionName" v-model="form.positionName" placeholder="璇疯緭鍏ヨ亴浣嶅悕绉�"/>
-                            <Field label="鍛樺伐绫诲瀷" prop="staffType" v-model="form.staffType" type="select" :enumData="dict.staffType" placeholder="璇烽€夋嫨鍛樺伐绫诲瀷"/>
-                            <Field label="鍛樺伐鐘舵€�" prop="status" v-model="form.status" type="select" :enumData="dict.status" placeholder="璇烽€夋嫨鍛樺伐鐘舵€�"/>
-                            <Field label="鍏ヨ亴鐧昏琛�" prop="registerPath" v-model="form.registerPath" type="textarea" placeholder="璇疯緭鍏ュ叆鑱岀櫥璁拌〃"/>
-                            <Field label="鍏ヨ亴鏃堕棿" prop="entryDate" v-model="form.entryDate" type="date" />
-                            <Field label="杞鏃堕棿" prop="regularDate" v-model="form.regularDate" type="date" />
-                            <Field label="绂昏亴鏃堕棿" prop="leaveDate" v-model="form.leaveDate" type="date" />
-                            <Field label="澶囨敞" prop="remark" v-model="form.remark" type="textarea" placeholder="璇疯緭鍏ュ娉�"/>
-
+                <Field label="鍛樺伐濮撳悕" prop="name" v-model="form.name" placeholder="璇疯緭鍏ュ憳宸ュ鍚�"/>
+                <Field label="鎬у埆" prop="gender" v-model="form.gender" type="select" :enumData="dict.gender" placeholder="璇烽€夋嫨鎬у埆"/>
+                <Field label="鍑虹敓鏃ユ湡" prop="birthday" v-model="form.birthday" type="date" />
+                <Field label="鐓х墖" prop="photoPath" v-model="form.photoPath" type="textarea" placeholder="璇疯緭鍏ョ収鐗�"/>
+                <Field label="鑱旂郴鐢佃瘽" prop="phoneNumber" v-model="form.phoneNumber" placeholder="璇疯緭鍏ヨ仈绯荤數璇�"/>
+                <Field label="韬唤璇佸彿鐮�" prop="idCard" v-model="form.idCard" placeholder="璇疯緭鍏ヨ韩浠借瘉鍙风爜"/>
+                <Field label="宸ュ彿" prop="workNum" v-model="form.workNum" placeholder="璇疯緭鍏ュ伐鍙�"/>
+                <Field label="鏀挎不闈㈣矊 " prop="politicalstatus" v-model="form.politicalstatus" type="select" :enumData="dict.politicalstatus" placeholder="璇烽€夋嫨鏀挎不闈㈣矊 "/>
+                <Field label="鎵€灞為儴闂�" prop="deptId" v-model="form.deptId" placeholder="璇疯緭鍏ユ墍灞為儴闂�"/>
+                <Field label="鎵€灞為儴闂ㄥ悕绉�" prop="deptName" v-model="form.deptName" placeholder="璇疯緭鍏ユ墍灞為儴闂ㄥ悕绉�"/>
+                <Field label="鑱屼綅ID" prop="positionId" v-model="form.positionId" placeholder="璇疯緭鍏ヨ亴浣岻D"/>
+                <Field label="鑱屼綅鍚嶇О" prop="positionName" v-model="form.positionName" placeholder="璇疯緭鍏ヨ亴浣嶅悕绉�"/>
+                <Field label="鍛樺伐绫诲瀷" prop="staffType" v-model="form.staffType" type="select" :enumData="dict.staffType" placeholder="璇烽€夋嫨鍛樺伐绫诲瀷"/>
+                <Field label="鍛樺伐鐘舵€�" prop="status" v-model="form.status" type="select" :enumData="dict.status" placeholder="璇烽€夋嫨鍛樺伐鐘舵€�"/>
+                <Field label="鍏ヨ亴鐧昏琛�" prop="registerPath" v-model="form.registerPath" type="textarea" placeholder="璇疯緭鍏ュ叆鑱岀櫥璁拌〃"/>
+                <Field label="鍏ヨ亴鏃堕棿" prop="entryDate" v-model="form.entryDate" type="date" />
+                <Field label="杞鏃堕棿" prop="regularDate" v-model="form.regularDate" type="date" />
+                <Field label="绂昏亴鏃堕棿" prop="leaveDate" v-model="form.leaveDate" type="date" />
+                <Field label="澶囨敞" prop="remark" v-model="form.remark" type="textarea" placeholder="璇疯緭鍏ュ娉�"/>
             </el-row>
 
             <form-buttons @submit='submitForm' noCancelBtn />
@@ -51,7 +50,7 @@
                 // 閬僵灞�
                 loading: true,
                 // 寮瑰嚭灞傛爣棰�
-                title: "鍛樺伐鍩烘湰淇℃伅",
+                title: "涓汉涓婚〉",
                 // 鏄惁鏄剧ず寮瑰嚭灞�
                 open: false,
                 direction:"rtl",
diff --git a/attendance-performance-manager-ui/admin/src/views/staff/homepage.vue b/attendance-performance-manager-ui/admin/src/views/staff/homepage.vue
new file mode 100644
index 0000000000000000000000000000000000000000..c2d45d05846d30f9e380abf70a4fb7365f1b0625
--- /dev/null
+++ b/attendance-performance-manager-ui/admin/src/views/staff/homepage.vue
@@ -0,0 +1,27 @@
+<template>
+<div class="personal">
+    <el-drawer title="涓汉涓婚〉" :visible.sync="open">
+            {{data}}
+    </el-drawer>
+</div>  
+</template>
+
+<script>
+export default {
+    props:{
+        data:{
+            type:Object,
+            default:{}
+        }
+    },
+    data(){
+        return{
+            open:true
+        }
+    }
+}
+</script>
+
+<style>
+
+</style>
\ No newline at end of file
diff --git a/attendance-performance-manager-ui/admin/src/views/staff/list.vue b/attendance-performance-manager-ui/admin/src/views/staff/list.vue
index bf9112bfeba2b841fd2194e716acade8ffaf6b1f..cde550b3b0221ee5e97dbd4a56b8edfcf14ef725 100644
--- a/attendance-performance-manager-ui/admin/src/views/staff/list.vue
+++ b/attendance-performance-manager-ui/admin/src/views/staff/list.vue
@@ -1,42 +1,70 @@
 <template>
     <div class="page">
-      <el-row :gutter="20">
-        <el-col :span="6" :xs="12" class="mytree">
-          <el-card>
+        <div class="totalNum flex">
+            <div class="item">鍦ㄨ亴鍛樺伐 <span class="num">66</span></div>
+            <div class="item flex">
+              <div>鍏ㄨ亴 <span class="num">66</span></div>
+              <div>瀹炰範 <span class="num">66</span></div>
+              <div>鍏艰亴 <span class="num">66</span></div>              
+            </div>
 
-            <el-scrollbar style="height: 100%">
-              <el-tree
-                  size="mini"
-                  ref="siteTree"
-                  :data="areaData"
-                  id="el-tree"
-                  node-key="id"
-                  indent="4"
-                  :props="treeProps"
-                  :load="loadNode"
-                  highlight-current
-                  default-expand-all
-                  :expand-on-click-node="false"
-                  :render-content="renderContent"
-                  @node-click="handleNodeClick"
-              >
-              </el-tree>
-            </el-scrollbar>
-          </el-card>
-        </el-col>
+            <div class="item flex">
+              <div>璇曠敤 <span class="num">66</span></div>
+              <div>姝e紡 <span class="num">66</span></div>
+              <div>寰呯鑱� <span class="num">66</span></div>              
+            </div>
+        </div>
+        <el-row :gutter="20">
+          <el-col :span="6" :xs="12" class="mytree">
+              <div class="titles">閫夋嫨閮ㄩ棬</div>
+              <el-scrollbar style="height: 100%">
+                <el-tree
+                    size="mini"
+                    ref="siteTree"
+                    :data="areaData"
+                    id="el-tree"
+                    node-key="id"
+                    indent="4"
+                    :props="treeProps"
+                    :load="loadNode"
+                    highlight-current
+                    default-expand-all
+                    :expand-on-click-node="false"
+                    :render-content="renderContent"
+                    @node-click="handleNodeClick"
+                >
+                </el-tree>
+              </el-scrollbar>
+          </el-col>
+          <el-col :span="18" :xs="12">
 
-        <el-col :span="18" :xs="12">
-          <el-card>
-            <el-row>
-              <LayoutTable notAdd
-                           notDel :data="tableData" :config="tableConfig">
-              </LayoutTable>
-            </el-row>
-          </el-card>
-        </el-col>
-      </el-row>
-
-        <drawer-show ref="drawerform" @ok="getData" />
+              <el-row>
+                <div class="controllList">
+                  <!-- <el-button type="primary">鏂板鍛樺伐</el-button> -->
+                  <el-button type="primary">瀵煎嚭鏁版嵁</el-button>
+                  <el-dropdown class="moreControll">
+                    <el-button type="primary">
+                      鏇村鎿嶄綔<i class="el-icon-arrow-down el-icon--right"></i>
+                    </el-button>
+                    <el-dropdown-menu slot="dropdown">
+                      <el-dropdown-item>鍚屾鏁版嵁</el-dropdown-item>
+                      <el-dropdown-item>瀵煎叆鑺卞悕鍐�</el-dropdown-item>
+                      <el-dropdown-item>鍘嗗彶鑺卞悕鍐�</el-dropdown-item>
+                      <el-dropdown-item>鑷畾涔夊垪琛ㄥ瓧娈�</el-dropdown-item>
+                    </el-dropdown-menu>
+                  </el-dropdown>
+                  <span class="freshTime">
+                    <i class="el-icon-refresh"></i>
+                    <span>涓婃鍚屾鏃堕棿锛�2023-04-09 09锛�00锛�00</span>
+                  </span>
+                </div>
+                <LayoutTable notDel :data="tableData" :config="tableConfig">
+                </LayoutTable>
+              </el-row>
+          </el-col>
+        </el-row>        
+      <!-- <drawer-show ref="drawerform" @ok="getData" /> -->
+      <home-page v-if="isshowHome" :data="personData"></home-page>
     </div>
 </template>
 
@@ -45,17 +73,19 @@
     import drawerShow from "./drawershow";
     import table from "@/assets/mixins/table";
     import tree from "@/assets/mixins/tree";
+    import homePage from './homepage.vue'
     export default {
         name: "StaffList",
         components: {
-          drawerShow
-},
+          drawerShow,
+          homePage
+        },
         mixins: [table,tree],
-      created() {
-        this.$post("/dept/treeselect", {}).then(({ data }) => {
-          this.areaData = data.result;
-        });
-      },
+        created() {
+          this.$post("/dept/treeselect", {}).then(({ data }) => {
+            this.areaData = data.result
+          })
+        },
         methods: {
             /** 閲嶅啓鏂板鏂规硶 */
             toAdd(row) {
@@ -67,15 +97,21 @@
             },
             /** 閲嶅啓鏌ョ湅鏂规硶 */
             toView(row) {
-                this.$refs.drawerform.view(row);
+                // this.$refs.drawerform.view(row);
+                // console.log(row)
+                this.personData = row
+                this.isshowHome = true
             },
 
-          handleNodeClick(node) {
-            this.currentNode = node;
-            this.query = { deptId: node.id };
-            this.getData();
-          },
-
+            handleNodeClick(node) {
+              this.currentNode = node;
+              this.query = { deptId: node.id };
+              this.getData();
+            },
+            // 鍒囨崲鏍囩椤�
+            handleClick(e){
+              console.log(this.activeName)
+            }
         },
         data() {
             return {
@@ -87,58 +123,51 @@
                             label: "鍛樺伐濮撳悕",
                             fuzzy: true
                         },
-                        {
-                            name: "politicalstatus",
-                            type: "select",
-                            label: "鏀挎不闈㈣矊 ",
-                            fuzzy: true
-                        },
-                        {
-                            name: "staffType",
-                            type: "select",
-                            label: "鍛樺伐绫诲瀷",
-                            fuzzy: true
-                        },
-                        {
-                            name: "status",
-                            type: "select",
-                            label: "鍛樺伐鐘舵€�",
-                            fuzzy: true
-                        },
+                        // {
+                        //     name: "politicalstatus",
+                        //     type: "select",
+                        //     label: "鏀挎不闈㈣矊 ",
+                        //     fuzzy: true
+                        // },
+                        // {
+                        //     name: "staffType",
+                        //     type: "select",
+                        //     label: "鍛樺伐绫诲瀷",
+                        //     fuzzy: true
+                        // },
+                        // {
+                        //     name: "status",
+                        //     type: "select",
+                        //     label: "鍛樺伐鐘舵€�",
+                        //     fuzzy: true
+                        // },
                     ],
                     columns: [
                         {type: "selection", width: 60},
                         {type: "index",label: "搴忓彿",width: 50},
-
                         {label: "鍛樺伐濮撳悕", prop: "name"},
-
-                        {label: "鎬у埆", prop: "gender",formatter: this.formatter},
-
-                        {label: "鏀挎不闈㈣矊 ", prop: "politicalstatus",formatter: this.formatter},
-
-                        {label: "鍛樺伐绫诲瀷", prop: "staffType",formatter: this.formatter},
-
+                        {label: "宸ュ彿", prop: "workNum"},
+                        {label: "閮ㄩ棬", prop: "deptName"},
+                        {label: "鑱屼綅", prop: "positionName"},
+                        {label: "鍛樺伐绫诲瀷", prop: "staffType",formatter: this.formatterStatus},
                         {label: "鍛樺伐鐘舵€�", prop: "status",formatter: this.formatter},
-
-                        {label: "鍏ヨ亴鏃堕棿", prop: "entryDate", formatter: this.formatterDate},
-
-                        {label: "杞鏃堕棿", prop: "regularDate", formatter: this.formatterDate},
-
-                        {label: "绂昏亴鏃堕棿", prop: "leaveDate", formatter: this.formatterDate},
-
-                        {label: "鍒涘缓鐢ㄦ埛", prop: "createUserId", formatter: this.formatter},
+                        {label: "鏄惁鍦ㄦ斂鍔′腑蹇�", prop: "status",formatter: this.formatter},//鏈
+                        {label: "鎵嬫満鍙�", prop: "phoneNumber",formatter: this.formatter},
                         {
                             label: "鎿嶄綔",
                             width: 240,
                             formatter: row => {
                                 return (
-                                    <table-buttons noAdd row={row} onEdit={this.toEdit} onView={this.toView} onDel={this.toDel} />
-                            );
+                                    <table-buttons noAdd noDel noEdit row={row} onView={this.toView}  />
+                            )
                             }
                         }
                     ]
-                }
-            };
+                },
+                activeName:'first',
+                isshowHome:false,
+                personData:[]
+            }
         }
     };
 </script>
@@ -157,6 +186,34 @@
 </style>
 
 <style lang="scss" scoped>
+.totalNum{
+  background: rgba(64, 158, 255,0.2);
+  padding: 15px;
+  border-left: 4px solid rgb(20, 134, 248);
+  color: rgb(100, 100, 100);
+  .item{
+    padding: 0 10px;
+    border-right: 1px solid gray;
+  }
+  .item:last-child{
+    border: none;
+  }
+  .num{
+    color: #409EFF;
+    margin-left: 10px;
+    margin-right: 20px;
+  }
+}
+.controllList{
+  margin-top: 20px;
+  .moreControll{
+    margin-left: 20px;
+  }
+}
+.freshTime{
+  color: #999;
+  margin-left: 20px;
+}
 .cardTitle {
   font-size: 16px;
   color: rgb(20, 134, 248);
@@ -165,6 +222,7 @@
   padding-bottom: 2px;
 }
 .mytree ::v-deep {
+  padding: 10px;
   .el-tree--highlight-current
   ::v-deep
   .el-tree-node.is-checked
@@ -237,4 +295,18 @@
     width: 24px;
   }
 }
+.titles{
+  color: #409EFF;
+  font-size: 16px;
+  display: flex;
+  align-items: center;
+}
+.titles::before{
+  content: '';
+  width:6px;
+  height: 16px;
+  background-color: #409EFF;
+  display: inline-block;
+  margin-right: 10px;
+}
 </style>
diff --git a/attendance-performance-manager-ui/admin/src/views/staff/view.vue b/attendance-performance-manager-ui/admin/src/views/staff/view.vue
index 3bf9bb90c81e1eab38bf74830916f5ee11855207..06c45786d67d9f19f8391ea75fb5971e994cec1c 100644
--- a/attendance-performance-manager-ui/admin/src/views/staff/view.vue
+++ b/attendance-performance-manager-ui/admin/src/views/staff/view.vue
@@ -3,12 +3,12 @@
         <el-descriptions  :title="title" :column="column" :size="size" :colon="false" border>
             <template slot="title">
                 <i class="el-icon-tickets"></i>
-                鍩烘湰璇︾粏淇℃伅
+                qqq鍩烘湰璇︾粏淇℃伅
             </template>
             <template slot="extra">
                 <el-button type="primary" @click="$router.go(-1)" size="small">杩斿洖</el-button>
             </template>
-                                    <el-descriptions-item label="鍛樺伐濮撳悕" label-class-name="labelClass" content-class-name="contentClass">
+                        <el-descriptions-item label="鍛樺伐濮撳悕" label-class-name="labelClass" content-class-name="contentClass">
                             {{form.name}}
                         </el-descriptions-item>
                         <el-descriptions-item label="鎬у埆" label-class-name="labelClass" content-class-name="contentClass">
diff --git a/attendance-performance-manager-ui/admin/src/views/system/menu/list.vue b/attendance-performance-manager-ui/admin/src/views/system/menu/list.vue
index ae2911f0556230c45d07c22e0e65fbe709b32d58..842c6d2dcb65d496adab8123409bc3171b382cb1 100644
--- a/attendance-performance-manager-ui/admin/src/views/system/menu/list.vue
+++ b/attendance-performance-manager-ui/admin/src/views/system/menu/list.vue
@@ -15,6 +15,7 @@ export default {
   methods: {
     beforeRender(data) {
       this.allMenu = this.sortByGroup(this.util_copy(data.data));
+      console.log(this.allMenu,'鑿滃崟鏁版嵁')
       // 瀛樺湪鏌ヨ鏉′欢锛屽睍寮€鍏ㄩ儴
       if(Object.keys(this.$route.query).length) {
         this.select = this.allMenu.filter(i=>!i.parentId).map(i=>i.id);
@@ -27,9 +28,15 @@ export default {
     // 鎸塸arentId鎺掑簭鍒嗙粍
     sortByGroup(data) {
       return data.filter(i=>!i.parentId).reduce((prev, item)=>{
-        return prev.concat([item], data.filter(i=>i.parentId == item.id));
+        return prev.concat([item], data.filter(i=>i.parentId == item.id))
       }, [])
     },
+    //閲嶆帓table
+    resetTable(arr){
+      // 涓€绾х埗绾�
+      
+    },
+
     // 鏌ョ湅涓嬬骇鑿滃崟
     selectHandler({id}) {
       // 濡傛灉宸插睍寮€锛屽垯鍏抽棴
@@ -44,7 +51,7 @@ export default {
     showChild() {
       this.tableData.data = this.allMenu.filter(item=>{
         return !item.parentId || this.select.indexOf(item.parentId) > -1
-      });
+      })
     },
     // 灞曠ず鑿滃崟鍥炬爣
     showIcon(row, column) {
@@ -92,7 +99,6 @@ export default {
           if (res && res.code && res.code == 1) {
             this.getData()
             this.loading = false;
-
             this.$message.success("鏇存柊鎺掑簭鎴愬姛锛�");
           }
         })
@@ -137,7 +143,7 @@ export default {
             formatter: row => {
               const icon = this.select.indexOf(row.id) === -1 ? 'right' : 'down';
               return (
-                !row.parentId
+                !row.parentId||row.childList.length>0
                 ? <div onClick={()=>{this.selectHandler(row)}}>
                   <i class={'el-icon-arrow-'+icon}></i>
                 </div>
@@ -201,7 +207,7 @@ export default {
                 this.handleDown(row);
               }}
                
-  ></el-link>
+            ></el-link>
 
                 <table-buttons    noView row={row} onEdit={this.toEdit} onDel={this.toDel} />
 
diff --git a/attendance-performance-manager-ui/admin/src/views/system/menu/show.vue b/attendance-performance-manager-ui/admin/src/views/system/menu/show.vue
index 39625ed4b2eeb626b510477bf7ca32d020f94e7e..71c1f4759e1d66bd330dffcd6f6f3cdabe2c8d4f 100644
--- a/attendance-performance-manager-ui/admin/src/views/system/menu/show.vue
+++ b/attendance-performance-manager-ui/admin/src/views/system/menu/show.vue
@@ -40,13 +40,23 @@ export default {
       this.$store.dispatch('login');
       this.$router.go(-1);
     },
+    // 鍚堝苟鐖跺瓙鏁扮粍
+    combineArr(Array,menu){
+      Array.forEach(item => {
+        if(item.childList.length>0){
+          menu[item.id+''] = item.name
+          this.combineArr(item.childList,menu)
+        }else{
+          menu[item.id+''] = item.name
+        }
+      })
+    }
   },
   computed: {
     menu() {
       let menu = {'0': '鏃�'};
-      this.$store.state.userData.barList.forEach(item=>{
-        menu[item.id+''] = item.name
-      });
+      this.combineArr(this.$store.state.userData.barList,menu)
+      console.log(menu)
       return menu;
     }
   },