diff --git a/packages/editor/src/Editor.vue b/packages/editor/src/Editor.vue index 142f952c..c1ac2e96 100644 --- a/packages/editor/src/Editor.vue +++ b/packages/editor/src/Editor.vue @@ -224,15 +224,25 @@ export default defineComponent({ setup(props, { emit }) { editorService.on('root-change', (value) => { - const node = editorService.get('node'); - const nodeId = node?.id || props.defaultSelected; - if (nodeId && node !== value) { - editorService.select(nodeId); - } else { - editorService.set('nodes', [value]); + const nodeId = editorService.get('node')?.id || props.defaultSelected; + let node; + if (nodeId) { + node = editorService.getNodeById(nodeId); } - emit('update:modelValue', toRaw(editorService.get('root'))); + if (node && node !== value) { + editorService.select(node.id); + } else if (value?.items?.length) { + editorService.select(value.items[0]); + } else if (value?.id) { + editorService.set('nodes', [value]); + editorService.set('parent', null); + editorService.set('page', null); + } + + if (toRaw(value) !== toRaw(editorService.get('root'))) { + emit('update:modelValue', value); + } }); // 初始值变化,重新设置节点信息 diff --git a/packages/editor/src/layouts/workspace/Stage.vue b/packages/editor/src/layouts/workspace/Stage.vue index e933f5df..b391767b 100644 --- a/packages/editor/src/layouts/workspace/Stage.vue +++ b/packages/editor/src/layouts/workspace/Stage.vue @@ -62,7 +62,7 @@ const zoom = computed(() => services?.uiService.get('zoom') || 1); const node = computed(() => services?.editorService.get('node')); watchEffect(() => { - if (stage) return; + if (stage || !page.value) return; if (!stageContainer.value) return; if (!(stageOptions?.runtimeUrl || stageOptions?.render) || !root.value) return; diff --git a/packages/editor/src/utils/index.ts b/packages/editor/src/utils/index.ts index 320231bd..00bf68ed 100644 --- a/packages/editor/src/utils/index.ts +++ b/packages/editor/src/utils/index.ts @@ -21,3 +21,4 @@ export * from './props'; export * from './logger'; export * from './editor'; export * from './stage'; +export * from './operator';