From 949ff9292dc4a6cf861ff79e808b476a9f5df948 Mon Sep 17 00:00:00 2001 From: zhangyahui Date: Thu, 23 Apr 2026 11:07:25 +0800 Subject: [PATCH 01/13] =?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 02/13] =?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 04/13] =?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 05/13] =?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 06/13] 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 07/13] 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 e4fc51c574f985400836fbf00a5bb1b5ab499424 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 16:57:13 +0800 Subject: [PATCH 08/13] =?UTF-8?q?=E5=8D=96=E5=AE=B6=E7=AB=AF=E7=94=B3?= =?UTF-8?q?=E8=AF=B7=E6=8E=A5=E5=8F=A3=E3=80=82=E4=BA=BA=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/store/index.ts | 2 + src/store/seller/index.d.ts | 6 ++ src/store/seller/index.ts | 40 +++++++++ src/tool/https.js | 4 + src/views/HomeMain.vue | 25 ++---- .../SellerDashboard/BecomeSeller/index.vue | 19 +++- .../BecomeSeller/sellerApply.vue | 16 +++- .../BecomeSeller/sellerReview.vue | 12 ++- src/views/SellerDashboard/MyOrders/index.vue | 87 +++++++++++-------- 9 files changed, 149 insertions(+), 62 deletions(-) create mode 100644 src/store/seller/index.d.ts create mode 100644 src/store/seller/index.ts diff --git a/src/store/index.ts b/src/store/index.ts index 2f977725..923c6f0b 100644 --- a/src/store/index.ts +++ b/src/store/index.ts @@ -7,6 +7,7 @@ import UserHabit from './userHabit/userHabit' import Workspace from './workspace/workspace' import Guide from './guide/guide' import adminPage from './adminPage/adminPage' +import seller from './seller/index' export interface RootState{ } @@ -41,5 +42,6 @@ export default createStore({ Workspace, Guide, adminPage, + seller, } }) diff --git a/src/store/seller/index.d.ts b/src/store/seller/index.d.ts new file mode 100644 index 00000000..3febdb11 --- /dev/null +++ b/src/store/seller/index.d.ts @@ -0,0 +1,6 @@ +export const ApplyStatus = { + Null: null,// 未申请过 + Pending: 0,// 已提交, 待审核 + Approved: 1,// 审核通过 + Rejected: 2,// 审核拒绝 +} \ No newline at end of file diff --git a/src/store/seller/index.ts b/src/store/seller/index.ts new file mode 100644 index 00000000..2c72e7ec --- /dev/null +++ b/src/store/seller/index.ts @@ -0,0 +1,40 @@ +import { Module } from 'vuex' +import { RootState } from '../index' +import i18n from "@/lang/index"; +import { Https } from '@/tool/https' +import { ApplyStatus } from "./index.d" + +import store from '../index' +interface Seller { + isSeller: boolean, + applyStatus: number, +} + +const seller: Module = { + namespaced: true, + state: { + isSeller: false, + applyStatus: null, + }, + mutations: { + set_isSeller(state: Seller, value: boolean) { + state.isSeller = value + }, + set_applyStatus(state: Seller, value: number) { + state.applyStatus = value + if (value == ApplyStatus.Approved) { + state.isSeller = true + } + }, + }, + + actions: { + get_isSeller({ commit }) { + Https.axiosGet(Https.httpUrls.checkSellerDesigner).then(rv => { + commit('set_isSeller', !!rv) + }) + }, + } +} + +export default seller \ No newline at end of file diff --git a/src/tool/https.js b/src/tool/https.js index 3cfbfa8e..517776d9 100644 --- a/src/tool/https.js +++ b/src/tool/https.js @@ -475,6 +475,10 @@ export const Https = { // 卖家端接口 checkSellerDesigner: '/seller/designer/check', // 检查卖家是否为设计师 + getSellerApplyStatus: '/seller/designer/apply/status', // 获取卖家申请状态 + submitSellerApply: '/seller/designer/apply', // 提交卖家申请 + getSellerOrderSummary: '/seller/order/summary', // 获取卖家订单数据总览 + getSellerOrderList: '/seller/order/page', // 获取卖家订单列表 }, diff --git a/src/views/HomeMain.vue b/src/views/HomeMain.vue index 99511844..d5f9a7a7 100644 --- a/src/views/HomeMain.vue +++ b/src/views/HomeMain.vue @@ -373,11 +373,11 @@ {{ $t('Header.ViewOrders') }} -
+
{{ $t('Header.BecomeSeller') }}
-
+
{{ $t('Header.SellerDashboard') }} @@ -1073,9 +1073,13 @@ export default defineComponent({ } } + const isSeller = computed(() => { + return store.state.seller.isSeller + }) return { store, userDetail, + isSeller, t, ...toRefs(homeMainData), ...toRefs(historyData), @@ -1150,6 +1154,7 @@ export default defineComponent({ reject() }) }) + this.store.dispatch('seller/get_isSeller')//获取是否是卖家 let isMurmur = getCookie('isMurmur') //获取是否是试用用户 this.isMurmur = JSON.parse(isMurmur) if (this.userDetail.userId && this.userDetail.userId > -1) { @@ -1215,7 +1220,6 @@ export default defineComponent({ let payOrder = this.$refs.payOrder payOrder.init(orderId) } - this.getCheckSellerDesigner() }, methods: { setTask(data) { @@ -1379,21 +1383,6 @@ export default defineComponent({ this.store.commit('set_dataLoading', false) }) }, - //获取是否为卖家 - getCheckSellerDesigner() { - const config = { - params: { - userId: this.userDetail.userId - } - } - Https.axiosGet(Https.httpUrls.checkSellerDesigner, config).then(rv => { - if (rv) { - console.log(rv) - return rv - } - return null - }) - }, setLocale(v) { // 同步更新 localStorage 中的 loginLanguage if (v) { diff --git a/src/views/SellerDashboard/BecomeSeller/index.vue b/src/views/SellerDashboard/BecomeSeller/index.vue index 3b738b49..d651beb0 100644 --- a/src/views/SellerDashboard/BecomeSeller/index.vue +++ b/src/views/SellerDashboard/BecomeSeller/index.vue @@ -5,8 +5,8 @@ tip="Join the Stylish Parade and start selling your design work" />
- - + +
@@ -16,7 +16,20 @@ import sellerHeader from "../seller-header.vue" import sellerReview from "./sellerReview.vue" import sellerApply from "./sellerApply.vue" - const isSubmit = ref(false) + import { Https } from "@/tool/https" + import { useStore } from "vuex" + import { ApplyStatus } from "@/store/seller/index.d" + const store = useStore() + const applyStatus = computed(() => store.state.seller.applyStatus) + const onSubmit = () => store.commit("seller/set_applyStatus", ApplyStatus.Pending) + const getSellerApplyStatus = () => { + store.commit("set_loading", true) + Https.axiosGet(Https.httpUrls.getSellerApplyStatus).then((res) => { + store.commit("set_loading", false) + store.commit("seller/set_applyStatus", res) + }) + } + getSellerApplyStatus()