permission.js 1.2 KB
Newer Older
Mr.奇淼('s avatar
Mr.奇淼( 已提交
1
import router from './router'
2
import { store } from '@/store/index'
3
import getPageTitle from '@/utils/page'
Mr.奇淼('s avatar
Mr.奇淼( 已提交
4
let asyncRouterFlag = 0
Mr.奇淼('s avatar
Mr.奇淼( 已提交
5

何秀钢 已提交
6
const whiteList = ['Login', 'Init']
7

何秀钢 已提交
8 9 10 11 12 13
router.beforeEach(async(to, from, next) => {
  const token = store.getters['user/token']
  // 在白名单中的判断情况
  document.title = getPageTitle(to.meta.title)
  if (whiteList.indexOf(to.name) > -1) {
    if (token) {
14
      next({ path: '/layout/dashboard' })
Mr.奇淼('s avatar
Mr.奇淼( 已提交
15
    } else {
何秀钢 已提交
16 17 18 19 20 21
      next()
    }
  } else {
    // 不在白名单中并且已经登陆的时候
    if (token) {
      // 添加flag防止多次获取动态路由和栈溢出
22
      if (!asyncRouterFlag) {
何秀钢 已提交
23 24
        asyncRouterFlag++
        await store.dispatch('router/SetAsyncRouter')
25
        await store.dispatch('user/GetUserInfo')
何秀钢 已提交
26
        const asyncRouters = store.getters['router/asyncRouters']
27 28 29
        asyncRouters.map(asyncRouter => {
          router.addRoute(asyncRouter)
        })
何秀钢 已提交
30 31
        next({ ...to, replace: true })
      } else {
32
        next()
何秀钢 已提交
33 34 35 36 37 38 39 40
      }
    }
    // 不在白名单中并且未登陆的时候
    if (!token) {
      next({
        name: 'Login',
        query: {
          redirect: document.location.hash
Mr.奇淼('s avatar
Mr.奇淼( 已提交
41
        }
何秀钢 已提交
42
      })
Mr.奇淼('s avatar
Mr.奇淼( 已提交
43
    }
何秀钢 已提交
44 45
  }
})