import type { ComponentItem } from 'open-data-v/designer' import type { GroupType } from '@/enum' import { ComponentGroupList } from '@/enum' import { NothingLayout } from '@/layout' import { camel2snake } from '@/utils/utils' const getComponents = () => { const componentDocs: Array = ComponentGroupList.map((el: GroupType) => { return { label: el.name, key: el.key, icon: el.icon, children: [] } }) const moduleFilesTs: any = import.meta.glob('../../resource/components/**/index.ts', { eager: true }) Object.keys(moduleFilesTs).forEach((key: string) => { const componentOptions = moduleFilesTs[key]?.default const componentInstance = new componentOptions.config() const docs = componentDocs.filter((el) => el.key === componentInstance.group) if (docs.length > 0) { docs[0].children.push({ key: componentInstance.component, label: componentInstance.name, docs: componentOptions.docs ? componentOptions.docs : () => import('docs/Content/Empty.vue') }) } }) return componentDocs.map((ele) => { return { path: ele.key.toLocaleLowerCase(), name: ele.key, component: NothingLayout, meta: { title: ele.label, icon: ele.icon, ignoreAuth: true, hideInMenu: true }, children: ele.children.map((el) => { return { path: camel2snake(el.key), name: el.key, component: el.docs, meta: { title: el.label, ignoreAuth: true, hideInMenu: true } } }) } }) } const basicRoutes = [ { path: '/docs', name: 'Docs', component: () => import('docs/Site.vue'), redirect: '/docs/quick-satrt/intro', meta: { title: '文档', icon: 'docs', ignoreAuth: true, hideInMenu: true }, children: [ ] } ] export default basicRoutes