diff --git a/packages/editor/src/hooks/use-stage.ts b/packages/editor/src/hooks/use-stage.ts
index ca819019..496032ee 100644
--- a/packages/editor/src/hooks/use-stage.ts
+++ b/packages/editor/src/hooks/use-stage.ts
@@ -45,6 +45,7 @@ export const useStage = (stageOptions: StageOptions) => {
updateDragEl: stageOptions.updateDragEl,
guidesOptions: stageOptions.guidesOptions,
disabledMultiSelect: stageOptions.disabledMultiSelect,
+ disabledRule: stageOptions.disabledRule,
});
watch(
diff --git a/packages/editor/src/layouts/workspace/viewer/StageOverlay.vue b/packages/editor/src/layouts/workspace/viewer/StageOverlay.vue
index b19a0e41..326a0583 100644
--- a/packages/editor/src/layouts/workspace/viewer/StageOverlay.vue
+++ b/packages/editor/src/layouts/workspace/viewer/StageOverlay.vue
@@ -1,9 +1,19 @@
-
@@ -13,10 +23,11 @@ import { CloseBold } from '@element-plus/icons-vue';
import { TMagicIcon } from '@tmagic/design';
+import ScrollViewer from '@editor/components/ScrollViewer.vue';
import { useServices } from '@editor/hooks/use-services';
import type { StageOptions } from '@editor/type';
-const { stageOverlayService, editorService } = useServices();
+const { stageOverlayService, editorService, uiService } = useServices();
const stageOptions = inject('stageOptions');
@@ -26,10 +37,12 @@ const stageOverlayVisible = computed(() => stageOverlayService.get('stageOverlay
const wrapWidth = computed(() => stageOverlayService.get('wrapWidth'));
const wrapHeight = computed(() => stageOverlayService.get('wrapHeight'));
const stage = computed(() => editorService.get('stage'));
+const zoom = computed(() => uiService.get('zoom'));
+const columnWidth = computed(() => uiService.get('columnWidth'));
+const frameworkRect = computed(() => uiService.get('frameworkRect'));
const style = computed(() => ({
- width: `${wrapWidth.value}px`,
- height: `${wrapHeight.value}px`,
+ transform: `scale(${zoom.value})`,
}));
watch(stage, (stage) => {
@@ -43,6 +56,12 @@ watch(stage, (stage) => {
}
});
+watch(zoom, (zoom) => {
+ const stage = stageOverlayService.get('stage');
+ if (!stage || !zoom) return;
+ stage.setZoom(zoom);
+});
+
watch(stageOverlayEl, (stageOverlay) => {
const subStage = stageOverlayService.createStage(stageOptions);
stageOverlayService.set('stage', subStage);
diff --git a/packages/editor/src/services/stageOverlay.ts b/packages/editor/src/services/stageOverlay.ts
index 55182b08..1156d8d3 100644
--- a/packages/editor/src/services/stageOverlay.ts
+++ b/packages/editor/src/services/stageOverlay.ts
@@ -97,9 +97,9 @@ class StageOverlay extends BaseService {
public createStage(stageOptions: StageOptions = {}) {
return useStage({
...stageOptions,
- zoom: 1,
runtimeUrl: '',
autoScrollIntoView: false,
+ disabledRule: true,
render: async (stage: StageCore) => {
this.copyDocumentElement();
diff --git a/packages/editor/src/theme/stage.scss b/packages/editor/src/theme/stage.scss
index aabd0c0a..d8f4c866 100644
--- a/packages/editor/src/theme/stage.scss
+++ b/packages/editor/src/theme/stage.scss
@@ -35,22 +35,15 @@
width: 100%;
height: 100%;
background-color: #fff;
- display: flex;
z-index: 20;
- overflow: auto;
-}
-
-.m-editor-stage-overlay-container {
- position: relative;
- flex-shrink: 0;
- margin: auto;
- box-shadow: rgba(0, 0, 0, 0.04) 0px 3px 5px;
}
.m-editor-stage-overlay-close.tmagic-design-icon {
position: fixed;
right: 20px;
top: 10px;
+ cursor: pointer;
+ z-index: 1;
}
.m-editor-stage-float-button {
@@ -66,8 +59,10 @@
background-color: #ffffff;
transition: background-color 0.2s;
color: rgba(0, 0, 0, 0.88);
- box-shadow: 0 6px 16px 0 rgba(0, 0, 0, 0.08),
- 0 3px 6px -4px rgba(0, 0, 0, 0.12), 0 9px 28px 8px rgba(0, 0, 0, 0.05);
+ box-shadow:
+ 0 6px 16px 0 rgba(0, 0, 0, 0.08),
+ 0 3px 6px -4px rgba(0, 0, 0, 0.12),
+ 0 9px 28px 8px rgba(0, 0, 0, 0.05);
}
.m-editor-node-list-menu {
diff --git a/packages/editor/src/type.ts b/packages/editor/src/type.ts
index 7e88c9d0..e97f3c46 100644
--- a/packages/editor/src/type.ts
+++ b/packages/editor/src/type.ts
@@ -164,6 +164,7 @@ export interface StageOptions {
renderType?: RenderType;
guidesOptions?: Partial;
disabledMultiSelect?: boolean;
+ disabledRule?: boolean;
zoom?: number;
}