|
|
@ -1,374 +1,387 @@ |
|
|
|
<template> |
|
|
|
<view class="bg"> |
|
|
|
<view class="detail-container"> |
|
|
|
<view class="common-container info-container"> |
|
|
|
<view class="flex-between" style="align-items: flex-start;"> |
|
|
|
<view class="info-title text-overflowRows">{{skuInfo.sku_name}}</view> |
|
|
|
<view class="policy-btn flex-shrink-0 flex flex-items-center" @click="openPopRule"> |
|
|
|
房型信息 |
|
|
|
<uni-icons color="#71B580" style="height: 32rpx;" type="right" size="12"></uni-icons> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
|
|
|
|
<view class="tag-container text-overflow"> |
|
|
|
{{skuInfo.sku_model.bed_type}} | {{skuInfo.sku_model.area}} |
|
|
|
| {{skuInfo.sku_model.window}} | 可入住{{skuInfo.sku_model.max_room_num}}人 |
|
|
|
| {{skuInfo.sku_model.breakfast}} |
|
|
|
</view> |
|
|
|
|
|
|
|
<view class="order-time flex-between" style="justify-content: space-around;"> |
|
|
|
<view class="time"> |
|
|
|
<view style="font-size: 35rpx;font-weight: bold;"> |
|
|
|
{{new Date(selectDate.startDay).Format('MM-dd')}}</view> |
|
|
|
<view style="padding-left:14rpx">{{ ShowDateDay(new Date(selectDate.startDay).getDay()) }} |
|
|
|
</view> |
|
|
|
<view>入住</view> |
|
|
|
</view> |
|
|
|
<view class="cal-day"> |
|
|
|
共{{selectDate.differDays}}晚 |
|
|
|
</view> |
|
|
|
<view class="time"> |
|
|
|
<view style="font-size: 35rpx;font-weight: bold;"> |
|
|
|
{{new Date(selectDate.endDay).Format('MM-dd')}}</view> |
|
|
|
<view style="padding-left:14rpx">{{ShowDateDay(new Date(selectDate.endDay).getDay()) }}</view> |
|
|
|
<view>离店</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
|
|
|
|
<view class="notice-container"> |
|
|
|
<view class="flex" style="align-items: center;"> |
|
|
|
<view class="flex-shrink-0" style="padding-top: 4rpx;"> |
|
|
|
<image src="https://static.ticket.sz-trip.com/shiweisuzhou/images/homestay/dui.png"></image> |
|
|
|
</view> |
|
|
|
<view class="flex-1 w-1rpx" style="padding-left: 14rpx;"> |
|
|
|
<view v-html="formateRichText(skuInfo.sku_model.bookinfo)"></view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
|
|
|
|
<view class="flex" style="padding-top: 22rpx;align-items: center;"> |
|
|
|
<view class="flex-shrink-0" style="padding-top: 4rpx;"> |
|
|
|
<image src="https://static.ticket.sz-trip.com/shiweisuzhou/images/homestay/tanhao.png"> |
|
|
|
</image> |
|
|
|
</view> |
|
|
|
<view class="flex-1 w-1rpx" style="padding-left: 14rpx;"> |
|
|
|
<view>证件要求:大陆居民身份证登记入住</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
|
|
|
|
</view> |
|
|
|
|
|
|
|
</view> |
|
|
|
|
|
|
|
<view class="common-container form-container"> |
|
|
|
<view class="form-title"> |
|
|
|
<text style="font-weight: bold;font-size: 35rpx;padding-right: 28rpx;">预订信息</text> |
|
|
|
<text>姓名需与证件一致</text> |
|
|
|
</view> |
|
|
|
<view class="btn-box flex-column"> |
|
|
|
<view class="line w-full" style="border-top: none;"> |
|
|
|
<view class="left">房间数</view> |
|
|
|
<view class="input flex" style="justify-content: flex-end;"> |
|
|
|
<view class="num-box"> |
|
|
|
<view :class="['ctrl',buyNum>1?'':'disabled']" @click="reduce()">-</view> |
|
|
|
<input class="num" type="text" v-model="buyNum" :disabled='true' /> |
|
|
|
<view :class="['ctrl']" @click="plus()">+</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
<view class="line w-full" v-for="(user,index) in roomUser" :key="index"> |
|
|
|
<view class="left">房间{{index+1}}</view> |
|
|
|
<input class="input" type="text" placeholder="请输入住客姓名" v-model="user.name" /> |
|
|
|
</view> |
|
|
|
<view class="line w-full"> |
|
|
|
<view class="left">联系电话</view> |
|
|
|
<view class="flex flex-items-center input"> |
|
|
|
<input class="input" type="text" placeholder="请输入联系手机号" v-model="phone" /> |
|
|
|
<uni-icons v-if="phone.length>0" style="margin-left: 30rpx;" type="closeempty" size="14" |
|
|
|
@click="phone = ''"></uni-icons> |
|
|
|
</view> |
|
|
|
|
|
|
|
</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
|
|
|
|
<navigator :url="'/subPackages/order/orderCoupon?allprice='+ price + '&sku_ids='+ skuInfo.id" class="coupon-box flex-between"> |
|
|
|
<text>优惠券</text> |
|
|
|
<view style="display: flex;align-items: center;"> |
|
|
|
<view class="add-btn" v-if="!coupon">选择优惠券</view> |
|
|
|
<view style="display: flex;align-items: center;color: #6A8A2D;font-weight: bold;" v-if="coupon && coupon.activity"> |
|
|
|
<view v-if="coupon.activity.discount_type == 'pricebreak'">-¥{{coupon.activity.money/100}}</view> |
|
|
|
<view v-else>{{coupon.activity.fold}}折</view> |
|
|
|
</view> |
|
|
|
<img src="https://static.ticket.sz-trip.com/changyoutaihu/images/user/rightIcon.png" class="icon-coupon"> |
|
|
|
</view> |
|
|
|
</navigator> |
|
|
|
|
|
|
|
</view> |
|
|
|
|
|
|
|
|
|
|
|
<view class="btn-list"> |
|
|
|
<view class="price-box"> |
|
|
|
<view class="text">合计:</view> |
|
|
|
<view class="price">{{ total() / 100 }}</view> |
|
|
|
<!-- <view class="post-text" v-if="sendType==1&&post">含邮费:¥{{ post / 100 }}</view> --> |
|
|
|
</view> |
|
|
|
<view class="btn" @click="order()">立即预订</view> |
|
|
|
</view> |
|
|
|
|
|
|
|
<!-- 酒店详情弹窗 --> |
|
|
|
<uni-popup ref="popupRule" type="bottom" :safe-area="false" background-color="#F7F7F7"> |
|
|
|
<view class="popup-content-date"> |
|
|
|
<view class="popup-content-title flex"> |
|
|
|
<view class="flex-1 w-1rpx text-overflow"> |
|
|
|
{{skuInfo.sku_name}} |
|
|
|
</view> |
|
|
|
<img src="https://static.ticket.sz-trip.com/taizhou/images/cha.png" @click="closePopupRule" |
|
|
|
style="width: 31rpx;height: 31rpx;" class="flex-shrink-0"> |
|
|
|
</view> |
|
|
|
<view class="content"> |
|
|
|
<view class="swipe-box" style="height: 347rpx;" v-if="skuInfo.listimg && skuInfo.listimg.length > 0"> |
|
|
|
<swiper class="swiper" :autoplay="true" :interval="3000" :duration="1000" circular |
|
|
|
indicator-dots indicator-color="rgba(255,255,255,.5)" indicator-active-color="#fff" |
|
|
|
@change="popSwiperChange" :current="0"> |
|
|
|
<swiper-item v-for="(item, index) in skuInfo.listimg" :key="item.id"> |
|
|
|
<view class="swiper-item" style="height: 347rpx;"> |
|
|
|
<image class="item-img pop-swiper-image" :src="showImg(item)" mode="aspectFill"> |
|
|
|
</image> |
|
|
|
</view> |
|
|
|
</swiper-item> |
|
|
|
</swiper> |
|
|
|
|
|
|
|
<view class="swiper-pointer" style="right:30rpx;bottom: 20rpx;"> |
|
|
|
{{popSwiperCurrent}}/{{skuInfo.listimg.length}} |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
|
|
|
|
<view class="pop-detail-container"> |
|
|
|
<view class="pop-detail-title">房型信息</view> |
|
|
|
<view v-html="formateRichText(skuInfo.sku_model.detailinfo)"></view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
</uni-popup> |
|
|
|
|
|
|
|
|
|
|
|
</view> |
|
|
|
<view class="bg"> |
|
|
|
<!-- 循环渲染每个订单信息 --> |
|
|
|
<view class="detail-container" v-for="(order, index) in skuInfo" :key="index"> |
|
|
|
<view class="common-container info-container"> |
|
|
|
<view class="flex-between" style="align-items: flex-start;"> |
|
|
|
<view class="info-title text-overflowRows">{{order.sku_name}}</view> |
|
|
|
<view class="policy-btn flex-shrink-0 flex flex-items-center" @click="openPopRule(index)"> |
|
|
|
房型信息 |
|
|
|
<uni-icons color="#71B580" style="height: 32rpx;" type="right" size="12"></uni-icons> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
|
|
|
|
<view class="tag-container text-overflow"> |
|
|
|
{{order.sku_model.bed_type}} | {{order.sku_model.area}} |
|
|
|
| {{order.sku_model.window}} | 可入住{{order.sku_model.max_room_num}}人 |
|
|
|
| {{order.sku_model.breakfast}} |
|
|
|
</view> |
|
|
|
|
|
|
|
<view class="order-time flex-between" style="justify-content: space-around;"> |
|
|
|
<view class="time"> |
|
|
|
<view style="font-size: 35rpx;font-weight: bold;"> |
|
|
|
{{new Date(order.selectDate.startDay).Format('MM-dd')}}</view> |
|
|
|
<view style="padding-left:14rpx">{{ ShowDateDay(new Date(order.selectDate.startDay).getDay()) }} |
|
|
|
</view> |
|
|
|
<view>入住</view> |
|
|
|
</view> |
|
|
|
<view class="cal-day"> |
|
|
|
共{{order.selectDate.differDays}}晚 |
|
|
|
</view> |
|
|
|
<view class="time"> |
|
|
|
<view style="font-size: 35rpx;font-weight: bold;"> |
|
|
|
{{new Date(order.selectDate.endDay).Format('MM-dd')}}</view> |
|
|
|
<view style="padding-left:14rpx">{{ShowDateDay(new Date(order.selectDate.endDay).getDay()) }}</view> |
|
|
|
<view>离店</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
|
|
|
|
<view class="notice-container"> |
|
|
|
<view class="flex" style="align-items: center;"> |
|
|
|
<view class="flex-shrink-0" style="padding-top: 4rpx;"> |
|
|
|
<image src="https://static.ticket.sz-trip.com/shiweisuzhou/images/homestay/dui.png"></image> |
|
|
|
</view> |
|
|
|
<view class="flex-1 w-1rpx" style="padding-left: 14rpx;"> |
|
|
|
<view v-html="formateRichText(order.sku_model.bookinfo)"></view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
|
|
|
|
<view class="flex" style="padding-top: 22rpx;align-items: center;"> |
|
|
|
<view class="flex-shrink-0" style="padding-top: 4rpx;"> |
|
|
|
<image src="https://static.ticket.sz-trip.com/shiweisuzhou/images/homestay/tanhao.png"> |
|
|
|
</image> |
|
|
|
</view> |
|
|
|
<view class="flex-1 w-1rpx" style="padding-left: 14rpx;"> |
|
|
|
<view>证件要求:大陆居民身份证登记入住</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
|
|
|
|
</view> |
|
|
|
|
|
|
|
</view> |
|
|
|
|
|
|
|
<view class="common-container form-container"> |
|
|
|
<view class="form-title"> |
|
|
|
<text style="font-weight: bold;font-size: 35rpx;padding-right: 28rpx;">预订信息</text> |
|
|
|
<text>姓名需与证件一致</text> |
|
|
|
</view> |
|
|
|
<view class="btn-box flex-column"> |
|
|
|
<view class="line w-full" style="border-top: none;"> |
|
|
|
<view class="left">房间数</view> |
|
|
|
<view class="input flex" style="justify-content: flex-end;"> |
|
|
|
<view class="num-box"> |
|
|
|
<view :class="['ctrl',order.buyNum>1?'':'disabled']" @click="reduce(order,index)">-</view> |
|
|
|
<input class="num" type="text" v-model="order.buyNum" :disabled='true' /> |
|
|
|
<view :class="['ctrl']" @click="plus(order,index)">+</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
<view class="line w-full" v-for="(user, idx) in roomUser[index]" :key="idx"> |
|
|
|
<view class="left">房间{{idx+1}}</view> |
|
|
|
<input class="input" type="text" placeholder="请输入住客姓名" v-model="user.name" /> |
|
|
|
</view> |
|
|
|
<view class="line w-full"> |
|
|
|
<view class="left">联系电话</view> |
|
|
|
<view class="flex flex-items-center input"> |
|
|
|
<input class="input" type="text" placeholder="请输入联系手机号" v-model="order.phone" /> |
|
|
|
<!-- <uni-icons v-if="order.phone.length>0" style="margin-left: 30rpx;" type="closeempty" size="14" |
|
|
|
@click="order.phone = ''"></uni-icons> --> |
|
|
|
</view> |
|
|
|
|
|
|
|
</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
|
|
|
|
<navigator :url="'/subPackages/order/orderCoupon?allprice='+ price + '&sku_ids='+ skuIds" class="coupon-box flex-between" v-if="!isShoppingCart"> |
|
|
|
<text>优惠券</text> |
|
|
|
<view style="display: flex;align-items: center;"> |
|
|
|
<view class="add-btn" v-if="!coupon">选择优惠券</view> |
|
|
|
<view style="display: flex;align-items: center;color: #6A8A2D;font-weight: bold;" v-if="coupon && coupon.activity"> |
|
|
|
<view v-if="coupon.activity.discount_type == 'pricebreak'">-¥{{coupon.activity.money/100}}</view> |
|
|
|
<view v-else>{{coupon.activity.fold}}折</view> |
|
|
|
</view> |
|
|
|
<img src="https://static.ticket.sz-trip.com/changyoutaihu/images/user/rightIcon.png" class="icon-coupon"> |
|
|
|
</view> |
|
|
|
</navigator> |
|
|
|
|
|
|
|
<view class="btn-list"> |
|
|
|
<view class="price-box"> |
|
|
|
<view class="text">合计:</view> |
|
|
|
<view class="price">{{ total() / 100 }}</view> |
|
|
|
<!-- <view class="post-text" v-if="sendType==1&&post">含邮费:¥{{ post / 100 }}</view> --> |
|
|
|
</view> |
|
|
|
<view class="btn" @click="order()">立即预订</view> |
|
|
|
</view> |
|
|
|
|
|
|
|
<!-- 酒店详情弹窗 --> |
|
|
|
<uni-popup ref="popupRule" type="bottom" :safe-area="false" background-color="#F7F7F7"> |
|
|
|
<view class="popup-content-date"> |
|
|
|
<view class="popup-content-title flex"> |
|
|
|
<view class="flex-1 w-1rpx text-overflow"> |
|
|
|
{{skuInfo[popupIndex].sku_name}} |
|
|
|
</view> |
|
|
|
<img src="https://static.ticket.sz-trip.com/taizhou/images/cha.png" @click="closePopupRule" |
|
|
|
style="width: 31rpx;height: 31rpx;" class="flex-shrink-0"> |
|
|
|
</view> |
|
|
|
<view class="content"> |
|
|
|
<view class="swipe-box" style="height: 347rpx;" v-if="skuInfo[popupIndex] && skuInfo[popupIndex].listimg && skuInfo[popupIndex].listimg.length > 0"> |
|
|
|
<swiper class="swiper" :autoplay="true" :interval="3000" :duration="1000" circular |
|
|
|
indicator-dots indicator-color="rgba(255,255,255,.5)" indicator-active-color="#fff" |
|
|
|
@change="popSwiperChange" :current="0"> |
|
|
|
<swiper-item v-for="(item, idx) in skuInfo[popupIndex].listimg" :key="item.id"> |
|
|
|
<view class="swiper-item" style="height: 347rpx;"> |
|
|
|
<image class="item-img pop-swiper-image" :src="showImg(item)" mode="aspectFill"> |
|
|
|
</image> |
|
|
|
</view> |
|
|
|
</swiper-item> |
|
|
|
</swiper> |
|
|
|
|
|
|
|
<view class="swiper-pointer" style="right:30rpx;bottom: 20rpx;"> |
|
|
|
{{popSwiperCurrent}}/{{skuInfo[popupIndex].listimg.length}} |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
|
|
|
|
<view class="pop-detail-container" v-if="skuInfo[popupIndex] && skuInfo[popupIndex].sku_model"> |
|
|
|
<view class="pop-detail-title">房型信息</view> |
|
|
|
<view v-html="formateRichText(skuInfo[popupIndex].sku_model.detailinfo)"></view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
</uni-popup> |
|
|
|
|
|
|
|
|
|
|
|
</view> |
|
|
|
</template> |
|
|
|
|
|
|
|
<script> |
|
|
|
export default { |
|
|
|
data() { |
|
|
|
return { |
|
|
|
id: null, |
|
|
|
popSwiperCurrent: 1, |
|
|
|
|
|
|
|
skuInfo: {}, // 酒店信息 |
|
|
|
|
|
|
|
selectDate: { |
|
|
|
startDay: new Date().Format('yyyy-MM-dd'), |
|
|
|
endDay: new Date((new Date()).getFullYear(), (new Date()).getMonth(), new Date().getDate() + 1).Format( |
|
|
|
'yyyy-MM-dd'), |
|
|
|
differDays: 1 |
|
|
|
}, |
|
|
|
|
|
|
|
phone: '', |
|
|
|
buyNum: 1, |
|
|
|
roomUser: [{ |
|
|
|
name: '' |
|
|
|
}], |
|
|
|
allSeldDate: [], |
|
|
|
coupon: '', |
|
|
|
price: 0 |
|
|
|
} |
|
|
|
}, |
|
|
|
onReady() { |
|
|
|
// 清除优惠券 |
|
|
|
this.$store.commit("choseCoupon", ""); |
|
|
|
}, |
|
|
|
onShow() { |
|
|
|
this.coupon = this.$store.state.user.coupon |
|
|
|
console.log(this.coupon) |
|
|
|
}, |
|
|
|
onLoad(options) { |
|
|
|
this.initOrderDate() |
|
|
|
}, |
|
|
|
methods: { |
|
|
|
popSwiperChange(e) { |
|
|
|
this.popSwiperCurrent = e.detail.current + 1 |
|
|
|
}, |
|
|
|
|
|
|
|
// 初始化 |
|
|
|
initOrderDate() { |
|
|
|
let data = {} |
|
|
|
try { |
|
|
|
data = JSON.parse(uni.getStorageSync('hotelOrderInfo')); |
|
|
|
console.log(data) |
|
|
|
} catch (e) { |
|
|
|
data = {} |
|
|
|
setTimeout(() => { |
|
|
|
uni.navigateBack() |
|
|
|
}, 1000) |
|
|
|
} |
|
|
|
|
|
|
|
this.skuInfo = data.skuInfo |
|
|
|
this.selectDate = data.selectDate |
|
|
|
this.buyNum = 1 |
|
|
|
this.roomUser = [{ |
|
|
|
name: '' |
|
|
|
}] |
|
|
|
try { |
|
|
|
this.phone = JSON.parse(uni.getStorageSync('userInfo')).mobile |
|
|
|
} catch (e) { |
|
|
|
this.phone = '' |
|
|
|
} |
|
|
|
|
|
|
|
this.getPriceCal(this.skuInfo.id) |
|
|
|
|
|
|
|
}, |
|
|
|
// 查看房型 |
|
|
|
viewDetail() { |
|
|
|
this.popSwiperCurrent = 1 |
|
|
|
this.openPopRule() |
|
|
|
}, |
|
|
|
|
|
|
|
plus() { |
|
|
|
this.buyNum += 1; |
|
|
|
this.roomUser.push({ |
|
|
|
name: '' |
|
|
|
}) |
|
|
|
}, |
|
|
|
reduce() { |
|
|
|
if (this.buyNum > 1) { |
|
|
|
this.buyNum -= 1; |
|
|
|
this.roomUser.pop() |
|
|
|
} |
|
|
|
}, |
|
|
|
|
|
|
|
total() { |
|
|
|
let disfferMoney = 0 |
|
|
|
this.allSeldDate.forEach(v => { |
|
|
|
disfferMoney += (v.price || 0) |
|
|
|
}) |
|
|
|
this.price = ((disfferMoney * this.buyNum) || 0).toFixed(2) |
|
|
|
|
|
|
|
if(this.coupon) { |
|
|
|
if (this.coupon.activity.discount_type == 'pricebreak') { |
|
|
|
disfferMoney = disfferMoney - this.coupon.activity.money |
|
|
|
} else{ |
|
|
|
disfferMoney = disfferMoney - (disfferMoney * this.coupon.activity.fold/10) |
|
|
|
} |
|
|
|
} |
|
|
|
return disfferMoney < 0 ? 0 : disfferMoney |
|
|
|
}, |
|
|
|
|
|
|
|
order() { |
|
|
|
this.roomUser.forEach(v => v.name = v.name.trim()) |
|
|
|
// 校验 |
|
|
|
if (!this.IsTel(this.phone)) { |
|
|
|
uni.showToast({ |
|
|
|
title: '手机号格式校验失败', |
|
|
|
icon: 'none' |
|
|
|
}); |
|
|
|
return; |
|
|
|
} |
|
|
|
if (this.roomUser.some(v => { |
|
|
|
return v.name.length == 0 |
|
|
|
})) { |
|
|
|
uni.showToast({ |
|
|
|
title: '请输入住客姓名', |
|
|
|
icon: 'none' |
|
|
|
}); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
let roomNames = [] |
|
|
|
this.roomUser.forEach(item => { |
|
|
|
roomNames.push(item.name) |
|
|
|
}) |
|
|
|
|
|
|
|
if (roomNames.length != Array.from(new Set(roomNames)).length) { |
|
|
|
uni.showToast({ |
|
|
|
title: '住客姓名不能相同', |
|
|
|
icon: 'none' |
|
|
|
export default { |
|
|
|
data() { |
|
|
|
return { |
|
|
|
id: null, |
|
|
|
popSwiperCurrent: 1, |
|
|
|
popupIndex: 0, |
|
|
|
|
|
|
|
skuInfo: [], // 酒店信息数组 |
|
|
|
roomUser: [], |
|
|
|
allSeldDate: [], |
|
|
|
coupon: '', |
|
|
|
price: 0, |
|
|
|
skuIds: [], |
|
|
|
isShoppingCart: 0, |
|
|
|
orderList: [] |
|
|
|
} |
|
|
|
}, |
|
|
|
onReady() { |
|
|
|
// 清除优惠券 |
|
|
|
this.$store.commit("choseCoupon", ""); |
|
|
|
}, |
|
|
|
onShow() { |
|
|
|
this.coupon = this.$store.state.user.coupon |
|
|
|
console.log(this.coupon) |
|
|
|
}, |
|
|
|
onLoad(options) { |
|
|
|
if(options.isShoppingCart) this.isShoppingCart = options.isShoppingCart |
|
|
|
this.initOrderDate() |
|
|
|
}, |
|
|
|
methods: { |
|
|
|
popSwiperChange(e) { |
|
|
|
this.popSwiperCurrent = e.detail.current + 1 |
|
|
|
}, |
|
|
|
|
|
|
|
// 初始化 |
|
|
|
initOrderDate() { |
|
|
|
let data = []; |
|
|
|
try { |
|
|
|
data = JSON.parse(uni.getStorageSync('hotelOrderInfo')); |
|
|
|
console.log(data) |
|
|
|
} catch (e) { |
|
|
|
data = []; |
|
|
|
setTimeout(() => { |
|
|
|
uni.navigateBack() |
|
|
|
}, 1000); |
|
|
|
} |
|
|
|
|
|
|
|
this.skuInfo = []; |
|
|
|
this.roomUser = []; |
|
|
|
|
|
|
|
data.forEach((item) => { |
|
|
|
this.skuInfo.push(item.skuInfo); |
|
|
|
this.skuIds.push(item.skuInfo.id); |
|
|
|
|
|
|
|
const num = item.skuInfo.buyNum || 1; |
|
|
|
// 根据 buyNum 创建对应数量的住客对象 |
|
|
|
const users = Array(num).fill().map(() => ({ name: '' })); |
|
|
|
this.roomUser.push(users); |
|
|
|
try { |
|
|
|
item.skuInfo.phone = (JSON.parse(uni.getStorageSync('userInfo')).mobile); |
|
|
|
} catch (e) { |
|
|
|
item.skuInfo.phone = ''; |
|
|
|
} |
|
|
|
this.getPriceCal(item.skuInfo); |
|
|
|
}); |
|
|
|
}, |
|
|
|
// 查看房型 |
|
|
|
viewDetail() { |
|
|
|
this.popSwiperCurrent = 1; |
|
|
|
this.openPopRule(); |
|
|
|
}, |
|
|
|
|
|
|
|
plus(order,index) { |
|
|
|
order.buyNum += 1; |
|
|
|
this.roomUser[index].push({ name: '' }); |
|
|
|
}, |
|
|
|
reduce(order,index) { |
|
|
|
if (order.buyNum > 1) { |
|
|
|
order.buyNum -= 1; |
|
|
|
this.roomUser[index].pop(); |
|
|
|
} |
|
|
|
}, |
|
|
|
|
|
|
|
total() { |
|
|
|
let totalMoney = 0; |
|
|
|
this.skuInfo.forEach((item, index) => { |
|
|
|
let disfferMoney = 0; |
|
|
|
if(item.allSeldDate && item.allSeldDate.length > 0) { |
|
|
|
item.allSeldDate.forEach(v => { |
|
|
|
disfferMoney += (v.price || 0); |
|
|
|
}); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
let data = { |
|
|
|
coupon_id: this.coupon ? this.coupon.id : null, |
|
|
|
product_list: [ |
|
|
|
{ |
|
|
|
type: 'hotel', |
|
|
|
customer_name: roomNames.toString(), |
|
|
|
reserve_mobile: this.phone, |
|
|
|
product_id: this.skuInfo.product_id, |
|
|
|
sku_id: this.skuInfo.id, |
|
|
|
start_date: this.selectDate.startDay, |
|
|
|
end_date: this.selectDate.endDay, |
|
|
|
product_num: this.buyNum |
|
|
|
} |
|
|
|
] |
|
|
|
} |
|
|
|
disfferMoney = ((disfferMoney * item.buyNum) || 0); |
|
|
|
totalMoney += disfferMoney < 0 ? 0 : disfferMoney; |
|
|
|
}); |
|
|
|
this.price = totalMoney |
|
|
|
if (this.coupon) { |
|
|
|
if (this.coupon.activity.discount_type == 'pricebreak') { |
|
|
|
totalMoney = totalMoney - this.coupon.activity.money; |
|
|
|
} else { |
|
|
|
totalMoney = totalMoney - (totalMoney * this.coupon.activity.fold / 10); |
|
|
|
} |
|
|
|
} |
|
|
|
return totalMoney; |
|
|
|
}, |
|
|
|
|
|
|
|
order() { |
|
|
|
this.roomUser.forEach((users, index) => { |
|
|
|
users.forEach(v => v.name = v.name.trim()); |
|
|
|
}); |
|
|
|
|
|
|
|
// 校验 |
|
|
|
for (let i = 0; i < this.skuInfo.length; i++) { |
|
|
|
if (!this.IsTel(this.skuInfo[i].phone)) { |
|
|
|
uni.showToast({ |
|
|
|
title: '手机号格式校验失败', |
|
|
|
icon: 'none' |
|
|
|
}); |
|
|
|
return; |
|
|
|
} |
|
|
|
if (this.roomUser[i].some(v => { |
|
|
|
return v.name.length == 0; |
|
|
|
})) { |
|
|
|
uni.showToast({ |
|
|
|
title: '请输入住客姓名', |
|
|
|
icon: 'none' |
|
|
|
}); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
let roomNames = []; |
|
|
|
this.roomUser[i].forEach(item => { |
|
|
|
roomNames.push(item.name); |
|
|
|
}); |
|
|
|
|
|
|
|
if (roomNames.length != Array.from(new Set(roomNames)).length) { |
|
|
|
uni.showToast({ |
|
|
|
title: '住客姓名不能相同', |
|
|
|
icon: 'none' |
|
|
|
}); |
|
|
|
return; |
|
|
|
} |
|
|
|
this.skuInfo[i].roomNames = roomNames |
|
|
|
} |
|
|
|
// 如果是购物车下单 |
|
|
|
if (this.isShoppingCart) { |
|
|
|
this.$store.commit("changeHotelOrderList", this.skuInfo); |
|
|
|
uni.setStorageSync("hotelOrderList", this.skuInfo) |
|
|
|
this.goCartNextPage(4) |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
console.log('data',data) |
|
|
|
|
|
|
|
this.Post({ |
|
|
|
method: 'POST', |
|
|
|
data: JSON.stringify(data) |
|
|
|
}, '/api/order/create').then(res => { |
|
|
|
console.log('成功'); |
|
|
|
if (res.code == 1) { |
|
|
|
uni.removeStorageSync('hotelOrderInfo') |
|
|
|
this.Post({ |
|
|
|
order_id: res.data.order_id, |
|
|
|
pay_platform: "miniprogram", |
|
|
|
pay_method: 'abc' |
|
|
|
}, '/api/order/pay').then(res => { |
|
|
|
if (res.data) { |
|
|
|
uni.requestPayment({ |
|
|
|
nonceStr: res.data.nonceStr, |
|
|
|
package: res.data.package, |
|
|
|
paySign: res.data.paySign, |
|
|
|
signType: res.data.signType, |
|
|
|
timeStamp: res.data.timeStamp, |
|
|
|
complete() { |
|
|
|
uni.navigateTo({ |
|
|
|
url: '/subPackages/order/trades' |
|
|
|
}) |
|
|
|
} |
|
|
|
}) |
|
|
|
} |
|
|
|
}) |
|
|
|
} |
|
|
|
}) |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
closePopupRule() { |
|
|
|
this.$refs.popupRule.close() |
|
|
|
}, |
|
|
|
openPopRule() { |
|
|
|
this.$refs.popupRule.open() |
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
getPriceCal(skuId, goodId) { |
|
|
|
this.Post({ |
|
|
|
sku_id: skuId, |
|
|
|
start_date: this.selectDate.startDay, |
|
|
|
end_date: this.selectDate.endDay, |
|
|
|
}, '/api/product/product_date_price').then(res => { |
|
|
|
this.allSeldDate = res.data || [] |
|
|
|
|
|
|
|
if (this.allSeldDate.length > 0) { |
|
|
|
this.allSeldDate.pop() |
|
|
|
} |
|
|
|
|
|
|
|
}) |
|
|
|
}, |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
let data = { |
|
|
|
coupon_id: this.coupon ? this.coupon.id : null, |
|
|
|
product_list: this.skuInfo.map((order, index) => { |
|
|
|
let roomNames = this.roomUser[index].map(item => item.name); |
|
|
|
return { |
|
|
|
type: 'hotel', |
|
|
|
customer_name: roomNames.toString(), |
|
|
|
reserve_mobile: order.phone, |
|
|
|
product_id: order.product_id, |
|
|
|
sku_id: order.id, |
|
|
|
start_date: order.selectDate.startDay, |
|
|
|
end_date: order.selectDate.endDay, |
|
|
|
product_num: order.buyNum |
|
|
|
}; |
|
|
|
}) |
|
|
|
}; |
|
|
|
|
|
|
|
console.log('data', data); |
|
|
|
|
|
|
|
this.Post({ |
|
|
|
method: 'POST', |
|
|
|
data: JSON.stringify(data) |
|
|
|
}, '/api/order/create').then(res => { |
|
|
|
console.log('成功'); |
|
|
|
if (res.code == 1) { |
|
|
|
uni.removeStorageSync('hotelOrderInfo'); |
|
|
|
this.Post({ |
|
|
|
order_id: res.data.order_id, |
|
|
|
pay_platform: "miniprogram", |
|
|
|
pay_method: 'abc' |
|
|
|
}, '/api/order/pay').then(res => { |
|
|
|
if (res.data) { |
|
|
|
uni.requestPayment({ |
|
|
|
nonceStr: res.data.nonceStr, |
|
|
|
package: res.data.package, |
|
|
|
paySign: res.data.paySign, |
|
|
|
signType: res.data.signType, |
|
|
|
timeStamp: res.data.timeStamp, |
|
|
|
complete() { |
|
|
|
uni.navigateTo({ |
|
|
|
url: '/subPackages/order/trades' |
|
|
|
}); |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
}); |
|
|
|
}, |
|
|
|
|
|
|
|
closePopupRule() { |
|
|
|
this.$refs.popupRule.close(); |
|
|
|
}, |
|
|
|
openPopRule(index) { |
|
|
|
this.popupIndex = index; |
|
|
|
this.$refs.popupRule.open(); |
|
|
|
}, |
|
|
|
|
|
|
|
getPriceCal(sku) { |
|
|
|
this.Post({ |
|
|
|
sku_id: sku.id, |
|
|
|
start_date: sku.selectDate.startDay, |
|
|
|
end_date: sku.selectDate.endDay, |
|
|
|
}, '/api/product/product_date_price').then(res => { |
|
|
|
let seldDate = res.data || []; |
|
|
|
if (seldDate.length > 1) { |
|
|
|
seldDate.pop(); |
|
|
|
} |
|
|
|
sku.allSeldDate = seldDate; |
|
|
|
|
|
|
|
this.total() |
|
|
|
}); |
|
|
|
}, |
|
|
|
} |
|
|
|
} |
|
|
|
</script> |
|
|
|
|
|
|
|
<style scoped lang="scss"> |
|
|
@ -379,6 +392,7 @@ |
|
|
|
.bg { |
|
|
|
min-height: 100vh; |
|
|
|
background: #F8F8F8; |
|
|
|
padding-bottom: 200rpx; |
|
|
|
} |
|
|
|
|
|
|
|
.swipe-box { |
|
|
@ -453,7 +467,6 @@ |
|
|
|
.detail-container { |
|
|
|
width: 100%; |
|
|
|
padding: 26rpx; |
|
|
|
padding-bottom: 200rpx; |
|
|
|
} |
|
|
|
|
|
|
|
.common-container { |
|
|
@ -711,6 +724,7 @@ |
|
|
|
font-size: 31rpx; |
|
|
|
color: #000000; |
|
|
|
padding: 0 20rpx; |
|
|
|
margin: 20rpx 26rpx; |
|
|
|
|
|
|
|
.add-btn { |
|
|
|
width: 153rpx; |
|
|
|