01c8ae36 by zhangmeng

票务

1 parent 0de836b9
1 <template> 1 <template>
2 <el-card class="container"> 2 <el-card class="container">
3 <div v-loading="loading"> 3 <div v-loading="loading">
4 <div class="title"> 4 <div class="title father">
5 {{ languageFormat(language, "订单确认", "Order confirmation") }} 5 {{ languageFormat(language, "订单确认", "Order confirmation") }}
6 <span class="son" @click="handelUp">上一步</span>
6 </div> 7 </div>
7 <div class="content pd20"> 8 <div class="content pd20">
8 <el-row gutter="20"> 9 <el-row gutter="20">
...@@ -11,7 +12,7 @@ ...@@ -11,7 +12,7 @@
11 <div class="name">{{ TickForm.name }}</div> 12 <div class="name">{{ TickForm.name }}</div>
12 <div class="address">{{ TickForm.address }}</div> 13 <div class="address">{{ TickForm.address }}</div>
13 </div> 14 </div>
14 15
15 <div class="info"> 16 <div class="info">
16 <div class="name">{{ TickForm2.ticketTypeName }}</div> 17 <div class="name">{{ TickForm2.ticketTypeName }}</div>
17 <div class="address"> 18 <div class="address">
...@@ -20,67 +21,76 @@ ...@@ -20,67 +21,76 @@
20 <span v-else>{{ language == 0 ? '夜间场' : 'Night' }}</span> 21 <span v-else>{{ language == 0 ? '夜间场' : 'Night' }}</span>
21 {{ TickForm2.ticketName }} 22 {{ TickForm2.ticketName }}
22 </div> 23 </div>
23 24
24 <div v-if="TickForm2.ticketType=='0'" class="address">{{ language==0?'剩余数量':'Remaining Quantity' }}{{ leftCount }}</div> 25 <div v-if="TickForm2.ticketType=='0'" class="address">{{
26 language == 0 ? '剩余数量' : 'Remaining Quantity'
27 }}{{ leftCount }}
28 </div>
25 </div> 29 </div>
26 30
27 <div class="ticket_info mb20"> 31 <div class="ticket_info mb20">
28 <div class="tit_box"> 32 <div class="tit_box">
29 <div class="line"/> 33 <div class="line" />
30 <div class="txt"> 34 <div class="txt">
31 {{ languageFormat(language, "订票信息", "Ticket Info") }} 35 {{ languageFormat(language, "订票信息", "Ticket Info") }}
32 </div> 36 </div>
33 </div> 37 </div>
34 38
35 <div class="form"> 39 <div class="form">
36 <el-form ref="formRef" :model="orderForm" :rules="rules" label-width="140px"> 40 <el-form ref="formRef" :model="orderForm" :rules="rules" label-width="140px">
37 <div v-if="TickForm2.ticketType == '1'"> 41 <div v-if="TickForm2.ticketType == '1'">
38 <el-form-item :label="language == 0 ? '桌号' : 'Table'"> 42 <el-form-item :label="language == 0 ? '桌号' : 'Table'">
39 43
40 <el-popover placement="right" :width="400" trigger="hover"> 44 <el-popover :width="400" placement="right" trigger="hover">
41 <template #reference> 45 <template #reference>
42 <div class="text-primary underline pointer" @click="showImg"> 46 <div class="text-primary underline pointer" @click="showImg">
43 {{ language == 0 ? '查看区域布局' : ' View Area Layout' }} 47 {{ language == 0 ? '查看区域布局' : ' View Area Layout' }}
44 </div> 48 </div>
45 </template> 49 </template>
46 <el-image :src="fillImgUrl(tickImg)" style="width: 100%;" 50 <el-image
47 :preview-src-list="[fillImgUrl(tickImg)]"/> 51 :preview-src-list="[fillImgUrl(tickImg)]" :src="fillImgUrl(tickImg)"
52 style="width: 100%;"
53 />
48 </el-popover> 54 </el-popover>
49 55
50 56
51 <el-radio-group v-model="currDesk"> 57 <el-radio-group v-model="currDesk">
52 <el-radio-button v-for="(it, index) in deskList" :key="index" :label="it.deskNo" :value="it" 58 <el-radio-button
53 :disabled="it.status!=0"/> 59 v-for="(it, index) in deskList" :key="index" :disabled="it.status!=0" :label="it.deskNo"
60 :value="it"
61 />
54 </el-radio-group> 62 </el-radio-group>
55 </el-form-item> 63 </el-form-item>
56 <el-form-item :label="language == 0 ? '座位号' : 'Seat'"> 64 <el-form-item :label="language == 0 ? '座位号' : 'Seat'">
57 <el-checkbox-group v-model="currSeat"> 65 <el-checkbox-group v-model="currSeat">
58 <el-checkbox-button v-for="(it, index) in currDesk?.seatList" :key="index" :label="it.seatNo" 66 <el-checkbox-button
59 :value="it" :disabled="it.status!=0"/> 67 v-for="(it, index) in currDesk?.seatList" :key="index" :disabled="it.status!=0"
68 :label="it.seatNo" :value="it"
69 />
60 </el-checkbox-group> 70 </el-checkbox-group>
61 </el-form-item> 71 </el-form-item>
62 <el-form-item :label="language == 0 ?'已选座位号':'Selected Seat'"> 72 <el-form-item :label="language == 0 ?'已选座位号':'Selected Seat'">
63 <el-tag class="mr10" v-for="(s,index) in currSeat" :key="s.id" closable @close="delSeat(s,index)"> 73 <el-tag v-for="(s,index) in currSeat" :key="s.id" class="mr10" closable @close="delSeat(s,index)">
64 {{ s.deskNo }} - {{ s.seatNo }} 74 {{ s.deskNo }} - {{ s.seatNo }}
65 </el-tag> 75 </el-tag>
66 </el-form-item> 76 </el-form-item>
67 </div> 77 </div>
68 <el-form-item 78 <el-form-item
69 :label="language == 0 ? '联系人' : 'contact person'" prop="contacts" 79 :label="language == 0 ? '联系人' : 'contact person'" prop="contacts"
70 > 80 >
71 <el-input 81 <el-input
72 v-model="orderForm.contacts" 82 v-model="orderForm.contacts"
73 :placeholder=" language == 0 ? '请输入联系人' : 'Please enter the contact person'" 83 :placeholder=" language == 0 ? '请输入联系人' : 'Please enter the contact person'"
74 style="width: 320px" 84 style="width: 320px"
75 /> 85 />
76 </el-form-item> 86 </el-form-item>
77 <el-form-item 87 <el-form-item
78 :label="language == 0 ? '联系电话' : 'contact phone'" prop="phone" 88 :label="language == 0 ? '联系电话' : 'contact phone'" prop="phone"
79 > 89 >
80 <el-input 90 <el-input
81 v-model="orderForm.phone" 91 v-model="orderForm.phone"
82 :placeholder=" language == 0 ? '请输入联系电话' : 'Please enter the contact phone number'" 92 :placeholder=" language == 0 ? '请输入联系电话' : 'Please enter the contact phone number'"
83 style="width: 320px" 93 style="width: 320px"
84 /> 94 />
85 </el-form-item> 95 </el-form-item>
86 <el-form-item :label="language == 0 ? '观看人' : 'Viewer'" prop="customerIds"> 96 <el-form-item :label="language == 0 ? '观看人' : 'Viewer'" prop="customerIds">
...@@ -96,7 +106,7 @@ ...@@ -96,7 +106,7 @@
96 </div> 106 </div>
97 <div class="idcard">{{ it.idCard }}</div> 107 <div class="idcard">{{ it.idCard }}</div>
98 </div> 108 </div>
99 <el-checkbox :value="it.id" :disabled="!!it.disabled"/> 109 <el-checkbox :disabled="!!it.disabled" :value="it.id" />
100 </div> 110 </div>
101 </el-checkbox-group> 111 </el-checkbox-group>
102 </div> 112 </div>
...@@ -109,21 +119,21 @@ ...@@ -109,21 +119,21 @@
109 </div> 119 </div>
110 </div> 120 </div>
111 </el-col> 121 </el-col>
112 122
113 <el-col :lg="8" class="right"> 123 <el-col :lg="8" class="right">
114 <div class="tit_box"> 124 <div class="tit_box">
115 <div class="line"/> 125 <div class="line" />
116 <div class="txt"> 126 <div class="txt">
117 {{ languageFormat(language, "订单明细", "Order summary") }} 127 {{ languageFormat(language, "订单明细", "Order summary") }}
118 </div> 128 </div>
119 </div> 129 </div>
120 130
121 <div class="detail"> 131 <div class="detail">
122 <div class="detail_top"> 132 <div class="detail_top">
123 <div class="time"> 133 <div class="time">
124 {{ language == 0 ? '票价' : 'Cost Ticket' }} 134 {{ language == 0 ? '票价' : 'Cost Ticket' }}
125 </div> 135 </div>
126 <p/> 136 <p />
127 <div class="ticket"> 137 <div class="ticket">
128 {{ language == 0 ? TickForm2.price : TickForm2.priceEn }} 138 {{ language == 0 ? TickForm2.price : TickForm2.priceEn }}
129 <span> {{ language == 0 ? '元' : 'Euro' }}</span> 139 <span> {{ language == 0 ? '元' : 'Euro' }}</span>
...@@ -143,6 +153,15 @@ ...@@ -143,6 +153,15 @@
143 </div> 153 </div>
144 </div> 154 </div>
145 </div> 155 </div>
156 <!-- 场馆布局图-->
157
158 <div style="margin-top: 95px">
159 <el-image
160 :preview-src-list="[fillImgUrl(tickImg)]"
161 :src="fillImgUrl(tickImg)"
162 style="width: 100%;"
163 />
164 </div>
146 </el-col> 165 </el-col>
147 </el-row> 166 </el-row>
148 </div> 167 </div>
...@@ -166,7 +185,7 @@ ...@@ -166,7 +185,7 @@
166 </template> 185 </template>
167 186
168 <script setup> 187 <script setup>
169 import {ref, computed, onMounted} from 'vue' 188 import { ref, computed, onMounted } from 'vue'
170 import { 189 import {
171 customerListApi, 190 customerListApi,
172 submitOrderTicket, 191 submitOrderTicket,
...@@ -176,12 +195,12 @@ import { ...@@ -176,12 +195,12 @@ import {
176 checkPurchasedCustomers, 195 checkPurchasedCustomers,
177 getDeskInfo 196 getDeskInfo
178 } from '@/apiPc/booking' 197 } from '@/apiPc/booking'
179 import {ElMessage, ElMessageBox} from 'element-plus' 198 import { ElMessage, ElMessageBox } from 'element-plus'
180 import {languageFormat} from '@/viewsPc/seat/utils/language.js' 199 import { languageFormat } from '@/viewsPc/seat/utils/language.js'
181 import useUserStore from '/@/store/modules/user' 200 import useUserStore from '/@/store/modules/user'
182 import {useStorage} from '@vueuse/core/index' 201 import { useStorage } from '@vueuse/core/index'
183 import _ from 'lodash' 202 import _ from 'lodash'
184 import {useRoute, useRouter} from 'vue-router' 203 import { useRoute, useRouter } from 'vue-router'
185 204
186 const useStore = useUserStore() 205 const useStore = useUserStore()
187 206
...@@ -232,7 +251,7 @@ onMounted(() => { ...@@ -232,7 +251,7 @@ onMounted(() => {
232 tickImg.value = route.query.tickImg 251 tickImg.value = route.query.tickImg
233 customerList() 252 customerList()
234 getDetail() 253 getDetail()
235 254
236 getActivityTypeVoById({ 255 getActivityTypeVoById({
237 id: route.params.latstId 256 id: route.params.latstId
238 }).then((res) => { 257 }).then((res) => {
...@@ -270,12 +289,12 @@ function changeGroup(e) { ...@@ -270,12 +289,12 @@ function changeGroup(e) {
270 }).then(res => { 289 }).then(res => {
271 if (res.data.length > 0) { 290 if (res.data.length > 0) {
272 const names = _.map(res.data, (d) => d.name).join(',') 291 const names = _.map(res.data, (d) => d.name).join(',')
273 292
274 ElMessage({ 293 ElMessage({
275 message: language.value == 0 ? `${names} 已购买该票` : 'The user has purchased the ticket', 294 message: language.value == 0 ? `${names} 已购买该票` : 'The user has purchased the ticket',
276 type: 'error' 295 type: 'error'
277 }) 296 })
278 297
279 _.each(res.data, (d) => { 298 _.each(res.data, (d) => {
280 _.remove(orderForm.value.customerIds, (c) => c == d.id) 299 _.remove(orderForm.value.customerIds, (c) => c == d.id)
281 _.find(personnelList.value, (p) => p.id == d.id).disabled = true 300 _.find(personnelList.value, (p) => p.id == d.id).disabled = true
...@@ -297,7 +316,7 @@ async function paymentHandle() { ...@@ -297,7 +316,7 @@ async function paymentHandle() {
297 useStore().setVisitor() 316 useStore().setVisitor()
298 return 317 return
299 } 318 }
300 319
301 if (TickForm2.value.ticketType == '1') { 320 if (TickForm2.value.ticketType == '1') {
302 if (currSeat.value.length == 0) { 321 if (currSeat.value.length == 0) {
303 ElMessage({ 322 ElMessage({
...@@ -314,14 +333,14 @@ async function paymentHandle() { ...@@ -314,14 +333,14 @@ async function paymentHandle() {
314 return 333 return
315 } 334 }
316 } 335 }
317 336
318 await formRef.value.validate() 337 await formRef.value.validate()
319 338
320 await ElMessageBox.confirm(language.value == 0 ? '确认提交订单吗?' : 'Confirm to submit the order?', { 339 await ElMessageBox.confirm(language.value == 0 ? '确认提交订单吗?' : 'Confirm to submit the order?', {
321 confirmButtonText: language.value == 0 ? '确定' : 'Confirm', 340 confirmButtonText: language.value == 0 ? '确定' : 'Confirm',
322 cancelButtonText: language.value == 0 ? '取消' : 'Cancel', 341 cancelButtonText: language.value == 0 ? '取消' : 'Cancel',
323 type: 'warning' 342 type: 'warning'
324 }).then(async () => { 343 }).then(async() => {
325 try { 344 try {
326 const orderCustomerList = [] 345 const orderCustomerList = []
327 _.each(orderForm.value.customerIds, (id, index) => { 346 _.each(orderForm.value.customerIds, (id, index) => {
...@@ -337,7 +356,7 @@ async function paymentHandle() { ...@@ -337,7 +356,7 @@ async function paymentHandle() {
337 seatNo: tempSeat.seatNo 356 seatNo: tempSeat.seatNo
338 }) 357 })
339 }) 358 })
340 359
341 const res = await submitOrderTicket({ 360 const res = await submitOrderTicket({
342 activeId: orderForm.value.activeId, 361 activeId: orderForm.value.activeId,
343 orderName: TickForm2.value.ticketTypeName, 362 orderName: TickForm2.value.ticketTypeName,
...@@ -384,13 +403,13 @@ async function paymentHandle() { ...@@ -384,13 +403,13 @@ async function paymentHandle() {
384 } catch (e) { 403 } catch (e) {
385 ElMessage.error(language.value == 0 ? '下单失败,' : 'Order failure') 404 ElMessage.error(language.value == 0 ? '下单失败,' : 'Order failure')
386 } finally { 405 } finally {
387 406
388 } 407 }
389 }) 408 })
390 } 409 }
391 410
392 async function getDetail() { 411 async function getDetail() {
393 const res = await getTicketInfoByActivityId({activityId: orderForm.value.activeId}) 412 const res = await getTicketInfoByActivityId({ activityId: orderForm.value.activeId })
394 TickForm.value = res.data 413 TickForm.value = res.data
395 } 414 }
396 415
...@@ -402,7 +421,11 @@ function addPeopl() { ...@@ -402,7 +421,11 @@ function addPeopl() {
402 } 421 }
403 422
404 const showImg = () => { 423 const showImg = () => {
424
425 }
405 426
427 function handelUp() {
428 router.go(-1)
406 } 429 }
407 </script> 430 </script>
408 431
...@@ -428,7 +451,7 @@ div { ...@@ -428,7 +451,7 @@ div {
428 //padding: 20px 0; 451 //padding: 20px 0;
429 width: 1200px; 452 width: 1200px;
430 margin: 20px auto; 453 margin: 20px auto;
431 454
432 .tag_t { 455 .tag_t {
433 padding: 1px 10px; 456 padding: 1px 10px;
434 font-weight: 400; 457 font-weight: 400;
...@@ -438,7 +461,7 @@ div { ...@@ -438,7 +461,7 @@ div {
438 border: 1px solid #453dea; 461 border: 1px solid #453dea;
439 margin-left: 5px; 462 margin-left: 5px;
440 } 463 }
441 464
442 .title { 465 .title {
443 padding: 11px; 466 padding: 11px;
444 text-align: center; 467 text-align: center;
...@@ -446,18 +469,18 @@ div { ...@@ -446,18 +469,18 @@ div {
446 font-size: 18px; 469 font-size: 18px;
447 color: #ffffff; 470 color: #ffffff;
448 } 471 }
449 472
450 .content { 473 .content {
451 background-color: #fff; 474 background-color: #fff;
452 } 475 }
453 476
454 .line { 477 .line {
455 width: 4px; 478 width: 4px;
456 height: 18px; 479 height: 18px;
457 background: linear-gradient(180deg, #493ceb 0%, #8623fc 100%); 480 background: linear-gradient(180deg, #493ceb 0%, #8623fc 100%);
458 border-radius: 4px; 481 border-radius: 4px;
459 } 482 }
460 483
461 .left { 484 .left {
462 .info { 485 .info {
463 background: rgba(69, 61, 234, 0.04); 486 background: rgba(69, 61, 234, 0.04);
...@@ -465,54 +488,54 @@ div { ...@@ -465,54 +488,54 @@ div {
465 border: 1px solid #d3d1f6; 488 border: 1px solid #d3d1f6;
466 padding: 20px 0 28px 33px; 489 padding: 20px 0 28px 33px;
467 margin-bottom: 20px; 490 margin-bottom: 20px;
468 491
469 .name { 492 .name {
470 font-weight: 500; 493 font-weight: 500;
471 font-size: 18px; 494 font-size: 18px;
472 color: #000000; 495 color: #000000;
473 margin-bottom: 20px; 496 margin-bottom: 20px;
474 } 497 }
475 498
476 .address { 499 .address {
477 font-weight: 400; 500 font-weight: 400;
478 font-size: 14px; 501 font-size: 14px;
479 color: #929aa0; 502 color: #929aa0;
480 } 503 }
481 } 504 }
482 505
483 .ticket_info { 506 .ticket_info {
484 .tit_box { 507 .tit_box {
485 display: flex; 508 display: flex;
486 align-items: center; 509 align-items: center;
487 gap: 10px; 510 gap: 10px;
488 margin-bottom: 14px; 511 margin-bottom: 14px;
489 512
490 .txt { 513 .txt {
491 font-weight: bold; 514 font-weight: bold;
492 font-size: 16px; 515 font-size: 16px;
493 color: #493ceb; 516 color: #493ceb;
494 } 517 }
495 } 518 }
496 519
497 .form { 520 .form {
498 min-height: 464px; 521 min-height: 464px;
499 padding: 20px 60px; 522 padding: 20px 60px;
500 border-radius: 5px; 523 border-radius: 5px;
501 border: 1px solid #dcdfe6; 524 border: 1px solid #dcdfe6;
502 525
503 .p_box { 526 .p_box {
504 display: flex; 527 display: flex;
505 width: 100%; 528 width: 100%;
506 gap: 10px; 529 gap: 10px;
507 max-width: 400px; 530 max-width: 400px;
508 531
509 .people { 532 .people {
510 width: 100%; 533 width: 100%;
511 background: #fbfcfd; 534 background: #fbfcfd;
512 border-radius: 2px; 535 border-radius: 2px;
513 border: 1px solid #dcdfe6; 536 border: 1px solid #dcdfe6;
514 padding: 0 14px; 537 padding: 0 14px;
515 538
516 .prople_item { 539 .prople_item {
517 display: flex; 540 display: flex;
518 justify-content: space-between; 541 justify-content: space-between;
...@@ -521,30 +544,30 @@ div { ...@@ -521,30 +544,30 @@ div {
521 border-bottom: 1px solid #dcdfe6; 544 border-bottom: 1px solid #dcdfe6;
522 width: 100%; 545 width: 100%;
523 position: relative; 546 position: relative;
524 547
525 &:last-child { 548 &:last-child {
526 border: none; 549 border: none;
527 } 550 }
528 551
529 .name { 552 .name {
530 font-size: 16px; 553 font-size: 16px;
531 //color: #929aa0; 554 //color: #929aa0;
532 margin-bottom: 20px; 555 margin-bottom: 20px;
533 556
534 .tag_t { 557 .tag_t {
535 position: absolute; 558 position: absolute;
536 right: 30px; 559 right: 30px;
537 padding: 8px; 560 padding: 8px;
538 } 561 }
539 } 562 }
540 563
541 .idcard { 564 .idcard {
542 font-size: 10px; 565 font-size: 10px;
543 color: #929aa0; 566 color: #929aa0;
544 } 567 }
545 } 568 }
546 } 569 }
547 570
548 .btn { 571 .btn {
549 width: 90px; 572 width: 90px;
550 height: 40px; 573 height: 40px;
...@@ -563,30 +586,30 @@ div { ...@@ -563,30 +586,30 @@ div {
563 } 586 }
564 } 587 }
565 } 588 }
566 589
567 .right { 590 .right {
568 .tit_box { 591 .tit_box {
569 display: flex; 592 display: flex;
570 align-items: center; 593 align-items: center;
571 gap: 10px; 594 gap: 10px;
572 margin-bottom: 20px; 595 margin-bottom: 20px;
573 596
574 .txt { 597 .txt {
575 font-weight: bold; 598 font-weight: bold;
576 font-size: 16px; 599 font-size: 16px;
577 color: #493ceb; 600 color: #493ceb;
578 } 601 }
579 } 602 }
580 603
581 .detail { 604 .detail {
582 padding: 15px 26px; 605 padding: 15px 26px;
583 border-radius: 5px; 606 border-radius: 5px;
584 border: 1px solid #dcdfe6; 607 border: 1px solid #dcdfe6;
585 608
586 .detail_top { 609 .detail_top {
587 padding-bottom: 13px; 610 padding-bottom: 13px;
588 border-bottom: 1px solid #dcdfe6; 611 border-bottom: 1px solid #dcdfe6;
589 612
590 .time { 613 .time {
591 font-weight: 500; 614 font-weight: 500;
592 font-size: 20px; 615 font-size: 20px;
...@@ -594,13 +617,13 @@ div { ...@@ -594,13 +617,13 @@ div {
594 line-height: 25px; 617 line-height: 25px;
595 margin-bottom: 8px; 618 margin-bottom: 8px;
596 } 619 }
597 620
598 .ticket { 621 .ticket {
599 font-size: 16px; 622 font-size: 16px;
600 color: #2d373f; 623 color: #2d373f;
601 } 624 }
602 } 625 }
603 626
604 .detail_center { 627 .detail_center {
605 margin-top: 14px; 628 margin-top: 14px;
606 display: flex; 629 display: flex;
...@@ -608,26 +631,26 @@ div { ...@@ -608,26 +631,26 @@ div {
608 padding-bottom: 13px; 631 padding-bottom: 13px;
609 border-bottom: 1px solid #dcdfe6; 632 border-bottom: 1px solid #dcdfe6;
610 gap: 8px; 633 gap: 8px;
611 634
612 .ticket { 635 .ticket {
613 font-size: 16px; 636 font-size: 16px;
614 color: #2d373f; 637 color: #2d373f;
615 } 638 }
616 } 639 }
617 640
618 .detail_b { 641 .detail_b {
619 display: flex; 642 display: flex;
620 justify-content: space-between; 643 justify-content: space-between;
621 align-items: center; 644 align-items: center;
622 margin-top: 16px; 645 margin-top: 16px;
623 646
624 .sum_txt { 647 .sum_txt {
625 font-weight: 600; 648 font-weight: 600;
626 font-size: 18px; 649 font-size: 18px;
627 color: #2d373f; 650 color: #2d373f;
628 line-height: 25px; 651 line-height: 25px;
629 } 652 }
630 653
631 .price_num { 654 .price_num {
632 font-weight: 600; 655 font-weight: 600;
633 font-size: 36px; 656 font-size: 36px;
...@@ -637,7 +660,7 @@ div { ...@@ -637,7 +660,7 @@ div {
637 } 660 }
638 } 661 }
639 } 662 }
640 663
641 .footer { 664 .footer {
642 display: flex; 665 display: flex;
643 justify-content: space-between; 666 justify-content: space-between;
...@@ -647,20 +670,20 @@ div { ...@@ -647,20 +670,20 @@ div {
647 box-shadow: 0px 0px 46px 0px rgba(1, 16, 64, 0.08); 670 box-shadow: 0px 0px 46px 0px rgba(1, 16, 64, 0.08);
648 margin-top: 9px; 671 margin-top: 9px;
649 padding: 0 30px; 672 padding: 0 30px;
650 673
651 .label { 674 .label {
652 font-size: 16px; 675 font-size: 16px;
653 color: #7b7f83; 676 color: #7b7f83;
654 line-height: 22px; 677 line-height: 22px;
655 } 678 }
656 679
657 .value { 680 .value {
658 font-size: 22px; 681 font-size: 22px;
659 color: #ff8124; 682 color: #ff8124;
660 line-height: 30px; 683 line-height: 30px;
661 font-weight: 600; 684 font-weight: 600;
662 } 685 }
663 686
664 .pay { 687 .pay {
665 width: 200px; 688 width: 200px;
666 height: 40px; 689 height: 40px;
...@@ -677,6 +700,16 @@ div { ...@@ -677,6 +700,16 @@ div {
677 } 700 }
678 } 701 }
679 702
703 .father {
704 position: relative;
705 }
706
707 .son {
708 position: absolute;
709 left: 10px;
710 cursor: pointer
711 }
712
680 @media screen and (max-width: 768px) { 713 @media screen and (max-width: 768px) {
681 .container { 714 .container {
682 width: 100%; 715 width: 100%;
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
2 <div> 2 <div>
3 <!-- top --> 3 <!-- top -->
4 <div class="container top"> 4 <div class="container top">
5 <img :src="fillImgUrl(matchForm.ticketImg)" class="cover_img"> 5 <img :src="fillImgUrl(matchForm.ticketImg)" alt="" class="cover_img">
6 <div class="info"> 6 <div class="info">
7 <div class="title">{{ matchForm.name }}</div> 7 <div class="title">{{ matchForm.name }}</div>
8 <div class="time"> 8 <div class="time">
...@@ -37,11 +37,11 @@ ...@@ -37,11 +37,11 @@
37 <div class="address"> 37 <div class="address">
38 {{ triggerLanguage(language, "地址", "Location") }}{{ matchForm.address }} 38 {{ triggerLanguage(language, "地址", "Location") }}{{ matchForm.address }}
39 </div> 39 </div>
40 40
41 41
42 <div v-if="timeData>0"> 42 <div v-if="timeData>0">
43 <!-- 倒计时--> 43 <!-- 倒计时-->
44 44
45 <p class="countDownTitle"> 45 <p class="countDownTitle">
46 <span v-if="language==0">售票倒计时</span> 46 <span v-if="language==0">售票倒计时</span>
47 <span v-else>TICKET COUNTDOWN</span> 47 <span v-else>TICKET COUNTDOWN</span>
...@@ -60,7 +60,7 @@ ...@@ -60,7 +60,7 @@
60 </van-count-down> 60 </van-count-down>
61 </div> 61 </div>
62 <div v-else> 62 <div v-else>
63 63
64 <!-- 票档 --> 64 <!-- 票档 -->
65 <div class="select_item_box"> 65 <div class="select_item_box">
66 <div class="label"> 66 <div class="label">
...@@ -83,7 +83,7 @@ ...@@ -83,7 +83,7 @@
83 </div> 83 </div>
84 </div> 84 </div>
85 </div> 85 </div>
86 86
87 <!-- 场馆 --> 87 <!-- 场馆 -->
88 <div class="select_item_box"> 88 <div class="select_item_box">
89 <div class="label"> 89 <div class="label">
...@@ -93,7 +93,7 @@ ...@@ -93,7 +93,7 @@
93 <span 93 <span
94 v-if="currVenue?.images" 94 v-if="currVenue?.images"
95 style="color: #493ceb;cursor:pointer;font-weight:600;font-size: 14px" 95 style="color: #493ceb;cursor:pointer;font-weight:600;font-size: 14px"
96 @click="showUrl=currVenue.images; show=true" 96 @click="handleImage"
97 > <span style="color: red;font-size: 18px">*</span> 97 > <span style="color: red;font-size: 18px">*</span>
98 {{ 98 {{
99 language == 0 ? '点击查看场馆布局' : 'View Venue Layout' 99 language == 0 ? '点击查看场馆布局' : 'View Venue Layout'
...@@ -116,7 +116,7 @@ ...@@ -116,7 +116,7 @@
116 </div> 116 </div>
117 </div> 117 </div>
118 </div> 118 </div>
119 119
120 <!-- 场次 --> 120 <!-- 场次 -->
121 <div class="select_item_box"> 121 <div class="select_item_box">
122 <div class="label"> 122 <div class="label">
...@@ -140,11 +140,11 @@ ...@@ -140,11 +140,11 @@
140 <span v-else>{{ 140 <span v-else>{{
141 language == 0 ? '夜间场' : 'Night' 141 language == 0 ? '夜间场' : 'Night'
142 }}</span> 142 }}</span>
143 <!-- {{ key=='1000'?'日间场':'夜间场' }}--> 143 <!-- {{ key=='1000'?'日间场':'夜间场' }}-->
144 </div> 144 </div>
145 </div> 145 </div>
146 </div> 146 </div>
147 147
148 <!-- 票型 --> 148 <!-- 票型 -->
149 <div class="select_item_box"> 149 <div class="select_item_box">
150 <div class="label"> 150 <div class="label">
...@@ -177,8 +177,8 @@ ...@@ -177,8 +177,8 @@
177 </div> 177 </div>
178 </div> 178 </div>
179 </div> 179 </div>
180 180
181 181
182 <!-- 价格 --> 182 <!-- 价格 -->
183 <div class="select_item_box"> 183 <div class="select_item_box">
184 <div class="label"> 184 <div class="label">
...@@ -205,7 +205,7 @@ ...@@ -205,7 +205,7 @@
205 {{ matchForm.ticketRemark }} 205 {{ matchForm.ticketRemark }}
206 </div> 206 </div>
207 </div> 207 </div>
208 208
209 <div 209 <div
210 v-if="endTime<=0" class="btn" style="margin-left: 40px;opacity: 0.5;cursor: not-allowed;margin-top: 10px" 210 v-if="endTime<=0" class="btn" style="margin-left: 40px;opacity: 0.5;cursor: not-allowed;margin-top: 10px"
211 @click="toSelectClosed" 211 @click="toSelectClosed"
...@@ -219,20 +219,23 @@ ...@@ -219,20 +219,23 @@
219 triggerLanguage(language, "立即购票", "Buy tickets now") 219 triggerLanguage(language, "立即购票", "Buy tickets now")
220 }} 220 }}
221 </div> 221 </div>
222 222
223 </div> 223 </div>
224 224
225 </div> 225 </div>
226 </div> 226 </div>
227 227
228 <div class="container bottom"> 228 <div class="container bottom">
229 <div style="display: flex"> 229 <div style="display: flex">
230 <div :class="{'bg':active==1}" class="buBg" @click="active=1">{{ language==0?'购票说明':'Notice' }}</div> 230 <div :class="{'bg':active==1}" class="buBg" @click="active=1">{{ language == 0 ? '购票说明' : 'Notice' }}</div>
231 <div :class="{'bg' :active==2}" class="buBg" @click="active=2">{{ language==0?'购票须知':'Instructions' }}</div> 231 <div :class="{'bg' :active==2}" class="buBg" @click="active=2">{{
232 language == 0 ? '购票须知' : 'Instructions'
233 }}
234 </div>
232 </div> 235 </div>
233 <div v-show="active==1" class="rich_content" v-html="matchForm.ticketDes" /> 236 <div v-show="active==1" class="rich_content" v-html="matchForm.ticketDes" />
234 <div v-show="active==2" class="rich_content" v-html="matchForm.ticketNotice" /> 237 <div v-show="active==2" class="rich_content" v-html="matchForm.ticketNotice" />
235 238
236 <el-dialog v-model="show" title="" width="1000px"> 239 <el-dialog v-model="show" title="" width="1000px">
237 <div> 240 <div>
238 <img :src="fillImgUrl(showUrl)" alt="" style="width: 100%"> 241 <img :src="fillImgUrl(showUrl)" alt="" style="width: 100%">
...@@ -250,7 +253,8 @@ import { ...@@ -250,7 +253,8 @@ import {
250 getTicketListApi, 253 getTicketListApi,
251 checkNonPayment, 254 checkNonPayment,
252 getStadiumList, 255 getStadiumList,
253 getActivityTypeVoListByLatsId 256 getActivityTypeVoListByLatsId,
257 getBaseInfoByActiveId
254 } from '@/apiPc/booking' 258 } from '@/apiPc/booking'
255 259
256 import { dayjs } from 'element-plus' 260 import { dayjs } from 'element-plus'
...@@ -290,6 +294,7 @@ const venueList = ref([]) ...@@ -290,6 +294,7 @@ const venueList = ref([])
290 const tickList = ref([]) 294 const tickList = ref([])
291 const currVenue = ref(null) 295 const currVenue = ref(null)
292 const currTick = ref(null) 296 const currTick = ref(null)
297 const matchData = ref({})
293 298
294 watch(show, (val) => { 299 watch(show, (val) => {
295 if (!val) { 300 if (!val) {
...@@ -339,7 +344,7 @@ async function getTicketListType() { ...@@ -339,7 +344,7 @@ async function getTicketListType() {
339 const res = await getActivityTypeVoListByLatsId({ latsId: selectForm.value.latsId }) 344 const res = await getActivityTypeVoListByLatsId({ latsId: selectForm.value.latsId })
340 tickList.value = res.data 345 tickList.value = res.data
341 selectForm.value.sessionType = Object.keys(res.data)[0] 346 selectForm.value.sessionType = Object.keys(res.data)[0]
342 347
343 currTick.value = tickList.value[selectForm.value.sessionType][0] 348 currTick.value = tickList.value[selectForm.value.sessionType][0]
344 selectForm.value.latstId = currTick.value?.id 349 selectForm.value.latstId = currTick.value?.id
345 selectForm.value.price = currTick.value?.price 350 selectForm.value.price = currTick.value?.price
...@@ -354,7 +359,7 @@ function select(v) { ...@@ -354,7 +359,7 @@ function select(v) {
354 selectForm.value.id = null 359 selectForm.value.id = null
355 selectForm.value.price = '--' 360 selectForm.value.price = '--'
356 selectForm.value.priceEn = '--' 361 selectForm.value.priceEn = '--'
357 362
358 getVenueList() 363 getVenueList()
359 } 364 }
360 365
...@@ -366,13 +371,13 @@ function selectVenue(v) { ...@@ -366,13 +371,13 @@ function selectVenue(v) {
366 selectForm.value.id = null 371 selectForm.value.id = null
367 selectForm.value.price = '--' 372 selectForm.value.price = '--'
368 selectForm.value.priceEn = '--' 373 selectForm.value.priceEn = '--'
369 374
370 getTicketListType() 375 getTicketListType()
371 } 376 }
372 377
373 function selectSessionType(key) { 378 function selectSessionType(key) {
374 selectForm.value.sessionType = key 379 selectForm.value.sessionType = key
375 380
376 currTick.value = tickList.value[selectForm.value.sessionType][0] 381 currTick.value = tickList.value[selectForm.value.sessionType][0]
377 selectForm.value.latstId = currTick.value?.id 382 selectForm.value.latstId = currTick.value?.id
378 selectForm.value.price = currTick.value?.price 383 selectForm.value.price = currTick.value?.price
...@@ -418,6 +423,20 @@ function toSelectClosed() { ...@@ -418,6 +423,20 @@ function toSelectClosed() {
418 type: 'warning' 423 type: 'warning'
419 }) 424 })
420 } 425 }
426
427 async function getmatchData() {
428 const res = await getBaseInfoByActiveId(route.params.activeId)
429 matchData.value = res.data
430 console.log(res)
431 }
432
433 function handleImage() {
434 // ticketImg
435 showUrl.value = matchData.value.ticketLayout
436 show.value = true
437 }
438
439 getmatchData()
421 </script> 440 </script>
422 441
423 <style lang="scss" scoped> 442 <style lang="scss" scoped>
...@@ -453,18 +472,17 @@ function toSelectClosed() { ...@@ -453,18 +472,17 @@ function toSelectClosed() {
453 display: flex; 472 display: flex;
454 padding: 19px; 473 padding: 19px;
455 margin-top: 26px; 474 margin-top: 26px;
456 475
457 .cover_img { 476 .cover_img {
458 width: 390px; 477 width: 500px;
459 height: 517px;
460 object-fit: fill; 478 object-fit: fill;
461 margin-right: 36px; 479 margin-right: 36px;
462 } 480 }
463 481
464 .info { 482 .info {
465 padding-top: 12px; 483 padding-top: 12px;
466 width: 100%; 484 width: 100%;
467 485
468 .title { 486 .title {
469 font-weight: bold; 487 font-weight: bold;
470 font-size: 28px; 488 font-size: 28px;
...@@ -472,7 +490,7 @@ function toSelectClosed() { ...@@ -472,7 +490,7 @@ function toSelectClosed() {
472 line-height: 1.6; 490 line-height: 1.6;
473 margin-bottom: 15px; 491 margin-bottom: 15px;
474 } 492 }
475 493
476 .time { 494 .time {
477 font-weight: 600; 495 font-weight: 600;
478 font-size: 16px; 496 font-size: 16px;
...@@ -480,7 +498,7 @@ function toSelectClosed() { ...@@ -480,7 +498,7 @@ function toSelectClosed() {
480 line-height: 24px; 498 line-height: 24px;
481 margin-bottom: 16px; 499 margin-bottom: 16px;
482 } 500 }
483 501
484 .address { 502 .address {
485 font-weight: 600; 503 font-weight: 600;
486 font-size: 16px; 504 font-size: 16px;
...@@ -488,15 +506,15 @@ function toSelectClosed() { ...@@ -488,15 +506,15 @@ function toSelectClosed() {
488 line-height: 24px; 506 line-height: 24px;
489 margin-bottom: 15px; 507 margin-bottom: 15px;
490 } 508 }
491 509
492 .select_item_box { 510 .select_item_box {
493 display: flex; 511 display: flex;
494 margin-bottom: 10px; 512 margin-bottom: 10px;
495 513
496 &:last-child { 514 &:last-child {
497 margin-bottom: 0; 515 margin-bottom: 0;
498 } 516 }
499 517
500 .label { 518 .label {
501 font-weight: 600; 519 font-weight: 600;
502 font-size: 16px; 520 font-size: 16px;
...@@ -505,18 +523,18 @@ function toSelectClosed() { ...@@ -505,18 +523,18 @@ function toSelectClosed() {
505 margin-right: 12px; 523 margin-right: 12px;
506 flex-shrink: 0; 524 flex-shrink: 0;
507 } 525 }
508 526
509 .forbid { 527 .forbid {
510 opacity: 0.5 !important; 528 opacity: 0.5 !important;
511 cursor: not-allowed !important; 529 cursor: not-allowed !important;
512 } 530 }
513 531
514 .select_item { 532 .select_item {
515 display: flex; 533 display: flex;
516 flex-wrap: wrap; 534 flex-wrap: wrap;
517 gap: 10px; 535 gap: 10px;
518 user-select: none; 536 user-select: none;
519 537
520 .tag_t { 538 .tag_t {
521 padding: 1px 15px; 539 padding: 1px 15px;
522 font-weight: 400; 540 font-weight: 400;
...@@ -526,7 +544,7 @@ function toSelectClosed() { ...@@ -526,7 +544,7 @@ function toSelectClosed() {
526 border: 1px solid #453dea; 544 border: 1px solid #453dea;
527 margin-left: 5px; 545 margin-left: 5px;
528 } 546 }
529 547
530 .tag { 548 .tag {
531 display: flex; 549 display: flex;
532 padding: 12px 18px; 550 padding: 12px 18px;
...@@ -537,7 +555,7 @@ function toSelectClosed() { ...@@ -537,7 +555,7 @@ function toSelectClosed() {
537 color: #4a4a4a; 555 color: #4a4a4a;
538 cursor: pointer; 556 cursor: pointer;
539 } 557 }
540 558
541 .tagActive { 559 .tagActive {
542 display: flex; 560 display: flex;
543 padding: 12px 18px; 561 padding: 12px 18px;
...@@ -548,14 +566,14 @@ function toSelectClosed() { ...@@ -548,14 +566,14 @@ function toSelectClosed() {
548 color: #493ceb; 566 color: #493ceb;
549 cursor: pointer; 567 cursor: pointer;
550 } 568 }
551 569
552 .tao { 570 .tao {
553 border: 1px solid #493ceb; 571 border: 1px solid #493ceb;
554 font-size: 14px; 572 font-size: 14px;
555 color: #493ceb; 573 color: #493ceb;
556 margin-left: 10px; 574 margin-left: 10px;
557 } 575 }
558 576
559 .tagDisabled { 577 .tagDisabled {
560 padding: 12px 18px; 578 padding: 12px 18px;
561 background: #878787; 579 background: #878787;
...@@ -567,7 +585,7 @@ function toSelectClosed() { ...@@ -567,7 +585,7 @@ function toSelectClosed() {
567 } 585 }
568 } 586 }
569 } 587 }
570 588
571 .btn { 589 .btn {
572 width: 175px; 590 width: 175px;
573 height: 40px; 591 height: 40px;
...@@ -587,7 +605,7 @@ function toSelectClosed() { ...@@ -587,7 +605,7 @@ function toSelectClosed() {
587 padding: 50px; 605 padding: 50px;
588 margin-top: 30px; 606 margin-top: 30px;
589 margin-bottom: 30px; 607 margin-bottom: 30px;
590 608
591 .title { 609 .title {
592 padding: 20px 30px; 610 padding: 20px 30px;
593 background: linear-gradient(270deg, #493ceb 0%, #8623fc 100%); 611 background: linear-gradient(270deg, #493ceb 0%, #8623fc 100%);
...@@ -597,15 +615,15 @@ function toSelectClosed() { ...@@ -597,15 +615,15 @@ function toSelectClosed() {
597 line-height: 30px; 615 line-height: 30px;
598 margin-bottom: 30px; 616 margin-bottom: 30px;
599 } 617 }
600 618
601 .rich_content { 619 .rich_content {
602 margin-top: 30px; 620 margin-top: 30px;
603 621
604 :deep(img) { 622 :deep(img) {
605 width: 100% !important; 623 width: 100% !important;
606 height: auto !important; 624 height: auto !important;
607 } 625 }
608 626
609 } 627 }
610 } 628 }
611 629
...@@ -623,44 +641,44 @@ function toSelectClosed() { ...@@ -623,44 +641,44 @@ function toSelectClosed() {
623 height: 160px; 641 height: 160px;
624 margin-right: 15px; 642 margin-right: 15px;
625 } 643 }
626 644
627 .info { 645 .info {
628 padding: 0; 646 padding: 0;
629 647
630 .title { 648 .title {
631 font-size: 14px; 649 font-size: 14px;
632 margin: 0; 650 margin: 0;
633 } 651 }
634 652
635 .time, .address, .label, .tip { 653 .time, .address, .label, .tip {
636 font-size: 12px; 654 font-size: 12px;
637 } 655 }
638 656
639 .title, .time, .address, .tip, .select_item_box { 657 .title, .time, .address, .tip, .select_item_box {
640 margin-bottom: 3px; 658 margin-bottom: 3px;
641 } 659 }
642 660
643 .select_item_box { 661 .select_item_box {
644 .label { 662 .label {
645 font-size: 12px; 663 font-size: 12px;
646 } 664 }
647 665
648 .select_item .tag { 666 .select_item .tag {
649 padding: 2px 10px; 667 padding: 2px 10px;
650 font-size: 12px; 668 font-size: 12px;
651 } 669 }
652 670
653 .select_item .tagActive { 671 .select_item .tagActive {
654 padding: 2px 10px; 672 padding: 2px 10px;
655 font-size: 12px; 673 font-size: 12px;
656 } 674 }
657 675
658 .select_item .tagDisabled { 676 .select_item .tagDisabled {
659 padding: 2px 10px; 677 padding: 2px 10px;
660 font-size: 12px; 678 font-size: 12px;
661 } 679 }
662 } 680 }
663 681
664 .btn { 682 .btn {
665 display: inline-block; 683 display: inline-block;
666 margin: 10px 0 0; 684 margin: 10px 0 0;
...@@ -678,8 +696,8 @@ function toSelectClosed() { ...@@ -678,8 +696,8 @@ function toSelectClosed() {
678 .bottom { 696 .bottom {
679 padding: 0 697 padding: 0
680 } 698 }
681 699
682 700
683 } 701 }
684 702
685 .countDownTitle { 703 .countDownTitle {
......
...@@ -81,8 +81,8 @@ export default defineConfig(({ mode, command }) => { ...@@ -81,8 +81,8 @@ export default defineConfig(({ mode, command }) => {
81 rewrite: (p) => p.replace(/^\/dev-api\/ztx-webSite/, '') 81 rewrite: (p) => p.replace(/^\/dev-api\/ztx-webSite/, '')
82 }, 82 },
83 '/dev-api': { 83 '/dev-api': {
84 target: 'http://192.168.1.118:8081/', 84 // target: 'http://192.168.1.118:8081/',
85 // target: 'http://192.168.1.130:8081', 85 target: 'http://192.168.1.118:8081',
86 // target: 'https://jijin.wtwuxicenter.com/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,
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!