import { h } from 'vue' class ComponentLoader { constructor() { this.modules = import.meta.glob('../../views/**/*.vue') } /** * 加载组件 */ load(componentPath) { if (!componentPath) { return this.createEmptyComponent() } const fullPath = `../../views${componentPath}.vue` const fullPathWithIndex = `../../views${componentPath}/index.vue` const module = this.modules[fullPath] || this.modules[fullPathWithIndex] if (!module) { console.error( `[ComponentLoader] 未找到组件: ${componentPath},尝试过的路径: ${fullPath} 和 ${fullPathWithIndex}` ) return this.createErrorComponent(componentPath) } return module } /** * 加载布局组件 */ loadLayout() { return () => import('@/views/index/index.vue') } /** * 加载 iframe 组件 */ loadIframe() { return () => import('@/views/outside/Iframe.vue') } /** * 创建空组件 */ createEmptyComponent() { return () => Promise.resolve({ render() { return h('div', {}) } }) } /** * 创建错误提示组件 */ createErrorComponent(componentPath) { return () => Promise.resolve({ render() { return h('div', { class: 'route-error' }, `组件未找到: ${componentPath}`) } }) } } export { ComponentLoader }