vue后台添加动态路由,递归过滤菜单

import Vue from 'vue'

import VueRouter from 'vue-router'

import layout from '@/views/Index.vue'

import blank from '@/components/blank'

// import { checkAuth } from './api/api'

const _import = (file) => () => import(`@/views/${file}`)

Vue.use(VueRouter)

const routes = [

    {

        path: '/',

        name: 'layout',

        component: layout,

    },

    {

        path: '/login',

        name: 'login',

        hidden: true,

        meta: {

            requiresAuth: false,

        },

        component: () => import('@/views/login/Login.vue'),

    },

]

let router = new VueRouter({

    mode: 'hash',

    // base: process.env.BASE_URL,

    routes,

})

var getRouter = sessionStorage.getItem('router')

if (getRouter) {

    let _getRouter = filterAsyncRouter(JSON.parse(getRouter))

    router.addRoutes(_getRouter)

    router.addRoutes([

        {

            path: '/404',

            name: '404',

            hidden: true,

            component: () => import('@/views/404.vue'),

            meta: {

                title: '请求页面未找到',

                auth: false,

                requiresAuth: false,

            },

        },

        {

            path: '*',

            hidden: true,

            meta: {

                title: '请求页面未找到',

                auth: false,

                requiresAuth: false,

            },

            redirect: '/404',

        },

    ])

}

router.beforeEach((to, from, next) => {

    let token = sessionStorage.getItem('access_token')

    if (to.meta.requiresAuth != false) {

        if (token) {

            //             checkAuth().then((res) => {

            //                 if (res && getRouter) {

            next()

            //                 } else {

            //                     next({ path: '/login' })

        }

        //             })

        else {

            next({

                path: '/login',

            })

        }

    } else {

        next()

    }

})

function filterAsyncRouter(asyncRouterMap) {

    //遍历后台传来的路由字符串,转换为组件对象

    const accessedRouters = asyncRouterMap.filter((route) => {

        if (route.parentId) {

            delete route.parentId

        }

        if (route.id) {

            delete route.id

        }

        if (route.component) {

            if (route.component === 'layout') {

                //Layout组件特殊处理

                route.component = layout

            } else if (route.component === 'blank') {

                route.component = blank

            } else {

                route.component = _import(route.component)

            }

        }

        if (route.children && route.children.length) {

            route.children = filterAsyncRouter(route.children)

        }

        return true

    })

    return accessedRouters

}

export default router


版权声明:本文为wwf1225原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。