import { ref, defineComponent, computed } from 'vue'; import { plugin, ApplyPluginsType, getRoutes } from '@@/core/coreExports'; import BaseLayout from './views/BaseLayout.vue'; import getRuntimeConfig from './helpers/getRuntimeConfig'; import fillMenu from './helpers/fillMenu'; const Layout = defineComponent({ name: 'Layout', setup() { const userConfig = {{{REPLACE_USER_CONFIG}}}; const runtimeConfig = getRuntimeConfig(); const { menus, customHeader, menuConfig, // 非 BaseLayout需要的 initialState, sidebar, header, logo, // 跟logo冲突,换个名字 logoUrl, ...otherConfig } = runtimeConfig; if (logoUrl) { userConfig.logo = logoUrl; } if (menuConfig && typeof menuConfig === 'object') { Object.assign(userConfig.menuConfig, menuConfig); } Object.keys(otherConfig).forEach((p) => { if (otherConfig[p] !== undefined) { userConfig[p] = otherConfig[p]; } }); let menusRef = ref(userConfig.menus); // 如果运行时配置了menus,则需要处理 if (menus && typeof menus === 'function') { menusRef = ref(menus(userConfig.menus)); } // 把路由的meta合并到menu配置中 const filledMenuRef = computed(() => { return fillMenu(menusRef.value, getRoutes()); }); const localeShared = plugin.getShared('locale'); return () => { const slots = { customHeader: () => { if (runtimeConfig.customHeader) { return ( ); } return null; }, locale: () => { if (localeShared) { return ( ); } return null; } }; return ( ); }; } }); export default Layout;