63 lines
1.9 KiB
TypeScript
63 lines
1.9 KiB
TypeScript
// /*
|
|
// * @Author: RenXiaoDong
|
|
// * @Date: 2025-06-19 01:45:53
|
|
// */
|
|
// import type { RouteRecordRaw, RouteRecordNormalized } from 'vue-router';
|
|
// import { useRouter } from 'vue-router';
|
|
// import { useSidebarStore } from '@/stores/modules/side-bar';
|
|
|
|
// export default function useMenuTree() {
|
|
// const router = useRouter();
|
|
// const appRoutes = router.options?.routes ?? [];
|
|
// const sidebarStore = useSidebarStore();
|
|
// const appRoute = computed(() => {
|
|
// const _filterRoutes = appRoutes.filter((v) => v.meta?.id === sidebarStore.activeMenuKey);
|
|
// return _filterRoutes;
|
|
// });
|
|
// const menuTree = computed(() => {
|
|
// const copyRouter = cloneDeep(appRoute.value) as RouteRecordNormalized[];
|
|
// copyRouter.sort((a: RouteRecordNormalized, b: RouteRecordNormalized) => {
|
|
// return (a.meta.order || 0) - (b.meta.order || 0);
|
|
// });
|
|
// function travel(_routes: RouteRecordRaw[], layer: number) {
|
|
// if (!_routes) return null;
|
|
|
|
// const collector: any = _routes.map((element) => {
|
|
// // leaf node
|
|
// if (element.meta?.hideChildrenInMenu || !element.children) {
|
|
// element.children = [];
|
|
// return element;
|
|
// }
|
|
|
|
// // route filter hideInMenu true
|
|
// element.children = element.children.filter((x) => x.meta?.hideInMenu !== true);
|
|
|
|
// // Associated child node
|
|
// const subItem = travel(element.children, layer + 1);
|
|
|
|
// if (subItem.length) {
|
|
// element.children = subItem;
|
|
// return element;
|
|
// }
|
|
// // the else logic
|
|
// if (layer > 1) {
|
|
// element.children = subItem;
|
|
// return element;
|
|
// }
|
|
|
|
// if (element.meta?.hideInMenu === false) {
|
|
// return element;
|
|
// }
|
|
|
|
// return null;
|
|
// });
|
|
// return collector.filter(Boolean);
|
|
// }
|
|
// return travel(copyRouter, 0);
|
|
// });
|
|
|
|
// return {
|
|
// menuTree,
|
|
// };
|
|
// }
|