diff --git a/package-lock.json b/package-lock.json index 0e42a09e..c319c9a6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -34,6 +34,7 @@ "vue-draggable-plus": "^0.6.0", "vue-i18n": "^9.6.1", "vue-router": "^4.0.3", + "vue3-moveable": "^0.28.0", "vuedraggable": "^4.1.0", "vuex": "^4.0.0", "x-sender": "^1.1.6" @@ -232,6 +233,15 @@ "node": ">=6.9.0" } }, + "node_modules/@cfcs/core": { + "version": "0.0.6", + "resolved": "https://registry.npmmirror.com/@cfcs/core/-/core-0.0.6.tgz", + "integrity": "sha512-FxfJMwoLB8MEMConeXUCqtMGqxdtePQxRBOiGip9ULcYYam3WfCgoY6xdnMaSkYvRvmosp5iuG+TiPofm65+Pw==", + "license": "MIT", + "dependencies": { + "@egjs/component": "^3.0.2" + } + }, "node_modules/@ctrl/tinycolor": { "version": "3.6.1", "resolved": "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz", @@ -240,6 +250,39 @@ "node": ">=10" } }, + "node_modules/@daybrush/utils": { + "version": "1.13.0", + "resolved": "https://registry.npmmirror.com/@daybrush/utils/-/utils-1.13.0.tgz", + "integrity": "sha512-ALK12C6SQNNHw1enXK+UO8bdyQ+jaWNQ1Af7Z3FNxeAwjYhQT7do+TRE4RASAJ3ObaS2+TJ7TXR3oz2Gzbw0PQ==", + "license": "MIT" + }, + "node_modules/@egjs/agent": { + "version": "2.4.4", + "resolved": "https://registry.npmmirror.com/@egjs/agent/-/agent-2.4.4.tgz", + "integrity": "sha512-cvAPSlUILhBBOakn2krdPnOGv5hAZq92f1YHxYcfu0p7uarix2C6Ia3AVizpS1SGRZGiEkIS5E+IVTLg1I2Iog==", + "license": "MIT" + }, + "node_modules/@egjs/children-differ": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/@egjs/children-differ/-/children-differ-1.0.1.tgz", + "integrity": "sha512-DRvyqMf+CPCOzAopQKHtW+X8iN6Hy6SFol+/7zCUiE5y4P/OB8JP8FtU4NxtZwtafvSL4faD5KoQYPj3JHzPFQ==", + "license": "MIT", + "dependencies": { + "@egjs/list-differ": "^1.0.0" + } + }, + "node_modules/@egjs/component": { + "version": "3.0.5", + "resolved": "https://registry.npmmirror.com/@egjs/component/-/component-3.0.5.tgz", + "integrity": "sha512-cLcGizTrrUNA2EYE3MBmEDt2tQv1joVP1Q3oDisZ5nw0MZDx2kcgEXM+/kZpfa/PAkFvYVhRUZwytIQWoN3V/w==", + "license": "MIT" + }, + "node_modules/@egjs/list-differ": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/@egjs/list-differ/-/list-differ-1.0.1.tgz", + "integrity": "sha512-OTFTDQcWS+1ZREOdCWuk5hCBgYO4OsD30lXcOCyVOAjXMhgL5rBRDnt/otb6Nz8CzU0L/igdcaQBDLWc4t9gvg==", + "license": "MIT" + }, "node_modules/@element-plus/icons-vue": { "version": "2.3.1", "resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz", @@ -1224,6 +1267,34 @@ "win32" ] }, + "node_modules/@scena/dragscroll": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@scena/dragscroll/-/dragscroll-1.4.0.tgz", + "integrity": "sha512-3O8daaZD9VXA9CP3dra6xcgt/qrm0mg0xJCwiX6druCteQ9FFsXffkF8PrqxY4Z4VJ58fFKEa0RlKqbsi/XnRA==", + "license": "MIT", + "dependencies": { + "@daybrush/utils": "^1.6.0", + "@scena/event-emitter": "^1.0.2" + } + }, + "node_modules/@scena/event-emitter": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/@scena/event-emitter/-/event-emitter-1.0.5.tgz", + "integrity": "sha512-AzY4OTb0+7ynefmWFQ6hxDdk0CySAq/D4efljfhtRHCOP7MBF9zUfhKG3TJiroVjASqVgkRJFdenS8ArZo6Olg==", + "license": "MIT", + "dependencies": { + "@daybrush/utils": "^1.1.1" + } + }, + "node_modules/@scena/matrix": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/@scena/matrix/-/matrix-1.1.1.tgz", + "integrity": "sha512-JVKBhN0tm2Srl+Yt+Ywqu0oLgLcdemDQlD1OxmN9jaCTwaFPZ7tY8n6dhVgMEaR9qcR7r+kAlMXnSfNyYdE+Vg==", + "license": "MIT", + "dependencies": { + "@daybrush/utils": "^1.4.0" + } + }, "node_modules/@simonwep/pickr": { "version": "1.8.2", "resolved": "https://registry.npmmirror.com/@simonwep/pickr/-/pickr-1.8.2.tgz", @@ -2904,6 +2975,52 @@ "node": ">= 0.10" } }, + "node_modules/croact": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/croact/-/croact-1.0.4.tgz", + "integrity": "sha512-9GhvyzTY/IVUrMQ2iz/mzgZ8+NcjczmIo/t4FkC1CU0CEcau6v6VsEih4jkTa4ZmRgYTF0qXEZLObCzdDFplpw==", + "license": "MIT", + "dependencies": { + "@daybrush/utils": "^1.13.0", + "@egjs/list-differ": "^1.0.0" + } + }, + "node_modules/croact-css-styled": { + "version": "1.1.9", + "resolved": "https://registry.npmmirror.com/croact-css-styled/-/croact-css-styled-1.1.9.tgz", + "integrity": "sha512-G7yvRiVJ3Eoj0ov2h2xR4312hpOzATay2dGS9clK8yJQothjH1sBXIyvOeRP5wBKD9mPcKcoUXPCPsl0tQog4w==", + "license": "MIT", + "dependencies": { + "@daybrush/utils": "^1.13.0", + "css-styled": "~1.0.8", + "framework-utils": "^1.1.0" + } + }, + "node_modules/croact-moveable": { + "version": "0.9.0", + "resolved": "https://registry.npmmirror.com/croact-moveable/-/croact-moveable-0.9.0.tgz", + "integrity": "sha512-fc3bieV6CdqqZFtzsSLi9KmvUMFW3oakUfhPCls1BxKjOfUfn8rktteGED2341A/Qghy8tI3Hm6SdocIc68IKg==", + "license": "MIT", + "dependencies": { + "@daybrush/utils": "^1.13.0", + "@egjs/agent": "^2.2.1", + "@egjs/children-differ": "^1.0.1", + "@egjs/list-differ": "^1.0.0", + "@scena/dragscroll": "^1.4.0", + "@scena/event-emitter": "^1.0.5", + "@scena/matrix": "^1.1.1", + "croact-css-styled": "^1.1.9", + "css-to-mat": "^1.1.1", + "framework-utils": "^1.1.0", + "gesto": "^1.19.3", + "overlap-area": "^1.1.0", + "react-css-styled": "^1.1.9", + "react-moveable": "~0.56.0" + }, + "peerDependencies": { + "croact": "^1.0.4" + } + }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -3014,6 +3131,25 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/css-styled": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/css-styled/-/css-styled-1.0.8.tgz", + "integrity": "sha512-tCpP7kLRI8dI95rCh3Syl7I+v7PP+2JYOzWkl0bUEoSbJM+u8ITbutjlQVf0NC2/g4ULROJPi16sfwDIO8/84g==", + "license": "MIT", + "dependencies": { + "@daybrush/utils": "^1.13.0" + } + }, + "node_modules/css-to-mat": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/css-to-mat/-/css-to-mat-1.1.1.tgz", + "integrity": "sha512-kvpxFYZb27jRd2vium35G7q5XZ2WJ9rWjDUMNT36M3Hc41qCrLXFM5iEKMGXcrPsKfXEN+8l/riB4QzwwwiEyQ==", + "license": "MIT", + "dependencies": { + "@daybrush/utils": "^1.13.0", + "@scena/matrix": "^1.0.0" + } + }, "node_modules/css-tree": { "version": "1.1.3", "resolved": "https://registry.npmmirror.com/css-tree/-/css-tree-1.1.3.tgz", @@ -4354,6 +4490,12 @@ "node": ">=0.10.0" } }, + "node_modules/framework-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/framework-utils/-/framework-utils-1.1.0.tgz", + "integrity": "sha512-KAfqli5PwpFJ8o3psRNs8svpMGyCSAe8nmGcjQ0zZBWN2H6dZDnq+ABp3N3hdUmFeMrLtjOCTXD4yplUJIWceg==", + "license": "MIT" + }, "node_modules/fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz", @@ -4485,6 +4627,16 @@ "node": ">=10" } }, + "node_modules/gesto": { + "version": "1.19.4", + "resolved": "https://registry.npmmirror.com/gesto/-/gesto-1.19.4.tgz", + "integrity": "sha512-hfr/0dWwh0Bnbb88s3QVJd1ZRJeOWcgHPPwmiH6NnafDYvhTsxg+SLYu+q/oPNh9JS3V+nlr6fNs8kvPAtcRDQ==", + "license": "MIT", + "dependencies": { + "@daybrush/utils": "^1.13.0", + "@scena/event-emitter": "^1.0.2" + } + }, "node_modules/get-intrinsic": { "version": "1.3.0", "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz", @@ -5695,6 +5847,24 @@ "setimmediate": "^1.0.5" } }, + "node_modules/keycode": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/keycode/-/keycode-2.2.1.tgz", + "integrity": "sha512-Rdgz9Hl9Iv4QKi8b0OlCRQEzp4AgVxyCtz5S/+VIHezDmrDhkp2N2TqBWOLz0/gbeREXOOiI9/4b8BY9uw2vFg==", + "license": "MIT" + }, + "node_modules/keycon": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/keycon/-/keycon-1.4.0.tgz", + "integrity": "sha512-p1NAIxiRMH3jYfTeXRs2uWbVJ1WpEjpi8ktzUyBJsX7/wn2qu2VRXktneBLNtKNxJmlUYxRi9gOJt1DuthXR7A==", + "license": "MIT", + "dependencies": { + "@cfcs/core": "^0.0.6", + "@daybrush/utils": "^1.7.1", + "@scena/event-emitter": "^1.0.2", + "keycode": "^2.2.0" + } + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmmirror.com/keyv/-/keyv-4.5.4.tgz", @@ -6212,6 +6382,19 @@ "pathe": "^2.0.1" } }, + "node_modules/moveable": { + "version": "0.53.0", + "resolved": "https://registry.npmmirror.com/moveable/-/moveable-0.53.0.tgz", + "integrity": "sha512-71jS9zIoQzMhnNvduhg4tUEdm23+fO/40FN7muVMbZvVwbTku2MIxxLhnU4qFvxI4oVxn75l79SbtgjuA+s7Pw==", + "license": "MIT", + "dependencies": { + "@daybrush/utils": "^1.13.0", + "@scena/event-emitter": "^1.0.5", + "croact": "^1.0.4", + "croact-moveable": "~0.9.0", + "react-moveable": "~0.56.0" + } + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", @@ -6650,6 +6833,15 @@ "node": ">= 0.8.0" } }, + "node_modules/overlap-area": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/overlap-area/-/overlap-area-1.1.0.tgz", + "integrity": "sha512-3dlJgJCaVeXH0/eZjYVJvQiLVVrPO4U1ZGqlATtx6QGO3b5eNM6+JgUKa7oStBTdYuGTk7gVoABCW6Tp+dhRdw==", + "license": "MIT", + "dependencies": { + "@daybrush/utils": "^1.7.1" + } + }, "node_modules/own-keys": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/own-keys/-/own-keys-1.0.1.tgz", @@ -7037,6 +7229,46 @@ "safe-buffer": "^5.1.0" } }, + "node_modules/react-css-styled": { + "version": "1.1.9", + "resolved": "https://registry.npmmirror.com/react-css-styled/-/react-css-styled-1.1.9.tgz", + "integrity": "sha512-M7fJZ3IWFaIHcZEkoFOnkjdiUFmwd8d+gTh2bpqMOcnxy/0Gsykw4dsL4QBiKsxcGow6tETUa4NAUcmJF+/nfw==", + "license": "MIT", + "dependencies": { + "css-styled": "~1.0.8", + "framework-utils": "^1.1.0" + } + }, + "node_modules/react-moveable": { + "version": "0.56.0", + "resolved": "https://registry.npmmirror.com/react-moveable/-/react-moveable-0.56.0.tgz", + "integrity": "sha512-FmJNmIOsOA36mdxbrc/huiE4wuXSRlmon/o+/OrfNhSiYYYL0AV5oObtPluEhb2Yr/7EfYWBHTxF5aWAvjg1SA==", + "license": "MIT", + "dependencies": { + "@daybrush/utils": "^1.13.0", + "@egjs/agent": "^2.2.1", + "@egjs/children-differ": "^1.0.1", + "@egjs/list-differ": "^1.0.0", + "@scena/dragscroll": "^1.4.0", + "@scena/event-emitter": "^1.0.5", + "@scena/matrix": "^1.1.1", + "css-to-mat": "^1.1.1", + "framework-utils": "^1.1.0", + "gesto": "^1.19.3", + "overlap-area": "^1.1.0", + "react-css-styled": "^1.1.9", + "react-selecto": "^1.25.0" + } + }, + "node_modules/react-selecto": { + "version": "1.26.3", + "resolved": "https://registry.npmmirror.com/react-selecto/-/react-selecto-1.26.3.tgz", + "integrity": "sha512-Ubik7kWSnZyQEBNro+1k38hZaI1tJarE+5aD/qsqCOA1uUBSjgKVBy3EWRzGIbdmVex7DcxznFZLec/6KZNvwQ==", + "license": "MIT", + "dependencies": { + "selecto": "~1.26.3" + } + }, "node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz", @@ -7507,6 +7739,24 @@ "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==", "dev": true }, + "node_modules/selecto": { + "version": "1.26.3", + "resolved": "https://registry.npmmirror.com/selecto/-/selecto-1.26.3.tgz", + "integrity": "sha512-gZHgqMy5uyB6/2YDjv3Qqaf7bd2hTDOpPdxXlrez4R3/L0GiEWDCFaUfrflomgqdb3SxHF2IXY0Jw0EamZi7cw==", + "license": "MIT", + "dependencies": { + "@daybrush/utils": "^1.13.0", + "@egjs/children-differ": "^1.0.1", + "@scena/dragscroll": "^1.4.0", + "@scena/event-emitter": "^1.0.5", + "css-styled": "^1.0.8", + "css-to-mat": "^1.1.1", + "framework-utils": "^1.1.0", + "gesto": "^1.19.4", + "keycon": "^1.2.0", + "overlap-area": "^1.1.0" + } + }, "node_modules/semver": { "version": "7.7.2", "resolved": "https://registry.npmmirror.com/semver/-/semver-7.7.2.tgz", @@ -9765,6 +10015,16 @@ "vue": "^3.0.0" } }, + "node_modules/vue3-moveable": { + "version": "0.28.0", + "resolved": "https://registry.npmmirror.com/vue3-moveable/-/vue3-moveable-0.28.0.tgz", + "integrity": "sha512-vplQO0XkxVEtXMDh2/lZE+c5kMycGXAfYFMvbwFKi8UVYzVk8MTgVHr4fxO9Z+4i4Rb+U/IEIgkhHRMAbx8FJg==", + "license": "MIT", + "dependencies": { + "framework-utils": "^1.1.0", + "moveable": "~0.53.0" + } + }, "node_modules/vuedraggable": { "version": "4.1.0", "resolved": "https://registry.npmmirror.com/vuedraggable/-/vuedraggable-4.1.0.tgz", diff --git a/package.json b/package.json index 962ae9e0..d83dfe55 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,7 @@ "vue-draggable-plus": "^0.6.0", "vue-i18n": "^9.6.1", "vue-router": "^4.0.3", + "vue3-moveable": "^0.28.0", "vuedraggable": "^4.1.0", "vuex": "^4.0.0", "x-sender": "^1.1.6" diff --git a/src/assets/icons/CBrush2.svg b/src/assets/icons/CBrush2.svg new file mode 100644 index 00000000..d9e38702 --- /dev/null +++ b/src/assets/icons/CBrush2.svg @@ -0,0 +1,17 @@ + + + + + + + + + diff --git a/src/assets/icons/CEraser2.svg b/src/assets/icons/CEraser2.svg new file mode 100644 index 00000000..ea475fa7 --- /dev/null +++ b/src/assets/icons/CEraser2.svg @@ -0,0 +1,17 @@ + + + + + + + + diff --git a/src/assets/icons/CMarquee.svg b/src/assets/icons/CMarquee.svg new file mode 100644 index 00000000..517b2810 --- /dev/null +++ b/src/assets/icons/CMarquee.svg @@ -0,0 +1,20 @@ + + + + + + + + diff --git a/src/assets/icons/CPart.svg b/src/assets/icons/CPart.svg new file mode 100644 index 00000000..931b5358 --- /dev/null +++ b/src/assets/icons/CPart.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/icons/CPoint.svg b/src/assets/icons/CPoint.svg new file mode 100644 index 00000000..5ae67091 --- /dev/null +++ b/src/assets/icons/CPoint.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + diff --git a/src/assets/icons/overallMore.svg b/src/assets/icons/overallMore.svg new file mode 100644 index 00000000..0bc27b89 --- /dev/null +++ b/src/assets/icons/overallMore.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/assets/images/canvas/add.png b/src/assets/images/canvas/add.png new file mode 100644 index 00000000..3fb5a603 Binary files /dev/null and b/src/assets/images/canvas/add.png differ diff --git a/src/assets/images/canvas/remove.png b/src/assets/images/canvas/remove.png new file mode 100644 index 00000000..9fd798cc Binary files /dev/null and b/src/assets/images/canvas/remove.png differ diff --git a/src/assets/images/canvas/shubiao-l.png b/src/assets/images/canvas/shubiao-l.png new file mode 100644 index 00000000..76155843 Binary files /dev/null and b/src/assets/images/canvas/shubiao-l.png differ diff --git a/src/assets/images/canvas/shubiao-r.png b/src/assets/images/canvas/shubiao-r.png new file mode 100644 index 00000000..df70c79d Binary files /dev/null and b/src/assets/images/canvas/shubiao-r.png differ diff --git a/src/assets/images/icon/xyz.png b/src/assets/images/icon/xyz.png new file mode 100644 index 00000000..a09a06d8 Binary files /dev/null and b/src/assets/images/icon/xyz.png differ diff --git a/src/component/Canvas/CanvasEditor/commands/FillRepeatCommand.js b/src/component/Canvas/CanvasEditor/commands/FillRepeatCommand.js index d223957e..b8e0baee 100644 --- a/src/component/Canvas/CanvasEditor/commands/FillRepeatCommand.js +++ b/src/component/Canvas/CanvasEditor/commands/FillRepeatCommand.js @@ -7,6 +7,7 @@ import { insertObjectAtZIndex, removeCanvasObjectByObject, createPatternTransform, + imageAddGapToCanvas, } from "../utils/helper"; import { restoreFabricObject } from "../utils/objectHelper"; @@ -308,16 +309,8 @@ export class FillRepeatGapChangeCommand extends Command { await image.decode(); object.fill_.width = image.width; object.fill_.height = image.height; - // 创建透明 Canvas - const tcanvas = document.createElement('canvas'); - tcanvas.width = image.width + object.fill_.gapX; - tcanvas.height = image.height + object.fill_.gapY; - const ctx = tcanvas.getContext('2d'); - ctx.clearRect(0, 0, tcanvas.width, tcanvas.height); - ctx.drawImage(image, 0, 0); - const fill = object.get("fill"); - fill.source = tcanvas; + fill.source = imageAddGapToCanvas(image, object.fill_.gapX, object.fill_.gapY); object.set("fill", new fabric.Pattern(fill)); this.canvas.renderAll(); return true; diff --git a/src/component/Canvas/CanvasEditor/commands/LayerCommands.js b/src/component/Canvas/CanvasEditor/commands/LayerCommands.js index 54bee584..fa01dac5 100644 --- a/src/component/Canvas/CanvasEditor/commands/LayerCommands.js +++ b/src/component/Canvas/CanvasEditor/commands/LayerCommands.js @@ -872,13 +872,13 @@ export class ToggleChildLayerVisibilityCommand extends Command { // this.oldVisibility = this.childLayer ? this.childLayer.visible : null; } - async execute() { + async execute(visible) { if (!this.childLayer) { throw new Error("找不到要切换可见性的子图层"); } // 切换可见性 - this.childLayer.visible = !this.childLayer.visible; + this.childLayer.visible = typeof visible === "boolean" ? visible : !this.childLayer.visible; // 更新画布上图层对象的可见性 if (this.canvas) { diff --git a/src/component/Canvas/CanvasEditor/components/LayersPanel/LayersList.vue b/src/component/Canvas/CanvasEditor/components/LayersPanel/LayersList.vue index e2d574e7..42433748 100644 --- a/src/component/Canvas/CanvasEditor/components/LayersPanel/LayersList.vue +++ b/src/component/Canvas/CanvasEditor/components/LayersPanel/LayersList.vue @@ -287,7 +287,7 @@ const canDeleteComputed = computed(() => { :is-child="isChild" :is-active="layer.id === activeLayerId" :is-selected="isLayerSelected(layer.id)" - :is-multi-select-mode="isMultiSelectMode && !layer.specialType" + :is-multi-select-mode="isMultiSelectMode && !(layer.isPrintTrims || layer.isPrintTrimsGroup)" :is-editing="editingLayerId === layer.id" :editing-name="editingLayerName" :can-delete=" @@ -296,7 +296,7 @@ const canDeleteComputed = computed(() => { :expanded-group-ids="expandedGroupIds" @click="(...args) => forwardEvent('layer-click', ...args)" @double-click="(...args) => forwardEvent('layer-double-click', ...args)" - @context-menu="(...args) => !layer.specialType && forwardEvent('context-menu', ...args)" + @context-menu="(...args) => !(layer.isPrintTrims || layer.isPrintTrimsGroup) && forwardEvent('context-menu', ...args)" @checkbox-change="(...args) => forwardEvent('checkbox-change', ...args)" @toggle-visibility="(...args) => forwardEvent('toggle-visibility', ...args)" @toggle-lock="(...args) => forwardEvent('toggle-lock', ...args)" @@ -337,7 +337,7 @@ const canDeleteComputed = computed(() => { :expanded-group-ids="expandedGroupIds" :isChild="true" :parentLayerId="layer.id" - :group-name="layer.specialType || groupName" + :group-name="groupName" @layer-click="(...args) => forwardEvent('layer-click', ...args)" @layer-double-click="(...args) => forwardEvent('layer-double-click', ...args)" @context-menu="(...args) => forwardEvent('context-menu', ...args)" diff --git a/src/component/Canvas/CanvasEditor/components/LayersPanel/LayersPanel.vue b/src/component/Canvas/CanvasEditor/components/LayersPanel/LayersPanel.vue index 7f8cb216..1b72e5ac 100644 --- a/src/component/Canvas/CanvasEditor/components/LayersPanel/LayersPanel.vue +++ b/src/component/Canvas/CanvasEditor/components/LayersPanel/LayersPanel.vue @@ -1242,7 +1242,7 @@ async function handleCrossLevelMove(moveData) { try { const layer = findLayerRecursively(layers.value, layerId).layer; const toLayer = findLayerRecursively(layers.value, toParentId).layer; - if(layer?.specialType || toLayer?.specialType) { + if(layer?.isPrintTrims || layer?.isPrintTrimsGroup || toLayer?.isPrintTrims || toLayer?.isPrintTrimsGroup) { console.warn("当前图层不可移动到外部"); return; } diff --git a/src/component/Canvas/CanvasEditor/components/PartSelectorPanel.vue b/src/component/Canvas/CanvasEditor/components/PartSelectorPanel.vue new file mode 100644 index 00000000..c5ec0856 --- /dev/null +++ b/src/component/Canvas/CanvasEditor/components/PartSelectorPanel.vue @@ -0,0 +1,479 @@ + + + + + diff --git a/src/component/Canvas/CanvasEditor/components/SelectMenuPanel/RepeatSetting.vue b/src/component/Canvas/CanvasEditor/components/SelectMenuPanel/RepeatSetting.vue index dfd96563..e8ad87ca 100644 --- a/src/component/Canvas/CanvasEditor/components/SelectMenuPanel/RepeatSetting.vue +++ b/src/component/Canvas/CanvasEditor/components/SelectMenuPanel/RepeatSetting.vue @@ -1,14 +1,15 @@