From c923e9e54d356ff08c8722528a70223c6057a830 Mon Sep 17 00:00:00 2001 From: zhangshun <453905631@qq.com> Date: Fri, 29 May 2026 16:35:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E6=A8=A1=E5=9E=8B=E5=BA=93?= =?UTF-8?q?=E5=90=91=E4=B8=BB=E7=A8=8B=E5=BA=8F=E5=AF=BC=E5=85=A5=E6=A8=A1?= =?UTF-8?q?=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/pages/app/modules/preview.ts | 45 ++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/web/src/pages/app/modules/preview.ts b/web/src/pages/app/modules/preview.ts index 1a4dcf3..b569517 100644 --- a/web/src/pages/app/modules/preview.ts +++ b/web/src/pages/app/modules/preview.ts @@ -64,6 +64,14 @@ export type PreviewImportScenePayload = { selectedCraftPlayData: P_OPERATION | null; }; +type ParentImportScenePayload = { + model: Pick; + modelUrl: string; + basePointEnabled: boolean; + basePoint: PreviewResolvedBasePoint; + rawOperationTree: string; +}; + export type ModelPreviewOptions = { onImportScene?: (payload: PreviewImportScenePayload) => Promise | void; }; @@ -214,6 +222,43 @@ export function createImportScenePayload(options: { export function emitImportScenePayload(payload: PreviewImportScenePayload) { window.dispatchEvent(new CustomEvent("dmt:import-scene", { detail: payload })); + if (window.parent && window.parent !== window) { + try { + window.parent.postMessage({ + type: "DMT_MODEL_LIBRARY_IMPORT_SCENE", + payload: buildParentImportScenePayload(payload) + }, resolveParentOrigin()); + } catch (error) { + notifyError(error); + } + } +} + +function buildParentImportScenePayload(payload: PreviewImportScenePayload): ParentImportScenePayload { + return { + model: { + id: payload.model.id, + name: payload.model.name, + original_filename: payload.model.original_filename, + file_url: payload.model.file_url + }, + modelUrl: payload.modelUrl, + basePointEnabled: payload.basePointEnabled, + basePoint: payload.basePoint, + rawOperationTree: payload.rawOperationTree + }; +} + +function resolveParentOrigin() { + try { + const meta = import.meta as ImportMeta & { env?: Record }; + const configuredOrigin = meta.env?.VITE_DMT_PARENT_ORIGIN; + if (configuredOrigin) return configuredOrigin; + if (document.referrer) return new URL(document.referrer).origin; + } catch { + return "*"; + } + return "*"; } function parseModelOperations(value: string): PreviewOperation[] {