Newer
Older
smartcity_video / src / permission.js
wangxitong on 11 Sep 1 KB Default Changelist
import router from './router'
import store from './store'
import NProgress from 'nprogress' // progress bar 进度条
import 'nprogress/nprogress.css' // progress bar style 进度条样式
// import { Message } from 'element-ui'
import {getToken, setToken} from '@/utils/auth' // getToken from cookie
import { loginByToken, isSubSystem, sysCode } from './settings'
import Vue from 'vue'

NProgress.configure({ showSpinner: false })// NProgress configuration

const whiteList = ['/login', 'config/baseconfig', '/deviceList'] // 不重定向白名单
// 全局钩子
router.beforeEach((to, from, next) => {
  NProgress.start() // 加载进度条
  // 如果有token
  const oldToken = getToken() // 获取原token
  const newToken = to.query.token
  console.log('token: ' + to.query.token)
  console.log('old token: ' + oldToken)
  if (newToken) {
    setToken(newToken)
  }
  // 允许使用token登录并且新旧token不一致,使用新token重新登录
  if ((newToken && store.getters.menus.length === 0) || store.getters.menus.length === 0) {
    try {
      store.dispatch('GetInfo').then(() => {
        store.dispatch('GetMenus').then((accessRoute) => {
          router.addRoutes(accessRoute)
          next({ ...to, replace: true }) // hack方法 确保addRoutes已完成 ,set the replace: true so the navigation will not leave a history record
        })
      })
    } catch (err) {
      console.log('catch')
      store.dispatch('FedLogOut').then(() => {
        // Message.error(err || '权限验证失败,请重新登录系统')
        next({ path: '/' })
      })
    }
  } else { // 角色不为空
    next()
  }
})

router.afterEach(() => {
  NProgress.done() // 结束Progress
})