import { acceptHMRUpdate, defineStore } from 'pinia' import { SystemMenu } from '../entity/system/system-menu' interface PermissionStore { // 登录令牌 map: { [key: string]: string[] } } const STORE_KEY = 'permission-store' export const usePermissionStore = defineStore(STORE_KEY, { state: () => { map: {} }, getters: { /** * 根据路由和名称获取权限 * @param state */ hasPermission: state => (value: string, path: string) => { if (!state.map[path]) { return false } return state.map[path].includes(value) } }, actions: { setMap(menuList: SystemMenu[]) { const map = {} buildMap(map, menuList) this.$patch({ map }) } }, // 开启数据缓存 persist: { enabled: true, strategies: [ { key: STORE_KEY, storage: localStorage } ] } }) /** * 设置权限 * @param map * @param menuList */ const buildMap = (map: { [key: string]: string[] }, menuList: SystemMenu[]) => { menuList.forEach(menu => { if (menu.permissions && menu.linkUrl && menu.linkUrl.startsWith('/')) { if (menu.permissions.includes(',')) map[menu.linkUrl] = menu.permissions.split(',') else if (menu.permissions.includes('、')) map[menu.linkUrl] = menu.permissions.split('、') else map[menu.linkUrl] = [menu.permissions] } if (menu.children && menu.children.length > 0) { buildMap(map, menu.children) } }) } if (import.meta.hot) { import.meta.hot.accept(acceptHMRUpdate(usePermissionStore, import.meta.hot)) }