no message
Showing
15 changed files
with
444 additions
and
245 deletions
| ... | @@ -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 | } | ... | ... |
src/assets/booking/arrow.png
0 → 100644
868 Bytes
src/assets/booking/cl_bg.png
0 → 100644
87.7 KB
src/assets/booking/cl_text.png
0 → 100644
13.1 KB
src/assets/booking/wf.png
0 → 100644
3.6 KB
| ... | @@ -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> | ... | ... |
src/viewsPc/booking/carOrder.vue
0 → 100644
| 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 }}m²</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, | ... | ... |
-
Please register or sign in to post a comment