d69b2fe1 by zhangmeng

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

2 parents 848a4831 421304e8
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
30 "jszip": "^3.10.1", 30 "jszip": "^3.10.1",
31 "katex": "^0.16.6", 31 "katex": "^0.16.6",
32 "lodash": "^4.17.21", 32 "lodash": "^4.17.21",
33 "md5js": "^1.0.7",
33 "nprogress": "0.2.0", 34 "nprogress": "0.2.0",
34 "pinia": "2.0.35", 35 "pinia": "2.0.35",
35 "qrcode": "^1.5.3", 36 "qrcode": "^1.5.3",
......
This diff could not be displayed because it is too large.
No preview for this file type
...@@ -1078,7 +1078,8 @@ img{display: block;} ...@@ -1078,7 +1078,8 @@ img{display: block;}
1078 text-decoration: underline;} 1078 text-decoration: underline;}
1079 } 1079 }
1080 .panel-title{font-size: 16px;line-height: 50px;margin: 0; 1080 .panel-title{font-size: 16px;line-height: 50px;margin: 0;
1081 color: var(--el-color-primary)} 1081 color: var(--el-color-primary)
1082 }
1082 .panel-body{padding: 20px;} 1083 .panel-body{padding: 20px;}
1083 &.border{border: 1px solid #EEEEEE;} 1084 &.border{border: 1px solid #EEEEEE;}
1084 } 1085 }
......
...@@ -12,12 +12,13 @@ ...@@ -12,12 +12,13 @@
12 > 12 >
13 <el-menu-item index="/">{{ language==0?'首页':'HOME' }}</el-menu-item> 13 <el-menu-item index="/">{{ language==0?'首页':'HOME' }}</el-menu-item>
14 <el-menu-item index="/news">{{ language==0?'新闻资讯':'NEWS' }}</el-menu-item> 14 <el-menu-item index="/news">{{ language==0?'新闻资讯':'NEWS' }}</el-menu-item>
15 <el-menu-item index="/notice">{{ language==0?'通知公告':'NOTICEBOARD' }}</el-menu-item> 15 <el-menu-item index="/guide">{{ language==0?'参赛指南':'GUIDELINE' }}</el-menu-item>
16 <el-menu-item index="/match/list">{{ language==0?'大赛报名':'REGISTRATION' }}</el-menu-item> 16 <el-menu-item index="/match/list">{{ language==0?'大赛报名':'REGISTRATION' }}</el-menu-item>
17 <el-menu-item index="/saiC">{{ language==0?'赛程安排':'COMPETITIONS' }}</el-menu-item> 17 <el-menu-item index="/saiC">{{ language==0?'赛程安排':'COMPETITIONS' }}</el-menu-item>
18 <el-menu-item index="/meta">{{ language==0?'媒体中心':'MEDIA' }}</el-menu-item> 18 <el-menu-item index="/meta">{{ language==0?'媒体中心':'MEDIA' }}</el-menu-item>
19 <el-menu-item index="/guide">{{ language==0?'参赛指南':'GUIDELINE' }}</el-menu-item> 19 <el-menu-item index="/notice">{{ language==0?'通知公告':'NOTICEBOARD' }}</el-menu-item>
20 <!-- <el-sub-menu index="/about">--> 20
21 <!-- <el-sub-menu index="/about">-->
21 <!-- <template #title>{{ language==0?'关于我们':'CONTACT & MORE' }}</template>--> 22 <!-- <template #title>{{ language==0?'关于我们':'CONTACT & MORE' }}</template>-->
22 <!-- <el-menu-item index="/about/wuDao">{{ language==0?'舞蹈节':'About Us' }}</el-menu-item>--> 23 <!-- <el-menu-item index="/about/wuDao">{{ language==0?'舞蹈节':'About Us' }}</el-menu-item>-->
23 <!-- <el-menu-item index="/about/regulations" v-if="language==1">Rules & Regulations</el-menu-item>--> 24 <!-- <el-menu-item index="/about/regulations" v-if="language==1">Rules & Regulations</el-menu-item>-->
...@@ -30,12 +31,13 @@ ...@@ -30,12 +31,13 @@
30 > 31 >
31 <el-menu-item index="/">{{ language==0?'首页':'HOME' }}</el-menu-item> 32 <el-menu-item index="/">{{ language==0?'首页':'HOME' }}</el-menu-item>
32 <el-menu-item index="/news">{{ language==0?'新闻资讯':'NEWS' }}</el-menu-item> 33 <el-menu-item index="/news">{{ language==0?'新闻资讯':'NEWS' }}</el-menu-item>
33 <el-menu-item index="/notice">{{ language==0?'通知公告':'NOTICEBOARD' }}</el-menu-item> 34 <el-menu-item index="/guide">{{ language==0?'参赛指南':'GUIDELINE' }}</el-menu-item>
34 <el-menu-item index="/match/list">{{ language==0?'大赛报名':'REGISTRATION' }}</el-menu-item> 35 <el-menu-item index="/match/list">{{ language==0?'大赛报名':'REGISTRATION' }}</el-menu-item>
35 <el-menu-item index="/saiC">{{ language==0?'赛程安排':'COMPETITIONS' }}</el-menu-item> 36 <el-menu-item index="/saiC">{{ language==0?'赛程安排':'COMPETITIONS' }}</el-menu-item>
36 <el-menu-item index="/meta">{{ language==0?'媒体中心':'MEDIA' }}</el-menu-item> 37 <el-menu-item index="/meta">{{ language==0?'媒体中心':'MEDIA' }}</el-menu-item>
37 <el-menu-item index="/guide">{{ language==0?'参赛指南':'GUIDELINE' }}</el-menu-item> 38 <el-menu-item index="/notice">{{ language==0?'通知公告':'NOTICEBOARD' }}</el-menu-item>
38 <!-- <el-sub-menu index="/about">--> 39
40 <!-- <el-sub-menu index="/about">-->
39 <!-- <template #title>{{ language==0?'关于我们':'CONTACT & MORE' }}</template>--> 41 <!-- <template #title>{{ language==0?'关于我们':'CONTACT & MORE' }}</template>-->
40 <!-- <el-menu-item index="/about/wuDaoEn">{{ language==0?'舞蹈节':'About Us' }}</el-menu-item>--> 42 <!-- <el-menu-item index="/about/wuDaoEn">{{ language==0?'舞蹈节':'About Us' }}</el-menu-item>-->
41 <!-- <el-menu-item index="/about/regulations" v-if="language==1">Rules & Regulations</el-menu-item>--> 43 <!-- <el-menu-item index="/about/regulations" v-if="language==1">Rules & Regulations</el-menu-item>-->
......
...@@ -13,6 +13,7 @@ NProgress.configure({ showSpinner: false }) ...@@ -13,6 +13,7 @@ NProgress.configure({ showSpinner: false })
13 const whiteList = ['/login', '/register', '/regulations'] 13 const whiteList = ['/login', '/register', '/regulations']
14 14
15 router.beforeEach((to, from, next) => { 15 router.beforeEach((to, from, next) => {
16 console.log('to2', to)
16 NProgress.start() 17 NProgress.start()
17 if (getToken()) { 18 if (getToken()) {
18 // debugger 19 // debugger
......
...@@ -9,6 +9,7 @@ import useUserStore from '@/store/modules/user' ...@@ -9,6 +9,7 @@ import useUserStore from '@/store/modules/user'
9 NProgress.configure({ showSpinner: false }) 9 NProgress.configure({ showSpinner: false })
10 10
11 router.beforeEach((to, from, next) => { 11 router.beforeEach((to, from, next) => {
12 console.log('to', to)
12 NProgress.start() 13 NProgress.start()
13 if (getToken()) { 14 if (getToken()) {
14 // 判断当前用户是否已拉取完user_info信息 15 // 判断当前用户是否已拉取完user_info信息
......
...@@ -500,6 +500,71 @@ export const constantRoutes = [ ...@@ -500,6 +500,71 @@ export const constantRoutes = [
500 meta: { title: 'System messages' } 500 meta: { title: 'System messages' }
501 } 501 }
502 ] 502 ]
503 },
504 {
505 path: 'seat',
506 component: () => import('@/viewsPc/seat/seat'),
507 name: 'seat',
508 redirect: '/seat/detail',
509 children: [
510 {
511 path: 'detail',
512 name: 'seat_detail',
513 component: () => import('@/viewsPc/seat/ticket-detail'),
514 meta: { title: '购票详情' },
515 props: route => ({
516 activityId:route.query.id,
517 })
518 },
519 {
520 path: 'seat_picker',
521 name: 'seat_picker',
522 component: () => import('@/viewsPc/seat/seat-picker'),
523 meta: { title: '选座' },
524 props: route => ({
525 activityId:route.query.id,
526 })
527 },
528 {
529 path: 'order',
530 name: 'seat_order',
531 component: () => import('@/viewsPc/seat/order-list'),
532 meta: { title: '我的订单' },
533 props: route => ({
534 activityId:route.query.id,
535 })
536 },
537 {
538 path: 'order_detail',
539 name: 'order_detail',
540 component: () => import('@/viewsPc/seat/order-detail'),
541 meta: { title: '订单详情' },
542 props: route => ({
543 activityId: route.query.id,
544 })
545 },
546 {
547 path: 'confirm_order',
548 name: 'confirm_order',
549 component: () => import('@/viewsPc/seat/confirm-order'),
550 meta: { title: '确认订单' },
551 props: route => ({
552 activityId:route.query.id,
553 })
554 },
555 {
556 path: 'add_watch_people',
557 name: 'add_watch_people',
558 component: () => import('@/viewsPc/seat/add-watch-people'),
559 meta: { title: '新增观影人' }
560 },
561 {
562 path: 'people_manage',
563 name: 'people_manage',
564 component: () => import('@/viewsPc/seat/people-manage'),
565 meta: { title: '观影人管理' }
566 },
567 ]
503 } 568 }
504 ] 569 ]
505 }, 570 },
......
...@@ -108,6 +108,13 @@ const menus = ref([ ...@@ -108,6 +108,13 @@ const menus = ref([
108 isActive: false 108 isActive: false
109 }, 109 },
110 { 110 {
111 name: language.value==0?'票务预订':'Ticket Reservation',
112 routeName: 'seat_order',
113 picUrl1: '/img/nav_29.png',
114 picUrl2: '/img/nav_29_dwn.png',
115 isActive: false
116 },
117 {
111 name: language.value==0?'系统消息':'System messages', 118 name: language.value==0?'系统消息':'System messages',
112 routeName: 'mySms', 119 routeName: 'mySms',
113 picUrl1: '/img/nav_30.png', 120 picUrl1: '/img/nav_30.png',
......
...@@ -24,7 +24,8 @@ ...@@ -24,7 +24,8 @@
24 </el-form-item> 24 </el-form-item>
25 <el-form-item :label="language==0?'会员角色':'Role'"> 25 <el-form-item :label="language==0?'会员角色':'Role'">
26 <el-select v-model="labelArr" multiple style="width: 100px;"> 26 <el-select v-model="labelArr" multiple style="width: 100px;">
27 <el-option v-for="l in labels" :key="l.value" :value="l.value" :label="language==0?(l.label):(l.enlabel)"/> 27 <el-option v-if="group.type=='4'" v-for="l in labels" :key="l.value" :value="l.value" :label="language==0?(l.label):(l.enlabel)"/>
28 <el-option v-else v-for="l in labelsForType4" :key="l.value" :value="l.value" :label="language==0?(l.label):(l.enlabel)"/>
28 </el-select> 29 </el-select>
29 </el-form-item> 30 </el-form-item>
30 <el-form-item :label="language==0?'WDSF':'WDSF'"> 31 <el-form-item :label="language==0?'WDSF':'WDSF'">
...@@ -73,6 +74,8 @@ import useUserStore from "@/store/modules/user"; ...@@ -73,6 +74,8 @@ import useUserStore from "@/store/modules/user";
73 import {useStorage} from "@vueuse/core/index"; 74 import {useStorage} from "@vueuse/core/index";
74 import AddWdsf from "@/viewsPc/match/components/addWdsf"; 75 import AddWdsf from "@/viewsPc/match/components/addWdsf";
75 const language= useStorage('language',0) 76 const language= useStorage('language',0)
77 const group = useUserStore().group || {}
78
76 const tableData = ref([]) 79 const tableData = ref([])
77 const labelArr = ref([]) 80 const labelArr = ref([])
78 const labels = ref([ 81 const labels = ref([
...@@ -84,6 +87,15 @@ const labels = ref([ ...@@ -84,6 +87,15 @@ const labels = ref([
84 {value: '6', label: '官员', enlabel: 'Official'}, 87 {value: '6', label: '官员', enlabel: 'Official'},
85 {value: '3', label: '其他', enlabel: 'Other'} 88 {value: '3', label: '其他', enlabel: 'Other'}
86 ]) 89 ])
90 const labelsForType4 = ref([
91 {value: '0', label: '运动员', enlabel: 'Sportsman'},
92 {value: '1', label: '教练', enlabel: 'Coach'},
93 {value: '2', label: '领队', enlabel: 'Head of team'},
94 {value: '4', label: '管理', enlabel: 'Manager'},
95 {value: '5', label: '翻译', enlabel: 'Interpreter'},
96 {value: '6', label: '官员', enlabel: 'Official'},
97 {value: '3', label: '其他', enlabel: 'Other'}
98 ])
87 const certificates = ref([ 99 const certificates = ref([
88 { 100 {
89 value: '0', 101 value: '0',
...@@ -102,7 +114,6 @@ const query = ref({ ...@@ -102,7 +114,6 @@ const query = ref({
102 pageNum: 1, pageSize: 10 114 pageNum: 1, pageSize: 10
103 }) 115 })
104 const total = ref(0) 116 const total = ref(0)
105 const group = useUserStore().group || {}
106 const props = defineProps({ 117 const props = defineProps({
107 user: { 118 user: {
108 type: Object, 119 type: Object,
...@@ -193,6 +204,8 @@ function delperson(p) { ...@@ -193,6 +204,8 @@ function delperson(p) {
193 cancelButtonText: c, 204 cancelButtonText: c,
194 type: 'warning' 205 type: 'warning'
195 }).then(() => { 206 }).then(() => {
207
208 // This user has registered for the event and cannot be deleted.
196 match.delPerson(p.id).then(res => { 209 match.delPerson(p.id).then(res => {
197 ElMessage.success(msg) 210 ElMessage.success(msg)
198 getList(groupId.value) 211 getList(groupId.value)
......
...@@ -101,7 +101,8 @@ function popRemark(type){ ...@@ -101,7 +101,8 @@ function popRemark(type){
101 building() 101 building()
102 return 102 return
103 } 103 }
104 if((form.value.isJdView == 0&&type=='1') || (form.value.isCarView == 0&&type=='2') || (form.value.isFoodView == 0&&type=='3') || type=='0' || (form.value.isMealView == 0&&type=='4') || (type=='5'&&form.value.isPhotoView == 0)){ 104 if((form.value.isJdView == 0&&type=='1') || (form.value.isCarView == 0&&type=='2') || (form.value.isFoodView == 0&&type=='3') || (form.value.isMealView == 0&&type=='4') || (type=='5'&&form.value.isPhotoView == 0)){
105 //type == '0'
105 building() 106 building()
106 return 107 return
107 } 108 }
...@@ -116,8 +117,11 @@ function goBooking(n) { ...@@ -116,8 +117,11 @@ function goBooking(n) {
116 switch (n) { 117 switch (n) {
117 case 0: 118 case 0:
118 // 票务 119 // 票务
119 building() 120 router.push({
120 router.push({path: `/booking/ticket/${props.matchId}`}) 121 path: `/seat/detail`,
122 params: {id: 1},
123 query: {id: 1}
124 })
121 break; 125 break;
122 case 1: 126 case 1:
123 //酒店 127 //酒店
......
...@@ -96,8 +96,8 @@ ...@@ -96,8 +96,8 @@
96 96
97 <div class="content" v-if="activeName==8"> 97 <div class="content" v-if="activeName==8">
98 <label>点击下载:</label> 98 <label>点击下载:</label>
99 <!-- <a target="_blank" class="text-primary" href="/file/COMPETITION_GUIDE_0511V1.pdf">--> 99 <a target="_blank" class="text-primary" href="/file/COMPETITION%20GUIDE%200520V1.pdf">
100 <a @click="showBuilding" class="text-primary"> 100 <!-- <a @click="showBuilding" class="text-primary">-->
101 <el-icon style="position: relative;top: 2px"><download/></el-icon> 101 <el-icon style="position: relative;top: 2px"><download/></el-icon>
102 2024 WDSF亚洲体育舞蹈节参赛指南 102 2024 WDSF亚洲体育舞蹈节参赛指南
103 </a> 103 </a>
...@@ -200,8 +200,8 @@ ...@@ -200,8 +200,8 @@
200 <div class="content" v-if="activeName==71"><el-empty description="no data"></el-empty></div> 200 <div class="content" v-if="activeName==71"><el-empty description="no data"></el-empty></div>
201 <div class="content" v-if="activeName==8"> 201 <div class="content" v-if="activeName==8">
202 <label>Download:</label> 202 <label>Download:</label>
203 <!-- <a target="_blank" class="text-primary" href="/file/COMPETITION_GUIDE_0511V1.pdf">--> 203 <a target="_blank" class="text-primary" href="/file/COMPETITION%20GUIDE%200520V1.pdf">
204 <a @click="showBuilding" class="text-primary"> 204 <!-- <a @click="showBuilding" class="text-primary">-->
205 <el-icon style="position: relative;top: 2px"><download/></el-icon> 205 <el-icon style="position: relative;top: 2px"><download/></el-icon>
206 2024 WDSF ASIAN DANCESPORT FESTIVAL COMPETITION GUIDE 206 2024 WDSF ASIAN DANCESPORT FESTIVAL COMPETITION GUIDE
207 </a> 207 </a>
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
4 <div class="box ph-30"> 4 <div class="box ph-30">
5 <el-card v-if="user"> 5 <el-card v-if="user">
6 <single-sign-step v-if="user.utype=='1'" activeStep="1" :language="language"/> 6 <single-sign-step v-if="user.utype=='1'" activeStep="1" :language="language"/>
7 <team-sign-step v-if="user.utype=='2'" activeStep="2" :language="language"/> 7 <team-sign-step v-if="user.utype=='2'" :activeStep="1" :language="language"/>
8 </el-card> 8 </el-card>
9 9
10 <el-card class="mt20"> 10 <el-card class="mt20">
...@@ -73,10 +73,14 @@ ...@@ -73,10 +73,14 @@
73 <el-col :lg="12"> 73 <el-col :lg="12">
74 <el-card class="mt20" v-loading="loading"> 74 <el-card class="mt20" v-loading="loading">
75 <template #header> 75 <template #header>
76 <div class="card-header"> 76 <div class="card-header" v-if="isNational">
77 <img src="@/assets/sign/tag03.png"/> 77 <img src="@/assets/sign/tag03.png"/>
78 {{ language==0?'队医':'Team doctor' }} 78 {{ language==0?'队医':'Team doctor' }}
79 </div> 79 </div>
80 <div class="card-header" v-else>
81 <img src="@/assets/sign/gl.png"/>
82 管理
83 </div>
80 </template> 84 </template>
81 <div class="chooseForm"> 85 <div class="chooseForm">
82 <el-checkbox-group v-model="form.doctor"> 86 <el-checkbox-group v-model="form.doctor">
...@@ -198,7 +202,7 @@ import DialogAddCoach_En from './components/addCoach_en' ...@@ -198,7 +202,7 @@ import DialogAddCoach_En from './components/addCoach_en'
198 const {proxy} = getCurrentInstance() 202 const {proxy} = getCurrentInstance()
199 const router = useRouter() 203 const router = useRouter()
200 const route = useRoute() 204 const route = useRoute()
201 import {ElMessage} from 'element-plus' 205 import {ElMessage, ElMessageBox} from 'element-plus'
202 import {useRoute, useRouter} from 'vue-router' 206 import {useRoute, useRouter} from 'vue-router'
203 import useUserStore from "@/store/modules/user"; 207 import useUserStore from "@/store/modules/user";
204 import {useStorage} from "@vueuse/core/index"; 208 import {useStorage} from "@vueuse/core/index";
...@@ -242,7 +246,7 @@ onMounted(() => { ...@@ -242,7 +246,7 @@ onMounted(() => {
242 }) 246 })
243 247
244 function getList() { 248 function getList() {
245 console.log(user.utype) 249 // console.log(user.utype)
246 if (user.utype == '1') { 250 if (user.utype == '1') {
247 geren() 251 geren()
248 } 252 }
...@@ -252,7 +256,7 @@ function getList() { ...@@ -252,7 +256,7 @@ function getList() {
252 } 256 }
253 257
254 function changecoachs(e) { 258 function changecoachs(e) {
255 console.log(e) 259 // console.log(e)
256 } 260 }
257 261
258 // 获取报名时是否已选过 262 // 获取报名时是否已选过
...@@ -309,11 +313,31 @@ function geren() { ...@@ -309,11 +313,31 @@ function geren() {
309 } 313 }
310 314
311 function goNext() { 315 function goNext() {
312 console.log(form.value) 316 console.log(personAllList.value.teamDoctors,form.value)
313 // if ((form.value.coachs.length < 1) && (form.value.leader.length < 1)) { 317 // if ((form.value.coachs.length < 1) && (form.value.leader.length < 1)) {
314 // ElMessage.warning(language.value==0?'至少选一个教练或领队':'Coach/Team Leader, select at least one') 318 // ElMessage.warning(language.value==0?'至少选一个教练或领队':'Coach/Team Leader, select at least one')
315 // return 319 // return
316 // } 320 // }
321 if((personAllList.value.coaches.length>=0 && form.value.coachs?.toString().length == 0)&&
322 (personAllList.value.teamDoctors.length>=0 && form.value.doctor?.toString().length == 0)&&
323 (personAllList.value.translators.length>=0 && form.value.translator?.toString().length == 0)&&
324 (personAllList.value.others.length>=0 && form.value.other?.toString().length == 0)&&
325 (personAllList.value.officials.length>=0 && form.value.official?.toString().length == 0)&&
326 (personAllList.value.leaders.length>=0 && form.value.leader?.toString().length == 0)
327 ){
328 ElMessageBox.confirm(language.value==0?'您已添加随行人员,但尚未选中,是否进行下一步?':'You have added a follower, but have not selected, do you want to continue?', {
329 confirmButtonText: language.value==0?'下一步':'Next',
330 cancelButtonText: language.value==0?'取消':'Cancel',
331 type: 'warning'
332 }).then(()=>{
333 next()
334 })
335 return
336 }
337 next()
338 }
339
340 function next() {
317 var obj = { 341 var obj = {
318 cptId: matchId, 342 cptId: matchId,
319 coachIds: form.value.coachs?.toString() || '', 343 coachIds: form.value.coachs?.toString() || '',
...@@ -332,7 +356,6 @@ function goNext() { ...@@ -332,7 +356,6 @@ function goNext() {
332 if (user.utype == '1') { 356 if (user.utype == '1') {
333 // 个人报名 357 // 个人报名
334 match.singleSignSavePerson(obj).then(res => { 358 match.singleSignSavePerson(obj).then(res => {
335 console.log(res)
336 router.push({ 359 router.push({
337 name: 'chooseProject', 360 name: 'chooseProject',
338 query: { 361 query: {
...@@ -357,11 +380,8 @@ function goNext() { ...@@ -357,11 +380,8 @@ function goNext() {
357 }) 380 })
358 } 381 }
359 382
360 console.log(form.value)
361 } 383 }
362
363 function goPrev() { 384 function goPrev() {
364 console.log(languageSource.value)
365 if(languageSource.value=='100'){ 385 if(languageSource.value=='100'){
366 router.push({ 386 router.push({
367 name: `teamSignCn`, 387 name: `teamSignCn`,
......
...@@ -38,7 +38,10 @@ ...@@ -38,7 +38,10 @@
38 <div class="text-center mt20"> 38 <div class="text-center mt20">
39 <el-button type="primary" plain @click="switchPerson">{{language==0?'切换':'Switch'}}</el-button> 39 <el-button type="primary" plain @click="switchPerson">{{language==0?'切换':'Switch'}}</el-button>
40 </div> 40 </div>
41 41 <div class="tip">
42 <span v-if="language==0">*如果您参加个人项目,或给其他组合/选手进行报名,请点击切换按钮重新选择人员</span>
43 <span v-else>*If you would like to register individual competitions for yourself or other couples/athletes, please click "Switch" button to re-select persons concerned.</span>
44 </div>
42 </div> 45 </div>
43 </div> 46 </div>
44 </el-col> 47 </el-col>
...@@ -46,7 +49,7 @@ ...@@ -46,7 +49,7 @@
46 <el-col :lg="18"> 49 <el-col :lg="18">
47 <div class="panel border"> 50 <div class="panel border">
48 <div class="panel-header "> 51 <div class="panel-header ">
49 <h3 class="panel-title" v-if="language==0">可参与报名的项目</h3> 52 <h3 class="panel-title" v-if="language==0">可参与报名的项目 <span>已报项目在下方查看</span></h3>
50 <h3 class="panel-title" v-else>Search Events</h3> 53 <h3 class="panel-title" v-else>Search Events</h3>
51 <div class="fr"> 54 <div class="fr">
52 <el-input size="small" v-model="projectQuery.name" :prefix-icon="Search" @change="getProjectList" 55 <el-input size="small" v-model="projectQuery.name" :prefix-icon="Search" @change="getProjectList"
...@@ -59,7 +62,7 @@ ...@@ -59,7 +62,7 @@
59 <el-checkbox class="flexBetweenBox" v-for="c in projectList" :label="c.id" :key="c.id" :disabled="cantBao.flag"> 62 <el-checkbox class="flexBetweenBox" v-for="c in projectList" :label="c.id" :key="c.id" :disabled="cantBao.flag">
60 <div class="flexBetween w100"> 63 <div class="flexBetween w100">
61 <div class="l"> 64 <div class="l">
62 {{ c.code }}:{{ c.name }} 65 {{ c.code }}:{{ c.name }} {{c.danceType}}
63 <div>{{ c.danceTypeDetailStr }}</div> 66 <div>{{ c.danceTypeDetailStr }}</div>
64 </div> 67 </div>
65 <div class="text-primary">{{ language == 0 ? '¥' : '€' }}{{ c.serviceFee }}</div> 68 <div class="text-primary">{{ language == 0 ? '¥' : '€' }}{{ c.serviceFee }}</div>
...@@ -793,4 +796,8 @@ function switchTabletype() { ...@@ -793,4 +796,8 @@ function switchTabletype() {
793 } 796 }
794 .mName{color: #000;font-size: 15px;display: inline-block;max-width: 6.5em;text-overflow: ellipsis; 797 .mName{color: #000;font-size: 15px;display: inline-block;max-width: 6.5em;text-overflow: ellipsis;
795 overflow: hidden;} 798 overflow: hidden;}
799
800 .panel h3.panel-title{
801 span{ color: #999;font-size: 12px;}
802 }
796 </style> 803 </style>
......
...@@ -32,10 +32,10 @@ ...@@ -32,10 +32,10 @@
32 32
33 {{c.representing}} 33 {{c.representing}}
34 {{c.ageGroup}} 34 {{c.ageGroup}}
35 {{c.division}} 35 {{c.division}}<span v-if="c.age"> -{{ c.age }}{{language==0 ? '岁' : 'years'}}</span>
36 <!-- @click="editPerson(c.id)"--> 36 <!-- @click="editPerson(c.id)"-->
37 <span v-if="c.disabled" class="text-danger po-right">需补全信息</span> 37 <span v-if="c.disabled" class="text-danger po-right">需补全信息</span>
38 <!-- -{{ c.age }}--> 38
39 </div> 39 </div>
40 </el-option> 40 </el-option>
41 <!-- <template #tag>--> 41 <!-- <template #tag>-->
...@@ -78,7 +78,9 @@ ...@@ -78,7 +78,9 @@
78 <el-col :lg="14"> 78 <el-col :lg="14">
79 <div class="panel border"> 79 <div class="panel border">
80 <div class="panel-header "> 80 <div class="panel-header ">
81 <h3 class="panel-title" v-if="language==0">可参与报名的项目</h3> 81 <h3 class="panel-title" v-if="language==0">可参与报名的项目
82 <span>已报项目在下方查看</span>
83 </h3>
82 <h3 class="panel-title" v-else>Search Events</h3> 84 <h3 class="panel-title" v-else>Search Events</h3>
83 <div class="fr"> 85 <div class="fr">
84 <el-input size="small" v-model="projectQuery.name" :prefix-icon="Search" 86 <el-input size="small" v-model="projectQuery.name" :prefix-icon="Search"
...@@ -91,7 +93,7 @@ ...@@ -91,7 +93,7 @@
91 <el-checkbox class="flexBetweenBox" v-for="c in projectList" :value="c.id" :key="c.id"> 93 <el-checkbox class="flexBetweenBox" v-for="c in projectList" :value="c.id" :key="c.id">
92 <div class="flexBetween w100"> 94 <div class="flexBetween w100">
93 <div class="l"> 95 <div class="l">
94 {{ c.code }}:{{ c.name }} 96 {{ c.code }}:{{ c.name }}({{c.danceType}})
95 <div>{{ c.danceTypeDetailStr }}</div> 97 <div>{{ c.danceTypeDetailStr }}</div>
96 </div> 98 </div>
97 <div class="text-primary">{{ language == 0 ? '¥' : '€' }}{{ c.serviceFee }}</div> 99 <div class="text-primary">{{ language == 0 ? '¥' : '€' }}{{ c.serviceFee }}</div>
...@@ -868,4 +870,7 @@ watch(choosedchoosed, (newVal, oldVal) => { ...@@ -868,4 +870,7 @@ watch(choosedchoosed, (newVal, oldVal) => {
868 } 870 }
869 :deep(.el-select__tags-text){color: #000;font-size: 14px;} 871 :deep(.el-select__tags-text){color: #000;font-size: 14px;}
870 .po-right{position: absolute;right: 0;} 872 .po-right{position: absolute;right: 0;}
873 .panel h3.panel-title{
874 span{ color: #999;font-size: 13px;}
875 }
871 </style> 876 </style>
......
...@@ -164,7 +164,7 @@ const data = reactive({ ...@@ -164,7 +164,7 @@ const data = reactive({
164 {value: '0', label: '运动员', enlabel: 'Sportsman'}, 164 {value: '0', label: '运动员', enlabel: 'Sportsman'},
165 {value: '1', label: '教练', enlabel: 'Coach'}, 165 {value: '1', label: '教练', enlabel: 'Coach'},
166 {value: '2', label: '领队', enlabel: 'Head Of Team'}, 166 {value: '2', label: '领队', enlabel: 'Head Of Team'},
167 {value: '4', label: '队医', enlabel: 'Team doctor'}, 167 {value: '4', label: '管理', enlabel: 'Team doctor'},
168 {value: '5', label: '翻译', enlabel: 'Interpreter'}, 168 {value: '5', label: '翻译', enlabel: 'Interpreter'},
169 {value: '6', label: '官员', enlabel: 'Official'}, 169 {value: '6', label: '官员', enlabel: 'Official'},
170 {value: '3', label: '其他', enlabel: 'Other'} 170 {value: '3', label: '其他', enlabel: 'Other'}
......
...@@ -4,9 +4,9 @@ ...@@ -4,9 +4,9 @@
4 <el-button type="primary" @click="addMember"> 4 <el-button type="primary" @click="addMember">
5 {{ language == 0 ? '添加选手' : 'Add Player' }} 5 {{ language == 0 ? '添加选手' : 'Add Player' }}
6 </el-button> 6 </el-button>
7 <el-button type="primary" plain @click="importSportman" v-if="!isNational"> 7 <!-- <el-button type="primary" plain @click="importSportman" v-if="!isNational">-->
8 {{language == 0 ? '导入选手' : 'Import Player'}} 8 <!-- {{language == 0 ? '导入选手' : 'Import Player'}}-->
9 </el-button> 9 <!-- </el-button>-->
10 </div> 10 </div>
11 <div class="from-Card"> 11 <div class="from-Card">
12 <el-form :inline="true" :model="query" class="mt20" label-width="60" size="small"> 12 <el-form :inline="true" :model="query" class="mt20" label-width="60" size="small">
......
...@@ -25,7 +25,8 @@ ...@@ -25,7 +25,8 @@
25 </el-col> 25 </el-col>
26 <el-col :lg="8"> 26 <el-col :lg="8">
27 <div class="item"> 27 <div class="item">
28 <label>{{ language == 0 ? '队医' : 'TEAM DOCTOR' }}</label> 28 <label v-if="group.type=='4'">{{ language == 0 ? '队医' : 'TEAM DOCTOR' }}</label>
29 <label v-else>{{ language == 0 ? '管理' : 'MANAGER' }}</label>
29 <span class="mr5" v-for="c in names.teamDoctorList"> 30 <span class="mr5" v-for="c in names.teamDoctorList">
30 {{ c.realName }}, 31 {{ c.realName }},
31 </span> 32 </span>
......
...@@ -43,7 +43,11 @@ ...@@ -43,7 +43,11 @@
43 </div> 43 </div>
44 <div v-else> 44 <div v-else>
45 <div>{{ scope.row.birthPeriod.replace(',',language==0?' 至 ':' to ') }}</div> 45 <div>{{ scope.row.birthPeriod.replace(',',language==0?' 至 ':' to ') }}</div>
46 <div>{{scope.row.birthPeriodSecond?.replace(',',language==0?' 至 ':' to ')}}</div> 46 <div v-if="scope.row.birthPeriodSecond">{{scope.row.birthPeriodSecond?.replace(',',language==0?' 至 ':' to ')}}</div>
47 <div v-if="scope.row.birthPeriodThird">{{scope.row.birthPeriodThird?.replace(',',language==0?' 至 ':' to ')}}</div>
48 <div v-if="scope.row.birthPeriodFourth">{{scope.row.birthPeriodFourth?.replace(',',language==0?' 至 ':' to ')}}</div>
49 <div v-if="scope.row.birthPeriodFifth">{{scope.row.birthPeriodFifth?.replace(',',language==0?' 至 ':' to ')}}</div>
50 <div v-if="scope.row.birthPeriodSixth">{{scope.row.birthPeriodSixth?.replace(',',language==0?' 至 ':' to ')}}</div>
47 </div> 51 </div>
48 </template> 52 </template>
49 </el-table-column> 53 </el-table-column>
......
...@@ -27,7 +27,12 @@ ...@@ -27,7 +27,12 @@
27 <span v-if="item==='0'" class="ml5">{{ language == 0 ? '运动员' : 'Athletes' }}</span> 27 <span v-if="item==='0'" class="ml5">{{ language == 0 ? '运动员' : 'Athletes' }}</span>
28 <span v-if="item==='1'" class="ml5">{{ language == 0 ? '教练' : 'Coach' }}</span> 28 <span v-if="item==='1'" class="ml5">{{ language == 0 ? '教练' : 'Coach' }}</span>
29 <span v-if="item==='2'" class="ml5">{{ language == 0 ? '领队' : 'Head of team' }}</span> 29 <span v-if="item==='2'" class="ml5">{{ language == 0 ? '领队' : 'Head of team' }}</span>
30 <span v-if="item==='4'" class="ml5">{{ language == 0 ? '队医' : 'Team Doctor' }}</span> 30 <span v-if="item==='4'&&group.type!='4'" class="ml5">
31 {{ language == 0 ? '管理' : 'Manager' }}
32 </span>
33 <span v-if="item==='4'&&group.type=='4'" class="ml5">
34 {{ language == 0 ? '队医' : 'Team Doctor' }}
35 </span>
31 <span v-if="item==='5'" class="ml5">{{ language == 0 ? '翻译' : 'Interpreter' }}</span> 36 <span v-if="item==='5'" class="ml5">{{ language == 0 ? '翻译' : 'Interpreter' }}</span>
32 <span v-if="item==='6'" class="ml5">{{ language == 0 ? '官员' : 'Official' }}</span> 37 <span v-if="item==='6'" class="ml5">{{ language == 0 ? '官员' : 'Official' }}</span>
33 <span v-if="item==='3'" class="ml5">{{ language == 0 ? '其他' : 'Other' }}</span> 38 <span v-if="item==='3'" class="ml5">{{ language == 0 ? '其他' : 'Other' }}</span>
...@@ -61,7 +66,8 @@ ...@@ -61,7 +66,8 @@
61 <script setup> 66 <script setup>
62 import {ref} from "vue"; 67 import {ref} from "vue";
63 import {useStorage} from "@vueuse/core/index"; 68 import {useStorage} from "@vueuse/core/index";
64 69 import useUserStore from "@/store/modules/user";
70 const group = useUserStore().group || {}
65 const language = useStorage('language', 0) 71 const language = useStorage('language', 0)
66 const emit = defineEmits(['edit', 'delete']) 72 const emit = defineEmits(['edit', 'delete'])
67 let title = '' 73 let title = ''
......
...@@ -4,22 +4,22 @@ ...@@ -4,22 +4,22 @@
4 </div> 4 </div>
5 <el-table :data="list" :sum-text="sumText" border style="width: 100%" v-loading="loading"> 5 <el-table :data="list" :sum-text="sumText" border style="width: 100%" v-loading="loading">
6 <el-table-column :label="language==0?'序号':'Index'" type="index" width="70" align="center"/> 6 <el-table-column :label="language==0?'序号':'Index'" type="index" width="70" align="center"/>
7 <el-table-column v-if="!isNational" :label="language==0?'姓名':'Real Name'" prop="personInfo.realName" min-width="100"/> 7 <el-table-column v-if="!isNational" :label="language==0?'姓名':'Real Name'" prop="personInfo.realName" align="center" min-width="100"/>
8 <el-table-column v-if="isNational" :label="language==0?'姓氏':'Surname'" prop="personInfo.xing" min-width="100"/> 8 <el-table-column v-if="isNational" :label="language==0?'姓氏':'Surname'" prop="personInfo.xing" min-width="100"/>
9 <el-table-column v-if="isNational" :label="language==0?'名':'Name'" prop="personInfo.ming" min-width="100"/> 9 <el-table-column v-if="isNational" :label="language==0?'名':'Name'" prop="personInfo.ming" min-width="100"/>
10 <el-table-column :label="language==0?'所属国家/地区':'Country'" min-width="120"> 10 <el-table-column :label="language==0?'所属国家/地区':'Country'" min-width="120" header-align="center" align="center">
11 <template #default="scope"> 11 <template #default="scope">
12 <span v-if="scope.row.personInfo.countryName">{{scope.row.personInfo.countryName}}</span> 12 <span v-if="scope.row.personInfo.countryName">{{scope.row.personInfo.countryName}}</span>
13 <span v-if="scope.row.personInfo.representing">{{scope.row.personInfo.representing}}</span> 13 <span v-if="scope.row.personInfo.representing">{{scope.row.personInfo.representing}}</span>
14 </template> 14 </template>
15 </el-table-column> 15 </el-table-column>
16 <el-table-column :label="language==0?'性别':'Gender'" prop="personInfo.sexStr"/> 16 <el-table-column :label="language==0?'性别':'Gender'" prop="personInfo.sexStr" align="center"/>
17 <el-table-column v-if="!isNational" :label="language==0?'证件类型':'ID Type'" :width="language==0?'':'140'" prop="personInfo.idcTypeStr"/> 17 <el-table-column v-if="!isNational" :label="language==0?'证件类型':'ID Type'" align="center" :width="language==0?'':'140'" prop="personInfo.idcTypeStr" header-align="center"/>
18 <el-table-column v-if="!isNational" :label="language==0?'证件号码':'ID NO.'" prop="personInfo.idcCode" width="200"/> 18 <el-table-column v-if="!isNational" :label="language==0?'证件号码':'ID NO.'" prop="personInfo.idcCode" width="200" header-align="center"/>
19 <el-table-column v-if="isNational" :label="language==0?'WDSF 会员号':'WDSF MIN'" prop="personInfo.wdsfMin" width="200"/> 19 <el-table-column v-if="isNational" :label="language==0?'WDSF 会员号':'WDSF MIN'" prop="personInfo.wdsfMin" width="200" header-align="center"/>
20 <el-table-column v-if="!isNational" :label="language==0?'出生日期':'Date of Birth'" prop="personInfo.birth" width="130"/> 20 <el-table-column v-if="!isNational" :label="language==0?'出生日期':'Date of Birth'" align="center" prop="personInfo.birth" width="130" header-align="center"/>
21 <el-table-column v-if="isNational" :label="language==0?'年龄组':'Age group'" prop="personInfo.ageGroup" width="110"/> 21 <el-table-column v-if="isNational" :label="language==0?'年龄组':'Age group'" prop="personInfo.ageGroup" width="110" header-align="center"/>
22 <el-table-column v-if="isNational" :label="language==0?'舞种':'Division'" prop="personInfo.division" width="110"/> 22 <el-table-column v-if="isNational" :label="language==0?'舞种':'Division'" prop="personInfo.division" width="110" header-align="center"/>
23 <!-- <el-table-column :label="language==0?'会员角色':'Role'" width="150">--> 23 <!-- <el-table-column :label="language==0?'会员角色':'Role'" width="150">-->
24 <!-- <template #default="scope">--> 24 <!-- <template #default="scope">-->
25 <!-- <div class="esp">--> 25 <!-- <div class="esp">-->
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
36 <!-- </template>--> 36 <!-- </template>-->
37 <!-- </el-table-column>--> 37 <!-- </el-table-column>-->
38 <!-- <el-table-column :label="language==0?'详细地址':'Detailed Address'" prop="personInfo.address" min-width="140"/>--> 38 <!-- <el-table-column :label="language==0?'详细地址':'Detailed Address'" prop="personInfo.address" min-width="140"/>-->
39 <el-table-column :label="language==0?'报项':'REGISTERED COMPETITION'" min-width="300" :fixed="hasAction?false:'right'"> 39 <el-table-column :label="language==0?'报项':'REGISTERED COMPETITION'" min-width="300" header-align="center" :fixed="hasAction?false:'right'">
40 <template #default="props"> 40 <template #default="props">
41 <ol> 41 <ol>
42 <li v-for="s in props.row.signInfo"> 42 <li v-for="s in props.row.signInfo">
...@@ -51,7 +51,7 @@ ...@@ -51,7 +51,7 @@
51 </ol> 51 </ol>
52 </template> 52 </template>
53 </el-table-column> 53 </el-table-column>
54 <el-table-column :fixed="hasAction?false:'right'" min-width="100" :label="language==0?'保险费':'Premium'" prop="insuranceFee"> 54 <el-table-column :fixed="hasAction?false:'right'" min-width="100" align="center" :label="language==0?'保险费':'Premium'" prop="insuranceFee">
55 <template #default="scope"> 55 <template #default="scope">
56 <span class="text-primary">{{ language==0?'¥':'€' }}{{ scope.row.insuranceFee }}</span> 56 <span class="text-primary">{{ language==0?'¥':'€' }}{{ scope.row.insuranceFee }}</span>
57 </template> 57 </template>
...@@ -61,11 +61,11 @@ ...@@ -61,11 +61,11 @@
61 <template #default="scope"> 61 <template #default="scope">
62 <el-link v-if="scope.row.signInfo[0].extraPersonInfoMapList[index]?.type=='2'" 62 <el-link v-if="scope.row.signInfo[0].extraPersonInfoMapList[index]?.type=='2'"
63 target="_blank" 63 target="_blank"
64 :href="fillImgUrl(scope.row.signInfo[0].extraPersonInfoMapList[index].value.url)"> 64 :href="fillImgUrl(scope.row.signInfo[0].extraPersonInfoMapList[index]?.value?.url)">
65 <span class="text-primary">{{ scope.row.signInfo[0].extraPersonInfoMapList[index].value.name }}</span> 65 <span class="text-primary">{{ scope.row.signInfo[0].extraPersonInfoMapList[index]?.value?.name }}</span>
66 </el-link> 66 </el-link>
67 <img v-else-if="scope.row.signInfo[0].extraPersonInfoMapList[index]?.type=='3'" style="width: 50px;" 67 <img v-else-if="scope.row.signInfo[0].extraPersonInfoMapList[index]?.type=='3'" style="width: 50px;"
68 :src="fillImgUrl(scope.row.signInfo[0].extraPersonInfoMapList[index].value.url||scope.row.signInfo[0].extraPersonInfoMapList[index].value)"> 68 :src="fillImgUrl(scope.row.signInfo[0].extraPersonInfoMapList[index]?.value?.url||scope.row.signInfo[0]?.extraPersonInfoMapList[index]?.value)">
69 <span v-else>{{ scope.row.signInfo[0].extraPersonInfoMapList[index]?.value }}</span> 69 <span v-else>{{ scope.row.signInfo[0].extraPersonInfoMapList[index]?.value }}</span>
70 </template> 70 </template>
71 </el-table-column> 71 </el-table-column>
......
...@@ -2,22 +2,35 @@ ...@@ -2,22 +2,35 @@
2 <div class="mt20"></div> 2 <div class="mt20"></div>
3 <el-table :data="list" border style="width: 100%"> 3 <el-table :data="list" border style="width: 100%">
4 <el-table-column :label="language==0?'序号':'Index'" type="index" width="70" align="center"/> 4 <el-table-column :label="language==0?'序号':'Index'" type="index" width="70" align="center"/>
5 <el-table-column :label="language==0?'组别代码':'EVENT code'" width="120px" prop="project.code"/> 5 <el-table-column :label="language==0?'组别代码':'EVENT code'" width="120px" align="center" prop="project.code"/>
6 <el-table-column :label="language==0?'组别':'EVENT'" prop="project.name"/> 6 <el-table-column :label="language==0?'组别':'EVENT'" min-width="150px" header-align="center" prop="project.name">
7 <el-table-column :label="language==0?'舞种':'DISCIPLINE'" width="120px" prop="project.danceType"/>
8 <el-table-column :label="language==0?'参赛说明':'Participation Instructions'" min-width="160px">
9 <template #default="scope"> 7 <template #default="scope">
10 <div v-html="scope.row.project.remarks"></div> 8 <el-tooltip effect="dark" :content="scope.row.project.name">
9 <div class="esp">{{scope.row.project.name}}</div>
10 </el-tooltip>
11 </template> 11 </template>
12 </el-table-column> 12 </el-table-column>
13 <el-table-column :label="language==0?'参赛运动员':'PARTICIPATING ATHLETES'" min-width="140px"> 13 <el-table-column :label="language==0?'舞种':'DISCIPLINE'" align="center" width="120px" prop="project.danceType"/>
14 <el-table-column :label="language==0?'参赛说明':'Participation Instructions'" header-align="center" min-width="160px">
14 <template #default="scope"> 15 <template #default="scope">
15 <div> 16 <el-tooltip effect="dark" :content="scope.row.project.remarks">
17 <div class="esp" v-html="scope.row.project.remarks"></div>
18 </el-tooltip>
19 </template>
20 </el-table-column>
21 <el-table-column :label="language==0?'参赛运动员':'PARTICIPATING ATHLETES'" header-align="center" min-width="140px">
22 <template #default="scope">
23 <el-tooltip effect="dark">
24 <template #content>
25 <span v-for="s in scope.row.athletes">{{ s.name }},</span>
26 </template>
27 <div class="esp">
16 <span v-for="s in scope.row.athletes">{{ s.name }},</span> 28 <span v-for="s in scope.row.athletes">{{ s.name }},</span>
17 </div> 29 </div>
30 </el-tooltip>
18 </template> 31 </template>
19 </el-table-column> 32 </el-table-column>
20 <el-table-column :label="language==0?'参赛服务费':'REGISTRATION FEE'" width="150px" prop=""> 33 <el-table-column :label="language==0?'参赛服务费':'REGISTRATION FEE'" align="center" width="150px" prop="">
21 <template #default="scope"> 34 <template #default="scope">
22 <div class="text-primary"> 35 <div class="text-primary">
23 {{ language==0?'¥':'€' }}{{ scope.row.project.serviceFee }} 36 {{ language==0?'¥':'€' }}{{ scope.row.project.serviceFee }}
......
...@@ -116,8 +116,10 @@ ...@@ -116,8 +116,10 @@
116 </el-col> 116 </el-col>
117 <el-col :lg="12" v-if="Number(form.totalFee)>0"> 117 <el-col :lg="12" v-if="Number(form.totalFee)>0">
118 <div class="priceb" v-if="form.payStatus=='0'">{{ language==0?'待支付金额':'Amount Due' }}:<span class="price">{{ language==0?'¥':'€' }}{{ Number(totalFee).toFixed(2) }}</span></div> 118 <div class="priceb" v-if="form.payStatus=='0'">{{ language==0?'待支付金额':'Amount Due' }}:<span class="price">{{ language==0?'¥':'€' }}{{ Number(totalFee).toFixed(2) }}</span></div>
119 <div class="priceb" v-if="form.payStatus=='1'">{{ language==0?'已支付金额':'Amount Due' }}:<span class="price">{{ language==0?'¥':'€' }}{{ Number(totalFee).toFixed(2) }}</span></div> 119 <div class="priceb" v-else-if="form.payStatus=='1'">{{ language==0?'线下支付待核销':'Amount Due' }}:<span class="price">{{ language==0?'¥':'€' }}{{ Number(totalFee).toFixed(2) }}</span></div>
120 <div class="priceb" v-if="form.payStatus=='5'">{{ language==0?'已退款':'Refunded' }}:<span class="price">{{ language==0?'¥':'€' }}{{ Number(totalFee).toFixed(2) }}</span></div> 120 <div class="priceb" v-else-if="form.payStatus=='3'">{{ language==0?'已支付金额':'Amount Due' }}:<span class="price">{{ language==0?'¥':'€' }}{{ Number(totalFee).toFixed(2) }}</span></div>
121 <div class="priceb" v-else-if="form.payStatus=='5'">{{ language==0?'已退款':'Refunded' }}:<span class="price">{{ language==0?'¥':'€' }}{{ Number(totalFee).toFixed(2) }}</span></div>
122 <div class="priceb" v-else>{{ language==0?'费用总计':'Amount Due' }}:<span class="price">{{ language==0?'¥':'€' }}{{ Number(totalFee).toFixed(2) }}</span></div>
121 </el-col> 123 </el-col>
122 </el-row> 124 </el-row>
123 </el-card> 125 </el-card>
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
23 </el-form-item> 23 </el-form-item>
24 </el-col> 24 </el-col>
25 <el-col :lg="10"> 25 <el-col :lg="10">
26 <el-form-item :label="language==0?'代表国家/地区':'Representing'"> 26 <el-form-item :label="language==0?'代表国家/地区':'Representing'" required>
27 <el-select filterable v-model="form.countryId" @change="changeCountryId" 27 <el-select filterable v-model="form.countryId" @change="changeCountryId"
28 :disabled="form.type!='4'"> 28 :disabled="form.type!='4'">
29 <!-- <el-option v-for="item in countryList" :key="item.id" :label="language==0?item.name:item.enName" :value="item.id"/>--> 29 <!-- <el-option v-for="item in countryList" :key="item.id" :label="language==0?item.name:item.enName" :value="item.id"/>-->
......
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
26 <el-form-item :label="language==0?'参赛队名称':'Name of participating team'" required prop="abreviations"> 26 <el-form-item :label="language==0?'参赛队名称':'Name of participating team'" required prop="abreviations">
27 <el-input type="text" v-model="form.abreviations" :placeholder="language==0?'请输入内容':''"/> 27 <el-input type="text" v-model="form.abreviations" :placeholder="language==0?'请输入内容':''"/>
28 </el-form-item> 28 </el-form-item>
29 <el-form-item :label="language==0?'团体名称':'Team Name'" prop="name"> 29 <el-form-item :label="language==0?'团体名称':'Team Name'" prop="name" required>
30 <el-input v-model="form.name" :placeholder="language==0?'请输入团体名称':''" /> 30 <el-input v-model="form.name" :placeholder="language==0?'请输入团体名称':''" />
31 </el-form-item> 31 </el-form-item>
32 <el-form-item :label="language==0?'所属国家/地区':'Country'" required> 32 <el-form-item :label="language==0?'所属国家/地区':'Country'" required>
...@@ -43,12 +43,12 @@ ...@@ -43,12 +43,12 @@
43 <el-form-item :label="language==0?'邮箱':'Email'" required prop="contactEmail"> 43 <el-form-item :label="language==0?'邮箱':'Email'" required prop="contactEmail">
44 <el-input v-model="form.contactEmail" type="email" :placeholder="language==0?'请输入内容':''"/> 44 <el-input v-model="form.contactEmail" type="email" :placeholder="language==0?'请输入内容':''"/>
45 </el-form-item> 45 </el-form-item>
46 <!-- <el-form-item :label="language==0?'专业/业余':'Professional/Amateur'" required prop="majorFlag">--> 46 <el-form-item :label="language==0?'专业/业余':'Professional/Amateur'" required prop="majorFlag">
47 <!-- <el-select v-model="form.majorFlag">--> 47 <el-select v-model="form.majorFlag">
48 <!-- <el-option :label="language==0?'专业':'Professional'" value="1" />--> 48 <el-option :label="language==0?'专业':'Professional'" value="1" />
49 <!-- <el-option :label="language==0?'业余':'Amateur'" value="0" />--> 49 <el-option :label="language==0?'业余':'Amateur'" value="0" />
50 <!-- </el-select>--> 50 </el-select>
51 <!-- </el-form-item>--> 51 </el-form-item>
52 <el-form-item :label="language==0?'团体类型':'Group type'" prop="type"> 52 <el-form-item :label="language==0?'团体类型':'Group type'" prop="type">
53 <el-select :disabled="form.type=='4'" v-model="form.type" :placeholder="typeOptions[language].selectPlaceholder" style="width: 100%;"> 53 <el-select :disabled="form.type=='4'" v-model="form.type" :placeholder="typeOptions[language].selectPlaceholder" style="width: 100%;">
54 <el-option v-for="(o,index) in typeOptions[language].options" :label="o.text" 54 <el-option v-for="(o,index) in typeOptions[language].options" :label="o.text"
......
1 <script setup>
2 import { ElMessage } from "element-plus";
3 import { addViewPeople } from "./api/index.js";
4 import { languageFormat } from "./utils/language.js";
5 import { useStorage } from "@vueuse/core/index";
6 const language = useStorage("language", 0);
7
8 const router = useRouter();
9
10 const people = reactive({
11 form: {
12 name: "",
13 idCard: "",
14 },
15 type: language.value == 0 ? "身份证" : "Identity Card",
16 onConfirm() {
17 if (!people.form.name)
18 return ElMessage({
19 type: "warning",
20 message: languageFormat(language.value, "请输入姓名", "Name"),
21 });
22 if (!people.form.idCard)
23 return ElMessage({
24 type: "warning",
25 message: languageFormat(language.value, "请输入证件号", "ID Numbe"),
26 });
27
28 // 使用正则验证身份证号码格式
29 const idCardRegex =
30 /^[1-9]\d{5}(19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[\dXx]$/;
31 if (!idCardRegex.test(people.form.idCard) && language.value == 0)
32 return ElMessage({ type: "warning", message: "身份证号格式不正确" });
33
34 addViewPeople(people.form).then((res) => {
35 ElMessage({
36 type: "success",
37 message: languageFormat(language.value, "操作成功", "Operate successfully"),
38 });
39 router.go(-2);
40 });
41 },
42 });
43 </script>
44
45 <template>
46 <div class="container">
47 <div class="title">
48 {{ languageFormat(language, "新增观影人", "Companion") }}
49 </div>
50 <div class="content">
51 <div class="form-item">
52 <div>
53 <div class="label">
54 {{ languageFormat(language, "姓名", "Full Name") }}
55 </div>
56 <el-input
57 v-model="people.form.name"
58 style="width: 570px"
59 :placeholder="language == 0 ? '请输入姓名' : 'Nama'"
60 />
61 </div>
62 <div>
63 <div class="label">
64 {{ languageFormat(language, "证件类型", "Type of Document") }}
65 </div>
66 <el-input
67 v-model="people.type"
68 style="width: 570px"
69 placeholder="Please input"
70 readonly
71 />
72 </div>
73 </div>
74 <div class="form-item">
75 <div>
76 <div class="label">
77 {{ languageFormat(language, "身份证号", "Identity Card") }}
78 </div>
79 <el-input
80 v-model="people.form.idCard"
81 style="width: 570px"
82 :placeholder="language == 0 ? '请输入身份证号' : 'ID Numbe'"
83 />
84 </div>
85 </div>
86 </div>
87
88 <div class="footer">
89 <div class="can_pay">
90 {{ languageFormat(language, "取消", "Cancel") }}
91 </div>
92 <div class="pay" @click="people.onConfirm()">
93 {{ languageFormat(language, "确认", "Confirm") }}
94 </div>
95 </div>
96 </div>
97 </template>
98
99 <style scoped lang="scss">
100 div {
101 box-sizing: border-box;
102 }
103 .container {
104 padding: 20px 0;
105 width: 1200px;
106 margin: 0 auto;
107
108 .title {
109 padding: 11px;
110 text-align: center;
111 background: linear-gradient(270deg, #493ceb 0%, #8623fc 100%);
112 font-size: 18px;
113 color: #ffffff;
114 }
115
116 .content {
117 padding: 46px 20px 24px;
118 background-color: #fff;
119 :deep(.el-input) {
120 height: 48px;
121 border-radius: 24px !important;
122 }
123 .form-item {
124 display: flex;
125 gap: 20px;
126 margin-bottom: 36px;
127 &:last-child {
128 margin: 0;
129 }
130 .label {
131 font-size: 18px;
132 color: #333333;
133 margin-bottom: 16px;
134 }
135 }
136 }
137 .footer {
138 display: flex;
139 justify-content: center;
140 align-items: center;
141 gap: 20px;
142 height: 70px;
143 background-color: #fff;
144 margin-top: 12px;
145 .pay {
146 width: 200px;
147 height: 40px;
148 background: linear-gradient(270deg, #493ceb 0%, #8623fc 100%);
149 border-radius: 20px;
150 font-weight: 500;
151 font-size: 16px;
152 color: #ffffff;
153 line-height: 40px;
154 text-align: center;
155 cursor: pointer;
156 }
157 .can_pay {
158 width: 200px;
159 height: 40px;
160 background: #f6f6f6;
161 border-radius: 20px;
162 font-weight: 500;
163 font-size: 16px;
164 color: #999;
165 line-height: 40px;
166 text-align: center;
167 box-sizing: border-box;
168 cursor: pointer;
169 }
170 }
171 }
172 </style>
1 import request from "../utils/request";
2
3 export const loginFree = (data) => request("POST", "/login/loginFree", data);
4 /** 活动详情 */
5 export const activityDetail = (data) =>
6 request("GET", `/api/activity/detail/${data.actId}`, data);
7 /** 场次详情 */
8 export const sessionDetail = (data) =>
9 request("GET", `/api/activity/sessionDetail/${data.actId}`, data);
10 /** 获取场馆信息 */
11 export const getSitePlaceInfo = (data) =>
12 request("GET", `/api/activity/getSitePlaceInfo`, data);
13 /** 获取票档信息 */
14 export const getPriceLevelInfo = (data) =>
15 request("GET", `/api/activity/getPriceLevelInfo`, data);
16 /** 获取座位信息 */
17 export const getSiteConfig = (data) =>
18 request("GET", `/api/activity/getSiteConfig`, data);
19 /** 确认订单 */
20 export const confirmOrder = (data) =>
21 request("POST", `/api/order/confirmOrder`, data);
22 /** 订单支付 */
23 export const payOrder = (data) =>
24 request("POST", `/api/order/payment`, data);
25 /** 观众列表 */
26 export const viewPeopleList = (data) =>
27 request("GET", `/api/customer/list`, data);
28 /** 删除观众 */
29 export const deleteViewPeople = (data) =>
30 request("POST", `/api/customer/delete/${data.id}`, data);
31 /** 新增观众 */
32 export const addViewPeople = (data) =>
33 request("POST", `/api/customer/add`, data);
34 /** 订单列表 */
35 export const getOrderList = (data) =>
36 request("GET", `/api/order/list`, data);
37 /** 立即支付 */
38 export const immediatePay = (data) =>
39 request("POST", `/api/order/immediatePay`, data);
40 /** 取消支付 */
41 export const cancelPay = (data) =>
42 request("POST", `/api/order/cancelPay/${data.orderSn}`, data);
43 /** 退单 */
44 export const cancelOrder = (data) =>
45 request("POST", `/api/order/cancelOrder/${data.orderSn}`, data);
46 /** 订单详情 */
47 export const getOrderDetail = (data) =>
48 request("GET", `/api/order/detail/${data.orderSn}`, data);
49 /** 检查是否支付成功 */
50 export const checkPaySuccess = (data) =>
51 request("POST", `/api/order/checkOrderIsPay/${data.orderSn}`, data);
1 <script setup>
2 const props = defineProps({
3 showCodeDialog: {
4 type: Boolean,
5 default: false,
6 },
7 qrCode: {
8 type: String,
9 default: "",
10 },
11 });
12
13 const emit = defineEmits(["closeDialog"]);
14 const handleCloce = () => {
15 emit("closeDialog", false);
16 };
17 </script>
18
19 <template>
20 <div>
21 <el-dialog
22 v-model="props.showCodeDialog"
23 title="支付"
24 width="300"
25 :before-close="handleCloce()"
26 >
27 <div>
28 <img class="qrcode" :src="props.qrCode" />
29 </div>
30 </el-dialog>
31 </div>
32 </template>
33
34 <style scoped lang="scss">
35 .qrcode {
36 width: 150px;
37 height: 150px;
38 background-color: #8623fc;
39 margin: 0 auto;
40 }
41 </style>
1 <script setup>
2 import { deleteViewPeople, viewPeopleList } from "./api/index.js";
3 import { ElMessageBox, ElMessage } from "element-plus";
4 import { languageFormat } from "./utils/language.js";
5 import { useStorage } from "@vueuse/core/index";
6 const language = useStorage("language", 0);
7
8 const audience = reactive({
9 data: [],
10 fetchData() {
11 viewPeopleList().then((res) => {
12 audience.data = res.data;
13 });
14 },
15
16 deletePeople(id) {
17 ElMessageBox.confirm(
18 languageFormat(
19 language.value,
20 "确认删除该观看人吗?",
21 "Are you sure to delete this viewer?"
22 ),
23 languageFormat(language.value, "提示", "Reminder"),
24 {
25 confirmButtonText: languageFormat(language.value, "确认", "confirm"),
26 cancelButtonText: languageFormat(language.value, "取消", "cancel"),
27 type: "warning",
28 draggable: true,
29 }
30 )
31 .then(() => {
32 deleteViewPeople({ id }).then(() => {
33 audience.fetchData();
34 ElMessage({
35 type: "success",
36 message: languageFormat(
37 language.value,
38 "操作成功",
39 "Operate successfully"
40 ),
41 });
42 });
43 })
44 .catch(() => {});
45 },
46 });
47
48 audience.fetchData();
49 </script>
50
51 <template>
52 <div class="container">
53 <div class="title">
54 <div
55 class="add_btn"
56 @click="$router.push({ path: '/seat/add_watch_people' })"
57 >
58 {{ languageFormat(language, "新增", "Add") }}
59 </div>
60 {{ languageFormat(language, "观影人管理", "Viewers") }}
61 </div>
62 <div class="content">
63 <div class="people_box">
64 <div
65 v-for="(it, index) in audience.data"
66 :key="index"
67 class="people_item"
68 >
69 <div class="name">{{ it.name }}</div>
70 <div class="idcard">
71 {{ languageFormat(language, "身份证", "Identity Card") }}{{
72 it.idCard
73 }}
74 </div>
75 <div class="btn" @click="audience.deletePeople(it.id)">
76 {{ languageFormat(language, "删除", "delete") }}
77 </div>
78 </div>
79 </div>
80 </div>
81 </div>
82 </template>
83
84 <style scoped lang="scss">
85 div {
86 box-sizing: border-box;
87 }
88 .container {
89 padding: 20px 0;
90 width: 1200px;
91 margin: 0 auto;
92
93 .title {
94 position: relative;
95 padding: 11px;
96 text-align: center;
97 background: linear-gradient(270deg, #493ceb 0%, #8623fc 100%);
98 font-size: 18px;
99 color: #ffffff;
100 .add_btn {
101 position: absolute;
102 left: 20px;
103 top: 50%;
104 transform: translateY(-50%);
105 width: 68px;
106 height: 24px;
107 border-radius: 12px;
108 border: 1px solid #ffffff;
109 font-weight: 400;
110 font-size: 12px;
111 color: #ffffff;
112 text-align: center;
113 line-height: 24px;
114 box-sizing: border-box;
115 user-select: none;
116 cursor: pointer;
117 }
118 }
119
120 .content {
121 min-height: 590px;
122 background-color: #fff;
123 box-shadow: 0px 0px 46px 0px rgba(1, 16, 64, 0.08);
124 padding: 20px;
125 .people_box {
126 display: flex;
127 flex-wrap: wrap;
128 gap: 20px;
129 .people_item {
130 width: 275px;
131 height: 137px;
132 background: #ffffff;
133 border: 1px solid #dcdfe6;
134 padding: 16px;
135 .name {
136 font-weight: 600;
137 font-size: 16px;
138 color: #2d373f;
139 line-height: 22px;
140 }
141 .idcard {
142 font-size: 16px;
143 color: #95a1a6;
144 line-height: 22px;
145 margin-top: 12px;
146 margin-bottom: 17px;
147 }
148 .btn {
149 width: 69px;
150 height: 32px;
151 background: #e7e6ff;
152 font-weight: 400;
153 font-size: 16px;
154 color: #493ceb;
155 line-height: 32px;
156 text-align: center;
157 cursor: pointer;
158 user-select: none;
159 }
160 }
161 }
162 }
163 }
164 </style>
1 <script setup></script>
2
3 <template>
4 <div class="view">
5 <router-view />
6 </div>
7 </template>
8
9 <style scoped lang="scss">
10 .view {
11 min-width: 1024px;
12 max-width: 1920px;
13 margin: 0 auto;
14 }
15 </style>
1
2 export const languageFormat = (language = 0, zh, en) => {
3 return language == 1 ? en : zh;
4 };
1 /** 用户登录token储存的key */
2 export const TOKEN_KEY = "SEAT_TOKEN";
3
4 /** 设置token */
5 export const setToken = (token) => localStorage.setItem(TOKEN_KEY, token);
6
7 /**
8 * 获取登录token
9 * @param drop 是否清空
10 */
11 export const getToken = (drop = false) => {
12 let token = localStorage.getItem(TOKEN_KEY);
13 if (!token) return null;
14 if (drop) localStorage.removeItem(TOKEN_KEY);
15 return token;
16 };
1 // http.js
2
3 // import axios from "axios";
4 import axios from 'axios/dist/axios'
5 import { getToken } from "./local-store";
6 import { ElMessage } from "element-plus";
7
8 import { useStorage } from "@vueuse/core/index";
9 const language = useStorage("language", 0);
10
11 const baseURL = "https://radv4.gitliuyi.top/ticket"; //"http://book.xiaojinyu.games"; // 这里填入你的基础 API URL
12 const timeout = 15000; // 请求超时时间
13
14 const http = axios.create({
15 baseURL,
16 timeout,
17 headers: {
18 "Content-Type": "application/json",
19 },
20 });
21
22 // 请求拦截器
23 http.interceptors.request.use(
24 (config) => {
25 // 在发送请求之前做些什么
26 if (language.value == 1) config.headers.Language = "en-us";
27 const TOKEN = getToken();
28 if (TOKEN) config.headers.Authorization = TOKEN;
29 if (config.method == "get") config.params = config.data;
30 console.log("config", config);
31 return config;
32 },
33 (error) => {
34 return Promise.reject(error);
35 }
36 );
37
38 // 响应拦截器
39 http.interceptors.response.use(
40 (response) => {
41 // 判断是否有异常
42 let error = null; // 若无异常此值为null
43 if (response.status !== 200) {
44 error = Error(`Request failed with statuCode ${response.status}`);
45 }
46
47 if (response.data.code != 200) {
48 ElMessage({ type: "error", message: response.data.msg });
49 return Promise.reject(response.data);
50 }
51
52 return response.data;
53 },
54 (error) => {
55 // 对响应错误做点什么
56 return Promise.reject(error);
57 }
58 );
59
60 // 封装请求函数
61 const request = (method, url, data = null) => {
62 return http({
63 method,
64 url,
65 data,
66 });
67 };
68
69 export default request;
...@@ -65,25 +65,25 @@ export default defineConfig(({ mode, command }) => { ...@@ -65,25 +65,25 @@ export default defineConfig(({ mode, command }) => {
65 // https://cn.vitejs.dev/config/#server-proxy 65 // https://cn.vitejs.dev/config/#server-proxy
66 '/dev-api/ztx-train': { 66 '/dev-api/ztx-train': {
67 // target: 'http://123.60.96.243:1896/stage-api', 67 // target: 'http://123.60.96.243:1896/stage-api',
68 target: 'http://192.168.1.25:8686', 68 target: 'https://jijin.wtwuxicenter.com/stage-api',
69 changeOrigin: true, 69 changeOrigin: true,
70 rewrite: (p) => p.replace(/^\/dev-api\/ztx-train/, '') 70 rewrite: (p) => p.replace(/^\/dev-api\/ztx-train/, '')
71 }, 71 },
72 '/dev-api/ztx-match': { 72 '/dev-api/ztx-match': {
73 target: 'http://192.168.1.118:8083', 73 // target: 'http://192.168.1.118:8083',
74 // target: 'http://192.168.1.132:8081', 74 target: 'https://jijin.wtwuxicenter.com/stage-api',
75 changeOrigin: true, 75 changeOrigin: true,
76 rewrite: (p) => p.replace(/^\/dev-api\/ztx-match/, '') 76 rewrite: (p) => p.replace(/^\/dev-api\/ztx-match/, '')
77 }, 77 },
78 '/dev-api/ztx-webSite': { 78 '/dev-api/ztx-webSite': {
79 // target: 'https://dance.itechtop.cn/stage-api', 79 // target: 'https://dance.itechtop.cn/stage-api',
80 target: 'http://192.168.1.118:8081/', 80 target: 'https://jijin.wtwuxicenter.com/stage-api',
81 changeOrigin: true, 81 changeOrigin: true,
82 rewrite: (p) => p.replace(/^\/dev-api\/ztx-webSite/, '') 82 rewrite: (p) => p.replace(/^\/dev-api\/ztx-webSite/, '')
83 }, 83 },
84 '/dev-api': { 84 '/dev-api': {
85 target: 'http://192.168.1.131:8081/', 85 // target: 'http://192.168.1.118:8081/',
86 // target: 'https://dance.itechtop.cn/stage-api', 86 target: 'https://jijin.wtwuxicenter.com/stage-api',
87 // target: 'https://wdsfwuxicenter.com/stage-api', 87 // target: 'https://wdsfwuxicenter.com/stage-api',
88 changeOrigin: true, 88 changeOrigin: true,
89 rewrite: (p) => p.replace(/^\/dev-api/, '') 89 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!