import { router, addDynamicRoutes } from './router' import store from './stores' import { ElMessage } from 'element-plus' import NProgress from 'nprogress' // progress bar import 'nprogress/nprogress.css' // progress bar style import { getToken,getRefreshToken } from '@/utils/auth' // get token from cookie import getPageTitle from '@/utils/get-page-title' NProgress.configure({ showSpinner: false }) // NProgress Configuration const whiteList = ['/login'] // no redirect whitelist const getUserStore = () => store.userStore() const getPermissionStore = () => store.permissionStore() router.beforeEach(async (to, from, next) => { // start progress bar NProgress.start() // set page title document.title = getPageTitle(to.meta.title) // determine whether the user has logged in const hasToken = getToken() if (hasToken) { if (to.path === '/login') { // if is logged in, redirect to the home page next({ path: '/' }) NProgress.done() } else if(to.name==='500'){ next() NProgress.done() } else { const userStore = getUserStore() const hasGetUserInfo = userStore.state.userName && userStore.state.id && userStore.state.userName != '' && userStore.state.id != '' if (hasGetUserInfo) { next() } else { try { //获取用户菜单 let accessRoutes = await userStore.getMenu() //获取用户信息 await userStore.getInfo() //初始化用户菜单 let menus= accessRoutes.filter(it=>it.menuType!=3) // dynamically add accessible routes addDynamicRoutes(menus) //按钮权限 let btns= accessRoutes.filter(it=>it.menuType==3).map(it=>it.permission) //设置权限 getPermissionStore().setPermission(btns) if (accessRoutes.length < 1) { //用户没有动态菜单直接到首页 next('/') } else if (to.name == 'allto404') { //如果导航之前没有获取到动态菜单,则会被allto404捕获 则需要在获取动态菜单后重新定向到正确路径 next(to.path) } else { //正确导航 next({ ...to, replace: true }) } } catch (error) { ElMessage.error('Has Error') NProgress.done() // remove token and go to login page to re-login //await userStore.resetAllToken() // other pages that do not have permission to access are redirected to the login page. window.location.href="/500" } } } } else { /* has no token*/ const refresToken=getRefreshToken() if(refresToken){ //重新用刷新token登录 let uStore = getUserStore() await uStore.reLogin() .catch(async ()=>{ //刷新失败 await uStore.resetAllToken() // other pages that do not have permission to access are redirected to the login page. window.location.href="/login?redirect="+to.path NProgress.done() return }) //刷新成功 next() } else if (whiteList.indexOf(to.path) !== -1) { // in the free login whitelist, go directly next() } else { // other pages that do not have permission to access are redirected to the login page. // next(`/login?redirect=${to.path}`) NProgress.done() //store.userStore().resetAllToken() window.location.href="/login?redirect="+to.path } } }) router.afterEach(() => { // finish progress bar NProgress.done() })