45 lines
1.2 KiB
TypeScript
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 }
|