From ef1c1c349d375ae368c7ad125462ad22e2015ea3 Mon Sep 17 00:00:00 2001 From: X1627315083 <1627315083@qq.com> Date: Wed, 21 Jan 2026 16:27:59 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=BB=E5=B8=83=E5=9B=BE=E7=89=87=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E9=80=92=E5=BD=92=E8=AE=BE=E7=BD=AEminio=E5=9C=B0?= =?UTF-8?q?=E5=9D=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CanvasEditor/managers/CanvasManager.js | 17 ++++++++++++++- src/component/Detail/canvas/index.vue | 19 ++++++++++++++--- src/component/home/design/tools.vue | 19 ++++++++++++++--- .../home/tools/deReconstruction/index.vue | 21 ++++++++++++++----- src/component/toolsPage/index.vue | 19 ++++++++++++++--- 5 files changed, 80 insertions(+), 15 deletions(-) diff --git a/src/component/Canvas/CanvasEditor/managers/CanvasManager.js b/src/component/Canvas/CanvasEditor/managers/CanvasManager.js index f17c8d75..256f2e2f 100644 --- a/src/component/Canvas/CanvasEditor/managers/CanvasManager.js +++ b/src/component/Canvas/CanvasEditor/managers/CanvasManager.js @@ -993,7 +993,21 @@ export class CanvasManager { throw new Error("获取画布JSON失败"); } } - +/** 修复JSON数据中的ID丢失问题 */ +FixJsonIdLoss(json){ + const layers = json?.layers || []; + const objects = json?.canvas?.objects || []; + layers.forEach((layer) => { + if(!layer.fabricObjects?.length && !layer.fabricObject){ + const obj = objects?.find((o) => o.layerId === layer.id); + if(!obj) return; + layer.fabricObjects = [{ + id: obj.id, + type: obj.type, + }] + } + }) + } loadJSON(json, calllBack) { console.log("加载画布JSON数据:", json); @@ -1006,6 +1020,7 @@ export class CanvasManager { // 解析JSON字符串 try { const parsedJson = JSON.parse(json); + this.FixJsonIdLoss(parsedJson); this.canvasWidth.value = parsedJson.canvasWidth || this.width; this.canvasHeight.value = parsedJson.canvasHeight || this.height; this.canvasColor.value = parsedJson.canvasColor || this.backgroundColor; diff --git a/src/component/Detail/canvas/index.vue b/src/component/Detail/canvas/index.vue index 4b14e789..bc6ecf33 100644 --- a/src/component/Detail/canvas/index.vue +++ b/src/component/Detail/canvas/index.vue @@ -265,9 +265,22 @@ export default defineComponent({ let canvasJSON = detailDom?.editCanvas?.getJSON() let canvasData = JSON.parse(canvasJSON) if(!canvasData)return resolve() - canvasData.canvas.objects.forEach((objectsItem:any) => { - if(objectsItem.type == 'image')objectsItem.minioUrl = getMinioUrl(objectsItem.src) - }); + function deepProcessObjects(data:any, callback:any) { + if (!Array.isArray(data)) return data; + return data.map(item => { + callback(item) + const processedItem = {...item}; + if (processedItem.objects && + Array.isArray(processedItem.objects) && + processedItem.objects.length > 0) { + processedItem.objects = deepProcessObjects(processedItem.objects, callback); + } + return processedItem; + }); + } + canvasData = deepProcessObjects(canvasData.canvas.objects,(item:any)=>{ + if(item.type == 'image')item.minioUrl = getMinioUrl(item.src) + }) let blob = new Blob([JSON.stringify(canvasData)], { type: "application/json" }); let formData = new FormData(); formData.append("file", blob, "data.json"); diff --git a/src/component/home/design/tools.vue b/src/component/home/design/tools.vue index 7c77be77..ea741e7f 100644 --- a/src/component/home/design/tools.vue +++ b/src/component/home/design/tools.vue @@ -335,9 +335,22 @@ export default defineComponent({ let canvasData = JSON.parse(canvasJSON) if(!canvasData)return - canvasData.canvas.objects.forEach((objectsItem:any) => { - if(objectsItem.type == 'image')objectsItem.minioUrl = getMinioUrl(objectsItem.src) - }); + function deepProcessObjects(data:any, callback:any) { + if (!Array.isArray(data)) return data; + return data.map(item => { + callback(item) + const processedItem = {...item}; + if (processedItem.objects && + Array.isArray(processedItem.objects) && + processedItem.objects.length > 0) { + processedItem.objects = deepProcessObjects(processedItem.objects, callback); + } + return processedItem; + }); + } + canvasData = deepProcessObjects(canvasData.canvas.objects,(item:any)=>{ + if(item.type == 'image')item.minioUrl = getMinioUrl(item.src) + }) let blob = new Blob([JSON.stringify(canvasData)], { type: "application/json" }); let formData = new FormData(); formData.append("file", blob, "data.json"); diff --git a/src/component/home/tools/deReconstruction/index.vue b/src/component/home/tools/deReconstruction/index.vue index e6d7c772..0d2c1cd6 100644 --- a/src/component/home/tools/deReconstruction/index.vue +++ b/src/component/home/tools/deReconstruction/index.vue @@ -206,11 +206,22 @@ export default defineComponent({ if(!canvasJSON)return if(!store.state.Workspace.probjects?.id)return let canvasData = JSON.parse(canvasJSON) - console.log(canvasData) - canvasData.canvas.objects.forEach((objectsItem:any) => { - if(objectsItem.type == 'image')objectsItem.minioUrl = getMinioUrl(objectsItem.src) - - }); + function deepProcessObjects(data:any, callback:any) { + if (!Array.isArray(data)) return data; + return data.map(item => { + callback(item) + const processedItem = {...item}; + if (processedItem.objects && + Array.isArray(processedItem.objects) && + processedItem.objects.length > 0) { + processedItem.objects = deepProcessObjects(processedItem.objects, callback); + } + return processedItem; + }); + } + canvasData = deepProcessObjects(canvasData.canvas.objects,(item:any)=>{ + if(item.type == 'image')item.minioUrl = getMinioUrl(item.src) + }) let blob = new Blob([JSON.stringify(canvasData)], { type: "application/json" }); let formData = new FormData(); formData.append("file", blob, "data.json"); diff --git a/src/component/toolsPage/index.vue b/src/component/toolsPage/index.vue index 8b3e72ed..a4ffa083 100644 --- a/src/component/toolsPage/index.vue +++ b/src/component/toolsPage/index.vue @@ -165,9 +165,22 @@ export default defineComponent({ time = setTimeout(()=>{ let canvasData = JSON.parse(canvasJSON) if(!canvasData)return - canvasData.canvas.objects.forEach((objectsItem:any) => { - if(objectsItem.type == 'image')objectsItem.minioUrl = getMinioUrl(objectsItem.src) - }); + function deepProcessObjects(data:any, callback:any) { + if (!Array.isArray(data)) return data; + return data.map(item => { + callback(item) + const processedItem = {...item}; + if (processedItem.objects && + Array.isArray(processedItem.objects) && + processedItem.objects.length > 0) { + processedItem.objects = deepProcessObjects(processedItem.objects, callback); + } + return processedItem; + }); + } + canvasData = deepProcessObjects(canvasData.canvas.objects,(item:any)=>{ + if(item.type == 'image')item.minioUrl = getMinioUrl(item.src) + }) let blob = new Blob([JSON.stringify(canvasData)], { type: "application/json" }); let formData = new FormData(); formData.append("file", blob, "data.json");