no message
Showing
4 changed files
with
153 additions
and
28 deletions
| 1 | <template> | 1 | <template> |
| 2 | <div> | 2 | <div> |
| 3 | <div class="banner"> | ||
| 4 | <img src="@/assets/booking/jd_text.png"> | ||
| 5 | </div> | ||
| 3 | <div class="box"> | 6 | <div class="box"> |
| 4 | <el-card class="mt30"></el-card> | 7 | <div class="searchBar"> |
| 8 | <el-input :placeholder="language==0?'请输入关键字搜索':'Search'" v-model="query.name" class="no-border"> | ||
| 9 | </el-input> | ||
| 10 | <el-button size="large" type="primary" class="btn-lineG" icon="search" @click="getList"> | ||
| 11 | {{ language==0?'搜索':'Search' }}</el-button> | ||
| 12 | </div> | ||
| 5 | </div> | 13 | </div> |
| 6 | 14 | ||
| 7 | </div> | 15 | <div class="box" v-loading="loading"> |
| 16 | <el-card v-for="(h,index) in list" class="mb20" @click="goDetail(h)"> | ||
| 17 | <!-- che列表--> | ||
| 18 | <el-row class="hotel" align="middle" :gutter="20"> | ||
| 19 | <el-col :span="6"> | ||
| 20 | <img class="w100" :src="fillImgUrl(h.photos?.split(',')[0])"/> | ||
| 21 | </el-col> | ||
| 22 | <el-col :span="10"> | ||
| 23 | <h3 class="esp">{{h.name}}</h3> | ||
| 24 | <div class="starBox"> | ||
| 25 | <img v-for="i in Number(h.starLevel||0)" src="@/assets/booking/star.png"> | ||
| 26 | </div> | ||
| 27 | <div class="tagbox"> | ||
| 28 | <span v-for="(t,index) in h.label?.split(',')" v-show="index<4">{{t}}</span> | ||
| 29 | <a v-show="h.label?.split(',').length>4">{{ language==0?'更多':'MORE' }} ></a> | ||
| 30 | </div> | ||
| 31 | <p class="esp addr"> | ||
| 32 | <el-icon size="16" style="position: relative;top: 2px" color="#929AA0"><LocationFilled /></el-icon> | ||
| 33 | {{h.address}} | ||
| 34 | </p> | ||
| 35 | </el-col> | ||
| 36 | <el-col :span="8" class="text-right"> | ||
| 37 | <div class="price">¥<span>{{ h.price }}</span><i v-if="language==0">起</i></div> | ||
| 38 | <el-button class="btn-lineG w200px" round type="primary" size="large">{{ language==0?'立即预约':'Select' }} ⇀</el-button> | ||
| 39 | </el-col> | ||
| 40 | </el-row> | ||
| 41 | </el-card> | ||
| 42 | <el-empty v-show="!loading&&list.length==0" :image="`/img/order_no.png`" :image-size="228" description="" /> | ||
| 43 | <div style="height: 50px"></div> | ||
| 44 | </div> | ||
| 45 | |||
| 46 | </div> | ||
| 8 | </template> | 47 | </template> |
| 9 | 48 | ||
| 10 | <script setup> | 49 | <script setup> |
| 50 | import {onMounted} from "@vue/runtime-core" | ||
| 51 | import * as booking from "@/apiPc/booking" | ||
| 52 | import {useRouter,useRoute} from "vue-router"; | ||
| 53 | import {useStorage} from "@vueuse/core/index"; | ||
| 54 | const router = useRouter() | ||
| 55 | const route = useRoute() | ||
| 56 | const language= useStorage('language',0) | ||
| 57 | const query = ref({ | ||
| 58 | name:'' | ||
| 59 | }) | ||
| 60 | const cptId = ref('') | ||
| 61 | const list = ref([]) | ||
| 62 | const loading = ref(false) | ||
| 63 | onMounted(()=>{ | ||
| 64 | query.value.activityId = route.params.cptId | ||
| 65 | getList() | ||
| 66 | }) | ||
| 11 | 67 | ||
| 12 | </script> | 68 | function getList() { |
| 69 | loading.value = true | ||
| 70 | booking.getHotelList(query.value).then(res=>{ | ||
| 71 | list.value = res.rows | ||
| 72 | loading.value = false | ||
| 73 | }).catch(e=>{ | ||
| 74 | loading.value = false | ||
| 75 | }) | ||
| 76 | } | ||
| 77 | function goDetail(item) { | ||
| 78 | router.push({ | ||
| 79 | name:'hotelDetail', | ||
| 80 | params:{ | ||
| 81 | hotelId:item.hotelId, | ||
| 82 | }, | ||
| 83 | query:{ | ||
| 84 | id:item.id | ||
| 85 | } | ||
| 13 | 86 | ||
| 14 | <style scoped> | 87 | }) |
| 88 | } | ||
| 89 | </script> | ||
| 15 | 90 | ||
| 91 | <style scoped lang="scss"> | ||
| 92 | .hotel{ | ||
| 93 | h3{margin: 0 0 20px;} | ||
| 94 | img.w100{object-fit: cover;aspect-ratio: 16/9} | ||
| 95 | .addr{font-size: 16px;color: #929AA0;font-weight: 400;} | ||
| 96 | .price{margin: 0 0 25px; | ||
| 97 | color: #FF8124;font-size: 18px; | ||
| 98 | span{font-size: 24px;margin: 0 8px;font-family: 'DINAlternate-Bold';font-weight: 600;} | ||
| 99 | i{font-style: normal;color: #929AA0;} | ||
| 100 | } | ||
| 101 | } | ||
| 102 | .banner{height: 140px;background-size: cover;text-align: center; | ||
| 103 | background: url("@/assets/booking/jd_bg.png") center;display: flex;align-items: center; | ||
| 104 | justify-content: center; | ||
| 105 | img{display: block;margin:-30px auto 0;width: auto;} | ||
| 106 | } | ||
| 107 | .searchBar{position: relative;top: -30px; | ||
| 108 | background: #FFFFFF;display: flex;padding: 20px; | ||
| 109 | border-radius: 10px;} | ||
| 110 | .no-border{border: none;background: #F5F7F9; | ||
| 111 | :deep(.el-input__wrapper){border: none;box-shadow: none;background: #F5F7F9;} | ||
| 112 | } | ||
| 113 | .starBox{ | ||
| 114 | img{display: inline-block;margin-right: 4px} | ||
| 115 | } | ||
| 116 | .tagbox{margin: 15px 0; | ||
| 117 | a{color: #AFB5B9;font-size: 12px;} | ||
| 118 | span{border-radius: 13px;font-size: 12px;padding: 4px 10px;margin-right:10px;font-weight: 400;} | ||
| 119 | span:nth-child(4n){background: rgba(50, 177, 108, 0.2);color: rgba(50, 177, 108, 1);} | ||
| 120 | span:nth-child(4n+1){background:rgba(243, 152, 0, 0.2);color: rgba(243, 152, 0, 1);} | ||
| 121 | 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);} | ||
| 123 | } | ||
| 16 | </style> | 124 | </style> | ... | ... |
| ... | @@ -80,7 +80,7 @@ | ... | @@ -80,7 +80,7 @@ |
| 80 | </el-row> | 80 | </el-row> |
| 81 | </el-col> | 81 | </el-col> |
| 82 | <el-col :span="3"> | 82 | <el-col :span="3"> |
| 83 | <div class="price">{{ language==0?'¥':'€' }}<span>{{r.roomPrice}}</span></div> | 83 | <div class="price">{{ language==0?'¥':'€' }}<span>{{language==0?r.roomPrice:r.roomPriceEn}}</span></div> |
| 84 | </el-col> | 84 | </el-col> |
| 85 | <el-col :span="3"> | 85 | <el-col :span="3"> |
| 86 | <div class="bg-lineg" v-if="language==0" @click="goOrder(r)"> | 86 | <div class="bg-lineg" v-if="language==0" @click="goOrder(r)"> |
| ... | @@ -117,7 +117,7 @@ const router = useRouter() | ... | @@ -117,7 +117,7 @@ const router = useRouter() |
| 117 | const route = useRoute() | 117 | const route = useRoute() |
| 118 | const form = ref({}) | 118 | const form = ref({}) |
| 119 | const query = ref({ | 119 | const query = ref({ |
| 120 | hotelId: route.params.id | 120 | hotelId: route.query.id |
| 121 | }) | 121 | }) |
| 122 | const loading = ref(false) | 122 | const loading = ref(false) |
| 123 | const roomList = ref([]) | 123 | const roomList = ref([]) |
| ... | @@ -135,7 +135,7 @@ function getData() { | ... | @@ -135,7 +135,7 @@ function getData() { |
| 135 | }).catch(err => { | 135 | }).catch(err => { |
| 136 | console.log(err) | 136 | console.log(err) |
| 137 | }) | 137 | }) |
| 138 | console.log('params',route.params) | 138 | query.value.hotelId = route.query.id |
| 139 | getHotelRooms(query.value).then(res => { | 139 | getHotelRooms(query.value).then(res => { |
| 140 | roomList.value = res.rows | 140 | roomList.value = res.rows |
| 141 | }) | 141 | }) | ... | ... |
| ... | @@ -5,7 +5,7 @@ | ... | @@ -5,7 +5,7 @@ |
| 5 | <div slot="header"> | 5 | <div slot="header"> |
| 6 | <div class="bg-lineg">{{ language == 0 ? '酒店预约下单' : 'Hotel booking order' }}</div> | 6 | <div class="bg-lineg">{{ language == 0 ? '酒店预约下单' : 'Hotel booking order' }}</div> |
| 7 | </div> | 7 | </div> |
| 8 | 8 | {{room}} | |
| 9 | <el-row class="pd20" :gutter="20"> | 9 | <el-row class="pd20" :gutter="20"> |
| 10 | <el-col :span="14" > | 10 | <el-col :span="14" > |
| 11 | <div class="border-info"> | 11 | <div class="border-info"> |
| ... | @@ -43,8 +43,8 @@ | ... | @@ -43,8 +43,8 @@ |
| 43 | <el-form-item v-for="(n,index) in form.roomNum" :key="index" :label="`入住人${index+1}`"> | 43 | <el-form-item v-for="(n,index) in form.roomNum" :key="index" :label="`入住人${index+1}`"> |
| 44 | <el-input v-model="rzUserArr[index]" placeholder="每间填一位住客姓名"/> | 44 | <el-input v-model="rzUserArr[index]" placeholder="每间填一位住客姓名"/> |
| 45 | </el-form-item> | 45 | </el-form-item> |
| 46 | <el-form-item label="预计到店"> | 46 | <el-form-item :label="language==0?'预计到店':'Expected check-in'"> |
| 47 | <el-select v-model="form.ddDate" placeholder="请选择预计到店时间"> | 47 | <el-select v-model="form.ddDate" :placeholder="language==0?'请选择预计到店时间':'Please select the expected check-in time'"> |
| 48 | <el-option | 48 | <el-option |
| 49 | v-for="item in ddDateArr" | 49 | v-for="item in ddDateArr" |
| 50 | :key="item.value" | 50 | :key="item.value" |
| ... | @@ -53,21 +53,24 @@ | ... | @@ -53,21 +53,24 @@ |
| 53 | /> | 53 | /> |
| 54 | </el-select> | 54 | </el-select> |
| 55 | </el-form-item> | 55 | </el-form-item> |
| 56 | <el-form-item label="联系电话"> | 56 | <el-form-item :label="language==0?'联系电话':'Contact phone'"> |
| 57 | <el-input v-model="form.phone"/> | 57 | <el-input v-model="form.phone"/> |
| 58 | </el-form-item> | 58 | </el-form-item> |
| 59 | 59 | ||
| 60 | <div v-if="room.addBedFlag=='1'"> | 60 | <div v-if="room.addBedFlag=='1'"> |
| 61 | <el-form-item label="是否加床"> | 61 | <el-form-item :label="language==0?'是否加床':'Extra bed'"> |
| 62 | <el-radio-group> | 62 | <el-radio-group v-model="form.isAddbed"> |
| 63 | <el-radio v-model="form.isAddbed" label="1">是</el-radio> | 63 | <el-radio label="1">{{ language==0?'是':'Yes' }}</el-radio> |
| 64 | <el-radio v-model="form.isAddbed" label="0">否</el-radio> | 64 | <el-radio label="0">{{ language==0?'否':'No' }}</el-radio> |
| 65 | </el-radio-group> | 65 | </el-radio-group> |
| 66 | </el-form-item> | 66 | </el-form-item> |
| 67 | <el-form-item label="加床张数"> | 67 | <el-form-item :label="language==0?'加床张数':'Extra bed num'"> |
| 68 | <el-input-number v-model="form.addNum" :min="0" :max="1" @change="changeBed" /> | 68 | <el-input-number v-model="form.addNum" :min="0" :max="1" @change="changeBed" /> |
| 69 | </el-form-item> | 69 | </el-form-item> |
| 70 | <div class="tip" v-if="form.isAddbed=='1'">* 一个房间最多加一张床</div> | 70 | <div class="tip" v-if="form.isAddbed=='1'">* |
| 71 | <span v-if="language == 0">一个房间最多加一张床</span> | ||
| 72 | <span v-else>A room can only add one bed</span> | ||
| 73 | </div> | ||
| 71 | </div> | 74 | </div> |
| 72 | </el-form> | 75 | </el-form> |
| 73 | </div> | 76 | </div> |
| ... | @@ -75,24 +78,28 @@ | ... | @@ -75,24 +78,28 @@ |
| 75 | <el-col :span="10"> | 78 | <el-col :span="10"> |
| 76 | <div class="leftboderTT">{{ language == 0 ? '订单明细' : 'Order details' }}</div> | 79 | <div class="leftboderTT">{{ language == 0 ? '订单明细' : 'Order details' }}</div> |
| 77 | <div class="border-rr mt20 pd20 ccitemBox"> | 80 | <div class="border-rr mt20 pd20 ccitemBox"> |
| 78 | <label> 房费 | 81 | <label> {{ language==0?'房费':'Room fee' }} |
| 79 | <span class="fr">¥{{(room.roomPrice*form.roomNum*choseRooms.length).toFixed(2)}}</span> | 82 | <span class="fr" v-if="language==0">{{ language==0?'¥':'€' }}{{(room.roomPrice*form.roomNum*choseRooms.length).toFixed(2)}}</span> |
| 83 | <span class="fr" v-else>{{ language==0?'¥':'€' }}{{(room.roomPriceEn*form.roomNum*choseRooms.length).toFixed(2)}}</span> | ||
| 80 | </label> | 84 | </label> |
| 81 | <div class="ccitem" v-for="(c, index) in choseRooms" :key="index"> | 85 | <div class="ccitem" v-for="(c, index) in choseRooms" :key="index"> |
| 82 | {{ c }} | 86 | {{ c }} |
| 83 | <text>{{form.roomNum}}*¥{{room.roomPrice}}</text> | 87 | <text v-if="language==0">{{form.roomNum}}*{{ language==0?'¥':'€' }}{{room.roomPrice}}</text> |
| 88 | <text v-else>{{form.roomNum}}*{{ language==0?'¥':'€' }}{{room.roomPriceEn}}</text> | ||
| 84 | </div> | 89 | </div> |
| 85 | 90 | ||
| 86 | <label v-if="form.isAddbed=='1'">加床费 | 91 | <label v-if="form.isAddbed=='1'">{{ language==0?'加床费':'Extra bed fee' }} |
| 87 | <span class="fr">¥{{(room.bedPrice*form.addNum*choseRooms.length).toFixed(2)}}</span> | 92 | <span class="fr" v-if="language==0">{{ language==0?'¥':'€' }}{{(room.bedPrice*form.addNum*choseRooms.length).toFixed(2)}}</span> |
| 93 | <span class="fr" v-else>{{ language==0?'¥':'€' }}{{(room.bedPriceEn*form.addNum*choseRooms.length).toFixed(2)}}</span> | ||
| 88 | </label> | 94 | </label> |
| 89 | 95 | ||
| 90 | <div v-if="form.isAddbed=='1'" class="ccitem" v-for="(c, index) in choseRooms" :key="index"> | 96 | <div v-if="form.isAddbed=='1'" class="ccitem" v-for="(c, index) in choseRooms" :key="index"> |
| 91 | {{ c }} | 97 | {{ c }} |
| 92 | <text>{{form.addNum}}*¥{{room.bedPrice}}</text> | 98 | <text v-if="language==0">{{form.addNum}}*{{ language==0?'¥':'€' }}{{room.bedPrice}}</text> |
| 99 | <text v-else>{{form.addNum}}*{{ language==0?'¥':'€' }}{{room.bedPriceEn}}</text> | ||
| 93 | </div> | 100 | </div> |
| 94 | 101 | ||
| 95 | <label>共计<span class="fr bigMoney">¥{{money}}</span></label> | 102 | <label class="bigMoney">{{ language==0?'共计':'Total' }}<span class="fr bigMoney">{{ language==0?'¥':'€' }}{{money}}</span></label> |
| 96 | 103 | ||
| 97 | </div> | 104 | </div> |
| 98 | </el-col> | 105 | </el-col> |
| ... | @@ -119,6 +126,7 @@ const hotelName = ref('') | ... | @@ -119,6 +126,7 @@ const hotelName = ref('') |
| 119 | const canOrderStart = ref('') | 126 | const canOrderStart = ref('') |
| 120 | const canOrderNum = ref(0) | 127 | const canOrderNum = ref(0) |
| 121 | const form = ref({ | 128 | const form = ref({ |
| 129 | isAddbed: '0', | ||
| 122 | roomNum: 0, | 130 | roomNum: 0, |
| 123 | addNum: 0 | 131 | addNum: 0 |
| 124 | }) | 132 | }) |
| ... | @@ -271,8 +279,14 @@ function getDate(datestr) { | ... | @@ -271,8 +279,14 @@ function getDate(datestr) { |
| 271 | return date | 279 | return date |
| 272 | } | 280 | } |
| 273 | function countMoney() { | 281 | function countMoney() { |
| 282 | if(language.value == 0){ | ||
| 274 | money.value = ((room.value.roomPrice * form.value.roomNum * usedays) + (room.value.bedPrice * form.value | 283 | money.value = ((room.value.roomPrice * form.value.roomNum * usedays) + (room.value.bedPrice * form.value |
| 275 | .addNum * usedays)).toFixed(2) | 284 | .addNum * usedays)).toFixed(2) |
| 285 | |||
| 286 | } else { | ||
| 287 | money.value = ((room.value.roomPriceEn * form.value.roomNum * usedays) + (room.value.bedPriceEn * form.value | ||
| 288 | .addNum * usedays)).toFixed(2) | ||
| 289 | } | ||
| 276 | // console.log(usedays,money.value) | 290 | // console.log(usedays,money.value) |
| 277 | } | 291 | } |
| 278 | function submit() { | 292 | function submit() { |
| ... | @@ -352,7 +366,7 @@ function submit() { | ... | @@ -352,7 +366,7 @@ function submit() { |
| 352 | label { | 366 | label { |
| 353 | margin: 10px 0; | 367 | margin: 10px 0; |
| 354 | display: block; | 368 | display: block; |
| 355 | 369 | min-height: 30px; | |
| 356 | span { | 370 | span { |
| 357 | color: #FF8124;font-family: DIN Alternate; | 371 | color: #FF8124;font-family: DIN Alternate; |
| 358 | font-size: 24px; | 372 | font-size: 24px; |
| ... | @@ -363,9 +377,9 @@ function submit() { | ... | @@ -363,9 +377,9 @@ function submit() { |
| 363 | .ccitem { | 377 | .ccitem { |
| 364 | display: flex; | 378 | display: flex; |
| 365 | justify-content: space-between; | 379 | justify-content: space-between; |
| 366 | font-size: 14px; | 380 | font-size: 15px; |
| 367 | color: #666; | 381 | color: #666; |
| 368 | margin: 5px 0; | 382 | margin: 5px 0 10px; |
| 369 | 383 | ||
| 370 | label { | 384 | label { |
| 371 | font-size: 16px; | 385 | font-size: 16px; | ... | ... |
-
Please register or sign in to post a comment