Files
workspace/code/base-project/base-vue/packages/ao-design/src/index.ts
T
2025-09-21 21:52:08 +08:00

45 lines
1.2 KiB
TypeScript

import type { App, Component } from 'vue'
// components/index.ts(修改后)
import * as comps from './components'
import { useMessage } from './message'
import { useModal } from './modal/useModal'
import { useNotification } from './notification'
// 按需导出组件(可单独 import)
export * from './components'
// 收集所有组件
const allComponents = Object.values(comps).filter(
(c: any) => c && c.name,
) as Component[]
export interface AoDesignOptions {
prefix?: string
components?: Component[]
}
const AoDesign = {
install(app: App, options: AoDesignOptions = {}) {
const prefix = options?.prefix ?? 'A'
// 如果用户指定了 components,则只注册这些,否则注册全部
const componentsToRegister = options?.components || allComponents
componentsToRegister.forEach((component: any) => {
if (!component?.name)
return
const name = `${prefix}${component.name}`
app.component(name, component)
// 注册 kebab-case
app.component(
name.replace(/([A-Z])/g, '-$1').toLowerCase().replace(/^-/, ''),
component,
)
})
},
}
export { AoDesign, useMessage, useModal, useNotification }