import { defineStore } from 'pinia' import { ref, defineAsyncComponent } from 'vue' import { getPermissionInfo } from '@/api/recruit/enterprise/system/role' import { cloneDeep } from 'lodash' export const useEnterpriseStore = defineStore('enterpriseStore', () => { const enterpriseMenu = ref([]) const saveEnterpriseMenu = (menu) => { enterpriseMenu.value = menu } const getEnterpriseMenu = () => { return new Promise((resolve, reject) => { getPermissionInfo().then(data => { resolve(data) }).catch(reject) }) } const clearEnterpriseMenu = () => { enterpriseMenu.value = [] } const MENU_TYPE = { CATALOGUE: 1, MENU: 2, BUTTON: 3 } // 动态加载路由函数 const assignEnterpriseMenu = (menuTree) => { const modules = import.meta.glob('../views/recruit/enterprise/**/*.{vue,tsx}') const modulesRoutesKeys = Object.keys(modules) const formatRoutes = (menu) => { return menu.map(item => { const data = JSON.parse(JSON.stringify(item)) Object.assign(data, { meta: { title: item.name, icon: item.icon, loginType: 'enterprise' } }) if (item.type === MENU_TYPE.CATALOGUE) { data.component = () => import('@/layout/enterprise.vue') } if (item.type === MENU_TYPE.MENU) { const index = modulesRoutesKeys.findIndex((ev) => ev.includes(data.component)) if (index > -1) { data.component = modules[modulesRoutesKeys[index]] data.path = `/${item.path}` } } // 如果有子菜单,递归调用 if (item.children && Array.isArray(item.children) && item.children.length) { data.children = formatRoutes(item.children) } return data }) } return formatRoutes(menuTree) } return { enterpriseMenu, assignEnterpriseMenu, clearEnterpriseMenu, saveEnterpriseMenu, getEnterpriseMenu } }, { persist: true })