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

Mr.奇淼('s avatar
Mr.奇淼( 已提交
5
let asyncRouterFlag = 0
Mr.奇淼('s avatar
Mr.奇淼( 已提交
6

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