import Vue from 'vue' import Router from 'vue-router' import { formatRoutes } from '@/utils/routerUtil' // 引入路由格式化工具 // -------------------------------- 以下为刷新页面时,重新加载路由 权限 用户信息的代码 -------------------------------- import { getUserInfo, getRoutesConfig, getPermission, getSettings, getCompany, getProject } from '@/services/base/user' // 刷新用户信息 import { loadRoutes } from '@/utils/routerUtil' import store from '@/store' // 引入vuex store 实例 import xsrfHeaderName from '@/utils/request' // 引入request import Cookie from 'js-cookie' // 如果cookie中存在认证信息 const Authorization = Cookie.get(xsrfHeaderName).Authorization if (Authorization != null) { getUserInfo().then(result => { // 获取用户信息 if (result.data.data != null) { const UserInfo = result.data.data.user_info store.commit('account/setUser', UserInfo) // 将用户信息存入vuex } }) getPermission().then(result => { // 获取权限 if (result.data.data != null) { const Permission = result.data.data.permission store.commit('account/setPermissions', Permission) // 将权限信息存入vuex } }) getRoutesConfig().then(result => { // 获取路由配置 if (result.data.data != null) { const routesConfig = result.data.data; console.log(routesConfig) store.commit('account/setRoutesConfig', routesConfig) // 将路由配置信息存入vuex let touchRoute = { router: "touch", children:[ {router:'TouchMesReporting'} ] }; loadRoutes([touchRoute,routesConfig]) // 加载路由 } }) getSettings().then(result => { // 获取系统配置 if (result.data.data != null) { const settings = result.data.data store.commit('account/setSettings', settings) // 将系统配置信息存入vuex } }) getCompany().then(result => { // 获取公司信息 if (result.data.data != null) { const company = result.data.data store.commit('account/setCompany', company) // 将公司信息存入vuex } }) getProject().then(result => { // 获取项目信息 if (result.data.data != null) { const project = result.data.data store.commit('account/setProject', project) // 将项目信息存入vuex } }) } // -------------------------------- 以上为刷新页面时,重新加载路由 权限 用户信息的代码 -------------------------------- Vue.use(Router) // 不需要登录拦截的路由配置 const loginIgnore = { // 登录白名单 names: ['404', '403'], //根据路由名称匹配 paths: ['/login','/touch','/touch/index','/touch/mesreporting'], //根据路由fullPath匹配 /** * 判断路由是否包含在该配置中 * @param route vue-router 的 route 对象 * @returns {boolean} */ includes(route) { // 判断路由是否包含在该配置中 return this.names.includes(route.name) || this.paths.includes(route.path) // 返回true则不需要登录拦截 } } // 解决重复点击路由报错的BUG const originalPush = Router.prototype.push // 保存原型对象中的push方法 Router.prototype.push = function push(location) { // 重写原型对象中的push方法 return originalPush.call(this, location).catch((err) => err) // 抛出错误 } /** * 初始化路由实例 * @param isAsync 是否异步路由模式 * @returns {VueRouter} */ function initRouter(isAsync) { // 初始化路由 const options = isAsync ? require('./async/config.async').default : require('./config').default // 引入路由配置 formatRoutes(options.routes) // 格式化路由 console.log(options) return new Router(options) // 返回路由实例 } export { loginIgnore, initRouter } // 导出路由配置和初始化路由方法