import Vue from 'vue' import VueRouter from 'vue-router' import NProgress from 'nprogress' import 'nprogress/nprogress.css' import whiteList from './whiteList' import { Auth, Cache } from '@/util/auth' import store from '../store' import { staticRoute, routeHandle } from './staticRoute' import { login } from '../api/common' NProgress.configure({ showSpinner: false }) Vue.use(VueRouter) //以下代码解决路由地址重复的报错问题 const originalPush = VueRouter.prototype.push VueRouter.prototype.push = function push(location) { return originalPush.call(this, location).catch(err => err) } const router = new VueRouter({ mode: 'hash', routes: staticRoute }) // 路由跳转前验证 router.beforeEach((to, from, next) => { // 开启进度条 NProgress.start() // 判断是否传入token const token = to.query.token const _token = Auth.getLoginInfo() // const userInfo = store.getters.userInfo // const menu = store.getters.menuMap const routers = router.getRoutes() // console.log('router', routers) // console.log('token', token) // console.log('_token', _token) // console.log('userInfo', userInfo) // console.log('menu', menu) if (token && token !== _token) { // 重新登录 store.dispatch('clearStore') login({ token: token }).then(res => { if (res.msg === 201) { store.dispatch('saveMenuMap', res.respData.menuMap.parentMenuList) router.addRoutes(routeHandle(res.respData.menuMap.parentMenuList)) store.dispatch('saveUserInfo', res.respData.userDto) Auth.setLoginInfo(res.respData.token) next({ ...to, replace: true }) } else { this.$message.error(res.content) next({ path: '/error/404', replace: true }) } }) } else { if (routers.length > 7) { next() } else { store.dispatch('clearStore') login({ token: token || _token }).then(res => { if (res.msg === 201) { store.dispatch('saveMenuMap', res.respData.menuMap.parentMenuList) router.addRoutes(routeHandle(res.respData.menuMap.parentMenuList)) store.dispatch('saveUserInfo', res.respData.userDto) Auth.setLoginInfo(res.respData.token) next({ ...to, replace: true }) } else { this.$message.error(res.content) next({ path: '/error/404', replace: true }) } }) } } // if (token) { // if (_token === token) { // next() // } else { // store.dispatch('clearStore') // login({token: token}).then(res => { // if (res.msg === 201) { // store.dispatch('saveMenuMap', res.respData.menuMap.parentMenuList) // router.addRoutes(routeHandle(res.respData.menuMap.parentMenuList)) // store.dispatch('saveUserInfo', res.respData.userDto) // Auth.setLoginInfo(res.respData.token) // next() // } else { // this.$message.error(res.content) // next({path: '/error/404', replace: true}) // } // }) // } // } else { // // 判断是否登录过 // if (Auth.getLoginInfo() && store.getters.userInfo && store.getters.menuMap){ // next() // } else { // if (Auth.getLoginInfo()) { // const token = Auth.getLoginInfo() // store.dispatch('clearStore') // login({token: token}).then(res => { // if (res.msg === 201) { // store.dispatch('saveMenuMap', res.respData.menuMap.parentMenuList) // router.addRoutes(routeHandle(res.respData.menuMap.parentMenuList)) // store.dispatch('saveUserInfo', res.respData.userDto) // Auth.setLoginInfo(res.respData.token) // next() // } else { // next({path: '/error/404', replace: true}) // } // }) // } else { // // 判断是否为白名单页面 // if (whiteList.indexOf(to.path) >= 0) { // next() // } else { // store.dispatch('clearStore') // next({path: '/error/404', replace: true}) // } // } // } // } }) router.afterEach(() => { NProgress.done() // 结束Progress }) export default router