6692d073 by zhangmeng

2024改成2025

1 parent b1908dcf
......@@ -2,7 +2,7 @@
<div>
<!-- top -->
<div class="container top">
<img :src="fillImgUrl(matchForm.ticketImg)" class="cover_img"/>
<img :src="fillImgUrl(matchForm.ticketImg)" class="cover_img">
<div class="info">
<div class="title">{{ matchForm.name }}</div>
<div class="time">
......@@ -37,11 +37,11 @@
<div class="address">
{{ triggerLanguage(language, "地址", "Location") }}{{ matchForm.address }}
</div>
<div v-if="timeData>0">
<!-- 倒计时-->
<p class="countDownTitle">
<span v-if="language==0">售票倒计时</span>
<span v-else>TICKET COUNTDOWN</span>
......@@ -60,19 +60,21 @@
</van-count-down>
</div>
<div v-else>
<!-- 票档 -->
<div class="select_item_box">
<div class="label">
{{ triggerLanguage(language, "票档", "Tickets") }} :
</div>
<div v-if="matchForm.ticketLayout">
<span style="color: #493ceb;cursor:pointer;font-weight:600;font-size: 14px"
@click="show=true"> <span style="color: red;font-size: 18px">*</span>
{{
language == 0 ? '点击查看场馆布局' : 'View Venue Layout'
}}
</span>
<span
style="color: #493ceb;cursor:pointer;font-weight:600;font-size: 14px"
@click="show=true"
> <span style="color: red;font-size: 18px">*</span>
{{
language == 0 ? '点击查看场馆布局' : 'View Venue Layout'
}}
</span>
</div>
</div>
<div class="select_item_box">
......@@ -81,15 +83,15 @@
v-for="(it, index) in tickClass"
:key="index"
:class="[
it.id == selectForm.latId ? 'tagActive' : 'tag',
]"
it.id == selectForm.latId ? 'tagActive' : 'tag',
]"
@click="select(it)"
>
{{ it.name }}
</div>
</div>
</div>
<!-- 时间 -->
<div class="select_item_box">
<div class="label">
......@@ -102,9 +104,9 @@
v-for="(it, index) in tickList"
:key="index"
:class="[
it.id == selectForm.id ? 'tagActive' : 'tag',
it.isView==0?'forbid':''
]"
it.id == selectForm.id ? 'tagActive' : 'tag',
it.isView==0?'forbid':''
]"
@click="selectTick(it)"
>
{{ it.name }} <span v-if="it.ticketType==1" class="tao">{{
......@@ -113,7 +115,7 @@
</div>
</div>
</div>
<!-- 价格 -->
<div class="select_item_box">
<div class="label">
......@@ -140,9 +142,11 @@
{{ matchForm.ticketRemark }}
</div>
</div>
<div v-if="endTime<=0" class="btn" style="margin-left: 40px;opacity: 0.5;cursor: not-allowed;margin-top: 10px"
@click="toSelectClosed">
<div
v-if="endTime<=0" class="btn" style="margin-left: 40px;opacity: 0.5;cursor: not-allowed;margin-top: 10px"
@click="toSelectClosed"
>
{{
triggerLanguage(language, "售票结束", "Sale closed")
}}
......@@ -152,20 +156,20 @@
triggerLanguage(language, "立即购票", "Buy tickets now")
}}
</div>
</div>
</div>
</div>
<div class="container bottom">
<div style="display: flex">
<div :class="{'bg':active==1}" class="buBg" @click="active=1">购票说明</div>
<div :class="{'bg' :active==2}" class="buBg" @click="active=2">购票须知</div>
</div>
<div v-show="active==1" class="rich_content" v-html="matchForm.ticketDes"/>
<div v-show="active==2" class="rich_content" v-html="matchForm.ticketNotice"/>
<div v-show="active==1" class="rich_content" v-html="matchForm.ticketDes" />
<div v-show="active==2" class="rich_content" v-html="matchForm.ticketNotice" />
<el-dialog v-model="show" title="" width="1000px">
<div>
<img :src="fillImgUrl(matchForm.ticketLayout)" alt="" style="width: 100%">
......@@ -177,30 +181,30 @@
<script setup>
import {ref, computed} from "vue";
import {listApi, getTicketInfoByActivityId, getTicketListApi, checkNonPayment} from '@/apiPc/booking'
import { ref, computed } from 'vue'
import { listApi, getTicketInfoByActivityId, getTicketListApi, checkNonPayment } from '@/apiPc/booking'
import {dayjs} from "element-plus";
import {ElMessageBox, ElMessage} from "element-plus";
import {languageFormat, getDayName} from "@/viewsPc/seat/utils/language";
import {fillImgUrl} from "/@/utils/ruoyi";
import useUserStore from "/@/store/modules/user";
import {triggerLanguage} from '@/utils/ruoyi'
import {useStorage} from "@vueuse/core/index";
import { dayjs } from 'element-plus'
import { ElMessageBox, ElMessage } from 'element-plus'
import { languageFormat, getDayName } from '@/viewsPc/seat/utils/language'
import { fillImgUrl } from '/@/utils/ruoyi'
import useUserStore from '/@/store/modules/user'
import { triggerLanguage } from '@/utils/ruoyi'
import { useStorage } from '@vueuse/core/index'
const language = useStorage('language', 0)
const useStore = useUserStore()
const user = computed(() => useUserStore().user)
const route = useRoute();
const router = useRouter();
const route = useRoute()
const router = useRouter()
const show = ref(false)
const activeId = ref(route.params.activeId)
const flag = ref(false)
const active = ref(1)
const countDown = ref(false)
const props = defineProps({
activityId: [String, Number],
});
activityId: [String, Number]
})
const timeData = ref()
const endTime = ref()
const matchForm = ref({})
......@@ -209,7 +213,7 @@ const selectForm = ref({
latId: null,
id: null,
price: '--',
priceEn: '--',
priceEn: '--'
})
const tickList = ref([])
......@@ -217,14 +221,14 @@ const tickList = ref([])
getDetail()
async function getDetail() {
const res = await getTicketInfoByActivityId({activityId: activeId.value})
const res = await getTicketInfoByActivityId({ activityId: activeId.value })
matchForm.value = res.data
console.log(res)
const today = dayjs().format('YYYY-MM-DD HH:mm:ss')
timeData.value = dayjs(res.data.ticketStart).diff(today, 'millisecond')
endTime.value = dayjs(res.data.ticketEnd).diff(today, 'millisecond')
// if (timeData.value <= nowData.value) countDown.value = true
// timeData.value = dayjs('2024-08-10 00:00:00').diff(today, 'millisecond')
// timeData.value = dayjs('2025-08-10 00:00:00').diff(today, 'millisecond')
}
// 根据赛事ID获取票档
......@@ -243,8 +247,8 @@ async function getTicketList() {
// 根据票档获取场次
async function getTicketListType() {
let arr = []
const res = await listApi({latId: selectForm.value.latId})
const arr = []
const res = await listApi({ latId: selectForm.value.latId })
tickList.value = res.rows
for (const v of res.rows) {
if (v.isView == 0) arr.push(v)
......@@ -277,8 +281,8 @@ function selectTick(v) {
}
function toSelectSeat() {
if (!selectForm.value.latId) return ElMessage.error(language.value == 0 ? "请选择票档" : 'Please select a ticket file')
if (!selectForm.value.id) return ElMessage.error(language.value == 0 ? "请选择时间" : 'Please select time')
if (!selectForm.value.latId) return ElMessage.error(language.value == 0 ? '请选择票档' : 'Please select a ticket file')
if (!selectForm.value.id) return ElMessage.error(language.value == 0 ? '请选择时间' : 'Please select time')
if (!user.value) {
useStore.setVisitor()
return
......@@ -296,10 +300,7 @@ function toSelectSeat() {
} else {
router.push('/center/myReservation')
}
})
}
function toSelectClosed() {
......@@ -344,18 +345,18 @@ function toSelectClosed() {
display: flex;
padding: 19px;
margin-top: 26px;
.cover_img {
width: 390px;
height: 517px;
object-fit: fill;
margin-right: 36px;
}
.info {
padding-top: 12px;
width: 100%;
.title {
font-weight: bold;
font-size: 28px;
......@@ -363,7 +364,7 @@ function toSelectClosed() {
line-height: 1.6;
margin-bottom: 15px;
}
.time {
font-weight: 600;
font-size: 16px;
......@@ -371,7 +372,7 @@ function toSelectClosed() {
line-height: 24px;
margin-bottom: 16px;
}
.address {
font-weight: 600;
font-size: 16px;
......@@ -379,15 +380,15 @@ function toSelectClosed() {
line-height: 24px;
margin-bottom: 15px;
}
.select_item_box {
display: flex;
margin-bottom: 10px;
&:last-child {
margin-bottom: 0;
}
.label {
font-weight: 600;
font-size: 16px;
......@@ -396,18 +397,18 @@ function toSelectClosed() {
margin-right: 12px;
flex-shrink: 0;
}
.forbid {
opacity: 0.5 !important;
cursor: not-allowed !important;
}
.select_item {
display: flex;
flex-wrap: wrap;
gap: 10px;
user-select: none;
.tag_t {
padding: 1px 15px;
font-weight: 400;
......@@ -417,7 +418,7 @@ function toSelectClosed() {
border: 1px solid #453dea;
margin-left: 5px;
}
.tag {
display: flex;
padding: 12px 18px;
......@@ -428,7 +429,7 @@ function toSelectClosed() {
color: #4a4a4a;
cursor: pointer;
}
.tagActive {
display: flex;
padding: 12px 18px;
......@@ -439,14 +440,14 @@ function toSelectClosed() {
color: #493ceb;
cursor: pointer;
}
.tao {
border: 1px solid #493ceb;
font-size: 14px;
color: #493ceb;
margin-left: 10px;
}
.tagDisabled {
padding: 12px 18px;
background: #878787;
......@@ -458,7 +459,7 @@ function toSelectClosed() {
}
}
}
.btn {
width: 175px;
height: 40px;
......@@ -478,7 +479,7 @@ function toSelectClosed() {
padding: 50px;
margin-top: 30px;
margin-bottom: 30px;
.title {
padding: 20px 30px;
background: linear-gradient(270deg, #493ceb 0%, #8623fc 100%);
......@@ -488,15 +489,15 @@ function toSelectClosed() {
line-height: 30px;
margin-bottom: 30px;
}
.rich_content {
margin-top: 30px;
:deep(img) {
width: 100% !important;
height: auto !important;
}
}
}
......@@ -514,44 +515,44 @@ function toSelectClosed() {
height: 160px;
margin-right: 15px;
}
.info {
padding: 0;
.title {
font-size: 14px;
margin: 0;
}
.time, .address, .label, .tip {
font-size: 12px;
}
.title, .time, .address, .tip, .select_item_box {
margin-bottom: 3px;
}
.select_item_box {
.label {
font-size: 12px;
}
.select_item .tag {
padding: 2px 10px;
font-size: 12px;
}
.select_item .tagActive {
padding: 2px 10px;
font-size: 12px;
}
.select_item .tagDisabled {
padding: 2px 10px;
font-size: 12px;
}
}
.btn {
display: inline-block;
margin: 10px 0 0;
......@@ -569,8 +570,8 @@ function toSelectClosed() {
.bottom {
padding: 0
}
}
.countDownTitle {
......
......@@ -2,10 +2,10 @@
<div>
<el-calendar v-model="currentDate" :range="calendarRange">
<template #date-cell="data">
<div :class="data.data.day==query.currentDate?'primaryDate date':'date'" @click="selectDate(data.data.day)">
<div :class="data.data.day==query.currentDate?'primaryDate date':'date'" @click="selectDate(data.data.day)">
{{ data.data.day.slice(8, 10) }}
</div>
</template>
</el-calendar>
<div class="calendarList">
......@@ -15,42 +15,48 @@
<div class="esp mt5">{{ n.name }}</div>
</li>
</ul>
<el-empty v-if="schList.length== 0"
style="--el-empty-padding:0;--el-empty-description-margin-top:0"
:image="`/img/order_no.png`" :image-size="200"/>
<el-empty
v-if="schList.length== 0"
:image="`/img/order_no.png`"
:image-size="200" style="--el-empty-padding:0;--el-empty-description-margin-top:0"
/>
</div>
</div>
</template>
<script setup>
import {ref} from "vue";
import {dayjs} from "element-plus";
import {getIndexScheduleList} from "@/apiPc/common";
import {useRouter} from "vue-router";
import { ref } from 'vue'
import { dayjs } from 'element-plus'
import { getIndexScheduleList } from '@/apiPc/common'
import { useRouter } from 'vue-router'
const router = useRouter()
const currentDate = ref(new Date())
const calendarRange = ref([dayjs('2024-07-17').toDate(), dayjs('2024-07-17').toDate()])
const calendarRange = ref([dayjs('2025-07-17').toDate(), dayjs('2025-07-17').toDate()])
const schList = ref([])
const loading = ref(false)
const query = ref({
// currentDate:dayjs().format('YYYY-MM-DD')
currentDate: '2024-07-17'
currentDate: '2025-07-17'
})
getScheduleList()
function getScheduleList() {
loading.value = true
query.value.currentDate = dayjs(query.value.currentDate).format('YYYY-MM-DD')
getIndexScheduleList(query.value).then(res=>{
getIndexScheduleList(query.value).then(res => {
loading.value = false
schList.value = res.data
})
}
function selectDate(date) {
console.log(dayjs(date).toDate())
console.log(query.value.currentDate)
query.value.currentDate = dayjs(date).toDate()
getScheduleList()
}
function goMatch(n) {
router.push({
name: 'matchDetail',
......@@ -64,44 +70,44 @@ function goMatch(n) {
}
</script>
<style scoped lang="scss">
<style lang="scss" scoped>
.el-calendar {
--el-calendar-border: none;
--el-calendar-cell-width: 40px;
text-align: center;
--el-text-color-regular: #8E8D94;
:deep(.el-calendar__header) {
justify-content: center;
padding: 0 0 10px
}
:deep(.el-calendar__body) {
border: 1px solid #F0F0F0;
padding: 0
}
:deep(.el-calendar-table .el-calendar-day) {
padding: 1px;
}
:deep(.el-calendar-table td.is-selected) {
background: transparent;
}
:deep(.el-calendar__button-group) {
display: none;
}
:deep(.el-calendar-table thead th) {
padding: 5px 0 0
}
.primaryDate {
color: #fff;
background: linear-gradient(90deg, #8623FC, #453DEA);
}
.date {
margin: auto;
border-radius: 50%;
......@@ -117,9 +123,10 @@ function goMatch(n) {
padding: 12px 20px;
overflow: auto;
height: 225px;
ul {
li {cursor: pointer;
li {
cursor: pointer;
background: #F6F9FE;
margin: 7px 0 7px 20px;
position: relative;
......@@ -127,11 +134,11 @@ function goMatch(n) {
border-radius: 10px;
font-weight: 500;
font-size: 15px;
label {
color: #453DEA;
margin-right: 15px;
&::before {
content: '';
background: #fff;
......@@ -147,7 +154,7 @@ function goMatch(n) {
}
}
}
li::before {
content: '';
background: linear-gradient(0deg, #8623FC, #453DEA);
......@@ -161,7 +168,7 @@ function goMatch(n) {
margin: auto;
z-index: 1;
}
li::after {
content: '';
left: -16px;
......@@ -171,11 +178,11 @@ function goMatch(n) {
position: absolute;
top: 20px
}
li:hover {
color: #fff;
background: linear-gradient(-90deg, #8623FC, #453DEA);
label {
color: #fff;
}
......
<template>
<el-dialog
v-model="show" :title="title" width="600px" append-to-body close-icon="CircleClose" center
:close-on-click-modal="false" class="pcloginpop"
destroy-on-close
v-model="show" :close-on-click-modal="false" :title="title" append-to-body center
class="pcloginpop"
close-icon="CircleClose" destroy-on-close
width="600px"
>
<div class="boxInvitation pd20">
<el-steps :active="activeStep" align-center class="mb20">
<el-step :title="language==0?'报名须知':'Notice'"/>
<el-step :title="language==0?'填写信息':'Information'"/>
<el-step :title="language==0?'选择课程':'Courses'"/>
<el-step :title="language==0?'报名须知':'Notice'" />
<el-step :title="language==0?'填写信息':'Information'" />
<el-step :title="language==0?'选择课程':'Courses'" />
</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">2024-06-30</span><br/>
<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">2025-06-30</span><br>
</div>
<div v-else style="width: 400px;margin: auto;text-transform: capitalize"><br/>
<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, 2024.<br/>
Contact Person:Dean Ding<br/>
Tel:+86 19951486130<br/>
Registration Deadline:<span style="text-decoration: underline">2024-06-30</span><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, 2025.<br>
Contact Person:Dean Ding<br>
Tel:+86 19951486130<br>
Registration Deadline:<span style="text-decoration: underline">2025-06-30</span><br>
</div>
</div>
<div class="text-center" v-loading="loading">
<el-button type="primary" v-if="courseList.length>0" class="btn-lineG" round @click="setActive(1)">
<span v-if="dayjs().format('YYYY-MM-DD')>'2024-06-30'">
<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')>'2025-06-30'">
{{ language == 0 ? '报名已结束' : 'Registration has ended' }}
</span>
<span v-else>{{ language == 0 ? '下一步' : 'NEXT' }}</span>
</el-button>
<el-button type="primary" class="btn-lineG" round v-else @click="close">
<el-button v-else class="btn-lineG" round type="primary" @click="close">
{{ language == 0 ? '暂无可报课程' : 'No courses available for reporting' }}
</el-button>
</div>
</div>
<div v-if="activeStep==1">
<el-form :model="form" :rules="rules" ref="iformRef" label-position="right"
:label-width="language==0?'80px':'160px'">
<el-form-item :label="language==0?'姓名':'Name'" required prop="name">
<el-input v-model="form.name"/>
<el-form
ref="iformRef" :label-width="language==0?'80px':'160px'" :model="form" :rules="rules"
label-position="right"
>
<el-form-item :label="language==0?'姓名':'Name'" prop="name" required>
<el-input v-model="form.name" />
</el-form-item>
<el-form-item :label="language==0?'性别':'Gender'" required prop="gender">
<el-form-item :label="language==0?'性别':'Gender'" prop="gender" required>
<el-radio-group v-model="form.gender">
<el-radio value="0">{{ language == 0 ? '女' : 'female' }}</el-radio>
<el-radio value="1">{{ language == 0 ? '男' : 'male' }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item :label="language==0?'国籍':'Nationality'" required prop="nationality">
<el-select filterable v-model="form.nationality" style="width: 100%;">
<el-option v-for="item in countrys" :key="item.id" :label="language==0?item.name:item.enName"
:value="item.id"/>
<el-form-item :label="language==0?'国籍':'Nationality'" prop="nationality" required>
<el-select v-model="form.nationality" filterable style="width: 100%;">
<el-option
v-for="item in countrys" :key="item.id" :label="language==0?item.name:item.enName"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item :label="language==0?'出生日期':'Date of Birth'" required prop="birth">
<el-form-item :label="language==0?'出生日期':'Date of Birth'" prop="birth" required>
<el-date-picker
v-model="form.birth"
style="width: 100%;" placeholder="YYYY-MM-DD"
type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
v-model="form.birth"
format="YYYY-MM-DD" placeholder="YYYY-MM-DD"
style="width: 100%;" type="date" value-format="YYYY-MM-DD"
/>
</el-form-item>
<el-form-item :label="language==0?'手机号':'Phone number'" required prop="phone">
<el-input v-model="form.phone"/>
<el-form-item :label="language==0?'手机号':'Phone number'" prop="phone" required>
<el-input v-model="form.phone" />
</el-form-item>
<el-form-item :label="language==0?'邮箱':'Email'" required prop="email">
<el-input v-model="form.email" type="email"/>
<el-form-item :label="language==0?'邮箱':'Email'" prop="email" required>
<el-input v-model="form.email" type="email" />
</el-form-item>
<el-form-item :label="language==0?'证件号':'National license No.'" required prop="passportNo">
<el-input v-model="form.passportNo" @blur="checkCard"/>
<el-form-item :label="language==0?'证件号':'National license No.'" prop="passportNo" required>
<el-input v-model="form.passportNo" @blur="checkCard" />
</el-form-item>
<el-form-item :label="language==0?'有效证件':'Passport Copy'" required prop="passportCopy">
<image-upload v-model="form.passportCopy" :limit="1" :is-show-tip="false"
:button-text="language==0?'上传':'Upload'"/>
<el-form-item :label="language==0?'有效证件':'Passport Copy'" prop="passportCopy" required>
<image-upload
v-model="form.passportCopy" :button-text="language==0?'上传':'Upload'" :is-show-tip="false"
:limit="1"
/>
</el-form-item>
<!-- <el-form-item :label="language==0?'抵达日期':'Date of Arrival'" required prop="arrival">-->
<!-- <el-date-picker-->
......@@ -96,68 +103,77 @@
<!-- />-->
<!-- </el-form-item>-->
<el-form-item :label="language==0?'备注':'Remark '">
<el-input type="textarea" v-model="form.remark" rows="3"/>
<el-input v-model="form.remark" rows="3" type="textarea" />
</el-form-item>
<div class="text-center">
<el-button size="large" @click="setActive(0)" round plain type="primary">
<el-button plain round size="large" type="primary" @click="setActive(0)">
{{ language == 0 ? '上一步' : 'PREV' }}
</el-button>
<el-button type="primary" size="large" @click="checkApplyCourse(2)" round class="btn-lineG">
<el-button class="btn-lineG" round size="large" type="primary" @click="checkApplyCourse(2)">
{{ language == 0 ? '下一步' : 'NEXT' }}
</el-button>
</div>
</el-form>
</div>
<div v-if="activeStep==2">
<div class="text-center pd20" v-if="showR">
<img class="mauto" src="@/assets/dance/ok.png"/>
<div v-if="showR" class="text-center pd20">
<img class="mauto" src="@/assets/dance/ok.png">
<h2 class="text-center">{{ language == 0 ? '申请已提交' : 'Submitted successfully' }}</h2>
<h4 class="text-center" v-if="language == 0">
<h4 v-if="language == 0" class="text-center">
我们已收到您的申请,请在7月14日到无锡报到。
</h4>
<h4 v-else>
Your application has been received,
<br/>
<br>
Please register in Wuxi on July 14.
</h4>
</div>
<div v-else>
<div class="tip text-danger mb20" v-if="language==0">*选择参加的课程(最少一项,最多两项)</div>
<div class="tip text-danger mb20" v-else>*Select the courses to enroll in (at least one, no more than two)
<div v-if="language==0" class="tip text-danger mb20">*选择参加的课程(最少一项,最多两项)</div>
<div v-else class="tip text-danger mb20">*Select the courses to enroll in (at least one, no more than two)
</div>
<el-checkbox-group size="large" v-model="form.courseId" @change="courseChange">
<el-checkbox-group v-model="form.courseId" size="large" @change="courseChange">
<div v-for="c in courseList" class="mb20">
<el-checkbox :value="c.id" border class="w100"
:disabled="(form.courseId?.length>=2&&form.courseId.indexOf(c.id)==-1)||disChoose||(form.nationality==240&&c.viewStateCn == 0)||(form.nationality!=240&&c.viewStateEn == 0)">
<el-checkbox
:disabled="(form.courseId?.length>=2&&form.courseId.indexOf(c.id)==-1)||disChoose||(form.nationality==240&&c.viewStateCn == 0)||(form.nationality!=240&&c.viewStateEn == 0)" :value="c.id" border
class="w100"
>
<div v-if="language==0" style="display: flex">
<div> {{ c.name }}{{ c.name.indexOf('青年') > -1 ? '(年龄在15岁~18岁)' : '(年龄在14岁以下)' }}</div>
</div>
<div v-else>
<div>
{{ c.nameEn }}{{ c.nameEn.indexOf('Youth') > -1 ? '(Between the age 15 and 18)' : '(Under the age of 14)' }}
{{
c.nameEn
}}{{ c.nameEn.indexOf('Youth') > -1 ? '(Between the age 15 and 18)' : '(Under the age of 14)' }}
</div>
</div>
<el-tag class="ml20"
v-if="(form.nationality==240&&c.viewStateCn == 0)||(form.nationality!=240&&c.viewStateEn == 0)"
type="danger" effect="dark">{{ language == 0 ? '已报满' : 'Already full' }}
<el-tag
v-if="(form.nationality==240&&c.viewStateCn == 0)||(form.nationality!=240&&c.viewStateEn == 0)"
class="ml20"
effect="dark" type="danger"
>{{ language == 0 ? '已报满' : 'Already full' }}
</el-tag>
</el-checkbox>
</div>
</el-checkbox-group>
<div class="text-center">
<el-button size="large" @click="setActive(1)" round plain type="primary">
<el-button plain round size="large" type="primary" @click="setActive(1)">
{{ language == 0 ? '上一步' : 'PREV' }}
</el-button>
<el-button type="primary" v-if="!disChoose" size="large" @click="submit" round class="btn-lineG w200px">
<el-button
v-if="!disChoose" class="btn-lineG w200px" round size="large" type="primary"
@click="submit"
>
{{ language == 0 ? '提交' : 'SUBMIT' }}
</el-button>
</div>
</div>
</div>
</div>
......@@ -166,16 +182,16 @@
</template>
<script setup>
import {useStorage} from "@vueuse/core/index";
import {getCurrentInstance, watch} from "vue";
import {nextTick} from "@vue/runtime-core";
import {ElMessage, ElMessageBox} from "element-plus";
import {addInvitation, countryList} from "@/apiPc/match";
import ImageUpload from "@/components/ImageUpload";
import {masterClassList, getByCard, submitMasterApply, getMasterApply, delByCard} from "@/apiPc/common";
import dayjs from "dayjs";
import { useStorage } from '@vueuse/core/index'
import { getCurrentInstance, watch } from 'vue'
import { nextTick } from '@vue/runtime-core'
import { ElMessage, ElMessageBox } from 'element-plus'
import { addInvitation, countryList } from '@/apiPc/match'
import ImageUpload from '@/components/ImageUpload'
import { masterClassList, getByCard, submitMasterApply, getMasterApply, delByCard } from '@/apiPc/common'
import dayjs from 'dayjs'
const {proxy} = getCurrentInstance()
const { proxy } = getCurrentInstance()
const language = useStorage('language', 0)
const form = ref({})
const show = ref(false)
......@@ -188,16 +204,16 @@ const courseList = ref([])
const loading = ref(false)
const cptId = ref('')
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'},],
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'},],
passportCopy: [{required: true, trigger: 'blur', message: language.value == 0 ? '请上传' : 'Please Upload'},],
arrival: [{required: true, trigger: 'change', message: language.value == 0 ? '请选择' : 'Please choose'},],
departure: [{required: true, trigger: 'change', message: language.value == 0 ? '请选择' : 'Please choose'},],
})
{
nationality: [{ required: true, trigger: 'change', message: language.value == 0 ? '请选择' : 'Please choose' }],
name: [{ required: true, trigger: 'blur', message: language.value == 0 ? '请输入' : 'Please enter' }],
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' }],
passportCopy: [{ required: true, trigger: 'blur', message: language.value == 0 ? '请上传' : 'Please Upload' }],
arrival: [{ required: true, trigger: 'change', message: language.value == 0 ? '请选择' : 'Please choose' }],
departure: [{ required: true, trigger: 'change', message: language.value == 0 ? '请选择' : 'Please choose' }]
})
const open = (params) => {
console.log(params)
show.value = true
......@@ -205,7 +221,7 @@ const open = (params) => {
cptId.value = params.cptId
getCourse()
}
defineExpose({open})
defineExpose({ open })
watch(show, (value) => {
if (!value) {
form.value = {
......@@ -223,14 +239,14 @@ watch(show, (value) => {
function getCourse() {
// '1777256058082189313'
loading.value = true
masterClassList({cptId: cptId.value}).then(res => {
masterClassList({ cptId: cptId.value }).then(res => {
courseList.value = res.data
loading.value = false
})
}
function setActive(n) {
if(n==1&&dayjs().format('YYYY-MM-DD')>'2024-06-30'){
if (n == 1 && dayjs().format('YYYY-MM-DD') > '2025-06-30') {
ElMessage.error(language.value == 0 ? '报名已结束' : 'The application has ended')
return
}
......@@ -242,20 +258,20 @@ function courseChange(e) {
}
function checkApplyCourse(n) {
getMasterApply({card: form.value.passportNo}).then(res => {
getMasterApply({ card: form.value.passportNo }).then(res => {
if (res.data?.length > 0) {
form.value.courseId = []
for (var n of res.data) {
form.value.courseId.push(n.itemId)
}
ElMessageBox.confirm(
language.value == 0 ? '您已提交过信息,是否更新?' : 'You have submitted the information, do you want to update?',
language.value == 0 ? '提示' : 'Tips', {
confirmButtonText: language.value == 0 ? '是' : 'Confirm',
cancelButtonText: language.value == 0 ? '否' : 'Cancel',
type: 'warning'
}).then(() => {
//删除原记录
language.value == 0 ? '您已提交过信息,是否更新?' : 'You have submitted the information, do you want to update?',
language.value == 0 ? '提示' : 'Tips', {
confirmButtonText: language.value == 0 ? '是' : 'Confirm',
cancelButtonText: language.value == 0 ? '否' : 'Cancel',
type: 'warning'
}).then(() => {
// 删除原记录
delByCard(form.value.passportNo).then(res => {
form.value.courseId = []
disChoose.value = false
......@@ -269,7 +285,6 @@ function checkApplyCourse(n) {
to2()
}
})
}
function to2() {
......@@ -290,7 +305,7 @@ function to2() {
function checkCard() {
getByCard({card: form.value.passportNo}).then(res => {
getByCard({ card: form.value.passportNo }).then(res => {
if (res.data) {
form.value = res.data
} else {
......@@ -317,12 +332,12 @@ const submit = () => {
return
}
ElMessageBox.confirm(
language.value == 0 ? '确认提交吗?' : 'Are you sure to submit?',
language.value == 0 ? '提示' : 'Tips', {
confirmButtonText: language.value == 0 ? '确定' : 'Confirm',
cancelButtonText: language.value == 0 ? '取消' : 'Cancel',
type: 'warning'
}).then(() => {
language.value == 0 ? '确认提交吗?' : 'Are you sure to submit?',
language.value == 0 ? '提示' : 'Tips', {
confirmButtonText: language.value == 0 ? '确定' : 'Confirm',
cancelButtonText: language.value == 0 ? '取消' : 'Cancel',
type: 'warning'
}).then(() => {
// form.value.cptId = cptId.value
if (Array.isArray(form.value.passportCopy)) {
form.value.passportCopy = form.value.passportCopy[0].url
......@@ -334,7 +349,7 @@ const submit = () => {
ElMessage.success(language.value == 0 ? '提交成功' : 'Successfully!')
showR.value = true
}).catch(() => {
})
})
}
......
<template>
<el-dialog
v-model="show" :close-on-click-modal="false" :title="title" append-to-body center class="pcloginpop"
close-icon="CircleClose" destroy-on-close
width="900px"
v-model="show" :close-on-click-modal="false" :title="title" append-to-body center
class="pcloginpop"
close-icon="CircleClose" destroy-on-close
width="900px"
>
<div class="boxInvitation pd20">
<div v-if="!showR">
<el-form ref="iformRef" :label-width="language==0?'120px':'240px'" :model="form" :rules="rules"
label-position="right">
<el-form
ref="iformRef" :label-width="language==0?'120px':'240px'" :model="form" :rules="rules"
label-position="right"
>
<el-form-item :label="language==0?'服务类型':'Service Type '" prop="type" required style="margin-bottom: 0px">
<el-checkbox-group v-model="form.type">
<el-checkbox label="1">{{ language == 0 ? '接机' : 'airport pickup' }}</el-checkbox>
......@@ -22,171 +25,200 @@
</div>
<div v-if="form.type?.some(v=>v==1)">
<h3 class="leftboderTT">{{ language == 0 ? '接机信息' : 'Pick-up information' }}</h3>
<el-form-item :label="language==0?'抵达人员身份':'Role of Person-Arrival'" prop="pickUpBo.standing"
required>
<el-form-item
:label="language==0?'抵达人员身份':'Role of Person-Arrival'" prop="pickUpBo.standing"
required
>
<el-checkbox-group v-model="form.pickUpBo.standing">
<el-checkbox :label="language==0?'运动员':'Athlete'" name="1"/>
<el-checkbox :label="language==0?'随队人员':'Accompanying Person'" name="2"/>
<el-checkbox :label="language==0?'官员':'Official'" name="3"/>
<el-checkbox :label="language==0?'其他':'Others'" name="4"/>
<el-checkbox :label="language==0?'运动员':'Athlete'" name="1" />
<el-checkbox :label="language==0?'随队人员':'Accompanying Person'" name="2" />
<el-checkbox :label="language==0?'官员':'Official'" name="3" />
<el-checkbox :label="language==0?'其他':'Others'" name="4" />
</el-checkbox-group>
</el-form-item>
<el-form-item :label="language==0?'国家/地区':'Country/Region'" prop="pickUpBo.nationalitys" required>
<el-select v-model="form.pickUpBo.nationalitys" filterable multiple style="width: 100%;">
<el-option v-for="item in countrys"
:key="item.id"
:label="language==0?item.name:item.enName"
:value="language==0?item.name :item.enName"/>
<el-option
v-for="item in countrys"
:key="item.id"
:label="language==0?item.name:item.enName"
:value="language==0?item.name :item.enName"
/>
</el-select>
</el-form-item>
<el-form-item :label="language==0?'联系人':'Contact Person'" prop="pickUpBo.name" required>
<el-input v-model="form.pickUpBo.name"/>
<el-input v-model="form.pickUpBo.name" />
</el-form-item>
<el-form-item :label="language==0?'联系电话':'Contact Phone Number'" prop="pickUpBo.phone" required>
<el-input v-model="form.pickUpBo.phone"/>
<el-input v-model="form.pickUpBo.phone" />
</el-form-item>
<el-form-item :label="language==0?'接机人数':'Number of People'" prop="pickUpBo.counts" required>
<el-input-number v-model="form.pickUpBo.counts"/>
<el-input-number v-model="form.pickUpBo.counts" />
<span
style="color: red;margin-left: 10px">{{
language == 0 ? '(填写的人数需是乘坐同一航班/车次)' : 'The number of people to be filled in must be on the same flight/train'
}}</span>
style="color: red;margin-left: 10px"
>{{
language == 0 ? '(填写的人数需是乘坐同一航班/车次)' : 'The number of people to be filled in must be on the same flight/train'
}}</span>
</el-form-item>
<!-- <div style="padding-left: 48px;color: red;margin-bottom: 18px">-->
<!-- {{language==0?'填写的人数需是乘坐同一航班/车次':'The number of people to be filled in must be on the same flight/train'}}-->
<!-- </div>-->
<el-form-item :label="language==0?'抵达日期':'Flight/Train Arrival Date'"
prop="pickUpBo.arrivalDate"
required>
<el-form-item
:label="language==0?'抵达日期':'Flight/Train Arrival Date'"
prop="pickUpBo.arrivalDate"
required
>
<div style="padding: 1px">
<el-date-picker
:disabled-date="disabledDateRZ" default-value="'2024-09-27'"
v-model="form.pickUpBo.arrivalDate" format="YYYY-MM-DD"
placeholder="YYYY-MM-DD"
style="width: 100%;" type="date" value-format="YYYY-MM-DD"
v-model="form.pickUpBo.arrivalDate" :disabled-date="disabledDateRZ"
default-value="'2025-09-27'" format="YYYY-MM-DD"
placeholder="YYYY-MM-DD"
style="width: 100%;" type="date" value-format="YYYY-MM-DD"
/>
</div>
</el-form-item>
<el-form-item :label="language==0?'抵达时间':'Flight/Train Arrival Time'" prop="pickUpBo.arrivaTime"
required>
<el-form-item
:label="language==0?'抵达时间':'Flight/Train Arrival Time'" prop="pickUpBo.arrivaTime"
required
>
<!-- <el-date-picker-->
<!-- v-model="form.pickUpBo.arrivaTime"-->
<!-- format="YYYY-MM-DD" placeholder="YYYY-MM-DD"-->
<!-- style="width: 100%;" type="date" value-format="YYYY-MM-DD"-->
<!-- />-->
<el-time-picker v-model="form.pickUpBo.arrivaTime" placeholder="HH:mm:ss" value-format="HH:mm:ss"
format="HH:mm:ss" style="width: 100%;"/>
<el-time-picker
v-model="form.pickUpBo.arrivaTime" format="HH:mm:ss" placeholder="HH:mm:ss"
style="width: 100%;" value-format="HH:mm:ss"
/>
</el-form-item>
<el-form-item :label="language==0?'航班/车次':'Flight/Train Number'" prop="pickUpBo.flight" required>
<el-input v-model="form.pickUpBo.flight"/>
<el-input v-model="form.pickUpBo.flight" />
</el-form-item>
<el-form-item :label="language==0?'机场/火车站':'Airport/Train Station'" prop="pickUpBo.stationName"
required>
<el-input v-model="form.pickUpBo.stationName"/>
<el-form-item
:label="language==0?'机场/火车站':'Airport/Train Station'" prop="pickUpBo.stationName"
required
>
<el-input v-model="form.pickUpBo.stationName" />
</el-form-item>
<el-form-item :label="language==0?'航站楼':'Air Terminal'" prop="pickUpBo.terminal" required>
<el-input v-model="form.pickUpBo.terminal"/>
<el-input v-model="form.pickUpBo.terminal" />
</el-form-item>
<el-form-item :label="language==0?'送达酒店':'Destination Hotel'" prop="pickUpBo.hotle" required>
<el-input v-model="form.pickUpBo.hotle"/>
<el-input v-model="form.pickUpBo.hotle" />
</el-form-item>
<el-form-item :label="language==0?'行程单':'Round-Trip Itinerary'" prop="pickUpBo.itinerary" required>
<image-upload v-model="form.pickUpBo.itinerary" :button-text="language==0?'上传':'Upload'"
:is-show-tip="false"
:limit="1"/>
<image-upload
v-model="form.pickUpBo.itinerary" :button-text="language==0?'上传':'Upload'"
:is-show-tip="false"
:limit="1"
/>
</el-form-item>
</div>
<div v-if="form.type?.some(v=>v==2)">
<!-- <el-form-item :label="language == 0 ? '送机信息' : 'Delivery information' ">-->
<!-- </el-form-item>-->
<h3 class="leftboderTT">{{ language == 0 ? '送机信息' : 'Delivery information' }}</h3>
<el-form-item
:label="language==0?'离会人员身份':'Role of Person-Departure'"
prop="downOffBo.standing" required>
:label="language==0?'离会人员身份':'Role of Person-Departure'"
prop="downOffBo.standing" required
>
<!-- <el-input v-model="form.downOffBo.standing"/>-->
<el-checkbox-group v-model="form.downOffBo.standing">
<el-checkbox :label="language==0?'运动员':'Athlete'" name="1"/>
<el-checkbox :label="language==0?'随队人员':'Accompanying Person'" name="2"/>
<el-checkbox :label="language==0?'官员':'Official'" name="3"/>
<el-checkbox :label="language==0?'其他':'Others'" name="4"/>
<el-checkbox :label="language==0?'运动员':'Athlete'" name="1" />
<el-checkbox :label="language==0?'随队人员':'Accompanying Person'" name="2" />
<el-checkbox :label="language==0?'官员':'Official'" name="3" />
<el-checkbox :label="language==0?'其他':'Others'" name="4" />
</el-checkbox-group>
</el-form-item>
<el-form-item :label="language==0?'国家/地区':'Country/Region'" prop="downOffBo.nationalitys" required>
<el-select v-model="form.downOffBo.nationalitys" filterable multiple style="width: 100%;">
<el-option v-for="item in countrys"
:key="item.id"
:label="language==0?item.name:item.enName"
:value="language==0?item.name:item.enName"/>
<el-option
v-for="item in countrys"
:key="item.id"
:label="language==0?item.name:item.enName"
:value="language==0?item.name:item.enName"
/>
</el-select>
</el-form-item>
<el-form-item :label="language==0?'联系人':'Contact Person'" prop="downOffBo.name" required>
<el-input v-model="form.downOffBo.name"/>
<el-input v-model="form.downOffBo.name" />
</el-form-item>
<el-form-item :label="language==0?'联系电话':'Contact Phone Number'" prop="downOffBo.phone" required>
<el-input v-model="form.downOffBo.phone"/>
<el-input v-model="form.downOffBo.phone" />
</el-form-item>
<!-- todo 增加邮箱字段,登记成功后发送邮件通知-->
<!-- todo 增加邮箱字段,登记成功后发送邮件通知-->
<el-form-item :label="language==0?'联系邮箱':'Contact Email'" prop="downOffBo.email" required>
<el-input v-model="form.downOffBo.email"/>
<el-input v-model="form.downOffBo.email" />
</el-form-item>
<el-form-item :label="language==0?'送机人数':'Number of People'" prop="downOffBo.counts" required>
<el-input-number v-model="form.downOffBo.counts"/>
<el-input-number v-model="form.downOffBo.counts" />
<span
style="color: red;margin-left: 10px">{{
language == 0 ? '(填写的人数需是乘坐同一航班/车次)' : 'The number of people to be filled in must be on the same flight/train'
}}</span>
style="color: red;margin-left: 10px"
>{{
language == 0 ? '(填写的人数需是乘坐同一航班/车次)' : 'The number of people to be filled in must be on the same flight/train'
}}</span>
</el-form-item>
<!-- <div style="padding-left: 48px;color: red;margin-bottom: 18px">-->
<!-- {{language==0?'填写的人数需是乘坐同一航班/车次':'The number of people to be filled in must be on the same flight/train'}}-->
<!-- </div>-->
<el-form-item :label="language==0?'离开日期':'Departure Date from Hotel'" prop="downOffBo.arrivalDate"
required>
<el-form-item
:label="language==0?'离开日期':'Departure Date from Hotel'" prop="downOffBo.arrivalDate"
required
>
<div style="padding: 1px">
<el-date-picker
v-model="form.downOffBo.arrivalDate" format="YYYY-MM-DD"
placeholder="YYYY-MM-DD" :disabled-date="disabledDateDP"
default-value="'2024-09-30'"
style="width: 100%;" type="date" value-format="YYYY-MM-DD"
v-model="form.downOffBo.arrivalDate" :disabled-date="disabledDateDP"
default-value="'2025-09-30'" format="YYYY-MM-DD"
placeholder="YYYY-MM-DD"
style="width: 100%;" type="date" value-format="YYYY-MM-DD"
/>
</div>
</el-form-item>
<el-form-item :label="language==0?'离开时间':'Departure Time from Hotel'" prop="downOffBo.arrivaTime"
required>
<el-form-item
:label="language==0?'离开时间':'Departure Time from Hotel'" prop="downOffBo.arrivaTime"
required
>
<!-- <el-date-picker-->
<!-- v-model="form.downOffBo.rrivaTime"-->
<!-- format="YYYY-MM-DD" placeholder="YYYY-MM-DD"-->
<!-- style="width: 100%;" type="date" value-format="YYYY-MM-DD"-->
<!-- />-->
<el-time-picker v-model="form.downOffBo.arrivaTime" placeholder="HH:mm:ss" value-format="HH:mm:ss"
format="HH:mm:ss" style="width: 100%;"/>
<el-time-picker
v-model="form.downOffBo.arrivaTime" format="HH:mm:ss" placeholder="HH:mm:ss"
style="width: 100%;" value-format="HH:mm:ss"
/>
</el-form-item>
<el-form-item :label="language==0?'航班/车次':'Flight/Train Number'" prop="downOffBo.flight" required>
<el-input v-model="form.downOffBo.flight"/>
<el-input v-model="form.downOffBo.flight" />
</el-form-item>
<el-form-item :label="language==0?'机场/火车站':'Airport/Train Station'" prop="downOffBo.stationName"
required>
<el-input v-model="form.downOffBo.stationName"/>
<el-form-item
:label="language==0?'机场/火车站':'Airport/Train Station'" prop="downOffBo.stationName"
required
>
<el-input v-model="form.downOffBo.stationName" />
</el-form-item>
<el-form-item :label="language==0?'航站楼':'Air Terminal'" prop="downOffBo.terminal" required>
<el-input v-model="form.downOffBo.terminal"/>
<el-input v-model="form.downOffBo.terminal" />
</el-form-item>
<el-form-item :label="language==0?'出发酒店':'Departure Hotel'" prop="downOffBo.hotle" required>
<el-input v-model="form.downOffBo.hotle"/>
<el-input v-model="form.downOffBo.hotle" />
</el-form-item>
<el-form-item :label="language==0?'行程单':'Round-Trip Itinerary'" prop="downOffBo.itinerary" required>
<image-upload v-model="form.downOffBo.itinerary" :button-text="language==0?'上传':'Upload'"
:is-show-tip="false"
:limit="1"/>
<image-upload
v-model="form.downOffBo.itinerary" :button-text="language==0?'上传':'Upload'"
:is-show-tip="false"
:limit="1"
/>
</el-form-item>
</div>
<div class="text-center">
<el-button class="btn-lineG" round size="large" type="primary" @click="submitForm()">
{{ language == 0 ? '提交' : 'submit' }}
......@@ -196,10 +228,10 @@
</div>
<div>
<div v-if="showR" class="text-center pd20">
<img class="mauto" src="@/assets/dance/ok.png"/>
<img class="mauto" src="@/assets/dance/ok.png">
<h2 class="text-center">{{
language == 0 ? '境外及港澳台接送信息已提交' : 'Request Form for Overseas, HKT, Mau, China and TPE Athletes Arrival and Departure'
}}</h2>
language == 0 ? '境外及港澳台接送信息已提交' : 'Request Form for Overseas, HKT, Mau, China and TPE Athletes Arrival and Departure'
}}</h2>
<h4 v-if="language == 0" class="text-center">
我们已收到您的申请
</h4>
......@@ -216,22 +248,22 @@
</template>
<script setup>
import {useStorage} from "@vueuse/core/index";
import {getCurrentInstance, watch, ref} from "vue";
import {nextTick} from "@vue/runtime-core";
import {dayjs, ElMessage, ElMessageBox} from "element-plus";
import {addInvitation, countryList} from "@/apiPc/match";
import ImageUpload from "@/components/ImageUpload";
import {masterClassList, getByCard, submitMasterApply, getMasterApply, delByCard, addPickup} from "@/apiPc/common";
import { useStorage } from '@vueuse/core/index'
import { getCurrentInstance, watch, ref } from 'vue'
import { nextTick } from '@vue/runtime-core'
import { dayjs, ElMessage, ElMessageBox } from 'element-plus'
import { addInvitation, countryList } from '@/apiPc/match'
import ImageUpload from '@/components/ImageUpload'
import { masterClassList, getByCard, submitMasterApply, getMasterApply, delByCard, addPickup } from '@/apiPc/common'
const {proxy} = getCurrentInstance()
const { proxy } = getCurrentInstance()
const language = useStorage('language', 0)
const form = ref({
pickUpBo: {
serviceType: 1,
serviceType: 1
},
downOffBo: {
serviceType: 2,
serviceType: 2
},
type: ['1']
})
......@@ -243,146 +275,146 @@ const countrys = ref([])
const courseList = ref([])
const cptId = ref('')
const rules = ref(
{
type: [{required: true, trigger: 'change', message: language.value == 0 ? '请选择' : 'Please choose'},],
'pickUpBo.standing': [{
required: true,
trigger: 'change',
message: language.value == 0 ? '请选择' : 'Please choose'
},],
'pickUpBo.nationalitys': [{
required: true,
trigger: 'blur',
message: language.value == 0 ? '请选择' : 'Please choose'
},],
'pickUpBo.name': [{required: true, trigger: 'change', message: language.value == 0 ? '请输入' : 'Please enter'},],
'pickUpBo.phone': [{
required: true,
trigger: 'change',
message: language.value == 0 ? '请输入' : 'Please enter'
},],
'pickUpBo.counts': [{
required: true,
trigger: 'change',
message: language.value == 0 ? '请输入' : 'Please enter'
},],
'pickUpBo.arrivalDate': [{
required: true,
trigger: 'change',
message: language.value == 0 ? '请选择' : 'Please choose'
},],
'pickUpBo.arrivaTime': [{
required: true,
trigger: 'change',
message: language.value == 0 ? '请选择' : 'Please choose'
},],
'pickUpBo.flight': [{
required: true,
trigger: 'change',
message: language.value == 0 ? '请输入' : 'Please enter'
},],
'pickUpBo.stationName': [{
required: true,
trigger: 'change',
message: language.value == 0 ? '请输入' : 'Please enter'
},],
'pickUpBo.terminal': [{
required: true,
trigger: 'change',
message: language.value == 0 ? '请输入' : 'Please enter'
},],
'pickUpBo.hotle': [{
required: true,
trigger: 'change',
message: language.value == 0 ? '请输入' : 'Please enter'
},],
'pickUpBo.itinerary': [{
required: true,
trigger: 'change',
message: language.value == 0 ? '请选择' : 'Please choose'
},],
'downOffBo.nationalitys': [{
required: true,
trigger: 'blur',
message: language.value == 0 ? '请选择' : 'Please choose'
},],
'downOffBo.standing': [{
required: true,
trigger: 'change',
message: language.value == 0 ? '请选择' : 'Please choose'
},],
'downOffBo.name': [{
required: true,
trigger: 'change',
message: language.value == 0 ? '请输入' : 'Please enter'
},],
'downOffBo.phone': [{
required: true,
trigger: 'change',
message: language.value == 0 ? '请输入' : 'Please enter'
},],
'downOffBo.counts': [{
required: true,
trigger: 'change',
message: language.value == 0 ? '请选择' : 'Please choose'
},],
'downOffBo.arrivalDate': [{
required: true,
trigger: 'change',
message: language.value == 0 ? '请选择' : 'Please choose'
},],
'downOffBo.arrivaTime': [{
required: true,
trigger: 'change',
message: language.value == 0 ? '请选择' : 'Please choose'
},],
'downOffBo.flight': [{
required: true,
trigger: 'change',
message: language.value == 0 ? '请输入' : 'Please enter'
},],
'downOffBo.stationName': [{
required: true,
trigger: 'change',
message: language.value == 0 ? '请输入' : 'Please enter'
},],
'downOffBo.terminal': [{
required: true,
trigger: 'change',
message: language.value == 0 ? '请输入' : 'Please enter'
},],
'downOffBo.hotle': [{
required: true,
trigger: 'change',
message: language.value == 0 ? '请输入' : 'Please enter'
},],
'downOffBo.itinerary': [{
required: true,
trigger: 'change',
message: language.value == 0 ? '请选择' : 'Please choose'
},],
})
{
type: [{ required: true, trigger: 'change', message: language.value == 0 ? '请选择' : 'Please choose' }],
'pickUpBo.standing': [{
required: true,
trigger: 'change',
message: language.value == 0 ? '请选择' : 'Please choose'
}],
'pickUpBo.nationalitys': [{
required: true,
trigger: 'blur',
message: language.value == 0 ? '请选择' : 'Please choose'
}],
'pickUpBo.name': [{ required: true, trigger: 'change', message: language.value == 0 ? '请输入' : 'Please enter' }],
'pickUpBo.phone': [{
required: true,
trigger: 'change',
message: language.value == 0 ? '请输入' : 'Please enter'
}],
'pickUpBo.counts': [{
required: true,
trigger: 'change',
message: language.value == 0 ? '请输入' : 'Please enter'
}],
'pickUpBo.arrivalDate': [{
required: true,
trigger: 'change',
message: language.value == 0 ? '请选择' : 'Please choose'
}],
'pickUpBo.arrivaTime': [{
required: true,
trigger: 'change',
message: language.value == 0 ? '请选择' : 'Please choose'
}],
'pickUpBo.flight': [{
required: true,
trigger: 'change',
message: language.value == 0 ? '请输入' : 'Please enter'
}],
'pickUpBo.stationName': [{
required: true,
trigger: 'change',
message: language.value == 0 ? '请输入' : 'Please enter'
}],
'pickUpBo.terminal': [{
required: true,
trigger: 'change',
message: language.value == 0 ? '请输入' : 'Please enter'
}],
'pickUpBo.hotle': [{
required: true,
trigger: 'change',
message: language.value == 0 ? '请输入' : 'Please enter'
}],
'pickUpBo.itinerary': [{
required: true,
trigger: 'change',
message: language.value == 0 ? '请选择' : 'Please choose'
}],
'downOffBo.nationalitys': [{
required: true,
trigger: 'blur',
message: language.value == 0 ? '请选择' : 'Please choose'
}],
'downOffBo.standing': [{
required: true,
trigger: 'change',
message: language.value == 0 ? '请选择' : 'Please choose'
}],
'downOffBo.name': [{
required: true,
trigger: 'change',
message: language.value == 0 ? '请输入' : 'Please enter'
}],
'downOffBo.phone': [{
required: true,
trigger: 'change',
message: language.value == 0 ? '请输入' : 'Please enter'
}],
'downOffBo.counts': [{
required: true,
trigger: 'change',
message: language.value == 0 ? '请选择' : 'Please choose'
}],
'downOffBo.arrivalDate': [{
required: true,
trigger: 'change',
message: language.value == 0 ? '请选择' : 'Please choose'
}],
'downOffBo.arrivaTime': [{
required: true,
trigger: 'change',
message: language.value == 0 ? '请选择' : 'Please choose'
}],
'downOffBo.flight': [{
required: true,
trigger: 'change',
message: language.value == 0 ? '请输入' : 'Please enter'
}],
'downOffBo.stationName': [{
required: true,
trigger: 'change',
message: language.value == 0 ? '请输入' : 'Please enter'
}],
'downOffBo.terminal': [{
required: true,
trigger: 'change',
message: language.value == 0 ? '请输入' : 'Please enter'
}],
'downOffBo.hotle': [{
required: true,
trigger: 'change',
message: language.value == 0 ? '请输入' : 'Please enter'
}],
'downOffBo.itinerary': [{
required: true,
trigger: 'change',
message: language.value == 0 ? '请选择' : 'Please choose'
}]
})
const open = (params) => {
show.value = true
showR.value = false
form.value = {
pickUpBo: {
serviceType: 1,
arrivalDate:'2024-09-27'
arrivalDate: '2025-09-27'
},
downOffBo: {
serviceType: 2,
arrivalDate:'2024-09-30'
arrivalDate: '2025-09-30'
},
type: ['1'],
type: ['1']
}
title.value = language.value == 0 ? '境外及港澳台接送信息登记' : 'Request Form for Overseas, HKT, Mau, China and TPE Athletes Arrival and Departure'
cptId.value = params.cptId
getCourse()
// proxy.$refs['iformRef']
}
defineExpose({open})
defineExpose({ open })
watch(show, (value) => {
if (!value) {
form.value = {
......@@ -395,7 +427,7 @@ watch(show, (value) => {
})
function getCourse() {
masterClassList({cptId: cptId.value}).then(res => {
masterClassList({ cptId: cptId.value }).then(res => {
courseList.value = res.data
})
}
......@@ -406,30 +438,30 @@ function setActive(n) {
function submitForm() {
proxy.$refs['iformRef'].validate(async valid => {
if (valid) {
form.value.pickUpBo.cptId = cptId.value
form.value.downOffBo.cptId = cptId.value
// form.value.pickUpBo.serviceType=1
// form.value.downOffBo.serviceType=2
console.log(form.value)
let forms = JSON.parse(JSON.stringify(form.value))
forms.pickUpBo.nationalitys = forms.pickUpBo.nationalitys?.join(',')
forms.pickUpBo.standing = forms.pickUpBo.standing?.join(',')
forms.downOffBo.nationalitys = forms.downOffBo.nationalitys?.join(',')
forms.downOffBo.standing = forms.downOffBo.standing?.join(',')
forms.type = null
if (!form.value.type.includes('1')) forms.pickUpBo = {}
if (!form.value.type.includes('2')) forms.downOffBo = {}
const res = await addPickup(forms)
if (res.code == 200) {
proxy.$modal.msgSuccess('操作成功!')
showR.value = true
// show.value=false
}
} else {
proxy.$modal.msgError(language.value == 0 ? '请完善信息!' : 'Please complete the information!')
}
if (valid) {
form.value.pickUpBo.cptId = cptId.value
form.value.downOffBo.cptId = cptId.value
// form.value.pickUpBo.serviceType=1
// form.value.downOffBo.serviceType=2
console.log(form.value)
const forms = JSON.parse(JSON.stringify(form.value))
forms.pickUpBo.nationalitys = forms.pickUpBo.nationalitys?.join(',')
forms.pickUpBo.standing = forms.pickUpBo.standing?.join(',')
forms.downOffBo.nationalitys = forms.downOffBo.nationalitys?.join(',')
forms.downOffBo.standing = forms.downOffBo.standing?.join(',')
forms.type = null
if (!form.value.type.includes('1')) forms.pickUpBo = {}
if (!form.value.type.includes('2')) forms.downOffBo = {}
const res = await addPickup(forms)
if (res.code == 200) {
proxy.$modal.msgSuccess('操作成功!')
showR.value = true
// show.value=false
}
} else {
proxy.$modal.msgError(language.value == 0 ? '请完善信息!' : 'Please complete the information!')
}
}
)
}
......@@ -490,32 +522,32 @@ function getCountryList() {
// function initdateRZ() {
// const today = dayjs().format('YYYY-MM-DD')
// form.value.pickUpBo.arrivalDate ='2024-07'
// form.value.pickUpBo.arrivalDate ='2025-07'
// }
// function initdateDP() {
// const today = dayjs().format('YYYY-MM-DD')
// form.value.downOffBo.arrivalDate ='2024-07'
// form.value.downOffBo.arrivalDate ='2025-07'
// }
function disabledDateRZ(date) {
// 16-20
//判读今天大与2024-07-16
// 判读今天大与2024-07-16
const today = dayjs().format('YYYY-MM-DD')
// if ('2024-07-16' < today) {
// return !((date.getTime() >= dayjs(today).valueOf()) && (date.getTime() <= dayjs('2024-09-27').valueOf()))
// if ('2025-07-16' < today) {
// return !((date.getTime() >= dayjs(today).valueOf()) && (date.getTime() <= dayjs('2025-09-27').valueOf()))
// } else {
// return !((date.getTime() >= dayjs('2024-07-16').valueOf()) && (date.getTime() <= dayjs('2024-07-20').valueOf()))
// return !((date.getTime() >= dayjs('2025-07-16').valueOf()) && (date.getTime() <= dayjs('2025-07-20').valueOf()))
// }
return !(date.getTime() == dayjs('2024-09-27').valueOf())
return !(date.getTime() == dayjs('2025-09-27').valueOf())
}
function disabledDateDP(date) {
const today = dayjs().format('YYYY-MM-DD')
// if ('2024-07-18' < today) {
// return !((date.getTime() >= dayjs(today).valueOf()) && (date.getTime() <= dayjs('2024-07-22').valueOf()))
// if ('2025-07-18' < today) {
// return !((date.getTime() >= dayjs(today).valueOf()) && (date.getTime() <= dayjs('2025-07-22').valueOf()))
// } else {
// return !((date.getTime() >= dayjs('2024-07-18').valueOf()) && (date.getTime() <= dayjs('2024-07-22').valueOf()))
// return !((date.getTime() >= dayjs('2025-07-18').valueOf()) && (date.getTime() <= dayjs('2025-07-22').valueOf()))
// }
return !(date.getTime() == dayjs('2024-09-30').valueOf())
return !(date.getTime() == dayjs('2025-09-30').valueOf())
}
</script>
......
<template>
<div>
<div class="banner">
<el-carousel class="forPc" autoplay :interval="2000" height="450px" :autoplay="false" arrow="hover" @change="carouselChange">
<el-carousel-item style="height: 450px;" v-for="n in maList" :key="n.id">
<el-carousel
:autoplay="false" :interval="2000" arrow="hover" autoplay class="forPc"
height="450px"
@change="carouselChange"
>
<el-carousel-item v-for="n in maList" :key="n.id" style="height: 450px;">
<div class="bannerItem">
<div class="h100" @click.stop="goMatch(n)">
<img v-if="n.bgImgUrl" class="bannerImg" :src="fillImgUrl(n.bgImgUrl)">
<img v-if="n.bgImgUrl" :src="fillImgUrl(n.bgImgUrl)" class="bannerImg">
<img v-else class="bannerImg" src="@/assets/dance/banner.png">
<div class="box forPc" style="position: absolute;top: 0;left: 0;right: 0;margin: auto;">
<div class="banner-count" v-if="n.time>0" @click="goMatch(n)">
<div v-if="n.time>0" class="banner-count" @click="goMatch(n)">
距离开始还有
<van-count-down :time="n.time" format="DD 天 HH 时 mm 分 ss 秒">
<template #default="timeData">
......@@ -31,12 +35,12 @@
</van-count-down>
</div>
<div v-if="n.timeEnd<0">
<div class="banner-count bb" @click="goMatch(n)">
<div class="banner-count bb" @click="goMatch(n)">
报名已结束
</div>
</div>
<div class="banner-count bb" v-if="n.time<=0 && n.timeEnd>=0" @click="goMatch(n)">
<div v-if="n.time<=0 && n.timeEnd>=0" class="banner-count bb" @click="goMatch(n)">
开始报名
</div>
</div>
......@@ -44,14 +48,14 @@
</div>
</el-carousel-item>
</el-carousel>
<el-carousel class="forWei" height="160px" autoplay arrow="hover" @change="carouselChange">
<el-carousel-item style="height: 160px;" v-for="n in maList" :key="n.id">
<el-carousel arrow="hover" autoplay class="forWei" height="160px" @change="carouselChange">
<el-carousel-item v-for="n in maList" :key="n.id" style="height: 160px;">
<div class="bannerItem" style="height:100%">
<div class="h100" style="position: relative">
<img v-if="n.bgImgUrl" class="bannerImg" :src="fillImgUrl(n.bgImgUrl)">
<img v-if="n.bgImgUrl" :src="fillImgUrl(n.bgImgUrl)" class="bannerImg">
<img v-else class="bannerImg" src="@/assets/dance/banner.png">
<div style="position: absolute;left: 0;right: 0;bottom: 0;margin: auto;">
<div class="banner-count" v-if="n.time>0" @click="goMatch(n)">
<div v-if="n.time>0" class="banner-count" @click="goMatch(n)">
距离开始还有
<van-count-down :time="n.time" format="DD 天 HH 时 mm 分 ss 秒">
<template #default="timeData">
......@@ -74,36 +78,36 @@
</van-count-down>
</div>
<div v-if="n.timeEnd<0">
<!-- <a target="_blank" href="https://wx.vzan.com/live/page/1151815649?v=1720589464698" class="banner-count" v-if="time>0&&n.id=='1778253367748993026'" @click="goMatch(n)">-->
<!-- <van-count-down :time="time" format="DD 天 HH 时 mm 分 ss 秒">-->
<!-- <template #default="timeData">-->
<!-- <div class="block">{{ timeData.days }}-->
<!-- <span class="colon">天</span>-->
<!-- </div>-->
<!-- :-->
<!-- <div class="block">{{ timeData.hours }}-->
<!-- <span class="colon">时</span>-->
<!-- </div>-->
<!-- :-->
<!-- <div class="block">{{ timeData.minutes }}-->
<!-- <span class="colon">分</span>-->
<!-- </div>-->
<!-- :-->
<!-- <div class="block">{{ timeData.seconds }}-->
<!-- <span class="colon">秒</span>-->
<!-- </div>-->
<!-- </template>-->
<!-- </van-count-down>-->
<!-- 开始直播-->
<!-- </a>-->
<!-- <a target="_blank" href="https://wx.vzan.com/live/page/1151815649?v=1720589464698" class="banner-count bb" v-else-if="time<=0&&n.id=='1778253367748993026'" @click="goMatch(n)">-->
<!-- 直播进行中-->
<!-- </a>-->
<div class="banner-count bb" @click="goMatch(n)">
<!-- <a target="_blank" href="https://wx.vzan.com/live/page/1151815649?v=1720589464698" class="banner-count" v-if="time>0&&n.id=='1778253367748993026'" @click="goMatch(n)">-->
<!-- <van-count-down :time="time" format="DD 天 HH 时 mm 分 ss 秒">-->
<!-- <template #default="timeData">-->
<!-- <div class="block">{{ timeData.days }}-->
<!-- <span class="colon">天</span>-->
<!-- </div>-->
<!-- :-->
<!-- <div class="block">{{ timeData.hours }}-->
<!-- <span class="colon">时</span>-->
<!-- </div>-->
<!-- :-->
<!-- <div class="block">{{ timeData.minutes }}-->
<!-- <span class="colon">分</span>-->
<!-- </div>-->
<!-- :-->
<!-- <div class="block">{{ timeData.seconds }}-->
<!-- <span class="colon">秒</span>-->
<!-- </div>-->
<!-- </template>-->
<!-- </van-count-down>-->
<!-- 开始直播-->
<!-- </a>-->
<!-- <a target="_blank" href="https://wx.vzan.com/live/page/1151815649?v=1720589464698" class="banner-count bb" v-else-if="time<=0&&n.id=='1778253367748993026'" @click="goMatch(n)">-->
<!-- 直播进行中-->
<!-- </a>-->
<div class="banner-count bb" @click="goMatch(n)">
报名已结束
</div>
</div>
<div class="banner-count bb" v-if="n.time<=0 && n.timeEnd>=0" @click="goMatch(n)">
<div v-if="n.time<=0 && n.timeEnd>=0" class="banner-count bb" @click="goMatch(n)">
开始报名
</div>
</div>
......@@ -112,53 +116,59 @@
</el-carousel-item>
</el-carousel>
</div>
<div class="box zn-bg">
<div class="zn-Box">
<img class="bbbg" v-if="matchData?.logoUrl" :src="fillImgUrl(matchData.logoUrl)"/>
<img v-if="matchData?.logoUrl" :src="fillImgUrl(matchData.logoUrl)" class="bbbg">
<el-row style="align-items: center">
<el-col :sm="24" :lg="10">
<el-col :lg="10" :sm="24">
<div class="bgbg">
<h1 style="color: #fff">{{matchData?.name}}</h1>
<a class="zn-btn" @click="goGuide" target="_blank" >参赛指南
<h1 style="color: #fff">{{ matchData?.name }}</h1>
<a class="zn-btn" target="_blank" @click="goGuide">参赛指南
<el-icon>
<download/>
<download />
</el-icon>
</a>
<a class="zn-btn ml20 btn-q forPc" v-if="matchData.isCourseView==1" @click="popMaster">青少年公益课报名</a>
<a class="zn-btn ml20 btn-q" v-show="matchData?.id=='1778253367748993026'" @click="backNumberSearch">背号查询</a>
<a class="zn-btn ml20 btn-q" v-show="matchData?.id=='1778253367748993026'" @click="schSearch">日程查询</a>
<a
v-if="matchData.isCourseView==1" class="zn-btn ml20 btn-q forPc"
@click="popMaster"
>青少年公益课报名</a>
<a
v-show="matchData?.id=='1778253367748993026'" class="zn-btn ml20 btn-q"
@click="backNumberSearch"
>背号查询</a>
<a v-show="matchData?.id=='1778253367748993026'" class="zn-btn ml20 btn-q" @click="schSearch">日程查询</a>
</div>
</el-col>
<el-col :sm="24" :lg="14">
<HomeQuick :match-id="matchData?.id" :cpt-name="matchData?.name"/>
<el-col :lg="14" :sm="24">
<HomeQuick :cpt-name="matchData?.name" :match-id="matchData?.id" />
</el-col>
</el-row>
</div>
</div>
<div id="part0" class="box part">
<el-row :gutter="20">
<el-col :sm="24" :lg="12">
<el-col :lg="12" :sm="24">
<div class="indexTitle">
<h3 class="leftboderTT">赛事日程</h3>
<a class="more" href="#/saiC">MORE</a>
</div>
<!--赛事日历-->
<el-card :body-style="{'padding':'20px 20px'}">
<home-calendar/>
<home-calendar />
</el-card>
</el-col>
<el-col :sm="24" :lg="12">
<el-col :lg="12" :sm="24">
<div class="indexTitle">
<h3 class="leftboderTT">奖牌榜</h3>
<a class="more" href="#/saiC">MORE</a>
</div>
<!--历史排名-->
<el-card :body-style="{'padding':'10px 20px 18px'}">
<el-table stripe :data="rank">
<el-table-column label="名次" align="center" width="50" type="index">
<el-table :data="rank" stripe>
<el-table-column align="center" label="名次" type="index" width="50">
<template #default="scope">
<span v-if="scope.row.mingCi == 1" style="color:#F8A617">{{ scope.row.mingCi }}</span>
<span v-else-if="scope.row.mingCi == 2" style="color:#778B92">{{ scope.row.mingCi }}</span>
......@@ -166,16 +176,16 @@
<span v-else>{{ scope.row.mingCi }}</span>
</template>
</el-table-column>
<el-table-column label="国家" prop="name">
<template #default="scope">
<div>
<span :class="`flag-icon flag-icon-${scope.row.code}`"></span>
<span :class="`flag-icon flag-icon-${scope.row.code}`" />
{{ scope.row.countryName }}
</div>
</template>
</el-table-column>
<el-table-column label="组合" align="center">
<el-table-column align="center" label="组合">
<template #default="scope">
<div class="text-primary esp">{{ scope.row.zuHe }}</div>
</template>
......@@ -205,14 +215,14 @@
</template>
</el-table-column>
</el-table>
</el-card>
</el-col>
</el-row>
</div>
<!-- 新闻 -->
<div id="part1" class="part">
<div class="box">
<div class="indexTitle">
<h3 class="leftboderTT">新闻资讯</h3>
......@@ -220,9 +230,9 @@
</div>
<el-row :gutter="20">
<el-col
v-for="(n,index) in newest2"
:key="n.id" :xs="24" :sm="8"
:lg="8"
v-for="(n,index) in newest2"
:key="n.id" :lg="8" :sm="8"
:xs="24"
>
<div class="activeItem" @click="goDetail(n)">
<div class="imgbox">
......@@ -230,13 +240,13 @@
</div>
<div class="info">
<div class="date">
{{ n.sortName }} | {{n.belongTime}}
{{ n.sortName }} | {{ n.belongTime }}
</div>
<h3 class="esp">{{ n.name }}</h3>
<p class="esp_2" style="height: 40px">
{{n.subName}}
{{ n.subName }}
</p>
<a>查看详情</a>
<a>查看详情</a>
</div>
</div>
</el-col>
......@@ -253,7 +263,7 @@
<el-row :gutter="20">
<el-col :lg="8">
<a class="liveImgbox" target="_blank" @click="golive(livelist[0])">
<div class="livetimecount" v-if="time>0">
<div v-if="time>0" class="livetimecount">
<van-count-down :time="time" format="DD 天 HH 时 mm 分 ss 秒">
<template #default="timeData">
<div class="block">{{ timeData.days }}
......@@ -271,26 +281,26 @@
</template>
</van-count-down>
</div>
<i class="ii" v-else-if="etime>0&&time<=0">直播中</i>
<!-- <i class="livetimecount" v-if="etime<=0">直播已结束</i>-->
<i v-else-if="etime>0&&time<=0" class="ii">直播中</i>
<!-- <i class="livetimecount" v-if="etime<=0">直播已结束</i>-->
<div class="imgBox">
<img v-if="time>0" src="/img/111.jpeg"/>
<img v-if="time>0" src="/img/111.jpeg">
<img v-else :src="fillImgUrl_webSite(livelist[0]?.picUrl)">
</div>
<h3 class="esp" v-if="time>0">
<h3 v-if="time>0" class="esp">
2024WDSF亚洲体育舞蹈节
</h3>
<h3 class="esp" v-else>
{{livelist[0]?.name }}
<h3 v-else class="esp">
{{ livelist[0]?.name }}
</h3>
</a>
</el-col>
<el-col :lg="16">
<div class="swiperPic">
<swiper
class="swiper-wrapper" :modules="modules" :slides-per-view="3" :space-between="20"
:navigation="navigationPic"
:autoplay="true" :loop="true"
:autoplay="true" :loop="true" :modules="modules" :navigation="navigationPic"
:slides-per-view="3"
:space-between="20" class="swiper-wrapper"
>
<swiper-slide v-for="(n,i) in picList" :key="i">
<div class="picbox" @click="goDetail(n)">
......@@ -304,32 +314,36 @@
</el-col>
</el-row>
<el-row class="news-l-r">
<el-col v-for="(n,index) in livelist" :lg="8" v-show="index>0">
<el-col v-for="(n,index) in livelist" v-show="index>0" :lg="8">
<div class="item" style="padding: 0;margin: 20px 0 0" @click="goDetail(n)">
<div class="imgbox">
<i class="playIcon"></i>
<i class="playIcon" />
<img :src="fillImgUrl_webSite(n.picUrl)"></div>
<div class="info">
<div class="text-primary small-size">
<span v-if="n.subName">{{n.subName + ' | '}}</span>
{{ n.belongTime }}</div>
<span v-if="n.subName">{{ n.subName + ' | ' }}</span>
{{ n.belongTime }}
</div>
<h2 class="esp_2">{{ n.name }}</h2>
</div>
</div>
</el-col>
</el-row>
</el-card>
</div>
</div>
<div hidden>
<div class="box">
<div class="indexTitle">
<h3 class="leftboderTT">评委介绍</h3>
</div>
<el-row :gutter="20">
<el-col :sm="12" :xl="4" :xs="12" :lg="4" :md="8" v-for="n in personList" :key="n.name">
<el-col
v-for="n in personList" :key="n.name" :lg="4" :md="8" :sm="12"
:xl="4" :xs="12"
>
<div class="teacher" @click="goLeaderInfo">
<div class="imgbox"><img :src="n.src"></div>
<h3 class="esp">{{ n.name }}</h3>
......@@ -348,16 +362,17 @@
</div>
<div class="aboutBox">
<div class="content">
<div v-html="aboutUsContent"></div>
<!-- 无锡WDSF亚洲体育舞蹈节是由世界体育舞蹈(无锡)中心(世界体育舞蹈联合、亚洲体育舞蹈联合、中国体育舞蹈联合会和无锡市人民政府共建)打造面向全球的、长期落户的、城市自主的品牌赛事。-->
<!-- 2023年7月首次举办无锡2023年WDSF亚洲体育舞蹈节,包括2023年WDSF世界标准舞锦标赛、2023年WDSF世界体育舞蹈大奖赛(中国无锡)、2023年全国体育舞蹈公开系列赛(无锡站),共吸引来自全球39个国家及地区的1,716名顶级舞者参与。-->
<!-- 同时,并将世界体育舞蹈(无锡)中心成功落户中国无锡,以“节日有竞赛、竞赛节日化”为发展指导原则,“四方”共同努力服务全球舞者。 <div class="shadowbox"/>-->
<div v-html="aboutUsContent" />
<!-- 无锡WDSF亚洲体育舞蹈节是由世界体育舞蹈(无锡)中心(世界体育舞蹈联合、亚洲体育舞蹈联合、中国体育舞蹈联合会和无锡市人民政府共建)打造面向全球的、长期落户的、城市自主的品牌赛事。-->
<!-- 2023年7月首次举办无锡2023年WDSF亚洲体育舞蹈节,包括2023年WDSF世界标准舞锦标赛、2023年WDSF世界体育舞蹈大奖赛(中国无锡)、2023年全国体育舞蹈公开系列赛(无锡站),共吸引来自全球39个国家及地区的1,716名顶级舞者参与。-->
<!-- 同时,并将世界体育舞蹈(无锡)中心成功落户中国无锡,以“节日有竞赛、竞赛节日化”为发展指导原则,“四方”共同努力服务全球舞者。 <div class="shadowbox"/>-->
</div>
<div class="mt30 text-center">
<a class="btn-lineG" href="#/about/wuDao" style="display: inline-flex;align-items: center;">了解更多<img
style="filter: brightness(2);height: 8px" src="@/assets/v1/more.png"/></a>
src="@/assets/v1/more.png" style="filter: brightness(2);height: 8px"
></a>
</div>
</div>
</el-col>
<el-col :lg="12">
......@@ -384,13 +399,13 @@
</el-col>
</el-row>
</div>
<div class="box">
<div class="indexTitle">
<h3 class="leftboderTT">合作伙伴</h3>
</div>
<el-row :gutter="20">
<el-col :lg="6" :sm="6" :xs="6" v-for="p in partners">
<el-col v-for="p in partners" :lg="6" :sm="6" :xs="6">
<div class="logobox">
<img :src="fillImgUrl(JSON.parse(p.picUrl))">
</div>
......@@ -402,26 +417,27 @@
<script setup>
import HomeQuick from '@/viewsPc/components/homeQuick'
import HomeCalendar from '@/viewsPc/components/homeCalendar'
import {ref, nextTick, onMounted, watch} from 'vue'
import {getCurrentInstance} from '@vue/runtime-core'
import {getHomePage, getNewsListById, getNewsList, getRank} from '@/apiPc/webSite'
import {useRouter} from 'vue-router'
import {rankList} from '@/assets/js/data'
import { ref, nextTick, onMounted, watch } from 'vue'
import { getCurrentInstance } from '@vue/runtime-core'
import { getHomePage, getNewsListById, getNewsList, getRank } from '@/apiPc/webSite'
import { useRouter } from 'vue-router'
import { rankList } from '@/assets/js/data'
import _ from 'lodash'
import {Swiper, SwiperSlide} from 'swiper/vue'
import {Autoplay, Navigation} from 'swiper'
import { Swiper, SwiperSlide } from 'swiper/vue'
import { Autoplay, Navigation } from 'swiper'
import 'swiper/css'
import {dayjs} from 'element-plus'
import * as match from "@/apiPc/match";
import {getAboutUs, getppInfo, getZNList} from "@/apiPc/match";
import { dayjs } from 'element-plus'
import * as match from '@/apiPc/match'
import { getAboutUs, getppInfo, getZNList } from '@/apiPc/match'
const modules = [Autoplay, Navigation]
const navigationPic = ref({
nextEl: '.picnext',
prevEl: '.picprev'
})
const router = useRouter()
const {proxy} = getCurrentInstance()
const emit = defineEmits(['pop','pickup','backNumber','schSearch'])
const { proxy } = getCurrentInstance()
const emit = defineEmits(['pop', 'pickup', 'backNumber', 'schSearch'])
const time = ref(0)
const etime = ref(0)
const personList = ref([
......@@ -429,7 +445,7 @@ const personList = ref([
{ name: 'Nenad Jeftic', pp: '标准舞裁判长 塞尔维亚', src: '/img/2.png' },
{ name: 'Dorel Bagiu', pp: '罗马尼亚', src: '/img/3.png' },
{ name: 'Eduard Korotin', pp: ' 爱沙尼亚', src: '/img/4.png' },
{ name: 'Ana Cristina Silva', pp: '葡萄牙', src: '/img/5.png'},
{ name: 'Ana Cristina Silva', pp: '葡萄牙', src: '/img/5.png' },
{ name: 'Dallas Leslie Williams', pp: '记分长 澳大利亚', src: '/img/6.png' }
])
const activeNews = ref(0)
......@@ -455,46 +471,46 @@ onMounted(() => {
const init = () => {
var today = dayjs().format('YYYY-MM-DD HH:mm:ss')
time.value = dayjs('2024-07-17 07:00:00').diff(today, 'millisecond')
etime.value = dayjs('2024-07-22 12:00:00').diff(today, 'millisecond')
getRank().then(res=>{
rank.value = res.data.slice(0,6)
time.value = dayjs('2025-07-17 07:00:00').diff(today, 'millisecond')
etime.value = dayjs('2025-07-22 12:00:00').diff(today, 'millisecond')
getRank().then(res => {
rank.value = res.data.slice(0, 6)
})
getNewsListById({
pageSize: time.value>0? 3:4,
pageNum: 1,
sortId: '10000006'
}
pageSize: time.value > 0 ? 3 : 4,
pageNum: 1,
sortId: '10000006'
}
).then(res => {
livelist.value = res.rows
})
getNewsListById({
pageSize: 5,
pageNum: 1,
sortId: '10000007'
}
pageSize: 5,
pageNum: 1,
sortId: '10000007'
}
).then(res => {
picList.value = res.rows
})
getNewsList({
pageSize: 3,
pageNum: 1,
language: 1,
code: '1000'
}
pageSize: 3,
pageNum: 1,
language: 1,
code: '1000'
}
).then(res => {
newest2.value = res.rows
})
match.getMaList({topFlag:1}).then((res) => {
match.getMaList({ topFlag: 1 }).then((res) => {
maList.value = res.rows
for (let n of maList.value) {
for (const n of maList.value) {
var today = dayjs().format('YYYY-MM-DD HH:mm:ss')
if(n.signBeginTime){
if (n.signBeginTime) {
n.time = dayjs(n.signBeginTime).diff(today, 'millisecond')
} else {
n.time = 0
}
if(n.signEndTime){
if (n.signEndTime) {
n.timeEnd = dayjs(n.signEndTime).diff(today, 'millisecond')
} else {
n.time = 0
......@@ -506,9 +522,9 @@ const init = () => {
}
const getpartners = () => {
match.getppInfo('10000001').then((res) => {
aboutUsContent.value = res.data.contextZh
aboutUsContent.value = res.data.contextZh
})
match.getZNList({sortId:'2000',language:1}).then((res) => {
match.getZNList({ sortId: '2000', language: 1 }).then((res) => {
partners.value = res.rows
})
}
......@@ -525,7 +541,7 @@ const goDetail = (n) => {
}
}
const golive = (n) => {
if(time.value>0){
if (time.value > 0) {
window.open('https://wx.vzan.com/live/page/1151815649?v=1720589464698')
} else {
router.push({
......@@ -560,38 +576,38 @@ const goGuide = () => {
router.push({
name: 'guide',
query: {
index:8
index: 8
}
})
}
const popMaster = () => {
var params = {
cptId:matchData.value.id
cptId: matchData.value.id
}
emit('pop',params)
emit('pop', params)
}
const backNumberSearch = () => {
var params = {
cptId:matchData.value.id
cptId: matchData.value.id
}
emit('backNumber',params)
emit('backNumber', params)
}
const schSearch = () => {
var params = {
cptId:matchData.value.id
cptId: matchData.value.id
}
emit('schSearch',params)
emit('schSearch', params)
}
const handlePickup=()=>{
const params={
cptId :matchData.value.id
const handlePickup = () => {
const params = {
cptId: matchData.value.id
}
emit('pickup',params)
emit('pickup', params)
}
</script>
<style scoped lang="scss">
<style lang="scss" scoped>
.zn-bg {
background: linear-gradient(90deg, #8623FC, #8623FC, #8623FC, #8623FC, #8623FC, #8623FC, #453DEA, #8623FC);
......@@ -602,28 +618,28 @@ const handlePickup=()=>{
background-size: contain;
position: relative;
overflow: hidden;
.bbbg {
position: absolute;
width: 100%;
height: 100%;
object-fit: cover;
}
.bgbg {
padding: 5%;
img {
margin: 5% 0
}
}
.itemBox {
padding: 20px 40px;
}
border-radius: 15px;
.zn-btn {
background: #FFFFFF;
font-size: 18px;
......@@ -633,8 +649,8 @@ const handlePickup=()=>{
display: inline-flex;
align-items: center;
}
}
.app-main {
......@@ -651,8 +667,9 @@ const handlePickup=()=>{
height: 450px;
background: #000;
position: relative;
.banner-count {cursor: pointer;
.banner-count {
cursor: pointer;
position: absolute;
padding: 20px 40px;
font-size: 20px;
......@@ -671,7 +688,7 @@ const handlePickup=()=>{
flex-wrap: nowrap;
right: 5%;
color: #fff;
.van-count-down {
display: flex;
color: #fff;
......@@ -679,7 +696,7 @@ const handlePickup=()=>{
width: 360px;
font-size: 41px;
}
.block {
color: #fff;
text-align: center;
......@@ -687,7 +704,7 @@ const handlePickup=()=>{
font-size: 41px;
font-family: DIN Alternate;
}
.colon {
color: #fff;
display: block;
......@@ -695,17 +712,27 @@ const handlePickup=()=>{
font-size: 20px;
}
}
.bb{width: 580px;justify-content: center;height: 100px;font-size: 30px;}
.banner-count.bb:hover{box-shadow: 0 0 20px #453DEA;border-radius: 100px;
.bb {
width: 580px;
justify-content: center;
height: 100px;
font-size: 30px;
}
.banner-count.bb:hover {
box-shadow: 0 0 20px #453DEA;
border-radius: 100px;
background: linear-gradient(-90deg, #8623FC, #453DEA)
}
.box {
position: absolute;
height: 100%;
left: 0;
right: 0;
}
h3 {
position: absolute;
color: #fff;
......@@ -714,7 +741,7 @@ const handlePickup=()=>{
bottom: 50px;
font-size: 3vw;
}
video {
width: 100%;
height: 100%;
......@@ -729,26 +756,26 @@ const handlePickup=()=>{
.banner {
position: relative;
margin: 0 0 30px;
:deep(.el-carousel__arrow) {
border-radius: 0;
.el-icon {
color: transparent;
}
&:hover {
filter: brightness(1.5)
}
}
:deep(.el-carousel__arrow--left) {
background: url("@/assets/images/prev2@2x.png") no-repeat center;
width: 78px;
height: 45px;
background-size: contain;
}
:deep(.el-carousel__arrow--right) {
background: url("@/assets/images/next2@2x.png") no-repeat center;
width: 78px;
......@@ -765,10 +792,11 @@ const handlePickup=()=>{
position: relative;
height: 400px;
}
.ggbond {
height: 230px;
position: relative;
img {
height: 100%;
object-fit: cover;
......@@ -780,51 +808,101 @@ const handlePickup=()=>{
}
}
.teacher{height: 410px;background: #fff;
position: relative;border-radius: 10px;overflow: hidden;
.imgbox{background: linear-gradient(0,#C8AAFC,#fff)}
img{height: 350px;width: 100%;object-fit: cover;}
h3{color: #fff;background: url("@/assets/dance/name_bg.png") no-repeat center;
background-size:110% 100%;text-align: center;height: 30px;line-height: 30px;
font-size: 18px;position: absolute;width: 100%;bottom: 30px;}
p{text-align: center;margin: 25px 0 0;
font-size: 14px;}
.teacher {
height: 410px;
background: #fff;
position: relative;
border-radius: 10px;
overflow: hidden;
.imgbox {
background: linear-gradient(0, #C8AAFC, #fff)
}
img {
height: 350px;
width: 100%;
object-fit: cover;
}
h3 {
color: #fff;
background: url("@/assets/dance/name_bg.png") no-repeat center;
background-size: 110% 100%;
text-align: center;
height: 30px;
line-height: 30px;
font-size: 18px;
position: absolute;
width: 100%;
bottom: 30px;
}
p {
text-align: center;
margin: 25px 0 0;
font-size: 14px;
}
}
@media screen and (max-width: 1650px) {
.teacher{height: 320px;
.imgbox{
img{height: 260px}
.teacher {
height: 320px;
.imgbox {
img {
height: 260px
}
}
}
}
@media screen and (max-width: 1200px) {
.teacher{height: 450px;margin: 0 0 20px;
.imgbox{
img{height: 390px}
.teacher {
height: 450px;
margin: 0 0 20px;
.imgbox {
img {
height: 390px
}
}
}
}
@media screen and (max-width: 900px) {
.teacher{height: 400px;margin: 0 0 20px;
.imgbox{
img{height: 340px}
.teacher {
height: 400px;
margin: 0 0 20px;
.imgbox {
img {
height: 340px
}
}
}
}
@media screen and (max-width: 800px) {
.teacher{height: 400px;margin: 0 0 20px;
.imgbox{
img{height: 260px}
.teacher {
height: 400px;
margin: 0 0 20px;
.imgbox {
img {
height: 260px
}
}
}
}
.aboutBox {
background: url("@/assets/dance/about_bg.png") no-repeat center;
height: 375px;
background-size: cover;
padding: 40px 60px;
position: relative;
.content {
font-size: 18px;
line-height: 2.2;
......@@ -833,7 +911,7 @@ const handlePickup=()=>{
text-align: left;
text-indent: 2em;
}
.shadowbox {
position: absolute;
left: 0;
......@@ -842,7 +920,7 @@ const handlePickup=()=>{
width: 100%;
background: linear-gradient(0deg, rgba(255, 255, 255, 1), rgba(255, 255, 255, 0));
}
.btn-lineG {
}
}
......@@ -854,7 +932,7 @@ const handlePickup=()=>{
padding: 1px;
position: relative;
display: flex;
.content {
background: #fff;
width: 60%;
......@@ -866,33 +944,33 @@ const handlePickup=()=>{
bottom: 0;
margin: auto;
}
div {
padding-left: 60px;
}
.phone {
background: url("@/assets/dance/map01.png") no-repeat left;
background-size: 30px;
}
.address {
background: url("@/assets/dance/map02.png") no-repeat left;
background-size: 30px;
margin: 50px 0;
}
.email {
background: url("@/assets/dance/map03.png") no-repeat left;
background-size: 30px;
}
h4 {
margin: 0;
font-size: 16px;
color: #AAAAAA;
}
p {
margin: 13px 0 0;
}
......@@ -903,9 +981,11 @@ const handlePickup=()=>{
height: 180px;
border-radius: 10px;
margin: 0 0 30px;
img {
width: 100%;height: 100%;object-fit: contain;
width: 100%;
height: 100%;
object-fit: contain;
}
}
......@@ -914,7 +994,7 @@ const handlePickup=()=>{
position: relative;
height: 100%;
padding: 20px 45px;
.picprev {
position: absolute;
left: 5px;
......@@ -923,12 +1003,12 @@ const handlePickup=()=>{
margin: auto;
height: 33px;
cursor: pointer;
&:hover {
filter: brightness(2)
}
}
.picnext {
position: absolute;
right: 5px;
......@@ -937,7 +1017,7 @@ const handlePickup=()=>{
margin: auto;
height: 33px;
cursor: pointer;
&:hover {
filter: brightness(2)
}
......@@ -948,7 +1028,7 @@ const handlePickup=()=>{
.teacher {
height: 460px;
margin: 0 0 20px;
img {
height: 400px
}
......@@ -961,7 +1041,7 @@ const handlePickup=()=>{
}
.calendarList {
padding: 0;
ul {
li {
margin: 10px
......@@ -977,7 +1057,7 @@ const handlePickup=()=>{
.teacher {
height: 320px;
margin: 0 0 20px;
img {
height: 260px
}
......@@ -989,17 +1069,17 @@ const handlePickup=()=>{
div {
padding-left: 40px;
}
.content {
width: 80%;
left: 10%;
padding: 10px 20px 0 20px;
}
.address {
margin: 30px 0;
}
p {
text-align: left;
word-break: break-all;
......@@ -1014,33 +1094,48 @@ const handlePickup=()=>{
width: auto;
left: 0;
right: 0;
.van-count-down {
margin: 30px 0 0;
}
}
.bgbg {
text-align: center;
img {
max-width: 100%;
}
h1 {
text-align: center
}
}
}
.livetimecount{position: absolute;top: 0;z-index: 2;background: #F04035;
.livetimecount {
position: absolute;
top: 0;
z-index: 2;
background: #F04035;
padding: 2px 4px;
&::after{content: ''; width: 0;
height: 0;position: absolute;right: -15px;top: 0;
&::after {
content: '';
width: 0;
height: 0;
position: absolute;
right: -15px;
top: 0;
border-top: 24px solid #F04035;
border-right: 15px solid transparent;}
.van-count-down { display: flex;
border-right: 15px solid transparent;
}
.van-count-down {
display: flex;
color: #fff;
font-size: 14px;
.block {
color: #fff;
text-align: center;
......@@ -1049,12 +1144,16 @@ const handlePickup=()=>{
}
}
}
@media (max-width: 500px) {
.forPc{display: none!important;}
.logobox{
.forPc {
display: none !important;
}
.logobox {
height: 60px;
}
}
:deep(.btn-q) {
//background: #FFFFFF;
//font-size: 18px;
......@@ -1063,7 +1162,7 @@ const handlePickup=()=>{
//padding: 10px 20px;
//display: inline-flex;
//align-items: center;
padding: 20px 40px;
font-size: 20px;
align-items: center;
......@@ -1077,16 +1176,16 @@ const handlePickup=()=>{
box-sizing: inherit;
}
.btn-q:hover{
.btn-q:hover {
box-shadow: 0 0 20px #453DEA;
border-radius: 100px;
background: linear-gradient(-90deg, #8623FC, #453DEA) !important;
}
.ding{
.ding {
position: fixed;
right: 0px;
z-index:99;
z-index: 99;
top: 40%;
background: linear-gradient(-90deg, #8623FC, #453DEA) !important;
box-shadow: none;
......
<template>
<div>
<div class="banner">
<el-carousel height="450px" autoplay :interval="2000" class="forPc" :autoplay="false" arrow="hover" @change="carouselChange">
<el-carousel-item style="height: 450px;" v-for="n in maList" :key="n.id">
<el-carousel
:autoplay="false" :interval="2000" arrow="hover" autoplay class="forPc"
height="450px"
@change="carouselChange"
>
<el-carousel-item v-for="n in maList" :key="n.id" style="height: 450px;">
<div class="bannerItem">
<div class="h100" @click.stop="goMatch(n)">
<img v-if="n.bgImgUrl" class="bannerImg" :src="fillImgUrl(n.bgImgUrl)">
<div class="h100" @click.stop="goMatch(n)">
<img v-if="n.bgImgUrl" :src="fillImgUrl(n.bgImgUrl)" class="bannerImg">
<img v-else class="bannerImg" src="@/assets/dance/banner.png">
<div class="box" style="position: absolute;top: 0;left: 0;right: 0;margin: auto;">
<div class="banner-count" v-if="n.time>0" >
<div v-if="n.time>0" class="banner-count">
Countdown
<van-count-down :time="n.time" format="DD 天 HH 时 mm 分 ss 秒">
<template #default="timeData">
<div class="block">{{ timeData.days }}
<span class="colon">Days</span>
</div>
</div>
<div class="block">{{ timeData.hours }}
<span class="colon">Hrs</span>
</div>
</div>
<div class="block">{{ timeData.minutes }}
<span class="colon">Min</span>
</div>
</div>
<div class="block">{{ timeData.seconds }}
<span class="colon">Sec</span>
</div>
......@@ -33,7 +40,7 @@
Registration has ended
</div>
</div>
<div class="banner-count bb" v-if="n.time<=0&&n.timeEnd>=0" @click="goMatch(n)">
<div v-if="n.time<=0&&n.timeEnd>=0" class="banner-count bb" @click="goMatch(n)">
REGISTER NOW
</div>
</div>
......@@ -41,26 +48,29 @@
</div>
</el-carousel-item>
</el-carousel>
<el-carousel class="forWei" height="160px" autoplay arrow="hover" @change="carouselChange">
<el-carousel-item style="height: 160px;" v-for="n in maList" :key="n.id">
<el-carousel arrow="hover" autoplay class="forWei" height="160px" @change="carouselChange">
<el-carousel-item v-for="n in maList" :key="n.id" style="height: 160px;">
<div class="bannerItem" style="height:100%">
<div class="h100" style="position: relative">
<img v-if="n.bgImgUrl" class="bannerImg" :src="fillImgUrl(n.bgImgUrl)">
<img v-if="n.bgImgUrl" :src="fillImgUrl(n.bgImgUrl)" class="bannerImg">
<img v-else class="bannerImg" src="@/assets/dance/banner.png">
<div style="position: absolute;left: 0;right: 0;bottom: 0;margin: auto;">
<div class="banner-count" v-if="n.time>0" >
<div v-if="n.time>0" class="banner-count">
Countdown
<van-count-down :time="n.time" format="DD 天 HH 时 mm 分 ss 秒">
<template #default="timeData">
<div class="block">{{ timeData.days }}
<span class="colon">Days</span>
</div>
</div>
<div class="block">{{ timeData.hours }}
<span class="colon">Hrs</span>
</div>
</div>
<div class="block">{{ timeData.minutes }}
<span class="colon">Min</span>
</div>
</div>
<div class="block">{{ timeData.seconds }}
<span class="colon">Sec</span>
</div>
......@@ -68,73 +78,83 @@
</van-count-down>
</div>
<div v-if="n.timeEnd<0">
<div class="banner-count bb" @click="goMatch(n)">
<div class="banner-count bb" @click="goMatch(n)">
Registration has ended
</div>
</div>
<div class="banner-count bb" v-if="n.time<=0&&n.timeEnd>=0" @click="goMatch(n)">
<div v-if="n.time<=0&&n.timeEnd>=0" class="banner-count bb" @click="goMatch(n)">
REGISTER NOW
</div>
</div>
</div>
</div>
</el-carousel-item>
</el-carousel>
</div>
<div class="box zn-bg">
<div class="zn-Box">
<img class="bbbg" v-if="matchData?.logoUrl" :src="fillImgUrl(matchData?.logoUrl)"/>
<img v-if="matchData?.logoUrl" :src="fillImgUrl(matchData?.logoUrl)" class="bbbg">
<el-row>
<el-col :sm="24" :lg="10">
<el-col :lg="10" :sm="24">
<div class="bgbg">
<h1 style="color: #fff">{{matchData?.name}}</h1>
<h1 style="color: #fff">{{ matchData?.name }}</h1>
<div class="mb30">
<a class="zn-btn" style="font-size: 15px" @click="goGuide">
<a class="zn-btn" style="font-size: 15px" @click="goGuide">
GUIDELINE
<el-icon><download /></el-icon>
<el-icon>
<download />
</el-icon>
</a>
<a class="zn-btn ml20 btn-q forPc" v-if="matchData.isCourseView==1" style="font-size: 15px;margin-right: 20px" @click="popMaster">
Junior &Youth Camp REGISTER<el-icon><Edit /></el-icon>
<a
v-if="matchData.isCourseView==1" class="zn-btn ml20 btn-q forPc"
style="font-size: 15px;margin-right: 20px" @click="popMaster"
>
Junior &Youth Camp REGISTER
<el-icon>
<Edit />
</el-icon>
</a>
<a class="zn-btn ml20 btn-q" v-show="matchData?.id=='1778253367748993026'" @click="backNumberSearch">Competition Number</a>
<a class="zn-btn ml20 btn-q" v-show="matchData?.id=='1778253367748993026'" @click="schSearchSearch">Schedule Inquiry</a>
<a v-show="matchData?.id=='1778253367748993026'" class="zn-btn ml20 btn-q" @click="backNumberSearch">Competition
Number</a>
<a v-show="matchData?.id=='1778253367748993026'" class="zn-btn ml20 btn-q" @click="schSearchSearch">Schedule
Inquiry</a>
</div>
</div>
</el-col>
<el-col :sm="24" :lg="14">
<HomeQuick :match-id="matchData?.id" :cpt-name="matchData?.name"/>
<el-col :lg="14" :sm="24">
<HomeQuick :cpt-name="matchData?.name" :match-id="matchData?.id" />
</el-col>
</el-row>
</div>
</div>
<div id="part0" class="box part">
<el-row :gutter="20">
<el-col :sm="24" :lg="12">
<el-col :lg="12" :sm="24">
<div class="indexTitle">
<h3 class="leftboderTT">COMPETITION SCHEDULE</h3>
<a class="more" @click="gosaiC">MORE</a>
</div>
<!--赛事日历-->
<el-card :body-style="{'padding':'20px 20px'}">
<home-calendar/>
<home-calendar />
</el-card>
</el-col>
<el-col :sm="24" :lg="12">
<el-col :lg="12" :sm="24">
<div class="indexTitle">
<h3 class="leftboderTT">MEDAL LIST</h3>
<!-- <a class="more" href="#/saiC">MORE</a>-->
<!-- <a class="more" href="#/saiC">MORE</a>-->
</div>
<!--历史排名-->
<el-card :body-style="{'padding':'10px 20px 18px'}">
<el-table stripe :data="rank">
<el-table-column label="RANK" align="center" width="80" type="index">
<el-table :data="rank" stripe>
<el-table-column align="center" label="RANK" type="index" width="80">
<template #default="scope">
<span v-if="scope.row.mingCi == 1" style="color:#F8A617">{{ scope.row.mingCi }}</span>
<span v-else-if="scope.row.mingCi == 2" style="color:#778B92">{{ scope.row.mingCi }}</span>
......@@ -145,12 +165,12 @@
<el-table-column label="COUNTRY">
<template #default="scope">
<div>
<span :class="`flag-icon flag-icon-${scope.row.code}`"></span>
<span :class="`flag-icon flag-icon-${scope.row.code}`" />
{{ scope.row.countryShortName }}
</div>
</template>
</el-table-column>
<el-table-column label="COUPLE" align="center">
<el-table-column align="center" label="COUPLE">
<template #default="scope">
<div class="text-primary esp">{{ scope.row.zuHe }}</div>
</template>
......@@ -186,7 +206,7 @@
</div>
<!-- NEWS -->
<div id="part1" class="part">
<div class="box">
<div class="indexTitle">
<h3 class="leftboderTT">NEWS</h3>
......@@ -195,20 +215,20 @@
<el-row :gutter="20">
<el-col
v-for="(n,index) in newest2"
:key="n.id" :xs="24" :sm="8"
:lg="8"
:key="n.id" :lg="8" :sm="8"
:xs="24"
>
<div class="activeItem" @click="goNewsDetail(n)">
<div class="activeItem" @click="goNewsDetail(n)">
<div class="imgbox">
<img :src="fillImgUrl_webSite(n.picUrl)">
</div>
<div class="info">
<div class="date">
{{ n.sortName }} | {{ n.belongTime }}
{{ n.sortName }} | {{ n.belongTime }}
</div>
<h3 class="esp">{{ n.name }}</h3>
<p class="esp_2" style="height: 40px">
{{n.subName}}
{{ n.subName }}
</p>
<a>DETAIL</a>
</div>
......@@ -218,7 +238,7 @@
</div>
</div>
<div class="part">
<div class="box">
<div class="indexTitle">
<h3 class="leftboderTT">MEDIA</h3>
......@@ -227,8 +247,8 @@
<el-card>
<el-row :gutter="20">
<el-col :lg="8">
<a class="liveImgbox" target="_blank" href="https://wx.vzan.com/live/page/1151815649?v=1720589464698">
<div class="livetimecount" v-if="time>0">
<a class="liveImgbox" href="https://wx.vzan.com/live/page/1151815649?v=1720589464698" target="_blank">
<div v-if="time>0" class="livetimecount">
<van-count-down :time="time" format="DD 天 HH 时 mm 分 ss 秒">
<template #default="timeData">
<div class="block">{{ timeData.days }}
......@@ -246,23 +266,23 @@
</template>
</van-count-down>
</div>
<!-- <i class="ii" v-else-if="etime>0&&time<=0">Living</i>-->
<!-- <i class="livetimecount" v-if="etime<=0">End</i>-->
<div class="imgBox"><img src="/img/111.jpeg"/></div>
<!-- <i class="ii" v-else-if="etime>0&&time<=0">Living</i>-->
<!-- <i class="livetimecount" v-if="etime<=0">End</i>-->
<div class="imgBox"><img src="/img/111.jpeg"></div>
<h3 class="esp">
WUXI 2024 WDSF ASIAN DANCESPORT FESTIVAL
WUXI 2025 WDSF ASIAN DANCESPORT FESTIVAL
</h3>
</a>
</el-col>
<el-col :lg="16">
<div class="swiperPic forPx">
<swiper
class="swiper-wrapper" :modules="modules" :slides-per-view="3" :space-between="20"
:navigation="navigationPic"
:autoplay="true" :loop="true"
:autoplay="true" :loop="true" :modules="modules" :navigation="navigationPic"
:slides-per-view="3"
:space-between="20" class="swiper-wrapper"
>
<swiper-slide v-for="(n,i) in picList" :key="i" >
<swiper-slide v-for="(n,i) in picList" :key="i">
<div class="picbox" @click="goNewsDetail(n)">
<img :src="fillImgUrl_webSite(n.picUrl)">
</div>
......@@ -271,7 +291,7 @@
<div class="picprev"><img src="@/assets/dance/prev1.png"></div>
<div class="picnext"><img src="@/assets/dance/next1.png"></div>
</div>
</el-col>
</el-row>
<el-row class="news-l-r">
......@@ -282,18 +302,19 @@
<img :src="fillImgUrl_webSite(n.picUrl)"></div>
<div class="info">
<div class="text-primary small-size">
<span v-if="n.subName">{{n.subName + ' | '}}</span>
{{ n.belongTime }}</div>
<span v-if="n.subName">{{ n.subName + ' | ' }}</span>
{{ n.belongTime }}
</div>
<h2 class="esp_2">{{ n.name }}</h2>
</div>
</div>
</el-col>
</el-row>
</el-card>
</div>
</div>
<div hidden>
<div class="box">
<div class="indexTitle">
......@@ -301,8 +322,8 @@
</div>
<el-row :gutter="20">
<el-col
v-for="n in personList" :key="n.name" :sm="8" :xl="4" :xs="12"
:lg="4"
v-for="n in personList" :key="n.name" :lg="4" :sm="8" :xl="4"
:xs="12"
>
<div class="teacher">
<div class="imgbox"><img :src="n.src"></div>
......@@ -313,7 +334,7 @@
</el-row>
</div>
</div>
<div class="box">
<el-row :gutter="20">
<el-col :lg="12">
......@@ -323,19 +344,20 @@
</div>
<div class="aboutBox">
<div class="content">
<div v-html="aboutUsContent"></div>
<div v-html="aboutUsContent" />
<div class="shadowbox" />
</div>
<div class="mt30 text-center">
<a class="btn-lineG" href="#/about/wuDao" style="display: inline-flex;align-items: center;">Learn more <img style="filter: brightness(2);height: 8px;margin-left: 10px" src="@/assets/v1/more.png"></a>
<a class="btn-lineG" href="#/about/wuDao" style="display: inline-flex;align-items: center;">Learn more
<img src="@/assets/v1/more.png" style="filter: brightness(2);height: 8px;margin-left: 10px"></a>
</div>
</div>
</el-col>
<el-col :lg="12">
<div class="indexTitle">
<h3 class="leftboderTT">CONTACT</h3>
<a class="more" style="filter: brightness(10)" href="#/about/wuDao">MORE</a>
<a class="more" href="#/about/wuDao" style="filter: brightness(10)">MORE</a>
</div>
<div class="mapBox">
<div class="content">
......@@ -356,27 +378,27 @@
</el-col>
</el-row>
</div>
<div class="box">
<div class="indexTitle">
<h3 class="leftboderTT">PARTNERS</h3>
</div>
<el-row :gutter="20">
<el-col :lg="6" :sm="12" :xs="6" v-for="p in partners">
<el-col v-for="p in partners" :lg="6" :sm="12" :xs="6">
<div class="logobox">
<img :src="fillImgUrl(JSON.parse(p.picUrl))">
</div>
</el-col>
</el-row>
</div>
</div>
</template>
<script setup>
import { ref, nextTick, onMounted, watch } from 'vue'
import { getCurrentInstance } from '@vue/runtime-core'
import {getNewsListById, getNewsList, getWeather, getRank} from '@/apiPc/webSite'
import { getNewsListById, getNewsList, getWeather, getRank } from '@/apiPc/webSite'
import { useRouter } from 'vue-router'
import _ from 'lodash'
import HomeQuick from '@/viewsPc/components/homeQuick'
......@@ -384,9 +406,10 @@ import HomeCalendar from '@/viewsPc/components/homeCalendar'
import { Swiper, SwiperSlide } from 'swiper/vue'
import { Autoplay, Navigation } from 'swiper'
import 'swiper/css'
import {dayjs, ElMessage} from 'element-plus'
import * as match from "@/apiPc/match";
import {rankList} from '@/assets/js/data'
import { dayjs, ElMessage } from 'element-plus'
import * as match from '@/apiPc/match'
import { rankList } from '@/assets/js/data'
const modules = [Autoplay, Navigation]
const navigationPic = ref({
nextEl: '.picnext',
......@@ -394,7 +417,7 @@ const navigationPic = ref({
})
const router = useRouter()
const { proxy } = getCurrentInstance()
const emit = defineEmits(['pop','backNumber','schSearch'])
const emit = defineEmits(['pop', 'backNumber', 'schSearch'])
const time = ref(0)
const etime = ref(0)
......@@ -403,7 +426,7 @@ const personList = ref([
{ name: 'Nenad Jeftic', pp: 'Chairperson for Standard SRB', src: '/img/2.png' },
{ name: 'Dorel Bagiu', pp: 'ROU', src: '/img/3.png' },
{ name: 'Eduard Korotin', pp: ' EST', src: '/img/4.png' },
{ name: 'Ana Cristina Silva', pp: 'POR', src: '/img/5.png'},
{ name: 'Ana Cristina Silva', pp: 'POR', src: '/img/5.png' },
{ name: 'Dallas Leslie Williams', pp: 'Scrutineer AUS', src: '/img/6.png' }
])
const activeNews = ref(0)
......@@ -421,7 +444,7 @@ const nowscores = ref([])
const livelist = ref([])
const maList = ref([])
const picList = ref([])
const calendarValue = ref('2024-07-22')
const calendarValue = ref('2025-07-22')
const aboutUsContent = ref('')
const partners = ref([])
......@@ -432,37 +455,43 @@ onMounted(() => {
const init = () => {
var today = dayjs().format('YYYY-MM-DD HH:mm:ss')
etime.value = dayjs('2024-07-22 12:00:00').diff(today, 'millisecond')
time.value = dayjs('2024-07-17 07:00:00').diff(today, 'millisecond')
getRank().then(res=>{
etime.value = dayjs('2025-07-22 12:00:00').diff(today, 'millisecond')
time.value = dayjs('2025-07-17 07:00:00').diff(today, 'millisecond')
getRank().then(res => {
rank.value = res.data
})
getNewsListById(
{ pageSize: 4,
{
pageSize: 4,
pageNum: 1,
sortId: '10000008' }
sortId: '10000008'
}
).then(res => {
livelist.value = res.rows
})
getNewsListById({ pageSize: 5,
pageNum: 1,
sortId: '10000009' }
getNewsListById({
pageSize: 5,
pageNum: 1,
sortId: '10000009'
}
).then(res => {
picList.value = res.rows
})
getNewsList({ pageSize: 3,
pageNum: 1,
language:2,
code: '1000' }
getNewsList({
pageSize: 3,
pageNum: 1,
language: 2,
code: '1000'
}
).then(res => {
newest2.value = res.rows
})
match.getMaList({topFlag:1}).then((res) => {
match.getMaList({ topFlag: 1 }).then((res) => {
maList.value = res.rows
for (let n of maList.value) {
for (const n of maList.value) {
var today = dayjs().format('YYYY-MM-DD HH:mm:ss')
n.time = dayjs(n.signBeginTime).diff(today, 'millisecond')
if(n.signEndTime){
if (n.signEndTime) {
n.timeEnd = dayjs(n.signEndTime).diff(today, 'millisecond')
} else {
n.time = 0
......@@ -476,7 +505,7 @@ const getpartners = () => {
match.getAboutUs().then((res) => {
aboutUsContent.value = res.data.contextEn
})
match.getZNList({sortId:'2000',language:2}).then((res) => {
match.getZNList({ sortId: '2000', language: 2 }).then((res) => {
partners.value = res.rows
})
}
......@@ -522,65 +551,112 @@ const building = () => {
const goGuide = () => {
router.push({
path: `/guide`,
query:{
index:8
query: {
index: 8
}
})
}
const popMaster = () => {
var params = {
cptId:matchData.value.id
cptId: matchData.value.id
}
emit('pop',params)
emit('pop', params)
}
const backNumberSearch = () => {
var params = {
cptId:matchData.value.id
cptId: matchData.value.id
}
emit('backNumber',params)
emit('backNumber', params)
}
const schSearchSearch = () => {
var params = {
cptId:matchData.value.id
cptId: matchData.value.id
}
emit('schSearch',params)
emit('schSearch', params)
}
const handlePickup=()=>{
const params={
cptId :matchData.value.id
const handlePickup = () => {
const params = {
cptId: matchData.value.id
}
emit('pickup',params)
emit('pickup', params)
}
</script>
<style scoped lang="scss">
.zn-bg{background: linear-gradient(90deg, #8623FC, #8623FC, #8623FC, #8623FC, #8623FC, #8623FC, #453DEA, #8623FC);
border-radius: 15px;}
.zn-Box{background-size: contain;position: relative;overflow: hidden;
.bbbg{position: absolute;width: 100%;height: 100%;object-fit: cover;}
.bgbg{height: 100%;
padding: 5%;display: flex;
<style lang="scss" scoped>
.zn-bg {
background: linear-gradient(90deg, #8623FC, #8623FC, #8623FC, #8623FC, #8623FC, #8623FC, #453DEA, #8623FC);
border-radius: 15px;
}
.zn-Box {
background-size: contain;
position: relative;
overflow: hidden;
.bbbg {
position: absolute;
width: 100%;
height: 100%;
object-fit: cover;
}
.bgbg {
height: 100%;
padding: 5%;
display: flex;
flex-direction: column;
justify-content: center;
img{margin: 5% 0}
img {
margin: 5% 0
}
}
.itemBox{
.itemBox {
padding: 20px 40px;
p{margin: 0;height: 40px;line-height: 20px;display: flex;align-items: center;}
p {
margin: 0;
height: 40px;
line-height: 20px;
display: flex;
align-items: center;
}
}
border-radius: 15px;
.zn-btn{background: #FFFFFF;text-transform: uppercase;
font-size: 16px; width: fit-content; margin: 5px 5px 5px 0;
.zn-btn {
background: #FFFFFF;
text-transform: uppercase;
font-size: 16px;
width: fit-content;
margin: 5px 5px 5px 0;
color: #453DEA;
border-radius: 23px;padding: 10px 20px;display: inline-flex;align-items: center;}
.item{box-shadow: 0px 0px 21px 0px rgba(41,23,101,0.14);margin: 40px 0 0;
display: flex;align-items: center;text-align: center;
font-size: 18px; flex-direction: column;padding: 35px 10px 20px;
background:url("@/assets/dance/znbb.png") no-repeat left #FFFFFF;
border-radius: 23px;
padding: 10px 20px;
display: inline-flex;
align-items: center;
}
.item {
box-shadow: 0px 0px 21px 0px rgba(41, 23, 101, 0.14);
margin: 40px 0 0;
display: flex;
align-items: center;
text-align: center;
font-size: 18px;
flex-direction: column;
padding: 35px 10px 20px;
background: url("@/assets/dance/znbb.png") no-repeat left #FFFFFF;
background-size: cover;
position: relative;
border-radius: 15px;
img{position: absolute;top: -30px}
img {
position: absolute;
top: -30px
}
}
}
......@@ -593,13 +669,24 @@ const handlePickup=()=>{
clear: both;
overflow: hidden;
}
.banner-pp{ position: absolute; bottom: 40%;right: 5%;width: 200px;}
.banner-pp {
position: absolute;
bottom: 40%;
right: 5%;
width: 200px;
}
.bannerItem {
height: 450px;
background: #000;position: relative;
.banner-count{position: absolute;padding: 20px 40px;
font-size: 20px;align-items: center;
background: #000;
position: relative;
.banner-count {
position: absolute;
padding: 20px 40px;
font-size: 20px;
align-items: center;
overflow: hidden;
background: url("@/assets/dance/time_bg.png") no-repeat center;
background-size: 100% 100%;
......@@ -609,29 +696,56 @@ const handlePickup=()=>{
//border-image-width:4px;
//border-image-outset:4px;
//background: rgba(0,0,0,0.3);
bottom: 40%;display: flex;flex-wrap: nowrap;
bottom: 40%;
display: flex;
flex-wrap: nowrap;
right: 5%;
color: #fff;
.van-count-down{display: flex;color: #fff;margin: 0 0 0 20px;
.van-count-down {
display: flex;
color: #fff;
margin: 0 0 0 20px;
width: 360px;
font-size: 41px;}
.block{ color: #fff;text-align: center;width: 3em;
font-size: 41px;
font-family: DIN Alternate;}
.colon{ color: #fff;display: block;margin: 20px 0 0;
font-size: 20px;}
}
.block {
color: #fff;
text-align: center;
width: 3em;
font-size: 41px;
font-family: DIN Alternate;
}
.colon {
color: #fff;
display: block;
margin: 20px 0 0;
font-size: 20px;
}
}
.bb{width: 580px;justify-content: center;height: 100px;font-size: 30px;}
.banner-count.bb:hover{box-shadow: 0 0 20px #453DEA;border-radius: 100px;
.bb {
width: 580px;
justify-content: center;
height: 100px;
font-size: 30px;
}
.banner-count.bb:hover {
box-shadow: 0 0 20px #453DEA;
border-radius: 100px;
background: linear-gradient(-90deg, #8623FC, #453DEA)
}
.box {
position: absolute;
height: 100%;
left: 0;
right: 0;
}
h3 {
position: absolute;
color: #fff;
......@@ -640,7 +754,7 @@ const handlePickup=()=>{
bottom: 50px;
font-size: 3vw;
}
video {
width: 100%;
height: 100%;
......@@ -653,27 +767,28 @@ const handlePickup=()=>{
}
.banner {
position: relative;margin:0 0 30px;
position: relative;
margin: 0 0 30px;
:deep(.el-carousel__arrow) {
border-radius: 0;
.el-icon {
color: transparent;
}
&:hover {
filter: brightness(1.5)
}
}
:deep(.el-carousel__arrow--left) {
background: url("@/assets/images/prev2@2x.png") no-repeat center;
width: 78px;
height: 45px;
background-size: contain;
}
:deep(.el-carousel__arrow--right) {
background: url("@/assets/images/next2@2x.png") no-repeat center;
width: 78px;
......@@ -681,41 +796,121 @@ const handlePickup=()=>{
background-size: contain
}
}
.el-calendar{--el-calendar-border:none;--el-calendar-cell-width:40px;text-align:center;
--el-text-color-regular:#8E8D94;
:deep(.el-calendar__header){justify-content: center;padding: 0 0 10px}
:deep(.el-calendar__body){border: 1px solid #F0F0F0;padding: 0}
:deep(.el-calendar-table .el-calendar-day){padding: 1px;}
:deep(.el-calendar-table td.is-selected){background: transparent;}
:deep(.el-calendar__button-group){display: none;}
:deep(.el-calendar-table thead th){padding: 5px 0 0}
.primaryDate{color: #fff;
background: linear-gradient(90deg, #8623FC, #453DEA);}
.date{ margin:auto;border-radius: 50%;width: 30px;height: 30px;line-height: 30px;
.el-calendar {
--el-calendar-border: none;
--el-calendar-cell-width: 40px;
text-align: center;
--el-text-color-regular: #8E8D94;
:deep(.el-calendar__header) {
justify-content: center;
padding: 0 0 10px
}
:deep(.el-calendar__body) {
border: 1px solid #F0F0F0;
padding: 0
}
:deep(.el-calendar-table .el-calendar-day) {
padding: 1px;
}
:deep(.el-calendar-table td.is-selected) {
background: transparent;
}
:deep(.el-calendar__button-group) {
display: none;
}
:deep(.el-calendar-table thead th) {
padding: 5px 0 0
}
.primaryDate {
color: #fff;
background: linear-gradient(90deg, #8623FC, #453DEA);
}
.date {
margin: auto;
border-radius: 50%;
width: 30px;
height: 30px;
line-height: 30px;
font-weight: bold;
}
}
.calendarList{border: 1px solid #F0F0F0;padding:12px 20px;overflow: auto;height: 233px;
ul{
li{background: #F6F9FE;margin:7px 0 7px 0;position: relative;padding: 13px;
.calendarList {
border: 1px solid #F0F0F0;
padding: 12px 20px;
overflow: auto;
height: 233px;
ul {
li {
background: #F6F9FE;
margin: 7px 0 7px 0;
position: relative;
padding: 13px;
border-radius: 10px;
font-weight: 500;
font-size: 15px;
label{color: #453DEA;margin-right: 15px;
&::before{content: '';background:#fff;left: -17px;top: 0px;bottom: 0;margin: auto;
border-radius: 50%;width: 2px;height: 2px;position: absolute;z-index: 1}
label {
color: #453DEA;
margin-right: 15px;
&::before {
content: '';
background: #fff;
left: -17px;
top: 0px;
bottom: 0;
margin: auto;
border-radius: 50%;
width: 2px;
height: 2px;
position: absolute;
z-index: 1
}
}
}
li::before{content: '';background: linear-gradient(0deg, #8623FC, #453DEA);
border-radius: 50%;width: 8px;height: 8px;position: absolute;
left: -20px;top: 0;bottom: 0;margin: auto;z-index: 1;
li::before {
content: '';
background: linear-gradient(0deg, #8623FC, #453DEA);
border-radius: 50%;
width: 8px;
height: 8px;
position: absolute;
left: -20px;
top: 0;
bottom: 0;
margin: auto;
z-index: 1;
}
li::after{content: ''; left: -16px;width: 1px;height: 100%;
background: #EBEBEB; position: absolute;top: 20px}
li:hover{color: #fff;
li::after {
content: '';
left: -16px;
width: 1px;
height: 100%;
background: #EBEBEB;
position: absolute;
top: 20px
}
li:hover {
color: #fff;
background: linear-gradient(-90deg, #8623FC, #453DEA);
label{color: #fff;}
label {
color: #fff;
}
}
}
}
......@@ -729,7 +924,7 @@ const handlePickup=()=>{
.ggbond {
height: 230px;
position: relative;
img {
height: 100%;
object-fit: cover;
......@@ -741,115 +936,295 @@ const handlePickup=()=>{
}
}
.teacher{height: 410px;background: #fff;
position: relative;border-radius: 10px;overflow: hidden;
.imgbox{background: linear-gradient(0,#C8AAFC,#fff)}
img{height: 350px;width: 100%;object-fit: cover;}
h3{color: #fff;background: url("@/assets/dance/name_bg.png") no-repeat center;
background-size:110% 100%;text-align: center;height: 30px;line-height: 30px;
font-size: 18px;position: absolute;width: 100%;bottom: 30px;}
p{text-align: center;margin: 25px 0 0;
font-size: 14px;}
.teacher {
height: 410px;
background: #fff;
position: relative;
border-radius: 10px;
overflow: hidden;
.imgbox {
background: linear-gradient(0, #C8AAFC, #fff)
}
img {
height: 350px;
width: 100%;
object-fit: cover;
}
h3 {
color: #fff;
background: url("@/assets/dance/name_bg.png") no-repeat center;
background-size: 110% 100%;
text-align: center;
height: 30px;
line-height: 30px;
font-size: 18px;
position: absolute;
width: 100%;
bottom: 30px;
}
p {
text-align: center;
margin: 25px 0 0;
font-size: 14px;
}
}
@media screen and (max-width: 1650px) {
.teacher{height: 320px;
.imgbox{
img{height: 260px}
.teacher {
height: 320px;
.imgbox {
img {
height: 260px
}
}
}
}
@media screen and (max-width: 1200px) {
.teacher{height: 450px;margin: 0 0 20px;
.imgbox{
img{height: 390px}
.teacher {
height: 450px;
margin: 0 0 20px;
.imgbox {
img {
height: 390px
}
}
}
}
@media screen and (max-width: 900px) {
.teacher{height: 400px;margin: 0 0 20px;
.imgbox{
img{height: 340px}
.teacher {
height: 400px;
margin: 0 0 20px;
.imgbox {
img {
height: 340px
}
}
}
}
@media screen and (max-width: 800px) {
.teacher{height: 400px;margin: 0 0 20px;
.imgbox{
img{height: 260px}
.teacher {
height: 400px;
margin: 0 0 20px;
.imgbox {
img {
height: 260px
}
}
}
}
.aboutBox{background: url("@/assets/dance/about_bg.png") no-repeat center;height: 375px;
background-size: cover;padding: 40px 60px; position: relative;
.content{font-size: 18px;line-height: 2.2;height: 240px;overflow: hidden;
text-align: left;text-indent: 2em;}
.shadowbox{position: absolute;left: 0;bottom: 90px;height: 100px;width: 100%;
background: linear-gradient(0deg,rgba(255,255,255,1),rgba(255,255,255,0));
.aboutBox {
background: url("@/assets/dance/about_bg.png") no-repeat center;
height: 375px;
background-size: cover;
padding: 40px 60px;
position: relative;
.content {
font-size: 18px;
line-height: 2.2;
height: 240px;
overflow: hidden;
text-align: left;
text-indent: 2em;
}
.shadowbox {
position: absolute;
left: 0;
bottom: 90px;
height: 100px;
width: 100%;
background: linear-gradient(0deg, rgba(255, 255, 255, 1), rgba(255, 255, 255, 0));
}
.btn-lineG {
}
.btn-lineG{}
}
.mapBox{background: url("@/assets/dance/map.png") no-repeat center;height: 375px;
background-size: cover;padding: 1px;position: relative;display: flex;
.content{background: #fff;width: 60%;left: 40px;padding: 30px;
position: absolute;height: 90%;top: 0;bottom: 0;margin: auto;
.mapBox {
background: url("@/assets/dance/map.png") no-repeat center;
height: 375px;
background-size: cover;
padding: 1px;
position: relative;
display: flex;
.content {
background: #fff;
width: 60%;
left: 40px;
padding: 30px;
position: absolute;
height: 90%;
top: 0;
bottom: 0;
margin: auto;
}
div {
padding-left: 60px;
}
.phone {
background: url("@/assets/dance/map01.png") no-repeat left;
background-size: 30px;
}
div{padding-left: 60px;}
.phone{background: url("@/assets/dance/map01.png") no-repeat left;background-size: 30px;}
.address{background: url("@/assets/dance/map02.png") no-repeat left;background-size: 30px;
margin:50px 0;
.address {
background: url("@/assets/dance/map02.png") no-repeat left;
background-size: 30px;
margin: 50px 0;
}
.email{background: url("@/assets/dance/map03.png") no-repeat left;background-size: 30px;}
h4{margin: 0;
.email {
background: url("@/assets/dance/map03.png") no-repeat left;
background-size: 30px;
}
h4 {
margin: 0;
font-size: 16px;
color: #AAAAAA;}
p{margin: 13px 0 0;}
color: #AAAAAA;
}
p {
margin: 13px 0 0;
}
}
.logobox{background: #fff;height: 180px;border-radius: 10px;margin: 0 0 30px;
img{width: 100%;height: 100%;object-fit: contain;}
.logobox {
background: #fff;
height: 180px;
border-radius: 10px;
margin: 0 0 30px;
img {
width: 100%;
height: 100%;
object-fit: contain;
}
}
.swiperPic{background: #F3F1FE;position: relative; height: 100%;
.swiperPic {
background: #F3F1FE;
position: relative;
height: 100%;
padding: 20px 45px;
.picprev{position: absolute; left: 5px;top: 0;bottom:0;margin: auto;height: 33px;
.picprev {
position: absolute;
left: 5px;
top: 0;
bottom: 0;
margin: auto;
height: 33px;
cursor: pointer;
&:hover{filter:brightness(2)}
&:hover {
filter: brightness(2)
}
}
.picnext{position: absolute;right: 5px;top: 0;bottom:0;margin: auto;height: 33px;
.picnext {
position: absolute;
right: 5px;
top: 0;
bottom: 0;
margin: auto;
height: 33px;
cursor: pointer;
&:hover{filter:brightness(2)}}
&:hover {
filter: brightness(2)
}
}
}
@media (max-width: 800px) {
.box{width: 94%}
.calendarList{padding: 0;
ul{
li{margin: 10px}
.box {
width: 94%
}
.calendarList {
padding: 0;
ul {
li {
margin: 10px
}
}
}
.aboutBox{padding: 20px 30px;}
.indexTitle{margin: 30px 0 20px}
.teacher{height: 320px;margin: 0 0 20px;
img{height: 260px}
.aboutBox {
padding: 20px 30px;
}
.activeItem{margin: 0 0 20px;}
.mapBox{
div{padding-left: 40px;}
.content{ width: 80%;left: 10%;padding:10px 20px 0 20px;}
.address{margin: 30px 0;}
p{text-align: left;word-break: break-all;}
.indexTitle {
margin: 30px 0 20px
}
.teacher {
height: 320px;
margin: 0 0 20px;
img {
height: 260px
}
}
.activeItem {
margin: 0 0 20px;
}
.mapBox {
div {
padding-left: 40px;
}
.content {
width: 80%;
left: 10%;
padding: 10px 20px 0 20px;
}
.address {
margin: 30px 0;
}
p {
text-align: left;
word-break: break-all;
}
}
.fixed_gg {
display: none;
}
.bannerItem .banner-count{flex-direction: column;
transform: scale(0.5); width: auto;
.bannerItem .banner-count {
flex-direction: column;
transform: scale(0.5);
width: auto;
left: 0;
right: 0;
.van-count-down{margin: 30px 0 0;}
.van-count-down {
margin: 30px 0 0;
}
}
.bgbg{ text-align: center;
h1{text-align: center}
.bgbg {
text-align: center;
h1 {
text-align: center
}
}
}
:deep(.btn-q) {
//background: #FFFFFF;
//font-size: 18px;
......@@ -858,7 +1233,7 @@ const handlePickup=()=>{
//padding: 10px 20px;
//display: inline-flex;
//align-items: center;
padding: 20px 40px;
font-size: 20px;
align-items: center;
......@@ -872,16 +1247,16 @@ const handlePickup=()=>{
box-sizing: inherit;
}
.btn-q:hover{
.btn-q:hover {
box-shadow: 0 0 20px #453DEA;
border-radius: 100px;
background: linear-gradient(-90deg, #8623FC, #453DEA) !important;
}
.ding{
.ding {
position: fixed;
right:0px;
z-index:99;
right: 0px;
z-index: 99;
top: 40%;
background: linear-gradient(-90deg, #8623FC, #453DEA) !important;
box-shadow: none;
......@@ -890,16 +1265,34 @@ const handlePickup=()=>{
//height: 100px;
padding: 20px;
}
.mb30{margin-bottom: 30px;}
.livetimecount{position: absolute;top: 0;z-index: 2;background: #F04035;
.mb30 {
margin-bottom: 30px;
}
.livetimecount {
position: absolute;
top: 0;
z-index: 2;
background: #F04035;
padding: 2px 4px;
&::after{content: ''; width: 0;
height: 0;position: absolute;right: -15px;top: 0;
&::after {
content: '';
width: 0;
height: 0;
position: absolute;
right: -15px;
top: 0;
border-top: 24px solid #F04035;
border-right: 15px solid transparent;}
.van-count-down { display: flex;
border-right: 15px solid transparent;
}
.van-count-down {
display: flex;
color: #fff;
font-size: 14px;
.block {
color: #fff;
text-align: center;
......@@ -908,13 +1301,23 @@ const handlePickup=()=>{
}
}
}
@media (max-width: 500px) {
.forPc{display: none!important;}
.zn-Box .bgbg{padding: 10px 0 0;
.mb30{margin: 0}
.zn-btn{margin-top: 10px}
.forPc {
display: none !important;
}
.zn-Box .bgbg {
padding: 10px 0 0;
.mb30 {
margin: 0
}
.zn-btn {
margin-top: 10px
}
}
.logobox{
.logobox {
height: 60px;
}
}
......
<template>
<div>
<div class="box">
<div class="mt20" />
<el-card>
<el-row :gutter="20">
<el-col :sm="24" :lg="12">
<el-col :lg="12" :sm="24">
<!--赛事日历-->
<el-calendar v-model="currentDate">
<template #date-cell="data">
<div class="date" :class="data.data.day==query.currentDate?'primaryDate':''" @click="selectDate(data.data.day)">
{{ data.data.day.slice(8,10) }}
<div
:class="data.data.day==query.currentDate?'primaryDate':''" class="date"
@click="selectDate(data.data.day)"
>
{{ data.data.day.slice(8, 10) }}
</div>
</template>
</el-calendar>
</el-col>
<el-col :sm="24" :lg="12">
<el-col :lg="12" :sm="24">
<div class="calendarList">
<ul v-loading="loading">
<li v-for="n in schList" @click="goMatch(n)">
<label>{{ n.timeStr }}</label>
<div class="esp mt5">{{ n.name }}</div>
</li>
<el-empty v-if="schList.length== 0" :image="`/img/order_no.png`" :image-size="200"/>
<el-empty v-if="schList.length== 0" :image="`/img/order_no.png`" :image-size="200" />
</ul>
</div>
</el-col>
</el-row>
</el-card>
<el-card class="mt20 mb20">
<el-table stripe :data="rank">
<el-table-column label="名次" align="center" type="index">
<el-table :data="rank" stripe>
<el-table-column align="center" label="名次" type="index">
<template #default="scope">
<span v-if="scope.row.mingCi == 1" style="color:#F8A617">{{ scope.row.mingCi }}</span>
<span v-else-if="scope.row.mingCi == 2" style="color:#778B92">{{ scope.row.mingCi }}</span>
......@@ -43,16 +46,16 @@
<span v-else>{{ scope.row.mingCi }}</span>
</template>
</el-table-column>
<el-table-column label="国家" prop="name">
<template #default="scope">
<div>
<span :class="`flag-icon flag-icon-${scope.row.code}`"></span>
<span :class="`flag-icon flag-icon-${scope.row.code}`" />
{{ scope.row.countryName }}
</div>
</template>
</el-table-column>
<el-table-column label="组合" align="center">
<el-table-column align="center" label="组合">
<template #default="scope">
<div class="text-primary esp">{{ scope.row.zuHe }}</div>
</template>
......@@ -82,40 +85,40 @@
</template>
</el-table-column>
</el-table>
</el-card>
<el-card class="mt20 mb20" v-for="(n,index) in cjList" hidden>
<div class="leftboderTT">{{ language==0?n.title:n.en_title }}</div>
<el-card v-for="(n,index) in cjList" class="mt20 mb20" hidden>
<div class="leftboderTT">{{ language == 0 ? n.title : n.en_title }}</div>
<div v-for="(m,jndex) in n.list">
<h3 class="text-center">{{ m.title }}</h3>
<div class="tablebody">
<table class="table table-striped">
<thead>
<tr class="bg-lineg">
<td class="text-center" style="width: 120px;">{{ language==0?'名次':'RANK' }}</td>
<td class="text-center">{{ language==0?'组合':'COUPLE' }}</td>
<td class="text-center w15">{{ language==0?'国家':'COUNTRY' }}</td>
<td class="text-center w15">START #</td>
<td class="text-center w15" v-if="index>0">BASE</td>
<td class="text-center w15" v-if="index>0">POINTS</td>
</tr>
<tr class="bg-lineg">
<td class="text-center" style="width: 120px;">{{ language == 0 ? '名次' : 'RANK' }}</td>
<td class="text-center">{{ language == 0 ? '组合' : 'COUPLE' }}</td>
<td class="text-center w15">{{ language == 0 ? '国家' : 'COUNTRY' }}</td>
<td class="text-center w15">START #</td>
<td v-if="index>0" class="text-center w15">BASE</td>
<td v-if="index>0" class="text-center w15">POINTS</td>
</tr>
</thead>
<tbody>
<tr v-for="(l,kndex) in m.rows">
<td class="text-center">{{ l.RANK }}</td>
<td class="text-center">{{ l.COUPLE}}</td>
<td class="text-center">{{ l.COUNTRY }}</td>
<td class="text-primary text-center">{{ l.START }}</td>
<td class="text-center" v-if="index>0">{{l.BASE}}</td>
<td v-if="index>0" class="text-primary text-center">{{ l.POINTS }}</td>
</tr>
<tr v-for="(l,kndex) in m.rows">
<td class="text-center">{{ l.RANK }}</td>
<td class="text-center">{{ l.COUPLE }}</td>
<td class="text-center">{{ l.COUNTRY }}</td>
<td class="text-primary text-center">{{ l.START }}</td>
<td v-if="index>0" class="text-center">{{ l.BASE }}</td>
<td v-if="index>0" class="text-primary text-center">{{ l.POINTS }}</td>
</tr>
</tbody>
</table>
</div>
</div>
</el-card>
<br><br>
<br><br>
</div>
</div>
</template>
......@@ -123,14 +126,16 @@
<script setup>
import { onMounted, ref, watch } from 'vue'
import { getPlanYears, getYearZtxPlanList } from '@/apiPc/train'
import {cjList} from '@/assets/js/data'
import { cjList } from '@/assets/js/data'
import { ArrowRight } from '@element-plus/icons-vue'
import { dayjs } from 'element-plus'
const router = useRouter()
import {useStorage} from "@vueuse/core/index";
import {getIndexScheduleList} from "@/apiPc/common";
import {getRank} from '@/apiPc/webSite'
import {useRouter} from "vue-router";
import { useStorage } from '@vueuse/core/index'
import { getIndexScheduleList } from '@/apiPc/common'
import { getRank } from '@/apiPc/webSite'
import { useRouter } from 'vue-router'
const language = useStorage('language', 0)
const years = ref([])
const currYear = ref(null)
......@@ -139,33 +144,37 @@ const planList = ref([])
const rank = ref([])
const schList = ref([])
const loading = ref(false)
const currentDate = ref(dayjs('2024-07-17').toDate())
const currentDate = ref(dayjs('2025-07-17').toDate())
const query = ref({
// currentDate:dayjs().format('YYYY-MM-DD')
currentDate: '2024-07-17'
currentDate: '2025-07-17'
})
getScheduleList()
getRankList()
function getRankList() {
getRank().then(res=>{
getRank().then(res => {
rank.value = res.data
})
}
function getScheduleList() {
loading.value = true
query.value.currentDate = dayjs(query.value.currentDate).format('YYYY-MM-DD')
getIndexScheduleList(query.value).then(res=>{
getIndexScheduleList(query.value).then(res => {
loading.value = false
schList.value = res.data
})
}
function selectDate(date) {
console.log(dayjs(date).toDate())
console.log(query.value.currentDate)
query.value.currentDate = dayjs(date).toDate()
getScheduleList()
}
function goMatch(n) {
router.push({
name: 'matchDetail',
......@@ -179,59 +188,157 @@ function goMatch(n) {
}
</script>
<style scoped lang="scss">
.leftboderTT{margin: 0 0 20px;color: var(--el-color-primary);
font-size: 20px;}
h3{background: #F5F0FF;margin: 0;padding: 10px 0;
<style lang="scss" scoped>
.leftboderTT {
margin: 0 0 20px;
color: var(--el-color-primary);
font-size: 20px;
}
h3 {
background: #F5F0FF;
margin: 0;
padding: 10px 0;
color: var(--el-color-primary);
font-size: 18px;}
.table { border-spacing: 0;
font-size: 18px;
}
.table {
border-spacing: 0;
border-collapse: collapse;
width: 100%;
max-width: 100%;
margin-bottom: 20px;
td,th{ padding: 8px; font-size: 14px;}
td, th {
padding: 8px;
font-size: 14px;
}
}
:deep(.table-striped > tbody > tr:nth-of-type(odd)){
:deep(.table-striped > tbody > tr:nth-of-type(odd)) {
background: #F6F9FE;
}
.el-calendar{--el-calendar-border:none;--el-calendar-cell-width:51px;text-align:center;
--el-text-color-regular:#8E8D94;
:deep(.el-calendar__header){justify-content: center;}
:deep(.el-calendar__body){border: 1px solid #F0F0F0;padding: 0}
:deep(.el-calendar-table .el-calendar-day){padding: 1px;}
:deep(.el-calendar-table td.is-selected){background: transparent;}
:deep(.el-calendar__button-group){display: none;}
.el-calendar {
--el-calendar-border: none;
--el-calendar-cell-width: 51px;
text-align: center;
--el-text-color-regular: #8E8D94;
:deep(.el-calendar__header) {
justify-content: center;
}
:deep(.el-calendar__body) {
border: 1px solid #F0F0F0;
padding: 0
}
:deep(.el-calendar-table .el-calendar-day) {
padding: 1px;
}
:deep(.el-calendar-table td.is-selected) {
background: transparent;
}
:deep(.el-calendar__button-group) {
display: none;
}
}
.primaryDate{color: #fff;
background: linear-gradient(90deg, #8623FC, #453DEA);}
.date{ margin:5px auto;border-radius: 50%;width: 34px;height: 34px;line-height: 34px;
.primaryDate {
color: #fff;
background: linear-gradient(90deg, #8623FC, #453DEA);
}
.date {
margin: 5px auto;
border-radius: 50%;
width: 34px;
height: 34px;
line-height: 34px;
font-weight: bold;
}
.calendarList{border: 1px solid #F0F0F0;padding:12px 20px 0;overflow: hidden;
.calendarList {
border: 1px solid #F0F0F0;
padding: 12px 20px 0;
overflow: hidden;
height: 100%;
ul{ overflow: auto;height: 330px;margin: 0;
li{background: #F6F9FE;margin:7px 0 7px 20px;position: relative;padding: 13px;
ul {
overflow: auto;
height: 330px;
margin: 0;
li {
background: #F6F9FE;
margin: 7px 0 7px 20px;
position: relative;
padding: 13px;
border-radius: 10px;
font-weight: 500;
font-size: 15px;cursor: pointer;
label{color: #453DEA;margin-right: 15px;
&::before{content: '';background:#fff;left: -17px;top: 0px;bottom: 0;margin: auto;
border-radius: 50%;width: 2px;height: 2px;position: absolute;z-index: 1}
font-size: 15px;
cursor: pointer;
label {
color: #453DEA;
margin-right: 15px;
&::before {
content: '';
background: #fff;
left: -17px;
top: 0px;
bottom: 0;
margin: auto;
border-radius: 50%;
width: 2px;
height: 2px;
position: absolute;
z-index: 1
}
}
}
li::before{content: '';background: linear-gradient(0deg, #8623FC, #453DEA);
border-radius: 50%;width: 8px;height: 8px;position: absolute;
left: -20px;top: 0;bottom: 0;margin: auto;z-index: 1;
li::before {
content: '';
background: linear-gradient(0deg, #8623FC, #453DEA);
border-radius: 50%;
width: 8px;
height: 8px;
position: absolute;
left: -20px;
top: 0;
bottom: 0;
margin: auto;
z-index: 1;
}
li::after{content: ''; left: -16px;width: 1px;height: 100%;
background: #EBEBEB; position: absolute;top: 20px}
li:hover{color: #fff;
li::after {
content: '';
left: -16px;
width: 1px;
height: 100%;
background: #EBEBEB;
position: absolute;
top: 20px
}
li:hover {
color: #fff;
background: linear-gradient(-90deg, #8623FC, #453DEA);
label{color: #fff;}
label {
color: #fff;
}
}
}
}
.w15{width: 15%;}
.w15 {
width: 15%;
}
</style>
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!