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 } from '@/utils/auth' // get token from cookie import getPageTitle from '@/utils/get-page-title' NProgress.configure({ showSpinner: false }) // NProgress Configuration const whiteList = ['/login', '/auth-redirect', '/testForm'] // no redirect whitelist // 跳转登录页 const pageToLogin = (to, from, next) => { if (whiteList.indexOf(to.path) !== -1) { // 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. next(`/login?redirect=${to.path}`) NProgress.done() } } // 首次进入页面加载数据处理 const toPageInit = 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') } // 获取用户信息 let _username = to.query.loginName || localStorage.getItem("isLoginName") || localStorage.getItem("userNameOrEmailAddress") if(!store.getters.currentUserInfo || store.getters.currentUserInfo.length <= 0){ await store.dispatch('user/getUserInfo',_username) .then(()=>{ toNextHandle(to, from, next,isFresh) }) .catch(()=>{ toNextHandle(to, from, next,isFresh) }) }else{ toNextHandle(to, from, next,isFresh) } } // 跳转处理 const toNextHandle = (to, from, next,isFresh) => { 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('isAutoLogin')) // 如果路径中有isAutoLogin参数则优先,否则读取配置文件中的isAutoLogin参数 let _url_isAutoLogin = to.query.isAutoLogin if( _url_isAutoLogin== 'false' || _url_isAutoLogin == 'true'){ isAutoLogin = JSON.parse(_url_isAutoLogin) } 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){ console.log('没有token,不是登录页,是自动登录,自动登录是否成功都将继续toPageInit') let _username = to.query.loginName || localStorage.getItem("isLoginName") || localStorage.getItem("userNameOrEmailAddress") let _password = to.query.loginPass || localStorage.getItem("client_secret") // todo-fast:password确定 await store.dispatch('user/login', {password:_password,username:_username}) .then(()=>{ toPageInit(to, from, next) }) .catch(()=>{ toPageInit(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() })