From e380ead651aaa83b4ba77f019c72a7c9cbf3cae2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A5=94=E8=B7=91=E7=9A=84=E9=9D=A2=E6=9D=A1?= <1262327911@qq.com> Date: Fri, 12 Aug 2022 20:39:20 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=A4=84=E7=90=86=E5=88=86=E7=BB=84?= =?UTF-8?q?=E9=A2=84=E8=A7=88=E5=92=8C=E5=8A=A8=E6=80=81=E5=BC=95=E5=85=A5?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/chart/ContentEdit/index.vue | 4 +- src/views/chart/hooks/useSync.hook.ts | 70 +++++++++++++------ .../components/PreviewRenderGroup/index.ts | 3 + .../components/PreviewRenderGroup/index.vue | 55 +++++++++++++++ .../components/PreviewRenderList/index.vue | 18 +++-- src/views/preview/hooks/useComInstall.hook.ts | 22 ++++-- 6 files changed, 137 insertions(+), 35 deletions(-) create mode 100644 src/views/preview/components/PreviewRenderGroup/index.ts create mode 100644 src/views/preview/components/PreviewRenderGroup/index.vue diff --git a/src/views/chart/ContentEdit/index.vue b/src/views/chart/ContentEdit/index.vue index 61c533c5..0bbb5190 100644 --- a/src/views/chart/ContentEdit/index.vue +++ b/src/views/chart/ContentEdit/index.vue @@ -23,7 +23,9 @@ >
- + + + { @@ -14,7 +15,7 @@ export const useSync = () => { * * 组件动态注册 * @param projectData 项目数据 * @param isSplace 是否替换数据 - * @returns + * @returns */ const updateComponent = async (projectData: ChartEditStorage, isSplace = false) => { if (isSplace) { @@ -26,18 +27,19 @@ export const useSync = () => { } // 列表组件注册 projectData.componentList.forEach(async (e: CreateComponentType | CreateComponentGroupType) => { - // 排除分组 - if (e.isGroup) return - const target = e as CreateComponentType - if (!window['$vue'].component(target.chartConfig.chartKey)) { - window['$vue'].component( - target.chartConfig.chartKey, - fetchChartComponent(target.chartConfig) - ) - window['$vue'].component( - target.chartConfig.conKey, - fetchConfigComponent(target.chartConfig) - ) + const intComponent = (target: CreateComponentType) => { + if (!window['$vue'].component(target.chartConfig.chartKey)) { + window['$vue'].component(target.chartConfig.chartKey, fetchChartComponent(target.chartConfig)) + window['$vue'].component(target.chartConfig.conKey, fetchConfigComponent(target.chartConfig)) + } + } + + if (e.isGroup) { + ;(e as CreateComponentGroupType).groupList.forEach(groupItem => { + intComponent(groupItem) + }) + } else { + intComponent(e as CreateComponentType) } }) // 数据赋值 @@ -45,15 +47,37 @@ export const useSync = () => { // 组件 if (key === ChartEditStoreEnum.COMPONENT_LIST) { for (const comItem of projectData[key]) { - // 补充 class 上的方法 - let newComponent: CreateComponentType = await createComponent( - comItem.chartConfig as ConfigType - ) - chartEditStore.addComponentList( - Object.assign(newComponent, {...comItem, id: getUUID()}), - false, - true - ) + + // 重新创建是为了处理类种方法消失的问题 + const create = async (e: CreateComponentType, callBack?: (e: CreateComponentType) => void) => { + // 补充 class 上的方法 + let newComponent: CreateComponentType = await createComponent(e.chartConfig as ConfigType) + if (callBack) { + callBack(Object.assign(newComponent, { ...e, id: getUUID() })) + } else { + chartEditStore.addComponentList(Object.assign(newComponent, { ...e, id: getUUID() }), false, true) + } + } + + if (comItem.isGroup) { + // 创建分组 + let groupClass = new PublicGroupConfigClass() + groupClass = Object.assign(groupClass, comItem) + + // 注册子应用 + const targetList: CreateComponentType[] = [] + ;(comItem as CreateComponentGroupType).groupList.forEach(groupItem => { + create(groupItem, e => { + targetList.push(e) + }) + }) + groupClass.groupList = targetList + + // 分组插入到列表 + chartEditStore.addComponentList(groupClass, false, true) + } else { + create(comItem as CreateComponentType) + } } } else { // 非组件(顺便排除脏数据) @@ -66,4 +90,4 @@ export const useSync = () => { return { updateComponent } -} \ No newline at end of file +} diff --git a/src/views/preview/components/PreviewRenderGroup/index.ts b/src/views/preview/components/PreviewRenderGroup/index.ts new file mode 100644 index 00000000..5d5a652c --- /dev/null +++ b/src/views/preview/components/PreviewRenderGroup/index.ts @@ -0,0 +1,3 @@ +import PreviewRenderGroup from './index.vue' + +export { PreviewRenderGroup } diff --git a/src/views/preview/components/PreviewRenderGroup/index.vue b/src/views/preview/components/PreviewRenderGroup/index.vue new file mode 100644 index 00000000..6ef63d12 --- /dev/null +++ b/src/views/preview/components/PreviewRenderGroup/index.vue @@ -0,0 +1,55 @@ + + + + + diff --git a/src/views/preview/components/PreviewRenderList/index.vue b/src/views/preview/components/PreviewRenderList/index.vue index 665ba487..5551b952 100644 --- a/src/views/preview/components/PreviewRenderList/index.vue +++ b/src/views/preview/components/PreviewRenderList/index.vue @@ -1,21 +1,31 @@ @@ -23,6 +33,7 @@