Merge branch 'order' of https://code.itechtop.cn/yangyang/dance-pc into order
Showing
41 changed files
with
764 additions
and
79 deletions
| ... | @@ -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", | ... | ... |
pnpm-lock.yaml
0 → 100644
This diff could not be displayed because it is too large.
public/file/COMPETITION GUIDE 0520V1.pdf
0 → 100644
No preview for this file type
No preview for this file type
src/assets/sign/gl.png
0 → 100644
1.53 KB
| ... | @@ -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" | ... | ... |
src/viewsPc/seat/add-watch-people.vue
0 → 100644
| 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> |
src/viewsPc/seat/api/index.js
0 → 100644
| 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); |
src/viewsPc/seat/components/qrCodeDialog.vue
0 → 100644
| 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> |
src/viewsPc/seat/confirm-order.vue
0 → 100644
This diff is collapsed.
Click to expand it.
src/viewsPc/seat/order-detail.vue
0 → 100644
This diff is collapsed.
Click to expand it.
src/viewsPc/seat/order-list.vue
0 → 100644
This diff is collapsed.
Click to expand it.
src/viewsPc/seat/people-manage.vue
0 → 100644
| 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> |
src/viewsPc/seat/seat-picker.vue
0 → 100644
This diff is collapsed.
Click to expand it.
src/viewsPc/seat/seat.vue
0 → 100644
src/viewsPc/seat/ticket-detail.vue
0 → 100644
This diff is collapsed.
Click to expand it.
src/viewsPc/seat/utils/language.js
0 → 100644
src/viewsPc/seat/utils/local-store.js
0 → 100644
| 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 | }; |
src/viewsPc/seat/utils/request.js
0 → 100644
| 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/, '') | ... | ... |
-
Please register or sign in to post a comment