iot-ui-vue/src/store/menu.ts

68 lines
1.7 KiB
TypeScript

import { defineStore } from "pinia";
import { queryOwnThree } from '@/api/system/menu'
import { filterAsnycRouter } from '@/utils/menu'
export const useMenuStore = defineStore({
id: 'menu',
state: () => ({
menus: {},
menusKey: []
}),
getters: {
hasPermission(state) {
return (menuCode: string | string[]) => {
if (!menuCode) {
return true
}
if (!!Object.keys(state.menus).length) {
if (typeof menuCode === 'string') {
return !!this.menus[menuCode]
}
return menuCode.some(code => !!this.menus[code])
}
return false
}
},
},
actions: {
queryMenuTree(isCommunity = false): Promise<any[]> {
return new Promise(async (res) => {
//过滤非集成的菜单
const params = [
{
terms: [
{
terms: [
{
column: 'owner',
termType: 'eq',
value: 'iot',
},
{
column: 'owner',
termType: 'isnull',
value: '1',
type: 'or',
},
],
},
],
},
];
const resp = await queryOwnThree({ paging: false, terms: params })
if (resp.success) {
const menus = filterAsnycRouter(resp.result)
menus.push({
path: '/',
redirect: menus[0]?.path,
meta: {
hideInMenu: true
}
})
this.menus = menus
res(menus)
}
})
}
}
})