wanshenmean
10 小时以前 f288ccc545f8cc32bc922c96dfb3cab9a1f92ec6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/**
 * 菜单状态管理
 */
import { defineStore } from 'pinia';
import { menuApi, type BackendMenuNode } from '@/api/modules/menu';
import { normalizeMenus, addHomeMenu } from '@/utils/menuTransform';
 
interface MenuState {
  menus: BackendMenuNode[];
  loaded: boolean;
}
 
export const useMenuStore = defineStore('menu', {
  state: (): MenuState => ({
    menus: [],
    loaded: false,
  }),
 
  getters: {
    flatMenus: (state) => {
      const flat: BackendMenuNode[] = [];
      const flatten = (items: BackendMenuNode[]) => {
        items.forEach((item) => {
          flat.push(item);
          if (item.children?.length) {
            flatten(item.children);
          }
        });
      };
      flatten(state.menus);
      return flat;
    },
  },
 
  actions: {
    async loadMenus() {
      try {
        const data = await menuApi.getTreeMenu();
        this.menus = addHomeMenu(data || []);
        this.loaded = true;
        return this.menus;
      } catch (error) {
        console.error('加载菜单失败:', error);
        throw error;
      }
    },
 
    findMenuByPath(path: string): BackendMenuNode | null {
      return this.flatMenus.find((m) => m.path === path) || null;
    },
 
    resetMenus() {
      this.menus = [];
      this.loaded = false;
    },
  },
});