From 6b5c2c0b2e2be48a16b154ac8046aa0627324ea3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=BF=97=E9=B9=8F?= <2916022834@qq.com> Date: Wed, 21 Jan 2026 16:55:16 +0800 Subject: [PATCH] fix --- .../CanvasEditor/managers/CanvasManager.js | 22 ++++++++++++------- .../CanvasEditor/managers/LayerManager.js | 10 ++++----- .../Canvas/CanvasEditor/utils/LayerSort.js | 15 ++++++------- 3 files changed, 26 insertions(+), 21 deletions(-) diff --git a/src/component/Canvas/CanvasEditor/managers/CanvasManager.js b/src/component/Canvas/CanvasEditor/managers/CanvasManager.js index ae7d8ca9..30be134d 100644 --- a/src/component/Canvas/CanvasEditor/managers/CanvasManager.js +++ b/src/component/Canvas/CanvasEditor/managers/CanvasManager.js @@ -1330,7 +1330,7 @@ backgroundObject.scaleY,'CanvasManager resetCanvasSizeByFixedLayer') } // 解析JSON字符串 try { - const parsedJson = JSON.parse(json); + const parsedJson = window.testCanvasJson || JSON.parse(json); console.log("加载画布JSON数据:", parsedJson); this.FixJsonIdLoss(parsedJson); this.canvasWidth.value = parsedJson.canvasWidth || this.width; @@ -1411,7 +1411,7 @@ backgroundObject.scaleY,'CanvasManager resetCanvasSizeByFixedLayer') // console.log("图层关联验证结果:", isValidate); // 排序 // 使用LayerSort工具重新排列画布对象(如果可用) - await this?.layerManager?.layerSort?.rearrangeObjects(); + await this?.layerManager?.layerSort?.rearrangeObjectsAsync(); this.layerManager.activeLayerId.value = this.layers.value[0] .children?.length @@ -1455,15 +1455,21 @@ backgroundObject.scaleY,'CanvasManager resetCanvasSizeByFixedLayer') const layers = json?.layers || []; const objects = json?.canvas?.objects || []; layers.forEach((layer) => { - if(!layer.fabricObjects?.length && !layer.fabricObject){ + if(!layer.fabricObjects?.[0]?.id && !layer.fabricObject?.id){ const obj = objects?.find((o) => o.layerId === layer.id); - if(!obj) return; - layer.fabricObjects = [{ - id: obj.id, - type: obj.type, - }] + if(obj) { + layer.fabricObjects = [{ + id: obj.id, + type: obj.type, + }] + } } }) + // 排序 + objects.sort((a, b) => { + if (a.isBackground) return -1; + if (b.isBackground) return 1; + }) } diff --git a/src/component/Canvas/CanvasEditor/managers/LayerManager.js b/src/component/Canvas/CanvasEditor/managers/LayerManager.js index 4b23403f..383d8da2 100644 --- a/src/component/Canvas/CanvasEditor/managers/LayerManager.js +++ b/src/component/Canvas/CanvasEditor/managers/LayerManager.js @@ -1612,11 +1612,11 @@ export class LayerManager { * @private */ _rearrangeObjects() { - if (this.layerSort) { - // 使用LayerSort的高级排序 - this.layerSort.rearrangeObjects(); - return; - } + // if (this.layerSort) { + // // 使用LayerSort的高级排序 + // this.layerSort.rearrangeObjects(); + // return; + // } // 传统排序逻辑(保持原有逻辑作为备用) if (!this.canvas) return; diff --git a/src/component/Canvas/CanvasEditor/utils/LayerSort.js b/src/component/Canvas/CanvasEditor/utils/LayerSort.js index eb87403c..d7c16369 100644 --- a/src/component/Canvas/CanvasEditor/utils/LayerSort.js +++ b/src/component/Canvas/CanvasEditor/utils/LayerSort.js @@ -71,17 +71,17 @@ export class LayerSort { // if (!layer.visible) { // continue; // } - + let id = layer.fabricObject?.id || layer.fabricObjects?.[0]?.id || null; // 处理不同类型的图层 - if (layer.isBackground && layer.fabricObject) { + if (layer.isBackground && id) { // 背景图层对象放在最底层 - zIndexMap.set(layer.fabricObject.id, currentZIndex++); - } else if (layer.isFixed && layer.fabricObject) { + zIndexMap.set(id, currentZIndex++); + } else if (layer.isFixed && id) { // 固定图层对象 - zIndexMap.set(layer.fabricObject.id, currentZIndex++); - } else if (layer.isFixedOther && layer.fabricObject) { + zIndexMap.set(id, currentZIndex++); + } else if (layer.isFixedOther && id) { // 其他固定图层对象 - zIndexMap.set(layer.fabricObject.id, currentZIndex++); + zIndexMap.set(id, currentZIndex++); } else if (!layer.isBackground && !layer.isFixed) { // 普通图层 currentZIndex = this.processLayerObjects( @@ -91,7 +91,6 @@ export class LayerSort { ); } } - return zIndexMap; }