815a2ac2 by 杨炀

no message

1 parent 05ebb5dc
Showing 48 changed files with 1256 additions and 347 deletions
No preview for this file type
No preview for this file type
......@@ -91,6 +91,20 @@ export function getMyGroupList() {
method: 'get'
})
}
export function checkWdsf(query) {
return request({
url: `/league/wdsf/check`,
method: 'get',
params:query
})
}
export function registerSingle(data) {
return request({
url: `/pcRegisterSingleAboard`,
method: 'post',
data:data
})
}
// 根据Id获取我的团队
export function getGroupInfo() {
......@@ -192,6 +206,12 @@ export function saveMyTeam(data) {
data: data
})
}
export function withDrawByOrderId(orderId) {
return request({
url: `/league/signOrder/withDraw/${orderId}`,
method: 'post'
})
}
export function getMyOrderList(params) {
return request({
......@@ -208,10 +228,17 @@ export function getMySignListFromOrderList(orderId) {
})
}
export function getMyOrderDetail(orderId) {
// export function getMyOrderDetail(orderId) {
// return request({
// url: `/league/signOrder/getMyOrderDetail/${orderId}`,
// method: 'get'
// })
// }
export function getMyOrderDetail(query) {
return request({
url: `/league/signOrder/getMyOrderDetail/${orderId}`,
method: 'get'
url: `/league/signOrder/getOrderPayInfo`,
method: 'get',
params: query
})
}
......@@ -460,6 +487,13 @@ export function getMySignInfoList(data) {
params: data
})
}
export function exportCn(data) {
return request({
url: `/league/sign/exportCn`,
method: 'get',
params: data
})
}
export function saveMyGroupExtraInfo(data) {
return request({
url: `/league/competitionGroupInfo/saveMyGroupExtraInfo`,
......
......@@ -288,6 +288,8 @@ function getCode() {
:deep(.el-input){height: 100%}
:deep(.el-form-item){height: 40px;}
.home-menu .el-menu--horizontal > .el-menu-item{margin: 0 5px; font-size: 18px;}
.home-menu .el-sub-menu .el-sub-menu__title{font-size: 18px;}
.weiMenu.el-menu{
border: none;
:deep(.el-menu-item.is-active){color: var(--el-color-primary);}
......
......@@ -401,6 +401,12 @@ export const constantRoutes = [
redirect: '/match/list',
children: [
{
path: 'commitDone/:orderId',
component: () => import('@/viewsPc/match/commitDone'),
name: 'commitDone',
meta: { title: '提交审核'}
},
{
path: 'pay',
component: () => import('@/viewsPc/match/pay'),
name: 'signPay',
......
......@@ -278,6 +278,12 @@ export const constantRoutes = [
redirect: '/match/list',
children: [
{
path: 'commitDone/:orderId',
component: () => import('@/viewsPc/match/commitDone'),
name: 'commitDone',
meta: { title: '提交审核'}
},
{
path: 'pay',
component: () => import('@/viewsPc/match/pay'),
name: 'signPay',
......
......@@ -141,26 +141,27 @@ service.interceptors.response.use(
if (code === 401) {
if (!isRelogin.show) {
isRelogin.show = true
ElMessageBox.confirm(
'登录状态已过期,您可以继续留在该页面,或者重新登录',
'系统提示',
{
confirmButtonText: '好的',
cancelButtonText: '取消',
type: 'warning'
}
)
.then(() => {
isRelogin.show = false
useUserStore()
.logOut()
.then(() => {
location.reload()
})
})
.catch(() => {
isRelogin.show = false
})
ElMessage({ message: '登录状态已过期', type: 'error' })
// ElMessageBox.confirm(
// '登录状态已过期,您可以继续留在该页面,或者重新登录',
// '系统提示',
// {
// confirmButtonText: '好的',
// cancelButtonText: '取消',
// type: 'warning'
// }
// )
// .then(() => {
// isRelogin.show = false
// useUserStore()
// .logOut()
// .then(() => {
// location.reload()
// })
// })
// .catch(() => {
// isRelogin.show = false
// })
}
return Promise.reject('无效的会话,或者会话已过期,请重新登录。')
} else if (code === 500) {
......
<template>
<div>
<div class="mb20">
<el-card :body-style="{'padding':'0'}">
<div class="indexTitle"><h3 class="leftboderTT">{{ language==0?'机构基础信息':'Institutional Basic Information' }}</h3></div>
<div class="indexTitle">
<h3 class="leftboderTT" v-if="user.utype=='2'">{{ language==0?'机构基础信息':'Institutional Basic Information' }}</h3>
<h3 class="leftboderTT" v-if="user.utype=='1'">{{ language==0?'个人基础信息':'Personal Basic Information' }}</h3>
</div>
<!-- uType字段 1 是个人 2是团体-->
<!-- {{user}}-->
<team-info :form="myform" :language="language" v-if="user.utype=='2'"/>
<div class="pd20">
<div class="d-form-border" style="margin-top: 0">
<el-form class="d-form" label-width="120">
<el-form-item :label="language==0?'用户名':'Account'">
{{user.userName}}
</el-form-item>
<el-form-item label="姓名" required>
<el-input v-model="myform.realName" />
</el-form-item>
<el-form-item label="性别" prop="sex" required>
<el-radio-group v-model="myform.sex">
<el-radio label="0" size="large"></el-radio>
<el-radio label="1" size="large"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="证件类型">
<el-select v-model="myform.idcType" placeholder="请选择证件类型" style="width: 100%">
<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="证件号码">
<el-input v-model="myform.idcCode" @blur="checkCode"/>
</el-form-item>
<el-form-item label="类型" prop="type">
<el-select v-model="myform.type" placeholder="请选择" style="width: 100%;">
<el-option label="业余" value="0" />
<el-option label="专业" value="1" />
<el-option label="大专院校" value="2" />
<el-option label="其他" value="3" />
</el-select>
</el-form-item>
<el-form-item :label="language==0?'联系人邮箱':'Contact Email'" required prop="email">
<el-input v-model="myform.email" type="email" :placeholder="language==0?'请输入内容':''"/>
</el-form-item>
</el-form>
<div class="text-center">
<el-button type="primary" class="btn-lineG" round @click="save">{{ language==0?'确定修改':'Save' }}</el-button>
</div>
</div>
</div>
</el-card>
</div>
......@@ -35,10 +83,10 @@ const activeName = ref('first')
const myform = ref({
idcType: 0,
countryId: 240,
nation: '汉族'
nation: '汉族',
realName:''
})
const labelArr = ref([])
const groupList = ref([])
const certificates = ref([
{
......@@ -60,9 +108,22 @@ onMounted(() => {
})
function getData() {
if(props.user.utype=='2'){
match.getGroupInfo().then(res => {
myform.value = res.data
})
}
if(props.user.utype=='1'){
match.getMyPersonInfo().then(res => {
myform.value = res.data
})
}
}
function save(){
match.saveMyBaseInfo().then(res=>{
})
}
function checkCode() {
if (myform.value.idcType == 0 && myform.value.idcCode) {
......
<template>
<el-card class="mb20">
<div class="pad20">
<el-form :model="query" :inline="true">
<el-form-item label="赛事名称">
<el-input v-model="query.name" style="width: 214px;" @change="getList"/>
</el-form-item>
<el-form-item label="赛事时间">
<el-date-picker
v-model="cptPeriodArr"
format="YYYY-MM-DD" type="daterange"
value-format="YYYY-MM-DD" range-separator="至"
start-placeholder="开始时间"
end-placeholder="结束时间"
@change="getList"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="getList">查询</el-button>
<el-button type="info" @click="reset(query)">重置</el-button>
</el-form-item>
</el-form>
<div class="pd20">
<div class="matchItem" v-for="n in tableData" :key="n.id" @click="goDetail(n.id)">
<div class="matchItem" v-for="n in billList" :key="n.id">
<div class="status-po">
<span class="bg-pink" v-if="n.auditStatus=='0'">未提交</span>
<span class="bg-primary" v-if="n.auditStatus=='1'">待审核</span>
<span class="bg-blue" v-if="n.auditStatus=='2'">审核通过</span>
<span class="bg-danger" v-if="n.auditStatus=='3'">审核驳回</span>
</div>
<el-row :gutter="15">
<el-col :lg="6" :md="8" :xl="10">
<img class="mauto" :src="fillImgUrl(n.coverUrl)">
<img class="mauto w100" :src="fillImgUrl(n.coverUrl)">
</el-col>
<el-col :lg="18" :md="16" :xl="14">
<div class="info">
<el-row>
<el-col :span="24">
<h3>{{ n.name }}</h3>
<p class="ppl"><label>比赛时间:</label>{{ n.beginTime?.slice(0, 10) }}{{ n.endTime?.slice(0, 10) }}
</el-col>
<el-col :lg="8">
<p class="ppl"><label>赛事类型:</label>{{ n.level }}</p>
<p class="ppl"><label v-if="n.groupName">参赛队:</label>{{n.groupName}}</p>
</el-col>
<el-col :lg="8">
<p class="ppl"><label>比赛时间:</label>{{ n.signBeginTime }}~{{n.signEndTime}}
</p>
<p class="ppl"><label>&ensp;&ensp;&ensp;&ensp;点:</label>{{ n.address }}</p>
<p class="ppl"><label>报名截止:</label>{{ n.signEndTime?.slice(0, 10) }}</p>
<p class="ppl"><label>联系人员:</label>{{ n.contactPerson }}</p>
<p class="ppl"><label>联系电话:</label>{{ n.contactTelno }}</p>
<p class="ppl"><label>&ensp;&ensp;&ensp;&ensp;箱:</label>{{ n.contactEmail }}</p>
<p class="ppl"><label>参赛运动员:</label>{{ n.signSize }}</p>
</el-col>
<el-col :lg="8">
<p class="ppl"><label>报名时间:</label>{{ n.signBeginTime }}~{{n.signEndTime}}</p>
<div class="btnbox">
<el-button plain round type="primary" @click="goDetail(n)" v-if="n.auditStatus!='0'">详情</el-button>
<el-button plain round type="primary" @click="continueSign(n)" v-if="n.auditStatus=='0'">继续报名</el-button>
<el-button plain round type="primary" @click="withDraw(n)" v-if="n.auditStatus=='1'">取消报名</el-button>
<el-button plain round type="primary" @click="continueSign(n)" v-if="n.auditStatus=='3'">重新报名</el-button>
<el-button plain round type="primary" @click="goDetail(n)" v-if="n.auditStatus=='2'&&n.payStatus=='0'">缴费</el-button>
</div>
</el-col>
</el-row>
</div>
</el-col>
</el-row>
</div>
<el-table :data="tableData" style="width: 100%">
<el-table-column type="index" label="序号" width="80" align="center"/>
<el-table-column label="赛事名称" min-width="260">
<template #default="scope">
{{ scope.row.name }}
</template>
</el-table-column>
<el-table-column label="参赛队" min-width="260">
<template #default="scope">
<span v-if="scope.row.groupName">{{ scope.row.groupName }}</span>
<span v-else>-</span>
</template>
</el-table-column>
<el-table-column label="赛事开始时间" min-width="120">
<template #default="scope">{{ scope.row.beginTime.substring(0, 10) }}</template>
</el-table-column>
<el-table-column label="赛事结束时间" min-width="120">
<template #default="scope">{{ scope.row.endTime.substring(0, 10) }}</template>
</el-table-column>
<el-table-column label="审批状态" min-width="100" align="center">
<template #default="scope">
<el-tag v-if="scope.row.auditStatus=='1'" type="info">已提交</el-tag>
<el-tag v-if="scope.row.auditStatus=='2'" type="success">审核通过</el-tag>
<el-tag v-if="scope.row.auditStatus=='3'" type="danger">未通过</el-tag>
<el-tag v-if="scope.row.auditStatus=='4'" type="warning">已取消</el-tag>
</template>
</el-table-column>
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding" width="180">
<template #default="scope">
<el-button v-if="scope.row.auditStatus!='0'" type="text" @click="downloadVoucher(scope.row)">
下载报名凭证
</el-button>
<el-button type="text" @click="signRow(scope.row)">详情</el-button>
</template>
</el-table-column>
</el-table>
<pagination
<el-empty image="@/assets/img/order_no.png" :image-size="228" v-if="billList?.length == 0"/>
</div>
<paginationPc
v-show="total > 0"
v-model:page="query.pageNum"
v-model:limit="query.pageSize"
:total="total"
@pagination="getList"
/>
</div>
<!-- 报项详情-->
<dialogModifySign :props="dialogModifySignProps"/>
......@@ -109,15 +70,12 @@ import dialogModifyBill from './component/modifyBill'
import * as match from '@/apiPc/match'
import {ElMessage, ElMessageBox} from 'element-plus'
import _ from 'lodash'
import useUserStore from "@/store/modules/user";
const router = useRouter()
const {proxy} = getCurrentInstance()
const total = ref(0)
const total2 = ref(0)
const payMationDone = () => {
showOrganizerInfo.value = false
payPop.value = false
}
const dialogPropsBase = {
open: false,
isView: false,
......@@ -155,10 +113,10 @@ const showResult = ref(false)
const myBalance = ref('')
const nowBill = ref({})
const org = ref({})
const user = useUserStore().user
const group = useUserStore().group
onMounted(() => {
getList()
getBillList()
})
const reset = (form) => {
query.value = {
......@@ -172,32 +130,53 @@ const reset = (form) => {
cptPeriodArr.value = []
payTimeArr.value = []
commitTimeArr.value = []
getBillList()
getList()
}
function wePayDone() {
payPop.value = false
getBillList()
function withDraw(n){
match.withDrawByOrderId(n.orderId).then(res=>{
getList()
})
}
function continueSign(n){
if (user.utype == '1') {
// 个人报名
router.push({
name: 'chooseProject',
params:{
id: n.id
},
query: {
matchId: n.id
}
})
}
if (user.utype == '2'){
// 团队报名
router.push({
name: 'chooseSportsman',
params:{
id: n.id
},
query: {
matchId: n.id,
groupId: group.id
}
})
}
function getList() {
if (cptPeriodArr.value) {
query.value.cptPeriod = cptPeriodArr.value.toString()
}
function goDetail(n){
// 查看详情
router.push({
name:`signPay`,
query: {
orderId: n.encodeOrderId
}
// match.getMySignCptList(query.value).then(res => {
// tableData.value = res.rows
// total.value = res.total
// })
})
}
function getBillList() {
query2.value.payTimeRange = payTimeArr.value.toString()
query2.value.createTimeRange = commitTimeArr.value.toString()
function getList() {
console.log(query2.value)
match.getMyOrderList(query2.value).then(res => {
match.getMySignCptList(query2.value).then(res => {
billList.value = res.rows
total2.value = res.total
})
......@@ -261,7 +240,6 @@ function cancelBill(bill) {
match.cancelMyUnPayedOrder(bill.id).then(Response => {
console.log(Response.data)
// 刷新数据
getBillList()
getList()
})
})
......@@ -278,11 +256,16 @@ function downloadVoucher(row) {
.matchItem {
cursor: pointer;
margin: 0 0 20px;
padding: 0 0 20px;
background: #FFFFFF;
border-bottom: 1px solid #e5e5e5;
padding: 0 0 20px;background: #FBFCFD;
border-radius: 2px;
position: relative;
.status-po{position: absolute;right: 0;top: 0;font-size: 12px;
color: #FFFFFF;
span{border-radius: 0px 10px 0px 10px;padding: 4px 10px;}
.bg-danger{background: #E60012;}
.bg-pink{background: #F740A6;}
.bg-primary{background: var(--el-color-primary)}
}
&:last-child {
border-bottom: none;
}
......@@ -368,4 +351,8 @@ function downloadVoucher(row) {
.el-form--inline .el-form-item {
width: auto;
}
.ppl{font-size: 14px;
label{color: #929AA0;}
}
.btnbox{text-align: right;}
</style>
......
<template>
<el-card class="mb20">
<div class="pad20">
<!-- <el-form :model="query" :inline="true">-->
<!-- <el-form-item label="赛事名称">-->
<!-- <el-input v-model="query.name" style="width: 214px;" @change="getBillList"/>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="赛事时间">-->
<!-- <el-date-picker-->
<!-- v-model="cptPeriodArr"-->
<!-- format="YYYY-MM-DD" type="daterange"-->
<!-- value-format="YYYY-MM-DD" range-separator="至"-->
<!-- start-placeholder="开始时间"-->
<!-- end-placeholder="结束时间"-->
<!-- @change="getBillList"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- <el-form-item>-->
<!-- <el-button type="primary" @click="getBillList">查询</el-button>-->
<!-- <el-button type="info" @click="reset(query)">重置</el-button>-->
<!-- </el-form-item>-->
<!-- </el-form>-->
<div class="pd20">
<div class="matchItem" v-for="n in billList" :key="n.id" @click="goDetail(n.id)">
<div class="status-po">
<span class="bg-pink" v-if="n.auditStatus=='0'">未提交</span>
<span class="bg-primary" v-if="n.auditStatus=='1'">待审核</span>
<span class="bg-blue" v-if="n.auditStatus=='2'">审核通过</span>
<span class="bg-danger" v-if="n.auditStatus=='3'">审核驳回</span>
</div>
<el-row :gutter="15">
<el-col :lg="6" :md="8" :xl="10">
<img class="mauto w100" :src="fillImgUrl(n.cptCoverPic)">
</el-col>
<el-col :lg="18" :md="16" :xl="14">
<el-row>
<el-col :span="24">
<h3>{{ n.cptName }}</h3>
</el-col>
<el-col :lg="8">
<p class="ppl"><label>赛事类型:</label>{{ n.cptLevel }}</p>
<p class="ppl"><label v-if="n.groupName">参赛队:</label>{{n.groupName}}</p>
</el-col>
<el-col :lg="8">
<p class="ppl"><label>比赛时间:</label>{{ n.cptTimeRange }}
</p>
<p class="ppl"><label>参赛运动员:</label>{{ n.cptAthletesSize }}</p>
</el-col>
<el-col :lg="8">
<p class="ppl"><label>报名时间:</label>{{ n.cptSignTimeRange}}</p>
<div class="btnbox">
<el-button plain round type="primary" @click="goDetail(n)" v-if="n.auditStatus!='0'">详情</el-button>
<el-button plain round type="primary" @click="continueSign(n)" v-if="n.auditStatus=='0'">继续报名</el-button>
<el-button plain round type="primary" @click="withDraw(n)" v-if="n.auditStatus=='1'">取消报名</el-button>
<el-button plain round type="primary" v-if="n.auditStatus=='3'">重新报名</el-button>
<el-button plain round type="primary" v-if="n.auditStatus=='2'&&n.payStatus=='0'">缴费</el-button>
</div>
</el-col>
</el-row>
</el-col>
</el-row>
</div>
<el-empty image="@/assets/img/order_no.png" :image-size="228" v-if="billList?.length == 0"/>
</div>
<paginationPc
v-show="total > 0"
v-model:page="query.pageNum"
v-model:limit="query.pageSize"
:total="total"
@pagination="getBillList"
/>
</div>
<!-- 报项详情-->
<dialogModifySign :props="dialogModifySignProps"/>
<!-- 订单详情-->
<dialogModifyBill :props="dialogModifyBillProps"/>
</el-card>
</template>
<script setup>
import {ref} from 'vue'
import {useRouter} from 'vue-router'
import {getCurrentInstance, onMounted} from '@vue/runtime-core'
import dialogModifySign from './component/modifySign'
import dialogModifyBill from './component/modifyBill'
import * as match from '@/apiPc/match'
import {ElMessage, ElMessageBox} from 'element-plus'
import _ from 'lodash'
import useUserStore from "@/store/modules/user";
const router = useRouter()
const {proxy} = getCurrentInstance()
const total = ref(0)
const total2 = ref(0)
const dialogPropsBase = {
open: false,
isView: false,
title: '',
data: null
}
const dialogModifySignProps = ref({
...dialogPropsBase
})
const dialogModifyBillProps = ref({
...dialogPropsBase
})
const activeName = ref('first')
const myform = ref({})
const groupList = ref([])
const cptPeriodArr = ref([])
const payTimeArr = ref([])
const commitTimeArr = ref([])
const countryList = ref([])
const tableData = ref([{name: '111'}])
const billList = ref([])
const query = ref({
pageNum: 1,
pageSize: 10
})
const query2 = ref({
pageNum: 1,
pageSize: 10
})
const payType = ref('')
const payPop = ref(false)
const showOrganizerInfo = ref(false)
const showResult = ref(false)
const myBalance = ref('')
const nowBill = ref({})
const org = ref({})
const user = useUserStore().user
const group = useUserStore().group
onMounted(() => {
getBillList()
})
const reset = (form) => {
query.value = {
pageNum: 1,
pageSize: 10
}
query2.value = {
pageNum: 1,
pageSize: 10
}
cptPeriodArr.value = []
payTimeArr.value = []
commitTimeArr.value = []
getBillList()
}
function withDraw(n){
match.withDrawByOrderId(n.id).then(res=>{
getBillList()
})
}
function continueSign(n){
if (user.uType == '1') {
// 个人报名
router.push({
name: 'chooseProject',
query: {
matchId: n.cptId
}
})
}
if (user.uType == '2'){
// 团队报名
router.push({
name: 'chooseSportsman',
query: {
matchId: n.cptId,
groupId: group.id
}
})
}
}
function goDetail(n){
}
function getBillList() {
query2.value.payTimeRange = payTimeArr.value.toString()
query2.value.createTimeRange = commitTimeArr.value.toString()
console.log(query2.value)
match.getMyOrderList(query2.value).then(res => {
billList.value = res.rows
total2.value = res.total
})
}
function signRow(row) {
_.assign(dialogModifySignProps.value, dialogPropsBase, {
open: true,
isView: true,
title: '报项详情',
data: {...row}
})
}
// function getMemberInfoByCptId(cptId) {
// match.getMemberInfoByCptId(cptId).then((res) => {
// myBalance.value = res.data.balance
// })
// }
function goPay(bill) {
console.log(bill)
payPop.value = true
nowBill.value = bill
// getMemberInfoByCptId(bill.cptId)
}
function payBill() {
if (!payType.value) {
ElMessage.error('请选择支付方式')
return
}
match.payMatch({orderId: nowBill.value.id, payType: payType.value}).then(res => {
if (payType.value == 2) {
org.value = res.data.org
showOrganizerInfo.value = true
} else if (payType.value == 1) {
// 微信
proxy.$refs['wePayRef'].open(res.data)
} else {
showResult.value = true
}
})
}
function billDetail(bill) {
_.assign(dialogModifyBillProps.value, dialogPropsBase, {
open: true,
isView: true,
title: '订单详情',
data: {...bill}
})
}
function cancelBill(bill) {
ElMessageBox.confirm('确定取消订单吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
match.cancelMyUnPayedOrder(bill.id).then(Response => {
console.log(Response.data)
// 刷新数据
getBillList()
})
})
}
function downloadVoucher(row) {
proxy.download(
`/ztx-match/pdf/getPayedOrderPdf/${row.id}/${row.groupId || 0}`, {}, '报项凭证.pdf'
)
}
</script>
<style scoped lang="scss">
.matchItem {
cursor: pointer;
margin: 0 0 20px;
padding: 0 0 20px;background: #FBFCFD;
border-radius: 2px;
position: relative;
.status-po{position: absolute;right: 0;top: 0;font-size: 12px;
color: #FFFFFF;
span{border-radius: 0px 10px 0px 10px;padding: 4px 10px;}
.bg-danger{background: #E60012;}
.bg-pink{background: #F740A6;}
.bg-primary{background: var(--el-color-primary)}
}
&:last-child {
border-bottom: none;
}
.el-avatar {
position: absolute;
left: 20px;
top: 30px;
img {
background: #fff;
}
}
.info {
p {
font-size: 14px;
}
}
.typeTag {
position: absolute;
right: 0;
top: 0;
}
h3 {
font-weight: 500;
margin: 0 0 10px;
font-size: 18px;
color: #000000;
text-overflow: ellipsis;
}
&:hover h3 {
color: var(--el-color-primary);
}
}
.centerPrice {
text-align: center;
font-size: 26px;
margin: 20px;
span {
font-size: 40px;
font-weight: bold;
}
}
:deep(.el-tabs__nav-wrap) {
padding: 0 15px;
}
:deep(.el-radio.el-radio--large .el-radio__label) {
display: flex;
align-items: center;
img {
margin-right: 6px;
}
}
.panel-footer .el-button--success {
background: #254385;
border: none;
padding: 0 40px;
font-size: 16px;
}
.orange {
font-size: 16px;
font-style: normal;
font-weight: bold
}
.orgbox {
font-size: 16px;
line-height: 30px;
}
.el-form--inline .el-form-item {
width: auto;
}
.ppl{font-size: 14px;
label{color: #929AA0;}
}
.btnbox{text-align: right;}
</style>
......@@ -3,9 +3,6 @@
<div class="funcBtns">
<el-button type="primary" @click="addMember">{{ language==0?'添加选手':'Add Player'}}</el-button>
<el-button type="primary" plain @click="importSportman">{{ language==0?'导入选手':'Import Player' }}</el-button>
<el-button type="primary" plain>
<a href="/file/sportsmanTemplate.xlsx" target="_blank">Download template</a>
</el-button>
</div>
<div class="from-Card">
<el-form :inline="true" :model="query" class="mt20" label-width="60" size="small">
......@@ -28,7 +25,7 @@
<el-input v-model="query.idcode" style="width: 120px;" clearable/>
</el-form-item>
<el-form-item :label="language==0?'会员角色':'Role'">
<el-select v-model="query.label" multiple>
<el-select v-model="labelArr" multiple>
<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>
......@@ -51,7 +48,7 @@
<!-- 添加人员-->
<addCoach ref="dialogAddCoach" @submitForm="getList"/>
<Import ref="dialogImportProps"/>
<Import ref="dialogImportProps" @uploadSuccess="getList"/>
</template>
<script setup>
......@@ -72,6 +69,7 @@ import cache from "@/plugins/cache";
import useUserStore from "@/store/modules/user";
const language = ref(cache.local.get('language') || 0)
const tableData = ref([])
const labelArr = ref([])
const labels = ref([
{value: '0', label: '运动员', enlabel: 'Sportsman'},
{value: '1', label: '教练', enlabel: 'Coach'},
......@@ -109,6 +107,7 @@ function importSportman() {
}
function getList() {
query.value.label =labelArr.value.toString()
getGroupPersonList(query.value, groupId.value).then(res => {
tableData.value = res.rows
total.value = res.total
......
......@@ -2,7 +2,7 @@
<div>
<el-card :body-style="{'padding':'0'}">
<div class="indexTitle"><h3 class="leftboderTT">{{ language==0?'我的预订':'My reservation' }}</h3></div>
<el-empty image="@/assets/img/order_no.png" image-size="228" v-if="list?.length == 0"/>
<el-empty image="@/assets/img/order_no.png" :image-size="228" v-if="list?.length == 0"/>
<div class="pd20"></div>
</el-card>
......
......@@ -10,7 +10,7 @@
<span>{{ n.time }}</span>
</li>
</ul>
<el-empty image="@/assets/img/order_no.png" image-size="228" v-if="list?.length == 0"/>
<el-empty image="@/assets/img/order_no.png" :image-size="228" v-if="list?.length == 0"/>
</el-card>
</div>
......
......@@ -80,7 +80,6 @@
<!--赛事日历-->
<el-card :body-style="{'padding':'20px 20px'}">
<el-calendar v-model="calendarValue" :range="calendarRange">
<!-- <el-calendar>-->
<template #date-cell="data">
<div v-if="data.data.day.slice(8,10)==22" class="primaryDate date">22</div>
<div v-else class="date">
......@@ -417,8 +416,8 @@ const scores = ref([])
const nowscores = ref([])
const livelist = ref([])
const picList = ref([])
const calendarValue = ref('2024-07-22')
const calendarRange = ref(['2024-07-21','2024-07-27'])
const calendarValue = ref(dayjs('2024-07-22').toDate())
const calendarRange = ref([dayjs('2024-07-21').toDate(),dayjs('2024-07-27').toDate()])
const showgg = ref(true)
onMounted(() => {
init()
......
......@@ -82,7 +82,7 @@
<div class="rItem r1" @click="goRegister(1)">
<h3>{{language==0?'机构用户':'Organization'}}</h3>
</div>
<div class="rItem r2" @click="goRegister(0)">
<div class="rItem r2" @click="goRegister(0)" :style="language==0?'filter:grayscale(1)':''">
<h3>{{language==0?'个人用户':'Individual'}}</h3>
</div>
</div>
......@@ -293,6 +293,10 @@ function showRegister() {
}
function goRegister(n) {
if(n==0){
if(language.value==0){
// ElMessage.warning('暂不开放国内注册!')
return
}
show.value = false
router.push({
path: `/register/0`
......
......@@ -3,7 +3,8 @@
<div class="box ph-30">
<el-card>
<team-sign-step :activeStep="activeStep" :language="language"/>
<single-sign-step v-if="user.utype=='1'" activeStep="1" :language="language"/>
<team-sign-step v-if="user.utype=='2'" activeStep="2" :language="language"/>
</el-card>
<el-row class="mt20" :gutter="20">
......@@ -166,17 +167,19 @@
</template>
<script setup>
import {ref, reactive} from 'vue'
import TeamSignStep from './components/teamSignStep'
import SingleSignStep from './components/singleSignStep'
import {ref, reactive,toRefs} from 'vue'
import {getCurrentInstance, onMounted} from '@vue/runtime-core'
import * as match from '@/apiPc/match'
import dialogAddCoach from './components/addCoach'
import TeamSignStep from './components/teamSignStep'
import cache from "@/plugins/cache"
import cache from "@/plugins/cache"
const {proxy} = getCurrentInstance()
const router = useRouter()
const route = useRoute()
import {ElMessage} from 'element-plus'
import {useRoute, useRouter} from 'vue-router'
import useUserStore from "@/store/modules/user";
const language = ref(cache.local.get('language') || 0)
const data = reactive({
......@@ -209,17 +212,21 @@ const {
hasChooseObj,activeStep
} = toRefs(data)
let matchId = ''
const user = useUserStore().user
const uType = ref('')
onMounted(() => {
matchId = route.query.matchId
groupId.value = route.query.groupId
groupId.value = route.query.groupId || 0
signType.value = route.query.signType || ''
getList()
})
function getList() {
if (signType.value == '0') {
if (user.utype == '1') {
geren()
} else {
}
if (user.utype == '2'){
tuandui()
}
}
......@@ -297,7 +304,7 @@ function chooseDone() {
function goNext() {
console.log(form.value)
if ((form.value.coachs.length < 1) && (form.value.leader.length < 1)) {
ElMessage.error('至少选一个教练或领队')
ElMessage.error(language.value==0?'至少选一个教练或领队':'Coach/Team Leader, select at least one')
return
}
var obj = {
......@@ -315,7 +322,7 @@ function goNext() {
if (groupId.value && groupId.value != 0) {
obj.unitId = groupId.value
}
if (signType.value == '0') {
if (user.utype == '1') {
// 个人报名
match.singleSignSavePerson(obj).then(res => {
console.log(res)
......@@ -326,7 +333,8 @@ function goNext() {
}
})
})
} else {
}
if (user.utype == '2'){
// 团队报名
match.groupSignSavePerson(obj).then(res => {
router.push({
......@@ -349,7 +357,7 @@ function goPrev() {
function editPerson(id) {
proxy.$refs['dialogAddCoachRef'].open({
title: '编辑人员',
title: language.value==0?'编辑人员':'Edit',
id: id,
groupId: groupId.value
})
......@@ -357,7 +365,7 @@ function editPerson(id) {
function addCoach() {
proxy.$refs['dialogAddCoachRef'].open({
title: '新建人员',
title: language.value==0?'新建人员':'Add',
id: 0,
groupId: groupId.value
})
......
......@@ -46,8 +46,8 @@
<el-table-column v-if="coachOrLeaderFlag=='1'" label="领队" prop="leaderNames" />
<el-table-column label="操作" fixed="right" width="100" align="center">
<template #default="scope">
<el-button type="text" @click="editThis(scope.row)">编辑</el-button>
<el-button type="text" @click="removeThis(scope.row.id)">删除</el-button>
<el-button type="primary" link @click="editThis(scope.row)">编辑</el-button>
<el-button type="primary" link @click="removeThis(scope.row.id)">删除</el-button>
</template>
</el-table-column>
</el-table>
......
<template>
<div>
<div class="box ph-30">
<el-card>
<single-sign-step v-if="user.utype=='1'" activeStep="3" :language="language"/>
<team-sign-step v-if="user.utype=='2'" activeStep="4" :language="language"/>
</el-card>
<el-card class="mt20">
<div class="flexCenter pd20">
<img src="@/assets/img/e.png"/>
<div>
<div>账号:{{ user.userName }}</div>
<h3>报名信息提交成功</h3>
</div>
</div>
<div class="text-center flexCenter">
<div class="border-info mt20">
审核结果,后续将以邮件形式正式通知您。
<br/>
邮件发送账号:<span class="text-primary">{{ user.email }}</span>
,请关注相关邮件通知。
<br/>
如果您的报名信息审核通过,邮件正文会附上相关费用的支付链接,请通过链接完成支付,完成报名。
</div>
</div>
<div class="text-center mt30 mb20">
<el-button class="primary-kx w200px" round @click="goHome">{{ language == 0 ? '返回首页' : 'Homepage' }}</el-button>
<el-button type="primary" class="btn-lineG w200px" round @click="goSign">{{ language == 0 ? '返回赛事报名模块' : 'Sign Up' }}</el-button>
</div>
</el-card>
</div>
</div>
</template>
<script setup>
import TeamSignStep from './components/teamSignStep'
import SingleSignStep from './components/singleSignStep'
const router = useRouter()
import useUserStore from "@/store/modules/user"
import {ref} from "vue"
import cache from "@/plugins/cache"
import {useRouter} from "vue-router";
const language = ref(cache.local.get('language') || 0)
const user = useUserStore().user
const goHome = () => {
router.push({
name: `home`
})
}
const goSign = () => {
router.push({
name: `matchDetail`,
params:{id:0}
})
}
</script>
<style scoped lang="scss">
.border-info{padding: 30px;line-height: 2;}
</style>
......@@ -7,7 +7,7 @@
<el-form ref="dialogRef" :model="form" :rules="rules" label-width="120px" inline>
<el-row :gutter="30">
<el-col :lg="12" class="touxiang">
<el-form-item prop="picUrl" label="个人照片" required>
<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"
......@@ -65,7 +65,7 @@
<el-radio label="1">{{ language==0?'男':'male' }}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item :label="language==0?'邮箱':'Email'" prop="idcCode" required>
<el-form-item :label="language==0?'邮箱':'Email'" prop="email" required>
<el-input v-model="form.email"/>
</el-form-item>
<el-form-item :label="language==0?'证件号码':'ID NO'" prop="idcCode" required>
......@@ -134,9 +134,10 @@ const data = reactive({
],
title: '添加选手信息',
groupId: '0',
showRequire: false
showRequire: false,
uType:''
})
const {showRequire, form, rules, show, countryList, regionsList, title, groupId, labels} = toRefs(data)
const {showRequire, form, rules, show, countryList, regionsList, title, groupId, labels,uType} = toRefs(data)
onMounted(() => {
getCountryList()
getRegionsList()
......@@ -147,6 +148,19 @@ const open = (params) => {
show.value = true
title.value = params.title
groupId.value = params.groupId || '0'
uType.value = params.uType
if(uType.value == '1'){
//个人
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(',')
labelvalue(form.value.labelArr)
}
})
} else {
if (params.id != 0) { // 编辑
editgay = true
match.getPersonInfoById(params.id).then(res => {
......@@ -159,6 +173,7 @@ const open = (params) => {
}
})
}
}
}
defineExpose({open})
watch(show, (value) => {
......@@ -286,11 +301,20 @@ function submitForm() {
emit('submitForm')
})
} else {
// if(uType.value == '1'){
// match.saveMyBaseInfo(form.value).then(res => {
// ElMessage.success('保存成功')
// show.value = false
// emit('submitForm')
// })
// } else {
match.savePersonForMyPerson(form.value).then(res => {
ElMessage.success('保存成功')
show.value = false
emit('submitForm')
})
// }
}
}
}
......
......@@ -71,7 +71,7 @@
<el-table-column :label="language==0?'详细地址':'Detailed Address'" prop="address" min-width="140"/>
<el-table-column :label="language==0?'操作':'Actions'" width="120" fixed="right" align="center">
<template #default="scope">
<el-button type="text" @click="editPerson(scope.row)">
<el-button link type="primary" @click="editPerson(scope.row)">
{{language==0?'编辑':'Edit'}}
</el-button>
</template>
......@@ -103,7 +103,9 @@ const language = ref(cache.local.get('language') || 0)
const {proxy} = getCurrentInstance()
const emit = defineEmits(['submitForm', 'transfer'])
const data = reactive({
query: {},
query: {
label:'0'
},
tableData: [],
birthArr: [],
show: false,
......@@ -184,7 +186,7 @@ function addMember() {
const params = {
title: '添加人员',
id: 0,
groupId: groupId.value
groupId: groupId
}
proxy.$refs['dialogAddCoach'].open(params)
}
......@@ -192,7 +194,7 @@ function addMember() {
function importSportman() {
const params = {
title: '批量导入选手',
groupId: groupId.value
groupId: groupId
}
proxy.$refs['dialogImportProps'].open(params)
}
......
<template>
<div class="border-info" style="margin: 20px">
<div class="border-info" style="margin: 20px" v-loading="loading">
<el-row>
<el-col :lg="8">
<div class="item"><label>{{ language == 0 ? '教练' : 'Coach' }}</label>
<span v-for="c in names.coachList">{{ c.shortName }}</span>
<span v-if="!names.coachList">--</span>
</div>
<div class="item"><label>{{ language == 0 ? '翻译' : 'Translator' }}</label>
<span v-for="c in names.translatorList">{{ c.shortName }}</span>
<span v-if="!names.translatorList">--</span>
</div>
</el-col>
<el-col :lg="8">
<div class="item">
<label>{{ language == 0 ? '领队' : 'Team leader' }}</label>
<span v-for="c in names.leaderList">{{ c.shortName }}</span>
<span v-if="!names.leaderList">--</span>
</div>
<div class="item">
<label>{{ language == 0 ? '官员' : 'Official' }}</label>
......@@ -26,12 +29,14 @@
<span class="mr5" v-for="c in names.teamDoctorList">
{{ c.shortName }}
</span>
<span v-if="!names.teamDoctorList">--</span>
</div>
<div class="item">
<label>{{ language == 0 ? '其他' : 'Other' }}</label>
<span class="mr5" v-for="c in names.otherList">
{{ c.shortName }}
</span>
<span v-if="!names.otherList">--</span>
</div>
</el-col>
</el-row>
......@@ -39,17 +44,44 @@
</template>
<script setup>
import * as match from "@/apiPc/match";
import {onMounted} from "@vue/runtime-core";
import useUserStore from "@/store/modules/user";
const props = defineProps({
names: {
type: Object,
matchId: {
type: String,
required: true
},
language: {
type: Number,
required: true,
default: 0
}
})
const names = ref({})
const loading = ref(true)
import cache from "@/plugins/cache"
const user = useUserStore().user
const group = useUserStore().group || {}
const language = ref(cache.local.get('language') || 0)
onMounted(() => {
if (user.utype == '2') {
tuandui()
}
if(user.utype == '1'){
geren()
}
})
function geren() {
match.getChooseDoneSingleCoachs(props.matchId).then(res => {
names.value = res.data
loading.value = false
})
}
function tuandui() {
match.getChooseDoneGroupCoachs(props.matchId, group.id).then(res => {
names.value = res.data
loading.value = false
})
}
</script>
<style scoped lang="scss">
......
......@@ -4,17 +4,20 @@
destroy-on-close
>
<el-descriptions border>
<el-descriptions-item v-if="form.picUrl" label="照片">
<img style="width: 100px" :src="form.picUrl">
<el-descriptions-item v-if="form.picUrl" :label="language==0?'个人照片':'photo'">
<img style="width: 60px" :src="fillImgUrl(form.picUrl)">
</el-descriptions-item>
<el-descriptions-item label="姓名">{{ form.realName }}</el-descriptions-item>
<el-descriptions-item label="性别">{{ form.sexStr }}</el-descriptions-item>
<el-descriptions-item label="证件类型">{{ form.idcTypeStr }}</el-descriptions-item>
<el-descriptions-item label="证件号码">{{ form.idcCode }}</el-descriptions-item>
<el-descriptions-item label="出生日期">{{ form.birth }}</el-descriptions-item>
<el-descriptions-item label="联系方式">{{ form.phone }}</el-descriptions-item>
<el-descriptions-item label="国籍">{{ form.countryName }}</el-descriptions-item>
<el-descriptions-item label="民族">{{ form.nation }}</el-descriptions-item>
<el-descriptions-item :label="language==0?'姓氏':'surname'">{{ form.xing }}</el-descriptions-item>
<el-descriptions-item :label="language==0?'名':'name'">{{ form.ming }}</el-descriptions-item>
<el-descriptions-item :label="language==0?'短名':'short name'">{{ form.shortName }}</el-descriptions-item>
<el-descriptions-item :label="language==0?'性别':'sex'">{{ form.sexStr }}</el-descriptions-item>
<el-descriptions-item :label="language==0?'所属国家':'Nationality'">{{ form.countryName }}</el-descriptions-item>
<el-descriptions-item :label="language==0?'证件类型':'ID type'">{{ form.idcTypeStr }}</el-descriptions-item>
<el-descriptions-item :label="language==0?'证件号码':'ID NO'">{{ form.idcCode }}</el-descriptions-item>
<el-descriptions-item :label="language==0?'出生日期':'birth'">{{ form.birth }}</el-descriptions-item>
<el-descriptions-item :label="language==0?'手机号码':'Phone'">{{ form.phone }}</el-descriptions-item>
<el-descriptions-item :label="language==0?'邮箱':'Email'">{{ form.email }}</el-descriptions-item>
<el-descriptions-item :label="language==0?'详细地址':'Address'">{{ form.address }}</el-descriptions-item>
</el-descriptions>
<el-row v-if="participantsInfoArr&&participantsInfoArr.length>0" class="mt20">
......@@ -62,6 +65,9 @@ const { proxy } = getCurrentInstance()
const emit = defineEmits(['submitForm'])
const uploadUrl = ref('/upload/upLoadToFileServer')
const route = useRoute()
import cache from "@/plugins/cache"
const language = ref(cache.local.get('language') || 0)
const data = reactive({
form: {},
show: false,
......
......@@ -26,17 +26,28 @@
</template>
<script setup>
import useUserStore from "@/store/modules/user";
import cache from "@/plugins/cache";
import {getGroup} from "@/api/match/CompetitionProject";
import * as match from "@/apiPc/match";
const language = ref(cache.local.get('language') || 0)
const props = defineProps({
groupInfo: {
groupId: {
type: Object,
required: true
},
language: {
type: Number,
required: true,
default: 0
}
})
const user = useUserStore().user
const groupInfo = useUserStore().group
if(props.groupId!=0){
getGroupInfo()
}
function getGroupInfo() {
match.getGroupInfo().then(res => {
groupInfo.value = res.data
})
}
</script>
<style scoped lang="scss">
......
......@@ -2,11 +2,12 @@
<el-dialog v-model="show" :title="title" width="500px" close-icon="CircleClose"
append-to-body :close-on-click-modal="false" class="pcloginpop" center>
<el-form ref="dialogRef" label-width="100px">
<el-form-item label="下载模板">
<el-link href="/file/sportsmanTemplate.xlsx" type="primary" target="_blank">人员模板</el-link>
<el-form-item :label="language==0?'下载模板':'Download template'">
<el-link href="/file/UserImport-ch.xlsx" v-if="language==0" type="primary" target="_blank">人员模板</el-link>
<el-link href="/file/UserImport-en.xlsx" v-else type="primary" target="_blank">Personnel template</el-link>
</el-form-item>
<el-form-item label="上传模板" prop="discount">
<el-form-item :label="language==0?'上传模板':'Upload template'" prop="discount">
<fileImport ref="upload" name="excel" :action="action" @uploadSuccess="uploadSuccess" />
</el-form-item>
</el-form>
......@@ -25,13 +26,17 @@ import { ElMessage, ElMessageBox } from 'element-plus'
const { proxy } = getCurrentInstance()
import useUserStore from '@/store/modules/user'
const emit = defineEmits(['submitForm'])
import cache from "@/plugins/cache"
const language = ref(cache.local.get('language') || 0)
const action = ref('')
const accept = ref('.xlsx')
const title = ref('')
const show = ref(false)
const userStore = useUserStore()
const groupId = useUserStore().group.id || 0
let groupId = 0
if(useUserStore().group){
groupId = useUserStore().group.id
}
function uploadSuccess(res) {
console.log(res)
cancel()
......
......@@ -78,7 +78,7 @@
</el-row>
<el-row>
<el-col :span="2" :offset="22">
<el-button type="text" class="fr" @click="editRank(r)">编辑</el-button>
<el-button type="primary" link class="fr" @click="editRank(r)">编辑</el-button>
</el-col>
</el-row>
</div>
......
<template>
<div class="border-info" style="margin: 20px">
<div class="border-info" style="margin: 20px" v-loading="loading">
<el-row v-if="language==0">
<el-col :lg="8"><div class="item"><label>赛事名称</label>{{matchInfo.name}}</div></el-col>
<el-col :lg="8"><div class="item"><label>赛事类型</label>{{matchInfo.name}}</div></el-col>
......@@ -18,17 +18,30 @@
</template>
<script setup>
import {onMounted} from "@vue/runtime-core";
import * as match from "@/apiPc/match";
import cache from "@/plugins/cache";
const language = ref(cache.local.get('language') || 0)
const props = defineProps({
matchInfo: {
type: Object,
matchId: {
type: String,
required: true
},
language: {
type: Number,
required: true,
default: 0
}
})
const matchInfo = ref({})
const loading = ref(false)
onMounted(()=>{
loading.value = true
if(props.matchId)
getMatch()
})
const getMatch = () => {
match.getMatchById({ id: props.matchId }).then(res => {
matchInfo.value = res.data
loading.value = false
})
}
</script>
<style scoped lang="scss">
......
......@@ -98,7 +98,7 @@
</div>
</el-collapse-item>
</el-collapse>
<el-empty image="@/assets/img/order_no.png" image-size="228" v-if="form.cptProjectList?.length == 0" description=" "/>
<el-empty image="@/assets/img/order_no.png" :image-size="228" v-if="form.cptProjectList?.length == 0" description=" "/>
</div>
</div>
<div style="padding: 0 20px 20px" v-else>
......@@ -200,7 +200,7 @@
</div>
</el-collapse-item>
</el-collapse>
<el-empty image="@/assets/img/order_no.png" image-size="228" v-if="form.cptProjectList?.length == 0" description=" "/>
<el-empty image="@/assets/img/order_no.png" :image-size="228" v-if="form.cptProjectList?.length == 0" description=" "/>
</div>
</div>
</template>
......
......@@ -24,7 +24,7 @@
</el-timeline-item>
</el-timeline>
<el-empty image="@/assets/img/order_no.png" image-size="228" v-if="matchData.cptScheduleList?.length==0" description="" />
<el-empty image="@/assets/img/order_no.png" :image-size="228" v-if="matchData.cptScheduleList?.length==0" description="" />
</div>
</template>
......
......@@ -16,7 +16,7 @@
</el-radio>
</div>
</el-radio-group>
<el-empty v-if="projectList.length==0" image="@/assets/img/order_no.png" image-size="228" description="无可选项目" />
<el-empty v-if="projectList.length==0" image="@/assets/img/order_no.png" :image-size="228" description="无可选项目" />
</el-form-item>
</el-col>
......
<template>
<el-table :data="list" border style="width: 100%" v-loading="loading">
<el-table-column :label="language==0?'所属国家':'Nationality'" prop="personInfo.countryName" min-width="100"/>
<el-table-column :label="language==0?'姓氏':'Last Name'" prop="personInfo.xing" min-width="100"/>
<el-table-column :label="language==0?'名':'First Name'" prop="personInfo.ming" min-width="100"/>
<el-table-column :label="language==0?'短名':'Short Name'" prop="personInfo.shortName" min-width="110"/>
<el-table-column :label="language==0?'性别':'Gender'" prop="personInfo.sexStr"/>
<el-table-column :label="language==0?'年龄':'Age'" prop="personInfo.age"/>
<el-table-column :label="language==0?'出生日期':'Birth'" prop="personInfo.birth" width="110"/>
<el-table-column :label="language==0?'手机号码':'Phone Number'" prop="personInfo.phone" width="120"/>
<el-table-column :label="language==0?'邮箱':'E-mail'" prop="personInfo.email" width="150"/>
<el-table-column :label="language==0?'证件类型':'ID Type'" prop="personInfo.idcTypeStr"/>
<el-table-column :label="language==0?'证件号码':'ID NO.'" prop="personInfo.idcCode" width="200"/>
<el-table-column :label="language==0?'会员角色':'Role'" width="150">
<template #default="scope">
<div class="esp">
<span v-for="item in scope.row.personInfo.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 ? '领队' : '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>
</template>
</el-table-column>
<el-table-column :label="language==0?'详细地址':'Detailed Address'" prop="personInfo.address" min-width="140"/>
<el-table-column :label="language==0?'报项':'Entries'" min-width="300" :fixed="hasAction?false:'right'">
<template #default="props">
<ol>
<li v-for="s in props.row.signInfo">
{{ s.cptProjectName }}
{{ s.cptGroupName }}{{ s.cptLevelName }}
<span v-show="s.cptSonLevelName">[{{ s.cptSonLevelName }}]</span>
<span v-show="s.zu">-{{ s.zu }}</span>
<!-- <el-button type="text" @click="editThis(s)">{{ language == 0 ? '修改' : 'Edit' }}</el-button>-->
<!-- <el-button type="text" @click="editMates(s)">更换队友</el-button>-->
<!-- <el-button type="text" @click="removeThis(s.id)">{{ language == 0 ? '删除' : 'Delete' }}</el-button>-->
</li>
</ol>
</template>
</el-table-column>
<el-table-column :fixed="hasAction?false:'right'" :label="language==0?'保险费':'Premium'" prop="insuranceFee">
<template #default="scope">
<span class="text-primary">¥{{ scope.row.insuranceFee }}</span>
</template>
</el-table-column>
<!-- 补充信息-->
<el-table-column v-for="(e,index) in extraTableHead" :key="index" :label="e" min-width="110" align="center">
<template #default="scope">
<el-link v-if="scope.row.signInfo[0].extraPersonInfoMapList[index]?.type=='2'"
:herf="scope.row.signInfo[0].extraPersonInfoMapList[index].value.url">
{{ scope.row.signInfo[0].extraPersonInfoMapList[index].value.name }}
</el-link>
<img v-else-if="scope.row.signInfo[0].extraPersonInfoMapList[index]?.type=='3'" style="width: 50px;"
:src="scope.row.signInfo[0].extraPersonInfoMapList[index].value.url||scope.row.signInfo[0].extraPersonInfoMapList[index].value">
<span v-else>{{ scope.row.signInfo[0].extraPersonInfoMapList[index]?.value }}</span>
</template>
</el-table-column>
<el-table-column v-if="hasAction" :label="language==0?'操作':'Actions'" fixed="right" width="150" align="center">
<template #default="scope">
<el-button v-if="extraform&&extraform.length>0" type="primary" link @click="goPersonInfo(scope.row)">
<span v-if="scope.row.extraPersonInfo">{{ language == 0 ? '修改' : 'Edit' }}</span>
<span v-else class="red">{{ language == 0?'完善补充信息':'Additional Information' }}</span>
</el-button>
</template>
</el-table-column>
</el-table>
</template>
<script setup>
import * as match from "@/apiPc/match";
import {onMounted} from "@vue/runtime-core";
import {watch} from "vue";
const emit = defineEmits(['editExtra'])
const props = defineProps({
matchId: {
type: String,
required: true
},
list: {
type: Array,
required: true
},
extraform: {
type: Object,
required: false
},
hasAction: {
type: Boolean,
required: false,
default: true
}
})
import cache from "@/plugins/cache";
const language = ref(cache.local.get('language') || 0)
const extraTableHead = ref([])
const loading = ref(true)
getTableHead()
const goPersonInfo = (row) => {
emit('editExtra', row)
}
function getTableHead() {
match.getCptExtraInfo(props.matchId).then(res => {
extraTableHead.value = res.data
loading.value = false
})
}
</script>
<style scoped>
</style>
<template>
<el-steps :active="activeStep" align-center>
<el-step :title="language==0?'教练/领队/其他':'Coach/Team Leader/Other'" />
<el-step :title="language==0?'选手报名':'Participant Registration'" />
<el-step :title="language==0?'提交审核':'Submit for review'" />
</el-steps>
</template>
<script setup>
import cache from "@/plugins/cache";
const language = ref(cache.local.get('language') || 0)
const props = defineProps({
activeStep: {
type: Number,
required: true
}
})
</script>
<style scoped>
</style>
......@@ -45,7 +45,7 @@
</div>
</div>
<el-empty image="@/assets/img/order_no.png" image-size="228" v-if="list?.length == 0" description=" "/>
<el-empty image="@/assets/img/order_no.png" :image-size="228" v-if="list?.length == 0" description=" "/>
</template>
<script setup>
......
......@@ -8,15 +8,12 @@
</template>
<script setup>
import cache from "@/plugins/cache";
const language = ref(cache.local.get('language') || 0)
const props = defineProps({
activeStep: {
type: Number,
required: true
},
language: {
type: Number,
required: true,
default: 0
}
})
</script>
......
<template>
<el-table :data="list" border style="width: 100%">
<el-table-column :label="language==0?'组别代码':'Group code'" width="120px" prop="zuName"/>
<el-table-column :label="language==0?'组别':'Group'" prop="project.name"/>
<el-table-column :label="language==0?'舞种':'Dance Style'" width="120px" prop="project.danceType"/>
<el-table-column :label="language==0?'参赛说明':'Participation Instructions'" prop="project.remarks"/>
<el-table-column :label="language==0?'参赛运动员':'Participating athletes'" width="120px">
<template #default="scope">
<div>
<span v-for="s in scope.row.athletes">{{ s.name }},</span>
</div>
</template>
</el-table-column>
<el-table-column :label="language==0?'报名费':'Registration Fee'" width="120px" prop="">
<template #default="scope">
<div class="text-primary">
¥{{ scope.row.project.serviceFee }}
</div>
</template>
</el-table-column>
<el-table-column v-if="hasAction" :label="language==0?'操作':'Actions'" fixed="right" width="150" align="center">
<template #default="scope">
<el-button type="primary" link @click="remove(scope.row.signId)">
{{language == 0 ? '删除' : 'Delete' }}
</el-button>
</template>
</el-table-column>
</el-table>
</template>
<script setup>
const emit = defineEmits(['delete'])
const props = defineProps({
list: {
type: Array,
required: true
},
hasAction:{
type: Boolean,
required: false,
default: true
}
})
import cache from "@/plugins/cache";
const language = ref(cache.local.get('language') || 0)
const remove = (id) => {
emit('delete', id)
}
</script>
<style scoped>
</style>
......@@ -111,7 +111,7 @@
</table>
</div>
<el-empty image="@/assets/img/order_no.png" image-size="228" v-if="matchData.cptProjectList?.length == 0" description=" "/>
<el-empty image="@/assets/img/order_no.png" :image-size="228" v-if="matchData.cptProjectList?.length == 0" description=" "/>
</div>
</div>
<match-schedule-list :match-data="matchData" v-if="menu[2].active==1"/>
......@@ -141,11 +141,11 @@
</div>
</el-col>
</el-row>
<el-empty image="@/assets/img/order_no.png" image-size="228" v-if="(signDoneGroupList==null)||(signDoneGroupList.length==0)" description="" />
<el-empty image="@/assets/img/order_no.png" :image-size="228" v-if="(signDoneGroupList==null)||(signDoneGroupList.length==0)" description="" />
</div>
<div v-if="menu[4].active==1">
<!-- 成绩-->
<el-empty image="@/assets/img/order_no.png" image-size="228" description="暂无成绩" />
<el-empty image="@/assets/img/order_no.png" :image-size="228" description="暂无成绩" />
</div>
<div v-if="menu[5].active==1" class="pd20">
<div class="xzbox" v-html="matchData.signKnow">
......@@ -195,7 +195,7 @@ const router = useRouter()
const { proxy } = getCurrentInstance()
import * as match from '@/apiPc/match'
import { toRefs } from '@vueuse/shared'
import { ElMessage } from 'element-plus'
import {dayjs, ElMessage} from 'element-plus'
import useUserStore from "@/store/modules/user";
const data = reactive({
matchData: {},
......@@ -205,13 +205,18 @@ const data = reactive({
popupGroupList:false,
menu:[{name:'赛事详情',active:1},{name:'赛事设项',active:0},{name:'日程',active:0},{name:'参赛队',active:0},{name:'成绩',active:0},{name:'报名须知',active:0}],
menu1:[{name:'分站赛',active:1},{name:'赛事详情',active:0},{name:'日程',active:0}],
signDoneGroupList: []
signDoneGroupList: [],
time:''
})
const {matchData,matchId,groupId,activeName2,popupGroupList,menu,menu1,signDoneGroupList} = toRefs(data)
const {time,matchData,matchId,groupId,activeName2,popupGroupList,menu,menu1,signDoneGroupList} = toRefs(data)
const group = useUserStore().group
const user = useUserStore().user
onMounted(() => {
if(group){
groupId.value = group.id
} else {
groupId.value = 0
}
match.getMaList().then((res) => {
if(route.params.id!=0){
matchId.value = route.params.id
......@@ -230,6 +235,8 @@ function getMatch(id) {
if(id!=0)
match.getMatchById({ id: id }).then(res => {
matchData.value = res.data
var today = dayjs().format('YYYY-MM-DD HH:mm:ss')
time.value = dayjs(res.data.signEndTime).diff(today, 'millisecond')
})
}
function getGroupListByCptId(id) {
......@@ -255,8 +262,15 @@ function choseSignType() {
// checkIsSign().then(() => {
if (matchData.value.signType == '0'||(matchData.value.signType == '2' && user.utype == '1')) {
// 个人报名
// router.push({
// path: `${matchId.value}/singleSign`
// })
router.push({
path: `${matchId.value}/singleSign`
name: `chooseCoach`,
query: {
matchId: matchId.value,
signType: matchData.value.signType
}
})
}
if(matchData.value.signType == '1'||(matchData.value.signType == '2' && user.utype == '2')){
......
......@@ -8,13 +8,13 @@
<img class="mauto w100" :src="fillImgUrl(matchData.coverUrl)" >
</el-col>
<el-col :lg="9" :md="12" :xl="10">
<h3>
<h3 class="m0">
{{ matchData.name }}
</h3>
<p class="ppl"><label class="bm1">Playing Time:</label>{{matchData.beginTime?.slice(0,10)}} ~ {{ matchData.endTime?.slice(0,10) }}</p>
<p class="ppl"><label class="bm2">Event Level:</label>{{ matchData.level }}</p>
<p class="ppl"><label class="bm3">Location:</label>{{ matchData.address }}</p>
<p class="ppl"><label class="bm4">Registration Deadline:</label>{{ matchData.signEndTime?.slice(0,10) }}</p>
<p class="ppl" v-if="matchData.address"><label class="bm3">Location:</label>{{ matchData.address }}</p>
<p class="ppl" v-if="matchData.signEndTime"><label class="bm4">Registration Deadline:</label>{{ matchData.signEndTime?.slice(0,10) }}</p>
</el-col>
<el-col :lg="8" :md="12" :xl="8" v-if="matchData.type=='0'">
<p class="countDownTitle"><span>Registration deadline countdown</span></p>
......@@ -111,7 +111,7 @@
</table>
</div>
<el-empty image="@/assets/img/order_no.png" image-size="228" v-if="matchData.cptProjectList?.length == 0" description=" "/>
<el-empty image="@/assets/img/order_no.png" :image-size="228" v-if="matchData.cptProjectList?.length == 0" description=" "/>
</div>
</div>
<match-schedule-list :match-data="matchData" v-if="menu[2].active==1"/>
......@@ -141,11 +141,11 @@
</div>
</el-col>
</el-row>
<el-empty image="@/assets/img/order_no.png" image-size="228" v-if="(signDoneGroupList==null)||(signDoneGroupList.length==0)" description="" />
<el-empty image="@/assets/img/order_no.png" :image-size="228" v-if="(signDoneGroupList==null)||(signDoneGroupList.length==0)" description="" />
</div>
<div v-if="menu[4].active==1">
<!-- 成绩-->
<el-empty image="@/assets/img/order_no.png" image-size="228" description="" />
<el-empty image="@/assets/img/order_no.png" :image-size="228" description="" />
</div>
<div v-if="menu[5].active==1" class="pd20">
<div class="xzbox" v-html="matchData.signKnow">
......@@ -197,7 +197,7 @@ const router = useRouter()
const { proxy } = getCurrentInstance()
import * as match from '@/apiPc/match'
import { toRefs } from '@vueuse/shared'
import { ElMessage } from 'element-plus'
import {dayjs, ElMessage} from 'element-plus'
import useUserStore from "@/store/modules/user";
const user = useUserStore().user || {}
const group = useUserStore().group || {}
......@@ -210,11 +210,16 @@ const data = reactive({
menu:[{name:'Event details',active:1},{name:'Event settings',active:0},{name:'Schedule',active:0},{name:'Participating teams',active:0},
{name:'Achievement',active:0},{name:'Notes',active:0}],
menu1:[{name:'Station race',active:1},{name:'Event details',active:0},{name:'Schedule',active:0}],
signDoneGroupList: []
signDoneGroupList: [],
time:''
})
const {matchData,matchId,groupId,activeName2,popupGroupList,menu,menu1,signDoneGroupList} = toRefs(data)
const {matchData,matchId,groupId,activeName2,popupGroupList,menu,menu1,signDoneGroupList,time} = toRefs(data)
onMounted(() => {
if(group){
groupId.value = group.id
} else {
groupId.value = 0
}
match.getMaList().then((res) => {
if(route.params.id!=0){
matchId.value = route.params.id
......@@ -232,6 +237,8 @@ function getMatch(id) {
if(id!=0)
match.getMatchById({ id: id }).then(res => {
matchData.value = res.data
var today = dayjs().format('YYYY-MM-DD HH:mm:ss')
time.value = dayjs(res.data.signEndTime).diff(today, 'millisecond')
})
}
function getGroupListByCptId(id) {
......@@ -258,7 +265,11 @@ function choseSignType() {
if (matchData.value.signType == '0'||(matchData.value.signType == '2' && user.utype == '1')) {
// 个人报名
router.push({
path: `${route.params.id}/singleSign`
name: `chooseCoach`,
query: {
matchId: matchId.value,
signType: matchData.value.signType
}
})
}
if(matchData.value.signType == '1'||(matchData.value.signType == '2' && user.utype == '2')){
......@@ -289,6 +300,7 @@ function checkIsSign() {
</script>
<style scoped lang="scss">
.m0{margin: 0;}
.indexTitle{margin: 20px 0 12px;
h3{
font-size: 20px;
......
......@@ -5,56 +5,18 @@
<team-sign-step :language="language" :active-step="activeStep"/>
</el-card>
<el-card :body-style="{ padding: '0px' }">
<match-info-row :matchInfo="matchInfo" :language="language"/>
<group-info-row :groupInfo="groupInfo" :language="language"/>
<coach-info-row :names="names" :language="language"/>
<match-info-row v-if="matchId" :match-id="matchId"/>
<group-info-row />
<coach-info-row v-if="matchId" :match-id="matchId" :language="language"/>
<div style="margin: 20px">
<div class="mt20">
<div class="leftboderTT">参赛人员清单</div>
<el-table :data="tableData" border style="width: 100%" class="mt20" :span-method="arraySpanMethod">
<el-table-column label="所属国家"/>
<el-table-column prop="name" label="姓氏" width="180" align="center"></el-table-column>
<el-table-column label="名"/>
<el-table-column label="短名"/>
<el-table-column prop="sex" label="性别" width="180" align="center"></el-table-column>
<el-table-column prop="age" label="年龄" width="180" align="center"></el-table-column>
<el-table-column label="出生日期" align="center"/>
<el-table-column prop="phone" label="手机号码" width="180" align="center"></el-table-column>
<el-table-column label="邮箱"/>
<el-table-column label="证件类型" align="center"/>
<el-table-column label="证件号码"/>
<el-table-column label="报项" fixed="right">
<template #default="scope">
<ol>
<li v-for="item in scope.row.items" :key="item.id">{{ item.name }}</li>
</ol>
</template>
</el-table-column>
<el-table-column label="保险费" fixed="right" align="center">
<template #default="scope">
<span class="text-primary">¥{{ scope.row.signFee }}/人</span>
</template>
</el-table-column>
</el-table>
<div class="leftboderTT">{{ language==0?'参赛人员清单':'Participant List' }}</div>
<sign-info-table class="mt20" :match-id="matchId" :list="signInfoList" :hasAction="false"/>
</div>
<div class="mt20">
<div class="leftboderTT">设项报名清单</div>
<!-- 报项列表-->
<el-table :data="tableData" border style="width: 100%" class="mt20">
<el-table-column label="组别代码" align="center"/>
<el-table-column label="组别" align="center"/>
<el-table-column label="舞种" align="center"/>
<el-table-column label="参赛说明"/>
<el-table-column label="参赛运动员"/>
<el-table-column label="补充信息"/>
<el-table-column label="报名费" align="center">
<template #default="scope">
<span class="text-primary">¥{{ scope.row.signFee }}/人</span>
</template>
</el-table-column>
</el-table>
<div class="leftboderTT">{{ language==0?'设项报名清单':'Event Registration List' }}</div>
<zu-table class="mt20" :list="zuTableList" :hasAction="false"/>
</div>
</div>
......@@ -64,20 +26,22 @@
<el-row class="priceBar">
<el-col :lg="16" :xs="24" class="pd20">
<div class="flex">
<div class="item"><label>报名费:</label><span>¥3000</span></div>
<div class="item"><label>保险费:</label><span>¥3000</span></div>
<div class="item"><label>费用总计:</label><span>¥6000</span></div>
<div class="item"><label>{{ language==0?'报名费':'Registration Fee' }}</label><span>¥{{form.cptRegistrationFee?.totalFee}}</span></div>
<div class="item"><label>{{ language==0?'保险费':'Insurance Fee' }}</label><span>¥{{form.cptInsuranceFee?.totalFee}}</span></div>
<div class="item"><label>{{ language==0?'费用总计':'Total Cost' }}</label><span>¥{{form.totalFee}}</span></div>
</div>
</el-col>
<el-col :lg="8" :xs="24" class="text-right pd20">
<el-link type="primary"><el-icon><Upload /></el-icon>导出参赛人员清单</el-link>
<el-link type="primary"><el-icon><Upload /></el-icon>导出设项报名清单</el-link>
<el-link type="primary" @click="exportSignList(1)"><el-icon><Upload /></el-icon>
{{ language==0?'导出参赛人员清单':'Export Participant List' }}</el-link>
<el-link type="primary" @click="exportSignList(2)"><el-icon><Upload /></el-icon>
{{ language==0?'导出设项报名清单':'Registration Fee for Event Entry' }}</el-link>
</el-col>
</el-row>
<div class="text-center pd20">
<el-button type="primary" class="" plain round @click="goPrev()">上一步</el-button>
<el-button type="primary" class="" plain round @click="submitForm()">保存暂不提交审核</el-button>
<el-button type="primary" class="btn-lineG w200px" round @click="submitForm()">提交审核</el-button>
<el-button type="primary" class="" plain round @click="goPrev()">{{ language == 0 ? "上一步" : 'Go back' }}</el-button>
<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>
</el-card>
</div>
......@@ -89,64 +53,117 @@ import TeamSignStep from './components/teamSignStep'
import MatchInfoRow from "@/viewsPc/match/components/matchInfo-row"
import GroupInfoRow from "@/viewsPc/match/components/groupInfo-row"
import CoachInfoRow from "@/viewsPc/match/components/coachInfo-row"
import {ref} from "vue"
import SignInfoTable from "@/viewsPc/match/components/signInfo-table"
import {getCurrentInstance, ref} from "vue"
import cache from "@/plugins/cache";
import {onMounted} from "@vue/runtime-core";
import * as match from "@/apiPc/match"
import {useRoute, useRouter} from "vue-router";
import useUserStore from "@/store/modules/user";
import ZuTable from "@/viewsPc/match/components/zu-table";
import {ElMessageBox} from "element-plus";
import {exportCn} from "@/apiPc/match";
const route = useRoute()
const router = useRouter()
const activeStep = ref(3)
const matchInfo = ref({})
const groupInfo = useUserStore().group || {}
const language = ref(cache.local.get('language') || 0)
const groupId = ref()
const form = ref({})
const matchId = ref()
const names = ref({})
const matchId = ref(route.query.matchId)
const signInfoList = ref([])
const zuTableList = ref([])
const {proxy} = getCurrentInstance()
onMounted(()=>{
console.log(route.query)
groupId.value = route.query.groupId || 0
// console.log(route.query)
matchId.value = route.query.matchId
getMatch()
getFee()
if(groupId.value!=0){
tuandui()
} else {
geren()
}
groupId.value = route.query.groupId || 0
getSignList()
getFee(groupId.value)
})
const getMatch = () => {
match.getMatchById({ id: matchId.value }).then(res => {
matchInfo.value = res.data
})
}
function geren() {
match.getChooseDoneSingleCoachs(matchId.value).then(res => {
names.value = res.data
})
}
function tuandui() {
match.getChooseDoneGroupCoachs(matchId.value, groupId.value).then(res => {
names.value = res.data
function getSignList() {
match.getMySignInfoList({
cptId: matchId.value,
groupId: groupId.value
}).then(res=>{
signInfoList.value = res.data.singleData
zuTableList.value = res.data.zuData
})
}
const goPrev = () => {
router.go(-1)
// router.go(-1)
router.push({
name: 'chooseSportsman',
query: {
matchId: matchId.value,
groupId: groupId.value
}
})
}
const getFee = () => {
console.log(groupId.value)
const getFee = (entryId) => {
match.getTotalFee({
entryId: groupId.value,
entryId: entryId,
cptId: matchId.value
}).then(res => {
form.value = res.data
})
}
const submitForm = (n) => {
if(n==0){
ElMessageBox.confirm(`您当前的操作为暂存,并不是提交审核,必须在报名截止时间XXXX-XX-XX之前完成提交。\n` +
'\n' +
'您也可以在个人中心-我的报名中,找到这条报名,点击提交审核。','提示',{
confirmButtonText: '去个人中心',
cancelButtonText: '知道了',
type: 'warning'
}).then((res)=>{
console.log(res)
router.push({name: 'myMatch'})
})
return
}
match.commitSign({
groupId: groupId.value,
cptId: matchId.value
}).then(res=>{
router.push({
name:`commitDone`,
params: {
orderId: res.data
}
})
})
}
function exportSignList(n) {
var obj = {
cptId: matchId.value,
groupId: groupId.value,
type:n
}
var fileName
if(language.value==0){
if(n==1){
fileName = '参赛人员清单'
}else {
fileName = '设项报名清单'
}
proxy.download('/league/sign/exportCn', {
...obj
}, `${fileName}_${new Date().getTime()}.xlsx`)
} else {
if(n==1){
fileName = 'Participant List'
}else {
fileName = 'Registration Fee for Event Entry'
}
proxy.download('/league/sign/exportEn', {
...obj
}, `${fileName}_${new Date().getTime()}.xlsx`)
}
}
</script>
<style scoped lang="scss">
......
......@@ -7,7 +7,7 @@
</el-card>
<div class="h20"></div>
<div class="panel" style="box-shadow: var(--el-box-shadow)">
<match-info-row :matchInfo="matchInfo" :language="language"/>
<match-info-row :match-id="cptId" :language="language"/>
<div class="h20"></div>
<el-form ref="ruleFormRef" label-width="120px" class="signForm"
:model="form" :rules="rules"
......@@ -108,8 +108,8 @@ const data = reactive({
enBo:{}
},
form: {},
groupId: 0,
cptId: 0,
groupId: route.query.groupId||0,
cptId: route.query.matchId||0,
signType: false,
regionsList: [],
participantsInfoArr: [],
......@@ -143,9 +143,7 @@ const uploadUrl = ref('/upload/upLoadToFileServer')
onMounted(() => {
// 获取团体信息
groupId.value = route.query.groupId
getGroupInfo()
cptId.value = route.query.matchId
signType.value = route.query.signType
getRegionsList()
......
......@@ -5,8 +5,8 @@
<!-- 国内-机构注册-->
<el-card>
<el-steps :active="activeStep" finish-status="success" align-center>
<el-step title="创建账号"/>
<el-step title="注册完成"/>
<el-step :title="language==0?'创建账号':'create an account'"/>
<el-step :title="language==0?'注册完成':'stered successfully'" />
</el-steps>
</el-card>
......@@ -14,37 +14,53 @@
<div v-if="activeStep==0">
<el-card style="min-height: 50vh">
<div class="pt30">
<el-form class="d-form" size="large" label-width="120"
<el-form class="d-form" size="large" :label-width="language==0?120:180"
style="max-width: 500px;margin: auto">
<el-form-item label="WDSF卡号" required>
<el-input type="text" v-model="form.WDSF" @change="resetCode(0)" @blur="verifyCode">
<el-form-item :label="language==0?'WDSF卡号':'WDSF'" required>
<el-input type="text" v-model="form.card" @change="resetCode(0)" @blur="verifyCode">
<template #append>
<el-button type="primary" plain style="width: 110px" @click="checkwdsf">
<span>校验卡号</span>
<el-button type="primary" plain style="width: 110px" @click="checkCard">
<el-icon v-if="checkStatus" size="16" color="#67C23A"><CircleCheckFilled /></el-icon>
<span v-else>{{ language==0?'校验卡号':'Check Code' }}</span>
</el-button>
</template>
</el-input>
</el-form-item>
<el-form-item label="手机/邮箱" required>
<el-form-item :label="language==0?'手机/邮箱':'E-mail / Phone number'" required>
<el-input type="text" v-model="form.account" @change="resetCode(1)" @blur="verifyCode"/>
</el-form-item>
<el-form-item label="验证码" required>
<el-form-item :label="language==0?'验证码':'Code'" required>
<el-input v-model="form.code">
<template #append>
<el-button type="primary" plain style="width: 110px" @click="sendsmsMsg">
<count-down v-if="counting" v-slot="{ totalSeconds }" :time="60000" @end="counting=false">
{{ totalSeconds }}
{{ totalSeconds }} {{ language==0?'秒':'s' }}
</count-down>
<span v-else>发送验证码</span>
<span v-else>{{ language==0?'发送验证码':'Send code' }}</span>
</el-button>
</template>
</el-input>
</el-form-item>
<div class="h30"></div>
<div class="leftboderTT">{{ language == 0 ? '登录密码' : 'Password' }} <span
v-if="language==0">(登录时需要验证,保护账户信息)</span></div>
<div class="h20"></div>
<el-form-item :label="language==0?'密码':'Password'" required>
<el-input type="password" show-password v-model="form.password"
:placeholder="language==0?'6-16位密码。区分大小写':''"/>
</el-form-item>
<el-form-item :label="language==0?'确认密码':'Confirm Password'" required>
<el-input type="password" show-password v-model="form.confirmPassword" @blur="vconfirmPassword"
:placeholder="language==0?'再次输入密码':'Confirm Password'"/>
</el-form-item>
</el-form>
</div>
<div class="text-center">
<!-- <el-button class="primary-kx" round @click="goBack">取消</el-button>-->
<el-button type="primary" class="btn-lineG w200px" round @click="next">下一步</el-button>
<el-button type="primary" class="btn-lineG w200px" round @click="next">
{{ language==0?'立即注册':'Register Now' }}
</el-button>
</div>
</el-card>
</div>
......@@ -66,19 +82,22 @@ import Vcode from "vue3-puzzle-vcode"
import { ElMessage } from 'element-plus'
import CountDown from '@chenfengyuan/vue-countdown'
import cache from '@/plugins/cache'
import {checkWdsf, getCaptchaSms, registerSingle} from "@/apiPc/match";
import {setToken} from "@/utils/auth";
const language = ref(cache.local.get('language') || 0)
const data = reactive({
isShow:false,
isCodeTrue:0,
counting:false,
checkStatus:false,
form:{},
activeStep: 0,
failVcode:'验证失败,请重试',
successVcode:'验证通过!',
sliderText: '拖动滑块完成拼图',
})
const {isShow,isCodeTrue,counting,form,activeStep,failVcode,successVcode,sliderText} = toRefs(data)
const {isShow,isCodeTrue,counting,form,activeStep,failVcode,successVcode,sliderText,checkStatus} = toRefs(data)
onMounted(()=>{
if(language.value==1){
failVcode.value = 'Error!'
......@@ -95,14 +114,15 @@ function sendsmsMsg() {
}
return
}
if(counting.value){
return
} else {
isShow.value = true
}
}
function checkwdsf() {
if(!form.value.WDSF){
function checkCard() {
if(!form.value.card){
if(language.value==0){
ElMessage.error('请填写WDSF卡号')
} else {
......@@ -125,13 +145,15 @@ function codeSuccess(msg) {
isShow.value = false
isCodeTrue.value += 1
if(isCodeTrue.value==1){
checkWdsf({card:form.value.card}).then(res=>{
checkStatus.value = res.data
})
}
if(isCodeTrue.value==2){
counting.value = true
// getCaptchaSms({account:form.value.account}).then(res=>{
//
// })
getCaptchaSms({account:form.value.account}).then(res=>{
})
}
}
......@@ -139,10 +161,24 @@ function resetCode(n) {
isCodeTrue.value = n
}
function next() {
registerSingle(form.value).then(res=>{
setToken(res.data.token)
activeStep.value = 1
})
}
</script>
<style scoped>
<style scoped lang="scss">
.leftboderTT {
color: var(--el-color-primary);
font-size: 16px;
font-weight: 600;
span {
color: #929AA0;
font-size: 14px;
}
}
.h20{height: 20px}
.h30{height: 30px}
</style>
......
......@@ -10,7 +10,7 @@
<template #append>
<el-button type="primary" plain style="width: 110px" @click="sendsmsMsg">
<count-down v-if="counting" v-slot="{ totalSeconds }" :time="60000" @end="counting=false">
{{ totalSeconds }}
{{ totalSeconds }} {{ language==0?'秒':'s' }}
</count-down>
<span v-else>
{{ language==0?'发送验证码':'Send code' }}
......@@ -89,9 +89,9 @@ function codeSuccess(msg) {
isShow.value = false
isCodeTrue.value = true
counting.value = true
// getCaptchaSms({account:form.value.account}).then(res=>{
//
// })
getCaptchaSms({account:form.value.account}).then(res=>{
})
}
function resetCode() {
isCodeTrue.value = false
......
......@@ -167,6 +167,7 @@ const goStep3 = () => {
loading.value = true
delete form.value.confirmPassword
form.value.regionId = regionArr.value.pop()
form.value.username= props.accont
match.pcRegisterTeam(form.value).then(res => {
setToken(res.data.token)
emit('submit')
......
......@@ -17,13 +17,14 @@
</template>
<script setup>
import {reactive} from "@vue/runtime-core";
import {toRefs} from "@vueuse/shared/index";
import {reactive,toRefs} from "@vue/runtime-core";
const router = useRouter()
import Vcode from "vue3-puzzle-vcode"
import {ElMessage} from 'element-plus'
import CountDown from '@chenfengyuan/vue-countdown'
import {getCaptchaSms, checkRegisterCode} from "@/apiPc/match"
import cache from '@/plugins/cache'
import {useRouter} from "vue-router";
const language = ref(cache.local.get('language') || 0)
const props = defineProps({
accont:{
......@@ -42,10 +43,15 @@ const {isShow, isCodeTrue, counting, form, activeStep} = toRefs(data)
const emit = defineEmits(['submit', 'userName'])
const goHome = () => {
router.push({
name: `home`
})
}
const goSign = () => {
router.push({
name: `matchDetail`,
params:{id:0}
})
}
</script>
......
......@@ -70,19 +70,19 @@ export default defineConfig(({ mode, command }) => {
rewrite: (p) => p.replace(/^\/dev-api\/ztx-train/, '')
},
'/dev-api/ztx-match': {
target: 'http://192.168.1.132:8083',
target: 'http://192.168.1.131:8083',
// target: 'http://192.168.1.132:8081',
changeOrigin: true,
rewrite: (p) => p.replace(/^\/dev-api\/ztx-match/, '')
},
'/dev-api/ztx-webSite': {
// target: 'http://123.60.96.243:1897/stage-api/',
target: 'http://192.168.1.130:8083/',
target: 'http://192.168.1.131:8083/',
changeOrigin: true,
rewrite: (p) => p.replace(/^\/dev-api\/ztx-webSite/, '')
},
'/dev-api': {
target: 'http://192.168.1.130:8083',
target: 'http://192.168.1.131:8083',
// target: 'http://localhost:8787',
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!