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',
|
||||
totalCashPrizes: 'UP TO\nUS$9000',
|
||||
totalCashPrizesLabel: 'In total cash prizes',
|
||||
globalMediaExpose: 'GLOBAL MEDIA\nEXPOSE',
|
||||
globalMediaExpose: 'GLOBAL MEDIA\nEXPOSURE',
|
||||
globalMediaExposeLabel: 'Showcased by top\ninternational media platforms',
|
||||
networkingOpportunities: 'NETWORKING\nOPPORTUNITIES',
|
||||
networkingOpportunitiesLabel: 'Build connections with\ndesigners and industry leaders',
|
||||
@@ -135,24 +135,24 @@ export default {
|
||||
timelineApplicationLabel: 'Application',
|
||||
timelineDeadlineLabel: 'Deadline',
|
||||
timeJul15: 'Jul 15',
|
||||
applicationDeadlineDesc: 'Application deadline and\nentry review process\nbegins.',
|
||||
twentyFinalistsAnnounced: '20 Finalists',
|
||||
announcedLabel: 'Announced',
|
||||
applicationDeadlineDesc: 'Applications close and\nreview begins',
|
||||
twentyFinalistsAnnounced: 'Announcement of',
|
||||
announcedLabel: '20 Finalists',
|
||||
timeAug30: 'Aug 30',
|
||||
twentyFinalistsDesc: 'Announcement of 20\nfinalists entering final\nevaluation stage.',
|
||||
twentyFinalistsDesc: '20 finalists selected for\nfinal evaluation.',
|
||||
finalistSubmission: 'Finalist\nSubmission',
|
||||
submissionLabel: 'Deadline',
|
||||
timeSept30: 'Sept 30',
|
||||
finalistSubmissionDesc:
|
||||
'Finalists submit completed\noutfits on site and send actual\ngarments to Code-Create.\n(address to advise)',
|
||||
receivingOutfits: 'Receiving Outfits',
|
||||
'Finalists submit entries\nand ship garments to\nCode-Create',
|
||||
receivingOutfits: 'Outfits Delivery',
|
||||
fromFinalistsLabel: 'Deadline',
|
||||
timeOctober: 'Oct 23',
|
||||
receivingOutfitsDesc: 'Code-Create will\nacknowledge receipt of\nthe outfits.',
|
||||
receivingOutfitsDesc: 'Code-Create confirms receipt of all garments',
|
||||
awardCeremony: 'Award',
|
||||
ceremonyLabel: 'Ceremony',
|
||||
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',
|
||||
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.',
|
||||
|
||||
@@ -16,9 +16,9 @@ export default {
|
||||
howToApply: '申请方法',
|
||||
stepByStep: '步骤指南',
|
||||
step1Title: '1. 成为 AiDA 订阅用户',
|
||||
step1Desc: '所有申请者在提交时必须是\n活跃的AiDA订阅用户。\n您可以选择按月或按年订阅。',
|
||||
step1Desc: '所有申请者在提交时必须是\n活跃的AiDA订阅用户。\n您可以选择按月或按年订阅。',
|
||||
step2Title: '2. 通过 AiDA 设计您的作品',
|
||||
step2Desc: '申请者必须仅使用AiDA\n平台完成设计作品。',
|
||||
step2Desc: '申请者必须仅使用AiDA\n平台完成设计作品。',
|
||||
step2ListTitle: '您的作品应清楚体现以下内容:',
|
||||
step2List: ['AiDA在创作中的应用方式', '您的设计理念和创意方向', 'AI与人类创意的融合'],
|
||||
step3Title: '3. 准备提交材料',
|
||||
@@ -60,7 +60,7 @@ export default {
|
||||
regular3: '主办的',
|
||||
bold3: '国际设计竞赛,\n',
|
||||
regular4:
|
||||
'旨在庆祝人工只能赋能下的未来创意。该赛事汇聚来自世界各地的设计师,\n将AI视为创意伙伴,突破传统时尚边界,探索技术与人类想象力结合的无限可能。',
|
||||
'旨在庆祝人工只能赋能下的未来创意。该赛事汇聚来自世界各地的设计师,\n将AI视为创意伙伴,突破传统时尚边界,探索技术与人类想象力结合的无限可能。',
|
||||
bold4: '',
|
||||
regular5: ''
|
||||
},
|
||||
@@ -85,7 +85,7 @@ export default {
|
||||
gregoryCountry: '(意大利)',
|
||||
annie: '周大福珠宝集团首席运营官',
|
||||
annieCountry: '(中国香港)',
|
||||
xaven: '《Madame Figaro FłehX》总经理兼编辑总监',
|
||||
xaven: '《Madame Figaro 香港版》总经理兼编辑总监',
|
||||
xavenCountry: '(中国香港)',
|
||||
desmond: '《Vogue 新加坡版》主编',
|
||||
desmondCountry: '(新加坡)'
|
||||
@@ -113,7 +113,7 @@ export default {
|
||||
creativityDesc: '作品应展现设计师的艺术视野与卓越设计水准,体现高水平的创意表达与专业执行力。',
|
||||
aidaIntegration: 'AiDA 创意整合程度',
|
||||
aidaIntegrationDesc:
|
||||
'作品应充分利用 AiDA 功能, 展现 AI 辅助创作在设计中的 有效应用与创新整合。',
|
||||
'作品应充分利用 AiDA 功能, 展现 AI 辅助创作在设计中的有效应用与创新整合。',
|
||||
execution: '样衣做工',
|
||||
executionDesc: '作品应具备高水平的呈现质量与精湛的技术工艺,体现专业执行力与细节把控能力。',
|
||||
totalCashPrizes: '最高可达9,000美元',
|
||||
@@ -129,24 +129,24 @@ export default {
|
||||
timelineApplicationLabel: '申请期限',
|
||||
timelineDeadlineLabel: '',
|
||||
timeJul15: '7月15日',
|
||||
applicationDeadlineDesc: '申请截止日期及\n作品审核流程开始',
|
||||
applicationDeadlineDesc: '申请截止并开始评审',
|
||||
twentyFinalistsAnnounced: '20名入围决赛',
|
||||
announcedLabel: '选手揭晓',
|
||||
timeAug30: '8月30日',
|
||||
twentyFinalistsDesc: '公布进入终评阶段\n的20名入围决赛选手',
|
||||
twentyFinalistsDesc: '20名入围者被选入\n最终评审阶段',
|
||||
finalistSubmission: '入围作品',
|
||||
submissionLabel: '提交最后期限',
|
||||
timeSept30: '9月30日',
|
||||
finalistSubmissionDesc:
|
||||
'入围决赛选手需提交设计作品,\n并将成衣实物寄送至Code-\nCreate(地址另行通知)',
|
||||
'入围者提交作品并将服装寄送至Code-Create',
|
||||
receivingOutfits: '收到成衣期限',
|
||||
fromFinalistsLabel: '',
|
||||
timeOctober: '10月23日',
|
||||
receivingOutfitsDesc: 'Code-Create需确认收到\n入围决赛选手的成衣实物',
|
||||
receivingOutfitsDesc: 'Code-Create确认收到\n所有服装作品',
|
||||
awardCeremony: '奖项颁发仪式',
|
||||
ceremonyLabel: '',
|
||||
timeNov12: '11月12日',
|
||||
awardCeremonyDesc: '颁奖盛典与设计师社\n群聚会 – 香港Soho House',
|
||||
awardCeremonyDesc: '颁奖盛典及交流活动于\n香港 Soho House 举行',
|
||||
submissionSuccessful: '提交成功',
|
||||
submissionSuccessfulDesc:
|
||||
'请在 AiDA 平台内的消息中查看您提交的信息。如有需要,您可以进行修改。\n比赛的最新消息和结果将通过邮箱发送。',
|
||||
@@ -160,7 +160,7 @@ export default {
|
||||
wechatTitle: '微信公众号',
|
||||
wechatDesc: '请使用微信扫描二维码',
|
||||
copyRight: '© 2026 Code-Create | 保留所有权利',
|
||||
copyRightTips: '*所有信息如有变动,请以官方最新公布为准'
|
||||
copyRightTips: '*所有信息如有变动,请以官方最新公布为准。'
|
||||
},
|
||||
AwardApply: {
|
||||
// 页面主标题区域
|
||||
|
||||
@@ -1,7 +1,12 @@
|
||||
import i18n, { getLocaleByPath } from '@/lang'
|
||||
import { trackRouteEntry } from '@/utils/tracking'
|
||||
import router from './index'
|
||||
|
||||
router.beforeEach((to, _from, next) => {
|
||||
i18n.global.locale.value = getLocaleByPath(to.path)
|
||||
next()
|
||||
})
|
||||
|
||||
router.afterEach(() => {
|
||||
trackRouteEntry()
|
||||
})
|
||||
|
||||
@@ -144,7 +144,8 @@ export const Https = {
|
||||
getContestantByID: '/api/global-award/contestants/', // 获取表单
|
||||
getContestCount: '/api/global-award/contestants/count', // 获取已提交申请总数
|
||||
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) {
|
||||
|
||||
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
|
||||
})
|
||||
}
|
||||
|
||||
// 生成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 {
|
||||
isEmail,
|
||||
getUploadUrl,
|
||||
@@ -699,5 +709,6 @@ export {
|
||||
calculateGradientCoordinate,
|
||||
segmentImage,
|
||||
UrlToFile,
|
||||
sketchToMask
|
||||
sketchToMask,
|
||||
generateUuid
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
</template>
|
||||
|
||||
<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 { gsap } from 'gsap'
|
||||
import jae from '@/assets/images/award/jae.png'
|
||||
@@ -38,44 +38,52 @@ import desmond from '@/assets/images/award/desmond.png'
|
||||
const { t } = useI18n()
|
||||
const isMobile = inject<boolean>('isMobile')
|
||||
const isPad = inject<boolean>('isPad')
|
||||
const judgements = [
|
||||
{
|
||||
picture: jae,
|
||||
name: 'Jae Hyuk Lim',
|
||||
desc: 'AwardsPage.judgesHat.jae',
|
||||
region: 'AwardsPage.judgesHat.jaeCountry'
|
||||
},
|
||||
{
|
||||
picture: rosiexia,
|
||||
name: 'Rosie Xia',
|
||||
desc: 'AwardsPage.judgesHat.rosie',
|
||||
region: 'AwardsPage.judgesHat.rosieCountry'
|
||||
},
|
||||
{
|
||||
picture: gregory,
|
||||
name: 'Gregory de la Hogue Moran',
|
||||
desc: 'AwardsPage.judgesHat.gregory',
|
||||
region: 'AwardsPage.judgesHat.gregoryCountry'
|
||||
},
|
||||
{
|
||||
picture: annie,
|
||||
name: 'Annie Wong',
|
||||
desc: 'AwardsPage.judgesHat.annie',
|
||||
region: 'AwardsPage.judgesHat.annieCountry'
|
||||
},
|
||||
{
|
||||
picture: xaven,
|
||||
name: 'Xaven Mak',
|
||||
desc: 'AwardsPage.judgesHat.xaven',
|
||||
region: 'AwardsPage.judgesHat.xavenCountry'
|
||||
},
|
||||
{
|
||||
picture: desmond,
|
||||
name: 'Desmond Lim',
|
||||
desc: 'AwardsPage.judgesHat.desmond',
|
||||
region: 'AwardsPage.judgesHat.desmondCountry'
|
||||
}
|
||||
]
|
||||
const judgements = computed(() => {
|
||||
return [
|
||||
{
|
||||
picture: jae,
|
||||
name: 'Jae Hyuk Lim',
|
||||
desc: 'AwardsPage.judgesHat.jae',
|
||||
region: 'AwardsPage.judgesHat.jaeCountry',
|
||||
order: 1
|
||||
},
|
||||
{
|
||||
picture: rosiexia,
|
||||
name: 'Rosie Xia',
|
||||
desc: 'AwardsPage.judgesHat.rosie',
|
||||
region: 'AwardsPage.judgesHat.rosieCountry',
|
||||
order: isMobile.value ? 3 : 2
|
||||
},
|
||||
{
|
||||
picture: gregory,
|
||||
name: 'Gregory de la Hogue Moran',
|
||||
desc: 'AwardsPage.judgesHat.gregory',
|
||||
region: 'AwardsPage.judgesHat.gregoryCountry',
|
||||
order: isMobile.value ? 2 : 4
|
||||
},
|
||||
{
|
||||
picture: annie,
|
||||
name: 'Annie Wong',
|
||||
desc: 'AwardsPage.judgesHat.annie',
|
||||
region: 'AwardsPage.judgesHat.annieCountry',
|
||||
order: isMobile.value ? 4 : 5
|
||||
},
|
||||
{
|
||||
picture: xaven,
|
||||
name: 'Xaven Mak',
|
||||
desc: 'AwardsPage.judgesHat.xaven',
|
||||
region: 'AwardsPage.judgesHat.xavenCountry',
|
||||
order: 6
|
||||
},
|
||||
{
|
||||
picture: desmond,
|
||||
name: 'Desmond Lim',
|
||||
desc: 'AwardsPage.judgesHat.desmond',
|
||||
region: 'AwardsPage.judgesHat.desmondCountry',
|
||||
order: isMobile.value ? 5 : 3
|
||||
}
|
||||
].sort((a,b)=>a.order - b.order)
|
||||
})
|
||||
|
||||
const judgesTitleRef = ref<HTMLElement | null>(null)
|
||||
const judgesSubTitleRef = ref<HTMLElement | null>(null)
|
||||
|
||||
@@ -21,15 +21,10 @@
|
||||
<div class="vertical-content">
|
||||
<div class="vertical-time">{{ $t(item.time) }}</div>
|
||||
<div class="vertical-label">
|
||||
{{ $t(item.label) }}{{ locale === 'ENGLISH' ? ' ' + $t(item.subLabel) : '' }}
|
||||
<!-- <template v-if="isMobile">
|
||||
|
||||
</template> -->
|
||||
{{ $t(item.label) }}{{ locale === 'ENGLISH' ? ' ' + $t(item.subLabel) : $t(item.subLabel) }}
|
||||
</div>
|
||||
<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>
|
||||
@@ -416,8 +411,8 @@ onBeforeUnmount(() => {
|
||||
font-size: 2rem;
|
||||
text-align: center;
|
||||
color: #e0e0e0;
|
||||
width: 100%;
|
||||
max-width: 31.2rem;
|
||||
width: 22rem;
|
||||
// max-width: 22rem;
|
||||
min-height: 10.2rem;
|
||||
white-space: pre-line;
|
||||
display: flex;
|
||||
|
||||
Reference in New Issue
Block a user