54 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
| /**
 | ||
|  * Created by HaijunZhang on 2018/11/12.
 | ||
|  */
 | ||
| import store from './store'
 | ||
| import router from './router'
 | ||
| import { getToken, setToken } from 'utils/auth'
 | ||
| import { getQuery } from 'utils'
 | ||
| import { isEmpty, assign } from 'lodash-es'
 | ||
| 
 | ||
| const { token } = getQuery(location.hash)
 | ||
| if (token) {
 | ||
|   setToken(token)
 | ||
| }
 | ||
| 
 | ||
| const whiteList = ['/login', '/404', '/401', '/license', '/sso', '/jump']
 | ||
| router.beforeEach(async (to, from, next) => {
 | ||
|   if (isEmpty(history.state.current)) {
 | ||
|     assign(history.state, { current: from.fullPath })
 | ||
|   }
 | ||
|   if (getToken()) {
 | ||
|     // 判断用户是否处于登录状态
 | ||
|     if (to.path === '/login') {
 | ||
|       // 如果已经登录重定向到主页
 | ||
|       await store.dispatch('permission/ResetRoutes', false)
 | ||
|       next('/login')
 | ||
|     } else {
 | ||
|       // 为null的场景: 刷新页面或者新开窗口;
 | ||
|       const addRoutes = store.getters.addRoutes
 | ||
|       if (addRoutes) {
 | ||
|         next()
 | ||
|       } else {
 | ||
|         try {
 | ||
|           await store.dispatch('permission/GenerateRoutes')
 | ||
|           store.dispatch('GetUserInfo')
 | ||
|           next({ ...to, replace: true })
 | ||
|         } catch (error) {
 | ||
|           console.log('调用permission/GenerateRoutes 出现 catch', error)
 | ||
|           // remove token and go to login page to re-login
 | ||
|           await store.dispatch('permission/ResetRoutes', false)
 | ||
|           next('/login')
 | ||
|         }
 | ||
|       }
 | ||
|     }
 | ||
|   } else {
 | ||
|     // 用户没有登录
 | ||
|     if (whiteList.includes(to.path)) {
 | ||
|       // 在白名单里直接跳转
 | ||
|       next()
 | ||
|     } else {
 | ||
|       next('/login')
 | ||
|     }
 | ||
|   }
 | ||
| })
 |