useComInstall.hook.ts 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. import { ref } from 'vue'
  2. import { ChartEditStorageType } from '../index.d'
  3. import { CreateComponentType, CreateComponentGroupType } from '@/packages/index.d'
  4. import { fetchChartComponent } from '@/packages/index'
  5. export const useComInstall = (localStorageInfo: ChartEditStorageType) => {
  6. const show = ref(false)
  7. // 注册组件(一开始无法获取window['$vue'])
  8. const intervalTiming = setInterval(() => {
  9. if (window['$vue']?.component) {
  10. clearInterval(intervalTiming)
  11. const intComponent = (target: CreateComponentType) => {
  12. if (!window['$vue'].component(target.chartConfig.chartKey)) {
  13. window['$vue'].component(target.chartConfig.chartKey, fetchChartComponent(target.chartConfig))
  14. }
  15. }
  16. localStorageInfo.componentList.forEach(async (e: CreateComponentType | CreateComponentGroupType) => {
  17. if (e.isGroup) {
  18. (e as CreateComponentGroupType).groupList.forEach(groupItem => {
  19. intComponent(groupItem)
  20. })
  21. } else {
  22. intComponent(e as CreateComponentType)
  23. }
  24. })
  25. show.value = true
  26. }
  27. }, 200)
  28. return {
  29. show
  30. }
  31. }