Compare commits

..

7 Commits

Author SHA1 Message Date
f74d4d3099 feat: 访问埋点 2026-05-13 17:13:25 +08:00
cf55389181 style: 文字排版 2026-05-06 13:20:52 +08:00
c710394293 style: 文字宽度 2026-05-06 13:08:17 +08:00
512cf36baf feat: 终版修改 2026-05-06 11:30:41 +08:00
dc72a132bd style: 手机端timeline文案 2026-04-23 09:34:14 +08:00
a781b433f6 style: 文案修改 2026-04-22 16:08:37 +08:00
81adcb4bc4 feat: 不再缓存语言,不带/cn就用英文 2026-04-22 15:39:57 +08:00
14 changed files with 200 additions and 133 deletions

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

View File

@@ -0,0 +1,4 @@
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="20" height="20" rx="3" fill="white"/>
<path d="M17.6865 6.63967C17.514 5.99433 17.0057 5.486 16.3603 5.3135C15.1907 5 10.5 5 10.5 5C10.5 5 5.80933 5 4.63967 5.3135C3.99433 5.486 3.486 5.99433 3.3135 6.63967C3 7.80933 3 10.25 3 10.25C3 10.25 3 12.6907 3.3135 13.8603C3.486 14.5057 3.99433 15.014 4.63967 15.1865C5.80933 15.5 10.5 15.5 10.5 15.5C10.5 15.5 15.1907 15.5 16.3603 15.1865C17.0057 15.014 17.514 14.5057 17.6865 13.8603C18 12.6907 18 10.25 18 10.25C18 10.25 18 7.80933 17.6865 6.63967ZM9 12.5V8L12.897 10.25L9 12.5Z" fill="#232323"/>
</svg>

After

Width:  |  Height:  |  Size: 659 B

View File

@@ -38,6 +38,7 @@ export default {
fileNameDesc: 'AiDAGlobalDesignAward\n2026_[Your Full Name]',
designPortfolio: 'Design Portfolio(PDF)',
submitPdf: 'Submit one single PDF file that includes:',
designCollection:'A design collection of 4 outfits',
requiredStructure: 'Required structure:',
pdfDesignTitle: 'Design title',
pdfMoodboard: 'Moodboard',
@@ -123,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',
@@ -134,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.',
@@ -204,7 +205,7 @@ export default {
submissionFiles: 'Submission Files',
uploadYourDesignMaterials: 'Upload your design materials',
submissionRequirements: 'Submission Requirements',
pdfRequirement: `Single PDF file\n Title, mood board, elaboration\n+ 4 outfit design with materials (max 15 pages)`,
pdfRequirement: `Single PDF file\n Title, mood board, elaboration\n+ a design collection of 4 outfits (max 15 pages)`,
rightContent: {
format: 'Format: Single PDF file, 15 pages, maximum 20MB',
video: `Video: Design process, 1080×1920 pixels (9:16 ratio), maximum 60 seconds`

View File

@@ -6,6 +6,26 @@ import { createI18n } from 'vue-i18n'
import enLocale from './en'
import zhLocale from './zh-cn'
export type AppLocale = 'ENGLISH' | 'CHINESE_SIMPLIFIED'
const DEFAULT_LOCALE: AppLocale = 'ENGLISH'
const LANG_PREFIX_RE = /^\/(cn|en)(?=\/|$)/
const CN_PREFIX_RE = /^\/cn(?=\/|$)/
export const getLocaleByPath = (path = ''): AppLocale => {
return CN_PREFIX_RE.test(path) ? 'CHINESE_SIMPLIFIED' : DEFAULT_LOCALE
}
export const getPathByLocale = (path: string, locale: AppLocale) => {
const normalizedPath = path.replace(LANG_PREFIX_RE, '') || '/'
if (locale === 'CHINESE_SIMPLIFIED') {
return normalizedPath === '/' ? '/cn' : `/cn${normalizedPath}`
}
return normalizedPath
}
// 语言配置整合
const messages = {
ENGLISH: {
@@ -20,7 +40,7 @@ const messages = {
const i18n = createI18n({
legacy: false,
globalInjection: true, // 全局模式,可以直接使用 $t
locale: 'ENGLISH',
locale: getLocaleByPath(typeof window === 'undefined' ? '/' : window.location.pathname),
messages: messages
})

View File

@@ -1,7 +1,7 @@
export default {
AwardsPage: {
submitApplication: '提交申请',
beforeStart:'申请开启在即...',
beforeStart: '申请开启在即...',
submitMobile: '申请',
contactUs: '联系我们',
contactHeader: '有关比赛,欢迎咨询',
@@ -12,13 +12,13 @@ export default {
copyMailAddress: '复制邮件地址',
sendEmailFailed: '无法打开邮件客户端,我们已将邮箱地址复制到您的剪贴板。',
applicationDeadline: '申请期限:\n2026年7月15日',
beforeStartDDL:'开放申请:\n2026.05.15 07.15',
beforeStartDDL: '开放申请:\n2026.05.15 07.15',
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. 准备提交材料',
@@ -33,6 +33,7 @@ export default {
fileNameDesc: 'AiDAGlobalDesignAward\n2026_[你的名字]',
designPortfolio: '设计作品集(PDF)',
submitPdf: '提交一份包含以下内容的单一PDF文件',
designCollection: '一个包含4套服装的系列',
requiredStructure: '',
pdfDesignTitle: '设计标题',
pdfMoodboard: '灵感板,情绪板',
@@ -42,12 +43,12 @@ export default {
pdfMaxPages: '最多15页',
pdfMaxSize: '最大文件大小不超过20MB',
pdfLanguage: '语言:英文,或本国语言附带英文翻译',
step4Title: '4. 决赛入围选手提交要求',
step4Title: '4. 入围决赛选手提交要求',
step4Subtitle: '(前20名设计师)',
step4Desc: '入围的20名决赛选手需提交实体服装以供最终评审。',
step4Desc: '20名入围决赛选手需提交实体服装以供最终评审。',
finalistPieces: '件数1件套装',
finalistBasedOn: '服装要求必须根据提交的AiDA生成设计制作',
finalistShipping: '运输说明\n将由Code-Create提供',
finalistShipping: '运输说明由Code-Create提供',
bloomYourCreativity: '绽放你的创造力',
themeOf2026: '赛事主题',
bloomText: {
@@ -59,7 +60,7 @@ export default {
regular3: '主办的',
bold3: '国际设计竞赛,\n',
regular4:
'旨在庆祝人工只能赋能下的未来创意。该赛事汇聚来自世界各地的设计师,\n将AI视为创意伙伴,突破传统时尚边界,探索技术与人类想象力结合的无限可能。',
'旨在庆祝人工只能赋能下的未来创意。该赛事汇聚来自世界各地的设计师,\n将AI视为创意伙伴突破传统时尚边界探索技术与人类想象力结合的无限可能。',
bold4: '',
regular5: ''
},
@@ -84,7 +85,7 @@ export default {
gregoryCountry: '(意大利)',
annie: '周大福珠宝集团首席运营官',
annieCountry: '(中国香港)',
xaven: '《Madame Figaro FłehX》总经理兼编辑总监',
xaven: '《Madame Figaro 香港版》总经理兼编辑总监',
xavenCountry: '(中国香港)',
desmond: '《Vogue 新加坡版》主编',
desmondCountry: '(新加坡)'
@@ -98,12 +99,12 @@ export default {
grandAwards: '最高奖项',
goldAwards: '金奖',
silverAwards: '银奖',
finalists: '决赛选手',
finalists: '入围决赛选手',
cashAward: '现金奖励',
awardCertificate: '获奖证书',
globalMediaExposure: '全球媒体曝光',
awardCertification: '获奖认证',
TravelAllowance: '差旅贴',
TravelAllowance: '差旅贴',
selectionCriteria: '作品评选',
evaluation: '考量标准',
originality: '原创性',
@@ -112,7 +113,7 @@ export default {
creativityDesc: '作品应展现设计师的艺术视野与卓越设计水准,体现高水平的创意表达与专业执行力。',
aidaIntegration: 'AiDA 创意整合程度',
aidaIntegrationDesc:
'作品应充分利用 AiDA 功能, 展现 AI 辅助创作在设计中的 有效应用与创新整合。',
'作品应充分利用 AiDA 功能, 展现 AI 辅助创作在设计中的有效应用与创新整合。',
execution: '样衣做工',
executionDesc: '作品应具备高水平的呈现质量与精湛的技术工艺,体现专业执行力与细节把控能力。',
totalCashPrizes: '最高可达9,000美元',
@@ -122,29 +123,30 @@ export default {
networkingOpportunities: '链接全球行业人脉',
networkingOpportunitiesLabel: '对接设计师与行业领军人物',
awardCeremonyHongKong: '香港颁奖盛会​',
awardCeremonyLabel: '入围享有差旅津贴',
awardCeremonyLabel: '入围决赛选手享有差旅津贴',
competitionTimeline: '赛事时间表',
shapingTheFuture: '重要节点',
timelineApplicationLabel: '申请期限',
timelineDeadlineLabel: '',
timeJul15: '7月15日',
applicationDeadlineDesc: '申请截止日期及\n作品审核流程开始',
twentyFinalistsAnnounced: '20名入围者揭晓',
announcedLabel: '',
applicationDeadlineDesc: '申请截止并开始评审',
twentyFinalistsAnnounced: '20名入围决赛',
announcedLabel: '选手揭晓',
timeAug30: '8月30日',
twentyFinalistsDesc: '公布进入终评阶段\n的20名入围者',
twentyFinalistsDesc: '20名入围者被选入\n最终评审阶段',
finalistSubmission: '入围作品',
submissionLabel: '提交最后期限',
timeSept30: '9月30日',
finalistSubmissionDesc: '入围选手需在现场提交\n成品作品并将成衣实物寄送\n至Code-Create',
finalistSubmissionDesc:
'入围者提交作品并将服装寄送至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比赛的最新消息和结果将通过邮箱发送。',
@@ -158,7 +160,7 @@ export default {
wechatTitle: '微信公众号',
wechatDesc: '请使用微信扫描二维码',
copyRight: '© 2026 Code-Create | 保留所有权利',
copyRightTips: '*所有信息如有变动,请以官方最新公布为准'
copyRightTips: '*所有信息如有变动,请以官方最新公布为准'
},
AwardApply: {
// 页面主标题区域
@@ -195,7 +197,7 @@ export default {
submissionFiles: '作品上传',
uploadYourDesignMaterials: '上传你的设计材料',
submissionRequirements: '提交要求',
pdfRequirement: `单独PDF文件\n 作品标题、灵感板及情绪板,设计说明\n+ 4套服装设计及材料说明页数最多15页`,
pdfRequirement: `单独PDF文件\n 作品标题、灵感板及情绪板,设计说明\n+ 一个包含4套服装的系列页数最多15页`,
rightContent: {
format: '格式:单个 PDF 文件最多15页最大 20MB',
video: `视频创作过程分辨率1080×1920 像素\n9:16 纵向比例),最长 60 秒`

View File

@@ -1,19 +1,12 @@
import i18n, { getLocaleByPath } from '@/lang'
import { trackRouteEntry } from '@/utils/tracking'
import router from './index'
router.beforeEach((to, from, next) => {
const path = to.path
const list = {
cn: 'CHINESE_SIMPLIFIED',
en: 'ENGLISH'
}
if (path.startsWith('/cn') || (to.params.lang === 'cn')) {
localStorage.setItem('loginLanguage', 'CHINESE_SIMPLIFIED')
} else if (path.startsWith('/en') || (to.params.lang === 'en')) {
localStorage.setItem('loginLanguage', 'ENGLISH')
}
router.beforeEach((to, _from, next) => {
i18n.global.locale.value = getLocaleByPath(to.path)
next()
})
router.afterEach(() => {
trackRouteEntry()
})

View File

@@ -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
View 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)
})
}

View File

@@ -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
}

View File

@@ -92,6 +92,7 @@
<p>
{{ $t('AwardsPage.submitPdf') }}
</p>
<p class="design-collection">{{ $t('AwardsPage.designCollection') }}</p>
<p>{{ $t('AwardsPage.requiredStructure') }}</p>
</div>
<li>{{ $t('AwardsPage.pdfDesignTitle') }}</li>
@@ -604,7 +605,7 @@ ul {
.item-header {
font-size: 2.2rem;
}
.item-desc{
.item-desc {
white-space: normal;
}
.desc-wrapper {
@@ -663,4 +664,7 @@ ul {
}
}
}
.design-collection{
margin-bottom: 3rem;
}
</style>

View File

@@ -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)

View File

@@ -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;

View File

@@ -76,6 +76,9 @@
<a href="https://www.instagram.com/aida_codecreate?igsh=MzRlODBiNWFlZA==" target="_blank">
<img src="@/assets/images/award/instagram.png" alt="" />
</a>
<a href="https://www.youtube.com/@Code-Create_AiDA " target="_blank">
<img src="@/assets/images/award/youtube.svg" alt="" />
</a>
</div>
<div class="copyright flex flex-col">
<p>{{ $t('AwardsPage.copyRight') }}</p>
@@ -187,10 +190,10 @@
</template>
<script setup lang="ts">
import { ref, computed, watch, onMounted } from 'vue'
import { ref, computed, watch } from 'vue'
import { useRoute, useRouter } from 'vue-router'
import { useI18n } from 'vue-i18n'
import { getCookie, setCookie } from '@/utils/cookie'
import { getPathByLocale, type AppLocale } from '@/lang'
import { useMessage } from '@/components/Message/message'
import { useIsMobile, useIsTablet } from '@/utils/isMobile'
@@ -216,19 +219,6 @@ const mobileStyle = computed(() => {
}
})
onMounted(() => {
// 初始化语言设置
const loginLanguage = localStorage.getItem('loginLanguage')
if (loginLanguage) {
locale.value = loginLanguage
} else {
const userLanguage = getCookie('language')
if (userLanguage) {
locale.value = userLanguage
}
}
})
const showQRcode = ref(false)
const handleCloseQRcode = () => {
showQRcode.value = false
@@ -369,24 +359,23 @@ const handleClickCopyEmail = () => {
success(t('AwardsPage.copyMail'))
}
const handleChangeLanguage = (language) => {
if (language === 'CHINESE_SIMPLIFIED') {
locale.value = 'CHINESE_SIMPLIFIED'
} else {
locale.value = 'ENGLISH'
}
localStorage.setItem('loginLanguage', language)
setCookie('language', language)
const handleChangeLanguage = (language: AppLocale) => {
locale.value = language
const targetPath = getPathByLocale(route.path, language)
if (targetPath === route.path) return
router.push({
path: targetPath,
query: { ...route.query },
hash: route.hash
})
}
const handleBtnClick = () => {
if (!start.value) return
const lang = route.params.lang ? `/${route.params.lang}` : ''
if (btnType.value === 'index') {
router.push({ path: `${lang}/contestants`, query: { ...route.query } })
} else {
router.push({ path: `${lang}/`, query: { ...route.query } })
}
const targetPath = getPathByLocale(btnType.value === 'index' ? '/contestants' : '/', locale.value as AppLocale)
router.push({ path: targetPath, query: { ...route.query } })
}
</script>
@@ -471,10 +460,10 @@ const handleBtnClick = () => {
padding-right: 22rem;
background-color: #232323;
.social-list {
column-gap: 2rem;
column-gap: 0.8rem;
img {
width: 2rem;
height: 2rem;
width: 3.8rem;
height: 3.8rem;
}
}
.copyright {

View File

@@ -52,6 +52,7 @@ import bannerPad from '@/assets/images/pad_version/banner_pad.mp4'
import bannerPadZh from '@/assets/images/pad_version/banner_pad_chinese.mp4'
import bannerMobile from '@/assets/images/mobile_version_background/banner_mobile.mp4'
import bannerZhMobile from '@/assets/images/mobile_version_background/banner_mobile_zh.mp4'
import { getPathByLocale, type AppLocale } from '@/lang'
import { useIsMobile, useIsTablet } from '@/utils/isMobile'
const { isMobile } = useIsMobile()
const { isTablet } = useIsTablet()
@@ -88,7 +89,7 @@ const bannerUrl = computed(() => {
const handleSubmitApplication = () => {
if (!start.value) return
router.push({
path: '/contestants',
path: getPathByLocale('/contestants', locale.value as AppLocale),
query: {
...route.query
}
@@ -142,10 +143,12 @@ const handleSubmitApplication = () => {
}
.ddl {
position: absolute;
bottom: -4rem;
left: 0;
top: calc(100% + 1.8rem);
left: 50%;
transform: translateX(-50%);
text-align: center;
width: 41rem;
white-space: nowrap;
font-family: 'ArialBold';
font-weight: 700;
font-size: 2rem;
@@ -185,8 +188,11 @@ const handleSubmitApplication = () => {
.ddl {
white-space: pre-line;
text-align: left;
width: 100%;
padding-left: 4rem;
bottom: -6rem;
top: calc(100% + 2rem);
left: 0;
transform: none;
}
}
}
@@ -199,8 +205,11 @@ const handleSubmitApplication = () => {
.ddl {
white-space: pre-line;
text-align: left;
width: 100%;
padding-left: 4rem;
bottom: -6rem;
top: calc(100% + 2rem);
left: 0;
transform: none;
}
}
}