模拟动态路由鉴权

232 阅读1分钟
import Vue from 'vue'
import Router from 'vue-router'
import login from '@/view/index.vue'

Vue.use(Router)

const router = new Router({
  routes: [
    {
      path: '/',
      name: 'login',
      component: login,
    }
  ],
  mode: 'hash',
})
console.log(router,'router');
var flag = false;

function showrouter () {
  if (flag) {
    return
  }
  var localType = localStorage.getItem('peopleType')
  if (localType == 'admin') {
    setTimeout(() => {
      let routes = [
        {
          path: '/home',
          name: 'homepage',
          component: () => import('@/view/home.vue'),
          children: [
            {
              path: '/message',
              name: 'message',
              component: () => import('@/view/message.vue'),
            },
            {
              path: '/my',
              name: 'my',
              component: () => import('@/view/my.vue'),
            },
            {
              path: '/family',
              name: 'family',
              component: () => import('@/view/family.vue'),
            },
          ]
        },
        {
          path: '*',
          name: 'notfound',
          component: () => import('@/view/notfound.vue'),
        },
      ]
      router.matcher = new Router().matcher; //解决路由重复
      routes.forEach((v) => router.addRoute(v))
      flag = true
    }, 2000)
  } else {
    setTimeout(() => {
      let routes = [{
        path: '/home',
        name: 'homepage',
        component: () => import('@/view/home.vue'),
        children: [
          {
            path: '/message',
            name: 'message',
            component: () => import('@/view/message.vue'),
          }
        ]
      },
      {
        path: '*',
        name: 'notfound',
        component: () => import('@/view/notfound.vue'),
      }]
      router.matcher= new Router().matcher;
      routes.forEach((v) => router.addRoute(v))
      flag = true
    }, 2000)
  }
}

router.beforeEach((to, from, next) => {
  // console.log(to, 'to');
  if (to.path == '/') {
    next()
  } else {
    showrouter()
    next()
  }
})


export default router