Newer
Older
smartwell_app_front / unpackage / resources / H58F8F36D / www / src / permission.js
StephanieGitHub on 6 Aug 2019 3 KB first commit
import router from './router'
import store from './store'
import NProgress from 'nprogress' // progress bar 进度条
import 'nprogress/nprogress.css' // progress bar style 进度条样式
import { Toast } from 'mint-ui'
import { getToken } from '@/utils/auth' // getToken from cookie
import { SLIDER_FLAG, USER_ACCOUNT, USER_PWD } from '@/assets/js/storageConst'

console.log(SLIDER_FLAG)

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

const whiteList = ['/login','/slider'] // 不重定向白名单
// 全局钩子
router.beforeEach((to, from, next) => {
  console.log('src/permission.js beforeRouter')
  NProgress.start() // 加载进度条
  console.log('to Path:'+to.path)
  const slider_flag = localStorage.getItem(SLIDER_FLAG)

  // 如果有token
  if (getToken()) {
    // 如果目标页时登录页进入登录页
    if (to.path === '/login') {
      next()
      NProgress.done() // if current page is dashboard will not trigger	afterEach hook, so manually handle it
    } else {
      // 当进入非登陆页时
      console.log('not to login ')
      if (store.getters.roleList.length === 0) { // 判断当前用户是否已拉取完user_info信息
        store.dispatch('GetInfo').then(res => { // 拉取用户信息
          // 远程访问获取权限列表(菜单&按钮)
          store.dispatch('GetMenus').then(() => {
            router.addRoutes(store.getters.addRouters) // 动态添加可访问路由表
            next({ ...to, replace: true }) // hack方法 确保addRoutes已完成 ,set the replace: true so the navigation will not leave a history record
          })
        }).catch((err) => {
          store.dispatch('FedLogOut').then(() => {
            Toast({
              message: '登录信息失效,请重新登录',
              position: 'bottom',
              duration: 3 * 1000
            })
            next({ path: '/' })
          })
        })
      } else {
        next()
      }
    }
  } else {// 如果没有token
    console.log("notoken")
    if (whiteList.indexOf(to.path) !== -1) { // 免登录白名单,直接进入
      if (to.path === '/login' && slider_flag=='false') {
        console.log('goto slider page')
        next({name: 'slider'})
      }else{
        next()
      }
    } else {
      //判断用户名密码是否还存在,如果在,后台登录后跳转
      const username = localStorage.getItem(USER_ACCOUNT)
      const password = localStorage.getItem(USER_PWD)
      if(username && username!=''){
        store.dispatch('Login', {username,password}).then(() => {
          next()
          NProgress.done() // if current page is dashboard will not trigger	afterEach hook, so manually handle it
        }).catch((e) => {
          Toast({
            message: '连接服务器异常,请稍后再试',
            position: 'bottom',
            duration: 3 * 1000
          })
          next(`/login?redirect=${to.path}`) // 重定向到登录页
          NProgress.done()
        })
      }else {
        //否则直接跳转登录页
        console.log("redirect login")
        next(`/login?redirect=${to.path}`) // 否则全部重定向到登录页
        NProgress.done() // if current page is dashboard will not trigger	afterEach hook, so manually handle it
      }

    }
  }
})

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