3a5fe9f7 by zhangmeng

大师课,报名调整

1 parent d41baa03
......@@ -13,28 +13,30 @@
</el-steps>
<div v-if="activeStep==0">
<div class="mb60 xzRich" style="max-height: 50vh;overflow: auto">
<div v-if="language==0" style="width: 300px;margin: auto"><br>
培训地点:无锡君来世尊酒店<br>
详细地址:江苏省 无锡市 滨湖区 和风路111号<br>
报到时间:2024年7月14日13:30 -17:00<br>
联系人:蒋璐<br>
联系电话:15961580050<br>
报名截止日期:<span style="text-decoration: underline">2026-06-30</span><br>
<div v-if="language==0" style="width: 400px;margin: auto"><br>
培训地点:南京国际博览会议中心<br>
详细地址:江苏省南京市建邺区江东中路300号南京国际博览会议中心302、303、402、403。<br>
上课时间:2026年7月13日-7月14日<br>
报到时间:2026年7月12日 13:30- 17:00<br>
联系人:祝昊乐<br>
联系电话:010-67183764<br>
报名截止日期:<span style="text-decoration: underline">2026-07-10</span><br>
</div>
<div v-else style="width: 400px;margin: auto;text-transform: capitalize"><br>
<!-- The age limit for Youth Session: Born between 1st Jan, 2006 and 31st Dec., 2009.<br/>-->
<!-- The age limit for Juvenile Session: Born after 1 Jan., 2010.<br/>-->
Training Camp Venue:Worldhotel Grand Juna Wuxi<br>
Address:No.111 Hefeng Road, Binhu District, Wuxi, Jiangsu<br>
Check-in:From 13:30 to 17:00 on July 14, 2026.<br>
Contact Person:Dean Ding<br>
Tel:+86 19951486130<br>
Registration Deadline:<span style="text-decoration: underline">2026-06-30</span><br>
Training Camp Venue:Nanjing International Exhibition and Convention Center<br>
Address:No. 300 Jiangdong Zhong Road, Jianye District, Nanjing City, Jiangsu Province. Nanjing International Exhibition and Conference Center, Room 302, 303, 402, 403.<br>
Schooltime:July 13th - July 14th, 2026.<br>
Check-in:July 12, 2026 13:30 - 17:0.<br>
Contact Person:Mr.Zhu<br>
Tel:+86 010-67183764<br>
Registration Deadline:<span style="text-decoration: underline">2026-07-10</span><br>
</div>
</div>
<div v-loading="loading" class="text-center">
<el-button v-if="courseList.length>0" class="btn-lineG" round type="primary" @click="setActive(1)">
<span v-if="dayjs().format('YYYY-MM-DD')>'2026-06-30'">
<span v-if="dayjs().format('YYYY-MM-DD')>'2026-07-10'">
{{ language == 0 ? '报名已结束' : 'Registration has ended' }}
</span>
<span v-else>{{ language == 0 ? '下一步' : 'NEXT' }}</span>
......@@ -121,12 +123,12 @@
<img class="mauto" src="@/assets/dance/ok.png">
<h2 class="text-center">{{ language == 0 ? '申请已提交' : 'Submitted successfully' }}</h2>
<h4 v-if="language == 0" class="text-center">
我们已收到您的申请,请在7月14日到无锡报到。
我们已收到您的申请,请在7月14日到南京报到。
</h4>
<h4 v-else>
Your application has been received,
<br>
Please register in Wuxi on July 14.
Please report to Nanjing on July 14th.
</h4>
</div>
<div v-else>
......@@ -151,7 +153,7 @@
</div>
<el-tag
v-if="(form.nationality==240&&c.viewStateCn == 0)||(form.nationality!=240&&c.viewStateEn == 0)"
v-if="(c.viewStateCn == 0)||(c.viewStateEn == 0)"
class="ml20"
effect="dark" type="danger"
>{{ language == 0 ? '已报满' : 'Already full' }}
......@@ -183,7 +185,7 @@
<script setup>
import { useStorage } from '@vueuse/core/index'
import { getCurrentInstance, watch ,onMounted} from 'vue'
import { getCurrentInstance, watch ,onMounted,ref} from 'vue'
import { nextTick } from '@vue/runtime-core'
import { ElMessage, ElMessageBox } from 'element-plus'
import { addInvitation, countryList } from '@/apiPc/match'
......@@ -208,6 +210,8 @@ const rules = ref(
{
nationality: [{ required: true, trigger: 'change', message: language.value == 0 ? '请选择' : 'Please choose' }],
name: [{ required: true, trigger: 'blur', message: language.value == 0 ? '请输入' : 'Please enter' }],
phone: [{ required: true, trigger: 'blur', message: language.value == 0 ? '请输入' : 'Please enter' }],
gender: [{ required: true, trigger: 'blur', message: language.value == 0 ? '请选择' : 'Please choose' }],
email: [{ required: true, trigger: 'blur', message: language.value == 0 ? '请输入' : 'Please enter' }],
birth: [{ required: true, trigger: 'change', message: language.value == 0 ? '请选择' : 'Please choose' }],
passportNo: [{ required: true, trigger: 'blur', message: language.value == 0 ? '请输入' : 'Please enter' }],
......@@ -218,8 +222,11 @@ const rules = ref(
const open = (params) => {
console.log(params)
show.value = true
title.value = language.value == 0 ? '亚洲青少年体育舞蹈公益课' : 'Asian Youth DanceSport Training Camp'
title.value = language.value == 0 ? '2026年亚洲青少年体育舞蹈公益课' : '2026 Asian Youth Sports Dance Charity Class'
cptId.value = params.cptId
form.value={
gender:'0'
}
getCourse()
}
const checkMobile = () => {
......@@ -230,19 +237,19 @@ onMounted(() => {
window.addEventListener('resize', checkMobile)
})
defineExpose({ open })
watch(show, (value) => {
if (!value) {
form.value = {
sex: '0'
}
if (language.value == 0) {
form.value.countryId = 240
}
}
nextTick(() => {
// proxy.$refs['dialogRef'].clearValidate()
})
})
// watch(show, (value) => {
// if (!value) {
// form.value = {
// sex: '0'
// }
// if (language.value == 0) {
// form.value.countryId = 240
// }
// }
// nextTick(() => {
// // proxy.$refs['dialogRef'].clearValidate()
// })
// })
function getCourse() {
// '1777256058082189313'
......@@ -332,6 +339,8 @@ function getCountryList() {
countryList().then(res => {
countrys.value = res.data
})
console.log(countrys.value)
}
const submit = () => {
......
......@@ -303,7 +303,7 @@ const data = reactive({
currProjectId: '',
openTour: false,
isNational: false, // 是否为国际赛
languageSource: '', singlePersonEntryLimit: '', doublePersonEntryLimit: ''
languageSource: '', singlePersonEntryLimit: '', doublePersonEntryLimit: '', simlsEntryLimit: ''
})
const {
activeTeam,
......@@ -331,7 +331,7 @@ const {
tableType,
zuQuery,
openTour, currProjectId,
tourCurrent, isNational, languageSource, singlePersonEntryLimit, doublePersonEntryLimit
tourCurrent, isNational, languageSource, singlePersonEntryLimit, doublePersonEntryLimit, simlsEntryLimit
} = toRefs(data)
const matchId = ref(route.query.matchId)
......@@ -759,8 +759,6 @@ function switchTabletype() {
}
}
let isDanNum = 0
let isShuangNum = 0
watch(projectIds, (newVal, oldVal) => {
if (newVal.length > oldVal.length) {
currProjectId.value = _.last(newVal)
......@@ -768,31 +766,46 @@ watch(projectIds, (newVal, oldVal) => {
currProjectId.value = ''
}
if (newVal.length > 0) {
isDanNum = 0
isShuangNum = 0
for (const hh of projectList.value) {
if (!projectIds.value.includes(hh.id)) {
continue
}
if (hh.singleFlag == '1') {
isDanNum += 1
}
if (hh.doubleSingleProjectFlag == '1') {
isShuangNum += 1
}
}
filterProjectList()
} else {
resetProjectList()
}
})
function getSelectedProjects() {
return projectList.value.filter(p => projectIds.value.includes(p.id))
function getSelectedProjects(mtype = null) {
return projectList.value.filter(p => {
if (!projectIds.value.includes(p.id)) return false
if (mtype != null && p.mtype !== mtype) return false
return true
})
}
function normalizeMajorFlag(flag) {
if (flag == null || flag === '') return null
return String(flag)
}
function getProjectMajorFlag(p) {
const flag = normalizeMajorFlag(p.majorFlag)
if (flag != null) return flag
if (p.name && p.name.indexOf('业余') > -1) return '0'
return '1'
}
function isSimlsProject(p) {
return p.simlsFlag == '1' && p.almightyFlag != '1'
}
function countSimlsProjects() {
return getSelectedProjects().filter(isSimlsProject).length
}
function countSimlsSingleProjects() {
return getSelectedProjects().filter(p => p.singleFlag == '1' && isSimlsProject(p)).length
}
function isSameMtype(a, b) {
return a.mtype === b.mtype
function countSimlsDoubleSingleProjects() {
return getSelectedProjects().filter(p => p.doubleSingleProjectFlag == '1' && isSimlsProject(p)).length
}
function hasDanceCountConflict(pp) {
......@@ -800,13 +813,10 @@ function hasDanceCountConflict(pp) {
return false
}
const ppDanceCount = pp.danceTypeDetailStr.split(',').length
return getSelectedProjects().some(selected => {
return getSelectedProjects(pp.mtype).some(selected => {
if (!selected.pproperty || !selected.danceTypeDetailStr) {
return false
}
if (!isSameMtype(selected, pp)) {
return false
}
if (selected.pproperty !== pp.pproperty) {
return false
}
......@@ -819,13 +829,10 @@ function hasPpropertyConflict(pp) {
if (!pp.pproperty) {
return false
}
return getSelectedProjects().some(selected => {
return getSelectedProjects(pp.mtype).some(selected => {
if (!selected.pproperty) {
return false
}
if (!isSameMtype(selected, pp)) {
return false
}
return selected.pproperty !== pp.pproperty
})
}
......@@ -834,43 +841,53 @@ function hasPlevelConflict(pp) {
if (!pp.plevel) {
return false
}
return getSelectedProjects().some(selected => {
return getSelectedProjects(pp.mtype).some(selected => {
if (!selected.plevel) {
return false
}
if (!isSameMtype(selected, pp)) {
return false
}
return selected.plevel !== pp.plevel
})
}
function hasMajorFlagConflict(pp) {
const ppFlag = getProjectMajorFlag(pp)
if (projectIds.value.includes(pp.id)) {
return false
}
return getSelectedProjects(pp.mtype).some(selected => {
return getProjectMajorFlag(selected) !== ppFlag
})
}
function hasAlmightyDanceCountConflict(pp) {
if (pp.almightyFlag !== '1' || !pp.danceTypeDetailStr) {
return false
}
const ppDanceCount = pp.danceTypeDetailStr.split(',').length
return getSelectedProjects().some(selected => {
return getSelectedProjects(pp.mtype).some(selected => {
if (selected.almightyFlag !== '1' || !selected.danceTypeDetailStr) {
return false
}
if (!isSameMtype(selected, pp)) {
return false
}
return selected.danceTypeDetailStr.split(',').length !== ppDanceCount
})
}
function hasSimlsEntryLimitReached(pp) {
const limit = Number(simlsEntryLimit.value)
if (!limit || !isSimlsProject(pp) || projectIds.value.includes(pp.id)) return false
return countSimlsProjects() >= limit
}
function hasSingleEntryLimitReached(pp) {
return isDanNum == Number(singlePersonEntryLimit.value) &&
pp.singleFlag == '1' &&
!projectIds.value.includes(pp.id)
const limit = Number(singlePersonEntryLimit.value)
if (!limit || pp.singleFlag != '1' || projectIds.value.includes(pp.id)) return false
return countSimlsSingleProjects() >= limit
}
function hasDoubleSingleEntryLimitReached(pp) {
return isShuangNum == Number(doublePersonEntryLimit.value) &&
pp.doubleSingleProjectFlag == '1' &&
!projectIds.value.includes(pp.id)
const limit = Number(doublePersonEntryLimit.value)
if (!limit || pp.doubleSingleProjectFlag != '1' || projectIds.value.includes(pp.id)) return false
return countSimlsDoubleSingleProjects() >= limit
}
function filterProjectList() {
......@@ -878,7 +895,9 @@ function filterProjectList() {
pp.disabled = hasDanceCountConflict(pp) ||
hasPpropertyConflict(pp) ||
hasPlevelConflict(pp) ||
hasMajorFlagConflict(pp) ||
hasAlmightyDanceCountConflict(pp) ||
hasSimlsEntryLimitReached(pp) ||
hasSingleEntryLimitReached(pp) ||
hasDoubleSingleEntryLimitReached(pp)
}
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!