diff --git a/packages/designer/src/document/node/node.ts b/packages/designer/src/document/node/node.ts index ab9ee9422..f4486ecbf 100644 --- a/packages/designer/src/document/node/node.ts +++ b/packages/designer/src/document/node/node.ts @@ -910,6 +910,12 @@ export class Node { if (dropElement) { return { container: dropElement, ref }; } + const rootCanDropIn = this.componentMeta?.prototype?.options?.canDropIn; + if (rootCanDropIn === undefined + || rootCanDropIn === true + || (typeof rootCanDropIn === 'function' && rootCanDropIn(node))) { + return { container: this, ref }; + } // 假如最后找不到合适位置,返回 undefined 阻止继续插入节点 return undefined; } diff --git a/packages/designer/src/project/project.ts b/packages/designer/src/project/project.ts index 9a482d3ee..da5f775fd 100644 --- a/packages/designer/src/project/project.ts +++ b/packages/designer/src/project/project.ts @@ -248,6 +248,7 @@ export class Project { private mountSimulator(simulator: ISimulatorHost) { // TODO: 多设备 simulator 支持 this._simulator = simulator; + this.designer.editor.set('simulator', simulator); } setRendererReady(renderer: any) { diff --git a/packages/editor-preset-vision/src/viewport.ts b/packages/editor-preset-vision/src/viewport.ts index 66eaabf43..c21b29f02 100644 --- a/packages/editor-preset-vision/src/viewport.ts +++ b/packages/editor-preset-vision/src/viewport.ts @@ -194,8 +194,8 @@ export class Viewport { async setDevice(device = 'pc') { if (this.getDevice() !== device) { this.device = device; - const currentDocument = await editor.onceGot('currentDocument'); - currentDocument?.simulator?.set('device', device === 'mobile' ? 'mobile' : 'default'); + const simulator = await editor.onceGot('simulator'); + simulator?.set('device', device === 'mobile' ? 'mobile' : 'default'); // Flags.setSimulator(device); // this.applyMediaCSS(); this.emitter.emit('devicechange', device);