12d621d3 by zhangmeng

Merge branch 'order' of https://code.itechtop.cn/yangyang/dance-pc into order

2 parents 73dc0e6e 182c235a
......@@ -39,11 +39,12 @@ export function getMySignDetailById(params) {
}
// 获取赛事下的已报团队
export function getGroupListByCptId(cptId) {
export function getGroupListByCptId(cptId,query) {
return request({
// url: `/league/group/getGroupListByCptId/${cptId}`,
url: `/league/sign/getSignInfoDataByCptId/${cptId}`,
method: 'get'
method: 'get',
params: query
})
}
......@@ -363,6 +364,13 @@ export function savePersonForMyPerson(data) {
data: data
})
}
export function savePersonForMyPerson2(data) {
return request({
url: `/systemj/personInfo/savePersonForMyPerson2`,
method: 'post',
data: data
})
}
// 人员修改
export function editPersonInfo(params) {
......@@ -380,6 +388,13 @@ export function delPerson(id) {
method: 'delete'
})
}
//个人账号
export function delPersonForPersonal(id) {
return request({
url: `/systemj/personInfo/singleDelete/${id}`,
method: 'delete'
})
}
export function singleSignSavePerson(data) {
return request({
......@@ -650,6 +665,20 @@ export function checkMate(query) {
params:query
})
}
export function checkIdcCode(query) {
return request({
url: `/systemj/personInfo/extractInfo`,
method: 'get',
params:query
})
}
export function getProjectByCptId(cptId,query) {
return request({
url: `/league/competitionProject/getTableByLanguageSourceAndCptId/${cptId}`,
method: 'get',
params: query
})
}
export function addInvitation(data) {
return request({
url: `/league/person`,
......

57.3 KB | W: | H:

43.9 KB | W: | H:

src/assets/logo/Invitation_c.png
src/assets/logo/Invitation_c.png
src/assets/logo/Invitation_c.png
src/assets/logo/Invitation_c.png
  • 2-up
  • Swipe
  • Onion skin

56 KB | W: | H:

44.3 KB | W: | H:

src/assets/logo/Invitation_e.png
src/assets/logo/Invitation_e.png
src/assets/logo/Invitation_e.png
src/assets/logo/Invitation_e.png
  • 2-up
  • Swipe
  • Onion skin
......@@ -83,7 +83,7 @@
<div @click="goHelpZH">
<a target="_blank" href="/file/操作指引.zip">
<img class="kf" src="@/assets/logo/btn02.png"/>
<div class="text-center mt10 gradient-text">操作指引</div>
<div class="text-center mt10 gradient-text">指南下载</div>
</a>
</div>
</div>
......@@ -95,7 +95,7 @@
</div>
<div @click="goHelp">
<img class="kf" src="@/assets/logo/btn02.png"/>
<div class="text-center gradient-text">GUIDELINE</div>
<div class="text-center gradient-text uppercase">Video Guide</div>
</div>
</div>
</div>
......@@ -104,18 +104,19 @@
<script setup>
import {useStorage} from "@vueuse/core/index";
import {useRouter} from "vue-router";
import {ElMessage} from "element-plus";
const router = useRouter()
const language = useStorage('language', 0)
const goHelp = () => {
router.push({
path: `/news/list/20000100`,
query:{
kindName: language.value==0?'操作指引':'GUIDELINE'
kindName: language.value==0?'操作指引':'Video Guide'
}
})
}
const goHelpZH = () => {
ElMessage.success('已下载文件')
}
</script>
......
......@@ -324,7 +324,7 @@ function getCode() {
.ropenbtn{padding: 10px;display: none;
img{ width: 50px;}
img{ width: 44px;}
}
:deep(.el-input){height: 100%}
......
......@@ -257,7 +257,7 @@ function getCode() {
.ropenbtn{padding: 10px;display: none;
img{ width: 50px;}
img{ width: 44px;}
}
:deep(.el-input){height: 100%}
......
......@@ -133,8 +133,6 @@ function goBooking(n) {
break;
case 4:
//化妆
building()
router.push({path: `/booking/makeup/${props.matchId}`})
break;
case 5:
......
<template>
<div>
<div class="banner">
<el-carousel height="450px" :autoplay="false" arrow="hover" @change="carouselChange">
<el-carousel class="forPc" height="450px" :autoplay="false" arrow="hover" @change="carouselChange">
<el-carousel-item style="height: 450px;" v-for="n in maList" :key="n.id">
<div class="bannerItem">
<div class="h100">
......@@ -40,6 +40,45 @@
</div>
</el-carousel-item>
</el-carousel>
<el-carousel class="forWei" height="160px" :autoplay="false" arrow="hover" @change="carouselChange">
<el-carousel-item style="height: 160px;" v-for="n in maList" :key="n.id">
<div class="bannerItem" style="height:100%">
<div class="h100" style="position: relative">
<img v-if="n.bgImgUrl" class="bannerImg" :src="fillImgUrl(n.bgImgUrl)">
<img v-else class="bannerImg" src="@/assets/dance/banner.png">
<div style="position: absolute;left: 0;right: 0;bottom: 0;margin: auto;">
<div class="banner-count" v-if="n.time>0" @click="goMatch(n)">
距离开始还有
<van-count-down :time="n.time" format="DD 天 HH 时 mm 分 ss 秒">
<template #default="timeData">
<div class="block">{{ timeData.days }}
<span class="colon"></span>
</div>
<div class="block">{{ timeData.hours }}
<span class="colon"></span>
</div>
<div class="block">{{ timeData.minutes }}
<span class="colon"></span>
</div>
<div class="block">{{ timeData.seconds }}
<span class="colon"></span>
</div>
</template>
</van-count-down>
</div>
<div class="banner-count bb" v-else @click="goMatch(n)">
开始报名
<!-- <el-button class="btn-lineG" style="font-size: 17px;height: 40px" round type="primary">开始报名</el-button>-->
</div>
</div>
</div>
</div>
</el-carousel-item>
</el-carousel>
</div>
<div class="box zn-bg">
......@@ -885,7 +924,8 @@ const goGuide = () => {
}
.bannerItem .banner-count {
flex-direction: column;
transform: scale(0.8);
transform: scale(0.5);
width: auto;
left: 0;
right: 0;
......
<template>
<div>
<div class="banner">
<el-carousel height="450px" :autoplay="false" arrow="hover" @change="carouselChange">
<el-carousel height="450px" class="forPc" :autoplay="false" arrow="hover" @change="carouselChange">
<el-carousel-item style="height: 450px;" v-for="n in maList" :key="n.id">
<div class="bannerItem">
<div class="h100">
......@@ -37,6 +37,45 @@
</div>
</el-carousel-item>
</el-carousel>
<el-carousel class="forWei" height="160px" :autoplay="false" arrow="hover" @change="carouselChange">
<el-carousel-item style="height: 160px;" v-for="n in maList" :key="n.id">
<div class="bannerItem" style="height:100%">
<div class="h100" style="position: relative">
<img v-if="n.bgImgUrl" class="bannerImg" :src="fillImgUrl(n.bgImgUrl)">
<img v-else class="bannerImg" src="@/assets/dance/banner.png">
<div style="position: absolute;left: 0;right: 0;bottom: 0;margin: auto;">
<div class="banner-count" v-if="n.time>0" @click="goMatch(n)">
距离开始还有
<van-count-down :time="n.time" format="DD 天 HH 时 mm 分 ss 秒">
<template #default="timeData">
<div class="block">{{ timeData.days }}
<span class="colon"></span>
</div>
<div class="block">{{ timeData.hours }}
<span class="colon"></span>
</div>
<div class="block">{{ timeData.minutes }}
<span class="colon"></span>
</div>
<div class="block">{{ timeData.seconds }}
<span class="colon"></span>
</div>
</template>
</van-count-down>
</div>
<div class="banner-count bb" v-else @click="goMatch(n)">
开始报名
<!-- <el-button class="btn-lineG" style="font-size: 17px;height: 40px" round type="primary">开始报名</el-button>-->
</div>
</div>
</div>
</div>
</el-carousel-item>
</el-carousel>
</div>
<div class="box zn-bg">
......@@ -749,7 +788,8 @@ const goGuide = () => {
display: none;
}
.bannerItem .banner-count{flex-direction: column;
transform: scale(0.8); left: 0;
transform: scale(0.5); width: auto;
left: 0;
right: 0;
.van-count-down{margin: 30px 0 0;}
}
......
......@@ -361,6 +361,7 @@ function goNext() {
}
function goPrev() {
console.log(languageSource.value)
if(languageSource.value=='100'){
router.push({
name: `teamSignCn`,
......@@ -388,10 +389,10 @@ function editPerson(id) {
id: id,
groupId: groupId.value || 0
}
if(language.value==0){
if(isNational.value){
proxy.$refs['dialogAddCoachRef_En'].open(obj)
}else {
proxy.$refs['dialogAddCoachRef_En'].open(obj)
proxy.$refs['dialogAddCoachRef'].open(obj)
}
}
......@@ -402,11 +403,11 @@ function addCoach(n) {
label: n,
groupId: groupId.value
}
// if(language.value==0){
// proxy.$refs['dialogAddCoachRef'].open(obj)
// }else {
if(isNational.value){
proxy.$refs['dialogAddCoachRef_En'].open(obj)
// }
}else {
proxy.$refs['dialogAddCoachRef'].open(obj)
}
}
</script>
......
......@@ -17,59 +17,64 @@
<h3 class="panel-title" v-else>My Information</h3>
</div>
<div class="panel-body">
<div v-if="form.danceMate">
<div class="text-danger fontsize14 mb10" v-if="language==0">*如果您报名双人舞项目,请勾选您的舞伴</div>
<div class="text-danger fontsize14 mb10" v-else>
*Please select your dance partner if you are registering for a couple event
</div>
</div>
<div class="chooseForm" style="display: flex;flex-wrap: wrap;">
<div @click="editPerson" class="mb20" style="width: 50%;text-align: center;">
<el-avatar fit="cover" v-if="form.picUrl" :size="60" :src="fillImgUrl(form.picUrl)"/>
<div v-else>
<el-avatar fit="cover" v-if="form.sex == 0" :size="60" src="/img/head1.png"/>
<el-avatar fit="cover" v-if="form.sex == 1" :size="60" src="/img/head0.png"/>
</div>
<div class="text-center mt10">
<span class="mName">{{ form.realName }}</span>
<el-icon size="20">
<Edit/>
</el-icon>
</div>
</div>
<!--舞伴-->
<div style="width:50%;text-align: center;" v-if="form.danceMate">
<el-checkbox-group v-model="mateChosed" @change="changeMate">
<el-checkbox :label="form.danceMate.id">
<!-- <div @click="editPerson" class="mb20" style="width: 50%;text-align: center;">-->
<!-- <el-avatar fit="cover" v-if="form.picUrl" :size="60" :src="fillImgUrl(form.picUrl)"/>-->
<!-- <div v-else>-->
<!-- <el-avatar fit="cover" v-if="form.sex == 0" :size="60" src="/img/head1.png"/>-->
<!-- <el-avatar fit="cover" v-if="form.sex == 1" :size="60" src="/img/head0.png"/>-->
<!-- </div>-->
<!-- <div class="text-center mt10">-->
<!-- <span class="mName">{{ form.realName }}</span>-->
<!-- <el-icon size="20">-->
<!-- <Edit/>-->
<!-- </el-icon>-->
<!-- </div>-->
<!-- </div>-->
<!-- &lt;!&ndash;舞伴&ndash;&gt;-->
<!-- <div style="width:50%;text-align: center;" v-if="form.danceMate">-->
<!-- <el-checkbox-group v-model="mateChosed" @change="changeMate">-->
<!-- <el-checkbox :label="form.danceMate.id">-->
<!-- <div>-->
<!-- <el-avatar fit="cover" v-if="form.danceMate.picUrl" :size="60" :src="fillImgUrl(form.danceMate.picUrl)"/>-->
<!-- <el-avatar fit="cover" v-else-if="form.danceMate.sex == 0" :size="60"-->
<!-- src="/img/head1.png"/>-->
<!-- <el-avatar fit="cover" v-else-if="form.danceMate.sex == 1" :size="60"-->
<!-- src="/img/head0.png"/>-->
<!-- <div class="text-center mt10" @click="editMate(form.danceMate)">-->
<!-- <span class="mName">{{ form.danceMate.realName }}</span>-->
<!-- <el-icon @click.stop="editMate(form.danceMate)" size="20">-->
<!-- <Edit/>-->
<!-- </el-icon>-->
<!--&lt;!&ndash; <el-icon @click.stop="delMate(form.danceMate)">&ndash;&gt;-->
<!--&lt;!&ndash; <Delete/>&ndash;&gt;-->
<!--&lt;!&ndash; </el-icon>&ndash;&gt;-->
<!-- </div>-->
<!-- </div>-->
<!-- </el-checkbox>-->
<!-- </el-checkbox-group>-->
<!-- </div>-->
<div style="width:50%;text-align: center;" v-for="s in choosedList">
<div>
<el-avatar fit="cover" v-if="form.danceMate.picUrl" :size="60" :src="fillImgUrl(form.danceMate.picUrl)"/>
<el-avatar fit="cover" v-else-if="form.danceMate.sex == 0" :size="60"
<el-avatar fit="cover" v-if="s.picUrl" :size="60" :src="fillImgUrl(form.danceMate.picUrl)"/>
<el-avatar fit="cover" v-else-if="s.sex == 0" :size="60"
src="/img/head1.png"/>
<el-avatar fit="cover" v-else-if="form.danceMate.sex == 1" :size="60"
<el-avatar fit="cover" v-else-if="s.sex == 1" :size="60"
src="/img/head0.png"/>
<div class="text-center mt10" @click="editMate(form.danceMate)">
<span class="mName">{{ form.danceMate.realName }}</span>
<el-icon @click.stop="editMate(form.danceMate)" size="20">
<div class="text-center mt10" @click="editMate(s)">
<span class="mName">{{ s.realName }}</span>
<el-icon @click.stop="editMate(s)" size="20">
<Edit/>
</el-icon>
<!-- <el-icon @click.stop="delMate(form.danceMate)">-->
<!-- <Delete/>-->
<!-- </el-icon>-->
</div>
</div>
</el-checkbox>
</el-checkbox-group>
</div>
<!-- <div style="min-width:50%;" v-else @click="addMate" hidden>-->
<!-- <div class="addBttn" style="margin: 0 auto">+</div>-->
<!-- <div class="text-center mt10 text-primary text-sm">-->
<!-- Please add your partner-->
<!-- <el-icon>-->
<!-- <Edit/>-->
<!-- </el-icon>-->
<!-- </div>-->
<!-- </div>-->
</div>
<div class="text-center mt20">
<el-button type="primary" plain @click="switchPerson">{{language==0?'切换':'Switch'}}</el-button>
</div>
</div>
</div>
</el-col>
......@@ -84,9 +89,10 @@
clearable/>
</div>
</div>
<div class="pl-15 text-danger fontsize14" v-if="cantBao.flag">*{{language==0?`请上传 ${ cantBao.name } 的有效证件`:`Please upload the Valid Passport of ${cantBao.name}`}}</div>
<div v-loading="loadingProject" style="height: 55vh;overflow: auto;">
<el-checkbox-group v-model="projectIds">
<el-checkbox class="flexBetweenBox" v-for="c in projectList" :label="c.id" :key="c.id">
<el-checkbox class="flexBetweenBox" v-for="c in projectList" :label="c.id" :key="c.id" :disabled="cantBao.flag">
<div class="flexBetween w100">
<div class="l">
{{ c.code }}:{{ c.name }}
......@@ -187,6 +193,7 @@
</el-card>
</div>
<DialogAllSportsmanListPerson ref="dialogAllSportsmanListPersonalRef" @transfer="getChoosed"/>
<dialogEditWdsf ref="dialogEditWdsfRef" @submitForm="changeMeDone"/>
<dialogEditAccompany ref="dialogEditAccompanyRef" @submitForm="getMyMemberTable"/>
<addCoachEn ref="dialogAddCoachEnRef" @submitForm="getMyMemberTable"/>
......@@ -201,7 +208,7 @@ import {getCurrentInstance, onMounted} from '@vue/runtime-core'
import DialogEditWdsf from './components/addWdsf'
import DialogEditAccompany from './components/addAccompany'
import AddCoachEn from './components/addCoach_en'
import DialogAllSportsmanList from './components/allSportsmanList'
import DialogAllSportsmanListPerson from './components/allSportsmanListForPersonal'
import DialogExtraForm from './components/extraForm'
import {Search, Switch} from "@element-plus/icons-vue";
......@@ -248,35 +255,31 @@ const data = reactive({
projectIds: [],
projectList: [],
choosed2List: [], projectQuery: {}, tableType: 1,
isNational:true,
cantBao: {
flag: false,
name:''
}
})
const {
activeTeam,
names,
tableData,
myMemberTable,
signInfoList,
zuTableList,
choosedList,
showExtraForm,
extraPersonInfoMapList,
teamList,
choosedList,isNational,
extraform,
groupId,
signType,
coachOrLeaderFlag,
showResult,
noPhotoCanSign,
extraTableHead,
coachForm,
projectIds,
choosedchoosed,
mateChosed,
activeStep,
projectList,
choosed2List,
loadingProject,
projectQuery,
tableType
tableType,cantBao
} = toRefs(data)
const matchId = ref(route.query.matchId)
let signInfoType = null
......@@ -289,7 +292,7 @@ onMounted(() => {
if (useUserStore().user) {
userId.value = useUserStore().user.userId
}
signType.value = route.query.signType
signType.value = route.query.signType || null
getSignInfoList()
getMatch(matchId.value)
getMyInfo()
......@@ -300,6 +303,17 @@ onMounted(() => {
function getMyInfo() {
match.getMyPersonInfo().then(res => {
form.value = res.data
if(form.value.danceMate){
choosedList.value = [form.value,form.value.danceMate]
if(!form.value.danceMate.passportUrl){
cantBao.value.flag = true
cantBao.value.name = form.value.danceMate.realName
} else {
cantBao.value.flag = false
}
} else {
choosedList.value = [form.value]
}
myId.value = res.data.id
getProjectList()
}).catch(err => {
......@@ -308,7 +322,6 @@ function getMyInfo() {
}
function getMyMemberTable() {
//
match.getPerPersonList({cptId: matchId.value, searchLabels: '1,2,3,4,5,6'}, userId.value).then(res => {
myMemberTable.value = res.rows
if(res.rows.length > 0){
......@@ -455,45 +468,27 @@ function commit() {
matchId: matchId.value
}
})
// ElMessageBox.confirm(language.value == 0 ? '确定提交吗?' : 'Are you sure to submit?',
// language.value == 0 ? '提示' : 'Tip',
// {
// confirmButtonText: language.value == 0 ? '确定' : 'Yes',
// cancelButtonText: language.value == 0 ? '取消' : 'Cancel',
// }).then(()=>{
// match.commitSign({
// groupId: 0,
// cptId: matchId.value
// }).then(res => {
// router.push({
// name: `commitDone`,
// params: {
// orderId: res.data
// }
// })
// })}
// )
}
function getChoosed(list) {
console.log(list)
choosedList.value = list
getProjectList()
}
function getProjectList() {
let arr = []
for(var l of choosedList.value){
arr.push(l.id)
}
projectIds.value = []
loadingProject.value = true
//根据已选人员id 获取项目列表
var obj = {}
if (mateChosed.value.length > 0 && form.value.danceMate) {
obj = {
cptId: matchId.value,
perIds: `${myId.value},${form.value.danceMate?.id}`,
perIds: arr.toString(),
name: projectQuery.value.name
}
} else {
obj = {
cptId: matchId.value,
perIds: myId.value,
name: projectQuery.value.name
}
}
match.getProjectPageByPerIds(obj).then(res => {
projectList.value = res.rows
loadingProject.value = false
......@@ -569,14 +564,14 @@ function signUp() {
}
return
}
let arr = []
for(var l of choosedList.value){
arr.push(l.id)
}
let obj = {
projectIds: projectIds.value.toString(),
groupId: 0
}
if (mateChosed.value.length > 0 && form.value.danceMate) {
obj.athleteIds= `${myId.value},${form.value.danceMate?.id}`
} else {
obj.athleteIds= myId.value
groupId: 0,
athleteIds: arr.toString()
}
match.sportsmanDone(obj).then(res => {
getSignInfoList()
......@@ -600,21 +595,18 @@ function removeThis(id) {
})
}
function changeCoach(cptId, groupId) {
// 更换教练
function switchPerson(){
const params = {
title: '修改教练',
groupId: groupId,
cptId: cptId
title: language.value == 0 ? '选择运动员' : 'Participating athletes',
matchId: matchId.value,
signType: signType.value,
noPhotoCanSign: noPhotoCanSign.value,
coachOrLeaderFlag: coachOrLeaderFlag.value,
choosedList: choosedList.value,
isNational: isNational.value,
mateId:form.value.danceMate?.id || 0,
}
proxy.$refs['popChangeCoach'].open(params)
}
function goMySign() {
router.push({
name: 'myMatch'
})
proxy.$refs['dialogAllSportsmanListPersonalRef'].open(params)
}
const goPersonInfo = (row) => {
......@@ -630,8 +622,6 @@ const goPersonInfo = (row) => {
return
}
// 完善补充信息
console.log(row)
// debugger
const params = {
matchId: matchId.value,
title: language.value==0?'完善补充信息':'Complete the supplementary information',
......@@ -644,13 +634,6 @@ const goPersonInfo = (row) => {
proxy.$refs['popExtraForm'].open(_.cloneDeep(params))
}
function downloadVoucher() {
// 下载凭证
proxy.download(
`/pdf/getPayedOrderPdf/${matchId.value}/${groupId.value || 0}`, {}, '报项凭证.pdf'
)
}
function editPerson() {
proxy.$refs['dialogEditWdsfRef'].open({
title: language.value == 0 ? '编辑个人信息' : 'Edit My Information',
......@@ -658,14 +641,6 @@ function editPerson() {
})
}
function addMate() {
proxy.$refs['dialogEditWdsfRef'].open({
title: language.value == 0 ? '添加舞伴' : 'Add My Mate',
isMe: false,
cptId:matchId.value,
id: 0
})
}
function editMate(obj) {
proxy.$refs['dialogEditWdsfRef'].open({
title: language.value == 0 ? '编辑舞伴' : 'Edit My Mate',
......@@ -676,18 +651,6 @@ function editMate(obj) {
})
}
function delMate(mate) {
delperson(mate)
// ElMessageBox.confirm(language.value == 0 ? '确定删除队友吗?' : 'Are you sure to delete the teammate?',
// language.value == 0 ? '提示' : 'Tip',
// {
// confirmButtonText: language.value == 0 ? '确定' : 'Yes',
// cancelButtonText: language.value == 0 ? '取消' : 'Cancel',
// }).then(()=>{
//
// })
}
function changeMate(e) {
console.log(e, mateChosed.value,form.value.danceMate.passportUrl)
if(form.value.danceMate.passportUrl==''||!form.value.danceMate.passportUrl){
......
<template>
<div>
<!-- 个人报名-国外-->
<div class="box ph-30">
<el-card class="mb20">
<single-sign-step :activeStep="1" :language="language"/>
</el-card>
<el-card :body-style="{'padding': '0'}">
<match-info-row :match-id="matchId"/>
<div class="pd20">
<el-row :gutter="20">
<el-col :lg="6">
<div class="panel border">
<div class="panel-header ">
<h3 class="panel-title" v-if="language==0">完善我的信息</h3>
<h3 class="panel-title" v-else>My Information</h3>
</div>
<div class="panel-body">
<div v-if="form.danceMate">
<div class="text-danger fontsize14 mb10" v-if="language==0">*如果您报名双人舞项目,请勾选您的舞伴</div>
<div class="text-danger fontsize14 mb10" v-else>
*Please select your dance partner if you are registering for a couple event
</div>
</div>
<div class="chooseForm" style="display: flex;flex-wrap: wrap;">
<div @click="editPerson" class="mb20" style="width: 50%;text-align: center;">
<el-avatar fit="cover" v-if="form.picUrl" :size="60" :src="fillImgUrl(form.picUrl)"/>
<div v-else>
<el-avatar fit="cover" v-if="form.sex == 0" :size="60" src="/img/head1.png"/>
<el-avatar fit="cover" v-if="form.sex == 1" :size="60" src="/img/head0.png"/>
</div>
<div class="text-center mt10">
<span class="mName">{{ form.realName }}</span>
<el-icon size="20">
<Edit/>
</el-icon>
</div>
</div>
<!--舞伴-->
<div style="width:50%;text-align: center;" v-if="form.danceMate">
<el-checkbox-group v-model="mateChosed" @change="changeMate">
<el-checkbox :label="form.danceMate.id">
<div>
<el-avatar fit="cover" v-if="form.danceMate.picUrl" :size="60" :src="fillImgUrl(form.danceMate.picUrl)"/>
<el-avatar fit="cover" v-else-if="form.danceMate.sex == 0" :size="60"
src="/img/head1.png"/>
<el-avatar fit="cover" v-else-if="form.danceMate.sex == 1" :size="60"
src="/img/head0.png"/>
<div class="text-center mt10" @click="editMate(form.danceMate)">
<span class="mName">{{ form.danceMate.realName }}</span>
<el-icon @click.stop="editMate(form.danceMate)" size="20">
<Edit/>
</el-icon>
<!-- <el-icon @click.stop="delMate(form.danceMate)">-->
<!-- <Delete/>-->
<!-- </el-icon>-->
</div>
</div>
</el-checkbox>
</el-checkbox-group>
</div>
<!-- <div style="min-width:50%;" v-else @click="addMate" hidden>-->
<!-- <div class="addBttn" style="margin: 0 auto">+</div>-->
<!-- <div class="text-center mt10 text-primary text-sm">-->
<!-- Please add your partner-->
<!-- <el-icon>-->
<!-- <Edit/>-->
<!-- </el-icon>-->
<!-- </div>-->
<!-- </div>-->
</div>
</div>
</div>
</el-col>
<el-col :lg="18">
<div class="panel border">
<div class="panel-header ">
<h3 class="panel-title" v-if="language==0">可参与报名的项目</h3>
<h3 class="panel-title" v-else>Search Events</h3>
<div class="fr">
<el-input size="small" v-model="projectQuery.name" :prefix-icon="Search" @change="getProjectList"
clearable/>
</div>
</div>
<div v-loading="loadingProject" style="height: 55vh;overflow: auto;">
<el-checkbox-group v-model="projectIds">
<el-checkbox class="flexBetweenBox" v-for="c in projectList" :label="c.id" :key="c.id">
<div class="flexBetween w100">
<div class="l">
{{ c.code }}:{{ c.name }}
<div>{{ c.danceTypeDetailStr }}</div>
</div>
<div class="text-primary">{{ language == 0 ? '¥' : '€' }}{{ c.serviceFee }}</div>
</div>
</el-checkbox>
</el-checkbox-group>
<el-empty v-if="projectList.length==0" :image="`/img/order_no.png`" :image-size="228"
:description="language==0?'无可选项目':''"/>
</div>
</div>
</el-col>
</el-row>
</div>
<el-row class="mt20">
<el-col :span="24">
<div class="text-center">
<el-button type="primary" class="btn-lineG w200px" round @click="signUp">
{{ language == 0 ? '确定' : 'Confirm' }}
</el-button>
</div>
</el-col>
</el-row>
<div class="m20">
<!-- <el-button type="success" @click="importSportman">批量导入人员</el-button>-->
<!-- <el-button type="success" @click="addCoach">新增运动员</el-button>-->
<div class="ttbb">
<div :class="tableType==1 ? 'active' : ''" @click="switchTabletype">
{{ language == 0 ? '按组别查看报项' : 'Check Registrations by Group' }}
</div>
<div :class="tableType==0 ? 'active' : ''" @click="switchTabletype">
{{ language == 0 ? '按人员查看报项' : 'Check Registrations by Participant' }}
</div>
</div>
<sign-info-table v-if="tableType==0" :match-id="matchId"
:extraform="extraform" :language="language" :list="signInfoList"
@editExtra="goPersonInfo"/>
<zu-table v-else :list="zuTableList" :language="language" @delete="removeThis"/>
<div v-if="showPersonList||myMemberTable.length>0">
<el-row class="mt20">
<el-col :span="24">
<el-button @click="addAccompany" type="primary" plain>
{{ language == 0 ? '添加随行人员' : 'Add accompanying personnel' }}
</el-button>
</el-col>
</el-row>
<el-table class="mt20" :data="myMemberTable" border>
<el-table-column type="index" :label="language==0?'序号':'Index'" width="70" 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?'证件号':'Valid Documents'" prop="idcCode" min-width="120"/>-->
<!-- <el-table-column label="Birthday" prop="birth"/>-->
<el-table-column :label="language==0?'性别':'Gender'" prop="sexStr"/>
<el-table-column :label="language==0?'会员角色':'Role'" min-width="160">
<template #default="scope">
<div class="roletd">
<span v-for="item in scope.row.label?.split(',')" :key="item.id" class="text-primary">
<span v-if="item==='0'" class="ml5">{{ language == 0 ? '运动员' : 'Athletes' }}</span>
<span v-if="item==='1'" class="ml5">{{ language == 0 ? '教练' : 'Coach' }}</span>
<span v-if="item==='2'" class="ml5">{{ language == 0 ? '领队' : 'Head Of Team' }}</span>
<span v-if="item==='4'" class="ml5">{{ language == 0 ? '队医' : 'Team doctor' }}</span>
<span v-if="item==='5'" class="ml5">{{ language == 0 ? '翻译' : 'Interpreter' }}</span>
<span v-if="item==='6'" class="ml5">{{ language == 0 ? '官员' : 'Official' }}</span>
<span v-if="item==='3'" class="ml5">{{ language == 0 ? '其他' : 'Other' }}</span>
</span>
</div>
</template>
</el-table-column>
<el-table-column label="Actions">
<template #default="scope">
<a class="text-primary pd10" @click="delperson(scope.row)">
{{ language == 0 ? '删除' : 'Delete' }}
</a>
</template>
</el-table-column>
</el-table>
</div>
<div class="text-center mt20">
<el-button type="primary" class="btn-lineG w200px" round @click="submitForm()">
{{ language == 0 ? '预览报名信息' : 'Preview Registration Information' }}
</el-button>
</div>
<!-- <div class="text-center mt20">-->
<!-- <el-button type="primary" class="" plain round @click="submitForm(0)">-->
<!-- {{ language == 0 ? '保存暂不提交审核' : 'Save, Do Not Submit for Review Yet' }}-->
<!-- </el-button>-->
<!-- <el-button type="primary" class="btn-lineG w200px" round @click="submitForm(1)">-->
<!-- {{ language == 0 ? '提交审核' : 'Submit for review' }}-->
<!-- </el-button>-->
<!-- </div>-->
</div>
</el-card>
</div>
<dialogEditWdsf ref="dialogEditWdsfRef" @submitForm="changeMeDone"/>
<dialogEditAccompany ref="dialogEditAccompanyRef" @submitForm="getMyMemberTable"/>
<addCoachEn ref="dialogAddCoachEnRef" @submitForm="getMyMemberTable"/>
<dialogExtraForm ref="popExtraForm" @submitForm="getSignInfoList"/>
</div>
</template>
<script setup>
import {ref, reactive, toRefs} from 'vue'
import * as match from '@/apiPc/match'
import {getCurrentInstance, onMounted} from '@vue/runtime-core'
import DialogEditWdsf from './components/addWdsf'
import DialogEditAccompany from './components/addAccompany'
import AddCoachEn from './components/addCoach_en'
import DialogAllSportsmanList from './components/allSportsmanList'
import DialogExtraForm from './components/extraForm'
import {Search, Switch} from "@element-plus/icons-vue";
const {proxy} = getCurrentInstance()
const router = useRouter()
const route = useRoute()
import _ from 'lodash'
import {ElMessage, ElMessageBox} from 'element-plus'
import cache from "@/plugins/cache"
import TeamSignStep from "@/viewsPc/match/components/teamSignStep"
import CoachInfoRow from "@/viewsPc/match/components/coachInfo-row"
import SignInfoTable from "@/viewsPc/match/components/signInfo-table"
import ZuTable from '@/viewsPc/match/components/zu-table'
import SingleSignStep from "@/viewsPc/match/components/singleSignStep";
import MatchInfoRow from "@/viewsPc/match/components/matchInfo-row";
import useUserStore from "@/store/modules/user";
import {getPerPersonList} from "@/apiPc/match";
import {useStorage} from "@vueuse/core/index";
const language= useStorage('language',0)
const data = reactive({
coachForm: {}, activeStep: 2,
tableData: [],
signInfoList: [],
zuTableList: [],
choosedList: [],
myMemberTable: [],
extraPersonInfoMapList: [],
teamList: [],
extraform: [],
groupId: 0,
signType: '',
coachOrLeaderFlag: null,
noPhotoCanSign: null,
showResult: false,
showExtraForm: false,
loadingProject: false,
extraTableHead: [],
activeTeam: '',
names: {},
choosedchoosed: [],
mateChosed: [],
projectIds: [],
projectList: [],
choosed2List: [], projectQuery: {}, tableType: 1,
})
const {
activeTeam,
names,
tableData,
myMemberTable,
signInfoList,
zuTableList,
choosedList,
showExtraForm,
extraPersonInfoMapList,
teamList,
extraform,
groupId,
signType,
coachOrLeaderFlag,
showResult,
noPhotoCanSign,
extraTableHead,
coachForm,
projectIds,
choosedchoosed,
mateChosed,
activeStep,
projectList,
choosed2List,
loadingProject,
projectQuery,
tableType
} = toRefs(data)
const matchId = ref(route.query.matchId)
let signInfoType = null
const form = ref({})
const showPersonList = ref(false)
const signEndTime = ref('')
const userId = ref('')
const myId = ref('')
onMounted(() => {
if (useUserStore().user) {
userId.value = useUserStore().user.userId
}
signType.value = route.query.signType
getSignInfoList()
getMatch(matchId.value)
getMyInfo()
getMyMemberTable()
getMySignInfo()
})
function getMyInfo() {
match.getMyPersonInfo().then(res => {
form.value = res.data
myId.value = res.data.id
getProjectList()
}).catch(err => {
router.push({name: 'home'})
})
}
function getMyMemberTable() {
//
match.getPerPersonList({cptId: matchId.value, searchLabels: '1,2,3,4,5,6'}, userId.value).then(res => {
myMemberTable.value = res.rows
if(res.rows.length > 0){
showPersonList.value = true
}
})
}
function addAccompany() {
proxy.$refs['dialogAddCoachEnRef'].open({
title: language.value == 0 ? '添加随行人员' : 'Add accompanying personnel',
cptId: matchId.value,
id: 0
})
}
function changeMeDone(mateId) {
console.log(mateId)
getMyInfo()
getProjectList()
}
let chargeFlag
function getMatch(id) {
match.getMatchById({
id: id
}).then(res => {
signEndTime.value = res.data.signEndTime
chargeFlag = res.data.chargeFlag
noPhotoCanSign.value = res.data.noPhotoCanSign
coachOrLeaderFlag.value = res.data.coachOrLeaderFlag
extraform.value = JSON.parse(res.data.participantsInfo)
})
}
function getMySignInfo() {
// 获取已报
match.getMySignInfo({
cptId: matchId.value,
groupId: 0
}).then(res => {
tableData.value = res.data.signInfo
signInfoType = res.data.type
})
}
function getSignInfoList() {
match.getMySignInfoList({
cptId: matchId.value,
groupId: 0
}).then(res => {
signInfoList.value = res.data.singleData || []
zuTableList.value = res.data.zuData || []
})
}
function submitForm(n) {
if (signInfoList.value.length == 0) {
if (language.value == 0) {
ElMessage.warning('请至少选择一个项目')
} else {
ElMessage.warning('select at least one project')
}
return
}
if (signInfoType == '1') {
ElMessageBox.confirm(language.value==0?'已报项,前往我的报项':'Reported items, go to my submission',
language.value==0?'提示':'Tips', {
confirmButtonText: language.value==0?'确定':'OK',
cancelButtonText: language.value==0?'取消':'Cancel',
type: 'warning'
}).then(() => {
router.push({name: 'myMatch'})
})
return
}
if (extraform.value && extraform.value.length > 0) {
let needBuchong = false
for (const e of extraform.value) {
if (e.status == '0') {
needBuchong = true
}
}
for (const s of signInfoList.value) {
if (s.extraPersonInfo == null && needBuchong) {
ElMessage.warning(language.value == 0 ? '请完善运动员补充信息' : 'Complete Supplementary Information')
tableType.value = 0
return
}
}
}
if (showPersonList.value) {
if (myMemberTable.value.length == 0) {
ElMessageBox.confirm(language.value == 0 ? '是否继续添加随行人员?' : 'Do you want to add casual personnel?',
language.value == 0 ? '提示' : 'Tip', {
confirmButtonText: language.value == 0 ? '是' : 'Yes',
cancelButtonText: language.value == 0 ? '否,进入下一步' : 'NO,Go Next',
type: 'warning'
}).then(() => {
}).catch(() => {
commit()
})
} else {
commit()
}
} else {
ElMessageBox.confirm(language.value == 0 ? '是否添加随行人员?' : 'Do you want to add casual personnel?',
language.value == 0 ? '提示' : 'Tip', {
confirmButtonText: language.value == 0 ? '是' : 'Yes',
cancelButtonText: language.value == 0 ? '否,进入下一步' : 'NO,Go Next',
type: 'warning'
}).then(() => {
showPersonList.value = true
}).catch(() => {
commit()
})
}
// if (n == 0) {
// ElMessageBox.confirm(language.value==0?`您当前的操作为暂存,并不是提交审核,
// 必须在报名截止时间${signEndTime.value}之前完成提交。
// 您也可以在个人中心-我的报名中,找到这条报名,点击提交审核。`:
// `Your current operation is temporary and not submitted for review,
// Submission must be completed before the registration deadline${signEndTime.value}。
// You can also find this registration in the My Registration section of your personal center and click submit for review.`,
// language.value == 0 ? '提示' : 'Tip', {
// confirmButtonText: language.value == 0 ? '去个人中心' : 'Go My Registration ',
// cancelButtonText: language.value == 0 ? '知道了' : 'OK',
// type: 'warning'
// }).then((res) => {
// console.log(res)
// router.push({name: 'myMatch'})
// })
// }
}
function commit() {
router.push({
name: 'signPreview',
query: {
matchId: matchId.value
}
})
// ElMessageBox.confirm(language.value == 0 ? '确定提交吗?' : 'Are you sure to submit?',
// language.value == 0 ? '提示' : 'Tip',
// {
// confirmButtonText: language.value == 0 ? '确定' : 'Yes',
// cancelButtonText: language.value == 0 ? '取消' : 'Cancel',
// }).then(()=>{
// match.commitSign({
// groupId: 0,
// cptId: matchId.value
// }).then(res => {
// router.push({
// name: `commitDone`,
// params: {
// orderId: res.data
// }
// })
// })}
// )
}
function getProjectList() {
projectIds.value = []
loadingProject.value = true
//根据已选人员id 获取项目列表
var obj = {}
if (mateChosed.value.length > 0 && form.value.danceMate) {
obj = {
cptId: matchId.value,
perIds: `${myId.value},${form.value.danceMate?.id}`,
name: projectQuery.value.name
}
} else {
obj = {
cptId: matchId.value,
perIds: myId.value,
name: projectQuery.value.name
}
}
match.getProjectPageByPerIds(obj).then(res => {
projectList.value = res.rows
loadingProject.value = false
}).catch(err => {
loadingProject.value = false
ElMessage.warning(err.msg)
})
}
function addCoach() {
if (signInfoType == '2') {
match.recoverMySign({
cptId: matchId.value,
groupId: groupId.value
}).then(res => {
if (res.msg.indexOf('Exception:') > -1) {
const msg = res.msg.slice(10)
ElMessageBox.confirm(msg, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
console.log('用户点击确定')
})
return
}
getMySignInfo()
})
}
const params = {
title: '新增运动员',
id: 0,
groupId: groupId.value
}
proxy.$refs['dialogEditWdsfRef'].open(params)
}
function delperson(p) {
//删除团队下的人
let text = ''
let t = '提示'
let s = '确定'
let c = '取消'
let msg = '操作成功'
if (language.value == 0) {
text = `确定删除${p.realName}吗?`
} else {
text = `Delete ${p.realName}?`
t = 'Tips'
s = 'Confirm'
c = 'Cancel'
msg = ' Successful!'
}
ElMessageBox.confirm(text, t, {
confirmButtonText: s,
cancelButtonText: c,
type: 'warning'
}).then(() => {
match.delPerson(p.id).then(res => {
ElMessage.success(msg)
getMyMemberTable()
getMyInfo()
})
})
}
function signUp() {
if (projectIds.value.length == 0) {
if (language.value == 0) {
ElMessage.warning('请选择项目')
} else {
ElMessage.warning('Please select project')
}
return
}
let obj = {
projectIds: projectIds.value.toString(),
groupId: 0
}
if (mateChosed.value.length > 0 && form.value.danceMate) {
obj.athleteIds= `${myId.value},${form.value.danceMate?.id}`
} else {
obj.athleteIds= myId.value
}
match.sportsmanDone(obj).then(res => {
getSignInfoList()
getProjectList()
})
}
function removeThis(id) {
ElMessageBox.confirm(language.value == 0 ? '确定移除这条报项吗?' : 'Are you sure to remove this report item',
language.value == 0 ? '提示' : 'Tips', {
confirmButtonText: language.value == 0 ? '确定' : 'Confirm',
cancelButtonText: language.value == 0 ? '取消' : 'Cancel',
type: 'warning'
}).then(() => {
match.deleteSign(id).then(res => {
// 重新获取已报名信息
ElMessage.success(language.value == 0 ? '已移除该报项' : 'success')
getSignInfoList()
getProjectList()
})
})
}
function changeCoach(cptId, groupId) {
// 更换教练
const params = {
title: '修改教练',
groupId: groupId,
cptId: cptId
}
proxy.$refs['popChangeCoach'].open(params)
}
function goMySign() {
router.push({
name: 'myMatch'
})
}
const goPersonInfo = (row) => {
if (signInfoType == '1') {
ElMessageBox.alert(
language.value == 0 ? '已报项,前往我的报项' : 'Reported items, go to my submission',
language.value == 0 ? '提示' : 'Tips', {
confirmButtonText: 'OK',
callback: (Action) => {
router.push({name: 'myMatch'})
}
})
return
}
// 完善补充信息
console.log(row)
// debugger
const params = {
matchId: matchId.value,
title: language.value==0?'完善补充信息':'Complete the supplementary information',
participantsInfoArr: extraform.value,
personId: row.personInfo.id,
extraId: row.extraPersonInfo?.id || 0,
isNational:true
}
proxy.$refs['popExtraForm'].open(_.cloneDeep(params))
}
function downloadVoucher() {
// 下载凭证
proxy.download(
`/pdf/getPayedOrderPdf/${matchId.value}/${groupId.value || 0}`, {}, '报项凭证.pdf'
)
}
function editPerson() {
proxy.$refs['dialogEditWdsfRef'].open({
title: language.value == 0 ? '编辑个人信息' : 'Edit My Information',
isMe: true
})
}
function addMate() {
proxy.$refs['dialogEditWdsfRef'].open({
title: language.value == 0 ? '添加舞伴' : 'Add My Mate',
isMe: false,
cptId:matchId.value,
id: 0
})
}
function editMate(obj) {
proxy.$refs['dialogEditWdsfRef'].open({
title: language.value == 0 ? '编辑舞伴' : 'Edit My Mate',
isMe: false,
form: obj || {},
cptId:matchId.value,
id: obj?.id || 0
})
}
function delMate(mate) {
delperson(mate)
// ElMessageBox.confirm(language.value == 0 ? '确定删除队友吗?' : 'Are you sure to delete the teammate?',
// language.value == 0 ? '提示' : 'Tip',
// {
// confirmButtonText: language.value == 0 ? '确定' : 'Yes',
// cancelButtonText: language.value == 0 ? '取消' : 'Cancel',
// }).then(()=>{
//
// })
}
function changeMate(e) {
console.log(e, mateChosed.value,form.value.danceMate.passportUrl)
if(form.value.danceMate.passportUrl==''||!form.value.danceMate.passportUrl){
mateChosed.value = []
ElMessageBox.confirm(language.value == 0 ? '请先上传舞伴的有效证件' : 'Please upload the valid certificate of the teammate',
language.value == 0 ? '提示' : 'Tip',
{
confirmButtonText: language.value == 0 ? '确定' : 'Yes',
cancelButtonText: language.value == 0 ? '取消' : 'Cancel',
}).then(()=>{
editMate(form.value.danceMate)
return
}).catch(()=>{
return
})
}
getProjectList()
}
function switchTabletype() {
if (tableType.value == 0) {
tableType.value = 1
} else {
tableType.value = 0
}
}
</script>
<style scoped lang="scss">
:deep(.el-checkbox__label) {
flex: 1 1 auto;
}
.flexBetweenBox {
width: 100%;margin-right: 0;
height: auto;
border-bottom: 1px solid #eee;
padding: 0 10px;
}
.flexBetweenBox:nth-child(odd) {
background: #FAFBFD;
}
.flexBetween {
padding: 10px;
border-left: 1px solid #eee;
.l {
div {
margin: 4px 0 0;
color: #999;
}
}
}
.app-container {
padding: 0;
background: #F5F7F9;
}
.panel-footer .el-button--success {
background: #254385;
border: none;
padding: 0 40px;
font-size: 16px;
}
.panel-footer .el-button--success.is-plain {
background: #fff;
border: 1px solid #2ED981;
color: #2ED981;
}
.hasChoose {
margin: 0 0 20px;
display: flex;
justify-content: space-between;
button {
position: relative;
margin: 10px;
}
.choseItem {
margin: 10px;
position: relative;
.poClose {
position: absolute;
right: -6px;
top: -12px;
z-index: 1;
}
}
}
.chooseForm {
:deep(.el-form-item__content) {
background: rgba(245, 247, 249, 0.38);
padding: 20px 40px 10px;
}
.el-checkbox {
height: auto;
margin-right: 20px;
}
:deep(.el-checkbox__input) {
position: absolute;
right: 0;
top: 0;
}
.name {
text-align: center;
}
}
:deep(.el-avatar) > img {
width: 100%;
}
.panel {
height: 100%;
}
.border-info {
.item {
margin: 5px 0;
color: #4C5359;
font-size: 14px;
label {
font-size: 14px;
margin-right: 14px
}
}
}
.ttbb {
font-size: 14px;
color: #4C5359;
display: flex;
justify-content: center;
div {
padding: 20px;
position: relative;
cursor: pointer;
}
div:first-child::after {
content: '';
position: absolute;
right: 0;
background: #ccc;
width: 1px;
height: 14px;
top: 0;
bottom: 0;
margin: auto;
}
.active {
color: var(--el-color-primary);
&::before {
width: 33px;
content: '';
position: absolute;
height: 2px;
bottom: 14px;
left: 0;
right: 0;
margin: auto;
background: #453DEA;
border-radius: 1px;
}
}
}
.roletd {
.ml5 {
display: inline-block
}
}
.mName{color: #000;font-size: 15px;display: inline-block;max-width: 6.5em;text-overflow: ellipsis;
overflow: hidden;}
</style>
......@@ -18,9 +18,10 @@
</el-button>
</div>
<div class="panel-body" style="padding: 10px">
<div class="tip text-right">
*{{ language == 0?'可通过[选手管理],增加和编辑运动员':'You can add and edit athletes through [Athlete Management]' }}
</div>
<div style="margin: 0 4px 10px;display: flex">
<!-- 可通过选手管理,增加和编辑运动员-->
<el-select multiple v-model="choosedchoosed" collapse-tags-tooltip filterable
@change="changechoosed">
<el-option v-for="c in athletesList" :key="c.id" :label="c.xing + c.ming" :value="c.id">
......@@ -601,7 +602,7 @@ function removeCurproject() {
projectIds.value = _.without(projectIds.value, currProjectId.value)
}
function checkTwo(a,b) {
match.checkMate({per1Id:a,per2Id:b}).then(res=>{
match.checkMate({per1Id:a,per2Id:b,cptId:matchId.value}).then(res=>{
if(!res.data){
ElMessage.warning(language.value == 0 ? '他们不是固定组合':'They\'re not a couple')
}
......
......@@ -8,7 +8,7 @@
<el-row :gutter="30" class="mt30">
<el-col :lg="12" class="touxiang">
<el-form-item prop="picUrl" :label="language==0?'个人照片':'photo'">
<el-form-item prop="picUrl" :label="language==0?'个人照片':'photo'" required>
<ImageUpload2
v-model="form.picUrl" :crop-height="280" :crop-width="200" class="threeFour" :limit="1"
:is-show-tip="false"
......@@ -18,14 +18,11 @@
<span v-if="form.wdsfMin">{{form.wdsfMin}}</span>
<el-input v-else v-model="form.wdsfMin" type="number"/>
</el-form-item>
<el-form-item :label="language==0?'姓氏':'surname'" prop="xing" required>
<el-input v-model="form.xing"/>
</el-form-item>
<el-form-item :label="language==0?'名':'name'" prop="ming" required>
<el-input v-model="form.ming"/>
<el-form-item :label="language==0?'姓名':'Name'" prop="realName" required>
<el-input v-model="form.realName"/>
</el-form-item>
<el-form-item :label="language==0?'证件类型':'ID type'" prop="idcType" required>
<el-select v-model="form.idcType" style="width: 100%;" :disabled="editgay">
<el-select v-model="form.idcType" style="width: 100%;" :disabled="editgay&&form.idcType=='0'">
<el-option
v-for="item in certificates"
:key="item.value"
......@@ -35,10 +32,11 @@
</el-select>
</el-form-item>
<el-form-item :label="language==0?'证件号码':'ID NO'" prop="idcCode" required>
<el-input v-model="form.idcCode" @blur="checkCode" :disabled="editgay"/>
<el-input v-model="form.idcCode" @blur="checkCode" :disabled="editgay&&form.idcType=='0'"/>
</el-form-item>
<el-form-item :label="language==0?'有效证件':'Valid Passport'" required :required="form.idcType!='0'">
<el-form-item :label="language==0?'有效证件':'Valid Passport'" :required="form.idcType!='0'">
<file-upload v-model="form.passportUrl" :limit="1" :is-show-tip="false" />
<span class="tip">*请上传有效证件扫描件</span>
</el-form-item>
<el-form-item :label="language==0?'性别':'Gender'" prop="sex">
<el-radio-group v-model="form.sex" :disabled="form.idcType=='0'">
......@@ -60,8 +58,9 @@
<el-option v-for="l in labels" :key="l.value" :value="l.value" :label="language==0?l.label:l.enlabel"/>
</el-select>
</el-form-item>
<el-form-item :label="language==0?'手机号码':'Phone'" prop="phone">
<el-form-item :label="language==0?'手机号码':'Phone'" prop="phone" required>
<el-input v-model="form.phone" type="number"/>
<span class="tip">*若未成年人没有手机号,请填写家长号码</span>
</el-form-item>
......@@ -133,8 +132,7 @@ const data = reactive({
sex:'0'
},
rules: {
xing: [{required: true, message: '必填', trigger: 'blur'}],
ming: [{required: true, message: '必填', trigger: 'blur'}],
realName: [{required: true, message: '必填', trigger: 'blur'}],
// countryId: [{required: true, message: '必填', trigger: 'change'}],
idcType: [{required: true, message: '必填', trigger: 'change'}],
idcCode: [{required: true, message: '必填', trigger: 'blur'}],
......@@ -142,13 +140,12 @@ const data = reactive({
// regionId: [{ required: true, message: '必填', trigger: 'change' }],
birth: [{required: true, message: '必填', trigger: 'change'}],
// address: [{ required: true, message: '必填', trigger: 'blur' }],
// picUrl: [{required: true, message: '必填', trigger: 'blur'}],
picUrl: [{required: true, message: '必填', trigger: 'blur'}],
sex: [{required: true, message: '必填', trigger: 'change'}],
labelArr: [{required: true, message: '必填', trigger: 'change'}]
},
rules_cn:{
xing: [{required: true, message: 'required', trigger: 'blur'}],
ming: [{required: true, message: 'required', trigger: 'blur'}],
realName: [{required: true, message: 'required', trigger: 'blur'}],
// countryId: [{required: true, message: 'required', trigger: 'change'}],
idcType: [{required: true, message: 'required', trigger: 'change'}],
idcCode: [{required: true, message: 'required', trigger: 'blur'}],
......@@ -156,7 +153,7 @@ const data = reactive({
// regionId: [{ required: true, message: 'required', trigger: 'change' }],
birth: [{required: true, message: 'required', trigger: 'change'}],
// address: [{ required: true, message: 'required', trigger: 'blur' }],
// picUrl: [{required: true, message: 'required', trigger: 'blur'}],
picUrl: [{required: true, message: 'required', trigger: 'blur'}],
sex: [{required: true, message: 'required', trigger: 'change'}],
labelArr: [{required: true, message: 'required', trigger: 'change'}]
},
......@@ -185,13 +182,14 @@ onMounted(() => {
})
const editgay = ref(false)
const open = (params) => {
console.log(params.label)
show.value = true
title.value = params.title
groupId.value = params.groupId || '0'
isMe.value = params.isMe
if(params.label){
form.value.labelArr= [params.label]
} else {
form.value.labelArr = []
}
if(language.value == 0){
form.value.countryId = 240
......@@ -261,20 +259,17 @@ function getRegionsList() {
function checkCode() {
if (form.value.idcType=='0' && form.value.idcCode) {
giveBirthDay()
// giveBirthDay()
var obj = {
idcType: form.value.idcType,
idcCode: form.value.idcCode
idcCode: form.value.idcCode,
name: form.value.realName
}
// match.checkPerson(obj).then(res => {
// if (res.data.idcCode != null) {
// form.value = res.data
// if (form.value.label != null) {
// form.value.labelArr = form.value.label.split(',')
// }
// form.value.groupId = groupId.value
// }
// })
match.checkIdcCode(obj).then(res => {
if (res.data) {
form.value.birth = res.data.birth
form.value.sex = res.data.sex
}
})
}
}
......@@ -324,10 +319,10 @@ function submitForm() {
return
}
}
if(!form.value.passportUrl){
ElMessage.warning(language.value == 0 ? '请上传有效证件' :'Please upload your passport file')
return
}
// if(!form.value.passportUrl){
// ElMessage.warning(language.value == 0 ? '请上传有效证件' :'Please upload your passport file')
// return
// }
if (typeof (form.value.regionId) === 'object') {
form.value.regionId = _.last(form.value.regionId)
}
......
......@@ -281,7 +281,7 @@ function submitForm() {
}
}
function addPersonal() {
match.savePersonForMyPerson(form.value).then(res => {
match.savePersonForMyPerson2(form.value).then(res => {
ElMessage.success('保存成功')
show.value = false
emit('submitForm', res.data)
......
......@@ -38,7 +38,7 @@
<el-table ref="allSportmenTable" v-loading="loading" :data="tableData" height="60vh"
@selection-change="handleSelectionChange">
<!-- <el-table-column type="selection" :label="language==0?'选择':'Selection'" :selectable="selectable"/>-->
<el-table-column align="center" type="index" :label="language==0?'序号':'Index'" width="60" :selectable="selectable"/>
<el-table-column align="center" type="index" :label="language==0?'序号':'Index'" width="70" :selectable="selectable"/>
<el-table-column v-if="isNational" :label="language==0?'WDSF 会员号':'WDSF MIN'" prop="wdsfMin" width="100"/>
<el-table-column align="center" :label="language==0?'姓氏':'Surname'" prop="xing" min-width="100"/>
<el-table-column align="center" :label="language==0?'名':'Name'" prop="ming" min-width="100"/>
......@@ -92,7 +92,9 @@
<!-- </template>-->
</el-dialog>
<!-- 国内赛运动员-->
<add-coach ref="dialogAddCoach" @submitForm="getList"/>
<!-- 国际赛运动员-->
<add-wdsf ref="dialogAddWdsf" @submitForm="getList"/>
<Import ref="dialogImportProps" @submitForm="getList"/>
</template>
......
<template>
<el-dialog v-model="show" :title="title" width="1000px" append-to-body @close="close" center>
<div class="funcBtns">
<el-button type="primary" @click="addMember">
{{ language == 0 ? '添加选手' : 'Add Player' }}
</el-button>
</div>
<div class="from-Card">
<el-form :inline="true" :model="query" class="mt20" label-width="60" size="small">
<el-form-item :label="language==0?'姓名':'Name'">
<el-input v-model="query.realName" style="width: 120px;" clearable/>
</el-form-item>
<el-form-item :label="language==0?'证件类型':'ID Type'" v-if="!isNational">
<el-select v-model="query.idcType" style="width: 100px;" clearable @change="getList" @clear="getList">
<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="language==0?'证件号码':'ID NO.'" v-if="!isNational">
<el-input v-model="query.idcode" style="width: 120px;" clearable/>
</el-form-item>
<!-- <el-form-item label="角色">-->
<!-- <el-input v-model="query.label" style="width: 120px;" clearable/>-->
<!-- </el-form-item>-->
<el-form-item>
<el-button type="primary" @click="getList">{{language==0?'查询':'Search'}}</el-button>
</el-form-item>
<el-form-item class="fr">
<el-button @click="resetChose" type="primary" plain>{{language==0?'清空选择':'Clear Selection'}}</el-button>
</el-form-item>
</el-form>
</div>
<p v-if="noPhotoCanSign == 0" class="text-danger">{{ language==0?'*需上传照片才可报名':'*Please upload photo before sign up' }}</p>
<el-table ref="allSportmenTable" v-loading="loading" :data="tableData" height="60vh"
@selection-change="handleSelectionChange" :row-key="getRowKeys">
<el-table-column type="selection" :label="language==0?'选择':'Selection'" :reserve-selection="true" :selectable="selectable"/>
<!-- <el-table-column align="center" type="index" :label="language==0?'序号':'Index'" width="60" :selectable="selectable"/>-->
<el-table-column v-if="isNational" :label="language==0?'WDSF MIN':'WDSF MIN'" prop="wdsfMin" width="100"/>
<el-table-column align="center" :label="language==0?'姓氏':'Surname'" prop="xing" min-width="100"/>
<el-table-column align="center" :label="language==0?'名':'Name'" prop="ming" min-width="100"/>
<el-table-column align="center" v-if="isNational" :label="language==0?'代表':'Representing'" prop="representing" min-width="120"/>
<el-table-column align="center" v-if="!isNational" :label="language==0?'所属国家/地区':'Nationality'" prop="countryName" min-width="110"/>
<el-table-column :label="language==0?'性别':'Gender'" align="center" prop="sexStr"/>
<el-table-column align="center" v-if="isNational" :label="language==0?'年龄组':'Age group'" prop="ageGroup" min-width="100"/>
<el-table-column align="center" v-if="isNational" :label="language==0?'舞种':'Division'" prop="division" min-width="100"/>
<el-table-column v-if="!isNational" :label="language==0?'年龄':'Age'" prop="age"/>
<el-table-column v-if="!isNational" :label="language==0?'出生日期':'Date of Birth'" prop="birth" width="130"/>
<el-table-column v-if="!isNational" :label="language==0?'证件类型':'ID Type'" prop="idcTypeStr" width="120"/>
<el-table-column v-if="!isNational" :label="language==0?'证件号码':'ID NO.'" prop="idcCode" width="200"/>
<!-- <el-table-column label="会员角色" width="200">-->
<!-- <template #default="scope">-->
<!-- <div>-->
<!-- <div style="white-space: nowrap" class="esp">-->
<!-- <span v-for="item in scope.row.label?.split(',')" :key="item.id">-->
<!-- <span v-if="item==='0'" class="ml5">{{ language==0?'运动员':'athletes' }}</span>-->
<!-- <span v-if="item==='1'" class="ml5">{{ language==0?'教练':'coach' }}</span>-->
<!-- <span v-if="item==='2'" class="ml5">{{ language==0?'领队':'team leader' }}</span>-->
<!-- <span v-if="item==='3'" class="ml5">{{ language==0?'队医':'team doctor' }}</span>-->
<!-- <span v-if="item==='4'" class="ml5">{{ language==0?'翻译':'translator' }}</span>-->
<!-- <span v-if="item==='5'" class="ml5">{{ language==0?'官员':'official' }}</span>-->
<!-- <span v-if="item==='6'" class="ml5">{{ language==0?'其他':'other' }}</span>-->
<!-- </span>-->
<!-- </div>-->
<!-- </div>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column :label="language==0?'操作':'Actions'" :width="language==0?180:200" fixed="right" align="center">
<template #default="scope">
<span class="text-primary pointer" v-if="scope.row.passportUrl" @click="editPerson(scope.row)">
{{language==0?'编辑':'Edit'}}
</span>
<span v-else class="text-danger pointer" @click="editPerson(scope.row)">{{language==0?'上传证件':'Upload Valid Passport'}}</span>
<span class="text-primary pd10 pointer" v-if="scope.row.userId=='0'&&mateId!=scope.row.id" @click="deletePerson(scope.row)">
{{language==0?'删除':'Delete'}}
</span>
</template>
</el-table-column>
</el-table>
<paginationPc
v-show="total>0"
v-model:page="query.pageNum"
v-model:limit="query.pageSize"
:total="total"
@pagination="getList"
/>
<template #footer>
<div class="dialog-footer text-center">
<el-button type="primary" @click="submit">{{language==0?'确定':'Confirm'}}</el-button>
<el-button @click="cancel">{{language==0?'取消':'Cancel'}}</el-button>
</div>
</template>
</el-dialog>
<!-- 国内赛运动员-->
<add-coach ref="dialogAddCoach" @submitForm="getList"/>
<!-- 国际赛运动员-->
<add-wdsf ref="dialogAddWdsf" @submitForm="getList"/>
<Import ref="dialogImportProps" @submitForm="getList"/>
</template>
<script setup>
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 AddWdsf from '../components/addWdsf'
import Import from '../components/import'
import {useStorage} from "@vueuse/core/index";
import {delPersonForPersonal, getPerPersonList} from "@/apiPc/match";
import useUserStore from "@/store/modules/user";
import {ElMessage, ElMessageBox} from "element-plus";
import _ from "lodash";
const language= useStorage('language',0)
const user = useUserStore().user
const {proxy} = getCurrentInstance()
const emit = defineEmits([ 'transfer'])
const data = reactive({
query: {
label:'0',
pageSize: 10,
pageNum:1
},
tableData: [],
show: false,
loading: false,
title: '选择运动员',
noPhotoCanSign: 0,
total: 0,
isNational:false,
mateId:0
})
const {query, tableData, show, title, loading, noPhotoCanSign,total,isNational,mateId} = toRefs(data)
const certificates = ref([
{
value: '0',
label: language.value == 0 ? '居民身份证' : 'Resident ID card'
},
{
value: '1',
label: language.value == 0 ? '护照' : 'Passport'
},
{
value: '2',
label: language.value == 0 ? '其他' : 'Other'
}
])
let matchId
let choosedList = []
let choosedIds = []
const open = (params) => {
title.value = params.title
matchId = params.matchId
mateId.value = params.mateId
noPhotoCanSign.value = params.noPhotoCanSign
show.value = true
isNational.value = params.isNational
choosedList = params.choosedList
getList()
}
defineExpose({
open
})
const reSetChoosed = () => {
choosedIds = []
for (const p of choosedList) {
choosedIds.push(p.id)
}
console.log(choosedIds,choosedList)
for (const n of tableData.value) {
if (choosedIds.indexOf(n.id) > -1) {
proxy.$refs['allSportmenTable'].toggleRowSelection(n, true)
}
}
}
const resetChose = () => {
proxy.$refs['allSportmenTable'].clearSelection()
}
const selectable = (row) => {
if (!row.picUrl && noPhotoCanSign.value == 0) {
return false
} else if (!row.passportUrl) {
// ElMessageBox.confirm(language.value == 0 ? `请上传${row.realName}的有效证件` : `Please Upload ${row.realName}'s Valid Passport`)
return false
} else {
return true
}
}
const getList = () => {
loading.value = true
getPerPersonList(query.value,user.userId).then(res => {
total.value = res.total
// const startIndex = (query.value.pageNum - 1) * query.value.pageSize;
// const endIndex = startIndex + query.value.pageSize;
// tableData.value = res.rows.slice(startIndex, endIndex)
tableData.value = res.rows
nextTick(() => {
reSetChoosed()
})
loading.value = false
})
}
function handleSelectionChange(val) {
// console.log('change',val)
choosedList = val
for (const p of val) {
choosedIds.push(p.id)
}
//判断是否队友
if(val.length==2){
if(val[0].sex!=val[1].sex){
checkTwo(val[0].id,val[1].id)
}
}
if(val.length>0){
const newVal = _.last(val)
match.signgetSignInfoConflict({
cptId: matchId,
perId: newVal.id,
groupId: '0'
}).then(res => {
if (!res.data) {
ElMessage.warning(language.value == 0 ? '该人员已在其他团队中报名,请重新选择' : 'This person has already registered in another team, please select again')
proxy.$refs['allSportmenTable'].toggleRowSelection(newVal, false)
}
})
}
}
function checkTwo(a,b) {
match.checkMate({per1Id:a,per2Id:b,cptId:matchId}).then(res=>{
if(!res.data){
ElMessage.warning(language.value == 0 ? '他们不是固定组合':'They\'re not a couple')
proxy.$refs['allSportmenTable'].clearSelection()
}
})
}
function submit() {
if (choosedIds.length == 0) {
ElMessage.warning(language.value == 0 ? '请选择运动员' : 'Please select athletes')
return
}
emit('transfer', choosedList)
show.value = false
}
function getRowKeys(row) {
return row.id
}
function close() {
choosedIds = []
}
function cancel() {
show.value = false
}
function editPerson(row) {
console.log(isNational.value)
const params = {
id: row.id,
title: language.value == 0 ?'编辑人员':'Edit Person',
groupId: '0',
label: '0'
}
if (isNational.value){
proxy.$refs['dialogAddWdsf'].open(params)
} else {
proxy.$refs['dialogAddCoach'].open(params)
}
}
function addMember() {
console.log(isNational.value)
const params = {
title: language.value == 0 ?'添加人员':'Add',
id: 0,
groupId: '0',
label: '0'
}
if (isNational.value){
proxy.$refs['dialogAddWdsf'].open(params)
} else {
proxy.$refs['dialogAddCoach'].open(params)
}
}
function deletePerson(p) {
let text = ''
let t = '提示'
let s = '确定'
let c = '取消'
let msg = '操作成功'
if (language.value==0){
text = `确定删除${p.realName}${p.sex=='1'?'他':'她'}的舞伴吗?`
} else {
text = `Delete ${p.realName} ${p.sex=='1'?'he':'she'} and ${p.sex=='1'?'his':'hers'} dance mate?`
t = 'Tips'
s = 'Confirm'
c = 'Cancel'
msg = ' Successful!'
}
ElMessageBox.confirm(text, t, {
confirmButtonText: s,
cancelButtonText: c,
type: 'warning'
}).then(() => {
match.delPersonForPersonal(p.id).then(res => {
ElMessage.success(msg)
getList()
})
})
}
</script>
<style scoped lang="scss">
.el-form--inline .el-form-item {
width: auto;
}
</style>
<template>
<div class="collapsebox">
<div class="pd20">
<div class="fr mb20">
<el-input size="small" v-model="query.projectName" :prefix-icon="Search"
@change="getList" clearable/>
</div>
<el-table :data="list" border>
<el-table-column :label="language==0?'组别编号':'Event Code'" prop="code" align="center"></el-table-column>
<el-table-column :label="language==0?'组别编号':'Event Code'" prop="code" align="center" :min-width="language==0?70:100">
</el-table-column>
<el-table-column :label="language==0?'组别名称':'Event'" min-width="150" prop="name" align="center"></el-table-column>
<el-table-column :label="language==0?'舞种':'DISCIPLINE'" width="110" prop="danceType" align="center">
</el-table-column>
<el-table-column :label="language==0?'舞种明细':'Dance Detail'" width="120" prop="danceTypeDetailStr" align="center"></el-table-column>
<el-table-column :label="language==0?'舞种明细':'Dance Detail'" width="120" prop="danceTypeDetailStr" align="center">
</el-table-column>
<el-table-column :label="language==0?'参赛性别':'Sex'" align="center">
<template #default="scope">
......@@ -14,7 +22,7 @@
<span v-else>{{ scope.row.playType }}</span>
</template>
</el-table-column>
<el-table-column :label="language==0?'参赛年龄':'Age'" align="center" min-width="100">
<el-table-column :label="language==0?'参赛年龄':'Age'" align="center" :min-width="isNational?100:240">
<template #default="scope">
<div v-if="isNational">
<span v-if="scope.row.ageGroup == '0'" >{{ language==0?'不限制':'Unlimited' }}</span>
......@@ -34,8 +42,8 @@
<span v-if="scope.row.ageGroup == '14'" >Senior V</span>
</div>
<div v-else>
<div>{{ scope.row.birthPeriod }}</div>
<div>{{scope.row.birthPeriodSecond}}</div>
<div>{{ scope.row.birthPeriod.replace(',',language==0?' 至 ':' to ') }}</div>
<div>{{scope.row.birthPeriodSecond?.replace(',',language==0?' 至 ':' to ')}}</div>
</div>
</template>
</el-table-column>
......@@ -45,76 +53,40 @@
</template>
</el-table-column>
</el-table>
<!-- <table class="table" cellspacing="0" cellpadding="0" v-if="list.length > 0">-->
<!-- <tr v-if="language==0">-->
<!-- <th>组别编号</th>-->
<!-- <th>组别名称</th>-->
<!-- <th>舞种</th>-->
<!-- <th>舞种明细</th>-->
<!-- <th>参赛性别</th>-->
<!-- <th>参赛年龄</th>-->
<!-- <th>服务费(元)</th>-->
<!-- </tr>-->
<!-- <tr v-else>-->
<!-- <th>EVENT code</th>-->
<!-- <th>EVENT</th>-->
<!-- <th>DISCIPLINE</th>-->
<!-- <th>Dance Detail</th>-->
<!-- <th>Sex</th>-->
<!-- <th>Age</th>-->
<!-- <th>Registration Fee</th>-->
<!-- </tr>-->
<!-- <tr v-for="(p,index) in list" :key="index">-->
<!-- <td>{{ p.code }}</td>-->
<!-- <td>{{ p.name }}</td>-->
<!-- <td>{{ p.danceType }}</td>-->
<!-- <td>{{ p.danceTypeDetailStr }}</td>-->
<!-- <td>{{ p.playTypeStr }}</td>-->
<!-- <td>-->
<!--&lt;!&ndash; {{ isNational }}&ndash;&gt;-->
<!-- <div v-if="isNational">-->
<!-- <span v-if="p.ageGroup == '0'" >{{ language==0?'不限制':'Unlimited' }}</span>-->
<!-- <span v-if="p.ageGroup == '1'" >Juvenile I</span>-->
<!-- <span v-if="p.ageGroup == '2'" >Juvenile II</span>-->
<!-- <span v-if="p.ageGroup == '3'" >Juv1& II (comb.)</span>-->
<!-- <span v-if="p.ageGroup == '4'" >Junior I</span>-->
<!-- <span v-if="p.ageGroup == '5'" >Junior II</span>-->
<!-- <span v-if="p.ageGroup == '6'" >Juv I & II (comb.)</span>-->
<!-- <span v-if="p.ageGroup == '7'" >Youth</span>-->
<!-- <span v-if="p.ageGroup == '8'" >Under 21</span>-->
<!-- <span v-if="p.ageGroup == '9'" >Adult</span>-->
<!-- <span v-if="p.ageGroup == '10'" >Senior I</span>-->
<!-- <span v-if="p.ageGroup == '11'" >Senior II</span>-->
<!-- <span v-if="p.ageGroup == '12'" >Senior III</span>-->
<!-- <span v-if="p.ageGroup == '13'" >Senior IV</span>-->
<!-- <span v-if="p.ageGroup == '14'" >Senior V</span>-->
<!-- </div>-->
<!-- <div v-else>-->
<!-- <div>{{ p.birthPeriod }}</div>-->
<!-- <div>{{p.birthPeriodSecond}}</div>-->
<!-- </div>-->
<!-- &lt;!&ndash; <div>{{ p.birthAgeGroup }};{{p.birthAgeSecondGroup}}</div>&ndash;&gt;-->
<!-- </td>-->
<!-- <td>{{ language==0?'¥':'€' }}{{ p.serviceFee }}</td>-->
<!-- </tr>-->
<!-- </table>-->
<PaginationPc
v-show="total>0"
:total="total"
v-model:page="query.pageNum"
v-model:limit="query.pageSize"
@pagination="getList"
/>
</div>
<!-- <el-empty :image="`/img/order_no.png`" :image-size="228" v-if="list.length == 0" description=""/>-->
</div>
</template>
<script setup>
import {Search} from "@element-plus/icons-vue";
import {useStorage} from "@vueuse/core/index"
import {getProjectByCptId} from "@/apiPc/match";
import PaginationPc from "@/components/PaginationPc";
const language= useStorage('language',0)
const list = ref([])
const total = ref(0)
const query = ref({
projectName:'',
pageSize:10,
pageNum:1
})
const props = defineProps({
list: {
type: Array,
required: true,
default:[]
// list: {
// type: Array,
// required: true,
// default:[]
// },
matchId: {
type: String,
required: false
},
isNational: {
type: Boolean,
......@@ -122,6 +94,13 @@ const props = defineProps({
default: false
},
})
getList()
function getList() {
getProjectByCptId(props.matchId,query.value).then(res=>{
list.value = res.rows
total.value = res.total
})
}
</script>
<style scoped lang="scss">
......
......@@ -82,7 +82,7 @@
<!-- </div>-->
<div class="indexTitle" v-if="form.type==1 && form.cptProjectList?.length > 0"><h3 class="leftboderTT">Event settings</h3></div>
<div v-if="form.type==1 && form.cptProjectList?.length > 0">
<match-info-project-list :list="form.cptProjectList" :is-national="form.languageSource!='100'"/>
<match-info-project-list :match-id="form.id" :is-national="form.languageSource!='100'"/>
</div>
</div>
</template>
......
<template>
<!-- 已废弃-->
<div class="app-container" v-loading="loading">
<div class="mt30"/>
<div v-if="error">
......@@ -99,7 +100,7 @@
</div>
<matchInfo :form="matchData" v-if="menu[0].active==1"/>
<div v-if="menu[1].active==1">
<match-info-project-list :list="matchData.cptProjectList" />
<match-info-project-list :match-id="matchData.id" />
</div>
<match-schedule-list :match-data="matchData" v-if="menu[2].active==1"/>
<div v-if="menu[3].active==1">
......
......@@ -185,31 +185,48 @@
</div>
<matchInfo :form="matchData" v-if="menu[0].active==1"/>
<div v-if="menu[1].active==1">
<match-info-project-list :list="matchData.cptProjectList" :is-national="isNational"/>
<match-info-project-list :match-id="matchData.id" :is-national="isNational"/>
</div>
<match-schedule-list :match-data="matchData" v-if="menu[2].active==1"/>
<div v-if="menu[3].active==1">
<el-row :gutter="20" v-if="matchData.signType == '0'">
<el-col v-for="t in signDoneGroupList" :key="t.id" :span="8">
<div class="teamItem">
<el-avatar :size="60" :src="fillImgUrl(t.imgUrl||t.avatar)"/>
<span class="name">{{ t.name }}</span>
</div>
</el-col>
</el-row>
<el-row :gutter="20" class="pd20" v-else>
<el-col :span="24">
<el-table :data="signDoneGroupList">
<el-table-column prop="groupCode" :label="language == 0 ? '组别代码' :'EVENT CODE'" min-width="120"/>
<el-table-column prop="EVENT" :label="language == 0 ?'组别':'Group'" min-width="120"/>
<el-table-column prop="maleAthName" :label="language == 0 ?'男运动员':'man name'" min-width="150"/>
<el-table-column prop="femaleAthName" :label="language == 0 ?'女运动员':'woman name'" min-width="150"/>
<el-table-column prop="danceType" :label="language == 0 ?'舞种':'Division'" min-width="120"/>
<el-table-column prop="countryName" :label="language == 0 ?'国籍':'Representing'" min-width="130"/>
<el-table-column prop="groupName" :label="language == 0 ?'参赛队名称':'Team name'" min-width="150"/>
</el-table>
</el-col>
</el-row>
<div v-if="matchData.showPersonFlag=='1'">
<el-row :gutter="20" v-if="matchData.signType == '0'">
<el-col v-for="t in signDoneGroupList" :key="t.id" :span="8">
<div class="teamItem">
<el-avatar :size="60" :src="fillImgUrl(t.imgUrl||t.avatar)"/>
<span class="name">{{ t.name }}</span>
</div>
</el-col>
</el-row>
<el-row :gutter="20" class="pd20" v-else>
<el-col :span="24">
<div class="fr mb20">
<el-input size="small" v-model="queryGroupList.name" :prefix-icon="Search"
@change="getGroupListByCptId" clearable/>
</div>
<el-table :data="signDoneGroupList">
<el-table-column prop="groupCode" align="center" :label="language == 0 ? '组别代码' :'EVENT CODE'" min-width="120"/>
<el-table-column prop="group" :label="language == 0 ?'组别':'EVENT'" min-width="120"/>
<el-table-column prop="maleAthName" :label="language == 0 ?'男运动员':'man name'" min-width="150"/>
<el-table-column prop="femaleAthName" :label="language == 0 ?'女运动员':'woman name'" min-width="150"/>
<el-table-column prop="danceType" :label="language == 0 ?'舞种':'Division'" min-width="120"/>
<el-table-column prop="countryName" align="center" :label="language == 0 ?'国籍':'Representing'" min-width="130"/>
<el-table-column prop="groupName" align="center" :label="language == 0 ?'参赛队名称':'Team name'" min-width="150"/>
</el-table>
<PaginationPc
v-show="signDoneGroupListToTal>0"
:total="signDoneGroupListToTal"
v-model:page="queryGroupList.pageNum"
v-model:limit="queryGroupList.pageSize"
@pagination="getGroupListByCptId"
/>
</el-col>
</el-row>
</div>
<div v-else>
<el-empty :image="`/img/order_no.png`" :image-size="228" description=""/>
</div>
</div>
<div v-if="menu[4].active==1">
<!--成绩-->
......@@ -309,9 +326,9 @@ const {proxy} = getCurrentInstance()
import * as match from '@/apiPc/match'
import {toRefs} from '@vueuse/shared'
import {dayjs, ElMessage, ElMessageBox} from 'element-plus'
import useUserStore from "@/store/modules/user";
import {useStorage} from "@vueuse/core/index";
import useUserStore from "@/store/modules/user"
import {useStorage} from "@vueuse/core/index"
import {Search} from "@element-plus/icons-vue"
const user = useUserStore().user
const group = useUserStore().group
const data = reactive({
......@@ -333,6 +350,12 @@ const data = reactive({
{name: 'Event details', cn: '赛事详情', active: 0},
{name: 'Schedule', cn: '日程', active: 0}],
signDoneGroupList: [],
signDoneGroupListToTal:0,
queryGroupList:{
name:'',
pageSize:10,
pageNum:1
},
time: '',
startSign: '',
isNational:false
......@@ -343,10 +366,9 @@ const {
matchData,
matchId,
groupId,
activeName2,
menu,
menu1,
signDoneGroupList,
signDoneGroupList,signDoneGroupListToTal,queryGroupList,
time, startSign,isNational
} = toRefs(data)
const signTypePop = ref(false)
......@@ -370,7 +392,7 @@ function getMatchId() {
match.getMaList({topFlag: 1, status: 1}).then((res) => {
matchId.value = res.rows[0].id
getMatch(matchId.value)
getGroupListByCptId(matchId.value)
getGroupListByCptId()
})
}
......@@ -394,9 +416,10 @@ function getMatch(id) {
})
}
function getGroupListByCptId(id) {
match.getGroupListByCptId(id).then(res => {
signDoneGroupList.value = res.data
function getGroupListByCptId() {
match.getGroupListByCptId(matchId.value,queryGroupList.value).then(res => {
signDoneGroupList.value = res.rows
signDoneGroupListToTal.value = res.total
})
}
......@@ -552,7 +575,7 @@ function checkIsSign() {
).then(() => {
withDraw(res.data.orderId)
})
// return Promise.reject('rejected message')
return Promise.reject('rejected message')
break
case '2':
ElMessageBox.confirm(
......
......@@ -335,9 +335,6 @@ import MatchInfoRow from "@/viewsPc/match/components/matchInfo-row";
const {proxy} = getCurrentInstance()
const route = useRoute()
const router = useRouter()
const matchInfo = ref({})
const approved = ref(true)
const tableData = ref([])
const payType = ref('2')
const orderId = ref(route.query.orderId)
const matchId = ref()
......
......@@ -174,7 +174,8 @@ const data = reactive({
// address: { required: true, message: 'required', trigger: 'blur' }
},
coachOrLeaderFlag: '',
matchInfo:{}
matchInfo:{},
languageSource:''
})
const {
isNational,matchData,
......@@ -186,7 +187,7 @@ const {
cptId,
rules,rules_en,
regionsList,countryList,matchInfo,
coachOrLeaderFlag, accept,typeOptions
coachOrLeaderFlag, accept,typeOptions,languageSource
} = toRefs(data)
const uploadUrl = ref('/upload/upLoadToFileServer')
......@@ -196,6 +197,7 @@ onMounted(() => {
getGroupInfo()
signType.value = route.query.signType
isNational.value = route.query.isNational
languageSource.value = route.query.languageSource
getRegionsList()
getCountryList()
......@@ -325,7 +327,8 @@ function goNext() {
query: {
matchId: cptId.value,
groupId: groupId.value,
isNational: isNational.value
isNational: isNational.value,
languageSource:languageSource.value
}
})
}
......
......@@ -37,6 +37,9 @@
<el-form-item :label="language==0?'负责人姓名':'Contact Person'" prop="contactPerson">
<el-input v-model="form.contactPerson" :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?'邮箱':'Email'" required prop="contactEmail">
<el-input v-model="form.contactEmail" type="email" :placeholder="language==0?'请输入内容':''"/>
</el-form-item>
......@@ -148,13 +151,13 @@ const data = reactive({
regionsList: [],
countryList: [],
participantsInfoArr: [],
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' },
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' }
......@@ -169,11 +172,11 @@ const data = reactive({
address: { required: true, message: 'required', trigger: 'blur' }
},
coachOrLeaderFlag: '',
languageSource: '',
matchInfo:{}
})
const {
isRanks,matchData,
rankList,
matchData,
form,
groupId,
signType,
......@@ -181,7 +184,7 @@ const {
cptId,
rules,rules_en,
regionsList,countryList,matchInfo,
coachOrLeaderFlag, accept,typeOptions
coachOrLeaderFlag, accept,typeOptions,languageSource
} = toRefs(data)
const uploadUrl = ref('/upload/upLoadToFileServer')
......@@ -190,7 +193,7 @@ onMounted(() => {
// 获取团体信息
getGroupInfo()
signType.value = route.query.signType
languageSource.value = route.query.languageSource
getRegionsList()
getCountryList()
match.getMatchById({ id: cptId.value }).then(res => {
......@@ -249,11 +252,6 @@ function getGroupInfo() {
})
}
function getTeamList() {
return match.getMyTeamList(cptId.value, groupId.value).then(response => {
rankList.value = response.data
})
}
function goPrev() {
router.go(-1)
......@@ -315,7 +313,8 @@ function goNext() {
query: {
matchId: cptId.value,
groupId: groupId.value,
signType: signType.value
signType: signType.value,
languageSource:languageSource.value
}
})
}
......
......@@ -330,7 +330,7 @@ function bigNext(){
ElMessage.warning(language.value == 0 ? '请选择性别' : 'Please select your gender')
return
}
if(user.utype=='3'){
if(user&&user.utype=='3'){
let obj = {
card: form.value.card,
userId: user.userId,
......
......@@ -93,7 +93,7 @@
</el-icon>
<div v-if="language==0">
我已阅读并接受<a class="text-primary" @click.stop="showAgreeMent">《注册协议》</a>
<a class="text-primary" @click.stop="showAgreeMent">《个人信息保护政策》</a>
<a class="text-primary" @click.stop="showPolicy">《个人信息保护政策》</a>
</div>
<div v-else style="white-space: nowrap">
I have read and agree to the User
......
......@@ -76,15 +76,15 @@ export default defineConfig(({ mode, command }) => {
rewrite: (p) => p.replace(/^\/dev-api\/ztx-match/, '')
},
'/dev-api/ztx-webSite': {
// target: 'https://dance.itechtop.cn/stage-api',
target: 'http://192.168.1.118:8081/',
target: 'https://dance.itechtop.cn/stage-api',
// target: 'http://192.168.1.118:8081/',
changeOrigin: true,
rewrite: (p) => p.replace(/^\/dev-api\/ztx-webSite/, '')
},
'/dev-api': {
// target: 'http://192.168.1.118:8081/',
target: 'http://192.168.1.118:8081/',
// target: 'https://dance.itechtop.cn/stage-api',
target: 'https://wdsfwuxicenter.com/stage-api',
// target: 'https://wdsfwuxicenter.com/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!