diff --git a/src/assets/images/award/arrow_right.png b/src/assets/images/award/arrow_right.png
index 8bd157a6..99b39a6f 100644
Binary files a/src/assets/images/award/arrow_right.png and b/src/assets/images/award/arrow_right.png differ
diff --git a/src/assets/images/award/banner_chinese.mp4 b/src/assets/images/award/banner_chinese.mp4
new file mode 100644
index 00000000..7341fe73
Binary files /dev/null and b/src/assets/images/award/banner_chinese.mp4 differ
diff --git a/src/lang/cn.ts b/src/lang/cn.ts
index fa796c2d..0e3f6d61 100644
--- a/src/lang/cn.ts
+++ b/src/lang/cn.ts
@@ -1858,14 +1858,16 @@ export default {
uploadSuccess: '上传成功',
uploadFailed: '上传失败',
pdfFileTip: 'PDF文件,不超过20MB',
- videoFileTip: '视频文件(MP4, MOV),1080p,不超过100MB'
+ videoFileTip: '视频文件(MP4, MOV),1080p,不超过100MB',
+ wechatTitle: '微信公众号',
+ wechatDesc: '请使用微信扫描二维码'
},
AwardApply: {
// 页面主标题区域
applicationForm: '参赛表格',
emailVerification: '邮箱验证',
aidaUsersOnly: '仅限 AiDA 用户',
- slogan: '绽放你的创意 • AiDA 全球时设计奖 2026',
+ slogan: '绽放你的创意 • AiDA 全球设计奖 2026',
// 邮箱验证部分
emailAddress: '邮箱',
sendCode: '发送验证码',
@@ -1952,6 +1954,7 @@ export default {
uploadPdfOnly: '请仅上传 PDF 文件。',
uploadVideoOnly: '请仅上传 MP4 或 MOV 文件。',
fileSizeExceeds: '文件大小超过 {sizeLimit} 限制。请上传较小的文件。',
+ videoDurationExceeds: '视频时长不可超过60秒',
uploadFailed: '上传失败'
}
}
diff --git a/src/lang/en.ts b/src/lang/en.ts
index aeca6a52..420c3f95 100644
--- a/src/lang/en.ts
+++ b/src/lang/en.ts
@@ -1926,18 +1926,21 @@ export default {
uploadSuccess: 'Uploaded Successfully',
uploadFailed: 'Upload failed',
pdfFileTip: 'PDF file, max 20MB',
- videoFileTip: 'Video file (MP4, MOV), 1080p, max 100MB'
+ videoFileTip: 'Video file (MP4, MOV), 1080p, max 100MB',
+ wechatTitle: 'WeChat Official Account',
+ wechatDesc: 'Scan the QR code in WeChat'
},
AwardApply: {
// 页面主标题区域
applicationForm: 'Application Form',
emailVerification: 'Email Verification',
aidaUsersOnly: 'AiDA Users Only',
- slogan: 'BLOOM YOUR CREATIVITY • AiDA GLOBAL FASHION AWARD 2026',
+ slogan: 'BLOOM YOUR CREATIVITY • AIDA GLOBAL DESIGN AWARDS 2026',
// 邮箱验证部分
emailAddress: 'Email Address',
sendCode: 'Send Code',
- pleaseUseRegisteredEmail: 'Please use the email address you registered with AiDA.',
+ pleaseUseRegisteredEmail:
+ 'Please use the email address you registered with AiDA.',
// 个人信息部分
personalInformation: 'Personal Information',
tellUsAboutYourself: 'Tell us about yourself',
@@ -1958,7 +1961,8 @@ export default {
shareYourCreativeVision: 'Share your creative vision',
designTitle: 'Design Title',
designDescription: 'Design description',
- designDescriptionPlaceholder: 'Briefly describe your design concept, inspiration, and creative direction...',
+ designDescriptionPlaceholder:
+ 'Briefly describe your design concept, inspiration, and creative direction...',
// 提交文件部分
submissionFiles: 'Submission Files',
uploadYourDesignMaterials: 'Upload your design materials',
@@ -1978,13 +1982,18 @@ export default {
videoFileLimit: 'Video file (MP4, MOV), 1080p, max 100MB',
// 条款与条件
termsAndConditions: 'Terms & Conditions',
- conditionFirst: 'I confirm that all submitted work is original and created by me.',
- conditionSecond: 'I understand that Code-Create has marketing and promotional rights to all submitted designs and videos.',
- conditionThird: 'I agree to participate in finalist activities if selected, including AiDA training and award ceremony.',
- conditionFourth: 'I would like to receive updates about AiDA products and future competitions. (Optional)',
+ conditionFirst:
+ 'I confirm that all submitted work is original and created by me.',
+ conditionSecond:
+ 'I understand that Code-Create has marketing and promotional rights to all submitted designs and videos.',
+ conditionThird:
+ 'I agree to participate in finalist activities if selected, including AiDA training and award ceremony.',
+ conditionFourth:
+ 'I would like to receive updates about AiDA products and future competitions. (Optional)',
// 提交按钮
submitYourDesign: 'Submit your Design',
- unfinishedFormTip: 'The link in the AiDA in-platform message will save your unfinished form.',
+ unfinishedFormTip:
+ 'The link in the AiDA in-platform message will save your unfinished form.',
// 验证码弹窗
checkYourEmail: 'Check your email',
enterSixDigitCode: 'Enter the 6-digit code sent to',
@@ -2018,7 +2027,10 @@ export default {
pleaseUploadVideo: 'Please upload your video',
uploadPdfOnly: 'Please upload a PDF file only.',
uploadVideoOnly: 'Please upload a MP4 or MOV file only.',
- fileSizeExceeds: 'File size exceeds {sizeLimit} limit. Please upload a smaller file.',
+ fileSizeExceeds:
+ 'File size exceeds {sizeLimit} limit. Please upload a smaller file.',
+ videoDurationExceeds:
+ 'Video duration exceeds 60 seconds limit. Please upload a shorter video.',
uploadFailed: 'Upload failed'
}
}
diff --git a/src/views/AwardPage/apply.vue b/src/views/AwardPage/apply.vue
index 51b5c2a1..21207b86 100644
--- a/src/views/AwardPage/apply.vue
+++ b/src/views/AwardPage/apply.vue
@@ -9,7 +9,9 @@
class="form-header"
v-if="!isCompleted && !isExpired"
>
-
{{ t('AwardApply.emailVerification') }}
+
+ {{ t('AwardApply.emailVerification') }}
+
{{ t('AwardApply.aidaUsersOnly') }}
@@ -63,7 +65,9 @@
@@ -109,8 +113,12 @@
-
-
{{ t('AwardApply.termsAndConditions') }}
-
-
-
-
- {{ t('AwardApply.' + item.translationKey) }}
-
- *
+
+
+ {{ t('AwardApply.termsAndConditions') }}
+
+
+
+
+
+ {{ t('AwardApply.' + item.translationKey) }}
+
+ *
+
-
+
-
-
-
- {{ t('AwardApply.submitYourDesign') }}
+
+
+ {{ t('AwardApply.submitYourDesign') }}
+
+
+ {{ t('AwardApply.unfinishedFormTip') }}
+
-
- {{ t('AwardApply.unfinishedFormTip') }}
-
-
{{ t('AwardApply.checkYourEmail') }}
-
{{ t('AwardApply.enterSixDigitCode') }} {{ form.email }}
+
+ {{ t('AwardApply.enterSixDigitCode') }}
+
+ {{ form.email }}
+
{{
isCountingDown
- ? `${t('AwardApply.resendCodeIn')} ${formatCountdown(countdown)}`
+ ? `${t('AwardApply.resendCodeIn')} ${formatCountdown(
+ countdown
+ )}`
: t('AwardApply.resendCode')
}}
@@ -436,6 +460,7 @@
designDescription: '',
pdfPath: '',
videoPath: '',
+ videoDuration: 0,
secureToken: ''
})
const hasValidEmail = computed(() => {
@@ -493,18 +518,36 @@
const rulesRef = {
email: [{ required: true, validator: validEmail }],
firstName: [
- { required: true, message: t('AwardApply.pleaseInputFirstName'), trigger: 'blur' }
+ {
+ required: true,
+ message: t('AwardApply.pleaseInputFirstName'),
+ trigger: 'blur'
+ }
],
lastName: [
- { required: true, message: t('AwardApply.pleaseInputLastName'), trigger: 'blur' }
+ {
+ required: true,
+ message: t('AwardApply.pleaseInputLastName'),
+ trigger: 'blur'
+ }
],
gender: [
- { required: true, message: t('AwardApply.pleaseSelectGender'), trigger: 'blur' }
+ {
+ required: true,
+ message: t('AwardApply.pleaseSelectGender'),
+ trigger: 'blur'
+ }
],
occupation: [
- { required: true, message: t('AwardApply.pleaseInputOccupation'), trigger: 'blur' }
+ {
+ required: true,
+ message: t('AwardApply.pleaseInputOccupation'),
+ trigger: 'blur'
+ }
+ ],
+ age: [
+ { required: true, message: t('AwardApply.pleaseInputAge'), trigger: 'blur' }
],
- age: [{ required: true, message: t('AwardApply.pleaseInputAge'), trigger: 'blur' }],
countryRegionCity: [
{
required: true,
@@ -515,7 +558,11 @@
phoneNumber: [{ required: true, validator: validatePhone, trigger: 'blur' }],
designTitle: [
- { required: true, message: t('AwardApply.pleaseInputDesignTitle'), trigger: 'blur' }
+ {
+ required: true,
+ message: t('AwardApply.pleaseInputDesignTitle'),
+ trigger: 'blur'
+ }
],
designDescription: [
{
@@ -524,9 +571,15 @@
trigger: 'blur'
}
],
- pdfPath: [{ required: true, message: t('AwardApply.pleaseUploadPdf'), trigger: 'null' }],
+ pdfPath: [
+ { required: true, message: t('AwardApply.pleaseUploadPdf'), trigger: 'null' }
+ ],
videoPath: [
- { required: true, message: t('AwardApply.pleaseUploadVideo'), trigger: 'null' }
+ {
+ required: true,
+ message: t('AwardApply.pleaseUploadVideo'),
+ trigger: 'null'
+ }
]
}
@@ -760,7 +813,24 @@
}
// 统一的文件上传前验证
- const beforeUploadFile = (type: FileType, file: File) => {
+ // 获取视频时长
+ const getVideoDuration = (file: File): Promise
=> {
+ return new Promise((resolve, reject) => {
+ const video = document.createElement('video')
+ video.preload = 'metadata'
+ video.onloadedmetadata = () => {
+ window.URL.revokeObjectURL(video.src)
+ resolve(video.duration)
+ }
+ video.onerror = () => {
+ window.URL.revokeObjectURL(video.src)
+ reject(new Error('Failed to load video'))
+ }
+ video.src = window.URL.createObjectURL(file)
+ })
+ }
+
+ const beforeUploadFile = async (type: FileType, file: File) => {
if (!hasValidEmail.value) {
message.error(t('AwardApply.pleaseVerifyEmailFirst'))
return Upload.LIST_IGNORE
@@ -792,42 +862,33 @@
if (!isValidType) {
message.error(errorMessage)
- // 从文件列表中移除
- // if (type === 'pdf') {
- // const index = pdfList.value.findIndex(item => item.uid === file.uid)
- // if (index > -1) {
- // pdfList.value.splice(index, 1)
- // }
- // } else {
- // const index = videoList.value.findIndex(item => item.uid === file.uid)
- // if (index > -1) {
- // videoList.value.splice(index, 1)
- // }
- // }
+
return Upload.LIST_IGNORE
}
// 验证文件大小
if (file.size > maxSize) {
const sizeLimit = type === 'pdf' ? '20MB' : '100MB'
- message.error(
- t('AwardApply.fileSizeExceeds', { sizeLimit })
- )
- // 从文件列表中移除
- // if (type === 'pdf') {
- // const index = pdfList.value.findIndex(item => item.uid === file.uid)
- // if (index > -1) {
- // pdfList.value.splice(index, 1)
- // }
- // } else {
- // const index = videoList.value.findIndex(item => item.uid === file.uid)
- // if (index > -1) {
- // videoList.value.splice(index, 1)
- // }
- // }
+ message.error(t('AwardApply.fileSizeExceeds', { sizeLimit }))
+
return Upload.LIST_IGNORE
}
+ // 验证视频时长
+ let duration = 0
+ if (type === 'video') {
+ duration = await getVideoDuration(file)
+ try {
+ if (duration > 60) {
+ message.error(t('AwardApply.videoDurationExceeds'))
+ return Upload.LIST_IGNORE
+ }
+ } catch (error) {
+ console.error('Failed to get video duration:', error)
+ }
+ }
+ form.value.videoDuration = Math.ceil(duration)
+
return true
}
@@ -933,7 +994,9 @@
const status = info.file.status
if (status === 'done') {
- message.success(t('AwardApply.fileUploadedSuccess', { fileName: info.file.name }))
+ message.success(
+ t('AwardApply.fileUploadedSuccess', { fileName: info.file.name })
+ )
if (type === 'pdf') {
isUploadingPdf.value = false
uploadProgressPdf.value = 0
@@ -957,9 +1020,9 @@
}
}
- // 统一的上传处理函数
const handleUploadFile = async (option: any, type: FileType) => {
const file = option.file as File
+ //
if (!form.value.email) {
message.error(t('AwardApply.pleaseInputEmail'))
@@ -1247,7 +1310,7 @@
}
}
// :deep(.ant-select-arrow) {
-
+
// justify-content: center;
// display: flex;
// align-items: center;
@@ -1552,6 +1615,13 @@
font-size: 1.6rem;
line-height: 3.4rem;
margin-top: 1.4rem;
+ text-align: center;
+ .email-verify {
+ color: #232323;
+ font-family: 'ArialBold';
+ font-weight: 700;
+ font-size: 1.6rem;
+ }
}
.email {
diff --git a/src/views/AwardPage/components/JudgesSection.vue b/src/views/AwardPage/components/JudgesSection.vue
index 16663d15..a53efdf9 100644
--- a/src/views/AwardPage/components/JudgesSection.vue
+++ b/src/views/AwardPage/components/JudgesSection.vue
@@ -202,6 +202,9 @@ onBeforeUnmount(() => {
column-gap: 23.22rem;
row-gap: 8rem;
padding: 0 25rem 0 26.6rem;
+ div{
+ text-align: center;
+ }
.judgement-item {
overflow: hidden;
.picture {
diff --git a/src/views/AwardPage/components/PrizesSection.vue b/src/views/AwardPage/components/PrizesSection.vue
index ea339ab4..986bc0c4 100644
--- a/src/views/AwardPage/components/PrizesSection.vue
+++ b/src/views/AwardPage/components/PrizesSection.vue
@@ -52,6 +52,13 @@
const { t } = useI18n()
+ const props = defineProps({
+ isZh: {
+ type: Boolean,
+ default: false
+ }
+ })
+
const prizes = [
{
money: 'AwardsPage.grandMoney',
@@ -83,11 +90,8 @@
{
money: 'AwardsPage.awardCertification',
name: 'AwardsPage.finalists',
- desc: [
- 'AwardsPage.TravelAllowance',
- 'AwardsPage.globalMediaExposure'
- ],
- smaller: true
+ desc: ['AwardsPage.TravelAllowance', 'AwardsPage.globalMediaExposure'],
+ smaller: !props.isZh
}
]
diff --git a/src/views/AwardPage/container.vue b/src/views/AwardPage/container.vue
index f25c070c..9958fd57 100644
--- a/src/views/AwardPage/container.vue
+++ b/src/views/AwardPage/container.vue
@@ -83,12 +83,12 @@
class="close-icon"
@click="handleCloseQRcode"
/>
- WeChat Official Account
+ {{ $t('AwardsPage.wechatTitle') }}
- Scan the QR code in WeChat
+ {{ $t('AwardsPage.wechatDesc') }}
diff --git a/src/views/AwardPage/index.vue b/src/views/AwardPage/index.vue
index d0df6859..923e6228 100644
--- a/src/views/AwardPage/index.vue
+++ b/src/views/AwardPage/index.vue
@@ -1,8 +1,11 @@
-
+
-
-
{{ $t('AwardsPage.submitApplication') }}
-

-
{{ $t('AwardsPage.applicationDeadline') }}
-
+
+
{{ $t('AwardsPage.submitApplication') }}
+

+
{{ $t('AwardsPage.applicationDeadline') }}
+
-
+