From b158341d6e787676f28c421d886b3c51678dac90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=BF=97=E9=B9=8F?= <2916022834@qq.com> Date: Mon, 26 Jan 2026 16:47:03 +0800 Subject: [PATCH 1/8] =?UTF-8?q?=E5=8D=B0=E8=8A=B1=E7=BB=84=E7=A6=81?= =?UTF-8?q?=E6=AD=A2=E5=A4=9A=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CanvasEditor/components/LayersPanel/LayersPanel.vue | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/component/Canvas/CanvasEditor/components/LayersPanel/LayersPanel.vue b/src/component/Canvas/CanvasEditor/components/LayersPanel/LayersPanel.vue index b6971bb3..1ed62871 100644 --- a/src/component/Canvas/CanvasEditor/components/LayersPanel/LayersPanel.vue +++ b/src/component/Canvas/CanvasEditor/components/LayersPanel/LayersPanel.vue @@ -584,15 +584,16 @@ function handleLayerClick(layer, event) { // 如果不是多选模式,才可激活图层 // 1.如果是组,则设置组下的第一个子图层为活动图层 // 2.否则直接设置活动图层 - if (isGroupLayerType(layer) && layer.children && layer.children.length > 0) { + if (isGroupLayerType(layer) && layer.children && layer.children.length > 0 && !layer.isPrintTrimsGroup) { // 如果是组图层,设置第一个子图层为活动图层 layerManager?.setAllActiveGroupLayerCanvasObject?.(layer); setActiveLayer(layer.children[0].id, { parentId: layer.id }); } else { + let id = layer.isPrintTrimsGroup ? layer.children?.[0]?.id || layer.id : layer.id; // 选中画布中的图层对象 - layerManager?.selectLayerObjects(layer.id); + layerManager?.selectLayerObjects(id); // 否则直接设置当前图层为活动图层 - setActiveLayer(layer.id); + setActiveLayer(id); layerManager?.updateLayersObjectsInteractivity(); } } From fb1d09d98efd80ee9bc54d328692d348ed487e45 Mon Sep 17 00:00:00 2001 From: X1627315083 <1627315083@qq.com> Date: Tue, 27 Jan 2026 10:12:13 +0800 Subject: [PATCH 2/8] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B3=A8=E5=86=8C?= =?UTF-8?q?=E8=BE=93=E5=85=A5=E9=AA=8C=E8=AF=81=E7=A0=81=E6=9C=80=E5=B0=8F?= =?UTF-8?q?=E9=AB=98=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/component/HomePage/bindEmail.vue | 1 + src/component/LoginPage/login/enterprise.vue | 2 +- src/component/LoginPage/login/personal.vue | 1 + src/component/LoginPage/login/school.vue | 2 +- src/component/mainPage/signUp/registerModel.vue | 2 ++ 5 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/component/HomePage/bindEmail.vue b/src/component/HomePage/bindEmail.vue index d4b18e4d..dfe73a96 100644 --- a/src/component/HomePage/bindEmail.vue +++ b/src/component/HomePage/bindEmail.vue @@ -595,6 +595,7 @@ export default defineComponent({ .login_form_content { margin-top: 4rem; position: relative; + min-height: 34rem; &[state="2"]{ height: 30rem; >*{ diff --git a/src/component/LoginPage/login/enterprise.vue b/src/component/LoginPage/login/enterprise.vue index c2265558..dadf84ce 100644 --- a/src/component/LoginPage/login/enterprise.vue +++ b/src/component/LoginPage/login/enterprise.vue @@ -790,7 +790,7 @@ export default defineComponent({ .login_form_content { margin-top: 4rem; position: relative; - + min-height: 34rem; &[state="2"] { > * { opacity: 0; diff --git a/src/component/LoginPage/login/personal.vue b/src/component/LoginPage/login/personal.vue index a597ba09..2712e61d 100644 --- a/src/component/LoginPage/login/personal.vue +++ b/src/component/LoginPage/login/personal.vue @@ -799,6 +799,7 @@ export default defineComponent({ .login_form_content { position: relative; + min-height: 34rem; &[state="2"] { > * { opacity: 0; diff --git a/src/component/LoginPage/login/school.vue b/src/component/LoginPage/login/school.vue index 6c49f25c..93e8c38f 100644 --- a/src/component/LoginPage/login/school.vue +++ b/src/component/LoginPage/login/school.vue @@ -826,7 +826,7 @@ export default defineComponent({ .login_form_content { margin-top: 4rem; position: relative; - + min-height: 34rem; &[state="2"] { > * { opacity: 0; diff --git a/src/component/mainPage/signUp/registerModel.vue b/src/component/mainPage/signUp/registerModel.vue index 9b3d52ed..fd499749 100644 --- a/src/component/mainPage/signUp/registerModel.vue +++ b/src/component/mainPage/signUp/registerModel.vue @@ -916,9 +916,11 @@ export default defineComponent({ .login_form_content { margin-top: 4rem; position: relative; + min-height: 34rem; @media (max-width: 768px) { margin-top: 2.4rem; height: 20rem; + min-height: auto; } &[state="2"] { > * { From 03a9e2f52c91f7d89112ceb240001d8326364213 Mon Sep 17 00:00:00 2001 From: X1627315083 <1627315083@qq.com> Date: Tue, 27 Jan 2026 10:15:20 +0800 Subject: [PATCH 3/8] fix --- src/component/mainPage/signUp/registerModel.vue | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/component/mainPage/signUp/registerModel.vue b/src/component/mainPage/signUp/registerModel.vue index fd499749..557afb9e 100644 --- a/src/component/mainPage/signUp/registerModel.vue +++ b/src/component/mainPage/signUp/registerModel.vue @@ -919,8 +919,10 @@ export default defineComponent({ min-height: 34rem; @media (max-width: 768px) { margin-top: 2.4rem; - height: 20rem; min-height: auto; + &[state="2"] { + height: 20rem; + } } &[state="2"] { > * { From 4dfa9433fd56af9d7decbf99fbd61e6ce3e64ab5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=BF=97=E9=B9=8F?= <2916022834@qq.com> Date: Tue, 27 Jan 2026 11:01:33 +0800 Subject: [PATCH 4/8] =?UTF-8?q?=E7=94=BB=E5=B8=83=20=E9=83=A8=E4=BB=B6?= =?UTF-8?q?=E9=80=89=E5=8F=96=E3=80=81=E5=8D=B0=E8=8A=B1=E7=A6=81=E7=94=A8?= =?UTF-8?q?=E5=A4=9A=E9=80=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../FillGroupLayerBackgroundCommand.js | 5 +- .../commands/LassoCutoutCommand.js | 12 +- .../CanvasEditor/commands/PartCommands.js | 56 ++++ .../components/PartSelectorPanel.vue | 76 +---- .../components/SelectMenuPanel/index.vue | 13 +- src/component/Canvas/CanvasEditor/index.vue | 8 +- .../CanvasEditor/managers/CanvasManager.js | 6 +- .../CanvasEditor/managers/PartManager.js | 316 ++++++++++++------ .../CanvasEditor/managers/ToolManager.js | 4 +- .../Canvas/CanvasEditor/utils/helper.js | 1 + src/component/Canvas/canvasExample.vue | 11 +- src/component/Canvas/test.vue | 2 +- 12 files changed, 328 insertions(+), 182 deletions(-) create mode 100644 src/component/Canvas/CanvasEditor/commands/PartCommands.js diff --git a/src/component/Canvas/CanvasEditor/commands/FillGroupLayerBackgroundCommand.js b/src/component/Canvas/CanvasEditor/commands/FillGroupLayerBackgroundCommand.js index edd061ac..26f90e2c 100644 --- a/src/component/Canvas/CanvasEditor/commands/FillGroupLayerBackgroundCommand.js +++ b/src/component/Canvas/CanvasEditor/commands/FillGroupLayerBackgroundCommand.js @@ -106,7 +106,6 @@ export class FillGroupLayerBackgroundCommand extends Command { }); } } - // 判断fabricObjects是否是组对象 const firstObj = layer.fabricObjects?.[0] || null; // 如果没有找到第一个对象,则直接添加到当前画布 @@ -173,8 +172,8 @@ export class FillGroupLayerBackgroundCommand extends Command { } const canvasObj = findObjectById(this.canvas, firstObj?.id)?.object; if ( - (canvasObj && canvasObj.type === "group") || - canvasObj._objects?.length > 0 + canvasObj && (canvasObj.type === "group" || + canvasObj._objects?.length > 0) ) { this.newFill.set({ left: 0, diff --git a/src/component/Canvas/CanvasEditor/commands/LassoCutoutCommand.js b/src/component/Canvas/CanvasEditor/commands/LassoCutoutCommand.js index a3ad1eaf..b69f2cdc 100644 --- a/src/component/Canvas/CanvasEditor/commands/LassoCutoutCommand.js +++ b/src/component/Canvas/CanvasEditor/commands/LassoCutoutCommand.js @@ -147,11 +147,11 @@ export class LassoCutoutCommand extends CompositeCommand { } // 确定源图层 - const sourceLayer = this.layerManager.getActiveLayer(); - if (!sourceLayer) { - console.error("无法执行套索抠图:源图层无效"); - return false; - } + // const sourceLayer = this.layerManager.getActiveLayer(); + // if (!sourceLayer) { + // console.error("无法执行套索抠图:源图层无效"); + // return false; + // } // 获取源图层的所有对象(包括子图层) // const sourceObjects = this._getLayerObjects(sourceLayer); @@ -225,7 +225,7 @@ export class LassoCutoutCommand extends CompositeCommand { const layers = this.layerManager.layers.value; var topLayerIndex = 0; - layers.forEach((layer, index) => { + if(this.originalLayer)layers.forEach((layer, index) => { if (layer.id === this.originalLayer.id) { topLayerIndex = index; }else if (layer.children.length > 0) { diff --git a/src/component/Canvas/CanvasEditor/commands/PartCommands.js b/src/component/Canvas/CanvasEditor/commands/PartCommands.js new file mode 100644 index 00000000..c8e1178c --- /dev/null +++ b/src/component/Canvas/CanvasEditor/commands/PartCommands.js @@ -0,0 +1,56 @@ +import { Command } from "./Command.js"; + +/** + * 部件绘制命令 + */ +export class PartDrawCommand extends Command { + constructor(options) { + super({ + name: "部件绘制命令", + saveState: false, + }); + + this.canvas = options.canvas; + this.partManager = options.partManager; + this.partCanvas = options.partCanvas; + this.oldPartCanvas = this.partManager.partCanvas; + } + execute() { + this.partManager.drawPartCanvas(this.partCanvas); + return true; + } + undo() { + this.partManager.drawPartCanvas(this.oldPartCanvas); + return true; + } +} +/** + * 部件点选绘制命令 + */ +export class PartPointDrawCommand extends Command { + constructor(options) { + super({ + name: "部件点选绘制命令", + saveState: false, + }); + + this.canvas = options.canvas; + this.partManager = options.partManager; + this.partCanvas = options.partCanvas; + this.pointList = options.pointList; + this.oldPartCanvas = this.partManager.partCanvas; + this.oldPointList = [...this.partManager.pointList]; + } + async execute() { + const list = [...this.pointList]; + const canvas = this.partCanvas; + const res = await this.partManager.pointDrawPartCanvas(list, canvas); + return res; + } + async undo() { + const list = [...this.oldPointList]; + const canvas = this.oldPartCanvas; + const res = await this.partManager.pointDrawPartCanvas(list, canvas); + return res; + } +} diff --git a/src/component/Canvas/CanvasEditor/components/PartSelectorPanel.vue b/src/component/Canvas/CanvasEditor/components/PartSelectorPanel.vue index 658d647f..1bf5d790 100644 --- a/src/component/Canvas/CanvasEditor/components/PartSelectorPanel.vue +++ b/src/component/Canvas/CanvasEditor/components/PartSelectorPanel.vue @@ -20,13 +20,13 @@ - Left Click: Add + {{ t("Canvas.LeftClickAdd") }}
- Right Click: Remove + {{ t("Canvas.RightClickRemove") }}
@@ -57,15 +57,15 @@ $t("Canvas.creation") }} -
+
- 清空当前点位 + {{ $t("Canvas.TheClearlySelectedContent") }}
@@ -76,23 +76,9 @@