From b46b5712142c85fc18533f68d52ae0958c2835e0 Mon Sep 17 00:00:00 2001 From: roymondchen Date: Thu, 23 Apr 2026 15:42:10 +0800 Subject: [PATCH] =?UTF-8?q?feat(editor):=20=E6=B2=A1=E6=9C=89=E5=8F=82?= =?UTF-8?q?=E8=80=83=E7=BA=BF=E6=97=B6=E4=B8=8D=E6=98=BE=E7=A4=BA=E5=8F=82?= =?UTF-8?q?=E8=80=83=E7=BA=BF=E5=88=87=E6=8D=A2=E6=8C=89=E9=92=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Made-with: Cursor --- packages/editor/src/hooks/use-stage.ts | 15 +++++++++++---- packages/editor/src/layouts/NavMenu.vue | 2 ++ packages/editor/src/services/ui.ts | 1 + packages/editor/src/type.ts | 2 ++ 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/packages/editor/src/hooks/use-stage.ts b/packages/editor/src/hooks/use-stage.ts index da7821fb..ff21c7e9 100644 --- a/packages/editor/src/hooks/use-stage.ts +++ b/packages/editor/src/hooks/use-stage.ts @@ -59,10 +59,12 @@ export const useStage = (stageOptions: StageOptions) => { }, ); - stage.mask?.setGuides([ - getGuideLineFromCache(getGuideLineKey(H_GUIDE_LINE_STORAGE_KEY)), - getGuideLineFromCache(getGuideLineKey(V_GUIDE_LINE_STORAGE_KEY)), - ]); + const hGuidesCache = getGuideLineFromCache(getGuideLineKey(H_GUIDE_LINE_STORAGE_KEY)); + const vGuidesCache = getGuideLineFromCache(getGuideLineKey(V_GUIDE_LINE_STORAGE_KEY)); + + stage.mask?.setGuides([hGuidesCache, vGuidesCache]); + + uiService.set('hasGuides', hGuidesCache.length > 0 || vGuidesCache.length > 0); stage.on('page-el-update', () => { editorService.set('stageLoading', false); @@ -124,6 +126,11 @@ export const useStage = (stageOptions: StageOptions) => { stage.on('change-guides', (e) => { uiService.set('showGuides', true); + uiService.set( + 'hasGuides', + (stage.mask?.horizontalGuidelines.length ?? 0) > 0 || (stage.mask?.verticalGuidelines.length ?? 0) > 0, + ); + if (!root.value || !page.value) return; const storageKey = getGuideLineKey( diff --git a/packages/editor/src/layouts/NavMenu.vue b/packages/editor/src/layouts/NavMenu.vue index 6fa5da3a..7b4de5db 100644 --- a/packages/editor/src/layouts/NavMenu.vue +++ b/packages/editor/src/layouts/NavMenu.vue @@ -37,6 +37,7 @@ const columnWidth = computed(() => uiService.get('columnWidth')); const keys = Object.values(ColumnLayout); const showGuides = computed((): boolean => uiService.get('showGuides')); +const hasGuides = computed((): boolean => uiService.get('hasGuides')); const showRule = computed((): boolean => uiService.get('showRule')); const zoom = computed((): number => uiService.get('zoom')); @@ -143,6 +144,7 @@ const getConfig = (item: MenuItem): (MenuButton | MenuComponent)[] => { }); break; case 'guides': + if (!hasGuides.value) break; config.push({ type: 'button', className: 'guides', diff --git a/packages/editor/src/services/ui.ts b/packages/editor/src/services/ui.ts index 95375e4a..f651b7c2 100644 --- a/packages/editor/src/services/ui.ts +++ b/packages/editor/src/services/ui.ts @@ -55,6 +55,7 @@ const state = shallowReactive({ DEFAULT_RIGHT_COLUMN_WIDTH, }, showGuides: true, + hasGuides: false, showRule: true, propsPanelSize: 'small', showAddPageButton: true, diff --git a/packages/editor/src/type.ts b/packages/editor/src/type.ts index 2ea80d94..8448e126 100644 --- a/packages/editor/src/type.ts +++ b/packages/editor/src/type.ts @@ -253,6 +253,8 @@ export interface UiState { columnWidth: GetColumnWidth; /** 是否显示画布参考线,true: 显示,false: 不显示,默认为true */ showGuides: boolean; + /** 画布上是否存在参考线 */ + hasGuides: boolean; /** 是否显示标尺,true: 显示,false: 不显示,默认为true */ showRule: boolean; /** 用于控制该属性配置表单内组件的尺寸 */