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' 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 loginErr = '登录失败,请重新登录 !' const getErrMsg = '数据获取失败 !' // 退出登录处理 const logoutHandle = (msg) => { if(msg){ Message.error(msg) } setTimeout(()=>{ store.dispatch("user/logout") },0) } // 跳转登录页 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() store.dispatch('user/resetToken') next(`/login?redirect=${to.path}`) NProgress.done() } } // 首次进入页面加载数据处理 const toPageInit = async (to, from, next) => { // const hasToken = getToken() // // 获取用户信息 // // let _userName = localStorage.getItem("isLoginTokenName")//使用用户名获取 // // if(_userName && _userName != null && (!store.getters.currentUserInfo || store.getters.currentUserInfo.length <= 0)){ // // await store.dispatch('user/getUserInfo',_userName)//使用用户名获取 // let _user_access = hasToken.substring(hasToken.indexOf(" ") + 1,hasToken.length) // if(hasToken && hasToken != null && (!store.getters.currentUserInfo || store.getters.currentUserInfo.length <= 0)){ // await store.dispatch('user/getUserInfoByToken',_user_access) // .then(()=>{ // toNextHandle(to, from, next) // }) // .catch(()=>{ // // toNextHandle(to, from, next) // Message.error(loginErr) // pageToLogin(to, from, next) // }) // return // } if(getToken()){ toNextHandle(to, from, next) }else{ logoutHandle('暂无token,请重新登录') } } // 获取数据失败处理 const getErrHandle = (to, from, next) => { let isAutoLogin = JSON.parse(localStorage.getItem('isConfigLogin')) || to.query.loginName Message.error(getErrMsg) if(!isAutoLogin){ logoutHandle() } NProgress.done() } // 跳转处理 const toNextHandle = async (to, from, next) => { let isFresh = false // 如果有登录特殊配置,重新获取token let isAutoLogin = JSON.parse(localStorage.getItem('isConfigLogin')) || to.query.loginName if(isAutoLogin){ let _username = localStorage.getItem("isConfigLogin") && localStorage.getItem("isConfigLogin") != 'false' ? localStorage.getItem("configLoginName") : to.query.loginName await store.dispatch('user/login', { username:_username, password:localStorage.getItem("configLoginPass") }).catch(()=>{ logoutHandle() // getErrHandle(to, from, next) }) } // 获取表头转义 if(!store.getters.columZHList){ await store.dispatch('definition/getColumZHList').catch(()=>{ getErrHandle(to, from, next) }) } // 获取菜单数据 permission_routes if(!store.getters.hasApiToken){ isFresh = true await store.dispatch('permission/getAppConfig') .then((res)=>{ // 没有权限(token失效处理) if(!res || !res.auth || !res.auth.grantedPolicies || JSON.stringify(res.auth.grantedPolicies) == '{}'){ logoutHandle('用户无权限或者token失效,请配置权限或重新登录') } }) .catch(()=>{ getErrHandle(to, from, next) }) } // 获取枚举数据 if(!store.getters.enumList || store.getters.enumList.length <= 0){ await store.dispatch('definition/getDefinitionConfig').catch(()=>{ getErrHandle(to, from, next) }) } 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 { // 如果有单点登录方式使用下方配置 // mgr.signinRedirect(); //执行重定向 if(isAutoLogin){ let _username = localStorage.getItem("isConfigLogin") && localStorage.getItem("isConfigLogin") != 'false' ? localStorage.getItem("configLoginName") : to.query.loginName await store.dispatch('user/login', { username:_username, password:localStorage.getItem("configLoginPass") }) .then(()=>{ toPageInit(to, from, next) }) .catch(()=>{ // toNextHandle(to, from, next) // Message.error(loginErr) 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() })