酒店桌布为微信小程序
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

395 lines
8.0 KiB

<template>
<uv-popup ref="popup"
:round="30"
@change="$refs.couponPopup.close()"
bgColor="#f7f7f7">
<view class="content">
<!-- 地址 -->
<view class="address" @click="openAddress">
<image src="/static/image/address/selectIcon.png" mode=""></image>
<view>
{{ address.name }}
</view>
<view class="">
{{ address.addressDetail }}
</view>
<view class="icon">
<uv-icon size="30rpx" name="arrow-right"></uv-icon>
</view>
</view>
<!-- 优惠劵 -->
<!-- <view style="padding: 0 20rpx;
background-color: #fff;">
<uv-cell
icon="coupon"
title="优惠劵"
iconStyle="font-size: 34rpx;"
rightIconStyle="font-size: 34rpx;"
:value="couponText"
@click="$refs.couponPopup.open('bottom')"
isLink>
</uv-cell>
</view> -->
<view class="payInfoMessage">
<view style="font-weight: 900;">
下单说明
</view>
<view class="">
租金从物品确认收货开始计算{{ configList.depositPrice }}/
</view>
<view class="">
押金将按照面积计算每平方厘米1
</view>
</view>
<!-- 费用明细 -->
<view class="expense-detail">
<view class="title">
费用明细
</view>
<view class="detail" v-if="price">
<view>
应付款:¥{{ price }}
</view>
<!-- <view v-if="depositPrice">
押金:¥{{ depositPrice }}
</view> -->
<view
:key="index"
v-for="(depositItem, index) in depositPriceList">
<view class="">
押金:¥{{ depositItem.price }}
</view>
<view class="">
x{{ depositItem.num }}
</view>
</view>
<!-- <view v-if="washPrice">
水洗费:¥{{ washPrice.toFixed(2) }}
</view> -->
<view
:key="index"
v-for="(washItem, index) in washPriceList">
<view class="">
水洗费:¥{{ washItem.price }}
</view>
<view class="">
x{{ washItem.num }}
</view>
</view>
<view v-if="rentPrice">
租金:¥{{ rentPrice }}
</view>
<view v-if="getPrice().coupon">
优惠:-¥{{ getPrice().coupon }}
</view>
<view v-if="getPrice().price">
实付款:¥{{ getPrice().price }}
</view>
</view>
<uv-cell
icon="coupon"
title="押金优惠"
v-if="coupon.couponFlag"
iconStyle="font-size: 34rpx;"
rightIconStyle="font-size: 34rpx;">
<template #value>
<view class="coupon">
满{{ coupon.couponCondition }}立减{{ coupon.couponPrice }}
</view>
</template>
</uv-cell>
<uv-cell
icon="coupon"
title="租金优惠"
v-if="coupon.leaseCouponFlag"
iconStyle="font-size: 34rpx;"
rightIconStyle="font-size: 34rpx;">
<template #value>
<view class="coupon">
满{{ coupon.leaseCouponCondition }}立减{{ coupon.leaseCouponPrice }}
</view>
</template>
</uv-cell>
</view>
<!-- 提交按钮 -->
<view class="submit-btn">
<view class="r" @click="orderPay">
{{ submiitTitle }}
</view>
</view>
</view>
<uv-popup ref="couponPopup"
:round="30">
<couponList
ref="couponList"
height="60vh"
:depositPrice="depositPrice"
:washPrice="washPrice"
:rentPrice="rentPrice"
:useType="0"
@select="selectCoupon" />
</uv-popup>
<uv-popup ref="addressPopup" :round="30">
<addressList ref="addressList" height="60vh" @select="selectAddress" />
</uv-popup>
</uv-popup>
</template>
<script>
import addressList from '@/components/address/addressList.vue'
import couponList from './couponList.vue'
import { mapState } from 'vuex'
export default {
components: {
addressList,
couponList,
},
props: {
submiitTitle: {
default: '立即下单',
type: String,
},
price : {//总金额
default : 0
},
depositPrice: {//押金
default: 0
},
depositPriceList : {//押金列表
default: []
},
washPrice: {//水洗费
default: 0
},
washPriceList : {//水洗列表
default: []
},
rentPrice: {//租金
default: 0
},
},
computed : {
...mapState(['configList']),
},
data() {
return {
address: {
name: '请选择联系人',
addressDetail: '',
},
addressTotal: 0,
coupon : {
// price : 0,
},
couponText : '请选择',
}
},
methods: {
// 打开
open() {
this.$refs.popup.open('bottom')
// this.$refs.couponList.getData()
// this.$refs.couponPopup.close()
this.confCoupon()
// 获取地址列表
this.$refs.addressList.getAddressList().then(res => {
this.addressTotal = res.total
if (this.addressTotal != 0) {
this.address = res.records[0]
}
})
},
// 计算优惠金额
getPrice(){
// 减免押金
if(this.coupon.couponFlag &&
this.coupon.couponCondition <= this.depositPrice){
return {
coupon : this.coupon.couponPrice,
price : (this.price - this.coupon.couponPrice).toFixed(2),
}
}
// 减免租金
if(this.coupon.leaseCouponFlag &&
this.coupon.leaseCouponCondition <= this.rentPrice){
return {
coupon : this.coupon.leaseCouponPrice,
price : (this.price - this.coupon.leaseCouponPrice).toFixed(2),
}
}
return {}
},
// 选择优惠劵
selectCoupon(e){
this.couponText = e.couponName
this.coupon = e
this.$refs.couponPopup.close()
},
// 关闭
close() {
this.$refs.popup.close()
},
// 打开选择地址
openAddress() {
if (this.addressTotal == 0) {
this.$refs.popup.close()
return uni.navigateTo({
url: '/pages_order/mine/address?type=back'
})
}
this.$refs.addressPopup.open('bottom')
},
// 选择地址
selectAddress(e) {
this.address = e
this.$refs.addressPopup.close()
},
// 选择规格
selectUnit(item, index) {
this.unit = item
this.unitIndex = index
},
addCart() {
this.$api('cartAdd', {
id: this.detail.id,
skuId: this.unit.id,
}, res => {
if (res.code == 200) {
uni.showToast({
title: '添加成功',
});
this.$refs.popup.close()
}
})
},
orderPay() {
this.$emit('submit', {
addressId : this.address.id,
couponId : this.coupon.id
})
},
confCoupon(){
this.$api('confCoupon', res => {
if(res.code == 200){
this.coupon = res.result
}
})
},
}
}
</script>
<style scoped lang="scss">
.content {
max-height: 80vh;
overflow: hidden;
overflow-y: auto;
padding-top: 30rpx;
.address {
display: flex;
padding: 20rpx;
background-color: #fff;
margin-bottom: 20rpx;
image {
width: 30rpx;
height: 30rpx;
margin: 20rpx;
}
view {
margin: 20rpx;
overflow: hidden; //超出的文本隐藏
text-overflow: ellipsis; //溢出用省略号显示
white-space: nowrap; //溢出不换行
}
.icon {
margin-left: auto;
}
}
.payInfoMessage{
line-height: 50rpx;
padding: 20rpx;
background-color: #fff;
font-size: 28rpx;
}
.expense-detail {
padding: 30rpx;
background-color: #fff;
font-size: 28rpx;
.title {
font-weight: 600;
}
.detail {
background-color: #F6F6F6;
color: #717171;
margin: 10rpx 0;
padding: 10rpx 20rpx;
line-height: 50rpx;
&>view{
display: flex;
// justify-content: space-between;
// gap: 20rpx;
}
}
.coupon{
text-align: center;
color: #5c5;
}
}
.submit-btn {
width: 600rpx;
height: 80rpx;
color: #fff;
border-radius: 40rpx;
font-size: 28rpx;
margin: 20rpx auto;
display: flex;
justify-content: center;
align-items: center;
border: 1rpx solid $uni-color;
overflow: hidden;
.l {
flex: 1;
display: flex;
justify-content: center;
align-items: center;
color: $uni-color;
}
.r {
background: $uni-color;
flex: 1;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
}
}
}
</style>