| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 | 
							- // import { asyncRoutes, constantRoutes } from '@/router'
 
- import { constantRoutes } from '@/router'
 
- import { validatenull } from '@/utils/validate'
 
- // for get menus from server
 
- // import { getMenuByRole } from '@/api/menu'
 
- import { getRecuData } from '@/api/common'
 
- import Layout from '@/layout'
 
- function buildRouter(aMenu) {
 
-   const aRouter = []
 
-   aMenu.forEach(item => {
 
-     if (!validatenull(item.component)) {
 
-       const oRouter = {
 
-         meta: { 'title': '', 'icon': '' },
 
-         children: []
 
-       }
 
-       if (item.component !== 'Iframe') {
 
-         if (item.component === 'Layout') {
 
-           oRouter.component = Layout
 
-         } else {
 
-           oRouter.component = require('@/views/' + item.component + '.vue').default
 
-         }
 
-         oRouter.name = item.path
 
-         oRouter.id = item.id || null
 
-         if (item.redirect !== '') {
 
-           oRouter.redirect = item.redirect || null
 
-           oRouter.path = '/' + item.path
 
-         } else {
 
-           oRouter.path = item.path
 
-         }
 
-         oRouter.meta.icon = item.icon
 
-         oRouter.meta.title = item.title
 
-         // oRouter.meta.noCache = item.noCache || false
 
-         oRouter.meta.noCache = true
 
-         // oRouter.meta.breadcrumb = item.breadcrumb || true
 
-         oRouter.children = validatenull(item.children) ? [] : buildRouter(item.children)
 
-         aRouter.push(oRouter)
 
-       }
 
-     }
 
-   })
 
-   return aRouter
 
- }
 
- /**
 
-  * Use meta.role to determine if the current user has permission
 
-  * @param roles
 
-  * @param route
 
-  */
 
- function hasPermission(roles, route) {
 
-   if (route.meta && route.meta.roles) {
 
-     return roles.some(role => route.meta.roles.includes(role))
 
-   } else {
 
-     return true
 
-   }
 
- }
 
- /**
 
-  * Filter asynchronous routing tables by recursion
 
-  * @param routes asyncRoutes
 
-  * @param roles
 
-  */
 
- export function filterAsyncRoutes(routes, roles) {
 
-   const res = []
 
-   routes.forEach(route => {
 
-     const tmp = { ...route }
 
-     if (hasPermission(roles, tmp)) {
 
-       if (tmp.children) {
 
-         tmp.children = filterAsyncRoutes(tmp.children, roles)
 
-       }
 
-       res.push(tmp)
 
-     }
 
-   })
 
-   return res
 
- }
 
- const state = {
 
-   routes: [],
 
-   addRoutes: [],
 
-   data1: { name: 'getmenu',
 
-     idname: 'id',
 
-     parammaps: { id: -1 }
 
-   }
 
- }
 
- const mutations = {
 
-   SET_ROUTES: (state, routes) => {
 
-     state.addRoutes = routes
 
-     state.routes = constantRoutes.concat(routes)
 
-   }
 
- }
 
- const actions = {
 
-   generateRoutes({ commit }, roles) {
 
-     return new Promise((resolve, reject) => {
 
-       getRecuData(state.data1).then(response => {
 
-         const menus = response.data
 
-         if (menus.length === 0) {
 
-           reject('menus data is null')
 
-         }
 
-         const accessedRoutes = buildRouter(menus)
 
-         // final add 404
 
-         accessedRoutes.push({ path: '*', redirect: '/404', hidden: true })
 
-         // commit to stores
 
-         commit('SET_ROUTES', accessedRoutes)
 
-         // return for add to router
 
-         resolve(accessedRoutes)
 
-       })
 
-     })
 
-   }
 
- }
 
- export default {
 
-   namespaced: true,
 
-   state,
 
-   mutations,
 
-   actions
 
- }
 
 
  |