mirror of
https://github.com/Tencent/tdesign-vue-next-starter.git
synced 2024-12-23 23:35:47 +08:00
86 lines
2.4 KiB
TypeScript
86 lines
2.4 KiB
TypeScript
import uniq from 'lodash/uniq';
|
|
import { createRouter, createWebHistory, RouteRecordRaw, useRoute } from 'vue-router';
|
|
|
|
const env = import.meta.env.MODE || 'development';
|
|
|
|
// 导入homepage相关固定路由
|
|
const homepageModules = import.meta.glob('./modules/**/homepage.ts', { eager: true });
|
|
|
|
// 导入modules非homepage相关固定路由
|
|
const fixedModules = import.meta.glob('./modules/**/!(homepage).ts', { eager: true });
|
|
|
|
// 其他固定路由
|
|
const defaultRouterList: Array<RouteRecordRaw> = [
|
|
{
|
|
path: '/login',
|
|
name: 'login',
|
|
component: () => import('@/pages/login/index.vue'),
|
|
},
|
|
{
|
|
path: '/',
|
|
redirect: '/dashboard/base',
|
|
},
|
|
];
|
|
// 存放固定路由
|
|
export const homepageRouterList: Array<RouteRecordRaw> = mapModuleRouterList(homepageModules);
|
|
export const fixedRouterList: Array<RouteRecordRaw> = mapModuleRouterList(fixedModules);
|
|
|
|
export const allRoutes = [...homepageRouterList, ...fixedRouterList, ...defaultRouterList];
|
|
|
|
// 固定路由模块转换为路由
|
|
export function mapModuleRouterList(modules: Record<string, unknown>): Array<RouteRecordRaw> {
|
|
const routerList: Array<RouteRecordRaw> = [];
|
|
Object.keys(modules).forEach((key) => {
|
|
// @ts-ignore
|
|
const mod = modules[key].default || {};
|
|
const modList = Array.isArray(mod) ? [...mod] : [mod];
|
|
routerList.push(...modList);
|
|
});
|
|
return routerList;
|
|
}
|
|
|
|
export const getRoutesExpanded = () => {
|
|
const expandedRoutes = [];
|
|
|
|
fixedRouterList.forEach((item) => {
|
|
if (item.meta && item.meta.expanded) {
|
|
expandedRoutes.push(item.path);
|
|
}
|
|
if (item.children && item.children.length > 0) {
|
|
item.children
|
|
.filter((child) => child.meta && child.meta.expanded)
|
|
.forEach((child: RouteRecordRaw) => {
|
|
expandedRoutes.push(item.path);
|
|
expandedRoutes.push(`${item.path}/${child.path}`);
|
|
});
|
|
}
|
|
});
|
|
return uniq(expandedRoutes);
|
|
};
|
|
|
|
export const getActive = (maxLevel = 3): string => {
|
|
const route = useRoute();
|
|
if (!route.path) {
|
|
return '';
|
|
}
|
|
return route.path
|
|
.split('/')
|
|
.filter((_item: string, index: number) => index <= maxLevel && index > 0)
|
|
.map((item: string) => `/${item}`)
|
|
.join('');
|
|
};
|
|
|
|
const router = createRouter({
|
|
history: createWebHistory(env === 'site' ? '/starter/vue-next/' : import.meta.env.VITE_BASE_URL),
|
|
routes: allRoutes,
|
|
scrollBehavior() {
|
|
return {
|
|
el: '#app',
|
|
top: 0,
|
|
behavior: 'smooth',
|
|
};
|
|
},
|
|
});
|
|
|
|
export default router;
|