c22b116f by 杨炀

no message

1 parent 4d8b424f
Showing 42 changed files with 478 additions and 230 deletions
......@@ -148,7 +148,7 @@ li.el-select-dropdown__item {
}
.el-sub-menu .el-sub-menu__title {
font-size: 20px;color: #000;
font-size: 18px;color: #000;
}
.el-menu--horizontal > .el-sub-menu.is-active .el-sub-menu__title {
......
......@@ -599,3 +599,10 @@ export function upReceipt(data) {
data:data
})
}
export function signgetSignInfoConflict(query) {
return request({
url: `/league/sign/getSignInfoConflict`,
method: 'get',
params:query
})
}
......
......@@ -74,11 +74,15 @@ div:focus {
.pl-5 {
padding-left: 5px;
}
.pl-15 {
padding-left: 15px;
}
.mr5{margin-right: 5px;}
.block {
display: block;
}
.text-right{text-align: right;
}
.pointer {
cursor: pointer;
}
......
......@@ -61,6 +61,7 @@
import { getToken } from '@/utils/auth'
import _ from 'lodash'
import { computed } from 'vue'
import cache from "@/plugins/cache";
const props = defineProps({
modelValue: [String, Object, Array],
......@@ -114,7 +115,11 @@ const fileOriginalName = ref('')
const uploadList = ref([])
// const baseUrl = import.meta.env.VITE_APP_BASE_API;
const uploadFileUrl = ref(import.meta.env.VITE_APP_BASE_API + props.action) // 上传文件服务器地址
const headers = ref({ Authorization: 'Bearer ' + getToken() })
const language = cache.local.get('language') || 0
const headers = ref({
Authorization: 'Bearer ' + getToken(),
['Content-Language'] : language==0? 'zh_CN':'en_US' ,
})
const fileList = ref([])
const showTip = computed(
() => props.isShowTip && (props.fileType || props.fileSize)
......
......@@ -5,7 +5,7 @@
<el-col :lg="12" :md="12" :xs="24">
<ul>
<li>
<router-link to="/about">亚洲体育舞蹈节版权所有</router-link>
<router-link to="/about"></router-link>
</li>
<li>
<a target="_blank" href="https://beian.miit.gov.cn/">ICP备案号:苏ICP备2023054420号-2</a>
......
<template>
<div class="topNav">
<router-link to="/">
<img class="logo" src="@/assets/v1/nav_logo.png">
<!-- <img class="logo" src="@/assets/v1/nav_logo.png">-->
<img class="logo" src="/img/logoArr.png">
</router-link>
<div class="home-menu forPc" style="margin: 0 20px">
<el-menu
<el-menu v-if="language==0"
router :default-active="activeIndex" :mode="mode" :ellipsis="true"
popper-effect="dark" @select="handleSelect"
>
<el-menu-item index="/">{{ language==0?'首页':'HOME' }}</el-menu-item>
<el-menu-item index="/news">{{ language==0?'新闻资讯':'NEWS' }}</el-menu-item>
<el-menu-item index="/notice">{{ language==0?'通知公告':'NOTICEBOARD' }}</el-menu-item>
<el-menu-item index="/match/list/0">{{ language==0?'大赛报名':'SIGN UP' }}</el-menu-item>
<el-menu-item index="/saiC">{{ language==0?'赛程安排':'COMPETITIONS' }}</el-menu-item>
<el-menu-item index="/meta">{{ language==0?'媒体中心':'MEDIA' }}</el-menu-item>
<el-menu-item index="/guide">{{ language==0?'参赛指南':'GUIDELINE' }}</el-menu-item>
<el-sub-menu index="/about">
<template #title>{{ language==0?'关于我们':'CONTACT & MORE' }}</template>
<el-menu-item index="/about/wuDao">{{ language==0?'舞蹈节':'About Us' }}</el-menu-item>
<el-menu-item index="/about/regulations" v-if="language==1">Rules & Regulations</el-menu-item>
<el-menu-item index="/about/culture">{{ language==0?'地方文化':'Culture' }}</el-menu-item>
</el-sub-menu>
</el-menu>
<el-menu v-else class="enMenu"
router :default-active="activeIndex" :mode="mode" :ellipsis="true"
popper-effect="dark" @select="handleSelect"
>
......@@ -220,6 +239,9 @@ function getCode() {
</script>
<style scoped lang="scss">
.home-menu .enMenu{
//.el-menu-item{margin: 0 3px!important;}
}
.loginBtn {color: #fff;margin-right: 15px;border: none;
background: linear-gradient(-90deg, #8623FC, #453DEA);box-shadow:0 0 10px #fff;
&:active {
......@@ -296,7 +318,7 @@ 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;}
.home-menu .el-sub-menu{font-size: 16px;}
.weiMenu.el-menu{
border: none;
:deep(.el-menu-item.is-active){color: var(--el-color-primary);}
......@@ -309,31 +331,36 @@ function getCode() {
:deep(.el-sub-menu__title){font-size: 20px}
:deep(.el-sub-menu .el-sub-menu__icon-arrow){font-size: 20px}
}
@media (max-width: 1400px) {
@media (max-width: 1675px) {
.search {
display: none;
}
}
@media (max-width: 1620px) {
.home-menu .el-menu--horizontal > .el-menu-item{margin: 0 2px; }
}
@media (max-width: 1450px) {
.home-menu .el-menu--horizontal > .el-menu-item{font-size: 15px}
}
@media (max-width: 1340px) {
.loginBtn {
display: none;
}
.home-menu .el-menu--horizontal > .el-menu-item{margin: 0; }
}
@media (max-width: 1250px) {
.home-menu .el-menu--horizontal > .el-menu-item{font-size: 14px}
.topNav .logo{height: 50px}
}
@media (max-width: 1000px) {
.box {
width: 100%
}
}
@media (max-width: 800px) {
.ropenbtn{display: block}
.forPc {
display: none;
}
.ropenbtn{display: block}
}
</style>
......
<template>
<div class="topNav">
<router-link to="/">
<img class="logo" src="@/assets/v1/nav_logo.png">
<img class="logo" src="/img/logoArr.png">
</router-link>
<div class="flex-right" style="display:none;">
......
......@@ -353,6 +353,49 @@ export const constantRoutes = [
]
},
{
path: 'booking',
component: Empty,
redirect: '/booking',
children: [
{
path: '0/:cptId',
component: () => import('@/viewsPc/booking/ticket'),
name: 'ticket',
meta: { title: '票务预订' }
},
{
path: '1/:cptId',
component: () => import('@/viewsPc/booking/hotel'),
name: 'hotel',
meta: { title: '酒店预约' }
},
{
path: '2/:cptId',
component: () => import('@/viewsPc/booking/car'),
name: 'car',
meta: { title: '车辆预约' }
},
{
path: '3/:cptId',
component: () => import('@/viewsPc/booking/dinner'),
name: 'dinner',
meta: { title: '餐饮预订' }
},
{
path: '4/:cptId',
component: () => import('@/viewsPc/booking/makeUp'),
name: 'makeUp',
meta: { title: '化妆预约' }
},
{
path: '5/:cptId',
component: () => import('@/viewsPc/booking/photo'),
name: 'photo',
meta: { title: '拍照预约' }
},
]
},
{
path: 'search',
component: Empty,
redirect: '/search',
......
<template>
<div>
<div class="box">
</div>
</div>
</template>
<script setup>
</script>
<style scoped>
</style>
<template>
<div>
<div class="box">
</div>
</div>
</template>
<script setup>
</script>
<style scoped>
</style>
<template>
<div>
<div class="box">
</div>
</div>
</template>
<script setup>
</script>
<style scoped>
</style>
<template>
<div>
<div class="box">
</div>
</div>
</template>
<script setup>
</script>
<style scoped>
</style>
<template>
<div>
<div class="box">
</div>
</div>
</template>
<script setup>
</script>
<style scoped>
</style>
<template>
<div>
<div class="box">
</div>
</div>
</template>
<script setup>
</script>
<style scoped>
</style>
......@@ -45,13 +45,13 @@ import {useRoute, useRouter} from 'vue-router'
import {onMounted} from '@vue/runtime-core'
import useUserStore from '@/store/modules/user'
import _ from 'lodash'
import cache from "@/plugins/cache";
const language = ref(cache.local.get('language') || 0)
import {useStorage} from "@vueuse/core/index";
const language= useStorage('language',0)
const route = useRoute()
const router = useRouter()
const user = ref({})
const user = useUserStore().user || {}
const menus = ref([
{
name: language.value==0?'基础信息':'Basic Information',
......@@ -118,13 +118,6 @@ const menusPersonal = ref([
picUrl2: '/img/nav_27_dwn.png',
isActive: false
},
{
name: language.value==0?'选手管理':'Player Management',
routeName: 'myMember',
picUrl1: '/img/nav_31.png',
picUrl2: '/img/nav_31_dwn.png',
isActive: false
},
{
name: language.value==0?'我的报名':'My Registration',
routeName: 'myMatch',
......@@ -149,20 +142,25 @@ const menusPersonal = ref([
])
let currMenu
onMounted(() => {
user.value = useUserStore().user || {}
if(!user.utype){
router.push({name: 'home'})
return
}
if(user.utype=='1'){
currMenu = _.find(menus.value, (m) => {
return m.routeName === route.name
})
}else {
currMenu = _.find(menusPersonal.value, (m) => {
return m.routeName === route.name
})
currMenu.isActive = true
}
console.log(route.name)
if (currMenu) {
if(user.utype=='2'){
currMenu = _.find(menus.value, (m) => {
return m.routeName === route.name
})
currMenu.isActive = true
}
})
const toInfo = (item,list) => {
......
......@@ -68,10 +68,10 @@
<legend>{{ language==0?'机构法人信息':'Institutional legal person information' }} </legend>
<div class="pt30" style="max-width: 500px">
<el-form-item :label="language==0?'法人姓名':'Legal Person Name'" required>
<el-input type="text" v-model="form.orgCode" :placeholder="language==0?'请输入内容':''"/>
<el-input type="text" v-model="form.legalName" :placeholder="language==0?'请输入内容':''"/>
</el-form-item>
<el-form-item :label="language==0?'法定代表人身份文件':'Identity documents of the legal representative'" required >
<file-upload :is-show-tip="false" v-model="form.orgCert" :button-text="language==0?'上传文件':'Upload'"/>
<file-upload :is-show-tip="false" v-model="form.legalFile" :button-text="language==0?'上传文件':'Upload'"/>
</el-form-item>
</div>
......@@ -79,7 +79,7 @@
</el-form>
<div class="text-center mt30">
<el-button type="primary" class="btn-lineG w200px" round>{{ language==0?'提交审核':'Submit' }}</el-button>
<el-button type="primary" class="btn-lineG w200px" @click="submit" round>{{ language==0?'提交审核':'Submit' }}</el-button>
</div>
</div>
</el-card>
......@@ -100,7 +100,7 @@ const form = ref({})
const regionsList = ref([])
const countryList = ref([])
function submit() {
commitAudit().then(res => {
commitAudit(form.value).then(res => {
})
}
......
......@@ -10,7 +10,7 @@
</div>
<!-- uType字段 1 是个人 2是团体-->
<!-- {{user}}-->
<team-info :form="myform" :language="language" v-if="user.utype=='2'"/>
<team-info :form="myform" v-if="user.utype=='2'"/>
<div class="pd20" v-else>
<div class="d-form-border" style="margin-top: 0">
<el-form class="d-form" label-width="120" :rules="rules" ref="formref">
......
......@@ -57,12 +57,6 @@
:total="total"
@pagination="getList"
/>
<!-- 报项详情-->
<dialogModifySign :props="dialogModifySignProps"/>
<!-- 订单详情-->
<dialogModifyBill :props="dialogModifyBillProps"/>
</el-card>
</template>
......@@ -71,14 +65,13 @@
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";
import cache from "@/plugins/cache";
const language = ref(cache.local.get('language') || 0)
import {useStorage} from "@vueuse/core/index";
const language= useStorage('language',0)
const router = useRouter()
const {proxy} = getCurrentInstance()
const total = ref(0)
......@@ -96,9 +89,6 @@ const dialogModifyBillProps = ref({
...dialogPropsBase
})
const activeName = ref('first')
const myform = ref({})
const groupList = ref([])
const cptPeriodArr = ref([])
const payTimeArr = ref([])
const commitTimeArr = ref([])
......@@ -113,12 +103,6 @@ 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
......@@ -194,74 +178,12 @@ function getList() {
})
}
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)
// 刷新数据
getList()
})
})
}
function downloadVoucher(row) {
proxy.download(
`/ztx-match/pdf/getPayedOrderPdf/${row.id}/${row.groupId || 0}`, {}, '报项凭证.pdf'
)
}
</script>
<style scoped lang="scss">
......@@ -364,7 +286,7 @@ function downloadVoucher(row) {
width: auto;
}
.ppl{font-size: 14px;
label{color: #929AA0;}
label{color: #929AA0;display: block;font-size: 12px;}
}
.btnbox{text-align: right;}
</style>
......
......@@ -9,16 +9,6 @@
<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?'短名':'Nick Name'">-->
<!-- <el-input v-model="query.shortName" style="width: 120px;" clearable/>-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="language==0?'手机号码':'Phone'">-->
<!-- <el-input v-model="query.phone" style="width: 120px;" clearable/>-->
<!-- </el-form-item>-->
<!-- <el-form-item :label="language==0?'邮箱':'E-mail'">-->
<!-- <el-input v-model="query.email" style="width: 120px;" clearable/>-->
<!-- </el-form-item>-->
<el-form-item :label="language==0?'证件类型':'ID Type'">
<el-input v-model="query.idcType" style="width: 120px;" clearable/>
</el-form-item>
......
......@@ -73,14 +73,12 @@ import * as match from '@/apiPc/match'
import { ElMessage, ElMessageBox } from 'element-plus'
import useUserStore from '@/store/modules/user'
import _ from "lodash";
import {useStorage} from "@vueuse/core/index";
const language= useStorage('language',0)
const props = defineProps({
form:{
type:Object,
required:true
},
language:{
type:Number,
required:true
}
})
const countryList = ref([])
......
......@@ -412,6 +412,7 @@ const scores = ref([])
const nowscores = ref([])
const livelist = ref([])
const matchData = ref({})
const loading = ref(false)
const picList = ref([])
const calendarValue = ref(dayjs('2024-07-22').toDate())
const calendarRange = ref([dayjs('2024-07-21').toDate(),dayjs('2024-07-27').toDate()])
......@@ -448,7 +449,6 @@ const init = () => {
match.getMaList().then((res) => {
match.getMatchById({id: res.rows[0].id}).then(resposn => {
matchData.value = resposn.data
loading.value = false
// var today = dayjs().format('YYYY-MM-DD HH:mm:ss')
// time.value = dayjs(resposn.data.signEndTime).diff(today, 'millisecond')
})
......
......@@ -393,7 +393,7 @@ function submitForm(n) {
}
if (showPersonList.value) {
if (myMemberTable.value.length == 0) {
ElMessageBox.confirm(language.value == 0 ? '是否继续添加随人员?' : 'Do you want to add casual personnel?',
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 ? '取消' : 'Cancel',
......@@ -407,7 +407,7 @@ function submitForm(n) {
commit()
}
} else {
ElMessageBox.confirm(language.value == 0 ? '是否添加随人员?' : 'Do you want to add casual personnel?',
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 ? '取消' : 'Cancel',
......@@ -616,6 +616,7 @@ const goPersonInfo = (row) => {
console.log(row)
// debugger
const params = {
matchId: matchId.value,
title: language.value==0?'完善补充信息':'Complete the supplementary information',
participantsInfoArr: extraform.value,
personId: row.personInfo.id,
......
......@@ -46,11 +46,6 @@
<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?'短名':'nike name'" prop="shortName" required>-->
<!-- <el-input v-model="form.shortName" :placeholder="language==0?'赛事用名':''"/>-->
<!-- </el-form-item>-->
</el-col>
<el-col :lg="12">
<el-form-item :label="language==0?'手机号码':'Phone'" prop="phone" required>
......@@ -133,8 +128,6 @@ const data = reactive({
rules: {
xing: [{required: true, message: '必填', trigger: 'blur'}],
ming: [{required: true, message: '必填', trigger: 'blur'}],
// shortName: [{required: true, message: '必填', trigger: 'blur'}],
// email: [{required: true, message: '必填', trigger: 'blur'}],
countryId: [{required: true, message: '必填', trigger: 'change'}],
idcType: [{required: true, message: '必填', trigger: 'change'}],
idcCode: [{required: true, message: '必填', trigger: 'blur'}],
......@@ -149,8 +142,6 @@ const data = reactive({
rules_cn:{
xing: [{required: true, message: 'required', trigger: 'blur'}],
ming: [{required: true, message: 'required', trigger: 'blur'}],
// shortName: [{required: true, message: 'required', trigger: 'blur'}],
// email: [{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'}],
......
......@@ -155,7 +155,10 @@ const open = (params) => {
}
})
} else {
if (params.id != 0) { // 编辑舞伴
if (params.id == 0) {
//新增
editgay = false
} else {// 编辑舞伴
editgay = true
form.value = params.form
}
......
......@@ -73,7 +73,7 @@
<!-- />-->
<template #footer>
<div class="dialog-footer text-center">
<el-button type="primary" @click="submitForm">{{language==0?'确定':'Confirm'}}</el-button>
<el-button type="primary" @click="submit">{{language==0?'确定':'Confirm'}}</el-button>
<el-button @click="cancel">{{language==0?'取消':'Cancel'}}</el-button>
</div>
</template>
......@@ -155,7 +155,7 @@ function handleSelectionChange(val) {
choosedList = val
}
function submitForm() {
function submit() {
emit('transfer', choosedList)
// emit('submitForm', choosedList)
show.value = false
......
......@@ -7,19 +7,19 @@
<span v-if="!names.coachList">--</span>
</div>
<div class="item"><label>{{ language == 0 ? '翻译' : 'Translator' }}</label>
<span v-for="c in names.translatorList">{{ c.realName }}</span>
<span v-for="c in names.translatorList">{{ c.realName }},</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.realName }}</span>
<span v-for="c in names.leaderList">{{ c.realName }},</span>
<span v-if="!names.leaderList">--</span>
</div>
<div class="item">
<label>{{ language == 0 ? '官员' : 'Official' }}</label>
<span class="mr5" v-for="c in names.officialList">{{ c.realName }}</span>
<span class="mr5" v-for="c in names.officialList">{{ c.realName }},</span>
<span v-if="!names.officialList">--</span>
</div>
</el-col>
......@@ -27,16 +27,16 @@
<div class="item">
<label>{{ language == 0 ? '队医' : 'Team doctor' }}</label>
<span class="mr5" v-for="c in names.teamDoctorList">
{{ c.realName }}
{{ c.realName }},
</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 }}
{{ c.realName }},
</span>
<span v-if="!names.otherList">--</span>
<span v-if="names.otherList?.length==0">--</span>
</div>
</el-col>
</el-row>
......
......@@ -73,18 +73,20 @@ const data = reactive({
groupId: '0'
})
const { form, show, countryList, participantsInfoArr, title, groupId } = toRefs(data)
const matchId = route.params.id
let extraId = 0
let personId
let matchId
onMounted(() => {
getCountryList()
})
const open = (params) => {
// debugger
console.log(params)
show.value = true
title.value = params.title
personId = params.personId
extraId = params.extraId
matchId = params.matchId
participantsInfoArr.value = params.participantsInfoArr
init()
}
......@@ -137,7 +139,7 @@ function getCountryList() {
function submitForm() {
let fileInfo = {}
for (const n of participantsInfoArr.value) {
if (n.status == 0 && (!n.value && !n.fixWxFile)) {
if (n.status == 0 && (!n.value && (!n.fixWxFile||!n.fixWxFile.length==0))) {
ElMessage.error(`请完善${n.name}信息`)
return
}
......
......@@ -15,7 +15,6 @@
<el-col :lg="8">
<div class="item"><label>{{ language==0?'负责人姓名':'Contact Person' }}</label>{{ groupInfo.contactPerson }}</div>
<div class="item"><label>{{ language==0?'参赛队名称':'Name of participating team' }}</label>{{ groupInfo.abreviations }}</div>
</el-col>
<el-col :lg="8">
<div class="item"><label>{{ language==0?'邮箱':'Email' }}</label>{{ groupInfo.contactEmail }}</div>
......
......@@ -69,6 +69,7 @@ function submit(res) {
const open = (params) => {
show.value = true
show.value = true
title.value = params.title
action.value = `/systemj/personInfo/importPerson/${groupId}`
}
......
......@@ -5,11 +5,8 @@
<el-table-column :label="language==0?'姓氏':'Last Name'" prop="xing" min-width="100"/>
<el-table-column :label="language==0?'名':'First Name'" prop="ming" min-width="100"/>
<el-table-column :label="language==0?'所属国家':'Nationality'" prop="countryName" min-width="100"/>
<!-- <el-table-column :label="language==0?'短名':'Nick Name'" prop="shortName" min-width="110"/>-->
<el-table-column :label="language==0?'性别':'Gender'" prop="sexStr"/>
<!-- <el-table-column :label="language==0?'年龄':'Age'" prop="age"/>-->
<!-- <el-table-column :label="language==0?'手机号码':'Phone Number'" prop="phone" width="120"/>-->
<!-- <el-table-column :label="language==0?'邮箱':'E-mail'" prop="email" width="150"/>-->
<el-table-column :label="language==0?'证件类型':'ID Type'" prop="idcTypeStr" :min-width="language==0?'80':'160'"/>
<el-table-column :label="language==0?'证件号码':'ID NO.'" prop="idcCode" width="200"/>
<el-table-column :label="language==0?'出生日期':'Birth'" prop="birth" width="110"/>
......
<template>
<el-row :gutter="14" v-if="language==0">
<el-col :lg="4">
<div class="funcBtn" @click="building">
<div class="funcBtn" @click="goBooking(0)">
<img src="@/assets/dance/btn04.png"/>
<h4>票务预订</h4>
</div>
</el-col>
<el-col :lg="4">
<div class="funcBtn" @click="building">
<div class="funcBtn" @click="goBooking(1)">
<img src="@/assets/dance/btn01.png"/>
<h4>酒店预约</h4>
</div>
</el-col>
<el-col :lg="4">
<div class="funcBtn" @click="building">
<div class="funcBtn" @click="goBooking(2)">
<img src="@/assets/dance/btn02.png"/>
<h4>车辆预约</h4>
</div>
</el-col>
<el-col :lg="4">
<div class="funcBtn" @click="building">
<div class="funcBtn" @click="goBooking(3)">
<img src="@/assets/dance/btn03.png"/>
<h4>餐饮预订</h4>
</div>
</el-col>
<el-col :lg="4">
<div class="funcBtn" @click="building">
<div class="funcBtn" @click="goBooking(4)">
<img src="@/assets/dance/btn05.png"/>
<h4>化妆预约</h4>
</div>
</el-col>
<el-col :lg="4">
<div class="funcBtn" @click="building">
<div class="funcBtn" @click="goBooking(5)">
<img src="@/assets/dance/btn06.png"/>
<h4>拍照预约</h4>
</div>
......@@ -85,6 +85,28 @@ const language = ref(cache.local.get('language') || 0)
function building() {
ElMessage.warning('Building!')
}
function goBooking(n) {
switch (n) {
case 0:
// 票务
break;
case 1:
//酒店
break;
case 2:
//车辆
break;
case 4:
//餐饮
break;
case 5:
//化妆
break;
case 6:
//拍照
break;
}
}
</script>
<style scoped>
......
......@@ -10,11 +10,7 @@
<span v-if="scope.row.personInfo.representing">{{scope.row.personInfo.representing}}</span>
</template>
</el-table-column>
<!-- <el-table-column :label="language==0?'短名':'Nick 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?'手机号码':'Phone Number'" prop="personInfo.phone" min-width="130"/>-->
<!-- <el-table-column :label="language==0?'邮箱':'E-mail'" prop="personInfo.email" width="150"/>-->
<el-table-column :label="language==0?'证件类型':'ID Type'" :width="language==0?'':'140'" prop="personInfo.idcTypeStr"/>
<el-table-column :label="language==0?'证件号码':'ID NO.'" prop="personInfo.idcCode" width="200"/>
<el-table-column :label="language==0?'出生日期':'Birth'" prop="personInfo.birth" width="110"/>
......@@ -58,7 +54,7 @@
<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">
:href="fillImgUrl(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;"
......@@ -115,7 +111,7 @@ const props = defineProps({
default: false
},
total:{
type: String,
type: Number,
required: false,
default: '0'
}
......
<template>
<div class="pd20">
<div class="pv20">
<div class="matchItem" v-for="n in list" :key="n.id" @click="goDetail(n.id)">
<el-row :gutter="15">
<el-col :lg="7" :md="24" :xl="6">
<img class="mauto w100" :src="fillImgUrl(n.coverUrl)">
</el-col>
<el-col :lg="10" :md="12" :xl="12">
<el-col :lg="9" :md="12" :xl="12">
<div class="info">
<h3>{{ n.name }}</h3>
<p class="ppl"><label>{{ language==0?'比赛时间':'Playing Time' }}</label>{{n.beginTime?.slice(0,10)}} ~ {{ n.endTime?.slice(0,10) }}</p>
......@@ -18,7 +18,7 @@
</div>
</el-col>
<el-col :lg="7" :md="12" :xl="6">
<el-col :lg="8" :md="12" :xl="6">
<p class="countDownTitle">
<span v-if="language==0">报名截止倒计时</span>
<span v-else>Registration deadline countdown</span>
......@@ -78,11 +78,14 @@ function goDetail(id) {
</script>
<style scoped lang="scss">
.pv20{padding: 0 20px;}
.mt60{margin-top: 60px}
.matchItem {
cursor: pointer;margin: 0 0 20px;padding: 0 0 20px;
cursor: pointer;padding: 0 0 20px;
background: #FFFFFF;border-bottom: 1px solid #e5e5e5;
position: relative;
.el-col{padding-top: 20px}
.countDownTitle{margin: 0}
&:last-child {
border-bottom: none;
}
......@@ -174,5 +177,7 @@ function goDetail(id) {
line-height: 50px;
text-align: center;
}
@media (max-width: 1450px) {
.block{width: 44px;font-size: 20px;}
}
</style>
......
......@@ -60,7 +60,7 @@ const props = defineProps({
default: false
},
total:{
type: String,
type: Number,
required: false,
default: '0'
}
......
......@@ -95,7 +95,7 @@
<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="t.imgUrl||t.avatar"/>
<el-avatar :size="60" :src="fillImgUrl(t.imgUrl||t.avatar)"/>
<span class="name">{{ t.name }}</span>
</div>
</el-col>
......@@ -104,7 +104,7 @@
<el-col :span="24" v-for="(t,index) in signDoneGroupList" :key="t.id">
<div class="nowteamItem">
<span>{{ index + 1 }}.</span>
<el-avatar :size="80" :src="t.imgUrl||t.avatar" :fit="cover"/>
<el-avatar :size="80" :src="fillImgUrl(t.imgUrl||t.avatar)" :fit="cover"/>
<div class="info">
<h3 class="name">{{ t.name }}</h3>
<p v-if="t.extraInfo">
......@@ -363,10 +363,49 @@ function checkIsSign() {
type: 'warning',
}
).then(() => {
match.recoverMySignFromCancel(n.id).then((res)=>{
match.recoverMySignFromCancel(matchId.value).then((res)=>{
switch (matchData.value.signType) {
case '0':
if (user.utype == '1') {
goPersonalSign()
} else {
ElMessageBox.confirm(
'当前活动是个人活动,无法报名',
'提示',
{
confirmButtonText: '好的',
cancelButtonText: '取消',
type: 'warning',
}
)
}
break
case '1':
if (user.utype == '1') {
ElMessageBox.confirm(
'当前活动是团队活动,无法报名',
'提示',
{
confirmButtonText: '好的',
cancelButtonText: '取消',
type: 'warning',
}
)
} else {
goTeamSign()
}
break
case '2':
if (user.utype == '1') {
goPersonalSign()
} else {
goTeamSign()
}
break
}
})
})
return Promise.reject('rejected message')
}
})
}
......
......@@ -242,28 +242,31 @@ onMounted(() => {
} else {
groupId.value = 0
}
if (route.params.id != 0) {
matchId.value = route.params.id
getMatch(matchId.value)
getGroupListByCptId(matchId.value)
} else {
getMatchId()
}
})
function getMatchId() {
match.getMaList().then((res) => {
if (route.params.id != 0) {
matchId.value = route.params.id
} else {
matchId.value = res.rows[0].id
}
matchId.value = res.rows[0].id
getMatch(matchId.value)
getGroupListByCptId(matchId.value)
})
})
function getMatch() {
}
function getMatch(id) {
loading.value = true
match.getMatchById({id: matchId.value}).then(res => {
match.getMatchById({id: id}).then(res => {
matchData.value = res.data
loading.value = false
var today = dayjs().format('YYYY-MM-DD HH:mm:ss')
time.value = dayjs(res.data.signEndTime).diff(today, 'millisecond')
}).catch(res => {
error.value = true
loading.value = false
router.push({path: '/match/list/0'})
setTimeout("window.location.reload()", 1000)
})
}
......@@ -405,7 +408,7 @@ function checkIsSign() {
type: 'warning',
}
).then(() => {
match.recoverMySignFromCancel(n.id).then((res)=>{
match.recoverMySignFromCancel(matchId.value).then((res)=>{
})
})
......
......@@ -191,7 +191,7 @@
</td>
<td v-for="(e,index) in extraTableHead" :key="index">
<a v-if="row.signInfo[0].extraPersonInfoMapList[index]?.type=='2'"
:herf="row.signInfo[0].extraPersonInfoMapList[index].value.url">
:href="row.signInfo[0].extraPersonInfoMapList[index].value.url">
{{ row.signInfo[0].extraPersonInfoMapList[index].value.name }}
</a>
<img v-else-if="row.signInfo[0].extraPersonInfoMapList[index]?.type=='3'" style="width: 50px;"
......
......@@ -15,13 +15,13 @@
</div>
<div>
<el-table class="mt20" :data="myMemberTable" border>
<el-table-column type="index" label="Index" width="70" align="center"/>
<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="Passport number" prop="idcCode" min-width="120"/>
<el-table-column label="Birthday" prop="birth"/>
<el-table-column label="Sex" prop="sexStr"/>
<el-table-column label="Role" min-width="160">
<el-table-column :label="language==0?'Passport number':'护照号'" prop="idcCode" min-width="120"/>
<el-table-column :label="language==0?'Birthday':'生日'" prop="birth"/>
<el-table-column :label="language==0?'Sex':'性别'" 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">
......@@ -40,17 +40,39 @@
</div>
</div>
<div class="pd20" v-if="signInfoList?.length>0">
<div class="leftboderTT">{{ language == 0 ? '参赛人员保险费' : 'Participant Insurance Fee' }}</div>
<div class="leftboderTT">{{ language == 0 ? '参赛人员保险费' : 'Participant Insurance Fee' }}
<div class="fr">
<el-input size="small" v-model="zuQuery.athName" :prefix-icon="Search"
@change="getSignList" clearable/>
</div>
</div>
<!-- 人员列表-->
<sign-info-table class="mt20" v-if="matchId" :show-summary="true" :total="insuranceFeeTotal" :match-id="matchId" :list="signInfoList" :hasAction="false"/>
<sign-info-table class="mt20" v-if="matchId" :show-summary="true" :total="insuranceFeeTotal"
:match-id="matchId" :list="signInfoList" :hasAction="false"/>
</div>
<div class="pd20" v-if="zuTableList?.length>0">
<div class="leftboderTT">{{ language == 0 ? '参赛设项报名费' : 'Registration Fee for Event Entry' }}</div>
<zu-table class="mt20" :list="zuTableList" :show-summary="true" :total="serviceFeeTotal" :hasAction="false"/>
<div class="leftboderTT">{{ language == 0 ? '参赛设项报名费' : 'Registration Fee for Event Entry' }}
<div class="fr">
<el-input size="small" v-model="zuQuery.groName" :prefix-icon="Search"
@change="getSignList" clearable/>
</div>
</div>
<zu-table class="mt20" :list="zuTableList" :show-summary="true" :total="serviceFeeTotal"
:hasAction="false"/>
</div>
<el-row class="priceBar">
<el-col :lg="24" :xs="24">
<div class="flex">
<el-col :lg="12" :xs="24" class="pl-15">
<el-link class="mr10" type="primary" @click="exportSignList(1)"><el-icon><Upload /></el-icon>
{{ language==0?'导出参赛人员清单':'Export Participant List' }}</el-link>
<el-link class="mr10" type="primary" @click="exportSignList(2)"><el-icon><Upload /></el-icon>
{{ language==0?'导出设项报名清单':'Registration Fee for Event Entry' }}</el-link>
<el-link type="primary" @click="exportPdf"><el-icon><Upload /></el-icon>
{{ language==0?'导出pdf':'Export PDF' }}
</el-link>
</el-col>
<el-col :lg="12" :xs="24">
<div class="flex" v-if="Number(form.totalFee)>0">
<div class="item" v-if="signInfoList?.length>0"><label>{{ language==0?'报名费':'Registration Fee' }}:</label><span>{{ language==0?'¥':'€' }}{{serviceFeeTotal}}</span></div>
<div class="item" v-if="zuTableList?.length>0"><label>{{ language==0?'保险费':'Insurance Fee' }}:</label><span>{{ language==0?'¥':'€' }}{{insuranceFeeTotal}}</span></div>
<div class="item"><label>{{ language==0?'费用总计':'Total Cost' }}:</label><span class="size26">{{ language==0?'¥':'€' }}{{form.totalFee}}</span></div>
......@@ -64,6 +86,8 @@
{{ language == 0 ?'登录后查看详细报项信息':'View detailed report information after logging in' }}
</el-button>
</div>
</el-card>
<el-card class="mt20 mb20">
......@@ -285,12 +309,13 @@
</template>
<script setup>
import {ref} from 'vue'
import {Search} from "@element-plus/icons-vue"
import {getCurrentInstance, ref} from 'vue'
import {onMounted} from "@vue/runtime-core"
import {useRoute,useRouter} from "vue-router"
import * as match from "@/apiPc/match"
import MatchInfoRow from "@/viewsPc/match/components/matchInfo-row";
const {proxy} = getCurrentInstance()
const route = useRoute()
const router = useRouter()
const matchInfo = ref({})
......@@ -324,6 +349,10 @@ const errorBox = ref(false)
const hideconfirmbtn = ref(false)
const insuranceFeeTotal = ref(0)
const serviceFeeTotal = ref(0)
const zuQuery = ref({
cptId: matchId.value,
groupId: groupId.value
})
const user = useUserStore().user
console.log(route.query.orderId)
// 1763462073870237698
......@@ -338,6 +367,8 @@ function getData() {
form.value.payTypeArr = res.data.payType.split(',')
matchId.value = form.value.cptId
groupId.value = form.value.groupId || 0
zuQuery.value.groupId = groupId.value
zuQuery.value.cptId = matchId.value
if(isLogin.value){
getSignList()
if(user.utype=='1'){
......@@ -361,21 +392,17 @@ function upRR() {
})
}
function getSignList() {
match.getMySignInfoList({
cptId: matchId.value,
groupId: groupId.value
}).then(res => {
match.getMySignInfoList(zuQuery.value).then(res => {
insuranceFeeTotal.value = 0
serviceFeeTotal.value = 0
signInfoList.value = res.data.singleData
zuTableList.value = res.data.zuData
signInfoList.value = res.data?.singleData || []
zuTableList.value = res.data?.zuData || []
for(var s of signInfoList.value){
insuranceFeeTotal.value = insuranceFeeTotal.value + Number(s.insuranceFee)
}
for(var z of zuTableList.value){
serviceFeeTotal.value = serviceFeeTotal.value + Number(z.project.serviceFee)
}
})
}
function goHome() {
......@@ -424,7 +451,53 @@ function startforGetData() {
function showLogin(){
useUserStore().setReLogin()
}
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`)
}
}
function exportPdf() {
var obj = {
cptId: matchId.value,
groupId: groupId.value
}
var fileName
if(language.value==0){
fileName = '设项报名清单'
proxy.download('/pdf/exportMySignInfoList', {
...obj
}, `${fileName}_${new Date().getTime()}.pdf`)
} else {
fileName = 'Registration Fee for Event Entry'
proxy.download('/pdf/exportMySignInfoList', {
...obj
}, `${fileName}_${new Date().getTime()}.pdf`)
}
}
</script>
<style scoped lang="scss">
......
......@@ -47,7 +47,7 @@
@change="getSignList" clearable/>
</div>
</div>
<sign-info-table class="mt20" :showSummary="true" :total="form.cptInsuranceFee?.totalFee" :match-id="matchId" :list="signInfoList" :hasAction="false"/>
<sign-info-table class="mt20" :showSummary="true" :total="signTotal" :match-id="matchId" :list="signInfoList" :hasAction="false"/>
</div>
<div class="mt20">
<div class="leftboderTT">{{ language==0?'设项报名清单':'Event Registration List' }}
......@@ -56,7 +56,7 @@
@change="getSignList" clearable/>
</div>
</div>
<zu-table class="mt20" :showSummary="true" :total="form.cptRegistrationFee?.totalFee" :list="zuTableList" :hasAction="false"/>
<zu-table class="mt20" :showSummary="true" :total="zuTotal" :list="zuTableList" :hasAction="false"/>
</div>
</div>
......@@ -121,14 +121,14 @@ const matchId = ref(route.query.matchId)
const signInfoList = ref([])
const signEndTime = ref('')
const zuTableList = ref([])
const zuTotal = ref(0)
const signTotal = ref(0)
const myMemberTable = ref([])
const user = useUserStore().user
const {proxy} = getCurrentInstance()
const zuQuery = ref({
cptId: matchId.value,
groupId: groupId.value,
name:'',
groupName:''
groupId: groupId.value
})
onMounted(()=>{
Promise.all([
......@@ -154,12 +154,20 @@ function getMyMemberTable() {
}
function getSignList() {
match.getMySignInfoList(zuQuery.value).then(res=>{
zuTotal.value = 0
signTotal.value = 0
signInfoList.value = res.data.singleData
zuTableList.value = res.data.zuData
for(var s of signInfoList.value){
signTotal.value = signTotal.value + Number(s.insuranceFee)
}
for(var z of zuTableList.value){
zuTotal.value = zuTotal.value + Number(z.project.serviceFee)
}
})
}
const goPrev = () => {
if(user.type=='2'){
if(user.utype=='2'){
router.push({
name: 'chooseSportsman',
query: {
......@@ -167,7 +175,8 @@ const goPrev = () => {
groupId: groupId.value
}
})
} else {
}
if(user.utype=='1'){
router.push({
name: 'chooseProject',
params:{
......@@ -186,15 +195,17 @@ const getFee = (entryId) => {
cptId: matchId.value
}).then(res => {
form.value = res.data
// zuTotal.value = form.value.cptRegistrationFee?.totalFee
// signTotal.value = form.value.cptInsuranceFee?.totalFee
})
}
const submitForm = (n) => {
if(n==0){
ElMessageBox.confirm(language.value==0?`您当前的操作为暂存,并不是提交审核,
必须在报名截止时间${signEndTime.value}之前完成提交。
必须在报名截止时间${signEndTime.value.substring(0,10)}之前完成提交。
您也可以在个人中心-我的报名中,找到这条报名,点击提交审核。`:
`Your current operation is temporary and not submitted for review,
Submission must be completed before the registration deadline${signEndTime.value}
Submission must be completed before the registration deadline${signEndTime.value.substring(0,10)}
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 ',
......@@ -265,6 +276,10 @@ function exportPdf() {
...obj
}, `${fileName}_${new Date().getTime()}.pdf`)
} else {
fileName = 'Registration Fee for Event Entry'
proxy.download('/pdf/exportMySignInfoList', {
...obj
}, `${fileName}_${new Date().getTime()}.pdf`)
}
}
......
......@@ -10,7 +10,7 @@
<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"
:model="form" :rules="language==0?rules:rules_en"
:label-position="language==0?'left':'top'">
<el-row>
<el-col :lg="8" :offset="2">
......@@ -133,7 +133,7 @@ const data = reactive({
}
},
groupId: route.query.groupId||0,
cptId: route.params.id||0,
cptId: route.query.matchId||0,
signType: false,
regionsList: [],
participantsInfoArr: [],
......@@ -148,6 +148,15 @@ const data = reactive({
abreviations: { required: true, message: '请填写内容', trigger: 'blur' },
address: { required: true, message: '请填写内容', trigger: 'blur' }
},
rules_en: {
imgUrl: { required: true, message: 'required', trigger: 'blur' },
name: { required: true, message: 'required', trigger: 'blur' },
type: { required: true, message: 'required', trigger: 'change' },
contactPerson: { required: true, message: 'required', trigger: 'blur' },
contactEmail: { required: true, message: 'required', trigger: 'blur' },
abreviations: { required: true, message: 'required', trigger: 'blur' },
address: { required: true, message: 'required', trigger: 'blur' }
},
coachOrLeaderFlag: '',
matchInfo:{}
})
......@@ -159,13 +168,14 @@ const {
signType,
participantsInfoArr,
cptId,
rules,
rules,rules_en,
regionsList,matchInfo,
coachOrLeaderFlag, accept,typeOptions
} = toRefs(data)
const uploadUrl = ref('/upload/upLoadToFileServer')
onMounted(() => {
console.log(cptId.value,route.query,route.params)
// 获取团体信息
getGroupInfo()
signType.value = route.query.signType
......@@ -232,8 +242,8 @@ function submitForm() {
if (valid) {
console.log(form.value)
for (const n of participantsInfoArr.value) {
if (n.status == 0 && (!n.value && !n.fixWxFile)) {
ElMessage.error(`请完善${n.name}信息`)
if (n.status == 0 && (!n.value && (!n.fixWxFile||!n.fixWxFile.length==0))) {
ElMessage.error(language.value==0?`请完善${n.name}信息`:`Please complete ${n.name} information`)
return
}
}
......@@ -243,7 +253,8 @@ function submitForm() {
let fileInfo = {}
for (var p of participantsInfoArr.value) {
if (p.type == '2' && p.fixWxFile) {
const temp = p.fixWxFile[0].name.split('.')
console.log(p.fixWxFile)
const temp = p.fixWxFile[0]?.name.split('.')
fileInfo = {
url: p.fixWxFile[0].url,
name: p.fixWxFile[0].name,
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!