3dac0947 by 杨炀

no message

1 parent b2104d0d
......@@ -604,12 +604,12 @@ export const cjList = [
{RANK:'103-104',COUPLE:'Lai Juncheng - Hu Yaqing',COUNTRY:'CHN',START:'233',BASE:'8',POINTS:'21'},
{RANK:'105-106',COUPLE:'Hoh Leonard - Mu Linda',COUNTRY:'MAS',START:'183',BASE:'8',POINTS:'21'},
{RANK:'105-106',COUPLE:'Shi Minghang - Yao Qianwen',COUNTRY:'CHN',START:'239',BASE:'8',POINTS:'21'},
{RANK:'107-108',COUPLE:'Huang Cuihao - Hu Yidan',COUNTRY:'CHN',START:'',BASE:'8',POINTS:'21'},
{RANK:'107-108',COUPLE:'Luo Yi - Li Jingyi',COUNTRY:'CHN',START:'',BASE:'8',POINTS:'21'},
{RANK:'109-112',COUPLE:'Liang Jizu - Shao Xingjun',COUNTRY:'CHN',START:'',BASE:'8',POINTS:'21'},
{RANK:'109-112',COUPLE:'Xie Cuntan - Feng Ruolin',COUNTRY:'CHN',START:'',BASE:'8',POINTS:'21'},
{RANK:'109-112',COUPLE:'Wong Lap Yin - Cheung Kit Ni',COUNTRY:'HKG',START:'',BASE:'8',POINTS:'21'},
{RANK:'109-112',COUPLE:'Zhao Yibo - Lu Yan',COUNTRY:'CHN',START:'',BASE:'8',POINTS:'21'},
{RANK:'107-108',COUPLE:'Huang Cuihao - Hu Yidan',COUNTRY:'CHN',START:'141',BASE:'8',POINTS:'21'},
{RANK:'107-108',COUPLE:'Luo Yi - Li Jingyi',COUNTRY:'CHN',START:'169',BASE:'8',POINTS:'21'},
{RANK:'109-112',COUPLE:'Liang Jizu - Shao Xingjun',COUNTRY:'CHN',START:'162',BASE:'8',POINTS:'21'},
{RANK:'109-112',COUPLE:'Xie Cuntan - Feng Ruolin',COUNTRY:'CHN',START:'211',BASE:'8',POINTS:'21'},
{RANK:'109-112',COUPLE:'Wong Lap Yin - Cheung Kit Ni',COUNTRY:'HKG',START:'218',BASE:'8',POINTS:'21'},
{RANK:'109-112',COUPLE:'Zhao Yibo - Lu Yan',COUNTRY:'CHN',START:'236',BASE:'8',POINTS:'21'},
{RANK:'113-124',COUPLE:'Feng Long - Lu Shimeng',COUNTRY:'CHN',START:'125',BASE:'8',POINTS:'21'},
{RANK:'113-124',COUPLE:'Han Minghao - Su Lyuran',COUNTRY:'CHN',START:'139',BASE:'8',POINTS:'21'},
{RANK:'113-124',COUPLE:'Tuyo Wen Hao - Tuyo Xing Yao',COUNTRY:'MAS',START:'140',BASE:'8',POINTS:'21'},
......
......@@ -4,9 +4,11 @@
*/
/** 基础通用 **/
.pt5 {
.popo{position: absolute;left: 0;}
.pt5 {
padding-top: 5px;
}
}
.pr5 {
padding-right: 5px;
}
......
......@@ -37,9 +37,9 @@
<el-menu-item index="/guide">{{ language==0?'参赛指南':'GUIDELINE' }}</el-menu-item>
<!-- <el-sub-menu index="/about">-->
<!-- <template #title>{{ language==0?'关于我们':'CONTACT & MORE' }}</template>-->
<!-- <el-menu-item index="/about/wuDao">{{ language==0?'舞蹈节':'About Us' }}</el-menu-item>-->
<!-- <el-menu-item index="/about/wuDaoEn">{{ language==0?'舞蹈节':'About Us' }}</el-menu-item>-->
<!-- <el-menu-item index="/about/regulations" v-if="language==1">Rules & Regulations</el-menu-item>-->
<!-- <el-menu-item index="/about/culture">{{ language==0?'地方文化':'Culture' }}</el-menu-item>-->
<!-- <el-menu-item index="/about/cultureEn">{{ language==0?'地方文化':'Culture' }}</el-menu-item>-->
<!-- </el-sub-menu>-->
</el-menu>
</div>
......@@ -119,9 +119,9 @@
<el-menu-item index="/guide">GUIDELINE</el-menu-item>
<el-sub-menu index="/about">
<template #title>CONTACT & MORE</template>
<el-menu-item index="/about/wuDao">About Us</el-menu-item>
<el-menu-item index="/about/wuDaoEn">About Us</el-menu-item>
<el-menu-item index="/about/regulations">Rules & Regulations</el-menu-item>
<el-menu-item index="/about/culture">Culture</el-menu-item>
<el-menu-item index="/about/cultureEn">Culture</el-menu-item>
</el-sub-menu>
</el-menu>
</el-drawer>
......
......@@ -98,7 +98,7 @@ app.component('Draggable', draggable)
app.component('WePay', wePay)
if (language.value == 0) {
app.use(routerCn)
app.use(routerEn)
app.use(ElementPlus, {
locale: localeCn,
size: Cookies.get('size') || 'default'
......
......@@ -70,7 +70,7 @@ export const constantRoutes = [
children: [
{
path: '',
component: () => import('@/viewsPc/index_en'),
component: () => import('@/viewsPc/home'),
name: 'home'
},
{
......@@ -90,14 +90,32 @@ export const constantRoutes = [
children: [
{
path: 'wudao',
component: () => import('@/viewsPc/about/wudao_en'),
component: () => import('@/viewsPc/about/wudao'),
name: 'dangNews',
meta: { title: 'about us' }
meta: { title: '舞蹈节' }
},
{
path: 'culture',
component: () => import('@/viewsPc/about/culture_en'),
component: () => import('@/viewsPc/about/culture'),
name: 'culture',
meta: { title: '地方文化' }
},
{
path: 'leaderInfo/:id',
component: () => import('@/viewsPc/about/leaderInfo'),
name: 'leaderInfo',
meta: { title: '评委详情' }
},
{
path: 'wudaoEn',
component: () => import('@/viewsPc/about/wudao_en'),
name: 'dangNewsEn',
meta: { title: 'about us' }
},
{
path: 'cultureEn',
component: () => import('@/viewsPc/about/culture_en'),
name: 'cultureEn',
meta: { title: 'culture' }
},
{
......@@ -115,7 +133,7 @@ export const constantRoutes = [
children: [
{
path: 'index',
component: () => import('@/viewsPc/notice/index_en'),
component: () => import('@/viewsPc/notice/index'),
name: 'notice',
meta: { title: 'NOTICEBOARD' }
},
......@@ -152,13 +170,13 @@ export const constantRoutes = [
children: [
{
path: 'index',
component: () => import('@/viewsPc/news/index_en'),
component: () => import('@/viewsPc/news/index'),
name: 'news',
meta: { title: 'NEWS' }
},
{
path: 'list/:id',
component: () => import('@/viewsPc/news/list_en'),
component: () => import('@/viewsPc/news/list'),
name: 'newsList',
meta: { title: '新闻列表' }
},
......@@ -197,7 +215,7 @@ export const constantRoutes = [
children: [
{
path: 'index',
component: () => import('@/viewsPc/meta/index_en'),
component: () => import('@/viewsPc/meta/index'),
name: 'meta',
meta: { title: 'MEDIA' }
}
......@@ -223,7 +241,7 @@ export const constantRoutes = [
children: [
{
path: 'index',
component: () => import('@/viewsPc/guide/index_en'),
component: () => import('@/viewsPc/guide/index'),
name: 'guide',
meta: { title: 'GUIDELINE' }
}
......@@ -293,31 +311,6 @@ export const constantRoutes = [
]
},
{
path: 'train',
component: Empty,
redirect: '/train/list',
children: [
{
path: 'list',
component: () => import('@/viewsPc/train/index'),
name: 'trainList',
meta: { title: '培训' }
},
{
path: 'detail/:id',
component: () => import('@/viewsPc/train/detail'),
name: 'trainDetail',
meta: { title: '培训详情' }
},
{
path: 'signUp/:id',
component: () => import('@/viewsPc/train/signUp'),
name: 'trainSignUp',
meta: { title: '培训报名' }
}
]
},
{
path: 'register',
component: Empty,
redirect: '/register',
......@@ -472,6 +465,12 @@ export const constantRoutes = [
meta: { title: '团队报名' }
},
{
path: 'list/:id/teamSignCn',
component: () => import('@/viewsPc/match/teamSign_bak'),
name: 'teamSignCn',
meta: { title: '团队报名-国内赛' }
},
{
path: 'list/:id/chooseCoach',
component: () => import('@/viewsPc/match/chooseCoach'),
name: 'chooseCoach',
......
......@@ -11,7 +11,7 @@
<el-option v-for="item in countryList" :key="item.id" :label="language==0?item.name:item.enName" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item :label="language==0?'详细地址':'Detailed Address'" required prop="address">
<el-form-item :label="language==0?'详细地址':'Detailed Address'">
<el-cascader v-if="form.countryId == 240"
v-model="form.regionId"
style="width: 100%;"
......@@ -23,13 +23,13 @@
<el-form-item :label="language==0?'机构名称':'Team Name'" required prop="name">
<el-input type="text" v-model="form.name" :placeholder="language==0?'请输入内容':''"/>
</el-form-item>
<el-form-item :label="language==0?'专业/业余':'Professional/Amateur'" required prop="majorFlag">
<el-form-item :label="language==0?'专业/业余':'Professional/Amateur'" prop="majorFlag">
<el-select v-model="form.majorFlag">
<el-option :label="language==0?'专业':'Professional'" value="1" />
<el-option :label="language==0?'业余':'Amateur'" value="0" />
</el-select>
</el-form-item>
<el-form-item :label="language==0?'团体类型':'Group type'" prop="type" required>
<el-form-item :label="language==0?'团体类型':'Group type'" prop="type">
<el-select v-model="form.type" :placeholder="language==0?'请选择团体类型':''" style="width: 100%;">
<el-option :label="language==0?'普通院校':'School'" value="0" />
<el-option :label="language==0?'专业舞蹈学校':'Professional dance school'" value="1" />
......@@ -47,7 +47,7 @@
<el-form-item :label="language==0?'联系人邮箱':'Contact Email'" required prop="contactEmail">
<el-input v-model="form.contactEmail" type="email" :placeholder="language==0?'请输入内容':''"/>
</el-form-item>
<el-form-item prop="imgUrl" required :label="language==0?'机构Logo':'Group Logo'">
<el-form-item prop="imgUrl" :label="language==0?'机构Logo':'Group Logo'">
<ImageUpload2
v-model="form.imgUrl" :crop-height="200" :crop-width="200" :limit="1"
:is-show-tip="false"
......@@ -88,12 +88,12 @@ const userName = ref('')
const registerRules = ref(
{
countryId: [{ required: true, trigger: 'blur', message: '请选择所属国家' },],
address: [{ required: true, trigger: 'blur', message: '请输入地址' },],
// address: [{ required: true, trigger: 'blur', message: '请输入地址' },],
name: [{ required: true, trigger: 'blur', message: '请输入' },],
contactPerson: [{ required: true, trigger: 'blur', message: '请输入' },],
contactTelno: [{ required: true, trigger: 'blur', message: '请输入' },],
contactEmail: [{ required: true, trigger: 'blur', message: '请输入' },],
imgUrl: [{ required: true, trigger: 'blur', message: '请上传' },],
// imgUrl: [{ required: true, trigger: 'blur', message: '请上传' },],
})
onMounted(() => {
getRegionsList()
......
......@@ -2,7 +2,7 @@
<div>
<div class="box">
<div class=" mt30"></div>
<div class="flexBody">
<div class="flexBody" v-if="language==0">
<el-tabs v-model="activeName" tab-position="left" @tab-change="changeTab" @tab-click="clickTab">
<el-tab-pane v-for="(tab,index) in list" :label="tab.name" :name="index">
<template #label>
......@@ -100,7 +100,109 @@
</div>
</div>
</div>
<div class="flexBody" v-else>
<el-tabs v-model="activeName" tab-position="left" @tab-change="changeTab" @tab-click="clickTab">
<el-tab-pane v-for="(tab,index) in list_en" :label="tab.name" :name="index">
<template #label>
<span class="custom-tabs-label">
<span class="tabFont">{{ tab.name }}</span>
</span>
</template>
</el-tab-pane>
</el-tabs>
<div class="infoPart">
<h3 class="leftboderTT">{{ nowTab.name }}</h3>
<div class="content" v-if="activeName==0">
<div>
The Taihu International Expo Center Block B covers a total area of 30,000m²and an interior area of 20,000m². It is equipped with top lighting, stage, sound and a full set of broadcasting equipment, and can accommodate 5,000 spectators. It is the premier multi-purpose cultural and sports venue in China, also a landmark for Wuxi.
<br/>
Location: No. 88, Qingshu Road, Economic and Development District, Wuxi<br/>
Business District: Within 10 kilometers, there are nearly 10 large commercial complexes, including the Mixc and Coastal City etc.<br/>
<img src="@/assets/zhinan/1.png"/>
<img src="@/assets/zhinan/2.png"/>
</div>
<h4 class="leftboderTT">Flow Chart In The Venue<span>(Functional Area and Flow Chart)</span></h4>
<img src="@/assets/zhinan/3.png"/>
<div>Sports teams enter the venue through security check at the main gate on the first floor, take escalators to the second floor, and arrive the competition area. Technical officers take vehicles arranged by the organizing committee directly from the northern ramp of the venue to the entrance of Venue B5 on the second floor platform and enter the venue.</div>
<div>The second floor is divided into five areas according to different functions. All personnel may arrive at different areas according to their access permissions. Red is the VIP area, blue is the office area, yellow is the spectator area, purple is the competition area and pink is the public area.</div>
</div>
<div class="content" v-if="activeName==1">
<div>The Registration Center is located in the hotel lobby from 10:00-22:00 on July 19-22, also serves as the info desk.</div>
<div>For information about emergency notices, catering services, and transportation services will be announced on the notice board. If you have any questions or need services, please contact the Registration Center.</div>
</div>
<div class="content" v-if="activeName==2">
<h4>1 Use and Storage of Licenses</h4>
<p>Licenses shall be properly kept and shall not be intentionally damaged. Licenses shall be used only by the holders, which shall not be transferred to others, used for unauthorized purposes, or altered.</p>
<p>For access to relevant activity and competition venue, license holders shall wear licenses in a conspicuous position against the chest.</p>
<p>License holders shall be subject to the inspection and management of on-site security personnel.</p>
<h4>2 Temporary Access Pass Application</h4>
<p>
If you lose your license and urgently need to enter the venue, you can apply to the competition department and go to the venue operation center to get a temporary access pass.
</p>
<h4>3 Type of License and Access Permissions</h4>
<p>The following colors and numbers will be used to indicate the different areas:</p>
<img src="@/assets/zhinan/5.jpg"/>
</div>
<div class="content" v-if="activeName==3">
<el-empty description="no data"></el-empty>
</div>
<div class="content" v-if="activeName==4">
<h4>1.Arrivals and Departures</h4>
<p>All technical officials and sports teams will be picked up by the organizing committee,
and the arrival stations should be Wuxi Sunan Shuofang International Airport, Shanghai Pudong International Airport, and Shanghai Hongqiao International Airport.</p>
<p>(1) Registration of Technical Officials and Sports Teams</p>
<p>Registration Time: July 19-22, 10: 00-22: 00</p>
<p>Registration (hotel) Location: HUALUXE Wuxi Taihu Hotel</p>
<p>(2) Registration Materials</p>
<p>Technical delegates, technical officials and relevant personnel shall provide round-trip traffic invoices for reimbursement.
All technical officials are required to provide the Organizing Committee with the following materials:</p>
<p>1. Paper boarding card (round-trip ticket)</p>
<p>2. Itinerary of the round-trip ticket (with the amount) or receipt of payment (with the amount)</p>
<p>3. Receipt for visa application (with amount)</p>
<h4>2.Catering Service</h4>
<img src="@/assets/zhinan/12.png"/>
<h5>Notes: Time subject to changes, once adjusted, it will be announced on the notice board of the Registration Center.</h5>
<img src="@/assets/zhinan/13.png"/>
<h4>3.Transportation Service</h4>
<p>
Vehicles shuttle the technical officers and sports teams between the hotel and the competition venue as per the Departure Timetable. For details of the Departure Timetable,
please refer to the notice board of the Registration Center.
</p>
<p>Pick-up and drop-off vehicles: mainly used for participants to make registration and departure.
</p>
<h4 style="text-indent: 2em">Tips:</h4>
<p>1. Read the Departure Timetable carefully and schedule your travel in advance.</p>
<p>2. Always sit securely to ensure your safety during the travel.</p>
<p>3. Each head of team and coach shall count the number of people at each travel to ensure nobody is left.</p>
<p>4. When getting off the vehicles, make sure to bring all belongings with you.</p>
<p>5. If you miss the vehicle or need to make an unplanned travel, please contact the info desk in time.</p>
</div>
<div class="content" v-if="activeName==5">
<h4>1. Service Time</h4>
<p>July 20-23, 2023</p>
<h4>2. Medical Stations</h4>
<p>The venue has one medical room, one medical station in the competition area, and two ambulances.</p>
<h4>3. On-site Medical Service</h4>
<p>Venue B4 has one medical room and equipped with one surgeon, one nurse, and one English-speaking volunteer.</p>
<p>
Venue B6 has one medical station in the competition area, equipped with one orthopedic surgeon, one emergency doctor,
one nurse, two first aiders, one English-speaking volunteer, and one staff. Both medical stations are fully equipped with medicines needed for on-site medical emergencies.</p>
<p>One ambulance and one emergency transfer vehicle are waiting at the entrance of G14, and all of them are equipped with first aid equipment such as defibrilla- tors and oxygen cylinders.</p>
</div>
<div class="content" v-if="activeName==6"><el-empty description="no data"></el-empty></div>
<div class="content" v-if="activeName==7"><el-empty description="no data"></el-empty></div>
<div class="content" v-if="activeName==8">
<label>Download:</label>
<a target="_blank" class="text-primary" >
<el-icon style="position: relative;top: 2px"><download/></el-icon>
WDSF ASIAN DANCESPORT FESTIVAL ENTRY GUIDE 0714
</a>
</div>
</div>
</div>
</div>
</div>
</template>
......@@ -108,6 +210,8 @@
import { onMounted, ref } from 'vue'
import { getNewsListById, getRuleKind } from '@/apiPc/webSite'
import { useRouter } from 'vue-router'
import {useStorage} from "@vueuse/core";
const language = useStorage('language', 0)
const router = useRouter()
const activeName = ref(0)
const showVipFee = ref(false)
......@@ -122,6 +226,17 @@ const list = ref([
{name:'VISA 签证 '},
{name:'指南手册下载'}
])
const list_en = ref([
{name:'Introduction of the Competition Venue'},
{name:' Registration Center '},
{name:'License Management '},
{name:'Map Guidance '},
{name:'Service for Technical Officers and Sports Teams '},
{name:'Medical Services '},
{name:'Surrounding Traffic Map '},
{name:'VISA '},
{name:'The Manual'}
])
const newsList = ref([])
const nowTab = ref({
tag: ''
......@@ -138,13 +253,22 @@ const getKindList = () => {
changeTab(0)
}
const changeTab = (n) => {
nowTab.value = list.value[n]
if(language.value==0){
nowTab.value = list.value[n]
} else {
nowTab.value = list_en.value[n]
}
if (nowTab.value.tag == 'fee') {
showVipFee.value = true
} else {
showVipFee.value = false
query.value.sortId = list.value[n].sortId
query.value.code = list.value[n].code
if(language.value==0){
query.value.sortId = list.value[n].sortId
query.value.code = list.value[n].code
} else {
query.value.sortId = list_en.value[n].sortId
query.value.code = list_en.value[n].code
}
getList()
}
}
......
<template>
<div>
<index-Ch v-if="language ==0"/>
<index-En v-else/>
</div>
</template>
<script setup>
import IndexCh from '/src/viewsPc/index'
import IndexEn from '/src/viewsPc/index_en'
import {useStorage} from "@vueuse/core/index";
const language = useStorage('language', 0)
</script>
<style scoped lang="scss">
</style>
......@@ -417,7 +417,6 @@ import {getHomePage, getNewsListById, getNewsList, getWeather} from '@/apiPc/web
import {useRouter} from 'vue-router'
import {rankList} from '@/assets/js/data'
import _ from 'lodash'
import {getHotActivity} from '@/apiPc/common'
import {Swiper, SwiperSlide} from 'swiper/vue'
import {Autoplay, Navigation} from 'swiper'
import 'swiper/css'
......
......@@ -375,7 +375,6 @@
style="--el-dialog-padding-primary:0;--el-dialog-border-radius:15px;
--el-dialog-bg-color:transparent;overflow: hidden;">
<div class="bg-lineg pd20">
<!-- <iframe width="500" scrolling="no" height="270" frameborder="0" allowtransparency="true" src="https://i.tianqi.com?c=code&id=95&color=%23FFFFFF&icon=4&py=binhuqu&site=15"></iframe>-->
<div class="weatherbox">
<div class="today">
<div>
......
......@@ -84,7 +84,7 @@
<div class="rItem r1" @click="goRegister(1)">
<h3>{{ language == 0 ? '机构用户' : 'Organization' }}</h3>
</div>
<div class="rItem r2" @click="goRegister(0)" :style="language==0?'filter:grayscale(1)':''">
<div class="rItem r2" @click="goRegister(0)">
<h3>{{ language == 0 ? '个人用户' : 'Individual' }}</h3>
</div>
</div>
......@@ -306,10 +306,6 @@ function showRegister() {
function goRegister(n) {
if (n == 0) {
if (language.value == 0) {
// ElMessage.warning('暂不开放国内注册!')
return
}
show.value = false
router.push({
path: `/register/0`
......
......@@ -8,7 +8,10 @@
</el-card>
<el-card class="mt20">
<h3 class="text-center text-danger">如果没有随行人员,点击【下一步】跳过此步骤</h3>
<h3 class="text-center text-danger" v-if="language==0">如果没有随行人员,点击【下一步】跳过此步骤</h3>
<h3 class="text-center text-danger" v-else>
Do you want to add casual personnel?
</h3>
</el-card>
<el-row class="mt20" :gutter="20">
......@@ -211,14 +214,15 @@ const data = reactive({
hasChooseObj: {},
groupId: '0',
signType: '',
activeStep: 1
activeStep: 1,
isNational:false
})
const {loading,
form,personAllList,
rules,
signType,
groupId,
hasChooseObj,activeStep
hasChooseObj,activeStep,isNational
} = toRefs(data)
let matchId = ''
const user = useUserStore().user
......@@ -227,6 +231,7 @@ onMounted(() => {
matchId = route.query.matchId
groupId.value = group.id
signType.value = route.query.signType || ''
isNational.value = route.query.isNational
if(!user){
router.push({name: 'home'})
return
......@@ -301,11 +306,6 @@ function geren() {
})
}
function chooseDone() {
// 返回团队报名
router.go(-1)
}
function goNext() {
console.log(form.value)
// if ((form.value.coachs.length < 1) && (form.value.leader.length < 1)) {
......@@ -334,7 +334,8 @@ function goNext() {
router.push({
name: 'chooseProject',
query: {
matchId: matchId
matchId: matchId,
isNational:isNational.value
}
})
})
......@@ -347,7 +348,8 @@ function goNext() {
query: {
matchId: matchId,
groupId: groupId.value,
signType: signType.value
signType: signType.value,
isNational:isNational.value
}
})
})
......@@ -361,7 +363,8 @@ function goPrev() {
name: `teamSign`,
query: {
matchId: matchId,
groupId: groupId.value
groupId: groupId.value,
isNational:isNational.value
}
})
}
......@@ -430,7 +433,7 @@ function addCoach(n) {
.chooseForm{
:deep(.el-form-item__content){background: rgba(245, 247, 249, 0.38);
padding: 20px 40px 10px;}
.el-checkbox{height: auto;}
.el-checkbox{height: auto;text-align: center;}
:deep(.el-checkbox__input){position: absolute;right: 0;top: 0;}
.name{text-align: center;}
}
......
......@@ -13,7 +13,9 @@
<h3 class="panel-title" v-if="language==0">选择参赛运动员清单</h3>
<h3 class="panel-title" v-else>Select list of participating athletes</h3>
<!-- <a class="fr" @click="emptyChoosed">{{ language == 0 ? '清空' : 'Empty' }}</a>-->
<el-button type="primary" plain class="fr" @click="chooseSportman">{{ language == 0 ? '选手管理' : 'Player Management' }}</el-button>
<el-button type="primary" plain class="fr" @click="chooseSportman">
{{ language == 0 ? '选手管理' : 'Player Management' }}
</el-button>
</div>
<div class="panel-body" style="padding: 10px">
<div style="margin: 0 4px 10px;display: flex">
......@@ -24,18 +26,17 @@
{{ c.xing }}{{ c.ming }}
<img v-if="c.sex=='0'" src="@/assets/img/female.png"/>
<img v-if="c.sex=='1'" src="@/assets/img/male.png"/>
<!-- ({{ c.sexStr }})-->
-{{ c.age }}
<!-- -{{ c.age }}-->
</div>
</el-option>
<!-- <template #tag>-->
<!-- <el-tag v-for="v in choosed2List" :key="v.value" type="primary">-->
<!-- {{ v.xing + v.ming }}-->
<!-- </el-tag>-->
<!-- </template>-->
<!-- <template #tag>-->
<!-- <el-tag v-for="v in choosed2List" :key="v.value" type="primary">-->
<!-- {{ v.xing + v.ming }}-->
<!-- </el-tag>-->
<!-- </template>-->
</el-select>
<el-button type="primary" @click="emptychoosedchoosed">
{{language == 0 ? '重选' : 'Re-select' }}
{{ language == 0 ? '重选' : 'Re-select' }}
</el-button>
</div>
<!-- <div class="noPicChooseForm" id="chooseArr">-->
......@@ -131,8 +132,8 @@
</div>
<dialogAddCoach ref="dialogAddCoachRef"/>
<!-- <dialogAllSportsmanList ref="dialogAllSportsmanListRef" @transfer="getChoosed" @submitForm="getSignInfoList"/>-->
<dialogAllSportsmanList ref="dialogAllSportsmanListRef" @submitForm="getAthletesList"/>
<!-- <dialogAllSportsmanList ref="dialogAllSportsmanListRef" @transfer="getChoosed" @submitForm="getSignInfoList"/>-->
<dialogAllSportsmanList ref="dialogAllSportsmanListRef" @submitForm="getAthletesList"/>
<dialogImport ref="dialogImportProps" @submitForm="getMySignInfo"/>
<el-dialog v-model="showResult" :close-on-click-modal="false" :show-close="false">
<el-result icon="success" :title="language==0?'报名成功':'Sign up successful'">
......@@ -213,7 +214,8 @@ const data = reactive({
choosed2Listbak: [],
projectQuery: {}, tableType: 1,
currProjectId: '',
openTour: false
openTour: false,
isNational: false
})
const {
activeTeam,
......@@ -241,7 +243,7 @@ const {
tableType,
zuQuery,
openTour, currProjectId,
tourCurrent
tourCurrent, isNational
} = toRefs(data)
const nextButtonProps = ref({})
const matchId = ref(route.query.matchId)
......@@ -272,6 +274,11 @@ function getMatch(id) {
noPhotoCanSign.value = res.data.noPhotoCanSign
coachOrLeaderFlag.value = res.data.coachOrLeaderFlag
extraform.value = JSON.parse(res.data.participantsInfo)
if (res.data.languageSource == '100') {
isNational.value = false
} else {
isNational.value = true
}
})
}
......@@ -363,7 +370,8 @@ function chooseSportman() {
signType: signType.value,
noPhotoCanSign: noPhotoCanSign.value,
coachOrLeaderFlag: coachOrLeaderFlag.value,
choosedList: choosedList.value
choosedList: choosedList.value,
isNational: isNational.value
}
proxy.$refs['dialogAllSportsmanListRef'].open(params)
}
......@@ -556,15 +564,15 @@ function changeProject(e) {
})
//循环choosed2List 检查是否存在WDSF号
let n = 0
for(var cc of choosed2List.value){
if(!cc.wdsfMin){
for (var cc of choosed2List.value) {
if (!cc.wdsfMin) {
n++
}
}
//obj需要wdsf 且 currProjectId非空
if (obj.checkMemberFlag == '1'&&currProjectId.value != ''&& n>0) {
if (obj.checkMemberFlag == '1' && currProjectId.value != '' && n > 0) {
const params = {
title: language.value == 0 ? '验证WDSF' :'Verify WDSF',
title: language.value == 0 ? '验证WDSF' : 'Verify WDSF',
groupId: groupId.value,
matchId: matchId.value,
list: choosed2List.value
......
......@@ -4,7 +4,7 @@
:close-on-click-modal="false" class="pcloginpop"
destroy-on-close
>
<el-form ref="dialogRef" :model="form" :rules="language==0?rules:rules_cn" label-width="120px" inline>
<el-form ref="dialogRef" :model="form" :rules="language==0?rules:rules_cn" label-width="150px" inline>
<el-row :gutter="30" class="mt30">
<el-col :lg="12" class="touxiang">
......@@ -37,10 +37,10 @@
<el-form-item :label="language==0?'证件号码':'ID NO'" prop="idcCode" required>
<el-input v-model="form.idcCode" @blur="checkCode" :disabled="editgay"/>
</el-form-item>
<el-form-item label="上传证件照" required :required="form.idcType!='0'">
<el-form-item :label="language==0?'有效证件':'Valid Certificates Scanning Copy'" required :required="form.idcType!='0'">
<file-upload v-model="form.passportUrl" :limit="1" :is-show-tip="false" />
</el-form-item>
<el-form-item :label="language==0?'性别':'sex'" prop="sex">
<el-form-item :label="language==0?'性别':'Gender'" prop="sex">
<el-radio-group v-model="form.sex" :disabled="form.idcType=='0'">
<el-radio value="0">{{ language==0?'女':'female' }}</el-radio>
<el-radio value="1">{{ language==0?'男':'male' }}</el-radio>
......
......@@ -4,6 +4,7 @@
:close-on-click-modal="false" class="pcloginpop"
destroy-on-close
>
<!-- 国际赛事-->
<el-form ref="dialogRef" :model="form" :rules="language==0?rules:rules_cn" label-width="120px" inline>
<el-row :gutter="30" class="mt30">
<el-col :lg="12" class="touxiang">
......@@ -460,5 +461,10 @@ function cancel() {
}
}
}
.el-input-group__append button.el-button, .el-input-group__append button.el-button:hover {
color: var(--el-color-primary);
background: #efefff;
border: var(--el-color-primary) solid 1px;
border-radius: 0;
}
</style>
......
......@@ -4,14 +4,14 @@
:close-on-click-modal="false" class="pcloginpop" @close="cancel"
destroy-on-close
>
<!-- wdsf 个人/舞伴-->
<!-- wdsf 个人/舞伴/国际赛运动员-->
<div class="pd10"></div>
<el-form ref="dialogRef" :model="form" :label-width="language==0?120:180" inline>
<el-form-item :label="language==0?'WDSF卡号':'WDSF ID'" v-if="form.id">
<el-form-item :label="language==0?'WDSF卡号':'WDSF ID'" v-if="form.id&&form.id!='0'">
{{ form.wdsfMin }}
</el-form-item>
<el-form-item :label="language==0?'WDSF卡号':'WDSF ID'" required v-else>
<el-input type="text" v-model="card" @change="resetCode" >
<el-input type="text" v-model="card" @change="resetCode">
<template #append>
<el-button type="primary" plain style="width: 110px" @click="checkCard">
<el-icon v-if="isCodeTrue" size="16" color="#67C23A">
......@@ -29,22 +29,22 @@
<span v-else>(Obtain automatically according to the WDSF number)</span>
</div>
<div class="h20"></div>
<el-form-item :label="language==0?'名':'name'">
<el-form-item :label="language==0?'名':'Name'">
<el-input v-model="form.ming" disabled/>
</el-form-item>
<el-form-item :label="language==0?'姓氏':'surname'">
<el-form-item :label="language==0?'姓氏':'Surname'">
<el-input v-model="form.xing" disabled/>
</el-form-item>
<el-form-item label="Representing">
<el-form-item :label="language==0?'代表':'Representing'">
<el-input v-model="form.representing" disabled/>
</el-form-item>
<el-form-item label="Age group">
<el-form-item :label="language==1?'Age group':'年龄组'">
<el-input v-model="form.ageGroup" disabled/>
</el-form-item>
<el-form-item label="Division">
<el-form-item :label="language==0?'舞种':'Division'">
<el-input v-model="form.division" disabled/>
</el-form-item>
<el-form-item label="Status">
<el-form-item :label="language==0?'状态':'Status'">
<el-input v-model="form.wdsfStatus" disabled/>
</el-form-item>
<div class="h30"></div>
......@@ -52,36 +52,44 @@
{{ language == 0 ? '补充信息' : 'Supplementary Information' }}
</div>
<div class="h20"></div>
<el-form-item prop="picUrl" :label="language==0?'个人照片':'photo'" required>
<el-form-item prop="picUrl" :label="language==0?'个人照片':'photo'">
<ImageUpload2
v-model="form.picUrl" :crop-height="280" :crop-width="200" class="threeFour" :limit="1"
:is-show-tip="false"
/>
</el-form-item>
<el-form-item :label="language==0?'性别':'Sex'" required>
<el-form-item :label="language==0?'性别':'Gender'" required>
<el-radio-group v-model="form.sex">
<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?'出生日期':'Birthday'" required>
<el-form-item :label="language==0?'出生日期':'Birthday'">
<el-date-picker
v-model="form.birth"
style="width: 100%;"
type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
/>
</el-form-item>
<el-form-item label="Passport number" required>
<el-input v-model="form.passportNumber"/>
<el-form-item :label="language==0?'有效证件':'Valid Certificates Scanning Copy'" required>
<file-upload v-model="form.passportUrl" :limit="1" :is-show-tip="false"
:button-text="language==0?'上传':'Upload'"/>
<div class="tip">
<span v-if="language==0">请上传护照副本,用于认证 </span>
<span v-else>Please upload a passport copy for authentication</span>
</div>
</el-form-item>
<el-form-item label="Passport File" required>
<file-upload v-model="form.passportUrl" :limit="1" :is-show-tip="false" :button-text="'Upload'"/>
<el-form-item :label="language==0?'证件号':'Passport number'">
<el-input v-model="form.passportNumber"/>
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer text-center">
<el-button type="primary" class="btn-lineG w200px" round @click="submitForm">{{
<el-button type="primary" class="btn-lineG w200px" round @click="submitForm">
{{
language == 0 ? '确定' : 'Save'
}}
</el-button>
......@@ -99,7 +107,8 @@ import _ from 'lodash'
import Vcode from "vue3-puzzle-vcode"
import {checkWdsf} from "@/apiPc/match";
import {useStorage} from "@vueuse/core/index";
const language= useStorage('language',0)
const language = useStorage('language', 0)
const certificates = ref([
{
value: '0',
......@@ -119,9 +128,9 @@ const emit = defineEmits(['submitForm'])
const data = reactive({
form: {
// countryId: 240
sex:'0'
sex: '0'
},
card:'',
card: '',
show: false,
showVcode: false,
labels: [
......@@ -136,47 +145,57 @@ const data = reactive({
title: '添加选手信息',
isMe: false,
isCodeTrue: false,
cptId:''
cptId: ''
})
const {form, show,showVcode, title, labels, uType, isMe,isCodeTrue,card,cptId} = toRefs(data)
const {form, show, showVcode, title, labels, uType, isMe, isCodeTrue, card, cptId} = toRefs(data)
let editgay = false
let groupId = '0'
const open = (params) => {
console.log(params)
show.value = true
title.value = params.title
isMe.value = params.isMe
isMe.value = params.isMe || false
cptId.value = params.cptId
groupId = params.groupId
form.value.id = params.id
if (language.value == 0) {
form.value.countryId = 240
}
if (isMe.value) {
//个人
match.getMyPersonInfo().then(res => {
form.value = res.data
form.value.id = res.data.id
if (form.value.label) {
// {0:0,1:1,2:3}
form.value.labelArr = form.value.label.split(',')
} else {
form.value.labelArr = ['0']
}
})
getMyInfo()
} else {
if (params.id == 0) {
//新增
editgay = false
} else {// 编辑舞伴
editgay = true
form.value = params.form
if(params.form){
form.value = params.form
}else {
getFormById(params.id)
}
}
}
}
defineExpose({open})
function getMyInfo() {
match.getMyPersonInfo().then(res => {
form.value = res.data
})
}
function getFormById(id) {
match.getPersonInfoById(id).then(res => {
form.value = res.data
})
}
watch(show, (value) => {
if (!value) {
card.value = ''
isCodeTrue.value = false
form.value = {
sex:'0'
sex: '0'
}
}
nextTick(() => {
......@@ -185,26 +204,23 @@ watch(show, (value) => {
})
function submitForm() {
if (!form.value.passportNumber) {
ElMessage.warning('Please fill in your passport number')
return
}
if (!form.value.picUrl) {
ElMessage.warning('Please upload your photo')
return
}
// if (!form.value.passportNumber) {
// ElMessage.warning('Please fill in your passport number')
// return
// }
// if (!form.value.picUrl) {
// ElMessage.warning('Please upload your photo')
// return
// }
if (!form.value.passportUrl) {
ElMessage.warning('Please upload your passport file')
return
}
if (editgay) {
// id不是0
form.value.cptId = cptId.value
if(Array.isArray(form.value.passportUrl)){
if (Array.isArray(form.value.passportUrl)) {
form.value.passportUrl = form.value.passportUrl[0].url
} else {
form.value.passportUrl = form.value.passportUrl
}
match.editPersonInfo(form.value).then(res => {
ElMessage.success('保存成功')
......@@ -212,11 +228,11 @@ function submitForm() {
emit('submitForm')
})
} else {
if (!form.value.birth) {
ElMessage.warning('Please fill in your birthday')
return
}
if(Array.isArray(form.value.passportUrl)){
// if (!form.value.birth) {
// ElMessage.warning('Please fill in your birthday')
// return
// }
if (Array.isArray(form.value.passportUrl)) {
form.value.passportUrl = form.value.passportUrl[0].url
}
if (isMe.value) {
......@@ -233,16 +249,24 @@ function submitForm() {
form.value.wdsfMin = form.value.min
form.value.idcCode = form.value.passportNumber
form.value.idcType = '1'
if(Array.isArray(form.value.passportUrl)){
if (Array.isArray(form.value.passportUrl)) {
form.value.passportUrl = form.value.passportUrl[0].url
}
if(groupId=='0'){
match.savePersonForMyPerson(form.value).then(res => {
ElMessage.success('保存成功')
show.value = false
emit('submitForm', res.data)
})
} else {
form.value.passportUrl = form.value.passportUrl
form.value.groupId = groupId
match.savePersonForMyGroup(form.value).then(res => {
ElMessage.success(language.value == 0 ?'保存成功':'Save successful')
show.value = false
emit('submitForm')
})
}
match.savePersonForMyPerson(form.value).then(res => {
ElMessage.success('保存成功')
show.value = false
emit('submitForm', res.data)
})
}
}
}
......@@ -251,11 +275,13 @@ function cancel() {
show.value = false
showVcode.value = false
}
function resetCode() {
isCodeTrue.value = false
}
function checkCard() {
if(isCodeTrue.value){
if (isCodeTrue.value) {
return
}
if (!card.value) {
......@@ -268,6 +294,7 @@ function checkCard() {
}
showVcode.value = true
}
function codeSuccess(msg) {
console.log('验证通过' + msg);
showVcode.value = false
......
......@@ -4,7 +4,7 @@
<el-button type="primary" @click="addMember">
{{ language == 0 ? '添加选手' : 'Add Player' }}
</el-button>
<el-button type="primary" plain @click="importSportman" v-if="language == 0">
<el-button type="primary" plain @click="importSportman" v-if="isNational">
{{language == 0 ? '导入选手' : 'Import Player'}}
</el-button>
</div>
......@@ -39,13 +39,18 @@
@selection-change="handleSelectionChange">
<!-- <el-table-column type="selection" :label="language==0?'选择':'Selection'" :selectable="selectable"/>-->
<el-table-column type="index" :label="language==0?'序号':'Index'" width="60" :selectable="selectable"/>
<el-table-column :label="language==0?'姓氏':'Last Name'" prop="xing" min-width="100"/>
<el-table-column :label="language==0?'名':'First Name'" prop="ming" min-width="100"/>
<el-table-column :label="language==0?'所属国家/地区':'Country'" prop="countryName" min-width="100"/>
<el-table-column v-show="isNational" :label="language==0?'WDSF 会员号':'MIN'" prop="wdsfMin" width="100"/>
<el-table-column :label="language==0?'姓氏':'Surname'" prop="xing" min-width="100"/>
<el-table-column :label="language==0?'名':'Name'" prop="ming" min-width="100"/>
<el-table-column v-show="isNational" :label="language==0?'代表':'Representing'" prop="representing" min-width="120"/>
<el-table-column :label="language==0?'所属国家/地区':'Nationality'" prop="countryName" min-width="100"/>
<el-table-column :label="language==0?'性别':'Gender'" prop="sexStr"/>
<el-table-column v-show="isNational" :label="language==0?'年龄组':'Age group'" prop="ageGroup" min-width="100"/>
<el-table-column v-show="isNational" :label="language==0?'舞种':'Division'" prop="division" min-width="100"/>
<el-table-column :label="language==0?'年龄':'Age'" prop="age"/>
<el-table-column :label="language==0?'出生日期':'Birth'" prop="birth" width="110"/>
<el-table-column :label="language==0?'证件类型':'ID Type'" prop="idcTypeStr"/>
<el-table-column :label="language==0?'证件类型':'ID Type'" prop="idcTypeStr" width="120"/>
<el-table-column :label="language==0?'证件号码':'ID NO.'" prop="idcCode" width="200"/>
<!-- <el-table-column label="会员角色" width="200">-->
<!-- <template #default="scope">-->
......@@ -87,8 +92,8 @@
<!-- </template>-->
</el-dialog>
<addCoach ref="dialogAddCoach" @submitForm="getList"/>
<addMan_en ref="dialogSportman_En" @submitForm="getList"/>
<add-coach ref="dialogAddCoach" @submitForm="getList"/>
<add-wdsf ref="dialogAddWdsf" @submitForm="getList"/>
<Import ref="dialogImportProps" @submitForm="getList"/>
</template>
......@@ -97,7 +102,7 @@ import {reactive, ref, toRefs, watch} from 'vue'
import {getCurrentInstance, nextTick, onMounted} from '@vue/runtime-core'
import * as match from '@/apiPc/match'
import AddCoach from '../components/addCoach'
import AddMan_en from '../components/addSportman_en'
import AddWdsf from '../components/addWdsf'
import Import from '../components/import'
import {useStorage} from "@vueuse/core/index";
const language= useStorage('language',0)
......@@ -115,9 +120,10 @@ const data = reactive({
loading: false,
title: '选择运动员',
noPhotoCanSign: 0,
total: 0
total: 0,
isNational:false
})
const {query, tableData, show, title, loading, noPhotoCanSign,total} = toRefs(data)
const {query, tableData, show, title, loading, noPhotoCanSign,total,isNational} = toRefs(data)
const certificates = ref([
{
value: '0',
......@@ -142,6 +148,7 @@ const open = (params) => {
groupId = params.groupId
noPhotoCanSign.value = params.noPhotoCanSign
show.value = true
isNational.value = params.isNational
choosedList = params.choosedList
for (const p of choosedList) {
choosedIds.push(p.id)
......@@ -192,29 +199,32 @@ function cancel() {
}
function editPerson(row) {
console.log(isNational.value)
const params = {
id: row.id,
title: language.value == 0 ?'编辑人员':'Edit Person',
groupId: groupId
groupId: groupId,
label: '0'
}
if (language.value == 0 ){
proxy.$refs['dialogAddCoach'].open(params)
if (isNational.value){
proxy.$refs['dialogAddWdsf'].open(params)
} else {
proxy.$refs['dialogSportman_En'].open(params)
proxy.$refs['dialogAddCoach'].open(params)
}
}
function addMember() {
console.log(isNational.value)
const params = {
title: language.value == 0 ?'添加人员':'Add',
id: 0,
groupId: groupId,
label: '0'
}
if (language.value == 0 ){
proxy.$refs['dialogAddCoach'].open(params)
if (isNational.value){
proxy.$refs['dialogAddWdsf'].open(params)
} else {
proxy.$refs['dialogSportman_En'].open(params)
proxy.$refs['dialogAddCoach'].open(params)
}
}
......
......@@ -29,6 +29,7 @@
<td>
<div>{{ p.birthPeriod }}</div>
<div>{{p.birthPeriodSecond}}</div>
<!-- <div>{{ p.birthAgeGroup }};{{p.birthAgeSecondGroup}}</div>-->
</td>
<td>{{ language==0?'¥':'€' }}{{ p.serviceFee }}</td>
</tr>
......
<template>
<!-- 人员表格-->
<el-table :data="tableData" class="mt20">
<el-table-column type="index" :label="language==0?'序号':'index'" width="80" align="center"/>
<el-table-column :label="language==0?'姓氏':'Last Name'" prop="xing" min-width="100"/>
<el-table-column :label="language==0?'名':'First Name'" prop="ming" min-width="100"/>
<el-table-column :label="language==0?'所属国家/地区':'Country'" prop="countryName" min-width="100"/>
<el-table-column type="index" :label="language==0?'序号':'Index'" width="80" align="center"/>
<el-table-column :label="language==0?'姓氏':'Surname'" prop="xing" min-width="100"/>
<el-table-column :label="language==0?'名':'Name'" prop="ming" min-width="100"/>
<el-table-column :label="language==0?'所属国家/地区':'Nationality'" prop="countryName" min-width="100"/>
<el-table-column :label="language==0?'性别':'Gender'" prop="sexStr"/>
<!-- <el-table-column :label="language==0?'年龄':'Age'" prop="age"/>-->
<el-table-column :label="language==0?'证件类型':'ID Type'" prop="idcTypeStr" :min-width="language==0?'80':'160'"/>
......@@ -25,10 +25,9 @@
</div>
</template>
</el-table-column>
<el-table-column :label="language==0?'WDSF会员号':'WDSF code'" prop="wdsfMin" width="110"/>
<el-table-column :label="language==0?'WDSF会员号':'WDSF MIN'" prop="wdsfMin" width="110"/>
<!-- <el-table-column :label="language==0?'详细地址':'Detailed Address'" prop="address" min-width="140"/>-->
<el-table-column :label="language==0?'操作':'Actions'" fixed="right" width="160" header-align="center"
align="center">
<el-table-column :label="language==0?'操作':'Actions'" fixed="right" width="160" header-align="center" align="center">
<template #default="scope">
<a class="text-primary pd10" @click="editCoach(scope.row)">
{{language==0?'编辑':'Edit'}}
......
......@@ -4,9 +4,9 @@
<el-row :gutter="15">
<el-col :lg="7" :md="24" :xl="6">
<div class="popo">
<el-tag v-if="n.signType==0">个人</el-tag>
<el-tag v-if="n.signType==1">团体</el-tag>
<el-tag v-if="n.signType==2">个人+团体</el-tag>
<el-tag v-if="n.signType==0">{{ language==0?'个人':'Individual' }}</el-tag>
<el-tag v-if="n.signType==1">{{ language==0?'团体':'Team' }}</el-tag>
<el-tag v-if="n.signType==2">{{ language==0?'个人/团体':'Individual/Team' }}</el-tag>
</div>
<img class="mauto mw100 coverLimitHeight" :src="fillImgUrl(n.coverUrl)">
</el-col>
......@@ -44,8 +44,12 @@
<div class="text-center mt30">
<a class="btn-lineG mb20 mauto" style="display: block;" v-if="n.time>0">
<span v-if="n.time>0 && n.startSign<=0"> {{ language==0?'我要报名':'Register' }}</span>
<span v-if="n.startSign>0"> {{ language==0?'报名未开始':'Not started yet' }}</span>
</a>
<div v-else style="opacity: 0.5;" class="btn-lineG mb20 mauto text-center">
{{ language == 0 ? '报名已结束' : 'Registration has ended' }}
</div>
</div>
</el-col>
</el-row>
......@@ -88,7 +92,6 @@ function goDetail(id) {
<style scoped lang="scss">
.pv20{padding: 0 20px;}
.mt60{margin-top: 60px}
.popo{position: absolute;left: 0;}
.matchItem {
cursor: pointer;padding: 0 0 20px;
background: #FFFFFF;border-bottom: 1px solid #e5e5e5;
......@@ -102,7 +105,6 @@ function goDetail(id) {
position: absolute;
left: 20px;
top: 30px;
img {
background: #fff;
}
......
......@@ -23,35 +23,43 @@
</el-form-item>
</el-col>
<el-col :lg="10">
<el-form-item :label="language==0?'参赛队名称':'Name of participating team'" required prop="abreviations">
<el-input type="text" v-model="form.abreviations" :placeholder="language==0?'请输入内容':''"/>
<el-form-item :label="language==0?'代表国家/地区':'Representing'" required>
<el-select filterable v-model="form.countryId" @change="changeCountryId">
<!-- <el-option v-for="item in countryList" :key="item.id" :label="language==0?item.name:item.enName" :value="item.id"/>-->
<el-option v-for="item in countryList" :key="item.id" :label="item.noc||item.enName" :value="item.id"/>
</el-select>
</el-form-item>
<el-form-item :label="language==0?'团体名称':'Institution Name'" prop="name">
<!-- <el-form-item :label="language==0?'参赛队名称':'Name of participating team'" required prop="abreviations">-->
<!-- <el-input type="text" v-model="form.abreviations" :placeholder="language==0?'请输入内容':''"/>-->
<!-- </el-form-item>-->
<el-form-item v-if="!isNational" :label="language==0?'团体名称':'Team Name'" prop="name" required>
<!-- <div>-->
<!-- <span v-if="language==0">{{form.country.name}}代表队</span>-->
<!-- <span v-else>{{form.country.enName}} Delegation</span>-->
<!-- </div>-->
<el-input v-model="form.name" :placeholder="language==0?'请输入团体名称':''" />
</el-form-item>
<el-form-item :label="language==0?'所属国家/地区':'Country'" required>
<el-select filterable v-model="form.countryId">
<el-option v-for="item in countryList" :key="item.id" :label="language==0?item.name:item.enName" :value="item.id" />
</el-select>
</el-form-item>
<el-form-item :label="language==0?'负责人姓名':'Contact Person'" prop="contactPerson">
<el-form-item :label="language==0?'联系人姓名':'Contact Person'" required prop="contactPerson">
<el-input v-model="form.contactPerson" :placeholder="language==0?'请输入联系人':''" />
</el-form-item>
<el-form-item :label="language==0?'邮箱':'Email'" required prop="contactEmail">
<el-form-item :label="language==0?'联系人邮箱':'Email'" required prop="contactEmail">
<el-input v-model="form.contactEmail" type="email" :placeholder="language==0?'请输入内容':''"/>
</el-form-item>
<el-form-item :label="language==0?'联系人电话':'Contact Phone'" required prop="contactTelno">
<el-input v-model="form.contactTelno" type="phone" :placeholder="language==0?'请输入内容':''"/>
</el-form-item>
<!-- <el-form-item :label="language==0?'专业/业余':'Professional/Amateur'" required prop="majorFlag">-->
<!-- <el-select v-model="form.majorFlag">-->
<!-- <el-option :label="language==0?'专业':'Professional'" value="1" />-->
<!-- <el-option :label="language==0?'业余':'Amateur'" value="0" />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<el-form-item :label="language==0?'团体类型':'Group type'" prop="type">
<el-select :disabled="language==1" v-model="form.type" :placeholder="typeOptions[language].selectPlaceholder" style="width: 100%;">
<el-option v-for="(o,index) in typeOptions[language].options" :label="o.text"
:key="index" :value="o.value" />
</el-select>
</el-form-item>
<!-- <el-form-item :label="language==0?'团体类型':'Group type'" prop="type">-->
<!-- <el-select :disabled="language==1" v-model="form.type" :placeholder="typeOptions[language].selectPlaceholder" style="width: 100%;">-->
<!-- <el-option v-for="(o,index) in typeOptions[language].options" :label="o.text"-->
<!-- :key="index" :value="o.value" />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<el-form-item :label="language==0?'详细地址':'Detailed Address'" prop="address">
<el-input type="textarea" v-model="form.address" class="mt10" :placeholder="language==0?'请输入详细地址':''"/>
</el-form-item>
......@@ -108,11 +116,13 @@ import _ from 'lodash'
import {useStorage} from "@vueuse/core/index";
const data = reactive({
isRanks: false,
isNational: false,
matchData:{
enBo:{}
},
form: {},
form: {
country:{}
},
typeOptions: {
0: {
selectPlaceholder: '请选择团体类型',
......@@ -144,28 +154,30 @@ const data = reactive({
rankList: [],
accept: '.doc, .pdf, .docx, .zip',
rules: {
imgUrl: { required: true, message: '请上传', trigger: 'blur' },
name: { required: true, message: '请填写', trigger: 'blur' },
type: { required: true, message: '请选择', trigger: 'change' },
// imgUrl: { required: true, message: '请上传', trigger: 'blur' },
// name: { required: true, message: '请填写', trigger: 'blur' },
// type: { required: true, message: '请选择', trigger: 'change' },
contactPerson: { required: true, message: '请填写内容', trigger: 'blur' },
contactTelno: { required: true, message: '请填写内容', trigger: 'blur' },
contactEmail: { required: true, message: '请填写内容', trigger: 'blur' },
abreviations: { required: true, message: '请填写内容', trigger: 'blur' },
address: { required: true, message: '请填写内容', trigger: 'blur' }
// abreviations: { required: true, message: '请填写内容', trigger: 'blur' },
// address: { required: true, message: '请填写内容', trigger: 'blur' }
},
rules_en: {
imgUrl: { required: true, message: 'required', trigger: 'blur' },
name: { required: true, message: 'required', trigger: 'blur' },
type: { required: true, message: 'required', trigger: 'change' },
// imgUrl: { required: true, message: 'required', trigger: 'blur' },
// name: { required: true, message: 'required', trigger: 'blur' },
// type: { required: true, message: 'required', trigger: 'change' },
contactPerson: { required: true, message: 'required', trigger: 'blur' },
contactTelno: { required: true, message: 'required', trigger: 'blur' },
contactEmail: { required: true, message: 'required', trigger: 'blur' },
abreviations: { required: true, message: 'required', trigger: 'blur' },
// abreviations: { required: true, message: 'required', trigger: 'blur' },
// address: { required: true, message: 'required', trigger: 'blur' }
},
coachOrLeaderFlag: '',
matchInfo:{}
})
const {
isRanks,matchData,
isNational,matchData,
rankList,
form,
groupId,
......@@ -183,6 +195,7 @@ onMounted(() => {
// 获取团体信息
getGroupInfo()
signType.value = route.query.signType
isNational.value = route.query.isNational
getRegionsList()
getCountryList()
......@@ -230,11 +243,19 @@ function getCountryList() {
countryList.value = res.data
})
}
function changeCountryId(e) {
console.log(e)
for (var c of countryList.value){
if (c.id == e) {
form.value.country = c
}
}
}
function getGroupInfo() {
match.getGroupInfo().then(res => {
form.value = res.data
if(language.value == 1){
form.value.type = '4'
if(form.value.countryId){
changeCountryId(form.value.countryId)
}
}).catch(err => {
router.push({name: 'home'})
......@@ -242,12 +263,6 @@ function getGroupInfo() {
})
}
function getTeamList() {
return match.getMyTeamList(cptId.value, groupId.value).then(response => {
rankList.value = response.data
})
}
function goPrev() {
router.go(-1)
}
......@@ -306,7 +321,7 @@ function goNext() {
query: {
matchId: cptId.value,
groupId: groupId.value,
signType: signType.value
isNational: isNational.value
}
})
}
......
......@@ -2,8 +2,8 @@
<div>
<div class="box">
<div class="indexTitle">
<h3 class="leftboderTT">赛事视频</h3>
<a class="more" @click="goList(query1.sortId,'赛事视频')">MORE</a>
<h3 class="leftboderTT">{{ language==0?'赛事视频':'Event Video' }}</h3>
<a class="more" @click="goList(query1.sortId,language==0?'赛事视频':'Event Videos')">MORE</a>
</div>
<el-row :gutter="20">
......@@ -44,8 +44,8 @@
<div class="indexTitle">
<h3 class="leftboderTT">精彩图片</h3>
<a class="more" @click="goList(query2.sortId,'精彩图片')">MORE</a>
<h3 class="leftboderTT">{{ language==0?'精彩图片':'Exciting Photos' }}</h3>
<a class="more" @click="goList(query2.sortId,language==0?'精彩图片':'Exciting Photos')">MORE</a>
</div>
<el-row class="mb20" :gutter="20">
<el-col :lg="9">
......@@ -71,6 +71,8 @@
<div class="mb60" />
</div>
</div>
</template>
<script setup>
......@@ -78,7 +80,8 @@ import { ArrowRight, Search } from '@element-plus/icons-vue'
import { onMounted, ref } from 'vue'
import { getNewsListById } from '@/apiPc/webSite'
import { useRouter } from 'vue-router'
import {useStorage} from "@vueuse/core/index";
const language = useStorage('language', 0)
const router = useRouter()
const activeName = ref(0)
const total = ref(0)
......@@ -102,11 +105,17 @@ onMounted(() => {
})
const getList = (obj) => {
if(language.value==1){
obj.sortId = '10000008'
}
getNewsListById(obj).then(res => {
newsList.value = res.rows
})
}
const getList2 = (obj) => {
if(language.value==1){
obj.sortId = '10000009'
}
getNewsListById(obj).then(res => {
newsList2.value = res.rows
})
......
<template>
<div>
<div class="box">
<div class="indexTitle">
<h3 class="leftboderTT">Event Video</h3>
<a class="more" @click="goList(query1.sortId,'Event Videos')">MORE</a>
</div>
<el-row :gutter="20">
<el-col :lg="12" :sm="24" :md="12">
<div class="liveImgbox" @click="goDetail(newsList[0])">
<i class="ii">Live Broadcast</i>
<img :src="fillImgUrl_webSite(newsList[0]?.picUrl)">
<h3 class="esp">{{ newsList[0]?.name }}
</h3>
</div>
</el-col>
<el-col :lg="12" :sm="24">
<el-row :gutter="20">
<el-col :md="12" :lg="12">
<div class="videoImgbox" @click="goDetail(newsList[1])">
<img :src="fillImgUrl_webSite(newsList[1]?.picUrl)">
</div>
</el-col>
<el-col :md="12" :lg="12">
<div class="videoImgbox" @click="goDetail(newsList[2])">
<img :src="fillImgUrl_webSite(newsList[2]?.picUrl)">
</div>
</el-col>
<el-col :md="12" :lg="12" class="mt20">
<div class="videoImgbox" @click="goDetail(newsList[3])">
<img :src="fillImgUrl_webSite(newsList[3]?.picUrl)">
</div>
</el-col>
<el-col :md="12" :lg="12" class="mt20">
<div class="videoImgbox" @click="goDetail(newsList[4])">
<img :src="fillImgUrl_webSite(newsList[4]?.picUrl)">
</div>
</el-col>
</el-row>
</el-col>
</el-row>
<div class="indexTitle">
<h3 class="leftboderTT">Exciting Photos</h3>
<a class="more" @click="goList(query2.sortId,'Exciting Photos')">MORE</a>
</div>
<el-row class="mb20" :gutter="20">
<el-col :lg="9">
<div class="picbox" @click="goDetail(newsList2[0])"><img :src="fillImgUrl_webSite(newsList2[0]?.picUrl)"/></div>
</el-col>
<el-col :lg="15">
<el-row :gutter="20" style="height: 100%">
<el-col :lg="16">
<div class="picbox" @click="goDetail(newsList2[1])"><img :src="fillImgUrl_webSite(newsList2[1]?.picUrl)"/></div>
</el-col>
<el-col :lg="8">
<div class="picbox" @click="goDetail(newsList2[2])" style="height: calc(50% - 10px)"><img :src="fillImgUrl_webSite(newsList2[2]?.picUrl)"/></div>
<div class="picbox" @click="goDetail(newsList2[3])" style="height: calc(50% - 10px);margin-top: 20px"><img :src="fillImgUrl_webSite(newsList2[3]?.picUrl)"/></div>
</el-col>
</el-row>
<el-row :gutter="20" class="mt20">
<el-col :lg="8" v-for="(n,index) in newsList2" :key="index" v-show="index>3">
<div class="picbox" @click="goDetail(n)"><img :src="fillImgUrl_webSite(n.picUrl)"/></div>
</el-col>
</el-row>
</el-col>
</el-row>
<div class="mb60" />
</div>
</div>
</template>
<script setup>
import { ArrowRight, Search } from '@element-plus/icons-vue'
import { onMounted, ref } from 'vue'
import { getNewsListById } from '@/apiPc/webSite'
import { useRouter } from 'vue-router'
const router = useRouter()
const activeName = ref(0)
const total = ref(0)
const list = ref([])
const newsList = ref([])
const newsList2 = ref([])
const query1 = ref({
pageSize: 5,
pageNum: 1,
sortId: '10000008'
})
const query2 = ref({
pageSize: 7,
pageNum: 1,
sortId: '10000009'
})
onMounted(() => {
getList(query1.value)
getList2(query2.value)
})
const getList = (obj) => {
getNewsListById(obj).then(res => {
newsList.value = res.rows
})
}
const getList2 = (obj) => {
getNewsListById(obj).then(res => {
newsList2.value = res.rows
})
}
const goList = (sortId, name) => {
router.push({
path: `/news/list/${sortId}`,
query: {
kindName: name
}
})
}
const goDetail = (n) => {
if (n.isOut == '1') {
window.open(n.jumpUrl)
} else {
window.open(router.resolve({
path: `/news/detail/${n.noteId}`
}).href)
}
}
</script>
<style lang="scss" scoped>
.leftboderTT{
font-size: 20px;}
@media (max-width: 800px) {
[class*=el-col-]{display: block;margin: 0 0 20px}
}
</style>
<template>
<div>
<div class="box">
<div class="box" v-if="language == 0">
<div class="indexTitle">
<h3 class="leftboderTT">要闻</h3>
<a class="more" @click="goList(query1.sortId,'要闻')">MORE</a>
......@@ -107,6 +107,113 @@
<div class="mb60" />
</div>
<div class="box" v-if="language == 1">
<div class="indexTitle">
<h3 class="leftboderTT">Games News</h3>
<a class="more" @click="goList(query1.sortId,'Games News')">MORE</a>
</div>
<el-card>
<el-row class="topNews" :gutter="20">
<el-col :lg="12" :sm="24" :md="12">
<el-carousel indicator-position="none" height="330">
<el-carousel-item v-for="(n,index) in newsList" :key="index">
<div class="imgbox carouselImg" @click="goDetail(n)">
<div class="date">
<div class="day">{{ n.belongTime?.substring(8, 10) }}</div>
<p>{{ n.belongTime?.substring(0, 7).replace(/-/g, '/') }}</p>
</div>
<img :src="fillImgUrl_webSite(n.picUrl)">
<h3 class="esp">{{ n.name }}
</h3>
</div>
</el-carousel-item>
</el-carousel>
</el-col>
<el-col :lg="12" :sm="24" :md="12">
<div class="newsCommon">
<div
v-for="(n,index) in newsList" v-show="index<4" :key="index" class="item"
@click="goDetail(n)"
>
<h3 class="esp">
<span v-if="n.publishType">
<span v-for="(t,index) in n.publishType.split(',')" :key="index" class="jstype">{{ t }}</span>
</span>{{ n.name }}
</h3>
<p class="esp">{{ n.subName }}</p>
</div>
</div>
</el-col>
</el-row>
</el-card>
<div class="indexTitle">
<h3 class="leftboderTT">Official Release</h3>
<a class="more" @click="goList(query2.sortId,'Official Release')">MORE</a>
</div>
<el-row class="newsflex mb20">
<el-col
v-for="(n,index) in newsList2" v-show="index<4" :lg="12" :xs="24" :sm="12"
@click="goDetail(n)"
>
<div class="item">
<div v-if="n.picUrl" class="imgbox">
<img :src="fillImgUrl_webSite(n.picUrl)">
</div>
<div class="info">
<span class="date">{{ n.belongTime }}</span>
<h3 class="esp_2">
{{ n.name }}
</h3>
<p class="esp_2">{{ n.subName }}</p>
</div>
</div>
</el-col>
</el-row>
<!-- <div class="indexTitle">-->
<!-- <h3 class="leftboderTT">官方发布</h3>-->
<!-- <a class="more" @click="goList(query3.sortId,'官方发布')">MORE</a>-->
<!-- </div>-->
<!-- <el-row :gutter="20">-->
<!-- <el-col-->
<!-- v-for="(n,index) in newsList3"-->
<!-- v-show="index<3" :key="n.id" :xs="12" :sm="8"-->
<!-- :lg="8"-->
<!-- >-->
<!-- <div class="activeItem">-->
<!-- <div class="info">-->
<!-- <div class="date">-->
<!-- 2023-12-12-->
<!-- </div>-->
<!-- <h3 class="esp_2" style="height: 50px">{{ n.name }}</h3>-->
<!-- <p class="esp_2" />-->
<!-- <a>查看详情</a>-->
<!-- </div>-->
<!-- </div>-->
<!-- </el-col>-->
<!-- </el-row>-->
<!-- <div class="indexTitle">-->
<!-- <h3 class="leftboderTT">专题报道</h3>-->
<!-- <a class="more" @click="goList(query4.sortId,'专题报道')">MORE</a>-->
<!-- </div>-->
<!-- <el-row :gutter="30" class="newsimgcover">-->
<!-- <el-col v-for="(n,index) in newsList4" v-show="index<3" :lg="8" @click="goDetail(n)">-->
<!-- <div class="item shadow">-->
<!-- <div class="imgbox"><img :src="fillImgUrl_webSite(n.picUrl)"></div>-->
<!-- <h3 class="esp">-->
<!-- <span v-if="n.publishType">-->
<!-- <span v-for="(t,index) in n.publishType.split(',')" :key="index" class="jstype">{{ t }}</span>-->
<!-- </span>-->
<!-- {{ n.name }}</h3>-->
<!-- </div>-->
<!-- </el-col>-->
<!-- </el-row>-->
<div class="mb60" />
</div>
</div>
</template>
<script setup>
......@@ -114,7 +221,8 @@ import { ArrowRight, Search } from '@element-plus/icons-vue'
import { onMounted, ref } from 'vue'
import { getNewsListById } from '@/apiPc/webSite'
import { useRouter } from 'vue-router'
import {useStorage} from "@vueuse/core/index";
const language = useStorage('language', 0)
const router = useRouter()
const activeName = ref(0)
const total = ref(0)
......@@ -126,22 +234,22 @@ const newsList4 = ref([])
const query1 = ref({
pageSize: 5,
pageNum: 1,
sortId:'10000001'
sortId: language.value == 0 ?'10000001':'10000004'
})
const query2 = ref({
pageSize: 4,
pageNum: 1,
sortId:'10000002'
sortId:language.value == 0 ?'10000002':'10000005'
})
const query3 = ref({
pageSize: 6,
pageNum: 1,
sortId:'10000000'
sortId:language.value == 0 ?'10000000':'10000000'
})
const query4 = ref({
pageSize: 3,
pageNum: 1,
sortId:'10000003'
sortId:language.value == 0 ?'10000003':'10000003'
})
onMounted(() => {
......
<template>
<div>
<div class="box">
<div class="indexTitle">
<h3 class="leftboderTT">Games News</h3>
<a class="more" @click="goList(query1.sortId,'Games News')">MORE</a>
</div>
<el-card>
<el-row class="topNews" :gutter="20">
<el-col :lg="12" :sm="24" :md="12">
<el-carousel indicator-position="none" height="330">
<el-carousel-item v-for="(n,index) in newsList" :key="index">
<div class="imgbox carouselImg" @click="goDetail(n)">
<div class="date">
<div class="day">{{ n.belongTime?.substring(8, 10) }}</div>
<p>{{ n.belongTime?.substring(0, 7).replace(/-/g, '/') }}</p>
</div>
<img :src="fillImgUrl_webSite(n.picUrl)">
<h3 class="esp">{{ n.name }}
</h3>
</div>
</el-carousel-item>
</el-carousel>
</el-col>
<el-col :lg="12" :sm="24" :md="12">
<div class="newsCommon">
<div
v-for="(n,index) in newsList" v-show="index<4" :key="index" class="item"
@click="goDetail(n)"
>
<h3 class="esp">
<span v-if="n.publishType">
<span v-for="(t,index) in n.publishType.split(',')" :key="index" class="jstype">{{ t }}</span>
</span>{{ n.name }}
</h3>
<p class="esp">{{ n.subName }}</p>
</div>
</div>
</el-col>
</el-row>
</el-card>
<div class="indexTitle">
<h3 class="leftboderTT">Official Release</h3>
<a class="more" @click="goList(query2.sortId,'Official Release')">MORE</a>
</div>
<el-row class="newsflex mb20">
<el-col
v-for="(n,index) in newsList2" v-show="index<4" :lg="12" :xs="24" :sm="12"
@click="goDetail(n)"
>
<div class="item">
<div v-if="n.picUrl" class="imgbox">
<img :src="fillImgUrl_webSite(n.picUrl)">
</div>
<div class="info">
<span class="date">{{ n.belongTime }}</span>
<h3 class="esp_2">
{{ n.name }}
</h3>
<p class="esp_2">{{ n.subName }}</p>
</div>
</div>
</el-col>
</el-row>
<!-- <div class="indexTitle">-->
<!-- <h3 class="leftboderTT">官方发布</h3>-->
<!-- <a class="more" @click="goList(query3.sortId,'官方发布')">MORE</a>-->
<!-- </div>-->
<!-- <el-row :gutter="20">-->
<!-- <el-col-->
<!-- v-for="(n,index) in newsList3"-->
<!-- v-show="index<3" :key="n.id" :xs="12" :sm="8"-->
<!-- :lg="8"-->
<!-- >-->
<!-- <div class="activeItem">-->
<!-- <div class="info">-->
<!-- <div class="date">-->
<!-- 2023-12-12-->
<!-- </div>-->
<!-- <h3 class="esp_2" style="height: 50px">{{ n.name }}</h3>-->
<!-- <p class="esp_2" />-->
<!-- <a>查看详情</a>-->
<!-- </div>-->
<!-- </div>-->
<!-- </el-col>-->
<!-- </el-row>-->
<!-- <div class="indexTitle">-->
<!-- <h3 class="leftboderTT">专题报道</h3>-->
<!-- <a class="more" @click="goList(query4.sortId,'专题报道')">MORE</a>-->
<!-- </div>-->
<!-- <el-row :gutter="30" class="newsimgcover">-->
<!-- <el-col v-for="(n,index) in newsList4" v-show="index<3" :lg="8" @click="goDetail(n)">-->
<!-- <div class="item shadow">-->
<!-- <div class="imgbox"><img :src="fillImgUrl_webSite(n.picUrl)"></div>-->
<!-- <h3 class="esp">-->
<!-- <span v-if="n.publishType">-->
<!-- <span v-for="(t,index) in n.publishType.split(',')" :key="index" class="jstype">{{ t }}</span>-->
<!-- </span>-->
<!-- {{ n.name }}</h3>-->
<!-- </div>-->
<!-- </el-col>-->
<!-- </el-row>-->
<div class="mb60" />
</div>
</div>
</template>
<script setup>
import { ArrowRight, Search } from '@element-plus/icons-vue'
import { onMounted, ref } from 'vue'
import { getNewsListById } from '@/apiPc/webSite'
import { useRouter } from 'vue-router'
const router = useRouter()
const activeName = ref(0)
const total = ref(0)
const list = ref([])
const newsList = ref([])
const newsList2 = ref([])
const newsList3 = ref([])
const newsList4 = ref([])
const query1 = ref({
pageSize: 5,
pageNum: 1,
sortId:'10000004'
})
const query2 = ref({
pageSize: 4,
pageNum: 1,
sortId:'10000005'
})
const query3 = ref({
pageSize: 6,
pageNum: 1,
sortId:'10000000'
})
const query4 = ref({
pageSize: 3,
pageNum: 1,
sortId:'10000003'
})
onMounted(() => {
getList(query1.value)
getList2(query2.value)
// getList3(query3.value)
// getList4(query4.value)
})
const getList = (obj) => {
getNewsListById(obj).then(res => {
newsList.value = res.rows
})
}
const getList2 = (obj) => {
getNewsListById(obj).then(res => {
newsList2.value = res.rows
})
}
const getList3 = (obj) => {
getNewsListById(obj).then(res => {
newsList3.value = res.rows
})
}
const getList4 = (obj) => {
getNewsListById(obj).then(res => {
newsList4.value = res.rows
})
}
const goList = (sortId,name) => {
router.push({
path: `/news/list/${sortId}`,
query:{
kindName:name
}
})
}
const goDetail = (n) => {
if (n.isOut == '1') {
window.open(n.jumpUrl)
} else {
window.open(router.resolve({
path: `/news/detail/${n.noteId}`
}).href)
}
}
</script>
<style lang="scss" scoped>
.leftboderTT{
font-size: 20px;}
.flexBody {
display: flex;
align-items: center;
.el-form-item {
margin-bottom: 0
}
}
.infoPart {
padding: 20px;
flex: 1;
& > h3 {
font-size: 24px;
color: var(--el-color-primary);
}
}
.firstItem {
background: #FAFAFA;
}
.searchPark {
background: #F6F6F6;
}
.newsBlock {
.item {
display: flex;
position: relative;
width: 100%;
cursor: pointer;
border-bottom: 1px dashed #EEEEEE;
padding: 30px 0;
.date {
width: 60px;
height: 60px;
text-align: center;
background: #FAFAFA;
margin: 0 10px;
.day {
color: var(--el-color-primary);
transform: scaleX(0.7);
font-weight: bold;
font-size: 24px;
}
p {
font-size: 14px;
margin: 0;
transform: scaleX(0.7);
font-weight: bold;
color: #7B7F83;
}
}
.imgbox {width: 280px;margin-right: 10px; height: 157.5px;overflow: hidden;
flex: 0 0 auto;
img{width: 100%;height: 100%;object-fit: cover;object-position: top;}
}
.item-body {
flex: 1 1 auto;
label {
background: linear-gradient(-90deg, #FCD258 0%, #D3AA5A 0%, #E4C889 99%);
border-radius: 12px 12px 12px 0px;
padding: 2px 10px;
color: #FFFFFF;
margin: 10px 10px 0;
display: inline-block;
font-size: 14px;
}
h3 {
padding: 0 10px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
font-size: 18px;
color: #000000;
margin: 0
}
p {
padding: 0 10px;
text-align: justify;
line-height: 24px;
height: 48px;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
text-overflow: ellipsis;
color: #7B7F83;
font-size: 14px;
}
}
.go {
background: url("@/assets/v1/about/more.png") no-repeat center;
background-size: contain;
width: 22px;
height: 8px;
display: block;
filter: grayscale(1);
margin: 0 10px;
}
}
.item:hover {
background: #F8F4FF;
.date {
background: var(--el-color-primary);
.day {
color: #fff;
}
p {
color: #fff;
}
}
.item-body {
h3 {
color: var(--el-color-primary);
}
}
a {
filter: none
}
}
}
.topBanner {height:500px;
:deep(.el-carousel__container) {
height: 100%;
}
}
.forWei {
display: none;
}
@media (max-width: 800px) {
.infoPart{padding: 0;}
.topBannerbox {
background: #fff;
padding: 1px;
.el-carousel {
--el-carousel-indicator-height: 4px;
--el-carousel-indicator-width: 4px;
}
}
.topBanner {
height: 160px;
border-radius: 6px;
margin: 10px;
h3{text-align: left;font-size: 15px;padding: 30px 15px 20px;
}
:deep(.el-carousel__indicators--horizontal){left: auto;right: 0;
bottom: 12px;
}
:deep(.el-carousel__button){border-radius: 5px;}
:deep(.el-carousel__indicator.is-active button){width: 12px;}
h3 {
font-size: 14px;
}
}
}
</style>
......@@ -3,7 +3,7 @@
<div class="box">
<el-card class="mt20 mb20" :body-style="{'padding':'0'}">
<div class="lineHead">
<h3>全部{{ kindName }}</h3>
<h3>{{ language==0?'全部':'All' }} {{ kindName }}</h3>
</div>
<div class="infoPart">
<div class="newsBlock">
......@@ -18,12 +18,12 @@
<div class="item-body">
<h3 v-html="n.name" />
<p v-html="n.subName"/>
<a class="go">查看详情
<a class="go">{{ language==0?'查看详情':'Detail' }}
<el-icon class="rotate90_180"><sort-down/></el-icon>
</a>
</div>
</div>
<el-empty v-if="newsList.length == 0" description="暂无数据" />
<el-empty v-if="newsList.length == 0" />
<div v-if="total>9" class="pc-page-box">
<!-- <el-pagination @current-change="getList" layout="prev, pager, next" :total="total" />-->
......@@ -44,7 +44,8 @@ import { ArrowRight, Search } from '@element-plus/icons-vue'
import { onMounted, ref } from 'vue'
import { getNewsListById } from '@/apiPc/webSite'
import { useRoute, useRouter } from 'vue-router'
// import Pagination from '@/components/Pagination'
import {useStorage} from "@vueuse/core/index";
const language = useStorage('language', 0)
const route = useRoute()
const router = useRouter()
const kindName = ref('')
......
<template>
<div>
<div class="box">
<el-card class="mt20 mb20" :body-style="{'padding':'0'}">
<div class="lineHead">
<h3>All {{ kindName }}</h3>
</div>
<div class="infoPart">
<div class="newsBlock">
<div v-for="(n,i) in newsList" :key="i" class="item" @click="goDetail(n)">
<div class="date">
<div class="day">{{ n.belongTime?.substring(8, 10) }}</div>
<p>{{ n.belongTime?.substring(0, 7).replace(/-/g, '/') }}</p>
</div>
<div v-if="n.picUrl" class="imgbox">
<img :src="fillImgUrl_webSite(n.picUrl)">
</div>
<div class="item-body">
<h3 v-html="n.name" />
<p v-html="n.subName" />
<a class="go">Detail
<el-icon class="rotate90_180"><sort-down/></el-icon>
</a>
</div>
</div>
<el-empty v-if="newsList.length == 0" description="no data" />
<div v-if="total>9" class="pc-page-box">
<!-- <el-pagination @current-change="getList" layout="prev, pager, next" :total="total" />-->
<PaginationPc
v-model:page="query.pageNum" v-model:limit="query.pageSize" :total="total"
@pagination="getList"
/>
</div>
</div>
</div>
</el-card>
</div>
</div>
</template>
<script setup>
import { ArrowRight, Search } from '@element-plus/icons-vue'
import { onMounted, ref } from 'vue'
import { getNewsListById } from '@/apiPc/webSite'
import { useRoute, useRouter } from 'vue-router'
// import Pagination from '@/components/Pagination'
const route = useRoute()
const router = useRouter()
const kindName = ref('')
const total = ref(0)
const list = ref([])
const newsList = ref([])
const query = ref({
pageSize: 10,
pageNum: 1
})
onMounted(() => {
console.log(route)
query.value.sortId = route.params.id
kindName.value = route.query.kindName
getList()
})
const getList = () => {
console.log(query.value)
getNewsListById(query.value).then(res => {
newsList.value = res.rows
total.value = res.total
})
}
const goDetail = (n) => {
if (n.isOut == '1') {
window.open(n.jumpUrl)
} else {
window.open(router.resolve({
path: `/news/detail/${n.noteId}`
}).href)
// router.push({
// path: `/news/detail/${n.noteId}`
// })
}
}
</script>
<style lang="scss" scoped>
.flexBody {
display: flex;
align-items: center;
.el-form-item {
margin-bottom: 0
}
}
.infoPart {
padding: 20px;
flex: 1;
& > h3 {
font-size: 24px;
color: var(--el-color-primary);
}
}
.firstItem {
background: #FAFAFA;
}
.searchPark {
background: #F6F6F6;
}
.topBanner {height:500px;
:deep(.el-carousel__container) {
height: 100%;
}
}
.forWei {
display: none;
}
@media (max-width: 800px) {
//.infoPart{padding: 0;}
.topBannerbox {
background: #fff;
padding: 1px;
.el-carousel {
--el-carousel-indicator-height: 4px;
--el-carousel-indicator-width: 4px;
}
}
.topBanner {
height: 160px;
border-radius: 6px;
margin: 10px;
h3{text-align: left;font-size: 15px;padding: 30px 15px 20px;
}
:deep(.el-carousel__indicators--horizontal){left: auto;right: 0;
bottom: 12px;
}
:deep(.el-carousel__button){border-radius: 5px;}
:deep(.el-carousel__indicator.is-active button){width: 12px;}
h3 {
font-size: 14px;
}
}
.newsBlock{
.item{flex-direction: column;margin: 0 0 40px;padding: 0;
.date{position: absolute;top: 20px}
}
.imgbox{width: 100%;height: auto;margin: 0 0 20px}
}
}
</style>
......@@ -4,7 +4,8 @@
<el-card class="mt20 mb20" :body-style="{'padding':'0'}">
<div class="lineHead">
<h3>全部通知公告</h3>
<h3 v-if="language==0">全部通知公告</h3>
<h3 v-else> NOTICE </h3>
</div>
<!-- <el-tabs v-model="activeName" @tab-change="changeTab" @tab-click="clickTab">-->
<!-- <el-tab-pane v-for="(tab,index) in list" :key="index" :label="tab.name" :name="index" />-->
......@@ -17,9 +18,9 @@
<p>{{ n.belongTime }}</p>
</div>
<div class="item-body">
<h3 class="esp_2"><span class="istop">置顶</span>{{n.name}}</h3>
<h3 class="esp_2"><span class="istop">{{ language==0?'置顶':'TOP' }}</span>{{n.name}}</h3>
</div>
<a class="go">查看详情</a>
<a class="go">{{ language==0?'查看详情':'DETAIL' }}</a>
</div>
</el-col>
<!-- <el-col :lg="8" :xs="24" class="forPc">-->
......@@ -72,7 +73,7 @@
<div v-if="total>8" class="pc-page-box">
<PaginationPc v-model:page="query.pageNum" v-model:limit="query.pageSize" :total="total" @pagination="getList" />
</div>
<el-empty v-if="newsList.length == 0" description="暂无数据" />
<el-empty v-if="newsList.length == 0" />
</div>
</el-card>
......@@ -81,9 +82,11 @@
</template>
<script setup>
import { ArrowRight, Search } from '@element-plus/icons-vue'
const language = useStorage('language', 0)
import { onMounted, ref } from 'vue'
import { getNewsListById, getNoticeSorts } from '@/apiPc/webSite'
import { useRouter } from 'vue-router'
import {useStorage} from "@vueuse/core/index";
const router = useRouter()
const activeName = ref(0)
const list = ref([])
......@@ -100,6 +103,9 @@ onMounted(() => {
})
const getList = () => {
if(language.value==1){
query.value.sortId=20000001
}
getNewsListById(query.value).then(res => {
newsList.value = res.rows
total.value = res.total
......
<template>
<div>
<div class="box">
<el-card class="mt20 mb20" :body-style="{'padding':'0'}">
<div class="lineHead">
<h3> NOTICE </h3>
</div>
<!-- <el-tabs v-model="activeName" @tab-change="changeTab" @tab-click="clickTab">-->
<!-- <el-tab-pane v-for="(tab,index) in list" :key="index" :label="tab.name" :name="index" />-->
<!-- </el-tabs>-->
<div class="pd20">
<el-row class="mb20">
<el-col :lg="24" :xs="24">
<div v-for="(n,index) in newsList?.slice(0,1)" v-show="index<1" :key="index" class="firstItem" @click="goDetail(n)">
<div class="date">
<p>{{ n.belongTime }}</p>
</div>
<div class="item-body">
<h3 class="esp_2"><span class="istop">TOP</span>{{n.name}}</h3>
</div>
<a class="go">DETAIL ⇀</a>
</div>
</el-col>
<!-- <el-col :lg="8" :xs="24" class="forPc">-->
<!-- <div class="searchPark">-->
<!-- <h3>通知搜索</h3>-->
<!-- <el-form>-->
<!-- <el-form-item>-->
<!-- <div class="flexformItem">-->
<!-- <el-date-picker-->
<!-- v-model="query.year"-->
<!-- class="mr10"-->
<!-- type="year" value-format="YYYY"-->
<!-- placeholder="选择年份" @change="getList"-->
<!-- />-->
<!-- <el-date-picker-->
<!-- v-model="query.month"-->
<!-- format="MM" value-format="MM"-->
<!-- type="month"-->
<!-- placeholder="选择月份" @change="getList"-->
<!-- />-->
<!-- </div>-->
<!-- </el-form-item>-->
<!-- <el-form-item>-->
<!-- <el-input-->
<!-- v-model="query.name"-->
<!-- placeholder="输入关键字"-->
<!-- :suffix-icon="Search" @change="getList"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- </el-form>-->
<!-- </div>-->
<!-- </el-col>-->
</el-row>
<div class="newsLine">
<div v-for="(n,index) in newsList" v-show="index>0" :key="index" class="item" @click=" goDetail(n)">
<div class="date">
<div class="day">{{ n.belongTime?.substring(8, 10) }}</div>
<p>{{ n.belongTime?.substring(0, 7).replace(/-/g, '/') }}</p>
</div>
<div class="item-body">
<h3 v-html="n.name" />
</div>
<a class="go" />
</div>
</div>
<div v-if="total>8" class="pc-page-box">
<PaginationPc v-model:page="query.pageNum" v-model:limit="query.pageSize" :total="total" @pagination="getList" />
</div>
<el-empty v-if="newsList.length == 0" description="暂无数据" />
</div>
</el-card>
</div>
</div>
</template>
<script setup>
import { ArrowRight, Search } from '@element-plus/icons-vue'
import { onMounted, ref } from 'vue'
import { getNewsListById, getNoticeSorts } from '@/apiPc/webSite'
import { useRouter } from 'vue-router'
const router = useRouter()
const activeName = ref(0)
const list = ref([])
const newsList = ref([])
const nowTab = ref({})
const total = ref(0)
const query = ref({
pageSize: 10,
pageNum: 1,
sortId:20000001
})
onMounted(() => {
getList()
})
const getList = () => {
getNewsListById(query.value).then(res => {
newsList.value = res.rows
total.value = res.total
if (query.value.name) {
const pattern = new RegExp(query.value.name, 'gi')
for (var n of newsList.value) {
n.name = n.name.replace(pattern, `<span class="highlight">$&</span>`)
n.subName = n.name.replace(pattern, `<span class="highlight">$&</span>`)
}
}
})
}
const clickTab = (pane, ev) => {
console.log(pane, ev)
}
const goDetail = (n) => {
if (n.isOut == '1') {
window.open(n.jumpUrl)
} else {
router.push({
path: `/news/detail/${n.noteId}`
})
}
}
</script>
<style lang="scss" scoped>
.infoPart{padding: 20px; flex: 1;
&>h3{
font-size: 24px;
color: var(--el-color-primary);}
}
.firstItem{cursor: pointer;
background: #F8F4FF;height: 100%;padding: 10px 20px;
.date{font-weight: bold;transform: scaleX(0.7);transform-origin: left;
font-size: 18px;
color: var(--el-color-primary);}
h3{margin: 10px 0;
font-size: 22px;}
.go{color: var(--el-color-primary);
font-size: 14px;padding: 0 0 5px;}
}
.newsLine{
.item{display: flex;position: relative;width: 100%;height: 90px;
align-items: center;cursor: pointer;border-bottom: 1px dashed #EEEEEE;
.date{width: 60px;height: 60px;text-align: center;background: #FAFAFA;margin: 0 10px;
.day{color: var(--el-color-primary);transform: scaleX(0.7);font-weight: bold;font-size: 24px;}
p{font-size: 14px;margin: 0;transform: scaleX(0.7);font-weight: bold;color: #7B7F83;}
}
.item-body{width: 60%;
h3{padding: 0 10px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;font-size: 18px;color: #000000;}
}
.go{background: url("@/assets/v1/about/go.png") no-repeat center;background-size: contain;
position: absolute;width: 30px;height: 30px;right: 10px;
filter:grayscale(1);
}
}
.item:hover{background: #F8F4FF;
.date{
background: var(--el-color-primary);
.day{color: #fff;}
p{color: #fff;}
}
.item-body{
h3{color: var(--el-color-primary);}
}
}
}
@media (max-width: 500px) {
.box{width: 100%}
.forWei {
display: block;
}
.forPc{display: none}
:deep(.el-tabs__nav-scroll){overflow: auto;}
:deep(.el-card__body){padding: 10px;}
.flexBody{display: block;background: transparent;}
.infoPart{background: #fff;padding: 10px;margin:0 15px}
.firstItem{padding: 10px 20px;
.date{
font-size: 14px;}
h3{margin: 10px 0;
font-size: 14px;}
.go{font-size: 12px;}
}
.newsLine{
.item{height: 50px;
.date{height: 34px;width: 44px;margin: 0;
.day{font-size: 16px;}
p{font-size: 12px;}
}
.item-body{width: 80%;
h3{font-size: 14px;}
}
}
.go{display: none;}
}
}
</style>
......@@ -39,10 +39,10 @@
<el-form-item :label="language==1?'Age group':'年龄组'">
<el-input v-model="wdsfData.ageGroup" disabled/>
</el-form-item>
<el-form-item :label="language==1?'舞种':'Division'">
<el-form-item :label="language==0?'舞种':'Division'">
<el-input v-model="wdsfData.division" disabled/>
</el-form-item>
<el-form-item :label="language==1?'状态':'Status'">
<el-form-item :label="language==0?'状态':'Status'">
<el-input v-model="wdsfData.status" disabled/>
</el-form-item>
<div class="h30"></div>
......@@ -63,15 +63,18 @@
<el-radio value="1">{{ language == 0 ? '男' : 'male' }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item :label="language==0?'证件号':'Passport number'" required>
<el-input v-model="wdsfData.passportNumber"/>
</el-form-item>
<el-form-item :label="language==0?'有效证件':'Passport File'" required>
<file-upload v-model="wdsfData.passportUrl" :limit="1" :is-show-tip="false" :button-text="'Upload'"/>
<el-form-item :label="language==0?'有效证件':'Valid Certificates Scanning Copy'" required>
<file-upload v-model="wdsfData.passportUrl" :limit="1" :is-show-tip="false"
:button-text="language==0?'上传':'Upload'"/>
<div class="tip">
<span>用途</span>
<span v-if="language==0">请上传护照副本,用于认证 </span>
<span v-else>Please upload a passport copy for authentication</span>
</div>
</el-form-item>
<el-form-item :label="language==0?'证件号':'Passport number'" required>
<el-input v-model="wdsfData.passportNumber"/>
</el-form-item>
<el-form-item :label="language==0?'出生日期':'Birthday'">
<el-date-picker
v-model="wdsfData.birthday"
......@@ -218,9 +221,9 @@ function sendsmsMsg() {
function checkCard() {
if (!form.value.card) {
if (language.value == 0) {
ElMessage.warning('请填写WDSF卡号')
ElMessage.warning('WDSF会员号错误')
} else {
ElMessage.warning('Please fill in your WDSF code')
ElMessage.warning('WDSF MIN is Error')
}
return
}
......@@ -252,9 +255,9 @@ function codeSuccess(msg) {
if (wdsfData.value.wdsfFlag == '0') {
isCodeTrue.value = 0
if (language.value == 0) {
ElMessage.warning('WDSF号错误')
ElMessage.warning('WDSF会员号错误')
} else {
ElMessage.warning('WDSF ID is Error')
ElMessage.warning('WDSF MIN is Error')
}
}
}).catch(err => {
......@@ -289,16 +292,12 @@ function goBack() {
}
function next() {
// if (!wdsfData.value.birthday) {
// ElMessage.warning('Please fill in your birthday')
// return
// }
if (!wdsfData.value.passportNumber) {
ElMessage.warning('Please fill in your passport number')
ElMessage.warning(language.value == 0 ?'请填写护照号':'Please fill in your passport number')
return
}
if (!wdsfData.value.passportUrl) {
ElMessage.warning('Please upload your passport file')
ElMessage.warning(language.value == 0 ? '请上传护照文件' :'Please upload your passport file')
return
}
if (wdsfData.value.personFlag == '0') {
......
......@@ -112,10 +112,9 @@ function verifyCode() {
function codeSuccess(msg) {
console.log('验证通过' + msg);
isShow.value = false
isCodeTrue.value = true
counting.value = true
getCaptchaSms({account: form.value.account}).then(res => {
counting.value = true
isCodeTrue.value = true
})
}
......@@ -144,6 +143,11 @@ const next = () => {
return
}
if (!isCodeTrue.value) {
if (language.value == 0) {
ElMessage.warning('请发送验证码')
} else {
ElMessage.warning('Please send the verification code')
}
return
}
checkRegisterCode(form.value).then(res => {
......
......@@ -25,12 +25,16 @@
<el-form class="d-form" size="large" :model="form" ref="registerRef"
:rules="registerRules" label-width="120" :label-position="language==0?'left':'top'"
style="max-width: 500px;margin: auto">
<el-form-item :label="language==0?'所属国家/地区':'Country'" required>
<el-form-item label="是否国家队" v-if="language==0">
</el-form-item>
<el-form-item :label="language==0?'代表国家/地区':'Representing'" required prop="countryId">
<el-select filterable v-model="form.countryId">
<el-option v-for="item in countryList" :key="item.id" :label="language==0?item.name:item.enName" :value="item.id"/>
<!-- <el-option v-for="item in countryList" :key="item.id" :label="language==0?item.name:item.enName" :value="item.id"/>-->
<el-option v-for="item in countryList" :key="item.id" :label="item.eoc||item.enName" :value="item.id"/>
</el-select>
</el-form-item>
<el-form-item :label="language==0?'详细地址':'Address'" required prop="address">
<el-form-item :label="language==0?'详细地址':'Address'" prop="address">
<el-cascader v-if="form.countryId == 240"
v-model="regionArr"
style="width: 100%;"
......@@ -39,24 +43,24 @@
/>
<el-input type="textarea" v-model="form.address" class="mt10"/>
</el-form-item>
<el-form-item :label="language==0?'机构名称':'Institution Name'" required prop="teamName">
<!-- <el-form-item :label="language==0?'团体类型':'Group type'" prop="type" required>-->
<!-- <el-select v-model="form.type" :placeholder="language==0?'请选择团体类型':''" style="width: 100%;">-->
<!-- <el-option :label="language==0?'普通院校':'School'" value="0" />-->
<!-- <el-option :label="language==0?'专业舞蹈学校':'Professional dance school'" value="1" />-->
<!-- <el-option :label="language==0?'培训机构/俱乐部':'Company/Club'" value="2" />-->
<!-- <el-option :label="language==0?'地方协会':'Local Association'" value="3" />-->
<!-- <el-option :label="language==0?'国家协会':'National Association'" value="4" />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<el-form-item :label="language==0?'团体名称':'Team Name'" required prop="teamName">
<el-input type="text" v-model="form.teamName" :placeholder="language==0?'请输入内容':''"/>
</el-form-item>
<el-form-item :label="language==0?'专业/业余':'Professional/Amateur'" required prop="majorFlag">
<el-select v-model="form.majorFlag">
<el-option :label="language==0?'专业':'Professional'" value="1" />
<el-option :label="language==0?'业余':'Amateur'" value="0" />
</el-select>
</el-form-item>
<el-form-item :label="language==0?'团体类型':'Group type'" prop="type" required>
<el-select v-model="form.type" :placeholder="language==0?'请选择团体类型':''" style="width: 100%;">
<el-option :label="language==0?'普通院校':'School'" value="0" />
<el-option :label="language==0?'专业舞蹈学校':'Professional dance school'" value="1" />
<el-option :label="language==0?'培训机构/俱乐部':'Company/Club'" value="2" />
<el-option :label="language==0?'地方协会':'Local Association'" value="3" />
<el-option :label="language==0?'国家协会':'National Association'" value="4" />
</el-select>
</el-form-item>
<!-- <el-form-item :label="language==0?'专业/业余':'Professional/Amateur'" required prop="majorFlag">-->
<!-- <el-select v-model="form.majorFlag">-->
<!-- <el-option :label="language==0?'专业':'Professional'" value="1" />-->
<!-- <el-option :label="language==0?'业余':'Amateur'" value="0" />-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<el-form-item :label="language==0?'联系人姓名':'Contact Name'" required prop="contactName">
<el-input type="text" v-model="form.contactName" :placeholder="language==0?'请输入内容':''"/>
</el-form-item>
......@@ -66,7 +70,7 @@
<el-form-item :label="language==0?'联系人邮箱':'Contact Email'" required prop="contactEmail">
<el-input v-model="form.contactEmail" type="email" :placeholder="language==0?'请输入内容':''"/>
</el-form-item>
<el-form-item prop="photo" required :label="language==0?'机构LOGO':'Organizational photos'">
<el-form-item prop="photo" :label="language==0?'机构LOGO':'Organizational photos'">
<ImageUpload2
v-model="form.photo" :crop-height="200" :crop-width="200" :limit="1"
:is-show-tip="false"
......@@ -137,14 +141,14 @@ const registerRules = ref(
{required: true, trigger: 'blur', message: '请输入您的密码'},
{min: 6, max: 16, message: '用户密码长度必须介于 6 和 16 之间', trigger: 'blur'}
],
confirmPassword: [{required: true, trigger: 'blur', message: '请再次输入您的密码'},],
countryId: [{required: true, trigger: 'blur', message: '请选择所属国家/地区'},],
address: [{required: true, trigger: 'blur', message: '请输入地址'},],
teamName: [{required: true, trigger: 'blur', message: '请输入'},],
contactName: [{required: true, trigger: 'blur', message: '请输入'},],
contactTel: [{required: true, trigger: 'blur', message: '请输入'},],
contactEmail: [{required: true, trigger: 'blur', message: '请输入'},],
photo: [{required: true, trigger: 'blur', message: '请上传'},],
confirmPassword: [{required: true, trigger: 'blur'},],
countryId: [{required: true, trigger: 'blur'},],
// address: [{required: true, trigger: 'blur', message: '请输入地址'},],
teamName: [{required: true, trigger: 'blur'},],
contactName: [{required: true, trigger: 'blur'},],
contactTel: [{required: true, trigger: 'blur'},],
contactEmail: [{required: true, trigger: 'blur'},],
// photo: [{required: true, trigger: 'blur', message: '请上传'},],
})
const vconfirmPassword = () => {
if (form.value.password !== form.value.confirmPassword) {
......@@ -178,11 +182,19 @@ const goStep3 = () => {
ElMessage.warning(language.value == 0?'请勾选接受':'Please check the acceptance')
return
}
if (!form.value.password) {
ElMessage.warning(language.value == 0?'请输入密码':'Please enter password')
return
}
if (!form.value.password) {
ElMessage.warning(language.value == 0?'请输入密码':'Please enter password')
return
}
loading.value = true
delete form.value.confirmPassword
form.value.regionId = regionArr.value.pop()
form.value.username= props.accont
console.log('pass')
match.pcRegisterTeam(form.value).then(res => {
setToken(res.data.token)
loading.value = false
......@@ -200,6 +212,9 @@ const showAgreeMent = () => {
}
onMounted(() => {
console.log(props)
if(props.accont.indexOf('@')>-1){
form.value.contactEmail=props.accont
}
})
</script>
......
......@@ -41,19 +41,19 @@
<table class="table table-striped">
<thead>
<tr class="bg-lineg">
<td>{{ language==0?'名次':'RANK' }}</td>
<td>{{ language==0?'组合':'COUPLE' }}</td>
<td width="100">{{ language==0?'国家':'COUNTRY' }}</td>
<td width="120" class="text-center">START #</td>
<td width="120" class="text-center" v-if="index>0">BASE</td>
<td width="120" class="text-center" v-if="index>0">POINTS</td>
<td class="text-center">{{ 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>
</thead>
<tbody>
<tr v-for="(l,kndex) in m.rows">
<td>{{ l.RANK }}</td>
<td>{{ l.COUPLE}}</td>
<td>{{ l.COUNTRY }}</td>
<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>
......@@ -176,5 +176,5 @@ h3{background: #F5F0FF;margin: 0;padding: 10px 0;
}
}
}
.w15{width: 15%;}
</style>
......
<template>
<div>
<div class="panel-box">
<h4 class="tran-h4">报名须知</h4>
<div class="pd20">
<el-form-item label="附件下载:">
<el-link :href="fillImgUrl_train(activity.signNoticeAttachment?.url)" target="_blank" type="primary">《报名须知》</el-link>
</el-form-item>
<el-form-item>
<el-checkbox v-model="checked" label="我确认已经仔细阅读报名须知" />
</el-form-item>
</div>
</div>
<div class="panel-footer text-center">
<el-button :disabled="!checked" type="primary" round @click="next">阅读并同意</el-button>
</div>
</div>
</template>
<script setup>
import { ref } from 'vue'
const emit = defineEmits(['next'])
defineProps({
activity: {
type: Object,
default: () => {}
}
})
const checked = ref(false)
function next() {
if (checked.value) {
emit('next')
}
}
</script>
<style scoped lang="scss">
.panel-box{
border:1px solid #F5766A;
}
</style>
<template>
<div>
<div class="panel-box">
<h3 class="train-h3">个人信息</h3>
<div class="panel-body">
<el-form
ref="ruleFormRef"
label-width="100"
class="signForm"
:model="form"
style="width: 100%;"
>
<el-row>
<el-col :span="8" :offset="2">
<el-form-item label="&nbsp;" prop="photo" required>
<image-upload
v-model="form.photo"
disabled
class="threeFour"
:limit="1"
/>
</el-form-item>
</el-col>
<el-col :span="10">
<el-form-item label="会员编号" prop="perCode" required>
<el-input
v-model="form.perCode"
readonly
placeholder="请输入会员编号"
/>
</el-form-item>
<el-form-item label="有效期" prop="validityDate" required>
<el-input
v-model="form.validityDate"
readonly
placeholder="请输入有效期"
/>
</el-form-item>
<el-form-item label="姓名" prop="name" required>
<el-input v-model="form.name" placeholder="请输入姓名" readonly />
</el-form-item>
<el-form-item label="性别" prop="sex" required>
<el-radio-group v-model="form.sex" disabled>
<el-radio value="0" size="large"></el-radio>
<el-radio value="1" size="large"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="证件类型" prop="idcType" required>
<el-select
v-model="form.idcType"
disabled
style="width: 100%;"
placeholder="请选择证件类型"
>
<el-option
v-for="item in certificates"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="证件号码" prop="idcCode" required>
<el-input
v-model="form.idcCode"
readonly
placeholder="请输入证件号码"
/>
</el-form-item>
<el-form-item label="出生日期" prop="birth" required>
<el-date-picker
v-model="form.birth"
readonly
type="date"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
placeholder="请选择出生日期"
style="width: 100%;"
/>
</el-form-item>
<el-form-item label="联系方式" prop="phone" required>
<el-input v-model="form.phone" placeholder="请输入联系方式" readonly />
</el-form-item>
<el-form-item label="所在地区" prop="cityName" required>
<el-input v-model="form.cityName" placeholder="请输入所在地区" readonly />
</el-form-item>
<el-form-item label="详细地址" prop="address" required>
<el-input v-model="form.address" placeholder="请输入详细地址" readonly />
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
</div>
<div class="panel-footer text-center">
<el-button class="back" type="" round @click="prev">上一步</el-button>
<el-button type="primary" round @click="next">下一步</el-button>
</div>
</div>
</template>
<script setup>
import { computed, ref } from 'vue'
const emit = defineEmits(['prev', 'next'])
const props = defineProps({
personal: {
type: Object,
default: () => {}
}
})
const form = computed(() => props.personal)
const certificates = ref([
{
value: '0',
label: '居民身份证'
},
{
value: '1',
label: '护照'
},
{
value: '2',
label: '其他'
}
])
function prev() {
emit('prev')
}
function next() {
emit('next')
}
</script>
<style scope lang="scss">
.panel-box{
border:1px solid #F5766A;
padding:10px 20px;
}
.train-h3{
font-size: 16px;
font-weight: 600;
color: var(--el-color-primary);
padding-left: 20px;
border-left: 3px solid var(--el-color-primary) ;
}
.back{
border:1px solid var(--el-color-primary) ;
color:var(--el-color-primary)
}
.app-container {
padding: 0;
background: #f5f7f9;
}
.panel-footer .el-button--success {
background: linear-gradient(270deg, #39dba7, #38ef7d);
border: none;
padding: 0 40px;
font-size: 16px;
}
.signForm {
.el-form-item__label {
color: #4c5359;
}
}
.tip {
font-size: 13px;
color: #999;
margin: 10px 0;
i {
color: red;
margin: 0 4px 0 0;
}
}
.threeFour {
width: 100%;
}
:deep(.el-upload--picture-card) {
width: 120px;
height: 160px;
}
:deep(.el-upload-list--picture-card .el-upload-list__item) {
width: 120px;
height: 160px;
}
.red {
color: #f56c6c;
}
</style>
<template>
<div>
<div class="panel-box">
<h3 class="train-h3">培训信息</h3>
<div class="panel-body">
<el-form
ref="formRef"
label-width="120px"
class="signForm"
:model="form"
:rules="rules"
style="width: 100%;"
>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="所在单位名称" prop="unitName">
<el-input v-model="form.unitName" placeholder="请输入所在单位名称" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="现任职务" prop="unitRole">
<el-input v-model="form.unitRole" placeholder="请输入现任职务" />
</el-form-item>
</el-col>
<el-col v-if="activity.invoiceFlag=='1'" :span="12">
<el-form-item label="是否需要发票" prop="invoiceFlag" required>
<el-radio-group v-model="form.invoiceFlag">
<el-radio value="1" size="large"></el-radio>
<el-radio value="0" size="large"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col v-if="activity.invoiceFlag=='1'" :span="12">
<el-form-item v-if="form.invoiceFlag=='1'" label="发票形式" prop="invoiceType" required>
<el-radio-group v-model="form.invoiceType">
<el-radio v-if="activity.invoiceType.indexOf('0')>-1" value="0" size="large">电子票</el-radio>
<el-radio v-if="activity.invoiceType.indexOf('1')>-1" value="1" size="large">纸质专票</el-radio>
<el-radio v-if="activity.invoiceType.indexOf('2')>-1" value="2" size="large">纸质普票</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col>
<el-form-item v-if="activity.invoiceFlag=='1'" label="开票信息" prop="invoiceInfo">
<el-input v-model="form.invoiceInfo" placeholder="请输入开票信息" />
</el-form-item>
</el-col>
<el-col v-for="c in customInfo" :key="c.id" :span="12">
<el-form-item :label="c.name">
<el-input v-if="c.type=='1'" v-model="form.customInfoObj[c.id]" :placeholder="`请输入${c.name}`" />
<image-upload v-if="c.type=='2'" v-model="form.customInfoObj[c.id]" :limit="1" />
<file-upload v-if="c.type=='3'" v-model="form.customInfoObj[c.id]" :limit="1" />
<el-select v-if="c.type=='4'" v-model="form.customInfoObj[c.id]">
<el-option v-for="o in c.options" :key="o.id" :label="o.name" :value="o.id" />
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
</div>
<div class="panel-footer text-center">
<el-button class="back" type="" round @click="prev">上一步</el-button>
<el-button type="primary" round @click="next">下一步</el-button>
</div>
</div>
</template>
<script setup>
import { reactive, watch, computed } from 'vue'
import { getCurrentInstance, onMounted } from '@vue/runtime-core'
import * as train from '@/apiPc/train'
import { toRefs } from '@vueuse/shared'
import { useRoute } from 'vue-router'
import _ from 'lodash'
import ImageUpload from '@/components/ImageUpload'
import FileUpload from '@/components/FileUpload'
const emit = defineEmits(['prev', 'next'])
const { proxy } = getCurrentInstance()
const route = useRoute()
const props = defineProps({
activity: {
type: Object,
default: () => {}
}
})
const customInfo = computed(() => {
if (props.activity.customInfo) {
return JSON.parse(props.activity.customInfo).info
} else {
return []
}
})
const data = reactive({
form: {
invoiceFlag: '1',
customInfoObj: {}
},
rules: {
unitName: { required: true, message: '所在单位名称不能为空', trigger: 'blur' },
unitRole: { required: true, message: '现任职务不能为空', trigger: 'blur' },
invoiceInfo: { required: true, message: '开票信息不能为空', trigger: 'blur' },
invoiceType: { required: true, message: '发票类型不能为空', trigger: 'change' }
}
})
const { form, rules } = toRefs(data)
watch(() => props.activity.invoiceFlag, (val) => {
if (val == '1') {
if (!form.value.invoiceType) {
form.value.invoiceType = _.orderBy(props.activity.invoiceType.split(','))[0]
}
}
}, { immediate: true })
onMounted(() => {
train.getTrainPersonalInfo(route.params.id).then((res) => {
if (res.data) {
form.value = res.data
if (res.data.customInfo) {
form.value.customInfoObj = JSON.parse(res.data.customInfo)
} else {
form.value.customInfoObj = {}
}
}
})
})
function prev() {
emit('prev')
}
function next() {
proxy.$refs['formRef'].validate((valid) => {
if (valid) {
form.value.activityId = route.params.id
form.value.customInfo = JSON.stringify(form.value.customInfoObj)
train.savePersonalInfo(form.value).then(() => {
proxy.$modal.msgSuccess('保存成功')
emit('next')
})
}
})
}
</script>
<style scope lang="scss">
.panel-box{
border:1px solid #F5766A;
padding:10px 20px;
}
.train-h3{
font-size: 16px;
font-weight: 600;
color: var(--el-color-primary);
padding-left: 20px;
border-left: 3px solid var(--el-color-primary) ;
}
.back{
border:1px solid var(--el-color-primary) ;
color:var(--el-color-primary)
}
.app-container {
padding: 0;
background: #f5f7f9;
}
.panel-footer .el-button--success {
background: linear-gradient(270deg, #39dba7, #38ef7d);
border: none;
padding: 0 40px;
font-size: 16px;
}
.signForm {
.el-form-item__label {
color: #4c5359;
}
}
.tip {
font-size: 13px;
color: #999;
margin: 10px 0;
i {
color: red;
margin: 0 4px 0 0;
}
}
.threeFour {
width: 100%;
}
:deep(.el-upload--picture-card) {
width: 120px;
height: 160px;
}
:deep(.el-upload-list--picture-card .el-upload-list__item) {
width: 120px;
height: 160px;
}
.red {
color: #f56c6c;
}
.el-form-item{align-items: center;}
</style>
<template>
<div>
<div class="box">
<el-breadcrumb class="mt20 forPc mb20" :separator-icon="ArrowRight">
<el-breadcrumb-item :to="{ path: '/' }">
<el-icon>
<HomeFilled />
</el-icon>
首页
</el-breadcrumb-item>
<el-breadcrumb-item :to="{ path: '/competition' }">竞赛</el-breadcrumb-item>
<el-breadcrumb-item>竞赛日程</el-breadcrumb-item>
</el-breadcrumb>
<div class="kind">
<ul>
<li>
<label>状态:</label>
<el-radio-group v-model="query.flag" @change="searchList">
<el-radio-button value="">全部</el-radio-button>
<el-radio-button value="1">未开始</el-radio-button>
<el-radio-button value="2">进行中</el-radio-button>
<el-radio-button value="3">已结束</el-radio-button>
</el-radio-group>
</li>
<li>
<label>省份:</label>
<el-radio-group v-model="query.projectId" @change="searchList">
<el-radio-button value="">全部</el-radio-button>
<el-radio-button v-for="p in projectList" :key="p.provinceId" :value="p.provinceId">{{ p.provinceName }}</el-radio-button>
</el-radio-group>
</li>
<li>
<label>时间:</label>
<el-radio-group v-model="query.yearMonth" @change="searchList">
<el-radio-button value="">全部</el-radio-button>
<el-radio-button v-for="m in monthList" :key="m" :value="m" />
</el-radio-group>
</li>
</ul>
</div>
</div>
<div class="box">
<div class="listTitle">
<h3><label>培训列表</label></h3>
<div class="search">
<el-input
v-model.trim="query.trainName"
placeholder="请输入培训名称查询"
class="input-with-select" @keydown.enter="searchList"
>
<template #append>
<el-button type="success" round @click="searchList">查询</el-button>
</template>
</el-input>
</div>
</div>
<el-row :gutter="30" class="pt-20">
<el-col v-for="n in list" :key="n" :lg="6" :md="8" :sm="12" class="content">
<train-card :data="n" @click="goDetail(n.id)">
<!-- <template #image>-->
<!-- <el-button @click="goDetail(n.id)">详情</el-button>-->
<!-- </template>-->
<div class="trrbtn">
<a v-if="n.signStatus=='0'" disabled class="roundLabel gold-btn">未开始</a>
<a v-if="n.signStatus=='1'" class="roundLabel red-btn" round>去报名</a>
<a v-if="n.signStatus=='2'" class="roundLabel gray-btn" round disabled>已结束</a>
</div>
</train-card>
</el-col>
</el-row>
<div v-if="total > query.pageSize" class="pc-page-box">
<PaginationPc v-model:page="query.pageNum" v-model:limit="query.pageSize" :total="total" @pagination="getList" />
</div>
<el-empty v-if="list.length == 0" description="暂无数据" />
</div>
</div>
</template>
<script setup>
import { ref, onMounted } from 'vue'
import { useRouter } from 'vue-router'
import * as train from '@/apiPc/train'
import TrainCard from '@/viewsPc/components/trainCard'
import { ArrowRight } from '@element-plus/icons-vue'
const router = useRouter()
const list = ref([])
const projectList = ref([])
const monthList = ref([])
const total = ref(0)
const query = ref({
projectId: '',
flag: '',
yearMonth: '',
trainName: '',
pageSize: 12,
pageNum: 1
})
onMounted(() => {
getProvinceList()
getMonthList()
getList()
})
// 获取省
async function getProvinceList() {
const res = await train.getProvinceNames()
projectList.value = res.data
}
function getMonthList() {
const data = new Date()
// 获取年
let year = data.getFullYear()
// 获取月
let mon = data.getMonth() - 5
const arr = []
if (mon < 1) {
year = year - 1
mon = 12 + mon
}
for (let i = 0; i < 12; i++) {
if (mon <= 0) {
year = year + 1
mon = mon - 12
}
if (mon > 12) {
mon = 1
year = year + 1
}
if (mon < 10) {
mon = '0' + mon
}
arr.push(year + '-' + mon)
mon = mon * 1 + 1
}
monthList.value = arr
}
async function getList() {
const res = await train.getTrains(query.value)
list.value = res.rows
total.value = res.total
}
function searchList() {
query.value.pageNum = 1
getList()
}
function goDetail(id) {
const routeLocation = router.resolve({
name: 'trainDetail',
params: {
id: id
}
})
window.open(routeLocation.href, '_blank')
}
</script>
<style lang="scss" scoped>
.el-pagination {
justify-content: center;
--el-pagination-bg-color: none;
}
.kind {
background: #fff;
border-radius: 2px;
box-shadow: 0px 0px 46px 0px rgba(1,16,64,0.08);
margin:30px 0;
ul {
list-style: none;
padding: 30px 20px 10px;
li {
margin: 0 0 20px;
display: flex;border-bottom: 1px solid #E5E5E5;padding: 0 0 20px;
align-items: baseline;
&>label{flex: 0 0 auto;padding:0 20px;
border-left:3px solid var(--el-color-primary); position: relative;
top: 6px;}
}
li:last-child{border: none;margin: 0;}
}
}
.pagination-container {
height: 56px;
}
.listTitle {
display: flex;
justify-content: space-between;
align-items: center;
}
.cared1 {
background: darkgreen;
}
.cared2 {
background: gray;
}
.coach{
width: 58px;
height: 24px;
font-size: 14px;
font-weight: 400;
background: #FF8135;
color: #FFFFFF;
border-radius: 2px;
text-align: center;
line-height: 24px;
}
.judge{
width: 58px;
height: 24px;
font-size: 14px;
font-weight: 400;
color: #FFFFFF;
background: #00A1E6;
border-radius: 2px;
text-align: center;
line-height: 24px;
}
.jinDuan{
width: 58px;
height: 24px;
font-size: 14px;
font-weight: 400;
color: #FFFFFF;
background: #D3AA5A ;
border-radius: 2px;
text-align: center;
line-height: 24px;
}
.jinJi{
width: 58px;
height: 24px;
font-size: 14px;
font-weight: 400;
color: #FFFFFF;
background: #2FBAB6;
border-radius: 2px;
text-align: center;
line-height: 24px;
}
</style>
<template>
<div class="app-container">
<div class="box ph-30">
<div class="panel">
<div class="panel-head" style="width: 100%;">
<el-steps :active="active" align-center style="width: 100%;">
<el-step title="报名须知" />
<el-step title="个人信息完善" />
<el-step title="培训信息完善" />
<el-step title="培训考试选择" />
</el-steps>
</div>
<br>
<component
:is="StepInfo" :activity="activity" :personal="personal" :exam-list="examList" :train-list="trainList"
@prev="prev" @next="next" @publish="publish"
/>
</div>
</div>
</div>
</template>
<script setup>
import { defineAsyncComponent, reactive, ref, watch } from 'vue'
import { onMounted } from '@vue/runtime-core'
import * as train from '@/apiPc/train'
import { toRefs } from '@vueuse/shared'
import { useRouter, useRoute } from 'vue-router'
import useUserStore from '@/store/modules/user'
const route = useRoute()
const router = useRouter()
const userStore = useUserStore()
const active = ref(-1)
const modules = import.meta.glob('./components/*.vue')
let StepInfo
const data = reactive({
activity: {},
examList: [],
trainList: [],
personal: {}
})
const { activity, examList, trainList, personal } = toRefs(data)
onMounted(() => {
if (!userStore.checkAndLogin()) {
return
}
if (!route.params.id) {
return
}
const step = route.query.step || '1'
active.value = (parseInt(step) - 1) || 0
train.getTrainDetails(route.params.id).then((res) => {
activity.value = res.data.activity
examList.value = res.data.examVoList
trainList.value = res.data.subjectTrainList
if (activity.value.signNoticeAttachment) {
activity.value.signNoticeAttachment = JSON.parse(activity.value.signNoticeAttachment)[0]
}
})
train.getPersonalInfo().then((res) => {
personal.value = res.data
})
})
watch(active, (val) => {
if (val !== -1) {
StepInfo = defineAsyncComponent(modules[`./components/step${val + 1}.vue`])
}
})
function next() {
active.value++
router.push({
query: { step: active.value + 1 }
})
}
function prev() {
active.value--
router.push({
query: { step: active.value + 1 }
})
}
function publish() {
router.replace({
name: 'trainList'
})
}
</script>
<style scoped lang="scss">
.app-container {
padding: 0;
background: #f5f7f9;
}
.panel{
padding: 20px 100px;
}
.panel-box{
border:1px solid #F5766A;
padding:10px 20px;
}
.panel-footer .el-button--success {
background: linear-gradient(270deg, #39dba7, #38ef7d);
border: none;
padding: 0 40px;
font-size: 16px;
}
.signForm {
.el-form-item__label {
color: #4c5359;
}
}
.tip {
font-size: 13px;
color: #999;
margin: 10px 0;
i {
color: red;
margin: 0 4px 0 0;
}
}
.threeFour {
width: 100%;
}
:deep(.el-upload--picture-card) {
width: 120px;
height: 160px;
}
:deep(.el-upload-list--picture-card .el-upload-list__item) {
width: 120px;
height: 160px;
}
.red {
color: #f56c6c;
}
.train-h3{
font-size: 16px;
font-weight: 600;
color: var(--el-color-primary);
padding-left: 20px;
border-left: 3px solid var(--el-color-primary) ;
}
</style>
......@@ -82,8 +82,8 @@ export default defineConfig(({ mode, command }) => {
rewrite: (p) => p.replace(/^\/dev-api\/ztx-webSite/, '')
},
'/dev-api': {
// target: 'http://192.168.1.131:8081/',
target: 'https://dance.itechtop.cn/stage-api',
target: 'http://192.168.1.131:8081/',
// target: 'https://dance.itechtop.cn/stage-api',
changeOrigin: true,
rewrite: (p) => p.replace(/^\/dev-api/, '')
}
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!