import Vue from 'vue' import VueRouter, { RouteConfig } from 'vue-router' import HomeView from '../views/HomeView.vue' import { useTokenStore } from '@/store/token' import { useUserStore } from '@/store/user' import { useReuseTabStore } from '@/store/reuse-tab' import config from '@/config' import pinia from '@/store' Vue.use(VueRouter) const routes: Array = [ { path: '/', name: 'home', component: HomeView, }, { path: '/about', name: 'about', // route level code-splitting // this generates a separate chunk (about.[hash].js) for this route // which is lazy-loaded when the route is visited. component: () => import(/* webpackChunkName: "about" */ '../views/AboutView.vue'), }, ] const router = new VueRouter({ mode: 'history', base: window.__POWERED_BY_QIANKUN__ ? 'APPNAME_DEV_PUBLIC_PATH' : process.env.BASE_URL, routes, }) router.beforeEach((to, from, next) => { // 开始loading if (window.__POWERED_BY_QIANKUN__) { Vue.prototype.$parentLodingStore.start() } next() }) router.beforeResolve(async (to, from, next) => { document.title = to.meta?.title || config.name if (to.meta && to.meta.routerGuard) { const tokenStore = useTokenStore(pinia) const token = tokenStore.getToken() const userStore = useUserStore(pinia) if (!token) { next({ path: window.__POWERED_BY_QIANKUN__ ? '/' : '/', }) } else { try { userStore.logged().then(() => { next() }) } catch (e) { console.log(e) } } } else { next() } }) router.afterEach((to, from) => { const reuseTabStore = useReuseTabStore(pinia) const componentName = (to.matched[to.matched.length - 1]?.components?.default as any).extendOptions?.name || to.meta?.componentName || '' const tabInfo = { name: to.name, path: window.__POWERED_BY_QIANKUN__ ? 'APPNAME_ACTIVE_RULE' + to.path : to.path, title: to.meta?.title, query: to.query, params: to.params, closable: to.path !== '/home', activeName: from.name, componentName: to.meta?.keepAlive ? componentName : '', meta: to.meta, } if (!to.meta?.invisibleInTab) { if (window.__POWERED_BY_QIANKUN__) { Vue.prototype.$parentReuseTabStore.add(tabInfo) Vue.prototype.$parentReuseTabStore.changeTo(tabInfo) } reuseTabStore.add(tabInfo) } if (window.__POWERED_BY_QIANKUN__) { Vue.prototype.$parentLodingStore.completed() } }) export default router