/** * @program: kicc-ui * @description: 基础路由配置 * @author: wangxiang4 * @create: 2022/4/9 */ import type { RouteRecordRaw } from 'vue-router'; import type { App } from 'vue'; import { createRouter, createWebHistory } from 'vue-router'; import { basicRoutes } from './routes'; import { formatUrlParamsMenu } from '/@/router/helper/menuHelper'; import { useUserStore } from '/@/store/modules/user'; /** 固定路由,设置基础路由不需要被重置掉 */ const WHITE_NAME_LIST: string[] = []; const getRouteNames = (array: any[]) => array.forEach((item) => { WHITE_NAME_LIST.push(item.name); getRouteNames(item.children || []); });getRouteNames(basicRoutes); /** 应用配置的静态路由 */ export const router = createRouter({ history: createWebHistory(import.meta.env.VITE_PUBLIC_PATH), routes: basicRoutes as unknown as RouteRecordRaw[], strict: true, scrollBehavior: () => ({ left: 0, top: 0 }), }); /** 重置所有路由,除基础路由外 */ export function resetRouter() { router.getRoutes().forEach((route) => { const { name } = route; if (name && !WHITE_NAME_LIST.includes(name as string)) { router.hasRoute(name) && router.removeRoute(name); } }); } /** 配置路由器 */ export function setupRouter(app: App) { app.use(router); } /** 解析格式化路由占位符 */ export function formatRouterPlaceholder(path: string) { const userStore = useUserStore(); return formatUrlParamsMenu(path, { user: userStore.getUserInfo, accessToken: userStore.getAccessToken, refreshToken: userStore.getRefreshToken, roleIds: userStore.getRoleIds, permissions: userStore.getPermissions }); }