import { defineStore } from 'pinia' import { SysMenuOutput as MenuTree } from '@/api/swagger' import { cloneDeep } from 'loadsh' export interface MenuInfoState { menu: MenuTree[] buttons: string[] } export const useMenuStore = defineStore('useMenuStore', { state: (): MenuInfoState => { return { menu: [], buttons: [], } }, actions: { init(payload: { menus: MenuTree[]; buttons: string[] }) { this.menu = payload.menus this.buttons = payload.buttons }, clear() { this.menu = [] this.buttons = [] }, }, getters: { microMenus: (state) => menuAdaptor(cloneDeep(state.menu)), }, }) function menuAdaptor(menus: MenuTree[]) { return menus.map((v) => { if (v.children && v.children?.length) { menuAdaptor(v.children || []) } v.link = (v.routerPrefix || '') + v.link return v }) }