mirror of
https://gitee.com/dromara/go-view.git
synced 2025-04-06 03:58:04 +08:00
feat: 动态注册组件,优化首页出现性能
This commit is contained in:
parent
4a76e419be
commit
0bf38c032c
@ -4,7 +4,6 @@ import router, { setupRouter } from '@/router'
|
|||||||
import i18n from '@/i18n/index'
|
import i18n from '@/i18n/index'
|
||||||
import { setupStore } from '@/store'
|
import { setupStore } from '@/store'
|
||||||
import { setupNaive, setupDirectives, setupCustomComponents } from '@/plugins'
|
import { setupNaive, setupDirectives, setupCustomComponents } from '@/plugins'
|
||||||
import { packagesInstall } from '@/packages/index'
|
|
||||||
import { AppProvider } from '@/components/AppProvider/index'
|
import { AppProvider } from '@/components/AppProvider/index'
|
||||||
import { setHtmlTheme } from '@/utils'
|
import { setHtmlTheme } from '@/utils'
|
||||||
|
|
||||||
@ -40,13 +39,14 @@ async function appInit() {
|
|||||||
// Store 准备就绪后处理主题色
|
// Store 准备就绪后处理主题色
|
||||||
setHtmlTheme()
|
setHtmlTheme()
|
||||||
|
|
||||||
// 注册 pakage 组件
|
|
||||||
app.use(packagesInstall)
|
|
||||||
|
|
||||||
// 语言注册
|
// 语言注册
|
||||||
app.use(i18n)
|
app.use(i18n)
|
||||||
|
|
||||||
|
// 挂载到页面
|
||||||
app.mount('#app', true)
|
app.mount('#app', true)
|
||||||
|
|
||||||
|
// 挂载到 window
|
||||||
|
window['$vue'] = app
|
||||||
}
|
}
|
||||||
|
|
||||||
void appInit()
|
void appInit()
|
||||||
|
@ -17,16 +17,6 @@ let packagesList: PackagesType = {
|
|||||||
[PackagesCategoryEnum.DECORATES]: DecorateList
|
[PackagesCategoryEnum.DECORATES]: DecorateList
|
||||||
}
|
}
|
||||||
|
|
||||||
// * 注册
|
|
||||||
const packagesInstall = (app: App): void => {
|
|
||||||
for (const item in packagesList) {
|
|
||||||
const chartList: ConfigType[] = (packagesList as any)[item]
|
|
||||||
chartList.forEach((chart: ConfigType) => {
|
|
||||||
app.component(chart.key, chart.node)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* * 获取目标拖拽组件信息
|
* * 获取目标拖拽组件信息
|
||||||
* @param dropData
|
* @param dropData
|
||||||
@ -38,4 +28,4 @@ const createComponent = async (dropData: ConfigType) => {
|
|||||||
return new chart.default()
|
return new chart.default()
|
||||||
}
|
}
|
||||||
|
|
||||||
export { packagesList, packagesInstall, createComponent }
|
export { packagesList, createComponent }
|
||||||
|
@ -1,6 +1,15 @@
|
|||||||
import { defineAsyncComponent, AsyncComponentLoader } from 'vue'
|
import { defineAsyncComponent, AsyncComponentLoader } from 'vue'
|
||||||
import { AsyncLoading, AsyncSkeletonLoading } from '@/components/LoadingComponent'
|
import { AsyncLoading, AsyncSkeletonLoading } from '@/components/LoadingComponent'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* * 动态注册组件
|
||||||
|
*/
|
||||||
|
export const componentInstall = <T> (key:string, node: T) => {
|
||||||
|
if(!window['$vue'].component(key)) {
|
||||||
|
window['$vue'].component(key, node)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* * 异步加载组件
|
* * 异步加载组件
|
||||||
* @param loader
|
* @param loader
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { AppleControlBtn } from '@/components/AppleControlBtn/index'
|
import { AppleControlBtn } from '@/components/AppleControlBtn/index'
|
||||||
import { requireFallbackImg } from '@/utils'
|
import { requireFallbackImg, componentInstall } from '@/utils'
|
||||||
import { DragKeyEnum } from '@/enums/editPageEnum'
|
import { DragKeyEnum } from '@/enums/editPageEnum'
|
||||||
import { ConfigType } from '@/packages/index.d'
|
import { ConfigType } from '@/packages/index.d'
|
||||||
import omit from 'lodash/omit'
|
import omit from 'lodash/omit'
|
||||||
@ -41,6 +41,7 @@ defineProps({
|
|||||||
|
|
||||||
// 拖拽处理
|
// 拖拽处理
|
||||||
const handleDragStart = (e: DragEvent, item: ConfigType) => {
|
const handleDragStart = (e: DragEvent, item: ConfigType) => {
|
||||||
|
componentInstall(item.key, item.node)
|
||||||
// 将配置项绑定到拖拽属性上
|
// 将配置项绑定到拖拽属性上
|
||||||
e!.dataTransfer!.setData(DragKeyEnum.DROG_KEY, JSON.stringify(omit(item, ['node', 'image'])))
|
e!.dataTransfer!.setData(DragKeyEnum.DROG_KEY, JSON.stringify(omit(item, ['node', 'image'])))
|
||||||
}
|
}
|
||||||
|
2
types/global.d.ts
vendored
2
types/global.d.ts
vendored
@ -2,7 +2,9 @@ interface Window {
|
|||||||
$loading: any
|
$loading: any
|
||||||
$message: any
|
$message: any
|
||||||
$dialog: any
|
$dialog: any
|
||||||
|
// 语言
|
||||||
$t: any
|
$t: any
|
||||||
|
$vue: any
|
||||||
}
|
}
|
||||||
|
|
||||||
declare type Recordable<T = any> = Record<string, T>
|
declare type Recordable<T = any> = Record<string, T>
|
Loading…
x
Reference in New Issue
Block a user