87fb7ca7 by 杨炀

no message

1 parent f48a867f
...@@ -34,3 +34,17 @@ export function newsSubmitOrderHotel(data) { ...@@ -34,3 +34,17 @@ export function newsSubmitOrderHotel(data) {
34 data: data 34 data: data
35 }) 35 })
36 } 36 }
37 export function getRoomBilldetailbyId(params) {
38 return request({
39 url: `/ota/orderRoom/getRoomOrderInfoByOrderId`,
40 method: 'get',
41 params: params
42 })
43 }
44 export function getActivityCarList(params) {
45 return request({
46 url: `/ota/activityVehicle/wxList`,
47 method: 'get',
48 params: params
49 })
50 }
......
...@@ -362,6 +362,12 @@ export const constantRoutes = [ ...@@ -362,6 +362,12 @@ export const constantRoutes = [
362 meta: { title: 'Hotel Reservation' } 362 meta: { title: 'Hotel Reservation' }
363 }, 363 },
364 { 364 {
365 path: 'car/:cptId/:id',
366 component: () => import('@/viewsPc/booking/carOrder'),
367 name: 'carOrder',
368 meta: { title: 'Car Reservation' }
369 },
370 {
365 path: 'hotel/:cptId/:hotelId/:roomId', 371 path: 'hotel/:cptId/:hotelId/:roomId',
366 component: () => import('@/viewsPc/booking/hotelOrder'), 372 component: () => import('@/viewsPc/booking/hotelOrder'),
367 name: 'hotelOrder', 373 name: 'hotelOrder',
......
1 <template> 1 <template>
2 <div> 2 <div>
3 <div class="banner"> 3 <div class="banner">
4 <img src="@/assets/booking/jd_text.png"> 4 <img src="@/assets/booking/cl_text.png">
5 </div> 5 </div>
6 <div class="box"> 6 <div class="box">
7 <div class="searchBar"> 7 <div class="searchBar">
...@@ -13,32 +13,64 @@ ...@@ -13,32 +13,64 @@
13 </div> 13 </div>
14 14
15 <div class="box" v-loading="loading"> 15 <div class="box" v-loading="loading">
16 <el-card v-for="(h,index) in list" class="mb20" @click="goDetail(h)"> 16 <el-collapse v-model="activeName" accordion style="--el-collapse-header-height:'auto'">
17 <!-- che列表--> 17 <el-collapse-item :name="index" v-for="(h,index) in list" class="hotel">
18 <el-row class="hotel" align="middle" :gutter="20"> 18 <template #title>
19 <el-col :span="6"> 19 <el-row align="middle" :gutter="20" class="w100">
20 <img class="w100" :src="fillImgUrl(h.photos?.split(',')[0])"/> 20 <el-col :span="4">
21 <div class="index">路线{{index+1}}
22 <img src="@/assets/booking/arrow.png"/>
23 </div>
24 </el-col>
25 <el-col :span="7">
26 <p class="esp">{{h.checkIn}}</p>
27 </el-col>
28 <el-col :span="4" class="text-center">
29 <img class="mauto w40px" src="@/assets/booking/wf.png"/>
21 </el-col> 30 </el-col>
22 <el-col :span="10"> 31 <el-col :span="7">
23 <h3 class="esp">{{h.name}}</h3> 32 <p class="esp ">{{h.checkOut}}</p>
24 <div class="starBox"> 33 </el-col>
25 <img v-for="i in Number(h.starLevel||0)" src="@/assets/booking/star.png"> 34 </el-row>
35 </template>
36
37 <div class="plr20">
38 <div v-for="(r,index) in h.carVoList" :key="index" class="room">
39 <el-row :gutter="30" align="middle">
40 <el-col :span="4">
41 <div class="roomImg">
42 <img :src="fillImgUrl(r.photos?.split(',')[0])">
26 </div> 43 </div>
44 </el-col>
45 <el-col :span="14">
46 <h3 class="name">{{ r.carType }}
27 <div class="tagbox"> 47 <div class="tagbox">
28 <span v-for="(t,index) in h.label?.split(',')" v-show="index<4">{{t}}</span> 48 <span class="tag">{{r.carColor}}</span>
29 <a v-show="h.label?.split(',').length>4">{{ language==0?'更多':'MORE' }} ></a> 49 <span class="tag" v-show="r.checkOut==1">可送车</span>
50 <span class="tag" v-show="r.checkIn==1">可接车</span>
30 </div> 51 </div>
31 <p class="esp addr"> 52 </h3>
32 <el-icon size="16" style="position: relative;top: 2px" color="#929AA0"><LocationFilled /></el-icon> 53 <el-row :gutter="10">
33 {{h.address}} 54 <el-col :span="8">{{ language==0?'座位数':'Seats' }}: {{r.carSeat}}</el-col>
34 </p> 55 <el-col :span="8">{{ language==0?'运营时间':'Servers Time' }}: {{r.operStart}} ~ {{r.operEnd}}</el-col>
56 </el-row>
57 </el-col>
58 <el-col :span="3">
59 <div class="price">{{ language==0?'¥':'€' }}<span>{{language==0?r.inPrice:r.inPriceEn}}</span></div>
35 </el-col> 60 </el-col>
36 <el-col :span="8" class="text-right"> 61 <el-col :span="3">
37 <div class="price">¥<span>{{ h.price }}</span><i v-if="language==0"></i></div> 62 <el-button class="btn-lineG w100" round type="primary" @click="goOrder(h,r)">{{ language==0?'我要预定':'Select' }}</el-button>
38 <el-button class="btn-lineG w200px" round type="primary" size="large">{{ language==0?'立即预约':'Select' }}</el-button>
39 </el-col> 63 </el-col>
40 </el-row> 64 </el-row>
41 </el-card> 65 </div>
66
67 <el-empty v-if="list.length == 0" :image="`/img/order_no.png`" :image-size="228" description=""/>
68 </div>
69
70 </el-collapse-item>
71 </el-collapse>
72
73
42 <el-empty v-show="!loading&&list.length==0" :image="`/img/order_no.png`" :image-size="228" description="" /> 74 <el-empty v-show="!loading&&list.length==0" :image="`/img/order_no.png`" :image-size="228" description="" />
43 <div style="height: 50px"></div> 75 <div style="height: 50px"></div>
44 </div> 76 </div>
...@@ -51,12 +83,14 @@ import {onMounted} from "@vue/runtime-core" ...@@ -51,12 +83,14 @@ import {onMounted} from "@vue/runtime-core"
51 import * as booking from "@/apiPc/booking" 83 import * as booking from "@/apiPc/booking"
52 import {useRouter,useRoute} from "vue-router"; 84 import {useRouter,useRoute} from "vue-router";
53 import {useStorage} from "@vueuse/core/index"; 85 import {useStorage} from "@vueuse/core/index";
86 import {getActivityCarList} from "@/apiPc/booking";
54 const router = useRouter() 87 const router = useRouter()
55 const route = useRoute() 88 const route = useRoute()
56 const language= useStorage('language',0) 89 const language= useStorage('language',0)
57 const query = ref({ 90 const query = ref({
58 name:'' 91 name:''
59 }) 92 })
93 const activeName = ref(0)
60 const cptId = ref('') 94 const cptId = ref('')
61 const list = ref([]) 95 const list = ref([])
62 const loading = ref(false) 96 const loading = ref(false)
...@@ -67,40 +101,50 @@ onMounted(()=>{ ...@@ -67,40 +101,50 @@ onMounted(()=>{
67 101
68 function getList() { 102 function getList() {
69 loading.value = true 103 loading.value = true
70 booking.getHotelList(query.value).then(res=>{ 104 booking.getActivityCarList(query.value).then(res=>{
71 list.value = res.rows 105 list.value = res.rows
72 loading.value = false 106 loading.value = false
73 }).catch(e=>{ 107 }).catch(e=>{
74 loading.value = false 108 loading.value = false
75 }) 109 })
76 } 110 }
77 function goDetail(item) { 111 function goOrder(item,car) {
78 router.push({ 112 router.push({
79 name:'hotelDetail', 113 name:'carOrder',
80 params:{ 114 params:{
81 hotelId:item.hotelId, 115 id:item.id,
82 }, 116 },
83 query:{ 117 query:{
84 id:item.id 118 item:encodeURIComponent(JSON.stringify(item)),
119 car:encodeURIComponent(JSON.stringify(car)),
85 } 120 }
86
87 }) 121 })
88 } 122 }
89 </script> 123 </script>
90 124
91 <style scoped lang="scss"> 125 <style scoped lang="scss">
92 .hotel{ 126 .w40px{width: 40px}
93 h3{margin: 0 0 20px;} 127 .plr20{padding: 0 20px}
94 img.w100{object-fit: cover;aspect-ratio: 16/9} 128 .hotel{margin-bottom: 20px;cursor: pointer;
95 .addr{font-size: 16px;color: #929AA0;font-weight: 400;} 129 .index{display: flex;font-weight: 500;padding-left: 20px;
96 .price{margin: 0 0 25px; 130 font-size: 18px;align-items: center;
97 color: #FF8124;font-size: 18px; 131 img{margin-left: 15px;}
98 span{font-size: 24px;margin: 0 8px;font-family: 'DINAlternate-Bold';font-weight: 600;}
99 i{font-style: normal;color: #929AA0;}
100 } 132 }
133 p{font-weight: 500;
134 font-size: 24px;
135 color: #000000;}
136 &:hover .el-card{box-shadow: 0 0 10px #aaa;}
101 } 137 }
138 .hotel:nth-child(7n) .index{color: #009E96;}
139 .hotel:nth-child(7n+1) .index{color: #FF8124;}
140 .hotel:nth-child(7n+2) .index{color: #E4007F;}
141 .hotel:nth-child(7n+3) .index{color: #0068B7;}
142 .hotel:nth-child(7n+4) .index{color: #32B16C;}
143 .hotel:nth-child(7n+5) .index{color: #920783;}
144 .hotel:nth-child(7n+6) .index{color: #00B7EE;}
145
102 .banner{height: 140px;background-size: cover;text-align: center; 146 .banner{height: 140px;background-size: cover;text-align: center;
103 background: url("@/assets/booking/jd_bg.png") center;display: flex;align-items: center; 147 background: url("@/assets/booking/cl_bg.png") center;display: flex;align-items: center;
104 justify-content: center; 148 justify-content: center;
105 img{display: block;margin:-30px auto 0;width: auto;} 149 img{display: block;margin:-30px auto 0;width: auto;}
106 } 150 }
...@@ -121,4 +165,21 @@ function goDetail(item) { ...@@ -121,4 +165,21 @@ function goDetail(item) {
121 span:nth-child(4n+2){background: rgba(0, 160, 233, 0.2);color: rgba(0, 160, 233, 1);} 165 span:nth-child(4n+2){background: rgba(0, 160, 233, 0.2);color: rgba(0, 160, 233, 1);}
122 span:nth-child(4n+3){background: rgba(247, 64, 166, 0.2);color:rgba(247, 64, 166, 1);} 166 span:nth-child(4n+3){background: rgba(247, 64, 166, 0.2);color:rgba(247, 64, 166, 1);}
123 } 167 }
168 .room {
169 background: #FAFBFD;margin: 20px 0 0;padding: 20px;
170 border: 1px solid #E5E5E5;
171 .name{font-size: 20px;margin: 0 0 10px;}
172 .roomImg{aspect-ratio: 16/9;border-radius: 10px;overflow: hidden;
173 img{width: 100%;object-fit: cover;object-position: center;height: 100%;}
174 }
175 .price{color: #FF8124;font-size: 24px;
176 span{font-size: 36px;font-family: "DIN Alternate"}
177 }
178 .bg-lineg{margin: auto;border-radius: 10px;text-align: center;padding: 7px 2px 2px;
179 font-size: 24px;width:66px;cursor: pointer;
180 div{background: #fff;font-size: 13px;border-radius: 20px;padding: 0 10px;
181 color: #453DEA;font-weight: 500;}
182 }
183 }
184
124 </style> 185 </style>
......
1 <template>
2 <div>
3 <div class="box">
4 <el-card class="mt30">
5 <div class="flex">
6 <p class="esp">{{car.checkIn}}</p>
7 <img src="@/assets/booking/wf.png"/>
8 <p class="esp text-right">{{car.checkOut}}</p>
9 </div>
10 </el-card>
11 <el-card class="mt30 mb60">
12 <div class="lineHead">
13 <ul>
14 <li>{{ language == 0 ? '车型选择' : 'Available Cars' }}</li>
15 </ul>
16 </div>
17
18 <div>
19 <div v-for="(r,index) in list" :key="index" class="room">
20 <el-row :gutter="30" align="middle">
21 <el-col :span="4">
22 <div class="roomImg">
23 <img :src="fillImgUrl(r.photo?.split(',')[0])">
24 </div>
25 </el-col>
26 <el-col :span="14">
27 <h3 class="name">{{ r.roomType }}</h3>
28 <el-row :gutter="10">
29 <el-col :span="8">{{ r.area }}</el-col>
30 <el-col :span="8" v-show="r.windowFlag==1"> {{ language==0?'有窗':'With windows' }}</el-col>
31 <el-col :span="8" v-show="r.windowFlag==0"> {{ language==0?'无窗':'Windowless' }}</el-col>
32 <el-col :span="8" v-show="r.bathroomFlag==1"> {{ language==0?'热水洗浴':'Shower' }}</el-col>
33 <!-- <text v-show="r.bathroomFlag==0"> </text> -->
34 <el-col :span="8" v-show="r.addBedFlag==1"> {{ language==0?'允许加床':'Extra bed' }} </el-col>
35 <el-col :span="8" v-if="r.breakfastNum&&r.breakfastNum > '0'">
36 {{ r.breakfastNum }}{{ language==0?'份早餐':' breakfasts' }}
37 </el-col>
38 <el-col :span="8" v-else>{{ language==0?'无早餐':'No breakfast' }}</el-col>
39 </el-row>
40 </el-col>
41 <el-col :span="3">
42 <div class="price">{{ language==0?'¥':'€' }}<span>{{language==0?r.roomPrice:r.roomPriceEn}}</span></div>
43 </el-col>
44 <el-col :span="3">
45 <div class="bg-lineg" v-if="language==0" @click="goOrder(r)">
46
47 <div>{{ language==0?'在线付':'Online' }}</div>
48 </div>
49 <el-button v-else class="btn-lineG w100" round type="primary" @click="goOrder(r)">Select</el-button>
50 <div class="text-center text-primary mt10 fontsize14 pointer" v-if="language == 0">
51 剩余 {{(r.roomCount - (r.useCount||0)).toFixed()}}
52 </div>
53 <div class="text-center text-primary mt10 fontsize14" v-else>
54 {{(r.roomCount - (r.useCount||0)).toFixed()}} Remaining rooms
55 </div>
56 </el-col>
57 </el-row>
58 </div>
59
60 <el-empty v-if="list.length == 0" :image="`/img/order_no.png`" :image-size="228" description=""/>
61 </div>
62 </el-card>
63 </div>
64 </div>
65 </template>
66
67 <script setup>
68 import {useRouter} from "vue-router";
69 import {ref, reactive, onMounted} from "vue";
70 import {useRoute} from "vue-router";
71
72 import {useStorage} from "@vueuse/core/index";
73 import useUserStore from "@/store/modules/user";
74 const user = useUserStore().user
75 const language = useStorage('language', 0)
76 const router = useRouter()
77 const route = useRoute()
78 const form = ref({})
79 const car = ref({})
80 const query = ref({
81 id: route.query.id
82 })
83 const loading = ref(false)
84 const list = ref([])
85 onMounted(()=>{
86 car.value = JSON.parse(decodeURIComponent(route.query.detail))
87 list.value = car.value.carVoList
88 })
89
90
91 </script>
92
93 <style scoped>
94
95 </style>
...@@ -112,7 +112,8 @@ import {useRoute} from "vue-router"; ...@@ -112,7 +112,8 @@ import {useRoute} from "vue-router";
112 import {getHotelById, getHotelRooms} from "@/apiPc/booking" 112 import {getHotelById, getHotelRooms} from "@/apiPc/booking"
113 113
114 import {useStorage} from "@vueuse/core/index"; 114 import {useStorage} from "@vueuse/core/index";
115 115 import useUserStore from "@/store/modules/user";
116 const user = useUserStore().user
116 const language = useStorage('language', 0) 117 const language = useStorage('language', 0)
117 const router = useRouter() 118 const router = useRouter()
118 const route = useRoute() 119 const route = useRoute()
...@@ -185,6 +186,10 @@ function initMap() { ...@@ -185,6 +186,10 @@ function initMap() {
185 } 186 }
186 187
187 function goOrder(room) { 188 function goOrder(room) {
189 if(!user){
190 useUserStore().setReLogin()
191 return
192 }
188 router.push({ 193 router.push({
189 name:'hotelOrder', 194 name:'hotelOrder',
190 params:{ 195 params:{
......
...@@ -27,8 +27,8 @@ ...@@ -27,8 +27,8 @@
27 27
28 <div class="leftboderTT">{{ language == 0 ? '预约信息' : 'Reservation information' }}</div> 28 <div class="leftboderTT">{{ language == 0 ? '预约信息' : 'Reservation information' }}</div>
29 <div class="border-rr mt20 pd20"> 29 <div class="border-rr mt20 pd20">
30 <el-form :model="form" :label-width="language == 0 ?'100':'150'"> 30 <el-form :model="form" :label-width="language == 0 ?'100':'150'" :rules="rules" ref="formRef">
31 <el-form-item :label="language==0?'入住日期':'Check-in date'"> 31 <el-form-item :label="language==0?'入住日期':'Check-in date'" required>
32 <el-date-picker @change="getDaysBetween" 32 <el-date-picker @change="getDaysBetween"
33 v-model="rzRange" 33 v-model="rzRange"
34 type="daterange" 34 type="daterange"
...@@ -36,17 +36,17 @@ ...@@ -36,17 +36,17 @@
36 value-format="YYYY-MM-DD"/> 36 value-format="YYYY-MM-DD"/>
37 <!-- :picker-options="pickerOptions"--> 37 <!-- :picker-options="pickerOptions"-->
38 </el-form-item> 38 </el-form-item>
39 <el-form-item :label="language==0?'房间数':'Rooms'"> 39 <el-form-item :label="language==0?'房间数':'Rooms'" required prop="roomNum">
40 <el-input-number v-model="form.roomNum" :min="0" :max="canOrderNum" @change="changeRoomNum"/> 40 <el-input-number v-model="form.roomNum" :min="0" :max="canOrderNum" @change="changeRoomNum"/>
41 <div class="red ml20" v-if="rzRange[1]"> 41 <div class="red ml20" v-if="rzRange[1]">
42 <span v-if="language == 0">剩余房间数:{{ canOrderNum }}</span> 42 <span v-if="language == 0">剩余房间数:{{ canOrderNum }}</span>
43 <span v-else>{{ canOrderNum }} Remaining rooms</span> 43 <span v-else>{{ canOrderNum }} Remaining rooms</span>
44 </div> 44 </div>
45 </el-form-item> 45 </el-form-item>
46 <el-form-item v-for="(n,index) in form.roomNum" :key="index" :label="`入住人${index+1}`"> 46 <el-form-item v-for="(n,index) in form.roomNum" :key="index" :label="`入住人${index+1}`" required>
47 <el-input v-model="rzUserArr[index]" :placeholder="language==0?'每间填一位住客姓名':'Each room fill in one name of the guest'"/> 47 <el-input v-model="rzUserArr[index]" :placeholder="language==0?'每间填一位住客姓名':'Each room fill in one name of the guest'"/>
48 </el-form-item> 48 </el-form-item>
49 <el-form-item :label="language==0?'预计到店':'Expected check-in'"> 49 <el-form-item :label="language==0?'预计到店':'Expected check-in'" required>
50 <el-select v-model="form.ddDate" 50 <el-select v-model="form.ddDate"
51 :placeholder="language==0?'请选择预计到店时间':'Please select the expected check-in time'"> 51 :placeholder="language==0?'请选择预计到店时间':'Please select the expected check-in time'">
52 <el-option 52 <el-option
...@@ -57,24 +57,25 @@ ...@@ -57,24 +57,25 @@
57 /> 57 />
58 </el-select> 58 </el-select>
59 </el-form-item> 59 </el-form-item>
60 <el-form-item :label="language==0?'联系电话':'Contact phone'"> 60 <el-form-item :label="language==0?'联系电话':'Contact phone'" required prop="phone">
61 <el-input v-model="form.phone"/> 61 <el-input v-model="form.phone"/>
62 </el-form-item> 62 </el-form-item>
63 63
64 <div v-if="room.addBedFlag=='1'"> 64 <div v-if="room.addBedFlag=='1'">
65 <el-form-item :label="language==0?'是否加床':'Extra bed'"> 65 <el-form-item :label="language==0?'是否加床':'Extra bed'" required>
66 <el-radio-group v-model="form.isAddbed"> 66 <el-radio-group v-model="form.isAddbed">
67 <el-radio label="1">{{ language == 0 ? '是' : 'Yes' }}</el-radio> 67 <el-radio label="1">{{ language == 0 ? '是' : 'Yes' }}</el-radio>
68 <el-radio label="0">{{ language == 0 ? '否' : 'No' }}</el-radio> 68 <el-radio label="0">{{ language == 0 ? '否' : 'No' }}</el-radio>
69 </el-radio-group> 69 </el-radio-group>
70 </el-form-item> 70 </el-form-item>
71 <el-form-item :label="language==0?'加床张数':'Extra bed num'"> 71 <el-form-item :label="language==0?'加床张数':'Extra bed num'" required>
72 <el-input-number v-model="form.addNum" :min="0" :max="1" @change="changeBed"/> 72 <el-input-number v-model="form.addNum" :min="0" :max="1" @change="changeBed"/>
73 </el-form-item> 73
74 <div class="tip" v-if="form.isAddbed=='1'">* 74 <div class="tip" v-if="form.isAddbed=='1'">*
75 <span v-if="language == 0">一个房间最多加一张床</span> 75 <span v-if="language == 0">一个房间最多加一张床</span>
76 <span v-else>A room can only add one bed</span> 76 <span v-else>A room can only add one bed</span>
77 </div> 77 </div>
78 </el-form-item>
78 </div> 79 </div>
79 </el-form> 80 </el-form>
80 </div> 81 </div>
...@@ -156,7 +157,9 @@ const canOrderNum = ref(0) ...@@ -156,7 +157,9 @@ const canOrderNum = ref(0)
156 const form = ref({ 157 const form = ref({
157 isAddbed: '0', 158 isAddbed: '0',
158 roomNum: 0, 159 roomNum: 0,
159 addNum: 0 160 addNum: 1,
161 ddDate:'14:00',
162 phone: user.phonenumber||'',
160 }) 163 })
161 const rzRange = ref([]) 164 const rzRange = ref([])
162 const rzUserArr = ref([]) 165 const rzUserArr = ref([])
...@@ -232,6 +235,8 @@ const ddDateArr = ref([ ...@@ -232,6 +235,8 @@ const ddDateArr = ref([
232 label: '00:00' 235 label: '00:00'
233 } 236 }
234 ]) 237 ])
238 const rules = ref({})
239
235 let usedays = 0 240 let usedays = 0
236 onMounted(() => { 241 onMounted(() => {
237 console.log(route.query) 242 console.log(route.query)
...@@ -327,6 +332,7 @@ function countMoney() { ...@@ -327,6 +332,7 @@ function countMoney() {
327 function submit() { 332 function submit() {
328 if(!user){ 333 if(!user){
329 useUserStore().setReLogin() 334 useUserStore().setReLogin()
335 return
330 } 336 }
331 337
332 if (usedays == 0) { 338 if (usedays == 0) {
...@@ -466,4 +472,5 @@ function submit() { ...@@ -466,4 +472,5 @@ function submit() {
466 .red { 472 .red {
467 color: #FF8124; 473 color: #FF8124;
468 } 474 }
475 .tip{font-size: 14px;color: #666;padding: 0 10px;}
469 </style> 476 </style>
......
1 <template> 1 <template>
2 <div style="min-height: 100vh"> 2 <div style="min-height: 100vh">
3 <div class="box" v-if="!errorBox"> 3 <div class="box" v-if="!errorBox">
4 <el-card :body-style="{ padding: '0px' }" class="mt20"> 4 <el-card :body-style="{ padding: '0px' }" class="mt20 mb60">
5 <div slot="header"> 5 <div slot="header">
6 <div class="bg-lineg">{{ language == 0 ? '缴费清单' : 'Payment List' }}</div> 6 <div class="bg-lineg">{{ language == 0 ? '缴费清单' : 'Payment List' }}</div>
7 </div> 7 </div>
8 <div v-if="isLogin"> 8 <div v-if="isLogin">
9 <div class="pd20">
10 <div class="leftboderTT">{{ language == 0 ? '酒店信息' : 'Hotel Infomation' }}</div>
11 <div class="border-info mt20">
12 <h3>{{ form.hotelName }}</h3>
13 <el-row>
14 <el-col>
15 地址:{{ form.provinceName }} {{ form.cityName }} {{ form.areaName }} {{ form.address }}
16 </el-col>
17 <el-col>
18 入住信息:{{ form.messageObj?.roomStayDate }}
19 </el-col>
20 <el-col>
21 房间信息:{{ form.messageObj?.roomName }}{{ form.roomNum }}
22 </el-col>
23 </el-row>
24 </div>
9 25
10 <el-row class="priceBar"> 26 <div class="leftboderTT">{{ language == 0 ? '预订信息' : 'Hotel Infomation' }}</div>
11 <el-col :lg="12" :xs="24" class="pl-15"> 27 <div class="border-info mt20">
12 28 <el-row>
29 <el-col :lg="8" :md="12" :sm="12" :xs="24">
30 <div>入住人:{{ form.rzUsers }}</div>
13 </el-col> 31 </el-col>
32 <el-col :lg="8" :md="12" :sm="12" :xs="24">联系方式:{{ form.phone }}</el-col>
33 <el-col :lg="8" :md="12" :sm="12" :xs="24"></el-col>
34 </el-row>
35
36 </div>
37
38 <el-row justify="end">
14 <el-col :lg="12" :xs="24"> 39 <el-col :lg="12" :xs="24">
15 <div class="flex" v-if="Number(form.totalFee)>0"> 40 <div class="text-right">
16 <div class="item" v-if="signInfoList?.length>0"><label>{{ language==0?'报名费':'REGISTRATION FEE' }}</label><span>{{ language==0?'¥':'€' }}{{serviceFeeTotal}}</span></div> 41 <div class="item"><label>{{ language == 0 ? '费用总计' : 'Total Cost' }}</label>
17 <div class="item" v-if="zuTableList?.length>0"><label>{{ language==0?'保险费':'INSURANCE' }}</label><span>{{ language==0?'¥':'€' }}{{insuranceFeeTotal}}</span></div> 42 <span class="size26 wePrice">{{ language == 0 ? '¥' : '€' }}{{ form.total }}</span>
18 <div class="item"><label>{{ language==0?'费用总计':'Total Cost' }}</label><span class="size26">{{ language==0?'¥':'€' }}{{form.totalFee}}</span></div> 43 </div>
19 </div> 44 </div>
20 </el-col> 45 </el-col>
21 </el-row> 46 </el-row>
22 </div> 47 </div>
48
49
50 </div>
23 <div v-else class="pd20 skeletonBox"> 51 <div v-else class="pd20 skeletonBox">
24 <el-skeleton :rows="8"/> 52 <el-skeleton :rows="8"/>
25 <el-button type="primary" class="btn-lineG" size="large" :style="language == 0 ?'width:200px':'width:400px'" round @click="showLogin"> 53 <el-button type="primary" class="btn-lineG" size="large" :style="language == 0 ?'width:200px':'width:400px'"
26 {{ language == 0 ?'登录后查看明细':'View detailed information after logging in' }} 54 round @click="showLogin">
55 {{ language == 0 ? '登录后查看明细' : 'View detailed information after logging in' }}
27 </el-button> 56 </el-button>
28 </div> 57 </div>
29 </el-card>
30 58
31 <el-card class="mt20 mb20">
32 <el-row class="result"> 59 <el-row class="result">
33 <el-col :lg="12"> 60 <el-col :lg="12">
34
35 </el-col> 61 </el-col>
36 <el-col :lg="12" v-if="Number(form.totalFee)>0"> 62 <el-col :lg="12" v-if="Number(form.totalFee)>0">
37 <div class="priceb" v-if="form.payStatus=='0'">{{ language==0?'待支付金额':'Amount Due' }}<span class="price">{{ language==0?'¥':'€' }}{{ Number(totalFee).toFixed(2) }}</span></div> 63 <div class="priceb" v-if="form.viewStatus=='0'">{{ language == 0 ? '待支付金额' : 'Amount Due' }}<span
38 <div class="priceb" v-if="form.payStatus=='1'">{{ language==0?'已支付金额':'Amount Due' }}<span class="price">{{ language==0?'¥':'€' }}{{ Number(totalFee).toFixed(2) }}</span></div> 64 class="price">{{ language == 0 ? '¥' : '€' }}{{ Number(totalFee).toFixed(2) }}</span></div>
39 <div class="priceb" v-if="form.payStatus=='5'">{{ language==0?'已退款':'Refunded' }}<span class="price">{{ language==0?'¥':'€' }}{{ Number(totalFee).toFixed(2) }}</span></div> 65 <div class="priceb" v-if="form.viewStatus=='1'">{{ language == 0 ? '已支付金额' : 'Amount Due' }}<span
66 class="price">{{ language == 0 ? '¥' : '€' }}{{ Number(totalFee).toFixed(2) }}</span></div>
67 <div class="priceb" v-if="form.viewStatus=='4'">{{ language == 0 ? '已退订' : 'Refunded' }}<span
68 class="price">{{ language == 0 ? '¥' : '€' }}{{ Number(totalFee).toFixed(2) }}</span></div>
69 <div class="priceb" v-if="form.viewStatus=='2'">{{ language == 0 ? '已取消' : 'Canceled' }}<span
70 class="price">{{ language == 0 ? '¥' : '€' }}{{ Number(totalFee).toFixed(2) }}</span></div>
71 <div class="priceb" v-if="form.viewStatus=='7'">{{ language == 0 ? '退款审核中' : '退款审核中' }}<span
72 class="price">{{ language == 0 ? '¥' : '€' }}{{ Number(totalFee).toFixed(2) }}</span></div>
40 </el-col> 73 </el-col>
41 </el-row> 74 </el-row>
42 </el-card> 75
43 <el-card class="mb60" v-if="form.auditStatus=='2'&&form.payStatus=='0'&&Number(form.totalFee)>0"> 76 <div class="pd20" v-if="form.status == '0'&&(form.surplus!='0,0'&&form.surplus!='0')">
44 <div class="leftboderTT">{{ language==0?'选择支付方式':'Choose payment method' }}</div> 77
78 <div class="leftboderTT">{{ language == 0 ? '选择支付方式' : 'Choose payment method' }}</div>
45 <div class="mt20"> 79 <div class="mt20">
46 <el-radio-group v-model="payType" @change="changePaytype"> 80 <el-radio-group v-model="payType">
47 <!-- 0 线下 1 支付宝 2 微信 3 paypal-->
48 <!-- <el-radio label="1" border>-->
49 <!-- <svg t="1709003181386" class="icon" viewBox="0 0 3283 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="31015" width="100" height="40"><path d="M1163.122759 94.631724H593.92A133.826207 133.826207 0 0 0 459.034483 228.457931v567.084138a133.473103 133.473103 0 0 0 133.826207 133.826207h570.262069a133.826207 133.826207 0 0 0 134.17931-133.826207v-5.296552s-217.864828-90.394483-328.033103-143.36c-73.445517 90.747586-168.783448 145.478621-267.652414 145.478621-167.017931 0-223.514483-145.831724-144.419311-241.875862a169.136552 169.136552 0 0 1 92.16-51.906207c70.62069-17.302069 184.32 10.946207 290.604138 45.903448A587.211034 587.211034 0 0 0 988.689655 429.373793h-328.73931v-32.838621h168.783448V337.213793h-204.446896v-33.191724h204.446896V219.630345a14.124138 14.124138 0 0 1 14.477241-14.477242h82.273104v98.868966h202.328276v33.191724h-202.328276v59.321379h165.252414a677.605517 677.605517 0 0 1-70.62069 176.551725c50.14069 18.008276 94.984828 35.310345 128.529655 46.256551a930.427586 930.427586 0 0 0 147.950345 42.725518V228.457931a133.826207 133.826207 0 0 0-133.473103-133.826207z" fill="#089fe8" p-id="31016"></path><path d="M663.481379 548.016552a162.78069 162.78069 0 0 0-81.566896 30.366896c-64.617931 55.790345-26.129655 158.190345 104.165517 158.190345 75.917241 0 151.481379-48.375172 211.862069-125.704827-85.804138-40.96-156.424828-70.267586-234.46069-62.852414zM2488.673103 225.28h239.757242v47.668966h85.804138V216.805517a22.951724 22.951724 0 0 0-21.892414-23.304827h-139.122759V149.009655h-89.335172v44.137931h-160.662069v79.80138h85.451034zM1882.394483 360.518621h67.442758v247.172413h73.798621V280.011034h-26.835862l55.437241-126.764137H1970.317241l-87.922758 207.271724zM2824.827586 596.391724l-26.835862-90.747586a13.771034 13.771034 0 0 0-13.064827-10.24h-70.62069l20.48 70.62069H2648.275862v-135.944828h164.546207v-32.132414H2648.275862v-63.55862h164.546207v-32.132414h-409.6v32.132414h164.546207v63.55862h-164.546207v32.132414h164.546207V564.965517h-164.546207v32.132414H2824.827586zM2158.521379 323.442759a16.595862 16.595862 0 0 0-15.183448-9.886897h-63.558621l49.434483 156.424828h75.564138z" fill="#089fe8" p-id="31017"></path><path d="M2319.889655 156.777931h-76.623448v80.154483h-188.557241v32.132414h188.557241v287.426206a13.064828 13.064828 0 0 1-12.358621 12.005518h-38.841379v31.77931h99.222069a30.013793 30.013793 0 0 0 28.601379-29.66069V269.064828h31.073104v-32.132414h-31.073104zM1871.448276 577.677241a913.831724 913.831724 0 0 1-168.783448-80.507586 357.34069 357.34069 0 0 0 141.241379-194.56H1694.896552V249.997241h170.195862v-32.83862H1694.896552V150.422069h-75.211035a15.536552 15.536552 0 0 0-15.183448 15.536552v51.2h-169.136552v32.83862h169.136552v52.612414h-141.241379v32.838621h284.248276a278.951724 278.951724 0 0 1-93.572414 127.470345 360.871724 360.871724 0 0 1-93.572414-94.984828H1483.034483a423.724138 423.724138 0 0 0 122.173793 130.295173 662.775172 662.775172 0 0 1-172.667586 77.329655v39.194482A773.296552 773.296552 0 0 0 1653.230345 529.655172 781.771034 781.771034 0 0 0 1871.448276 614.753103zM1553.655172 674.78069l-70.620689 190.675862h35.310345l13.417931-38.488276h70.620689l12.711724 38.488276h35.310345l-70.620689-190.675862z m-12.711724 128.176551l27.188966-79.095172 26.482758 79.095172zM1796.237241 674.78069h-34.251034v190.675862h115.464827v-26.129655h-81.213793v-164.546207zM2003.155862 674.78069h34.251035v190.322758h-34.251035zM2250.328276 674.78069h-74.151724v190.675862h35.310345v-73.445518h39.900689a58.615172 58.615172 0 1 0 0-117.230344z m-2.118621 91.100689H2210.427586v-64.971034h37.782069a31.073103 31.073103 0 0 1 30.366897 32.485517 30.72 30.72 0 0 1-30.366897 32.485517zM2465.015172 674.78069l-70.620689 190.675862h35.310345l13.417931-38.488276h70.620689l12.711724 38.488276h35.310345l-70.620689-190.675862z m-12.711724 128.176551l27.542069-79.095172 27.188966 79.095172zM2716.071724 755.994483l-38.135172-81.213793H2641.213793l57.555862 112.286896v78.388966h33.897931v-78.388966l0.353104-0.353103 57.555862-111.933793h-37.075862l-37.428966 81.213793z" fill="#089fe8" p-id="31018"></path></svg>-->
50 <!-- </el-radio>-->
51 <el-radio label="2" v-if="language==0" border> 81 <el-radio label="2" v-if="language==0" border>
52 <!-- 微信--> 82 <!-- 微信-->
53 <svg t="1709002960407" class="icon" viewBox="0 0 3152 1024" version="1.1" 83 <svg t="1709002960407" class="icon" viewBox="0 0 3152 1024" version="1.1"
...@@ -60,8 +90,7 @@ ...@@ -60,8 +90,7 @@
60 fill="#595757" p-id="24749"></path> 90 fill="#595757" p-id="24749"></path>
61 </svg> 91 </svg>
62 </el-radio> 92 </el-radio>
63 93 <el-radio label="3" v-if="language==1" border>
64 <el-radio label="4" v-if="language==1" border>
65 <!-- paypal--> 94 <!-- paypal-->
66 <svg t="1709002828937" class="icon" viewBox="0 0 4220 1024" version="1.1" 95 <svg t="1709002828937" class="icon" viewBox="0 0 4220 1024" version="1.1"
67 xmlns="http://www.w3.org/2000/svg" p-id="22654" width="94" height="40"> 96 xmlns="http://www.w3.org/2000/svg" p-id="22654" width="94" height="40">
...@@ -105,7 +134,8 @@ ...@@ -105,7 +134,8 @@
105 </div> 134 </div>
106 <div class="tip text-center text-danger" v-if="language==0"> 135 <div class="tip text-center text-danger" v-if="language==0">
107 支付后不要关闭此窗口,等待确认支付成功. 136 支付后不要关闭此窗口,等待确认支付成功.
108 若长时间未收到支付成功提醒,请刷新页面</div> 137 若长时间未收到支付成功提醒,请刷新页面
138 </div>
109 <div class="tip text-center text-danger" v-else> 139 <div class="tip text-center text-danger" v-else>
110 After payment, do not close this window and wait for confirmation of successful payment. 140 After payment, do not close this window and wait for confirmation of successful payment.
111 <br/> 141 <br/>
...@@ -114,19 +144,32 @@ ...@@ -114,19 +144,32 @@
114 </div> 144 </div>
115 </div> 145 </div>
116 146
117 <div class="text-center mt20"> 147 <el-row class="mt20" align="middle" justify="center">
148 <el-col :span="24" class="text-center">
118 <el-button v-if="!hideconfirmbtn" type="primary" @click="goPay" round class="btn-lineG w200px"> 149 <el-button v-if="!hideconfirmbtn" type="primary" @click="goPay" round class="btn-lineG w200px">
119 {{ language==0?'确定':'Submit' }}</el-button> 150 {{ language == 0 ? '确定' : 'Submit' }}
151 </el-button>
152 <el-button round @click="unsubscribe" v-if="form.viewStatus == '5'"> 退订</el-button>
153 <el-button link class="underline" @click="cancel" v-if="form.viewStatus == '0'" disabled> 取消订单</el-button>
154
155
156 </el-col>
157 </el-row>
120 </div> 158 </div>
121 </div> 159 </div>
122 </el-card> 160 <div v-if="form.payStatus == '3'">
123 <el-card class="mb60" v-if="form.payStatus == '3'">
124 <div class="text-center"> 161 <div class="text-center">
125 <el-icon color="#32B16C" size="80"><SuccessFilled /></el-icon> 162 <el-icon color="#32B16C" size="80">
126 <p class="text-success">{{ language==0?'支付成功':'successful!' }}</p> 163 <SuccessFilled/>
127 <h3 class="wePrice">{{ language==0?'¥':'€' }}{{form.totalFee || 0}}</h3> 164 </el-icon>
165 <p class="text-success">{{ language == 0 ? '支付成功' : 'successful!' }}</p>
166 <h3 class="wePrice">{{ language == 0 ? '¥' : '€' }}{{ form.totalFee || 0 }}</h3>
167 </div>
128 </div> 168 </div>
129 </el-card> 169 </el-card>
170
171
172
130 </div> 173 </div>
131 174
132 175
...@@ -137,7 +180,9 @@ ...@@ -137,7 +180,9 @@
137 :sub-title="language==0?'请确认订单号是否正确':'Please confirm if the order number is correct'" 180 :sub-title="language==0?'请确认订单号是否正确':'Please confirm if the order number is correct'"
138 > 181 >
139 <template #extra> 182 <template #extra>
140 <el-button type="primary" @click="goHome" class="btn-lineG w200px" round>{{ language==0?'返回首页':'Home' }}</el-button> 183 <el-button type="primary" @click="goHome" class="btn-lineG w200px" round>
184 {{ language == 0 ? '返回首页' : 'Home' }}
185 </el-button>
141 </template> 186 </template>
142 </el-result> 187 </el-result>
143 </div> 188 </div>
...@@ -148,9 +193,11 @@ ...@@ -148,9 +193,11 @@
148 import {Search} from "@element-plus/icons-vue" 193 import {Search} from "@element-plus/icons-vue"
149 import {getCurrentInstance, ref} from 'vue' 194 import {getCurrentInstance, ref} from 'vue'
150 import {onMounted} from "@vue/runtime-core" 195 import {onMounted} from "@vue/runtime-core"
151 import {useRoute,useRouter} from "vue-router" 196 import {useRoute, useRouter} from "vue-router"
197 import * as booking from "@/apiPc/booking"
152 import * as match from "@/apiPc/match" 198 import * as match from "@/apiPc/match"
153 import MatchInfoRow from "@/viewsPc/match/components/matchInfo-row"; 199 import MatchInfoRow from "@/viewsPc/match/components/matchInfo-row";
200
154 const {proxy} = getCurrentInstance() 201 const {proxy} = getCurrentInstance()
155 const route = useRoute() 202 const route = useRoute()
156 const router = useRouter() 203 const router = useRouter()
...@@ -161,34 +208,19 @@ const payType = ref('2') ...@@ -161,34 +208,19 @@ const payType = ref('2')
161 const orderId = ref(route.query.orderId) 208 const orderId = ref(route.query.orderId)
162 const matchId = ref() 209 const matchId = ref()
163 const groupId = ref() 210 const groupId = ref()
164 import GroupInfoRow from "@/viewsPc/match/components/groupInfo-row";
165 import CoachInfoRow from "@/viewsPc/match/components/coachInfo-row";
166 import SignInfoTable from "@/viewsPc/match/components/signInfo-table"
167 import ZuTable from "@/viewsPc/match/components/zu-table";
168 import useUserStore from "@/store/modules/user"; 211 import useUserStore from "@/store/modules/user";
169 import FileUpload from "@/components/FileUpload"; 212 import FileUpload from "@/components/FileUpload";
170 import {useStorage} from "@vueuse/core/index"; 213 import {useStorage} from "@vueuse/core/index";
171 import {ElMessage} from "element-plus"; 214 import {ElMessage} from "element-plus";
215
172 const isLogin = ref(false) 216 const isLogin = ref(false)
173 const language= useStorage('language',0) 217 const language = useStorage('language', 0)
174 const signInfoList = ref([])
175 const zuTableList = ref([])
176 const totalFee = ref('') 218 const totalFee = ref('')
177 const wePayCodeUrl = ref('') 219 const wePayCodeUrl = ref('')
178 const form = ref({}) 220 const form = ref({})
179 const voucherObj = ref([])
180 const myMemberTable = ref([])
181 const upForm = ref({
182 orderId:orderId.value
183 })
184 const errorBox = ref(false) 221 const errorBox = ref(false)
185 const hideconfirmbtn = ref(false) 222 const hideconfirmbtn = ref(false)
186 const insuranceFeeTotal = ref(0) 223
187 const serviceFeeTotal = ref(0)
188 const zuQuery = ref({
189 cptId: matchId.value,
190 groupId: groupId.value
191 })
192 const user = useUserStore().user 224 const user = useUserStore().user
193 console.log(route.query.orderId) 225 console.log(route.query.orderId)
194 // 1763462073870237698 226 // 1763462073870237698
...@@ -196,169 +228,92 @@ getData() ...@@ -196,169 +228,92 @@ getData()
196 if (useUserStore().user) { 228 if (useUserStore().user) {
197 isLogin.value = true 229 isLogin.value = true
198 } 230 }
231 onMounted(() => {
232 if (language.value == 0) {
233 payType.value = '2'
234 } else {
235 payType.value = '3'
236 }
237 })
238
199 function getData() { 239 function getData() {
200 return match.getMyOrderDetail({orderId:orderId.value}).then(res => { 240 return booking.getRoomBilldetailbyId({orderId: orderId.value}).then(res => {
201 totalFee.value = res.data.totalFee 241 totalFee.value = res.data.total
202 form.value = res.data 242 form.value = res.data
203 form.value.payTypeArr = res.data.payType.split(',') 243 form.value.messageObj = JSON.parse(form.value.message)
204 matchId.value = form.value.cptId 244 form.value.extJsonObj = JSON.parse(form.value.extJson)
205 groupId.value = form.value.groupId || 0 245 matchId.value = form.value.extJsonObj?.activeId
206 zuQuery.value.groupId = groupId.value 246 }).catch(err => {
207 zuQuery.value.cptId = matchId.value
208 if(isLogin.value){
209 getSignList()
210 if(user.utype=='1'){
211 getMyMemberTable()
212 }
213 }
214 }).catch(err=>{
215 console.log(err) 247 console.log(err)
216 errorBox.value = true 248 errorBox.value = true
217 }) 249 })
218 } 250 }
219 function getMyMemberTable() { 251
220 match.getPerPersonList({cptId: matchId.value, searchLabels: '1,2,3,4,5,6'}, user.userId).then(res => {
221 myMemberTable.value = res.rows
222 })
223 }
224 function upRR() {
225 if(voucherObj.value.length==0){
226 ElMessage.warning(language.value==0?'请上传凭证':'Please upload the voucher')
227 return
228 }
229 upForm.value.voucher = voucherObj.value[0].url
230 match.upReceipt(upForm.value).then(res=>{
231 getData()
232 })
233 }
234 function getSignList() {
235 match.getMySignInfoList(zuQuery.value).then(res => {
236 insuranceFeeTotal.value = 0
237 serviceFeeTotal.value = 0
238 signInfoList.value = res.data?.singleData || []
239 zuTableList.value = res.data?.zuData || []
240 for(var s of signInfoList.value){
241 insuranceFeeTotal.value = insuranceFeeTotal.value + Number(s.insuranceFee)
242 }
243 for(var z of zuTableList.value){
244 serviceFeeTotal.value = serviceFeeTotal.value + Number(z.project.serviceFee)
245 }
246 }).catch(err=>{
247 if(isLogin.value){
248 router.push({name:'myMatch'})
249 return
250 }
251 })
252 }
253 function goHome() { 252 function goHome() {
254 router.push('/') 253 router.push('/')
255 } 254 }
256 function changePaytype() { 255
257 hideconfirmbtn.value = false 256 function goPay() {
258 wePayCodeUrl.value = '' 257 if (payType.value == '2') {
259 if(handle) { 258 match.createWePay({orderId: orderId.value}).then(res => {
260 clearTimeout(handle)
261 handle=null
262 }
263 }
264 function goPay(){
265 if(payType.value=='2' && form.value.payTypeArr.indexOf('2')>-1){
266 match.createWePay({orderId:orderId.value}).then(res=>{
267 wePayCodeUrl.value = res.data 259 wePayCodeUrl.value = res.data
268 hideconfirmbtn.value = true 260 hideconfirmbtn.value = true
269 startforGetData() 261 startforGetData()
270 }) 262 })
271 } else if(payType.value=='2' && form.value.payTypeArr.indexOf('2')==-1){
272 ElMessage.warning(language.value == 0 ? '请选择支付方式' : 'Please select payment method')
273 return
274 } 263 }
275 if(payType.value=='4'){ 264 if (payType.value == '3') {
276 match.createPalPay({orderId:orderId.value}).then(res=>{ 265 match.createPalPay({orderId: orderId.value}).then(res => {
277 if(res.data){ 266 if (res.data) {
278 location.href=res.data 267 location.href = res.data
279 } 268 }
280 }) 269 })
281 } 270 }
282 } 271 }
272
283 let handle; 273 let handle;
274
284 function startforGetData() { 275 function startforGetData() {
285 handle= setTimeout(()=>{ 276 handle = setTimeout(() => {
286 getData().then(()=>{ 277 getData().then(() => {
287 if( form.value.payTime){ 278 if (form.value.payTime) {
288 if(handle) { 279 if (handle) {
289 clearTimeout(handle) 280 clearTimeout(handle)
290 handle=null 281 handle = null
291 } 282 }
292 }else{ 283 } else {
293 startforGetData() 284 startforGetData()
294 } 285 }
295 }) 286 })
296 },2000) 287 }, 2000)
297 } 288 }
298 289
299 function showLogin(){ 290 function showLogin() {
300 useUserStore().setReLogin() 291 useUserStore().setReLogin()
301 } 292 }
302 function exportSignList(n) {
303 var obj = {
304 cptId: matchId.value,
305 groupId: groupId.value,
306 type:n
307 }
308 var fileName
309 if(language.value==0){
310 if(n==1){
311 fileName = '参赛人员清单'
312 }else {
313 fileName = '设项报名清单'
314 }
315 proxy.download('/league/sign/exportCn', {
316 ...obj
317 }, `${fileName}_${new Date().getTime()}.xlsx`)
318 } else {
319 if(n==1){
320 fileName = 'Participant List'
321 }else {
322 fileName = 'LIST OF REGISTERED COMPETITIONS'
323 }
324 proxy.download('/league/sign/exportEn', {
325 ...obj
326 }, `${fileName}_${new Date().getTime()}.xlsx`)
327 }
328 293
329 } 294 const cancel = () => {
330 function exportPdf() {
331 var obj = {
332 cptId: matchId.value,
333 groupId: groupId.value
334 }
335 var fileName
336 if(language.value==0){
337 fileName = '设项报名清单'
338 proxy.download('/pdf/exportMySignInfoList', {
339 ...obj
340 }, `${fileName}_${new Date().getTime()}.pdf`)
341 } else {
342 fileName = 'LIST OF REGISTERED COMPETITIONS'
343 proxy.download('/pdf/exportMySignInfoList', {
344 ...obj
345 }, `${fileName}_${new Date().getTime()}.pdf`)
346 }
347 295
348 } 296 }
349 function copy(str) { 297 const unsubscribe = () => {
350 navigator.clipboard.writeText(str).then(() => { 298
351 ElMessage.success(language.value==0?'复制成功':'Copy successfully')
352 })
353 } 299 }
354 </script> 300 </script>
355 301
356 <style scoped lang="scss"> 302 <style scoped lang="scss">
357 .wePrice{font-size: 24px;font-weight: 400;} 303 .underline{text-decoration: underline;}
304 .wePrice {
305 font-size: 24px;font-family: "DIN Alternate";
306 font-weight: 400;
307 }
308
358 .el-radio.is-bordered { 309 .el-radio.is-bordered {
359 height: 40px; 310 height: 40px;
360 } 311 }
361 .border{border: 1px solid #e1e1e1;} 312
313 .border {
314 border: 1px solid #e1e1e1;
315 }
316
362 .leftboderTT { 317 .leftboderTT {
363 font-weight: 600; 318 font-weight: 600;
364 font-size: 16px; 319 font-size: 16px;
...@@ -440,22 +395,60 @@ function copy(str) { ...@@ -440,22 +395,60 @@ function copy(str) {
440 } 395 }
441 } 396 }
442 } 397 }
443 .skeletonBox{position: relative;overflow: hidden; 398
444 .btn-lineG{position: absolute;left: 0;right: 0;margin: auto;top: 0;bottom: 0; 399 .skeletonBox {
445 width: 200px;box-shadow: 0 0 1000px 500px rgba(255,255,255,0.5); 400 position: relative;
401 overflow: hidden;
402
403 .btn-lineG {
404 position: absolute;
405 left: 0;
406 right: 0;
407 margin: auto;
408 top: 0;
409 bottom: 0;
410 width: 200px;
411 box-shadow: 0 0 1000px 500px rgba(255, 255, 255, 0.5);
446 412
447 } 413 }
448 } 414 }
449 415
450 .payImgbox{text-align: center;border: 1px solid #fff;padding: 20px;} 416 .payImgbox {
451 .priceBar{padding: 0 0 20px; 417 text-align: center;
452 .flex{display: flex;justify-content: right;align-items: baseline; 418 border: 1px solid #fff;
453 .item{font-size: 16px;margin-right: 15px; 419 padding: 20px;
454 label{color: #95A1A6;} 420 }
455 span{font-family: DIN Alternate;} 421
422 .priceBar {
423 padding: 0 0 20px;
424
425 .flex {
426 display: flex;
427 justify-content: right;
428 align-items: baseline;
429
430 .item {
431 font-size: 16px;
432 margin-right: 15px;
433
434 label {
435 color: #95A1A6;
436 }
437
438 span {
439 font-family: DIN Alternate;
456 } 440 }
457 } 441 }
458 .size26{font-size: 26px;} 442 }
443
444 .size26 {
445 font-size: 26px;
446 }
447 }
448
449 .rre {
450 color: #333;
451 font-size: 16px;
452 margin-top: 10px
459 } 453 }
460 .rre{color: #333;font-size: 16px;margin-top: 10px}
461 </style> 454 </style>
......
1 <template> 1 <template>
2 <div> 2 <div>
3 <el-card :body-style="{'padding':'0'}"> 3 <el-card :body-style="{'padding':'0'}">
4 <div class="indexTitle"><h3 class="leftboderTT">{{ language==0?'我的预订':'My reservation' }}</h3></div> 4 <div class="indexTitle">
5 <h3 class="leftboderTT">{{ language==0?'我的预订':'My reservation' }}
6 </h3>
7
8 <el-button class="fr" type="primary" plain @click="toInvoice">发票开具</el-button>
9 </div>
5 <el-empty :image="`/img/order_no.png`" :image-size="228" v-if="list?.length == 0"/> 10 <el-empty :image="`/img/order_no.png`" :image-size="228" v-if="list?.length == 0"/>
6 <div class="pd20"> 11 <div class="pd20">
7 <div v-for="b in list" class="item"> 12 <div v-for="b in list" class="item">
...@@ -33,9 +38,9 @@ ...@@ -33,9 +38,9 @@
33 38
34 <el-col :lg="8"> 39 <el-col :lg="8">
35 <div class="text-right"> 40 <div class="text-right">
36 <el-button class="mb10" plain round type="primary" @click="goDetail(n)"> 41 <el-button class="mb10" plain round type="primary" @click="goDetail(b)">
37 {{ language==0?'详情':'Detail' }}</el-button> 42 {{ language==0?'详情':'Detail' }}</el-button>
38 <el-button v-if="b.status == '0'&&(b.surplus!='0,0'&&b.surplus!='0')" @click="goPay(b)" 43 <el-button v-if="b.status == '0'&&(b.surplus!='0,0'&&b.surplus!='0')" @click="goDetail(b)"
39 class="mb10" plain round type="primary" > 44 class="mb10" plain round type="primary" >
40 {{ language==0?'支付':'Pay' }}</el-button> 45 {{ language==0?'支付':'Pay' }}</el-button>
41 </div> 46 </div>
...@@ -55,6 +60,7 @@ ...@@ -55,6 +60,7 @@
55 import {onMounted} from "@vue/runtime-core"; 60 import {onMounted} from "@vue/runtime-core";
56 import {useStorage} from "@vueuse/core/index"; 61 import {useStorage} from "@vueuse/core/index";
57 import {newbilllist} from "@/apiPc/common"; 62 import {newbilllist} from "@/apiPc/common";
63 const router = useRouter()
58 const language= useStorage('language',0) 64 const language= useStorage('language',0)
59 const list = ref([]) 65 const list = ref([])
60 66
...@@ -69,6 +75,18 @@ function getList() { ...@@ -69,6 +75,18 @@ function getList() {
69 } 75 }
70 }) 76 })
71 } 77 }
78 function goDetail(b) {
79 router.push({
80 name: 'bookingPay',
81 query: {
82 orderId: b.id
83 }
84 })
85 }
86 function toInvoice(){
87
88 }
89
72 </script> 90 </script>
73 91
74 <style scoped lang="scss"> 92 <style scoped lang="scss">
...@@ -84,11 +102,11 @@ function getList() { ...@@ -84,11 +102,11 @@ function getList() {
84 .bg-blue{background: #00a0e9} 102 .bg-blue{background: #00a0e9}
85 } 103 }
86 .indexTitle { 104 .indexTitle {
87 margin: 20px 0 12px; 105 margin: 20px 0 12px; overflow: visible;
88 padding: 0 20px 15px; 106 padding: 0 20px 15px;
89 border-bottom: 1px solid #e5e5e5; 107 border-bottom: 1px solid #e5e5e5;
90 108 .fr{margin: -8px 0 0}
91 h3 { 109 h3 {display: inline-block;
92 font-size: 16px; 110 font-size: 16px;
93 color: var(--el-color-primary); 111 color: var(--el-color-primary);
94 } 112 }
......
...@@ -225,7 +225,7 @@ ...@@ -225,7 +225,7 @@
225 </div> 225 </div>
226 </div> 226 </div>
227 227
228 <div> 228 <div hidden>
229 <div class="box"> 229 <div class="box">
230 <div class="indexTitle"> 230 <div class="indexTitle">
231 <h3 class="leftboderTT">评委介绍</h3> 231 <h3 class="leftboderTT">评委介绍</h3>
......
...@@ -220,7 +220,7 @@ ...@@ -220,7 +220,7 @@
220 </div> 220 </div>
221 </div> 221 </div>
222 222
223 <div> 223 <div hidden>
224 <div class="box"> 224 <div class="box">
225 <div class="indexTitle"> 225 <div class="indexTitle">
226 <h3 class="leftboderTT">INTRODUCTION OF ADJUDICATORS</h3> 226 <h3 class="leftboderTT">INTRODUCTION OF ADJUDICATORS</h3>
...@@ -710,7 +710,7 @@ const goGuide = () => { ...@@ -710,7 +710,7 @@ const goGuide = () => {
710 p{margin: 13px 0 0;} 710 p{margin: 13px 0 0;}
711 } 711 }
712 .logobox{background: #fff;height: 180px;border-radius: 10px;margin: 0 0 30px; 712 .logobox{background: #fff;height: 180px;border-radius: 10px;margin: 0 0 30px;
713 img{width: 100%} 713 img{width: 100%;height: 100%;object-fit: contain;}
714 } 714 }
715 .swiperPic{background: #F3F1FE;position: relative; height: 100%; 715 .swiperPic{background: #F3F1FE;position: relative; height: 100%;
716 padding: 20px 45px; 716 padding: 20px 45px;
......
...@@ -82,7 +82,7 @@ export default defineConfig(({ mode, command }) => { ...@@ -82,7 +82,7 @@ export default defineConfig(({ mode, command }) => {
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.27:8081/', 85 target: 'http://192.168.1.118:8081/',
86 // target: 'https://dance.itechtop.cn/stage-api', 86 // target: 'https://dance.itechtop.cn/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!