/** * 路由配置 */ import Vue from 'vue'; import NProgress from 'nprogress'; import VueRouter from 'vue-router'; import { WHITE_LIST, REDIRECT_PATH, LAYOUT_PATH } from '@/config/setting'; import store from '@/store'; import { getToken, setToken } from '@/utils/token-util'; import { routes, getMenuRoutes } from './routes'; import { SYSTEM_NAME } from '@/config/setting'; import { getLoginUser } from '@/api/login'; import { changeRole } from '@/api/layout/index'; Vue.use(VueRouter); const router = new VueRouter({ base: window.__POWERED_BY_QIANKUN__ ? `/page-${SYSTEM_NAME}/` : `/${SYSTEM_NAME}/`, routes, mode: 'history', scrollBehavior() { return { y: 0 }; } }); /** * 路由守卫 */ router.beforeEach((to, from, next) => { console.log(store.state.user); console.log(to); console.log(from); if (!from.path.includes(REDIRECT_PATH)) { NProgress.start(); } // 判断是否登录 if (getToken()) { if (!store.state.user.info?.userId) { getLoginUser().then((res) => { store.commit('user/setUserInfo', res); }); } console.log(!store.state.user.menus); // 还未注册动态路由则先获取 if (!store.state.user.menus) { store .dispatch('user/fetchUserInfo') .then(({ menus, homePath, authoritiesRouter }) => { menus.forEach((item) => { //匹配第一层路由名称 if (item.name == '配置管理') { item.children.push( { path: '/bpm/definition', component: 'bpm/definition', name: '流程定义', meta: { title: '流程定义', hide: true, routePath: '/bpm/definition' } }, { path: '/bpm/modelEditor', component: 'bpm/model/modelEditor', name: '设计流程', meta: { title: '设计流程', hide: true, routePath: '/bpm/modelEditor' } }, { path: '/bpm/processInstance', component: 'bpm/processInstance/detail', name: '流程详情', meta: { title: '流程详情', hide: true, routePath: '/bpm/processInstance' } } ); } }); if (menus) { router.addRoute( getMenuRoutes([...menus, ...authoritiesRouter], homePath) ); next({ ...to, replace: true }); } console.log(router); }) .catch((e) => { console.error(e); next(); }); } else { // console.log(router.getRoutes(), 'router', routes); if (routes.length >= router.getRoutes()?.length) { router.addRoute( getMenuRoutes([ ...store.state.user.menus, ...store.state.user.authoritiesRouter, to.fullPath ]) ); next({ ...to }); } else { next(); } } } else if (WHITE_LIST.includes(to.path)) { next(); } else { next({ path: '/login', query: to.path === LAYOUT_PATH ? {} : { from: to.path } }); } }); router.afterEach((to) => { if (!to.path.includes(REDIRECT_PATH) && NProgress.isStarted()) { setTimeout(() => { NProgress.done(true); }, 200); } }); router.roleChange = async ({ menus, homePath, authoritiesRouter }) => { const currentUser = JSON.parse(sessionStorage['currentUser']); if (menus && menus.length > 0) { router.addRoute( getMenuRoutes([...menus, ...authoritiesRouter], homePath) ); if (router.currentRoute.path != (menus[0].redirect || menus[0].path)) { await router.replace({ path: menus[0].redirect || menus[0].path, }) } const newToken = await changeRole({ groupId: currentUser.currentGroupId, roleId: currentUser.currentRoleId }) setToken(newToken) setTimeout(() => { window.location.reload() }, 100); } // next({ ...to, replace: true }); }; export default router;