ソースを参照

09/20 17:40

动态菜单栏设置完毕
mo 5 年 前
コミット
7aba6deb1e
32 ファイル変更592 行追加353 行削除
  1. 17 2
      src/api/silder.js
  2. 26 18
      src/layout/components/Sidebar/SidebarItem.vue
  3. 8 5
      src/layout/components/Sidebar/index.vue
  4. 7 1
      src/permission.js
  5. 324 287
      src/router/index.js
  6. 44 25
      src/store/modules/permission.js
  7. 1 1
      src/views/businessManager/orderManager/income.vue
  8. 1 2
      src/views/businessManager/orderManager/index.vue
  9. 5 0
      src/views/categroyManager/generalSettings/cycleManager.vue
  10. 5 0
      src/views/categroyManager/generalSettings/index.vue
  11. 5 0
      src/views/categroyManager/generalSettings/leaveManager.vue
  12. 5 0
      src/views/categroyManager/generalSettings/overallManager.vue
  13. 5 0
      src/views/categroyManager/generalSettings/payManager.vue
  14. 5 0
      src/views/categroyManager/generalSettings/siginManager.vue
  15. 0 0
      src/views/categroyManager/insideSetting/addressManager.vue
  16. 0 0
      src/views/categroyManager/insideSetting/adminManager.vue
  17. 5 0
      src/views/categroyManager/insideSetting/branchActive.vue
  18. 0 0
      src/views/categroyManager/insideSetting/branchManager.vue
  19. 5 0
      src/views/categroyManager/insideSetting/index.vue
  20. 0 0
      src/views/categroyManager/insideSetting/staffManager.vue
  21. 5 0
      src/views/categroyManager/specialSetup/activityManager.vue
  22. 5 0
      src/views/categroyManager/specialSetup/bannerManager.vue
  23. 5 0
      src/views/categroyManager/specialSetup/holidayManager.vue
  24. 12 0
      src/views/categroyManager/specialSetup/index.vue
  25. 12 0
      src/views/categroyManager/specialSetup/musicalManager.vue
  26. 5 0
      src/views/categroyManager/specialSetup/tempalteManager.vue
  27. 5 0
      src/views/categroyManager/specialSetup/tryClass.vue
  28. 5 0
      src/views/categroyManager/specialSetup/typesManager.vue
  29. 3 4
      src/views/login/index.vue
  30. 12 0
      src/views/reportForm/index.vue
  31. 53 6
      src/views/setSilder/addSilder.vue
  32. 2 2
      vue.config.js

+ 17 - 2
src/api/silder.js

@@ -6,15 +6,30 @@ import qs from 'qs'
 export function addSilder (data) {
   return request({
     url: '/api-auth/menu/add',
-    method: 'post',
+    method: 'put',
     data
   })
 }
-
+// : qs.stringify(data)
 // 查询菜单栏
 export function getSilder () {
   return request({
     url: '/api-auth/menu/findByUser',
     method: 'get'
   })
+}
+// 删除菜单
+export function deleteSilder (id) {
+  return request({
+    url: `/api-auth/menu/del/${id}`,
+    method: 'DELETE'
+  })
+}
+// 修改菜单
+export function resetSilder (data) {
+  return request({
+    url: `/api-auth//menu/update`,
+    method: 'PUT',
+    data
+  })
 }

+ 26 - 18
src/layout/components/Sidebar/SidebarItem.vue

@@ -1,25 +1,32 @@
 <template>
-  <div v-if="!item.hidden" class="menu-wrapper">
+  <div v-if="!item.hidden"
+       class="menu-wrapper">
     <template v-if="hasOneShowingChild(item.children,item) && (!onlyOneChild.children||onlyOneChild.noShowingChildren)&&!item.alwaysShow">
-      <app-link v-if="onlyOneChild.meta" :to="resolvePath(onlyOneChild.path)">
-        <el-menu-item :index="resolvePath(onlyOneChild.path)" :class="{'submenu-title-noDropdown':!isNest}">
-          <item :icon="onlyOneChild.meta.icon||(item.meta&&item.meta.icon)" :title="onlyOneChild.meta.title" />
+      <app-link v-if="onlyOneChild.meta"
+                :to="resolvePath(onlyOneChild.path)">
+        <el-menu-item :index="resolvePath(onlyOneChild.path)"
+                      :class="{'submenu-title-noDropdown':!isNest}">
+          <item :icon="onlyOneChild.meta.icon||(item.meta&&item.meta.icon)"
+                :title="onlyOneChild.meta.title" />
         </el-menu-item>
       </app-link>
     </template>
 
-    <el-submenu v-else ref="subMenu" :index="resolvePath(item.path)" popper-append-to-body>
+    <el-submenu v-else
+                ref="subMenu"
+                :index="resolvePath(item.path)"
+                popper-append-to-body>
       <template slot="title">
-        <item v-if="item.meta" :icon="item.meta && item.meta.icon" :title="item.meta.title" />
+        <item v-if="item.meta"
+              :icon="item.meta && item.meta.icon"
+              :title="item.meta.title" />
       </template>
-      <sidebar-item
-        v-for="child in item.children"
-        :key="child.path"
-        :is-nest="true"
-        :item="child"
-        :base-path="resolvePath(child.path)"
-        class="nest-menu"
-      />
+      <sidebar-item v-for="child in item.children"
+                    :key="child.path"
+                    :is-nest="true"
+                    :item="child"
+                    :base-path="resolvePath(child.path)"
+                    class="nest-menu" />
     </el-submenu>
   </div>
 </template>
@@ -50,14 +57,14 @@ export default {
       default: ''
     }
   },
-  data() {
+  data () {
     // To fix https://github.com/PanJiaChen/vue-admin-template/issues/237
     // TODO: refactor with render function
     this.onlyOneChild = null
     return {}
   },
   methods: {
-    hasOneShowingChild(children = [], parent) {
+    hasOneShowingChild (children = [], parent) {
       const showingChildren = children.filter(item => {
         if (item.hidden) {
           return false
@@ -75,19 +82,20 @@ export default {
 
       // Show parent if there are no child router to display
       if (showingChildren.length === 0) {
-        this.onlyOneChild = { ... parent, path: '', noShowingChildren: true }
+        this.onlyOneChild = { ...parent, path: '', noShowingChildren: true }
         return true
       }
 
       return false
     },
-    resolvePath(routePath) {
+    resolvePath (routePath) {
       if (isExternal(routePath)) {
         return routePath
       }
       if (isExternal(this.basePath)) {
         return this.basePath
       }
+      // debugger
       return path.resolve(this.basePath, routePath)
     }
   }

+ 8 - 5
src/layout/components/Sidebar/index.vue

@@ -11,8 +11,8 @@
                :active-text-color="variables.menuActiveText"
                :collapse-transition="false"
                mode="vertical">
-        <sidebar-item v-for="route in routes"
-                      :key="route.path"
+        <sidebar-item v-for="(route,index) in permission_routes"
+                      :key="index"
                       :item="route"
                       :base-path="route.path" />
       </el-menu>
@@ -28,14 +28,17 @@ import variables from '@/styles/variables.scss'
 
 export default {
   components: { SidebarItem, Logo },
+  mounted () {
+    console.log(this.permission_routes)
+  },
   computed: {
     ...mapGetters([
       'sidebar',
       'permission_routes'
     ]),
-    routes () {
-      return this.$router.options.routes
-    },
+    // routes () {
+    //   return this.$router.options.routes
+    // },
     activeMenu () {
       const route = this.$route
       const { meta, path } = route

+ 7 - 1
src/permission.js

@@ -33,7 +33,13 @@ router.beforeEach(async (to, from, next) => {
         try {
           // 异步获取用户信息
           await store.dispatch('user/getInfo')
-          next()
+          // 请求接口 生成可访问路由
+          const accessRoutes = await store.dispatch('permission/generateRoutes')
+          // 动态添加可访问的路由
+          router.addRoutes(accessRoutes)
+          // 确保addroutes完整的hack方法
+          // 设置replace:true,这样导航就不会留下历史记录。
+          next({ ...to, replace: true })
         } catch (error) {
           // remove token and go to login page to re-login
           await store.dispatch('user/resetToken')

+ 324 - 287
src/router/index.js

@@ -44,195 +44,15 @@ export const constantRoutes = [
   },
   {
     path: '/',
-    redirect: '/main', // 首页
-    component: Layout,
-    children: [
-      {
-        path: 'main',
-        name: 'main',
-        component: () => import('@/views/main/index'),
-        meta: { title: '首页' }
-      }
-    ]
-  },
-  {
-    path: '/teamDetail', // 乐团详情
-    component: Layout,
-    meta: { title: '乐团详情' },
-    children: [
-      {
-        path: 'teamDetail',
-        name: 'teamDetail',
-        component: () => import('@/views/teamDetail/index'),
-        meta: { title: '乐团详情' },
-      },
-      {
-        path: 'studentSignin',
-        name: 'studentSignin',
-        component: () => import('@/views/teamDetail/components/studentSignin'),
-        meta: { title: '学生点名' }
-      },
-      {
-        path: 'teacherSignin',
-        name: 'teacherSignin',
-        component: () => import('@/views/teamDetail/components/teacherSignin'),
-        meta: { title: '老师上课记录' }
-      }
-    ]
+    redirect: '/main/main', // 首页
   },
   {
-    path: '/teamBuild', // 创建乐团
-    component: Layout,
-    children: [
-      {
-        path: 'teamBuild',
-        name: 'teamBuild',
-        component: () => import('@/views/teamBuild/index'),
-        meta: { title: '创建乐团' }
-      }
-    ]
-  },
-  {
-    path: '/vipClass', // 小课
-    component: Layout,
-    meta: { title: 'vip管理' },
-    children: [
-      {
-        path: 'vipClass',
-        name: 'vipClass',
-        component: () => import('@/views/vipClass/vipList'),
-        meta: { title: 'vip课列表' }
-      },
-      {
-        path: 'vipDetail',
-        name: 'vipDetail',
-        component: () => import('@/views/vipClass/vipDetail/index'),
-        meta: { title: '调整记录' }
-      },
-      {
-        path: 'resetClass',
-        name: 'resetClass',
-        component: () => import('@/views/vipClass/resetClasss'),
-        meta: { title: 'vip课详情' }
-      }
-    ]
-  }, {
-    path: '/teacher',
-    component: Layout,
-    meta: { title: '老师管理', icon: '' },
-    children: [
-      {
-        path: 'teacherList',
-        name: 'teacherList',
-        meta: { title: '老师列表' },
-        component: () => import('@/views/teacherManager/teacherList')
-      },
-      {
-        path: 'teacherDetail',
-        name: 'teacherDetail',
-        meta: { title: '老师详情' },
-        component: () => import('@/views/teacherManager/teacherDetail/index')
-      }
-    ]
-  }, {
-    path: '/student',
-    component: Layout,
-    redirect: '/student/studentList',
-    meta: { title: '学生管理' },
-    children: [
-      {
-        path: 'studentList',
-        meta: { title: '学生列表' },
-        component: () => import('@/views/studentManager/studentList'),
-      },
-      {
-        path: 'studentdetaile',
-        meta: { title: '学员详情' },
-        component: () => import('@/views/studentManager/index'),
-      }
-    ]
-  }, {
     path: '/business',
-    component: Layout,
-    redirect: '/business/orderManager/income',
-    meta: { title: '交易管理' },
-    children: [
-      {
-        path: 'order',
-        meta: { title: '订单管理' },
-        component: () => import('@/views/businessManager/orderManager/index'),// Parent router-view
-        children: [{
-          path: 'income',
-          meta: { title: '收入' },
-          component: () => import('@/views/businessManager/orderManager/income')
-        }, {
-          path: 'backMoney',
-          meta: { title: '退费管理' },
-          component: () => import('@/views/businessManager/orderManager/backMoney')
-        }, {
-          path: 'expend',
-          meta: { title: '支出' },
-          component: () => import('@/views/businessManager/orderManager/expend')
-        }]
-      },
-      {
-        path: 'shopManager',
-        meta: { title: '商品管理' },
-        component: () => import('@/views/businessManager/shopManager/index'),
-        children: [
-          {
-            path: 'shopList',
-            meta: { title: '商品列表' },
-            component: () => import('@/views/businessManager/shopManager/shopList')
-          },
-          {
-            path: 'shopCategroy',
-            meta: { title: '商品分类' },
-            component: () => import('@/views/businessManager/shopManager/shopCategory')
-          }
-
-        ]
-      }
-    ]
+    redirect: '/business/teamDetail',
   },
   {
-    path: '/categoryManager',
-    component: Layout,
-    meta: { title: '系统内部管理' },
-    children: [{
-      path: 'adminManager',
-      name: 'adminManager',
-      meta: { title: '权限管理' },
-      component: () => import('@/views/categroyManager/adminManager')
-    },
-    {
-      path: 'staffManager',
-      name: 'staffManager',
-      meta: { title: '员工管理' },
-      component: () => import('@/views/categroyManager/staffManager')
-    }, {
-      path: 'branchManager',
-      name: 'branchManager',
-      meta: { title: '合作单位' },
-      component: () => import('@/views/categroyManager/branchManager')
-    }, {
-      path: 'addressManager',
-      name: 'addressManager',
-      meta: { title: '教学点管理' },
-      component: () => import('@/views/categroyManager/addressManager')
-    }
-    ]
-  }, {
-    path: '/mapDemo',
-    component: Layout,
-    meta: { title: '地图案例' },
-    children: [
-      {
-        path: 'map',
-        component: () => import('@/views/mapDemo/index'),
-        meta: { title: '地图' }
-      }
-    ]
+    path: '/reportForm',
+    redirect: '/reportForm/index'
   },
   {
     path: '/silder',
@@ -246,115 +66,301 @@ export const constantRoutes = [
       }
     ]
   }
-  ,
-  {
-    path: '/example',
-    component: Layout,
-    redirect: '/example/table',
-    name: 'Example',
-    meta: { title: 'Example', icon: 'example' },
-    children: [
-      {
-        path: 'table',
-        name: 'Table',
-        component: () => import('@/views/table/index'),
-        meta: { title: 'Table' }
-      },
-      {
-        path: 'tree',
-        name: 'Tree',
-        component: () => import('@/views/tree/index'),
-        meta: { title: 'Tree' }
-      }
-    ]
-  },
+  // {
+  //   path: '/teamDetail', // 乐团详情
+  //   component: Layout,
+  //   meta: { title: '乐团详情' },
+  //   children: [
+  //     {
+  //       path: 'teamDetail',
+  //       name: 'teamDetail',
+  //       component: () => import('@/views/teamDetail/index'),
+  //       meta: { title: '乐团详情' },
+  //     },
+  //     {
+  //       path: 'studentSignin',
+  //       name: 'studentSignin',
+  //       component: () => import('@/views/teamDetail/components/studentSignin'),
+  //       meta: { title: '学生点名' }
+  //     },
+  //     {
+  //       path: 'teacherSignin',
+  //       name: 'teacherSignin',
+  //       component: () => import('@/views/teamDetail/components/teacherSignin'),
+  //       meta: { title: '老师上课记录' }
+  //     }
+  //   ]
+  // },
+  // {
+  //   path: '/teamBuild', // 创建乐团
+  //   component: Layout,
+  //   children: [
+  //     {
+  //       path: 'teamBuild',
+  //       name: 'teamBuild',
+  //       component: () => import('@/views/teamBuild/index'),
+  //       meta: { title: '创建乐团' }
+  //     }
+  //   ]
+  // },
+  // {
+  //   path: '/vipClass', // 小课
+  //   component: Layout,
+  //   meta: { title: 'vip管理' },
+  //   children: [
+  //     {
+  //       path: 'vipClass',
+  //       name: 'vipClass',
+  //       component: () => import('@/views/vipClass/vipList'),
+  //       meta: { title: 'vip课列表' }
+  //     },
+  //     {
+  //       path: 'vipDetail',
+  //       name: 'vipDetail',
+  //       component: () => import('@/views/vipClass/vipDetail/index'),
+  //       meta: { title: '调整记录' }
+  //     },
+  //     {
+  //       path: 'resetClass',
+  //       name: 'resetClass',
+  //       component: () => import('@/views/vipClass/resetClasss'),
+  //       meta: { title: 'vip课详情' }
+  //     }
+  //   ]
+  // }, 
+  // {
+  //   path: '/teacher',
+  //   component: Layout,
+  //   meta: { title: '老师管理', icon: '' },
+  //   children: [
+  //     {
+  //       path: 'teacherList',
+  //       name: 'teacherList',
+  //       meta: { title: '老师列表' },
+  //       component: () => import('@/views/teacherManager/teacherList')
+  //     },
+  //     {
+  //       path: 'teacherDetail',
+  //       name: 'teacherDetail',
+  //       meta: { title: '老师详情' },
+  //       component: () => import('@/views/teacherManager/teacherDetail/index')
+  //     }
+  //   ]
+  // }, 
+  // {
+  //   path: '/student',
+  //   component: Layout,
+  //   redirect: '/student/studentList',
+  //   meta: { title: '学生管理' },
+  //   children: [
+  //     {
+  //       path: 'studentList',
+  //       meta: { title: '学生列表' },
+  //       component: () => import('@/views/studentManager/studentList'),
+  //     },
+  //     {
+  //       path: 'studentdetaile',
+  //       meta: { title: '学员详情' },
+  //       component: () => import('@/views/studentManager/index'),
+  //     }
+  //   ]
+  // },
+  // {
+  //   path: '/business',
+  //   component: Layout,
+  //   redirect: '/business/orderManager/income',
+  //   meta: { title: '交易管理' },
+  //   children: [
+  //     {
+  //       path: 'order',
+  //       meta: { title: '订单管理' },
+  //       component: () => import('@/views/businessManager/orderManager/index'),// Parent router-view
+  //       children: [{
+  //         path: 'income',
+  //         meta: { title: '收入' },
+  //         component: () => import('@/views/businessManager/orderManager/income')
+  //       }, {
+  //         path: 'backMoney',
+  //         meta: { title: '退费管理' },
+  //         component: () => import('@/views/businessManager/orderManager/backMoney')
+  //       }, {
+  //         path: 'expend',
+  //         meta: { title: '支出' },
+  //         component: () => import('@/views/businessManager/orderManager/expend')
+  //       }]
+  //     },
+  //     {
+  //       path: 'shopManager',
+  //       meta: { title: '商品管理' },
+  //       component: () => import('@/views/businessManager/shopManager/index'),
+  //       children: [
+  //         {
+  //           path: 'shopList',
+  //           meta: { title: '商品列表' },
+  //           component: () => import('@/views/businessManager/shopManager/shopList')
+  //         },
+  //         {
+  //           path: 'shopCategroy',
+  //           meta: { title: '商品分类' },
+  //           component: () => import('@/views/businessManager/shopManager/shopCategory')
+  //         }
 
-  {
-    path: '/form',
-    component: Layout,
-    children: [
-      {
-        path: 'index',
-        name: 'Form',
-        component: () => import('@/views/form/index'),
-        meta: { title: 'Form' }
-      }
-    ]
-  },
+  //       ]
+  //     }
+  //   ]
+  // },
+  // {
+  //   path: '/categoryManager',
+  //   component: Layout,
+  //   meta: { title: '系统内部管理' },
+  //   children: [{
+  //     path: 'adminManager',
+  //     name: 'adminManager',
+  //     meta: { title: '权限管理' },
+  //     component: () => import('@/views/categroyManager/adminManager')
+  //   },
+  //   {
+  //     path: 'staffManager',
+  //     name: 'staffManager',
+  //     meta: { title: '员工管理' },
+  //     component: () => import('@/views/categroyManager/staffManager')
+  //   }, {
+  //     path: 'branchManager',
+  //     name: 'branchManager',
+  //     meta: { title: '合作单位' },
+  //     component: () => import('@/views/categroyManager/branchManager')
+  //   }, {
+  //     path: 'addressManager',
+  //     name: 'addressManager',
+  //     meta: { title: '教学点管理' },
+  //     component: () => import('@/views/categroyManager/addressManager')
+  //   }
+  //   ]
+  // }, {
+  //   path: '/mapDemo',
+  //   component: Layout,
+  //   meta: { title: '地图案例' },
+  //   children: [
+  //     {
+  //       path: 'map',
+  //       component: () => import('@/views/mapDemo/index'),
+  //       meta: { title: '地图' }
+  //     }
+  //   ]
+  // },
 
-  {
-    path: '/nested',
-    component: Layout,
-    redirect: '/nested/menu1',
-    name: 'Nested',
-    meta: {
-      title: 'Nested',
-      icon: 'nested'
-    },
-    children: [
-      {
-        path: 'menu1',
-        component: () => import('@/views/nested/menu1/index'), // Parent router-view
-        name: 'Menu1',
-        meta: { title: 'Menu1' },
-        children: [
-          {
-            path: 'menu1-1',
-            component: () => import('@/views/nested/menu1/menu1-1'),
-            name: 'Menu1-1',
-            meta: { title: 'Menu1-1' }
-          },
-          {
-            path: 'menu1-2',
-            component: () => import('@/views/nested/menu1/menu1-2'),
-            name: 'Menu1-2',
-            meta: { title: 'Menu1-2' },
-            children: [
-              {
-                path: 'menu1-2-1',
-                component: () => import('@/views/nested/menu1/menu1-2/menu1-2-1'),
-                name: 'Menu1-2-1',
-                meta: { title: 'Menu1-2-1' }
-              },
-              {
-                path: 'menu1-2-2',
-                component: () => import('@/views/nested/menu1/menu1-2/menu1-2-2'),
-                name: 'Menu1-2-2',
-                meta: { title: 'Menu1-2-2' }
-              }
-            ]
-          },
-          {
-            path: 'menu1-3',
-            component: () => import('@/views/nested/menu1/menu1-3'),
-            name: 'Menu1-3',
-            meta: { title: 'Menu1-3' }
-          }
-        ]
-      },
-      {
-        path: 'menu2',
-        component: () => import('@/views/nested/menu2/index'),
-        meta: { title: 'menu2' }
-      }
-    ]
-  },
+  // ,
+  // {
+  //   path: '/example',
+  //   component: Layout,
+  //   redirect: '/example/table',
+  //   name: 'Example',
+  //   meta: { title: 'Example', icon: 'example' },
+  //   children: [
+  //     {
+  //       path: 'table',
+  //       name: 'Table',
+  //       component: () => import('@/views/table/index'),
+  //       meta: { title: 'Table' }
+  //     },
+  //     {
+  //       path: 'tree',
+  //       name: 'Tree',
+  //       component: () => import('@/views/tree/index'),
+  //       meta: { title: 'Tree' }
+  //     }
+  //   ]
+  // },
 
-  {
-    path: 'external-link',
-    component: Layout,
-    children: [
-      {
-        path: 'https://panjiachen.github.io/vue-element-admin-site/#/',
-        meta: { title: 'External Link' }
-      }
-    ]
-  },
+  // {
+  //   path: '/form',
+  //   component: Layout,
+  //   children: [
+  //     {
+  //       path: 'index',
+  //       name: 'Form',
+  //       component: () => import('@/views/form/index'),
+  //       meta: { title: 'Form' }
+  //     }
+  //   ]
+  // },
+
+  // , {
+  //   path: '/nested',
+  //   component: Layout,
+  //   redirect: '/nested/menu1',
+  //   name: 'Nested',
+  //   meta: {
+  //     title: 'Nested',
+  //     icon: 'nested'
+  //   },
+  //   children: [
+  //     {
+  //       path: 'menu1',
+  //       component: () => import('@/views/nested/menu1/index'), // Parent router-view
+  //       name: 'Menu1',
+  //       meta: { title: 'Menu1' },
+  //       children: [
+  //         {
+  //           path: 'menu1-1',
+  //           component: () => import('@/views/nested/menu1/menu1-1'),
+  //           name: 'Menu1-1',
+  //           meta: { title: 'Menu1-1' }
+  //         },
+  //         {
+  //           path: 'menu1-2',
+  //           component: () => import('@/views/nested/menu1/menu1-2'),
+  //           name: 'Menu1-2',
+  //           meta: { title: 'Menu1-2' },
+  //           children: [
+  //             {
+  //               path: 'menu1-2-1',
+  //               component: () => import('@/views/nested/menu1/menu1-2/menu1-2-1'),
+  //               name: 'Menu1-2-1',
+  //               meta: { title: 'Menu1-2-1' }
+  //             },
+  //             {
+  //               path: 'menu1-2-2',
+  //               component: () => import('@/views/nested/menu1/menu1-2/menu1-2-2'),
+  //               name: 'Menu1-2-2',
+  //               meta: { title: 'Menu1-2-2' }
+  //             }
+  //           ]
+  //         },
+  //         {
+  //           path: 'menu1-3',
+  //           component: () => import('@/views/nested/menu1/menu1-3'),
+  //           name: 'Menu1-3',
+  //           meta: { title: 'Menu1-3' }
+  //         }
+  //       ]
+  //     },
+  //     {
+  //       path: 'menu2',
+  //       component: () => import('@/views/nested/menu2/index'),
+  //       meta: { title: 'menu2' }
+  //     }
+  //   ]
+  // },
+
+  // {
+  //   path: 'external-link',
+  //   component: Layout,
+  //   children: [
+  //     {
+  //       path: 'https://panjiachen.github.io/vue-element-admin-site/#/',
+  //       meta: { title: 'External Link' }
+  //     }
+  //   ]
+  // },
 
   // 404 page must be placed at the end !!!
-  { path: '*', redirect: '/404', hidden: true }
+  // { path: '*', redirect: '/404', hidden: true }
 ]
-
+// export const constantRoutes = [{
+//   path: '/',
+//   redirect: '/upms',
+// }]
 const createRouter = () => new Router({
   // mode: 'history', // require service support
   scrollBehavior: () => ({ y: 0 }),
@@ -370,5 +376,36 @@ export function resetRouter () {
 }
 export const asyncRoutes = {
   Layout: Layout,
+  main: () => import('@/views/main/index'),
+  teamDetail: () => import('@/views/main/index'),
+  vipList: () => import('@/views/vipClass/vipList'),
+  teacherList: () => import('@/views/teacherManager/teacherList'),
+  studentList: () => import('@/views/studentManager/studentList'),
+  orderList: () => import('@/views/businessManager/orderManager/index'),
+  income: () => import('@/views/businessManager/orderManager/income'),
+  backOrder: () => import('@/views/businessManager/orderManager/backMoney'),
+  expend: () => import('@/views/businessManager/orderManager/expend'),
+  shopManager: () => import('@/views/businessManager/shopManager/shopList'),
+  reportForm: () => import('@/views/reportForm/index'),
+  musicalManager: () => import('@/views/categroyManager/specialSetup/musicalManager'),
+  specialSetup: () => import('@/views/categroyManager/specialSetup/index'),
+  typesManager: () => import('@/views/categroyManager/specialSetup/typesManager'),
+  tryClass: () => import('@/views/categroyManager/specialSetup/tryClass'),
+  activityManager: () => import('@/views/categroyManager/specialSetup/activityManager'),
+  tempalteManager: () => import('@/views/categroyManager/specialSetup/tempalteManager'),
+  bannerManager: () => import('@/views/categroyManager/specialSetup/bannerManager'),
+  holidayManager: () => import('@/views/categroyManager/specialSetup/holidayManager'),
+  generalSettings: () => import('@/views/categroyManager/generalSettings/index'),
+  siginManager: () => import('@/views/categroyManager/generalSettings/siginManager'),
+  leaveManager: () => import('@/views/categroyManager/generalSettings/leaveManager'),
+  cycleManager: () => import('@/views/categroyManager/generalSettings/cycleManager'),
+  overallManager: () => import('@/views/categroyManager/generalSettings/overallManager'),
+  payManager: () => import('@/views/categroyManager/generalSettings/payManager'),
+  insideSetting: () => import('@/views/categroyManager/insideSetting/index'),
+  adminManager: () => import('@/views/categroyManager/insideSetting/adminManager'),
+  staffManager: () => import('@/views/categroyManager/insideSetting/staffManager'),
+  branchManager: () => import('@/views/categroyManager/insideSetting/branchManager'),
+  addressManager: () => import('@/views/categroyManager/insideSetting/addressManager'),
+  branchActive: () => import('@/views/categroyManager/insideSetting/branchActive')
 }
 export default router

+ 44 - 25
src/store/modules/permission.js

@@ -12,7 +12,9 @@ function generateAsyncRouter (asyncRoutes, data) {
   if (!data) {
     return []
   }
+
   data.forEach((item, index) => {
+    // console.log(item);
     item.component = asyncRoutes[item.component]
     if (item.children && item.children.length > 0) {
       generateAsyncRouter(asyncRoutes, item.children)
@@ -27,25 +29,6 @@ function generateAsyncRouter (asyncRoutes, data) {
  */
 // const type = getters.type
 
-function getHome (type) {
-  var home = {
-    path: '/',
-    component: Layout,
-    redirect: '',
-    children: []
-  }
-  // if (type.includes(1)) {
-  home.redirect = '/dashboard'
-  home.children.push({
-    path: '/dashboard',
-    name: 'Dashboard',
-    component: () => import('@/views/dashboard/index'),
-    meta: { title: '首页', icon: 'dashboard' }
-  })
-  // }
-  return home
-}
-
 const state = {
   routes: [],
   addRoutes: [],
@@ -58,19 +41,55 @@ const mutations = {
     state.routes = constantRoutes.concat(routes)
   }
 }
-
+// 递归遍历数组
+function recursionRouter (arr) {
+  let newArr = arr.map(item => {
+    let obj = {};
+    obj.component = item.component;
+    obj.hidden = false;
+    obj.path = item.path;
+    obj.meta = { 'title': item.name, 'icon': item.icon }
+    if (item.sysMenus && item.sysMenus.length > 0) {
+      obj.children = recursionRouter(item.sysMenus);
+    }
+    return obj
+  })
+  return newArr
+}
 const actions = {
   generateRoutes ({ commit }, roles) {
     return new Promise(resolve => {
       // 获取接口返回的权限菜单
       getSilder().then(res => {
-        console.log(res.data);
+        // console.log(res.data);
+        // 这里递归 整体修改路由数据
+        // console.log(res.data.rows);
+        // let newData = res.data.map(item => {
+        //   let obj = {};
+        //   obj.component = item.component;
+        //   obj.hidden = false;
+        //   obj.path = item.path;
+        //   obj.meta = { 'title': item.name, 'icon': item.icon }
+        //   if (item.sysMenus && item.sysMenus.length > 0) {
+        //     obj.children = item.sysMenus.map(sub => {
+        //       let obj = {};
+        //       obj.component = sub.component;
+        //       obj.hidden = false;
+        //       obj.path = sub.path;
+        //       obj.meta = { 'title': sub.name, 'icon': sub.icon }
+        //       return obj
+        //     });
+        //   }
+        //   return obj
+        // });
+        // console.log(newData);
+        let newData = recursionRouter(res.data);
         var accessedRoutes
         // 生成异步路由表
-        accessedRoutes = generateAsyncRouter(asyncRoutes, res.data)
-        var result = accessedRoutes.concat({ path: '*', redirect: '/404', hidden: true })
-        commit('SET_ROUTES', result)
-        resolve(result)
+        accessedRoutes = generateAsyncRouter(asyncRoutes, newData)
+        // var result = accessedRoutes.concat({ path: '*', redirect: '/404', hidden: true })
+        commit('SET_ROUTES', accessedRoutes)
+        resolve(accessedRoutes)
       })
     })
   }

+ 1 - 1
src/views/businessManager/orderManager/income.vue

@@ -1,6 +1,6 @@
 <template>
   <div>
-    <h2>支付</h2>
+    <h2>收入</h2>
     <!-- 搜索类型 -->
     <el-form :inline="true"
              class="searchForm"

+ 1 - 2
src/views/businessManager/orderManager/index.vue

@@ -1,7 +1,6 @@
 <template>
   <div class='m-container'>
-
-    <router-view />
+    <router-view></router-view>
   </div>
 </template>
 <script>

+ 5 - 0
src/views/categroyManager/generalSettings/cycleManager.vue

@@ -0,0 +1,5 @@
+<template>
+  <div>
+    结算周期设置
+  </div>
+</template>

+ 5 - 0
src/views/categroyManager/generalSettings/index.vue

@@ -0,0 +1,5 @@
+<template>
+  <div>
+    <router-view></router-view>
+  </div>
+</template>

+ 5 - 0
src/views/categroyManager/generalSettings/leaveManager.vue

@@ -0,0 +1,5 @@
+<template>
+  <div>
+    请假管理
+  </div>
+</template>

+ 5 - 0
src/views/categroyManager/generalSettings/overallManager.vue

@@ -0,0 +1,5 @@
+<template>
+  <div>
+    全局配置
+  </div>
+</template>

+ 5 - 0
src/views/categroyManager/generalSettings/payManager.vue

@@ -0,0 +1,5 @@
+<template>
+  <div>
+    支付通道设置
+  </div>
+</template>

+ 5 - 0
src/views/categroyManager/generalSettings/siginManager.vue

@@ -0,0 +1,5 @@
+<template>
+  <div>
+    异常签到
+  </div>
+</template>

+ 0 - 0
src/views/categroyManager/addressManager.vue → src/views/categroyManager/insideSetting/addressManager.vue


+ 0 - 0
src/views/categroyManager/adminManager.vue → src/views/categroyManager/insideSetting/adminManager.vue


+ 5 - 0
src/views/categroyManager/insideSetting/branchActive.vue

@@ -0,0 +1,5 @@
+<template>
+  <div>
+    分部活动设置
+  </div>
+</template>

+ 0 - 0
src/views/categroyManager/branchManager.vue → src/views/categroyManager/insideSetting/branchManager.vue


+ 5 - 0
src/views/categroyManager/insideSetting/index.vue

@@ -0,0 +1,5 @@
+<template>
+  <div>
+    <router-view></router-view>
+  </div>
+</template>

+ 0 - 0
src/views/categroyManager/staffManager.vue → src/views/categroyManager/insideSetting/staffManager.vue


+ 5 - 0
src/views/categroyManager/specialSetup/activityManager.vue

@@ -0,0 +1,5 @@
+<template>
+  <div>
+    课程活动设置
+  </div>
+</template>

+ 5 - 0
src/views/categroyManager/specialSetup/bannerManager.vue

@@ -0,0 +1,5 @@
+<template>
+  <div>
+    banner管理
+  </div>
+</template>

+ 5 - 0
src/views/categroyManager/specialSetup/holidayManager.vue

@@ -0,0 +1,5 @@
+<template>
+  <div>
+    节假日设置
+  </div>
+</template>

+ 12 - 0
src/views/categroyManager/specialSetup/index.vue

@@ -0,0 +1,12 @@
+<template>
+  <div>
+    <router-view></router-view>
+  </div>
+</template>
+<script>
+export default {
+
+}
+</script>
+<style lang="scss">
+</style>

+ 12 - 0
src/views/categroyManager/specialSetup/musicalManager.vue

@@ -0,0 +1,12 @@
+<template>
+  <div>
+    声部设置
+  </div>
+</template>
+<script>
+export default {
+
+}
+</script>
+<style lang="scss">
+</style>

+ 5 - 0
src/views/categroyManager/specialSetup/tempalteManager.vue

@@ -0,0 +1,5 @@
+<template>
+  <div>
+    系统模板设置
+  </div>
+</template>

+ 5 - 0
src/views/categroyManager/specialSetup/tryClass.vue

@@ -0,0 +1,5 @@
+<template>
+  <div>
+    试听课设置
+  </div>
+</template>

+ 5 - 0
src/views/categroyManager/specialSetup/typesManager.vue

@@ -0,0 +1,5 @@
+<template>
+  <div>
+    收费类型设置
+  </div>
+</template>

+ 3 - 4
src/views/login/index.vue

@@ -62,7 +62,6 @@
 
 <script>
 import { validUsername } from "@/utils/validate";
-
 export default {
   name: "Login",
   data () {
@@ -72,14 +71,14 @@ export default {
       } else {
         callback();
       }
-    };
+    }
     const validatePassword = (rule, value, callback) => {
       if (value.length < 6) {
         callback(new Error("密码必须大于六位"));
       } else {
         callback();
       }
-    };
+    }
     return {
       loginForm: {
         username: "",
@@ -97,7 +96,7 @@ export default {
       passwordType: "password",
       redirect: undefined,
       isSaveUserInfo: true
-    };
+    }
   },
   mounted () {
     this.loginForm.username = localStorage.getItem('username');

+ 12 - 0
src/views/reportForm/index.vue

@@ -0,0 +1,12 @@
+<template>
+  <div>
+    报表中心
+  </div>
+</template>
+<script>
+export default {
+
+}
+</script>
+<style lang="scss">
+</style>

+ 53 - 6
src/views/setSilder/addSilder.vue

@@ -1,27 +1,74 @@
 <template>
   <div>
     <el-button @click='addSilder'>添加按钮</el-button>
+    <el-button @click='removeSilder'>删除按钮</el-button>
+    <el-button @click='resetSilder'>修改按钮</el-button>
+    <el-button @click="lookSilder"
+               type='error'>查询</el-button>
   </div>
 </template>
 <script>
-import { addSilder, getSilder } from '@/api/silder'
+import { addSilder, getSilder, deleteSilder, resetSilder } from '@/api/silder'
 export default {
   data () {
     return {
-
     }
   },
   mounted () {
-    getSilder().then(res => {
-      console.log(res);
-    })
+
   },
   methods: {
+    /**
+     * {
+        path:'/teamDetail',
+        component: 'Layout',
+        name:'业务管理',
+        sysMenus:[
+          // 乐团管理
+          // 小课管理
+          // 老师管理
+          // 学员管理
+        ]
+      }
+     */
+    //  Layout
     addSilder () {
-      addSilder().then(res => {
+      addSilder({
+        // path: 'branchActive',
+        // component: 'branchActive',
+        // name: '分部活动设置',
+        // permission: '/branchActive',
+        // sort: '1',
+        // parentId: '24'
+      }).then(res => {
 
       })
+    },
+    removeSilder () {
+      deleteSilder().then(res => {
+        console.log(res);
+      })
+    },
+    lookSilder () {
+      getSilder().then(res => {
+        console.log(res);
+      })
+    },
+    // 修改菜单栏
+    resetSilder () {
+      resetSilder({
+        // path: 'insideSetting',
+        // component: 'insideSetting',
+        // name: '分部内部设置',
+        // permission: '/insideSetting',
+        // sort: '1',
+        // parentId: '21',
+        // id: '24'
+      }).then(res => {
+        console.log(res)
+      })
     }
+
   },
 }
 </script>

+ 2 - 2
vue.config.js

@@ -42,14 +42,14 @@ module.exports = {
       // http://47.99.212.176:8000
       // http://192.168.3.28:8000
       '/api-auth': {
-        target: 'http://47.99.212.176:8000',
+        target: 'http://192.168.3.28:8000',
         changeOrigin: true,
         pathRewrite: {
           '^api-auth': ''
         }
       },
       '/web-server': {
-        target: 'http://47.99.212.176:8000',
+        target: 'http://192.168.3.28:8000',
         changeOrigin: true,
         pathRewrite: {
           '^web-server': ''