Files
lingji-work-fe/src/stores/modules/side-bar/index.ts

57 lines
1.7 KiB
TypeScript
Raw Normal View History

2025-06-23 23:59:08 -04:00
/*
* @Author: RenXiaoDong
* @Date: 2025-06-23 22:13:30
*/
import { defineStore } from 'pinia';
import { MENU_GROUP_IDS } from '@/router/constants';
import { appRoutes } from '@/router/routes';
import type { RouteLocationNormalized } from 'vue-router';
const { DATA_ENGINE_ID, MANAGEMENT_ID } = MENU_GROUP_IDS;
interface sidebarState {
activeMenuId: number | null;
}
export const useSidebarStore = defineStore('sidebar', {
state: (): sidebarState => ({
activeMenuId: null,
}),
actions: {
clearActiveMenuId() {
2025-06-24 01:35:52 -04:00
this.activeMenuId = null;
2025-06-23 23:59:08 -04:00
},
setActiveMenuId(id: number) {
this.activeMenuId = id;
},
// 根据当前路由自动设置 activeMenuId
setActiveMenuIdByRoute(route: RouteLocationNormalized) {
// console.log('setActiveMenuIdByRoute ');
// 查找当前路由所属的菜单组
const findMenuGroup = (routes: any[]): number | null => {
for (const routeItem of routes) {
// 检查子路由
if (routeItem.children && routeItem.children.length > 0) {
// 检查当前路由是否是这个父路由的子路由
const isChildRoute = routeItem.children.some((child: any) => child.name === route.name);
if (isChildRoute) {
return routeItem.meta?.id || null;
}
// 递归检查更深层的子路由
const childResult = findMenuGroup(routeItem.children);
if (childResult !== null) {
return routeItem.meta?.id || childResult;
}
}
}
return null;
};
const menuId = findMenuGroup(appRoutes);
if (menuId !== null) {
this.activeMenuId = menuId;
}
},
},
});