From 0c0f4522fcc51e107cfbe66a5e8064240a0bf4ba Mon Sep 17 00:00:00 2001 From: X1627315083 <1627315083@qq.com> Date: Fri, 17 Oct 2025 17:39:19 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=BB=E5=B8=83=E5=88=A0=E9=99=A4=E6=92=A4?= =?UTF-8?q?=E5=9B=9E=E3=80=81=E9=A2=91=E7=B9=81=E6=92=A4=E5=9B=9E=E5=8F=8D?= =?UTF-8?q?=E6=92=A4=E5=9B=9E=E3=80=81=E5=9B=BE=E7=89=87=E8=A3=81=E5=89=AA?= =?UTF-8?q?id=E4=B8=A2=E5=A4=B1=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CanvasEditor/commands/LayerCommands.js | 9 ++++- src/component/Canvas/CanvasEditor/index.vue | 39 ++++++++++--------- .../CanvasEditor/managers/LayerManager.js | 3 +- 3 files changed, 29 insertions(+), 22 deletions(-) diff --git a/src/component/Canvas/CanvasEditor/commands/LayerCommands.js b/src/component/Canvas/CanvasEditor/commands/LayerCommands.js index 1dffba96..fe2b13af 100644 --- a/src/component/Canvas/CanvasEditor/commands/LayerCommands.js +++ b/src/component/Canvas/CanvasEditor/commands/LayerCommands.js @@ -70,7 +70,7 @@ export class AddLayerCommand extends Command { undo() { // 从图层列表删除该图层 - this.layers.value = this.beforeLayers; + this.layers.value = [...this.beforeLayers]; // 恢复原活动图层 this.activeLayerId.value = this.oldActiveLayerId; @@ -563,7 +563,12 @@ export class RemoveLayerCommand extends Command { allObjects.push(object); } } - + layer.fabricObjects?.forEach((fabric) => { + const { object } = findObjectById(this.canvas, fabric.id); + if (object && !allObjects.includes(object)) { + allObjects.push(object); + } + }); // 递归收集子图层的对象 if (layer.children && Array.isArray(layer.children)) { layer.children.forEach((childLayer) => { diff --git a/src/component/Canvas/CanvasEditor/index.vue b/src/component/Canvas/CanvasEditor/index.vue index 6ab169bb..7551a319 100644 --- a/src/component/Canvas/CanvasEditor/index.vue +++ b/src/component/Canvas/CanvasEditor/index.vue @@ -693,25 +693,26 @@ function removeLayer(layerId) { return; } - if (canvasManager && canvasManager.canvas) { - const layerToRemove = layers.value.find((l) => l.id === layerId); - if (layerToRemove) { - const elementIds = layerToRemove?.fabricObjects?.map((e) => e.id); - elementIds.forEach((elementId) => { - const objectToRemove = canvasManager.canvas - .getObjects() - .find((obj) => obj.id === elementId); - if (objectToRemove) { - canvasManager.canvas.remove(objectToRemove); - } - }); - if (activeLayerId.value === layerId) { - activeElementId.value = null; - } - canvasManager.canvas.renderAll(); - } - } - layerManager.removeLayer(layerId); + layerManager.removeLayer(layerId); +// 此处删除画布上内容导致撤回操作无效(多余) +// if (canvasManager && canvasManager.canvas) { +// const layerToRemove = layers.value.find((l) => l.id === layerId); +// if (layerToRemove) { +// const elementIds = layerToRemove?.fabricObjects?.map((e) => e.id); +// elementIds.forEach((elementId) => { +// const objectToRemove = canvasManager.canvas +// .getObjects() +// .find((obj) => obj.id === elementId); +// if (objectToRemove) { +// canvasManager.canvas.remove(objectToRemove); +// } +// }); +// if (activeLayerId.value === layerId) { +// activeElementId.value = null; +// } +// canvasManager.canvas.renderAll(); +// } +// } } function triggerImageUpload() { diff --git a/src/component/Canvas/CanvasEditor/managers/LayerManager.js b/src/component/Canvas/CanvasEditor/managers/LayerManager.js index 2497c55d..50320aa1 100644 --- a/src/component/Canvas/CanvasEditor/managers/LayerManager.js +++ b/src/component/Canvas/CanvasEditor/managers/LayerManager.js @@ -1819,7 +1819,8 @@ export class LayerManager { } // 检查是否是唯一的普通图层 - const normalLayers = this.layers.value.filter((l) => !l.isBackground); + const normalLayers = this.layers.value.filter((l) => !l.isBackground && !l.isFixed); + console.log("普通图层:", normalLayers) if (normalLayers.length === 1) { console.warn("不能剪切唯一的普通图层"); return null;