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' import { mgr } from "@/oidc/oidc-client"; NProgress.configure({ showSpinner: false }) // NProgress Configuration const whiteList = ['/login','/callback'] // no redirect whitelist const noUserMsg = '获取用户信息失败,请重新登录 !' const getErrMsg = '数据获取失败 !' // 跳转登录页 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').catch(()=>{ Message.error(getErrMsg) NProgress.done() }) } // 获取菜单数据 if(!store.getters.permission_routes || store.getters.permission_routes.length <= 0){ isFresh = true await store.dispatch('permission/getApiColumnsNames').catch(()=>{ Message.error(getErrMsg) NProgress.done() }) } // 获取枚举数据 if(!store.getters.enumList || store.getters.enumList.length <= 0){ await store.dispatch('definition/getDefinitionConfig').catch(()=>{ Message.error(getErrMsg) NProgress.done() }) } 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 || to.path == '/callback'){ 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 { if(to.path == '/callback'){ console.log('有token,是callback页,next') next() }else{ console.log('有token,不是登录页,不是callback页,toPageInit') await toPageInit(to, from, next) } } }else{ if (to.path === '/login') { console.log('没有token,是登录页,pageToLogin') pageToLogin(to, from, next) } else { // todo:自动登录,即没有密码登录情况处理 mgr.signinRedirect(); //执行重定向 // 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() })