From e09c01cb7d828e242ab4e7e5391af84c109fd004 Mon Sep 17 00:00:00 2001 From: X1627315083 <1627315083@qq.com> Date: Tue, 30 Dec 2025 16:07:15 +0800 Subject: [PATCH 001/142] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=BF=AB=E9=80=9F?= =?UTF-8?q?=E7=82=B9=E5=87=BBlike=E4=BC=9Alike=E5=A4=9A=E4=B8=AAbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/component/home/tools/poseTransfer/index.vue | 9 ++++++++- src/component/home/tools/toProduct/index.vue | 6 +++++- src/views/HomeView/library.vue | 9 +++++++++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/component/home/tools/poseTransfer/index.vue b/src/component/home/tools/poseTransfer/index.vue index 6034702c..3aaa6ee6 100644 --- a/src/component/home/tools/poseTransfer/index.vue +++ b/src/component/home/tools/poseTransfer/index.vue @@ -634,7 +634,10 @@ export default defineComponent({ let index = data.noLikeList.findIndex( (obj: any) => obj.taskId === element.taskId ) - data.noLikeList[index] = element + data.noLikeList[index] = { + ...element, + parentId: data.selectImg.parentId + } list = '' clearInterval(data.generateTime) data.isGenerate = false @@ -814,6 +817,7 @@ export default defineComponent({ } let likeFile = (item: any, str: any, index: any) => { let url + console.log(item) let value = {} console.log(props.isDesignPage) if (str == 'like') { @@ -834,6 +838,7 @@ export default defineComponent({ emit('unLike', item) } } + store.commit('set_loading', true) Https.axiosPost(Https.httpUrls.poselikeOrDisike, {}, { params: value }) .then(rv => { if (str == 'like') { @@ -890,8 +895,10 @@ export default defineComponent({ } store.commit('setPoseTransfer', addValue) } + store.commit('set_loading', false) }) .catch(res => { + store.commit('set_loading', false) console.error('likeFile error:', res) }) } diff --git a/src/component/home/tools/toProduct/index.vue b/src/component/home/tools/toProduct/index.vue index abe42d74..28a29458 100644 --- a/src/component/home/tools/toProduct/index.vue +++ b/src/component/home/tools/toProduct/index.vue @@ -697,6 +697,7 @@ export default defineComponent({ emit('unLike', item) } } + store.commit('set_loading', true) Https.axiosPost(url, data) .then(rv => { if (str == 'like') { @@ -728,8 +729,11 @@ export default defineComponent({ store.commit('setRelightList', value) } } + store.commit('set_loading', false) }) - .catch(res => {}) + .catch(res => { + store.commit('set_loading', false) + }) } let remPrductimgTime: any = null let prductimgTime: any = null diff --git a/src/views/HomeView/library.vue b/src/views/HomeView/library.vue index 2e4eefcd..38ebf24e 100644 --- a/src/views/HomeView/library.vue +++ b/src/views/HomeView/library.vue @@ -1706,6 +1706,12 @@ export default defineComponent({ if(this.selectGenerateList[0].base64){ base64 = this.selectGenerateList[0].imgUrl } + }else{ + if (this.selectGenerateList?.[0]?.imgUrl) { + } else { + message.info(this.t('Generate.jsContent5')) + return + } } let sloganText = '' @@ -2329,6 +2335,9 @@ export default defineComponent({ flex-direction: column; align-items: center; position: relative; + .loading{ + position: absolute; + } &.myBrandItem{ width: calc(100% / 5 - 1rem); margin: 1rem; From bb53b6e4862a9547f1d932b6bfe6d24ec6f99f5e Mon Sep 17 00:00:00 2001 From: X1627315083 <1627315083@qq.com> Date: Wed, 31 Dec 2025 11:11:40 +0800 Subject: [PATCH 002/142] =?UTF-8?q?=E5=AF=B9=E5=8D=B0=E8=8A=B1=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E9=A9=AC=E8=B5=9B=E5=85=8B=E8=83=8C=E6=99=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/component/HomePage/Generate.vue | 8 +++++++- src/views/HomeView/library.vue | 16 +++++++++++----- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/component/HomePage/Generate.vue b/src/component/HomePage/Generate.vue index f89105fa..f0b7c5fa 100644 --- a/src/component/HomePage/Generate.vue +++ b/src/component/HomePage/Generate.vue @@ -286,7 +286,8 @@ @click="generageAdd(item)" :class="[ item.status != 'Success' ? 'hideEvents' : '', - item?.checked ? 'active' : '' + item?.checked ? 'active' : '', + (type_.type2 == 'Printboard' && item?.imgUrl)? 'maskBg' : '' ]" > @@ -1359,6 +1360,10 @@ export default defineComponent({ width: calc(25% - 2rem); aspect-ratio: 1 / 1; position: relative; + &.maskBg{ + background-image: url("data:image/svg+xml,%3Csvg width='40' height='40' viewBox='0 0 40 40' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='%23666' fill-opacity='0.4'%3E%3Crect x='20' width='20' height='20'/%3E%3Crect y='20' width='20' height='20'/%3E%3C/g%3E%3C/svg%3E"); + background-size: 2rem 2rem; /* 调整图案密度 */ + } &.active { opacity: 0.5; // border: 2px solid; @@ -1387,6 +1392,7 @@ export default defineComponent({ width: 100%; height: 100%; object-fit: contain; + } &:hover .delete_like_file_block { // display: block; diff --git a/src/views/HomeView/library.vue b/src/views/HomeView/library.vue index 38ebf24e..ae57cb0c 100644 --- a/src/views/HomeView/library.vue +++ b/src/views/HomeView/library.vue @@ -466,7 +466,7 @@
-
+
@@ -1707,10 +1707,12 @@ export default defineComponent({ base64 = this.selectGenerateList[0].imgUrl } }else{ - if (this.selectGenerateList?.[0]?.imgUrl) { - } else { - message.info(this.t('Generate.jsContent5')) - return + if (!this.captionGeneration) { + if (this.selectGenerateList?.[0]?.imgUrl) { + } else { + message.info(this.t('Generate.jsContent5')) + return + } } } @@ -2392,6 +2394,10 @@ export default defineComponent({ position: relative; cursor: pointer; background: #fff; + &.maskBg{ + background-image: url("data:image/svg+xml,%3Csvg width='40' height='40' viewBox='0 0 40 40' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='%23666' fill-opacity='0.4'%3E%3Crect x='20' width='20' height='20'/%3E%3Crect y='20' width='20' height='20'/%3E%3C/g%3E%3C/svg%3E"); + background-size: 2rem 2rem; /* 调整图案密度 */ + } &.select_item_img{ // border-color: #000; opacity: 0.5; From f8e4ab8cdbfd4716f473dda72037d39fac93a127 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, 2 Jan 2026 11:24:11 +0800 Subject: [PATCH 003/142] =?UTF-8?q?=E7=94=BB=E5=B8=83=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E7=9A=84=E6=96=B0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/iconfont2/demo_index.html | 75 +- src/assets/iconfont2/iconfont.css | 18 +- src/assets/iconfont2/iconfont.js | 2 +- src/assets/iconfont2/iconfont.json | 21 + src/assets/iconfont2/iconfont.ttf | Bin 9068 -> 10460 bytes src/assets/iconfont2/iconfont.woff | Bin 5680 -> 6260 bytes src/assets/iconfont2/iconfont.woff2 | Bin 4752 -> 5268 bytes .../FillGroupLayerBackgroundCommand.js | 6 +- .../commands/FillLayerBackgroundCommand.js | 2 +- .../commands/FillRepeatCommand.js | 301 ++++++ .../CanvasEditor/commands/LayerCommands.js | 138 ++- .../CanvasEditor/commands/ObjectCommands.js | 50 + .../commands/ObjectLayerCommands.js | 2 +- .../commands/RasterizeLayerCommand.js | 20 +- .../CanvasEditor/commands/StateCommands.js | 7 +- .../UpdateGroupMaskPositionCommand.js | 2 +- .../CanvasEditor/components/CropImage.vue | 7 +- .../components/LayersPanel/LayerItem.vue | 48 +- .../components/LayersPanel/LayersPanel.vue | 11 +- .../components/LayersPanel/layersPanel.less | 8 + .../CanvasEditor/components/LiquifyPanel.vue | 3 +- .../components/PalletPanel/index.vue | 199 ++++ .../components/PalletPanel/pallet.vue | 666 +++++++++++++ .../components/SelectMenuPanel.vue | 744 --------------- .../SelectMenuPanel/RepeatSetting.vue | 133 +++ .../components/SelectMenuPanel/data.js | 47 + .../components/SelectMenuPanel/index.vue | 899 ++++++++++++++++++ .../CanvasEditor/components/ToolsSidebar.vue | 6 +- .../components/css/layersPanel.css | 7 + .../components/tools/AngleTool.vue | 121 +++ .../components/tools/MySelect.vue | 66 ++ .../components/tools/OffsetTool.vue | 190 ++++ .../CanvasEditor/components/tools/Slider.vue | 160 ++++ src/component/Canvas/CanvasEditor/index.vue | 92 +- .../CanvasEditor/managers/CanvasManager.js | 476 +++++++++- .../CanvasEditor/managers/ExportManager.js | 71 +- .../CanvasEditor/managers/LayerManager.js | 63 +- .../CanvasEditor/managers/ThumbnailManager.js | 11 +- .../managers/animation/AnimationManager.js | 8 +- .../managers/command/CommandManager.js | 3 + .../managers/events/CanvasEventManager.js | 1 - .../managers/events/KeyboardManager.js | 15 +- .../managers/liquify/LiquifyCPUManager.js | 189 ++-- .../managers/liquify/LiquifyWebGLManager.js | 2 +- .../Canvas/CanvasEditor/utils/LayerSort.js | 3 + .../Canvas/CanvasEditor/utils/event.js | 37 + .../Canvas/CanvasEditor/utils/helper.js | 225 ++++- .../Canvas/CanvasEditor/utils/helperLine.js | 14 +- .../Canvas/CanvasEditor/utils/layerHelper.js | 15 + .../Canvas/CanvasEditor/utils/layerUtils.js | 4 + .../Canvas/CanvasEditor/utils/objectHelper.js | 131 ++- .../CanvasEditor/utils/selectionToImage.js | 6 +- .../Canvas/ExistsImageList/ToolButton.vue | 3 +- src/component/Canvas/RedGreenModeExample.vue | 2 +- src/component/Canvas/canvasExample.vue | 182 ++-- src/component/Detail/canvas/index.vue | 14 +- .../Detail/detailLeft/colorBox/pallet.vue | 14 +- src/lang/cn.ts | 37 +- src/lang/en.ts | 37 +- 59 files changed, 4401 insertions(+), 1213 deletions(-) create mode 100644 src/component/Canvas/CanvasEditor/commands/FillRepeatCommand.js create mode 100644 src/component/Canvas/CanvasEditor/commands/ObjectCommands.js create mode 100644 src/component/Canvas/CanvasEditor/components/PalletPanel/index.vue create mode 100644 src/component/Canvas/CanvasEditor/components/PalletPanel/pallet.vue delete mode 100644 src/component/Canvas/CanvasEditor/components/SelectMenuPanel.vue create mode 100644 src/component/Canvas/CanvasEditor/components/SelectMenuPanel/RepeatSetting.vue create mode 100644 src/component/Canvas/CanvasEditor/components/SelectMenuPanel/data.js create mode 100644 src/component/Canvas/CanvasEditor/components/SelectMenuPanel/index.vue create mode 100644 src/component/Canvas/CanvasEditor/components/tools/AngleTool.vue create mode 100644 src/component/Canvas/CanvasEditor/components/tools/MySelect.vue create mode 100644 src/component/Canvas/CanvasEditor/components/tools/OffsetTool.vue create mode 100644 src/component/Canvas/CanvasEditor/components/tools/Slider.vue create mode 100644 src/component/Canvas/CanvasEditor/utils/event.js diff --git a/src/assets/iconfont2/demo_index.html b/src/assets/iconfont2/demo_index.html index 86fd4fdc..8f030666 100644 --- a/src/assets/iconfont2/demo_index.html +++ b/src/assets/iconfont2/demo_index.html @@ -54,6 +54,24 @@
    +
  • + +
    混合模式
    +
    &#xe7a4;
    +
  • + +
  • + +
    更多
    +
    &#xe60f;
    +
  • + +
  • + +
    平铺
    +
    &#xe8d7;
    +
  • +
  • 裁剪
    @@ -276,9 +294,9 @@
    @font-face {
       font-family: 'iconfont';
    -  src: url('iconfont.woff2?t=1762934152017') format('woff2'),
    -       url('iconfont.woff?t=1762934152017') format('woff'),
    -       url('iconfont.ttf?t=1762934152017') format('truetype');
    +  src: url('iconfont.woff2?t=1766460927921') format('woff2'),
    +       url('iconfont.woff?t=1766460927921') format('woff'),
    +       url('iconfont.ttf?t=1766460927921') format('truetype');
     }
     

    第二步:定义使用 iconfont 的样式

    @@ -304,6 +322,33 @@
      +
    • + +
      + 混合模式 +
      +
      .icon-hunhemoshi +
      +
    • + +
    • + +
      + 更多 +
      +
      .icon-gengduo +
      +
    • + +
    • + +
      + 平铺 +
      +
      .icon-repeat +
      +
    • +
    • @@ -637,6 +682,30 @@
        +
      • + +
        混合模式
        +
        #icon-hunhemoshi
        +
      • + +
      • + +
        更多
        +
        #icon-gengduo
        +
      • + +
      • + +
        平铺
        +
        #icon-repeat
        +
      • +
      • +
        @@ -1298,9 +1298,11 @@ defineExpose({
        - -
      + + + +
      - - + - - -
      - 🎨 -
      添加画布图片
      -
      - -
      - -
      红绿图模式
      -
      -
      - -
      普通模式
      -
      -
      - -
      更换底图
      -
      -
      - -
      导出JSON
      -
      -
      - -
      复制JSON
      -
      -
      - -
      查询图层
      -
      @@ -424,15 +460,17 @@ body { .tool-tooltip { display: none; + pointer-events: none; position: absolute; - left: 100%; - top: 50%; - transform: translateY(-50%); - background-color: rgba(0, 0, 0, 0.7); + writing-mode: vertical-rl; /* 竖直排列 */ + text-orientation: upright; /* 保持文字正常显示 */// left: 100%; + left: 50%; + top: -0.8rem; + transform: translate(-50%, -100%); + background-color: rgba(0, 0, 0, 0.9); color: white; - padding: 0.4rem 0.8rem; + padding: 0.8rem 0.4rem; border-radius: 0.4rem; - margin-left: 0.8rem; white-space: nowrap; font-size: 1.2rem; z-index: 10; @@ -441,12 +479,12 @@ body { .tool-tooltip:before { content: ""; position: absolute; - top: 50%; - right: 100%; - margin-top: -0.5rem; + left: 50%; + bottom: 0; + transform: translate(-50%, 100%); border-width: 0.5rem; border-style: solid; - border-color: transparent rgba(0, 0, 0, 0.7) transparent transparent; + border-color: rgba(0, 0, 0, 0.9) transparent transparent transparent; } /* 深色模式适配 */ diff --git a/src/component/Detail/canvas/index.vue b/src/component/Detail/canvas/index.vue index a44e31ad..ce1ec6cb 100644 --- a/src/component/Detail/canvas/index.vue +++ b/src/component/Detail/canvas/index.vue @@ -5,14 +5,17 @@
      +
      store.state.Workspace.projectPath !== route.fullPath), + otherData:computed(()=>({ + canvasId: store.state.DesignDetail.selectDetail.canvasId, + color: store.state.DesignDetail.selectDetail.color, + printObject: store.state.DesignDetail.selectDetail.printObject, + trims: store.state.DesignDetail.selectDetail.trims, + })), }) watch(()=>detailData.selectDetail,(newValue,oldValue)=>{ detailData.imgDomIndex = detailData.frontBack.front.findIndex((item:any)=>item.id == newValue.id) @@ -117,7 +126,6 @@ export default defineComponent({ provide('canvasType',detailData.canvasType) const editFront = (str:any)=>{//编辑前后片 - let canvasJSON = '' as any if(detailData.currentView === 'canvasEditor'){ sessionStorage.setItem('sketchEdit',detailDom.editCanvas.getJSON()) @@ -309,7 +317,7 @@ export default defineComponent({ sessionStorage.removeItem('frontBackEdit'); sessionStorage.removeItem('sketchEdit'); detailData.canvasLoad = false - privewDetail() + // privewDetail() }) onMounted(()=>{ nextTick(async ()=>{ diff --git a/src/component/Detail/detailLeft/colorBox/pallet.vue b/src/component/Detail/detailLeft/colorBox/pallet.vue index 5447fe60..8e7c2f25 100644 --- a/src/component/Detail/detailLeft/colorBox/pallet.vue +++ b/src/component/Detail/detailLeft/colorBox/pallet.vue @@ -1,5 +1,5 @@