import router from './router' import store from './store' import { Message } from 'element-ui' import NProgress from 'nprogress' // progress bar import 'nprogress/nprogress.css' // progress bar style import { getToken,removeToken } 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 noUserMsg = '获取用户信息失败,请重新登录 !' // 跳转登录页 const pageToLogin = (to, from, next) => { if (whiteList.indexOf(to.path) >= 0 ) { // in the free login whitelist, go directly next() NProgress.done() } else { // other pages that do not have permission to access are redirected to the login page. removeToken() next(`/login?redirect=${to.path}`) NProgress.done() } } // 首次进入页面加载数据处理 const toPageInit = async (to, from, next) => { // 获取用户信息 let _username = localStorage.getItem("isLoginTokenName")//登录成功且token通过后的登录名 if(_username && _username != null && (!store.getters.currentUserInfo || store.getters.currentUserInfo.length <= 0)){ await store.dispatch('user/getUserInfo',_username) .then(()=>{ toNextHandle(to, from, next) }) .catch(()=>{ // todo-fast:接口恢复后更改 toNextHandle(to, from, next) // Message.error(noUserMsg) // pageToLogin(to, from, next) }) return } toNextHandle(to, from, next) } // 跳转处理 const toNextHandle = async (to, from, next) => { let isFresh = false // 获取表头转义 if(!store.getters.columZHList){ await store.dispatch('definition/getColumZHList') } // 获取菜单数据 if(!store.getters.permission_routes || store.getters.permission_routes.length <= 0){ isFresh = true await store.dispatch('permission/getApiColumnsNames') } // 获取枚举数据 if(!store.getters.enumList || store.getters.enumList.length <= 0){ await store.dispatch('definition/getDefinitionConfig') } if(isFresh){ next({...to,replace:true}) }else{ next() } NProgress.done() } router.beforeEach(async (to, from, next) => { // start progress bar NProgress.start() // set page title document.title = getPageTitle() const hasToken = getToken() // 判断是否自动登录 let isAutoLogin = JSON.parse(localStorage.getItem('isConfigLogin')) || to.query.loginName if(hasToken){ if (to.path === '/login') { console.log('有token,是登录页,将跳转至/') // if is logged in, redirect to the home page next({ path: '/' }) NProgress.done() // hack: https://github.com/PanJiaChen/vue-element-admin/pull/2939 } else { console.log('有token,不是登录页,toPageInit') await toPageInit(to, from, next) } }else{ if (to.path === '/login') { console.log('没有token,是登录页,pageToLogin') pageToLogin(to, from, next) } else { if(isAutoLogin){ let _username = localStorage.getItem("isConfigLogin") && localStorage.getItem("isConfigLogin") != 'false' ? localStorage.getItem("configLoginName") : to.query.loginName await store.dispatch('user/loginOnlyName', {username:_username}) .then(()=>{ toPageInit(to, from, next) }) .catch(()=>{ // todo-fast:接口恢复后更改 toNextHandle(to, from, next) // Message.error(noUserMsg) // pageToLogin(to, from, next) }) }else{ console.log('没有token,不是登录页,不是自动登录,pageToLogin') pageToLogin(to, from, next) } } } }) router.afterEach(() => { // element-ui 使用 Tooltip 提示时候,更换页面,提示依旧存在偶现bug处理。 const mytooltipList = document.querySelectorAll('.el-tooltip__popper') // 获取页面所有tooltip的dom集合 setTimeout(() => { mytooltipList.forEach((value) => { value.style.display = 'none' if(value.parentElement){ value.parentElement.removeChild(value) } }) }, 1000) // finish progress bar NProgress.done() })