From 28ee3f073baeb13209d3421795e1554116e336ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=BF=97=E9=B9=8F?= <2916022834@qq.com> Date: Fri, 17 Oct 2025 14:16:08 +0800 Subject: [PATCH 001/143] =?UTF-8?q?=E7=94=BB=E5=B8=83=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E5=91=A8=E6=92=A4=E5=9B=9E=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CanvasEditor/commands/LayerCommands.js | 8 +++- src/component/Canvas/CanvasEditor/index.vue | 37 ++++++++++--------- 2 files changed, 26 insertions(+), 19 deletions(-) diff --git a/src/component/Canvas/CanvasEditor/commands/LayerCommands.js b/src/component/Canvas/CanvasEditor/commands/LayerCommands.js index 1dffba96..2a9503bd 100644 --- a/src/component/Canvas/CanvasEditor/commands/LayerCommands.js +++ b/src/component/Canvas/CanvasEditor/commands/LayerCommands.js @@ -563,6 +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)) { @@ -609,7 +615,7 @@ export class RemoveLayerCommand extends Command { // this.canvas.renderAll(); // } await this.layerManager?.updateLayersObjectsInteractivity?.(); - // this.canvas.renderAll(); + this.canvas.renderAll(); console.log( `✅ 已移除图层: ${this.removedLayer.name} (ID: ${this.layerId}),包含 ${this.originalObjects.length} 个对象` diff --git a/src/component/Canvas/CanvasEditor/index.vue b/src/component/Canvas/CanvasEditor/index.vue index 6ab169bb..32af587b 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); +// 此处删除画布上内容导致撤回操作无效(多余) +// 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() { From 90b4de16d8e1953d2418d79b99f8f98c4d7f2f8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=BF=97=E9=B9=8F?= <2916022834@qq.com> Date: Fri, 17 Oct 2025 15:18:26 +0800 Subject: [PATCH 002/143] =?UTF-8?q?=E7=94=BB=E5=B8=83=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E5=9B=BE=E5=B1=82=E6=92=A4=E5=9B=9E=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/component/Canvas/CanvasEditor/commands/LayerCommands.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/component/Canvas/CanvasEditor/commands/LayerCommands.js b/src/component/Canvas/CanvasEditor/commands/LayerCommands.js index 2a9503bd..3275365a 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; From 550af61181af051c5a1c58e798ce747f93aba9b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=BF=97=E9=B9=8F?= <2916022834@qq.com> Date: Fri, 17 Oct 2025 17:27:59 +0800 Subject: [PATCH 003/143] =?UTF-8?q?=E7=94=BB=E5=B8=83=E5=89=AA=E5=88=87?= =?UTF-8?q?=E5=9B=BE=E5=B1=82=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/component/Canvas/CanvasEditor/managers/LayerManager.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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; From e1700cf85a3a74b43be80557ce6d2b4e1b6e7425 Mon Sep 17 00:00:00 2001 From: X1627315083 <1627315083@qq.com> Date: Mon, 20 Oct 2025 15:45:13 +0800 Subject: [PATCH 004/143] =?UTF-8?q?=E8=B0=83=E6=95=B4generate-library-uplo?= =?UTF-8?q?ad=E4=BD=8D=E7=BD=AE=E3=80=81=E7=94=9F=E6=88=90=E5=90=8E?= =?UTF-8?q?=E9=9C=80=E8=A6=81like=E6=89=8D=E8=83=BD=E4=BF=9D=E5=AD=98?= =?UTF-8?q?=E7=9A=84=E6=8F=90=E7=A4=BA=E3=80=81detail=E7=9A=84=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Detail/detailLeft/module/currentList.vue | 5 ++++- src/component/Detail/model/modelNav.vue | 13 ++++++++++++- src/component/HomePage/sketchCategory.vue | 16 ++++++++++------ .../home/design/collection/MoodboardUpload.vue | 11 +++++------ .../home/design/collection/PrintboardUpload.vue | 14 ++++---------- .../home/design/collection/SketchboardUpload.vue | 16 ++++------------ src/component/home/design/index.vue | 6 ++++++ src/component/home/index.vue | 3 +++ src/lang/cn.ts | 1 + src/lang/en.ts | 1 + 10 files changed, 50 insertions(+), 36 deletions(-) diff --git a/src/component/Detail/detailLeft/module/currentList.vue b/src/component/Detail/detailLeft/module/currentList.vue index 95143250..09d869cf 100644 --- a/src/component/Detail/detailLeft/module/currentList.vue +++ b/src/component/Detail/detailLeft/module/currentList.vue @@ -5,7 +5,7 @@
- +
@@ -48,6 +48,9 @@ export default defineComponent({ color:computed(()=>store.state.UploadFilesModule.allBoardData.colorBoards), models:computed(()=>store.state.Workspace.probjects.model), }, + sketchCatecoryAllList:computed(()=>{ + return store.state.Workspace.workspaceAllPosition + }), currentDetailType:computed(()=>store.state.DesignDetail.currentDetailType), }) diff --git a/src/component/Detail/model/modelNav.vue b/src/component/Detail/model/modelNav.vue index 355f6b55..5d4e16aa 100644 --- a/src/component/Detail/model/modelNav.vue +++ b/src/component/Detail/model/modelNav.vue @@ -7,7 +7,7 @@ @mousedown.stop="designMousedown(getMousePosition($event,false),item.uniqueId,'disLike')" @touchstart.passive="designMousedown(getMousePosition($event,true),item.uniqueId,'disLike')" @click="selectDetailItem(item,index)"> - + @@ -104,6 +104,17 @@ export default defineComponent({ detailData.designDetail.clothes = detailData.designDetail.clothes.filter((item:any)=>item.id != id) detailData.frontBack_.back = detailData.frontBack_.back.filter((item:any)=>item.id != id) detailData.frontBack_.front = detailData.frontBack_.front.filter((item:any)=>item.id != id) + console.log(detailData.designDetail.clothes) + //判断删除后是否还有服装 + if(detailData.designDetail.clothes.length == 0){ + addSketch() + }else{ + //获取当前最大的priority值 + const maxValue = Math.max(...detailData.designDetail.clothes.map(item => item.priority)); + const maxObj = detailData.designDetail.clothes.find(item => item.priority === maxValue); + store.commit('DesignDetail/setDesignColthes',maxObj.id) + } + emit('deleteItem') } const addSketch = ()=>{ diff --git a/src/component/HomePage/sketchCategory.vue b/src/component/HomePage/sketchCategory.vue index 677fbcd1..6ccde777 100644 --- a/src/component/HomePage/sketchCategory.vue +++ b/src/component/HomePage/sketchCategory.vue @@ -67,6 +67,10 @@ export default defineComponent({ }, generateList:{ type:Array + }, + allCategory:{ + type:Array, + default:[] }, isSetSketchCategory:{ type:Boolean, @@ -117,10 +121,6 @@ export default defineComponent({ file.category = cate.name; if(props.isSetSketchCategory){ setSketchLibrary(props.item) - } - if(props.driver__){ - - driverObj__.moveNext() } // this.store.commit("sketchGenerateFiles", this.fileList); @@ -150,10 +150,14 @@ export default defineComponent({ ).catch((res)=>{ }); } + } + const getCategory = (item)=>{ + } onMounted(()=>{ - if(!props.item.category){ - props.disignTypeList.forEach((item:any) => { + if(!props.item.category || !props.item.categoryValue){ + let arr = props.allCategory || props.catecoryList + arr.forEach((item:any) => { if(item.value == props.item.level2Type){ props.item.category = item.name props.item.categoryValue = item.value diff --git a/src/component/home/design/collection/MoodboardUpload.vue b/src/component/home/design/collection/MoodboardUpload.vue index 93d3ad27..6d0d5e2e 100644 --- a/src/component/home/design/collection/MoodboardUpload.vue +++ b/src/component/home/design/collection/MoodboardUpload.vue @@ -2,12 +2,12 @@
+ +
@@ -1325,6 +1360,21 @@ defineExpose({ border-bottom: 1px solid #e0e0e0; background-color: #ffffff; } + >.dragover-tip{ + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + background-color: rgba(0, 0, 0, 0.5); + display: flex; + align-items: center; + justify-content: center; + color: #fff; + font-size: 1.6rem; + z-index: 9999; + pointer-events: none; + } } .main-content { From 4c951b3a0a6b6dd8f0b50ff508939acec1b4894e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=BF=97=E9=B9=8F?= <2916022834@qq.com> Date: Thu, 13 Nov 2025 11:18:34 +0800 Subject: [PATCH 076/143] =?UTF-8?q?=E7=94=BB=E5=B8=83=E5=8F=96=E6=B6=88?= =?UTF-8?q?=E9=80=89=E4=B8=AD=E6=97=B6=E5=85=B3=E9=97=AD=E9=9D=A2=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Canvas/CanvasEditor/components/SelectMenuPanel.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/component/Canvas/CanvasEditor/components/SelectMenuPanel.vue b/src/component/Canvas/CanvasEditor/components/SelectMenuPanel.vue index 24a4f9a5..b7c24f12 100644 --- a/src/component/Canvas/CanvasEditor/components/SelectMenuPanel.vue +++ b/src/component/Canvas/CanvasEditor/components/SelectMenuPanel.vue @@ -314,7 +314,7 @@ // 鼠标事件 props.canvas.on("selection:created", getActiveObject); props.canvas.on("selection:updated", getActiveObject); - // props.canvas.on("selection:cleared", () => console.log("selection:cleared")); + props.canvas.on("selection:cleared", close); props.canvas.on("object:rotating", objectRotatingChange); } @@ -327,7 +327,7 @@ // 移除鼠标事件 props.canvas.off("selection:created", getActiveObject); props.canvas.off("selection:updated", getActiveObject); - // props.canvas.off("selection:cleared"); + props.canvas.off("selection:cleared", close); props.canvas.off("object:rotating", objectRotatingChange); } From d0e2f9e0664203040bcbb059bf114071e69fa14d Mon Sep 17 00:00:00 2001 From: X1627315083 <1627315083@qq.com> Date: Thu, 13 Nov 2025 11:21:27 +0800 Subject: [PATCH 077/143] =?UTF-8?q?Affiliate=E5=A2=9E=E5=8A=A0=E9=93=BE?= =?UTF-8?q?=E6=8E=A5=E8=AE=BF=E9=97=AE=E6=95=B0=E9=87=8F=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E9=A1=B9=E7=9B=AE=E8=AE=BE=E7=BD=AEcurrent=20project?= =?UTF-8?q?=E4=B8=8D=E4=BC=9A=E6=9B=B4=E6=96=B0=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../affiliate/affiliateAudit/affiliateAudit.vue | 7 +++++++ src/views/HomeView/history.vue | 10 +++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/component/Administrator/affiliate/affiliateAudit/affiliateAudit.vue b/src/component/Administrator/affiliate/affiliateAudit/affiliateAudit.vue index 107d4934..24f1dff7 100644 --- a/src/component/Administrator/affiliate/affiliateAudit/affiliateAudit.vue +++ b/src/component/Administrator/affiliate/affiliateAudit/affiliateAudit.vue @@ -115,6 +115,13 @@ export default defineComponent({ width: 100, dataIndex: "status", key: "status", + },{ + title: 'Visits', + align: "center", + ellipsis: true, + width: 100, + dataIndex: "visits", + key: "visits", },{ title: 'Commission Percent', align: "center", diff --git a/src/views/HomeView/history.vue b/src/views/HomeView/history.vue index a5797d9b..c172b58e 100644 --- a/src/views/HomeView/history.vue +++ b/src/views/HomeView/history.vue @@ -452,7 +452,15 @@ export default defineComponent({ }, handleConfirmEdit({ data }) { // router.push(`/home?history=${data.id}`) - this.getHistoryList() + // if(data.id) + if(data.id === this.store.state.Workspace.probjects.id){ + let cachedRoutes = this.store.state.Workspace.cachedRoutes + for (let i = cachedRoutes.length - 1; i >= 0; i--) { + cachedRoutes.splice(i, 1); + } + this.store.commit('setProjectPath','') + } + // this.getHistoryList() }, retrieveHome(record: any) { // let num = true From 8e17dc9942ba269bc95049189b38968761bb6648 Mon Sep 17 00:00:00 2001 From: zhangyh Date: Thu, 13 Nov 2025 11:38:02 +0800 Subject: [PATCH 078/143] =?UTF-8?q?style:=20promptInput=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../home/tools/poseTransfer/index.vue | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/src/component/home/tools/poseTransfer/index.vue b/src/component/home/tools/poseTransfer/index.vue index daef4f87..2f93be4d 100644 --- a/src/component/home/tools/poseTransfer/index.vue +++ b/src/component/home/tools/poseTransfer/index.vue @@ -65,8 +65,9 @@
-
- +
+
{{ $t('ProductImg.Prompt') }}
+
@@ -338,6 +339,7 @@ export default defineComponent({ data.isGenerate = true // data.remGenerateTime = setTimeout(()=>{ // },10000) + // const promptText = dataDom.promptInput.getFullText() let value = { poseId:data.selectPose, projectId:store.state.Workspace.probjects.id, @@ -785,11 +787,7 @@ export default defineComponent({ > .configuratioBox > .configuratio{ width: 100%; padding-bottom: 1rem; - > .title{ - // font-size: 2.6rem; - } > .content{ - // margin-top: 4rem; > .selectImg,> .poses{ display: flex; flex-direction: column; @@ -799,15 +797,12 @@ export default defineComponent({ margin-top: 2rem; display: flex; flex-wrap: nowrap; - // justify-content: space-between; width: 100%; overflow: hidden; overflow-x: auto; column-gap: 2.4rem; position: relative; > .item{ - // width: calc(100% / 2 - .5rem); - // height: 25rem; width: 12.7rem; height: 17.8rem; cursor: pointer; @@ -816,9 +811,6 @@ export default defineComponent({ justify-content: center; flex-shrink: 0; position: relative; - // &.active{ - // border: 2px solid; - // } :deep(.ant-checkbox-wrapper){ position: absolute; top: 2rem; @@ -934,8 +926,15 @@ export default defineComponent({ font-size: 1.6rem; } } + } + .prompt-input-container{ + margin-top: 4rem; + } + .title{ + font-size: 1.8rem; + color: #000; + margin-bottom: 1.4rem; } - > .poses{ margin-top: 3rem; } From 56c7a222cf5fba929f285f4ce29c93d5d2de9ed7 Mon Sep 17 00:00:00 2001 From: X1627315083 <1627315083@qq.com> Date: Thu, 13 Nov 2025 13:19:03 +0800 Subject: [PATCH 079/143] =?UTF-8?q?=E5=8F=96=E6=B6=88=E8=AE=A2=E9=98=85?= =?UTF-8?q?=E6=96=B0=E5=8A=A0=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/component/Account/frontPage.vue | 2 +- src/store/userHabit/userHabit.ts | 1 - src/store/workspace/workspace.ts | 4 ++++ src/tool/https.js | 1 + src/views/HomeMain.vue | 2 +- src/views/HomeView/history.vue | 6 +----- 6 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/component/Account/frontPage.vue b/src/component/Account/frontPage.vue index c735153a..6f004078 100644 --- a/src/component/Account/frontPage.vue +++ b/src/component/Account/frontPage.vue @@ -6,7 +6,7 @@ diff --git a/src/store/userHabit/userHabit.ts b/src/store/userHabit/userHabit.ts index f6c51186..946d711a 100644 --- a/src/store/userHabit/userHabit.ts +++ b/src/store/userHabit/userHabit.ts @@ -266,7 +266,6 @@ const userHabit : Module = { // data.systemUser = 0 state.userDetail.affiliate = data.affiliate state.userDetail.systemUser = data.systemUser - // state.userDetail.systemUser = 3 // 身份列表1:可以使用aida系统,2:可以使用affiliate页面,3:系统管理员用户 state.userDetail.systemList = [] if(data.systemUser != 0)state.userDetail.systemList.push(1) diff --git a/src/store/workspace/workspace.ts b/src/store/workspace/workspace.ts index e74c9ecf..08e975d2 100644 --- a/src/store/workspace/workspace.ts +++ b/src/store/workspace/workspace.ts @@ -106,6 +106,10 @@ const Workspace: Module = { model: [] //模特 } }, + createProjectPath(state){ + state.projectPath = '' + state.cachedRoutes = [] + }, setProjectPath(state, path) { state.projectPath = path } diff --git a/src/tool/https.js b/src/tool/https.js index c74f825a..3d685414 100644 --- a/src/tool/https.js +++ b/src/tool/https.js @@ -117,6 +117,7 @@ axios.interceptors.response.use((res) =>{ message.warning('Please login and try again~') store.commit('createDetail') store.commit('createProbject') + store.commit('createProjectPath') setTimeout(()=>[ isLoginTime = false ],2000) diff --git a/src/views/HomeMain.vue b/src/views/HomeMain.vue index 1cdd34af..4f25e4e2 100644 --- a/src/views/HomeMain.vue +++ b/src/views/HomeMain.vue @@ -1232,7 +1232,7 @@ export default defineComponent({ this.$router.replace('/') this.store.commit('createDetail') this.store.commit('createProbject') - + this.store.commit('createProjectPath') // WriteCookie("token"); // window.location.reload() }, diff --git a/src/views/HomeView/history.vue b/src/views/HomeView/history.vue index c172b58e..9cecb1af 100644 --- a/src/views/HomeView/history.vue +++ b/src/views/HomeView/history.vue @@ -454,11 +454,7 @@ export default defineComponent({ // router.push(`/home?history=${data.id}`) // if(data.id) if(data.id === this.store.state.Workspace.probjects.id){ - let cachedRoutes = this.store.state.Workspace.cachedRoutes - for (let i = cachedRoutes.length - 1; i >= 0; i--) { - cachedRoutes.splice(i, 1); - } - this.store.commit('setProjectPath','') + this.store.commit('createProjectPath','') } // this.getHistoryList() }, From 1c33d42f99f92cba3b6d168ca27026378a9b7a76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=BF=97=E9=B9=8F?= <2916022834@qq.com> Date: Thu, 13 Nov 2025 14:54:50 +0800 Subject: [PATCH 080/143] =?UTF-8?q?=E7=94=BB=E5=B8=83=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E5=8D=B8=E8=BD=BD=E6=B8=85=E7=90=86=E8=B5=84=E6=BA=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CanvasEditor/components/CropImage.vue | 10 ---------- .../components/SelectMenuPanel.vue | 4 +--- src/component/Canvas/CanvasEditor/index.vue | 18 +++++++++--------- .../CanvasEditor/managers/LayerManager.js | 6 +++--- .../managers/events/KeyboardManager.js | 13 +------------ 5 files changed, 14 insertions(+), 37 deletions(-) diff --git a/src/component/Canvas/CanvasEditor/components/CropImage.vue b/src/component/Canvas/CanvasEditor/components/CropImage.vue index c2849e03..6eb5d7b7 100644 --- a/src/component/Canvas/CanvasEditor/components/CropImage.vue +++ b/src/component/Canvas/CanvasEditor/components/CropImage.vue @@ -277,16 +277,6 @@ clipData.left = x; clipData.img_width = elInfo.width; clipData.img_height = elInfo.height; - - if (!el.value) return; - const elh = el.value.offsetHeight; - const elsh = el.value.scrollHeight; - const elst = el.value.scrollTop; - if (y < elst) { - el.value.scrollTop = y; - } else if (y + clipInfo.height > elst + elh) { - el.value.scrollTop = y + clipInfo.height - elh; - } }; const mouseup = () => { window.removeEventListener("mousemove", mousemove); diff --git a/src/component/Canvas/CanvasEditor/components/SelectMenuPanel.vue b/src/component/Canvas/CanvasEditor/components/SelectMenuPanel.vue index b7c24f12..c2b5755f 100644 --- a/src/component/Canvas/CanvasEditor/components/SelectMenuPanel.vue +++ b/src/component/Canvas/CanvasEditor/components/SelectMenuPanel.vue @@ -279,9 +279,7 @@ layerManager: props.layerManager, canvas: props.canvas, toolManager: props.toolManager, - }).then(res=>{ - console.log("========",res); - }); + }) }); }; diff --git a/src/component/Canvas/CanvasEditor/index.vue b/src/component/Canvas/CanvasEditor/index.vue index bedc9cbb..aebda612 100644 --- a/src/component/Canvas/CanvasEditor/index.vue +++ b/src/component/Canvas/CanvasEditor/index.vue @@ -530,15 +530,15 @@ onBeforeUnmount(() => { // return; // 开发环境下不卸载组件 // } console.log("onBeforeUnmount 组件卸载,清理资源..."); - // canvasManager?.dispose?.(); - // commandManager?.dispose?.(); - // layerManager?.dispose?.(); - // keyboardManager?.dispose?.(); - // toolManager?.dispose?.(); - // liquifyManager?.dispose?.(); - // selectionManager?.dispose?.(); - // redGreenModeManager?.dispose?.(); - // minimapManager?.dispose?.(); + canvasManager?.dispose?.(); + commandManager?.dispose?.(); + layerManager?.dispose?.(); + keyboardManager?.dispose?.(); + toolManager?.dispose?.(); + liquifyManager?.dispose?.(); + selectionManager?.dispose?.(); + redGreenModeManager?.dispose?.(); +// minimapManager?.dispose?.(); canvasManager = null; commandManager = null; layerManager = null; diff --git a/src/component/Canvas/CanvasEditor/managers/LayerManager.js b/src/component/Canvas/CanvasEditor/managers/LayerManager.js index fc67ea28..ee2d6cc0 100644 --- a/src/component/Canvas/CanvasEditor/managers/LayerManager.js +++ b/src/component/Canvas/CanvasEditor/managers/LayerManager.js @@ -2303,9 +2303,9 @@ export class LayerManager { */ dispose() { // 清空画布 - if (this.canvas) { - this.canvas.clear(); - } + // if (this.canvas) { + // this.canvas.clear(); + // } // 清空图层数据 if (this.layers && this.layers.value) { diff --git a/src/component/Canvas/CanvasEditor/managers/events/KeyboardManager.js b/src/component/Canvas/CanvasEditor/managers/events/KeyboardManager.js index d1298dbf..3e76ec9d 100644 --- a/src/component/Canvas/CanvasEditor/managers/events/KeyboardManager.js +++ b/src/component/Canvas/CanvasEditor/managers/events/KeyboardManager.js @@ -728,18 +728,7 @@ export class KeyboardManager { */ dispose() { // 移除事件监听 - this.container.removeEventListener("keydown", this._handleKeyDown); - this.container.removeEventListener("keyup", this._handleKeyUp); - this.container.removeEventListener("paste", this._handlePaste); - - // 如果有触摸事件,也移除它们 - if (this.isTouchDevice) { - this.container.removeEventListener("touchstart", this._handleTouchStart); - this.container.removeEventListener("touchmove", this._handleTouchMove); - this.container.removeEventListener("touchend", this._handleTouchEnd); - this.container.removeEventListener("touchcancel", this._handleTouchEnd); - } - + this.removeEvents(); // 清除引用 this.toolManager = null; this.commandManager = null; From 0478e95f4f66f7d92fad10e2cc17123fb272bc99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=BF=97=E9=B9=8F?= <2916022834@qq.com> Date: Thu, 13 Nov 2025 16:07:32 +0800 Subject: [PATCH 081/143] =?UTF-8?q?=E7=94=BB=E5=B8=83=E6=96=87=E5=AD=97?= =?UTF-8?q?=E5=8F=96=E6=B6=88=E7=BC=96=E8=BE=91=E5=85=B3=E9=97=AD=E6=96=87?= =?UTF-8?q?=E5=AD=97=E9=9D=A2=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CanvasEditor/components/TextEditorPanel.vue | 9 ++++++++- src/component/Canvas/CanvasEditor/index.vue | 14 +++++++------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/src/component/Canvas/CanvasEditor/components/TextEditorPanel.vue b/src/component/Canvas/CanvasEditor/components/TextEditorPanel.vue index 33a0c17c..2c01a627 100644 --- a/src/component/Canvas/CanvasEditor/components/TextEditorPanel.vue +++ b/src/component/Canvas/CanvasEditor/components/TextEditorPanel.vue @@ -620,12 +620,19 @@ export default { // 监听显示文本编辑面板事件 document.addEventListener("showTextEditor", showEditor); document.addEventListener("hideTextEditor", close); - + if(props.canvas) { + // props.canvas.on("text:editing:entered", showEditor); + props.canvas.on("text:editing:exited", close); + } }); onUnmounted(() => { document.removeEventListener("showTextEditor", showEditor); document.removeEventListener("hideTextEditor", close); + if(props.canvas) { + // props.canvas.off("text:editing:entered", showEditor); + props.canvas.off("text:editing:exited", close); + } }); // 返回所有需要在模板中使用的数据和方法 diff --git a/src/component/Canvas/CanvasEditor/index.vue b/src/component/Canvas/CanvasEditor/index.vue index aebda612..69dcdacd 100644 --- a/src/component/Canvas/CanvasEditor/index.vue +++ b/src/component/Canvas/CanvasEditor/index.vue @@ -1209,13 +1209,6 @@ defineExpose({ :activeTool="activeTool" /> - - - + + +
{{ t("Canvas.Scale") }}: {{ currentZoom }}%
-
+
{{ $t("Canvas.color") }}
From 34ee867074aa97c53deadb63e3a27c7b80de2a66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=BF=97=E9=B9=8F?= <2916022834@qq.com> Date: Thu, 13 Nov 2025 17:10:05 +0800 Subject: [PATCH 085/143] =?UTF-8?q?=E7=94=BB=E7=AC=94=E5=9B=BE=E7=89=87?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD=E8=B7=AF=E5=BE=84=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../managers/brushes/brushManager.js | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/component/Canvas/CanvasEditor/managers/brushes/brushManager.js b/src/component/Canvas/CanvasEditor/managers/brushes/brushManager.js index 15ae7463..4fd3df49 100644 --- a/src/component/Canvas/CanvasEditor/managers/brushes/brushManager.js +++ b/src/component/Canvas/CanvasEditor/managers/brushes/brushManager.js @@ -65,7 +65,7 @@ export class BrushManager { description: "基础铅笔工具,适合精细线条绘制", t:this.t, category: this.t('Canvas.BasicBrushes'), - imgUrl:'./image/brush/pencil.jpg', + imgUrl:'/image/brush/pencil.jpg', }); // 注册材质笔刷 @@ -74,7 +74,7 @@ export class BrushManager { description: "使用纹理图片作为笔刷,支持缩放和透明度", t:this.t, category: this.t('Canvas.BasicBrushes'), - imgUrl:'./image/brush/texture.jpg', + imgUrl:'/image/brush/texture.jpg', }); // 注册集成的笔刷类型 @@ -83,63 +83,63 @@ export class BrushManager { description: "使用纹理图片作为笔刷,支持缩放和透明度", t:this.t, category: this.t('Canvas.BasicBrushes'), - imgUrl:'./image/brush/crayon.jpg', + imgUrl:'/image/brush/crayon.jpg', }); brushRegistry.register("fur", FurBrush, { name: this.t("Canvas.Fur"), description: "使用纹理图片作为笔刷,支持缩放和透明度", t:this.t, category: this.t('Canvas.BasicBrushes'), - imgUrl:'./image/brush/fur.jpg', + imgUrl:'/image/brush/fur.jpg', }); brushRegistry.register("ink", InkBrush, { name: this.t("Canvas.Ink"), description: "墨水笔刷,适合书写和绘图", t:this.t, category: this.t('Canvas.BasicBrushes'), - imgUrl:'./image/brush/ink.jpg', + imgUrl:'/image/brush/ink.jpg', }); brushRegistry.register("", LongfurBrush, { name: this.t("Canvas.Longfur"), description: "长毛发笔刷,适合绘制动物毛皮、草或头发", t:this.t, category: this.t('Canvas.BasicBrushes'), - imgUrl:'./image/brush/longFur.jpg', + imgUrl:'/image/brush/longFur.jpg', }); brushRegistry.register("writing", WritingBrush, { name: this.t("Canvas.Writing"), description: "书法笔刷,模拟中国传统书法毛笔效果,具有笔锋和墨色变化", t:this.t, category: this.t('Canvas.BasicBrushes'), - imgUrl:'./image/brush/writing.jpg', + imgUrl:'/image/brush/writing.jpg', }); brushRegistry.register("marker", MarkerBrush, { name: this.t("Canvas.Marker"), description: "马克笔笔刷,适合粗线条和填充", t:this.t, category: this.t('Canvas.BasicBrushes'), - imgUrl:'./image/brush/marker.jpg', + imgUrl:'/image/brush/marker.jpg', }); brushRegistry.register("pen", CustomPenBrush, { name: this.t("Canvas.Pen"), description: "自定义钢笔笔刷,适合书写和绘图", t:this.t, category: this.t('Canvas.BasicBrushes'), - imgUrl:'./image/brush/pen.jpg', + imgUrl:'/image/brush/pen.jpg', }); brushRegistry.register("ribbon", RibbonBrush, { name: this.t("Canvas.Ribbon"), description: "丝带笔刷,适合创建流动的丝带效果", t:this.t, category: this.t('Canvas.BasicBrushes'), - imgUrl:'./image/brush/ribbon.jpg', + imgUrl:'/image/brush/ribbon.jpg', }); brushRegistry.register("shaded", ShadedBrush, { name: this.t("Canvas.Shaded"), description: "阴影笔刷,适合创建渐变和阴影效果", t:this.t, category: this.t('Canvas.BasicBrushes'), - imgUrl:'./image/brush/shaded.jpg', + imgUrl:'/image/brush/shaded.jpg', }); brushRegistry.register("spray", SprayBrush, { @@ -147,7 +147,7 @@ export class BrushManager { description: "模拟喷枪效果,创建散点效果", t:this.t, category: this.t('Canvas.BasicBrushes'), - imgUrl:'./image/brush/spray.jpg', + imgUrl:'/image/brush/spray.jpg', }); // brushRegistry.register("sketchy", SketchyBrush); From 08ef0b8e96b31ffdd7dd547bf20a026fb9d98f39 Mon Sep 17 00:00:00 2001 From: zhangyh Date: Fri, 14 Nov 2025 10:06:44 +0800 Subject: [PATCH 086/143] =?UTF-8?q?feat:=20=E4=BA=A7=E5=93=81=E5=9B=BE?= =?UTF-8?q?=E8=BD=AC=E8=A7=86=E9=A2=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../home/tools/poseTransfer/Tips.vue | 82 + .../home/tools/poseTransfer/index.vue | 2287 +++++++++-------- src/lang/cn.ts | 14 +- src/lang/en.ts | 14 +- src/store/homeStore/homeStore.ts | 14 + 5 files changed, 1377 insertions(+), 1034 deletions(-) create mode 100644 src/component/home/tools/poseTransfer/Tips.vue diff --git a/src/component/home/tools/poseTransfer/Tips.vue b/src/component/home/tools/poseTransfer/Tips.vue new file mode 100644 index 00000000..7f67d123 --- /dev/null +++ b/src/component/home/tools/poseTransfer/Tips.vue @@ -0,0 +1,82 @@ + + + + + diff --git a/src/component/home/tools/poseTransfer/index.vue b/src/component/home/tools/poseTransfer/index.vue index 2f93be4d..981c6879 100644 --- a/src/component/home/tools/poseTransfer/index.vue +++ b/src/component/home/tools/poseTransfer/index.vue @@ -1,1053 +1,1292 @@ + +
+
+
+
{{ $t('ProductImg.Prompt') }}
+ +
+
+
+
{{ $t('poseTransfer.Selectpose') }}
+
+
+
+ +
+
+ +
+
+
+
+ +
+
+
+
+
+
+
+
+ -
- -
-
-
{{ item.label }}
-
-
-
- -
- - -
-
-
- -
-
{{$t('poseTransfer.LikeVideo')}}
-
- -
- -
- -
-
-
-
-
-
{{$t('poseTransfer.InputVideo')}}
-
- -
-
-
-
+
+ +
+ + +
+
+
+ + {{ $t('poseTransfer.InputVideo') }} +
+
+ +
+
+
+ \ No newline at end of file + .upload_file_item { + width: 100%; + height: 100%; + :deep(.ant-upload-picture-card-wrapper) { + width: 100% !important; + height: 100%; + .ant-upload-list-picture-card { + width: 100%; + height: 100%; + .ant-upload-select-picture-card { + width: 100%; + height: 100%; + border: 1px solid #000; + background: #fff; + } + } + } + } + .video-type-container { + margin-bottom: 4rem; + .title { + font-size: 1.8rem; + color: #000; + margin-bottom: 1.4rem; + } + :deep(.ant-select) { + width: 100%; + .ant-select-selector { + border: 2px solid #d0d0d0; + border-radius: 1rem; + } + } + } +} + diff --git a/src/lang/cn.ts b/src/lang/cn.ts index ff4a1a7c..53aea1b5 100644 --- a/src/lang/cn.ts +++ b/src/lang/cn.ts @@ -285,7 +285,7 @@ export default { AssitSubTitle: '您可以复制并使用以下提示词:', CopySuccess: '已复制到剪贴板', CopyFiled: '复制失败', - noPrompt:'请输入提示词' + noPrompt: '请输入提示词' }, poseTransfer: { SelectDesign: '产品图', @@ -308,7 +308,11 @@ export default { UploadWithModel: '创建模特穿着该服装的真实感摄影棚照片。若原有模特存在则保留,否则生成合适模特。采用站立姿势面向镜头。精确保留服装细节——图案、颜色、质地及装饰元素。', // 上传线稿,带模特 UploadWithoutModel: - '专业产品摄影:服装以自然形态展示,无模特。采用影棚灯光。保留精确细节——图案、色彩、质感、装饰元素。' // 上传线稿,不带模特 + '专业产品摄影:服装以自然形态展示,无模特。采用影棚灯光。保留精确细节——图案、色彩、质感、装饰元素。', // 上传线稿,不带模特 + VideoType: '视频类型', + FirstFrame: '首帧', + FirstAndLastFrames: '首帧和尾帧', + FirstFrameAndSkeleton: '首帧和骨架' }, LibraryPage: { library: '收藏', @@ -1225,9 +1229,9 @@ export default { basic: '基础', flipHorizontal: '水平翻转', flipVertical: '垂直翻转', - cropAndAdd: '裁剪并添加', - cropImage: '裁剪图片', - group: '组合', + cropAndAdd: '裁剪并添加', + cropImage: '裁剪图片', + group: '组合', //长毛笔 FurSettings: '长毛笔设置', FurLength: '毛发长度', diff --git a/src/lang/en.ts b/src/lang/en.ts index 6aceb62d..3fc1b348 100644 --- a/src/lang/en.ts +++ b/src/lang/en.ts @@ -295,7 +295,7 @@ export default { AssitSubTitle: 'You can copy following prompt and try:', CopySuccess: 'Copied to clipboard', CopyFiled: 'Failed to copy', - noPrompt:'Please enter prompt' + noPrompt: 'Please enter prompt' }, poseTransfer: { SelectDesign: 'Product image', @@ -318,7 +318,11 @@ export default { UploadWithModel: 'Create realistic studio photo with model wearing this garment. Keep original model if present, or generate appropriate model. Standing pose, facing camera. Preserve exact garment details - patterns, colors, textures, embellishments.', // 上传线稿,带模特 UploadWithoutModel: - 'Professional product photo: garment displayed with natural shape, no model. Studio lighting. Preserve exact details - patterns, colors, textures, embellishments.' // 上传线稿,不带模特 + 'Professional product photo: garment displayed with natural shape, no model. Studio lighting. Preserve exact details - patterns, colors, textures, embellishments.', // 上传线稿,不带模特 + VideoType: 'Video Type', + FirstFrame: 'First frame', + FirstAndLastFrames: 'First and last frames', + FirstFrameAndSkeleton: 'First frame and skeleton', }, LibraryPage: { library: 'Library', @@ -1260,9 +1264,9 @@ export default { basic: 'Basic', flipHorizontal: 'Horizontal Flip', flipVertical: 'Vertical Flip', - cropAndAdd: 'Crop and Add', - cropImage: 'Crop Image', - group: 'Group', + cropAndAdd: 'Crop and Add', + cropImage: 'Crop Image', + group: 'Group', //长毛笔 FurSettings: 'FurSettings', FurLength: 'Fur Length', diff --git a/src/store/homeStore/homeStore.ts b/src/store/homeStore/homeStore.ts index a46cda3c..e855cf3f 100644 --- a/src/store/homeStore/homeStore.ts +++ b/src/store/homeStore/homeStore.ts @@ -41,6 +41,7 @@ const HomeStoreModule : Module = { likedList:[], }, uploadElement:[], + lastFrameList:[], poseTransfer:{ list:[], likedList:[], @@ -70,6 +71,19 @@ const HomeStoreModule : Module = { mutations:{ setshowSketchList(state,data){ state.showSketchList = data + }, + setPoseTransferLastFrameList(state,data){ + console.log('设置尾帧store-------------') + // 支持两种方式:set 替换整个列表;add/删除与 uploadElement 一致 + if(data.str === 'set'){ + state.poseTransfer.lastFrameList = data.list || [] + return + } + if(data.str === 'add'){ + state.poseTransfer.lastFrameList.unshift(...(data.list || [])) + }else{ + state.poseTransfer.lastFrameList.splice(data.index,1) + } }, setDesignCollectionList(state,data){ state.designCollectionList = data From 79f0ecb2b4295077811f637ce69451d05112c4a5 Mon Sep 17 00:00:00 2001 From: X1627315083 <1627315083@qq.com> Date: Fri, 14 Nov 2025 10:07:21 +0800 Subject: [PATCH 087/143] =?UTF-8?q?detail=20=E5=8F=AF=E4=BB=A5=E6=8A=8A?= =?UTF-8?q?=E7=B3=BB=E7=BB=9Fsketch=E6=B7=BB=E5=8A=A0=E5=88=B0=E4=B8=AA?= =?UTF-8?q?=E4=BA=BAlibarry?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/component/Detail/DesignDetail.vue | 8 ++- src/component/Detail/detailLeft/index.vue | 7 ++- src/component/Detail/detailLeft/sketch.vue | 11 ++-- src/component/Detail/model/index.vue | 6 +-- src/component/Detail/model/modelNav.vue | 53 +++++++++++++++---- .../design/collection/ColorboardUpload.vue | 2 +- src/tool/https.js | 1 + 7 files changed, 66 insertions(+), 22 deletions(-) diff --git a/src/component/Detail/DesignDetail.vue b/src/component/Detail/DesignDetail.vue index f6ab8d38..d54016b6 100644 --- a/src/component/Detail/DesignDetail.vue +++ b/src/component/Detail/DesignDetail.vue @@ -50,7 +50,7 @@
- +
@@ -67,6 +67,7 @@ @revocation="revocation" @oppositeRevocation="oppositeRevocation" @modelOnLoad="modelOnLoad" + @sketchSysToLibrary="sketchSysToLibrary" >
@@ -136,6 +137,7 @@ export default defineComponent({ model:null, canvasBox, detailRight, + detailLeft:null as any, }) const userDetail = computed(()=>{ return store.state.UserHabit.userDetail @@ -491,6 +493,9 @@ export default defineComponent({ store.commit('DesignDetail/setDesignDetail',detailData.designDetail) },1000) } + const sketchSysToLibrary = ()=>{//系统sketch添加到library更新library + detailDom.detailLeft.sketchSysToLibrary() + } onMounted(()=>{ window.addEventListener('resize', handleResize); }) @@ -515,6 +520,7 @@ export default defineComponent({ detailEdit, canvasReload, modelOnLoad, + sketchSysToLibrary, } }, diff --git a/src/component/Detail/detailLeft/index.vue b/src/component/Detail/detailLeft/index.vue index 4484d85a..37c64ef5 100644 --- a/src/component/Detail/detailLeft/index.vue +++ b/src/component/Detail/detailLeft/index.vue @@ -1,6 +1,6 @@ diff --git a/src/component/home/tools/poseTransfer/index.vue b/src/component/home/tools/poseTransfer/index.vue index 981c6879..f25d230e 100644 --- a/src/component/home/tools/poseTransfer/index.vue +++ b/src/component/home/tools/poseTransfer/index.vue @@ -23,7 +23,11 @@
{{ $t('poseTransfer.SelectDesign') }}
- +
+
+
+ +
+ + +
+
+
+
- -
@@ -159,13 +162,13 @@
{{ $t('poseTransfer.Selectpose') }}
-
- +
+
+
+ + diff --git a/src/component/home/tools/poseTransfer/index.vue b/src/component/home/tools/poseTransfer/index.vue index f6d4ffd1..025f11a4 100644 --- a/src/component/home/tools/poseTransfer/index.vue +++ b/src/component/home/tools/poseTransfer/index.vue @@ -31,7 +31,7 @@
-
+
-
+
+
- \ No newline at end of file + diff --git a/src/component/home/tools/poseTransfer/index.vue b/src/component/home/tools/poseTransfer/index.vue index 661cf049..2103eb69 100644 --- a/src/component/home/tools/poseTransfer/index.vue +++ b/src/component/home/tools/poseTransfer/index.vue @@ -1505,7 +1505,7 @@ export default defineComponent({ } > .head { color: #000; - font-weight: 600; + font-weight: 500; display: flex; align-items: center; column-gap: 1rem; @@ -1526,6 +1526,7 @@ export default defineComponent({ font-size: 1.8rem; color: #000; margin-bottom: 1.4rem; + font-weight: 500; } > .poses { margin-top: 3rem; @@ -1627,6 +1628,7 @@ export default defineComponent({ } .video-type-container { margin-bottom: 4rem; + font-weight: 500; .title { font-size: 1.8rem; color: #000; diff --git a/src/component/home/tools/poseTransfer/promptInput.vue b/src/component/home/tools/poseTransfer/promptInput.vue index 0ccb0910..e8e188c9 100644 --- a/src/component/home/tools/poseTransfer/promptInput.vue +++ b/src/component/home/tools/poseTransfer/promptInput.vue @@ -1,507 +1,518 @@