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 @@