From 949ff9292dc4a6cf861ff79e808b476a9f5df948 Mon Sep 17 00:00:00 2001 From: zhangyahui Date: Thu, 23 Apr 2026 11:07:25 +0800 Subject: [PATCH 1/8] =?UTF-8?q?feat:=20=E6=B4=BB=E5=8A=A8=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E6=96=87=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/json/events.json | 1 + src/assets/json/events_cn.json | 1 + src/component/Events/eventsDetail.vue | 6 ++++++ 3 files changed, 8 insertions(+) diff --git a/src/assets/json/events.json b/src/assets/json/events.json index dc3f0e15..45887dc5 100644 --- a/src/assets/json/events.json +++ b/src/assets/json/events.json @@ -16,6 +16,7 @@ "id": 3, "title": "AiDA Global Design Awards 2026", "imgUrl": "/image/events/award-poster.gif", + "tips": "For inquiries: awards2026@code-create.com.hk", "textList": [ { "paragraph": [ diff --git a/src/assets/json/events_cn.json b/src/assets/json/events_cn.json index c582bbe1..285228d7 100644 --- a/src/assets/json/events_cn.json +++ b/src/assets/json/events_cn.json @@ -16,6 +16,7 @@ "id": 3, "title": "AiDA全球设计奖 2026", "imgUrl": "/image/events/award-poster-zh.gif", + "tips": "如有疑问,请联系:awards2026@code-create.com.hk", "textList": [ { "paragraph": [ diff --git a/src/component/Events/eventsDetail.vue b/src/component/Events/eventsDetail.vue index 2b1d378b..837652c0 100644 --- a/src/component/Events/eventsDetail.vue +++ b/src/component/Events/eventsDetail.vue @@ -43,6 +43,7 @@ v-detailText="introItem.text" > +
{{ eventsDetail.tips }}
@@ -293,4 +294,9 @@ export default defineComponent({ white-space: nowrap; cursor: pointer; } +.tips{ + color: rgba(0, 0, 0, 0.45); + font-size: var(--aida-fsize1-4); + font-weight: 400; +} From 82941bca7cc17fc718ee902e8347350086a11a71 Mon Sep 17 00:00:00 2001 From: zhangyahui Date: Thu, 23 Apr 2026 11:22:21 +0800 Subject: [PATCH 2/8] =?UTF-8?q?feat:=20=E6=B4=BB=E5=8A=A8=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/json/events.json | 9 +- src/assets/json/events_cn.json | 9 +- src/component/Account/message/system.vue | 189 +++++++++++++---------- src/component/Events/eventsDetail.vue | 26 +++- 4 files changed, 144 insertions(+), 89 deletions(-) diff --git a/src/assets/json/events.json b/src/assets/json/events.json index 45887dc5..9b2b326b 100644 --- a/src/assets/json/events.json +++ b/src/assets/json/events.json @@ -9,6 +9,11 @@ "id": 2, "title": "AiDA X SFT AI Fashion Award 2024", "imgUrl": "/image/events/Fashion-Award-2024.png" + }, + { + "id": 3, + "title": "AiDA Global Design Awards 2026", + "imgUrl": "/image/events/award-poster.gif" } ], "eventsItem": [ @@ -21,14 +26,14 @@ { "paragraph": [ { - "text": "Click the “View Details” button for more information and to join the competition! The AiDA Global Design Award 2026 is an international design competition hosted by Code‑Create, a globally leading AI fashion solutions provider, celebrating the future of creativity powered by artificial intelligence. Open to designers from Hong Kong, China, Singapore, South Korea, and beyond, the competition brings together global talent, empowering AI as a creative partner—pushing fashion beyond traditional boundaries and unlocking new possibilities where technology amplifies human imagination." + "text": "Click the “View Details” button for more information and to join the competition! The AiDA Global Design Award 2026 is an international design competition hosted by Code‑Create, a globally leading AI fashion solutions provider, celebrating the future of creativity powered by artificial intelligence. Open to designers worldwide the competition brings together global talent, empowering AI as a creative partner—pushing fashion beyond traditional boundaries and unlocking new possibilities where technology amplifies human imagination." } ] }, { "paragraph": [ { - "text": "Participants have the opportunity to compete for cash prizes totaling up to US$9,000, gain global media exposure showcased by top international platforms, and connect with designers and industry leaders worldwide. Finalists will also attend an exclusive award ceremony in Hong Kong, with travel support provided, allowing them to showcase their talent, network with professionals, and celebrate their achievements on an international stage." + "text": "Participants have the opportunity to compete for cash prizes totaling up to US$9,000, gain global media exposure showcased by top international platforms, and connect with designers and industry leaders worldwide. Finalists will also attend an exclusive award ceremony in Hong Kong, with travel allowance, allowing them to showcase their talent, network with professionals, and celebrate their achievements on an international stage." } ] } diff --git a/src/assets/json/events_cn.json b/src/assets/json/events_cn.json index 285228d7..695add7d 100644 --- a/src/assets/json/events_cn.json +++ b/src/assets/json/events_cn.json @@ -9,6 +9,11 @@ "id": 2, "title": "AiDA X SFT AI时尚设计比赛2024", "imgUrl": "/image/events/Fashion-Award-2024.png" + }, + { + "id": 3, + "title": "AiDA全球设计奖 2026", + "imgUrl": "/image/events/award-poster-zh.gif" } ], "eventsItem": [ @@ -21,14 +26,14 @@ { "paragraph": [ { - "text": "秉承推动 AI 赋能创意设计的初衷,Code‑Create 举办了「AiDA 全球设计大奖 2026」,面向来自香港、中国、新加坡、韩国及全球的设计师,鼓励大家探索 AI 与时尚设计的无限可能,突破传统界限,释放科技与想象力的创新潜能。点击“查看详情”按钮获取更多比赛信息,抓住成为 AI 时尚先锋的机会吧!" + "text": "秉承推动 AI 赋能创意设计的初衷,Code‑Create 举办了「AiDA 全球设计大奖 2026」,面向来全球的设计师,鼓励大家探索 AI 与时尚设计的无限可能,突破传统界限,释放科技与想象力的创新潜能。点击“查看详情”按钮获取更多比赛信息,抓住成为 AI 时尚先锋的机会吧!" } ] }, { "paragraph": [ { - "text": "参赛者将有机会赢取总奖金 9,000 美元,作品还将获得国际媒体展示机会,并与全球设计师和行业领袖建立联系。入围决赛者将受邀参加在香港举办的 专属颁奖典礼,主办方提供差旅支持,让设计师在国际舞台展示才华、拓展人脉,并共同庆祝创意成果。" + "text": "参赛者将有机会赢取总奖金 9,000 美元,作品还将获得国际媒体展示机会,并与全球设计师和行业领袖建立联系。入围决赛者将受邀参加在香港举办的 专属颁奖典礼,主办方提供差旅津贴,让设计师在国际舞台展示才华、拓展人脉,并共同庆祝创意成果。" } ] } diff --git a/src/component/Account/message/system.vue b/src/component/Account/message/system.vue index 8795031f..e0b4c6aa 100644 --- a/src/component/Account/message/system.vue +++ b/src/component/Account/message/system.vue @@ -1,22 +1,37 @@ From 0d1656ee0a7cec0f0652b1c58475410e831d2bc4 Mon Sep 17 00:00:00 2001 From: zhangyahui Date: Thu, 23 Apr 2026 12:23:51 +0800 Subject: [PATCH 4/8] =?UTF-8?q?style:=20=E5=AD=97=E4=BD=93=E9=97=B4?= =?UTF-8?q?=E8=B7=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/component/Events/eventsDetail.vue | 1 + 1 file changed, 1 insertion(+) diff --git a/src/component/Events/eventsDetail.vue b/src/component/Events/eventsDetail.vue index bd48dff7..86a7667e 100644 --- a/src/component/Events/eventsDetail.vue +++ b/src/component/Events/eventsDetail.vue @@ -310,6 +310,7 @@ export default defineComponent({ color: rgba(0, 0, 0, 0.45); font-size: var(--aida-fsize1-4); font-weight: 400; + letter-spacing: 0.3rem; } .modal_title_text.content.award{ line-height: 1.3; From 3bff1ebb669e6f4a705bf4bbdf435c070959ec37 Mon Sep 17 00:00:00 2001 From: zhangyahui Date: Thu, 23 Apr 2026 14:05:00 +0800 Subject: [PATCH 5/8] =?UTF-8?q?feat:=20=E5=B7=A5=E5=85=B7=E5=87=BD?= =?UTF-8?q?=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/tool/util.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/tool/util.js b/src/tool/util.js index b8f095c7..770fe315 100644 --- a/src/tool/util.js +++ b/src/tool/util.js @@ -672,6 +672,17 @@ function sketchToMask(sketchImage) { img.src = sketchImage; }); } + +function isValidUrl(string) { + try { + const url = new URL(string) + // 通常我们只需要 http 或 https 协议 + return url.protocol === "http:" || url.protocol === "https:" + } catch (err) { + return false + } +} + export { isEmail, getUploadUrl, From 7297e4e7a45086403a06f4680bc503052d8572ca Mon Sep 17 00:00:00 2001 From: zhangyahui Date: Thu, 23 Apr 2026 14:08:59 +0800 Subject: [PATCH 6/8] bugfix --- src/tool/util.js | 47 ++++++++++++++++++++++++----------------------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/src/tool/util.js b/src/tool/util.js index 770fe315..0b82f3b9 100644 --- a/src/tool/util.js +++ b/src/tool/util.js @@ -684,27 +684,28 @@ function isValidUrl(string) { } export { - isEmail, - getUploadUrl, - getUniversalZoomLevel, - rgbaToHex, - getMinioUrl, - base64ToFile, - dataURLtoFile, - blobToFile, - base64toFile, - rgbToHsv, - formatTime, - dataURLtoBlob, - isMoible, - downloadIamge, - downloadVideoWithFetch, - getBrowserInfo, - setPubDate, - murmur, - setGradual, - calculateGradientCoordinate, - segmentImage, - UrlToFile, - sketchToMask + isEmail, + getUploadUrl, + getUniversalZoomLevel, + rgbaToHex, + getMinioUrl, + base64ToFile, + dataURLtoFile, + blobToFile, + base64toFile, + rgbToHsv, + formatTime, + dataURLtoBlob, + isMoible, + downloadIamge, + downloadVideoWithFetch, + getBrowserInfo, + setPubDate, + murmur, + setGradual, + calculateGradientCoordinate, + segmentImage, + UrlToFile, + sketchToMask, + isValidUrl } \ No newline at end of file From 743fc762d60d2f9b4b516470216acc69694b5e00 Mon Sep 17 00:00:00 2001 From: "X1627315083@163.com" <1627315083@qq.com> Date: Thu, 23 Apr 2026 16:57:03 +0800 Subject: [PATCH 7/8] fix --- src/component/Detail/model/modelPosition.vue | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/component/Detail/model/modelPosition.vue b/src/component/Detail/model/modelPosition.vue index ad20795d..13f1f734 100644 --- a/src/component/Detail/model/modelPosition.vue +++ b/src/component/Detail/model/modelPosition.vue @@ -189,11 +189,11 @@ export default defineComponent({ } return { scaleX, scaleY, rotate }; } - const initMoveableForSelected = () => { + const initMoveableForSelected = async (isDestroy:boolean = false) => { // 销毁旧的实例 if(selectItem.imgDomIndex == -1)return - if (moveableInstance.value) { - moveableInstance.value.destroy(); + if (moveableInstance?.value?.destroy && !isDestroy) { + moveableInstance?.value?.destroy(); } const selectedEl = elementRefs.value[selectItem.imgDomIndex]; @@ -509,7 +509,7 @@ export default defineComponent({ watch(()=>detailData.frontBack.front.length,(newValue,oldValue)=>{ if(selectItem.selectDetail?.id)selectItem.imgDomIndex = detailData.frontBack.front.findIndex((item:any)=>item.id == selectItem.selectDetail?.id) setTimeout(()=>{ - initMoveableForSelected() + initMoveableForSelected(oldValue == 0) },100) }) const setRevocation = async ()=>{ From 7bb38bf2e5b49be05ea74d0cb3f566ed3e71b03f 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, 24 Apr 2026 17:11:48 +0800 Subject: [PATCH 8/8] =?UTF-8?q?=E5=A4=84=E7=90=86Safari=20=E4=B8=8D?= =?UTF-8?q?=E6=94=AF=E6=8C=81requestIdleCallback=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/component/Canvas/CanvasEditor/managers/BrushIndicator.js | 2 +- .../Canvas/CanvasEditor/managers/RedGreenModeManager.js | 3 ++- .../Canvas/CanvasEditor/managers/ThumbnailManager.js | 4 +--- .../CanvasEditor/managers/liquify/LiquifyRealTimeUpdater.js | 2 +- 4 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/component/Canvas/CanvasEditor/managers/BrushIndicator.js b/src/component/Canvas/CanvasEditor/managers/BrushIndicator.js index 02dff910..90ed9080 100644 --- a/src/component/Canvas/CanvasEditor/managers/BrushIndicator.js +++ b/src/component/Canvas/CanvasEditor/managers/BrushIndicator.js @@ -409,7 +409,7 @@ export class BrushIndicator { // this.show(e.e); this._mouseEnterHandler && this._mouseEnterHandler(e) } else { - // requestIdleCallback(() => { + // setTimeout(() => { // this.updatePosition(e.e); // }); diff --git a/src/component/Canvas/CanvasEditor/managers/RedGreenModeManager.js b/src/component/Canvas/CanvasEditor/managers/RedGreenModeManager.js index b8496609..b77da6d8 100644 --- a/src/component/Canvas/CanvasEditor/managers/RedGreenModeManager.js +++ b/src/component/Canvas/CanvasEditor/managers/RedGreenModeManager.js @@ -133,11 +133,12 @@ export class RedGreenModeManager { this.canvas.on("mouse:up", (event) => { // 可以在这里添加更多逻辑,比如生成图片或更新状态 nextTick(() => { - requestIdleCallback(async () => { + setTimeout(async () => { if (!this.isInitialized) { console.warn("红绿图模式未初始化,无法处理鼠标事件"); return; } + console.log("鼠标抬起事件触发", this.onImageGenerated); if (this.onImageGenerated) { const imageData = await this.canvasManager.exportImage({ restoreOpacityInRedGreen: true, // 恢复红绿图模式下的透明度 diff --git a/src/component/Canvas/CanvasEditor/managers/ThumbnailManager.js b/src/component/Canvas/CanvasEditor/managers/ThumbnailManager.js index 3c042817..6dd9667f 100644 --- a/src/component/Canvas/CanvasEditor/managers/ThumbnailManager.js +++ b/src/component/Canvas/CanvasEditor/managers/ThumbnailManager.js @@ -37,7 +37,6 @@ export class ThumbnailManager { // 延迟执行,避免阻塞UI fabricObjects.length > 0 && - requestIdleCallback(() => { setTimeout(async () => { const base64 = await this._generateLayerThumbnailNow(fabricObjects, layer); // this.layerThumbnails.set(layerId, base64); @@ -55,7 +54,6 @@ export class ThumbnailManager { console.error("生成图层缩略图时出错:", error); } }); - }); } /** @@ -65,7 +63,7 @@ export class ThumbnailManager { generateAllLayerThumbnails(layers) { if (!layers || !Array.isArray(layers)) return; - requestIdleCallback(() => { + setTimeout(() => { setTimeout(() => { layers.forEach((layer) => { if (layer && layer.id) { diff --git a/src/component/Canvas/CanvasEditor/managers/liquify/LiquifyRealTimeUpdater.js b/src/component/Canvas/CanvasEditor/managers/liquify/LiquifyRealTimeUpdater.js index 15e2f797..f4429bb4 100644 --- a/src/component/Canvas/CanvasEditor/managers/liquify/LiquifyRealTimeUpdater.js +++ b/src/component/Canvas/CanvasEditor/managers/liquify/LiquifyRealTimeUpdater.js @@ -155,7 +155,7 @@ export class LiquifyRealTimeUpdater { // 使用requestAnimationFrame进行批量渲染优化 // if (!this.renderingScheduled && !this.config.skipRenderDuringDrag) { // this.renderingScheduled = true; - // requestIdleCallback(() => { + // setTimeout(() => { // this.canvas.renderAll(); // this.renderingScheduled = false; // });