Compare commits
5 Commits
a781b433f6
...
global_awa
| Author | SHA1 | Date | |
|---|---|---|---|
| f74d4d3099 | |||
| cf55389181 | |||
| c710394293 | |||
| 512cf36baf | |||
| dc72a132bd |
BIN
src/assets/images/award/anniewong.png
Normal file → Executable file
BIN
src/assets/images/award/anniewong.png
Normal file → Executable file
Binary file not shown.
|
Before Width: | Height: | Size: 107 KiB After Width: | Height: | Size: 124 KiB |
@@ -124,7 +124,7 @@ export default {
|
|||||||
executionDesc: 'Quality of presentation and\ntechnical craftsmanship',
|
executionDesc: 'Quality of presentation and\ntechnical craftsmanship',
|
||||||
totalCashPrizes: 'UP TO\nUS$9000',
|
totalCashPrizes: 'UP TO\nUS$9000',
|
||||||
totalCashPrizesLabel: 'In total cash prizes',
|
totalCashPrizesLabel: 'In total cash prizes',
|
||||||
globalMediaExpose: 'GLOBAL MEDIA\nEXPOSE',
|
globalMediaExpose: 'GLOBAL MEDIA\nEXPOSURE',
|
||||||
globalMediaExposeLabel: 'Showcased by top\ninternational media platforms',
|
globalMediaExposeLabel: 'Showcased by top\ninternational media platforms',
|
||||||
networkingOpportunities: 'NETWORKING\nOPPORTUNITIES',
|
networkingOpportunities: 'NETWORKING\nOPPORTUNITIES',
|
||||||
networkingOpportunitiesLabel: 'Build connections with\ndesigners and industry leaders',
|
networkingOpportunitiesLabel: 'Build connections with\ndesigners and industry leaders',
|
||||||
@@ -135,24 +135,24 @@ export default {
|
|||||||
timelineApplicationLabel: 'Application',
|
timelineApplicationLabel: 'Application',
|
||||||
timelineDeadlineLabel: 'Deadline',
|
timelineDeadlineLabel: 'Deadline',
|
||||||
timeJul15: 'Jul 15',
|
timeJul15: 'Jul 15',
|
||||||
applicationDeadlineDesc: 'Application deadline and\nentry review process\nbegins.',
|
applicationDeadlineDesc: 'Applications close and\nreview begins',
|
||||||
twentyFinalistsAnnounced: '20 Finalists',
|
twentyFinalistsAnnounced: 'Announcement of',
|
||||||
announcedLabel: 'Announced',
|
announcedLabel: '20 Finalists',
|
||||||
timeAug30: 'Aug 30',
|
timeAug30: 'Aug 30',
|
||||||
twentyFinalistsDesc: 'Announcement of 20\nfinalists entering final\nevaluation stage.',
|
twentyFinalistsDesc: '20 finalists selected for\nfinal evaluation.',
|
||||||
finalistSubmission: 'Finalist\nSubmission',
|
finalistSubmission: 'Finalist\nSubmission',
|
||||||
submissionLabel: 'Deadline',
|
submissionLabel: 'Deadline',
|
||||||
timeSept30: 'Sept 30',
|
timeSept30: 'Sept 30',
|
||||||
finalistSubmissionDesc:
|
finalistSubmissionDesc:
|
||||||
'Finalists submit completed\noutfits on site and send actual\ngarments to Code-Create.\n(address to advise)',
|
'Finalists submit entries\nand ship garments to\nCode-Create',
|
||||||
receivingOutfits: 'Receiving Outfits',
|
receivingOutfits: 'Outfits Delivery',
|
||||||
fromFinalistsLabel: 'Deadline',
|
fromFinalistsLabel: 'Deadline',
|
||||||
timeOctober: 'Oct 23',
|
timeOctober: 'Oct 23',
|
||||||
receivingOutfitsDesc: 'Code-Create will\nacknowledge receipt of\nthe outfits.',
|
receivingOutfitsDesc: 'Code-Create confirms receipt of all garments',
|
||||||
awardCeremony: 'Award',
|
awardCeremony: 'Award',
|
||||||
ceremonyLabel: 'Ceremony',
|
ceremonyLabel: 'Ceremony',
|
||||||
timeNov12: 'Nov 12',
|
timeNov12: 'Nov 12',
|
||||||
awardCeremonyDesc: 'Award ceremony and\ncommunity gathering in\nHong Kong-Soho House.',
|
awardCeremonyDesc: 'Ceremony and gathering at Soho House, Hong Kong',
|
||||||
submissionSuccessful: 'Submission Successful',
|
submissionSuccessful: 'Submission Successful',
|
||||||
submissionSuccessfulDesc:
|
submissionSuccessfulDesc:
|
||||||
'Please review your submitted information in the AiDA in-platform message.\nYou may edit it if needed. Competition updates and results will be sent via email.',
|
'Please review your submitted information in the AiDA in-platform message.\nYou may edit it if needed. Competition updates and results will be sent via email.',
|
||||||
|
|||||||
@@ -16,9 +16,9 @@ export default {
|
|||||||
howToApply: '申请方法',
|
howToApply: '申请方法',
|
||||||
stepByStep: '步骤指南',
|
stepByStep: '步骤指南',
|
||||||
step1Title: '1. 成为 AiDA 订阅用户',
|
step1Title: '1. 成为 AiDA 订阅用户',
|
||||||
step1Desc: '所有申请者在提交时必须是\n活跃的AiDA订阅用户。\n您可以选择按月或按年订阅。',
|
step1Desc: '所有申请者在提交时必须是\n活跃的AiDA订阅用户。\n您可以选择按月或按年订阅。',
|
||||||
step2Title: '2. 通过 AiDA 设计您的作品',
|
step2Title: '2. 通过 AiDA 设计您的作品',
|
||||||
step2Desc: '申请者必须仅使用AiDA\n平台完成设计作品。',
|
step2Desc: '申请者必须仅使用AiDA\n平台完成设计作品。',
|
||||||
step2ListTitle: '您的作品应清楚体现以下内容:',
|
step2ListTitle: '您的作品应清楚体现以下内容:',
|
||||||
step2List: ['AiDA在创作中的应用方式', '您的设计理念和创意方向', 'AI与人类创意的融合'],
|
step2List: ['AiDA在创作中的应用方式', '您的设计理念和创意方向', 'AI与人类创意的融合'],
|
||||||
step3Title: '3. 准备提交材料',
|
step3Title: '3. 准备提交材料',
|
||||||
@@ -60,7 +60,7 @@ export default {
|
|||||||
regular3: '主办的',
|
regular3: '主办的',
|
||||||
bold3: '国际设计竞赛,\n',
|
bold3: '国际设计竞赛,\n',
|
||||||
regular4:
|
regular4:
|
||||||
'旨在庆祝人工只能赋能下的未来创意。该赛事汇聚来自世界各地的设计师,\n将AI视为创意伙伴,突破传统时尚边界,探索技术与人类想象力结合的无限可能。',
|
'旨在庆祝人工只能赋能下的未来创意。该赛事汇聚来自世界各地的设计师,\n将AI视为创意伙伴,突破传统时尚边界,探索技术与人类想象力结合的无限可能。',
|
||||||
bold4: '',
|
bold4: '',
|
||||||
regular5: ''
|
regular5: ''
|
||||||
},
|
},
|
||||||
@@ -85,7 +85,7 @@ export default {
|
|||||||
gregoryCountry: '(意大利)',
|
gregoryCountry: '(意大利)',
|
||||||
annie: '周大福珠宝集团首席运营官',
|
annie: '周大福珠宝集团首席运营官',
|
||||||
annieCountry: '(中国香港)',
|
annieCountry: '(中国香港)',
|
||||||
xaven: '《Madame Figaro FłehX》总经理兼编辑总监',
|
xaven: '《Madame Figaro 香港版》总经理兼编辑总监',
|
||||||
xavenCountry: '(中国香港)',
|
xavenCountry: '(中国香港)',
|
||||||
desmond: '《Vogue 新加坡版》主编',
|
desmond: '《Vogue 新加坡版》主编',
|
||||||
desmondCountry: '(新加坡)'
|
desmondCountry: '(新加坡)'
|
||||||
@@ -129,24 +129,24 @@ export default {
|
|||||||
timelineApplicationLabel: '申请期限',
|
timelineApplicationLabel: '申请期限',
|
||||||
timelineDeadlineLabel: '',
|
timelineDeadlineLabel: '',
|
||||||
timeJul15: '7月15日',
|
timeJul15: '7月15日',
|
||||||
applicationDeadlineDesc: '申请截止日期及\n作品审核流程开始',
|
applicationDeadlineDesc: '申请截止并开始评审',
|
||||||
twentyFinalistsAnnounced: '20名入围决赛',
|
twentyFinalistsAnnounced: '20名入围决赛',
|
||||||
announcedLabel: '选手揭晓',
|
announcedLabel: '选手揭晓',
|
||||||
timeAug30: '8月30日',
|
timeAug30: '8月30日',
|
||||||
twentyFinalistsDesc: '公布进入终评阶段\n的20名入围决赛选手',
|
twentyFinalistsDesc: '20名入围者被选入\n最终评审阶段',
|
||||||
finalistSubmission: '入围作品',
|
finalistSubmission: '入围作品',
|
||||||
submissionLabel: '提交最后期限',
|
submissionLabel: '提交最后期限',
|
||||||
timeSept30: '9月30日',
|
timeSept30: '9月30日',
|
||||||
finalistSubmissionDesc:
|
finalistSubmissionDesc:
|
||||||
'入围决赛选手需提交设计作品,\n并将成衣实物寄送至Code-\nCreate(地址另行通知)',
|
'入围者提交作品并将服装寄送至Code-Create',
|
||||||
receivingOutfits: '收到成衣期限',
|
receivingOutfits: '收到成衣期限',
|
||||||
fromFinalistsLabel: '',
|
fromFinalistsLabel: '',
|
||||||
timeOctober: '10月23日',
|
timeOctober: '10月23日',
|
||||||
receivingOutfitsDesc: 'Code-Create需确认收到\n入围决赛选手的成衣实物',
|
receivingOutfitsDesc: 'Code-Create确认收到\n所有服装作品',
|
||||||
awardCeremony: '奖项颁发仪式',
|
awardCeremony: '奖项颁发仪式',
|
||||||
ceremonyLabel: '',
|
ceremonyLabel: '',
|
||||||
timeNov12: '11月12日',
|
timeNov12: '11月12日',
|
||||||
awardCeremonyDesc: '颁奖盛典与设计师社\n群聚会 – 香港Soho House',
|
awardCeremonyDesc: '颁奖盛典及交流活动于\n香港 Soho House 举行',
|
||||||
submissionSuccessful: '提交成功',
|
submissionSuccessful: '提交成功',
|
||||||
submissionSuccessfulDesc:
|
submissionSuccessfulDesc:
|
||||||
'请在 AiDA 平台内的消息中查看您提交的信息。如有需要,您可以进行修改。\n比赛的最新消息和结果将通过邮箱发送。',
|
'请在 AiDA 平台内的消息中查看您提交的信息。如有需要,您可以进行修改。\n比赛的最新消息和结果将通过邮箱发送。',
|
||||||
@@ -160,7 +160,7 @@ export default {
|
|||||||
wechatTitle: '微信公众号',
|
wechatTitle: '微信公众号',
|
||||||
wechatDesc: '请使用微信扫描二维码',
|
wechatDesc: '请使用微信扫描二维码',
|
||||||
copyRight: '© 2026 Code-Create | 保留所有权利',
|
copyRight: '© 2026 Code-Create | 保留所有权利',
|
||||||
copyRightTips: '*所有信息如有变动,请以官方最新公布为准'
|
copyRightTips: '*所有信息如有变动,请以官方最新公布为准。'
|
||||||
},
|
},
|
||||||
AwardApply: {
|
AwardApply: {
|
||||||
// 页面主标题区域
|
// 页面主标题区域
|
||||||
|
|||||||
@@ -1,7 +1,12 @@
|
|||||||
import i18n, { getLocaleByPath } from '@/lang'
|
import i18n, { getLocaleByPath } from '@/lang'
|
||||||
|
import { trackRouteEntry } from '@/utils/tracking'
|
||||||
import router from './index'
|
import router from './index'
|
||||||
|
|
||||||
router.beforeEach((to, _from, next) => {
|
router.beforeEach((to, _from, next) => {
|
||||||
i18n.global.locale.value = getLocaleByPath(to.path)
|
i18n.global.locale.value = getLocaleByPath(to.path)
|
||||||
next()
|
next()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
router.afterEach(() => {
|
||||||
|
trackRouteEntry()
|
||||||
|
})
|
||||||
|
|||||||
@@ -144,7 +144,8 @@ export const Https = {
|
|||||||
getContestantByID: '/api/global-award/contestants/', // 获取表单
|
getContestantByID: '/api/global-award/contestants/', // 获取表单
|
||||||
getContestCount: '/api/global-award/contestants/count', // 获取已提交申请总数
|
getContestCount: '/api/global-award/contestants/count', // 获取已提交申请总数
|
||||||
getExcel: '/api/global-award/contestants/export', // 导出excel
|
getExcel: '/api/global-award/contestants/export', // 导出excel
|
||||||
postExportFile: '/api/global-award/contestants/export/files' // 下载指定范围文件
|
postExportFile: '/api/global-award/contestants/export/files', // 下载指定范围文件
|
||||||
|
visitTracking: '/api/global-award/page/visit' // 每次都调用的埋点接口
|
||||||
},
|
},
|
||||||
|
|
||||||
axiosGet(url, config) {
|
axiosGet(url, config) {
|
||||||
|
|||||||
30
src/utils/tracking.ts
Normal file
30
src/utils/tracking.ts
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
import { Https } from '@/utils/request'
|
||||||
|
import { generateUuid } from '@/utils/util'
|
||||||
|
|
||||||
|
const VISIT_TRACKING_SESSION_ID_KEY = 'global_award_visit_tracking_session_id'
|
||||||
|
|
||||||
|
const getVisitTrackingSessionId = () => {
|
||||||
|
try {
|
||||||
|
const storedSessionId = window.sessionStorage.getItem(VISIT_TRACKING_SESSION_ID_KEY)
|
||||||
|
if (storedSessionId) return storedSessionId
|
||||||
|
|
||||||
|
const sessionId = generateUuid()
|
||||||
|
window.sessionStorage.setItem(VISIT_TRACKING_SESSION_ID_KEY, sessionId)
|
||||||
|
return sessionId
|
||||||
|
} catch (error) {
|
||||||
|
console.warn('[tracking] sessionStorage access failed', error)
|
||||||
|
return generateUuid()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const requestVisitTracking = async () => {
|
||||||
|
await Https.axiosPost(Https.httpUrls.visitTracking, {
|
||||||
|
sessionId: getVisitTrackingSessionId()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export const trackRouteEntry = () => {
|
||||||
|
requestVisitTracking().catch((error) => {
|
||||||
|
console.warn('[tracking] request failed', error)
|
||||||
|
})
|
||||||
|
}
|
||||||
@@ -676,6 +676,16 @@ function sketchToMask(sketchImage) {
|
|||||||
img.src = sketchImage
|
img.src = sketchImage
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 生成Uuid
|
||||||
|
function generateUuid() {
|
||||||
|
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
|
||||||
|
const r = (Math.random() * 16) | 0
|
||||||
|
const v = c === 'x' ? r : (r & 0x3) | 0x8
|
||||||
|
return v.toString(16)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
export {
|
export {
|
||||||
isEmail,
|
isEmail,
|
||||||
getUploadUrl,
|
getUploadUrl,
|
||||||
@@ -699,5 +709,6 @@ export {
|
|||||||
calculateGradientCoordinate,
|
calculateGradientCoordinate,
|
||||||
segmentImage,
|
segmentImage,
|
||||||
UrlToFile,
|
UrlToFile,
|
||||||
sketchToMask
|
sketchToMask,
|
||||||
|
generateUuid
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { onBeforeUnmount, onMounted, nextTick, ref, inject } from 'vue'
|
import { onBeforeUnmount, onMounted, nextTick, ref, inject, computed } from 'vue'
|
||||||
import { useI18n } from 'vue-i18n'
|
import { useI18n } from 'vue-i18n'
|
||||||
import { gsap } from 'gsap'
|
import { gsap } from 'gsap'
|
||||||
import jae from '@/assets/images/award/jae.png'
|
import jae from '@/assets/images/award/jae.png'
|
||||||
@@ -38,44 +38,52 @@ import desmond from '@/assets/images/award/desmond.png'
|
|||||||
const { t } = useI18n()
|
const { t } = useI18n()
|
||||||
const isMobile = inject<boolean>('isMobile')
|
const isMobile = inject<boolean>('isMobile')
|
||||||
const isPad = inject<boolean>('isPad')
|
const isPad = inject<boolean>('isPad')
|
||||||
const judgements = [
|
const judgements = computed(() => {
|
||||||
|
return [
|
||||||
{
|
{
|
||||||
picture: jae,
|
picture: jae,
|
||||||
name: 'Jae Hyuk Lim',
|
name: 'Jae Hyuk Lim',
|
||||||
desc: 'AwardsPage.judgesHat.jae',
|
desc: 'AwardsPage.judgesHat.jae',
|
||||||
region: 'AwardsPage.judgesHat.jaeCountry'
|
region: 'AwardsPage.judgesHat.jaeCountry',
|
||||||
|
order: 1
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
picture: rosiexia,
|
picture: rosiexia,
|
||||||
name: 'Rosie Xia',
|
name: 'Rosie Xia',
|
||||||
desc: 'AwardsPage.judgesHat.rosie',
|
desc: 'AwardsPage.judgesHat.rosie',
|
||||||
region: 'AwardsPage.judgesHat.rosieCountry'
|
region: 'AwardsPage.judgesHat.rosieCountry',
|
||||||
|
order: isMobile.value ? 3 : 2
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
picture: gregory,
|
picture: gregory,
|
||||||
name: 'Gregory de la Hogue Moran',
|
name: 'Gregory de la Hogue Moran',
|
||||||
desc: 'AwardsPage.judgesHat.gregory',
|
desc: 'AwardsPage.judgesHat.gregory',
|
||||||
region: 'AwardsPage.judgesHat.gregoryCountry'
|
region: 'AwardsPage.judgesHat.gregoryCountry',
|
||||||
|
order: isMobile.value ? 2 : 4
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
picture: annie,
|
picture: annie,
|
||||||
name: 'Annie Wong',
|
name: 'Annie Wong',
|
||||||
desc: 'AwardsPage.judgesHat.annie',
|
desc: 'AwardsPage.judgesHat.annie',
|
||||||
region: 'AwardsPage.judgesHat.annieCountry'
|
region: 'AwardsPage.judgesHat.annieCountry',
|
||||||
|
order: isMobile.value ? 4 : 5
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
picture: xaven,
|
picture: xaven,
|
||||||
name: 'Xaven Mak',
|
name: 'Xaven Mak',
|
||||||
desc: 'AwardsPage.judgesHat.xaven',
|
desc: 'AwardsPage.judgesHat.xaven',
|
||||||
region: 'AwardsPage.judgesHat.xavenCountry'
|
region: 'AwardsPage.judgesHat.xavenCountry',
|
||||||
|
order: 6
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
picture: desmond,
|
picture: desmond,
|
||||||
name: 'Desmond Lim',
|
name: 'Desmond Lim',
|
||||||
desc: 'AwardsPage.judgesHat.desmond',
|
desc: 'AwardsPage.judgesHat.desmond',
|
||||||
region: 'AwardsPage.judgesHat.desmondCountry'
|
region: 'AwardsPage.judgesHat.desmondCountry',
|
||||||
|
order: isMobile.value ? 5 : 3
|
||||||
}
|
}
|
||||||
]
|
].sort((a,b)=>a.order - b.order)
|
||||||
|
})
|
||||||
|
|
||||||
const judgesTitleRef = ref<HTMLElement | null>(null)
|
const judgesTitleRef = ref<HTMLElement | null>(null)
|
||||||
const judgesSubTitleRef = ref<HTMLElement | null>(null)
|
const judgesSubTitleRef = ref<HTMLElement | null>(null)
|
||||||
|
|||||||
@@ -21,15 +21,10 @@
|
|||||||
<div class="vertical-content">
|
<div class="vertical-content">
|
||||||
<div class="vertical-time">{{ $t(item.time) }}</div>
|
<div class="vertical-time">{{ $t(item.time) }}</div>
|
||||||
<div class="vertical-label">
|
<div class="vertical-label">
|
||||||
{{ $t(item.label) }}{{ locale === 'ENGLISH' ? ' ' + $t(item.subLabel) : '' }}
|
{{ $t(item.label) }}{{ locale === 'ENGLISH' ? ' ' + $t(item.subLabel) : $t(item.subLabel) }}
|
||||||
<!-- <template v-if="isMobile">
|
|
||||||
|
|
||||||
</template> -->
|
|
||||||
</div>
|
</div>
|
||||||
<div class="vertical-desc">
|
<div class="vertical-desc">
|
||||||
{{
|
{{ locale === 'CHINESE_SIMPLIFIED' ? $t(item.desc).replace(/\n/g, '') : $t(item.desc) }}
|
||||||
locale === 'CHINESE_SIMPLIFIED' ? $t(item.desc).replace(/\n/g, '') : $t(item.desc)
|
|
||||||
}}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -416,8 +411,8 @@ onBeforeUnmount(() => {
|
|||||||
font-size: 2rem;
|
font-size: 2rem;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
color: #e0e0e0;
|
color: #e0e0e0;
|
||||||
width: 100%;
|
width: 22rem;
|
||||||
max-width: 31.2rem;
|
// max-width: 22rem;
|
||||||
min-height: 10.2rem;
|
min-height: 10.2rem;
|
||||||
white-space: pre-line;
|
white-space: pre-line;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|||||||
Reference in New Issue
Block a user