From 31bb673b44687547259a48595cacac7edf714f94 Mon Sep 17 00:00:00 2001 From: CODEX Date: Wed, 24 Jun 2026 18:43:06 +0300 Subject: [PATCH] Fix BIM model version switching --- frontend/dcViewer.js | 54 ++++++++++++++++++++++++++++---------------- frontend/index.html | 2 +- 2 files changed, 35 insertions(+), 21 deletions(-) diff --git a/frontend/dcViewer.js b/frontend/dcViewer.js index ee9f525..c417787 100644 --- a/frontend/dcViewer.js +++ b/frontend/dcViewer.js @@ -318,6 +318,7 @@ let modelVersionHistory = null; let modelVersionHistoryLoading = false; let modelVersionUploading = false; let versionHistoryModal = null; +let loadModelAsyncRef = null; let emptyWheelNavigationRestoreTimer = null; let lastSurfaceDollyFactor = null; let lastSurfaceDollyFactorAt = 0; @@ -4864,6 +4865,10 @@ const refreshModelVersionHistory = async ({ silent = false } = {}) => { }; const openModelVersion = async (version) => { + if (!loadModelAsyncRef) { + showError("Загрузчик модели еще не готов"); + return; + } const viewerSrc = getVersionViewerSrc(version); const viewerType = getVersionViewerType(version); if (!viewerSrc || !viewerType) { @@ -4886,25 +4891,33 @@ const openModelVersion = async (version) => { artifactSrc: normalizeModelSettingsSrc(viewerSrc) || viewerSrc, viewerSettings: null, }; - const settings = await fetchModelSettings(settingsSrc).catch(() => null); - if (settings?.viewerSettings) { - meta.viewerSettings = settings.viewerSettings; + try { + const settings = await fetchModelSettings(settingsSrc).catch(() => null); + if (settings?.viewerSettings) { + meta.viewerSettings = settings.viewerSettings; + } + await loadModelAsyncRef({ + type: viewerType, + url: viewerSrc, + name: version.originalFilename || previousEntry?.name || "model", + replace: true, + preserveMeta: true, + id: previousEntry?.model?.id || "model", + meta, + }); + modelVersionHistory = { + ...(modelVersionHistory || {}), + currentVersion: version.version || modelVersionHistory?.currentVersion || null, + currentVersionId: version.versionId || modelVersionHistory?.currentVersionId || null, + versions: modelVersionHistory?.versions || meta.versions || [], + }; + updateModelVersionControl(); + setStatus(`Открыта версия v${version.version || ""}`.trim()); + } catch (err) { + console.error(err); + showError(err.message || "Не удалось открыть версию модели"); + updateModelVersionControl(); } - await loadModelAsync({ - type: viewerType, - url: viewerSrc, - name: version.originalFilename || previousEntry?.name || "model", - replace: true, - id: previousEntry?.model?.id || "model", - meta, - }); - modelVersionHistory = { - ...(modelVersionHistory || {}), - currentVersion: version.version || modelVersionHistory?.currentVersion || null, - currentVersionId: version.versionId || modelVersionHistory?.currentVersionId || null, - versions: modelVersionHistory?.versions || meta.versions || [], - }; - updateModelVersionControl(); }; const uploadModelVersion = async (file) => { @@ -6051,7 +6064,7 @@ const initViewer = async () => { const loadModel = (options) => { const debugOptions = options || {}; try { - const { type, url, name = "", replace = true, id: forcedId, meta, edges } = options; + const { type, url, name = "", replace = true, id: forcedId, meta, edges, preserveMeta = false } = options; const modelSettings = meta?.viewerSettings; const normalizedType = normalizeType(type, typeof url === "string" ? url : ""); const inferredType = normalizedType || normalizeType(guessTypeFromName(typeof url === "string" ? url : "")); @@ -6062,7 +6075,7 @@ const initViewer = async () => { } if (replace) { - destroyAllModels({ preserveMeta: isLoadingSavedProject }); + destroyAllModels({ preserveMeta: preserveMeta || isLoadingSavedProject }); } if (modelSettings) { @@ -6215,6 +6228,7 @@ const initViewer = async () => { model.on("loaded", () => resolve(model)); model.on("error", (err) => reject(new Error(err?.message || err))); }); + loadModelAsyncRef = loadModelAsync; const loadStartupModelFromQuery = async () => { const params = new URLSearchParams(window.location.search); diff --git a/frontend/index.html b/frontend/index.html index 838cd6b..f802211 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -697,6 +697,6 @@ - +