|
|
@ -0,0 +1,455 @@ |
|
|
|
<template> |
|
|
|
<view class="page"> |
|
|
|
<navbar title="我要水洗" leftClick @leftClick="$utils.navigateBack" /> |
|
|
|
|
|
|
|
|
|
|
|
<view class="tabs"> |
|
|
|
<uv-tabs :list="tabs" :activeStyle="{color : '#FD5100', fontWeight : 600}" lineColor="#FD5100" lineHeight="8rpx" |
|
|
|
lineWidth="50rpx" :scrollable="false" @click="clickTabs"></uv-tabs> |
|
|
|
</view> |
|
|
|
|
|
|
|
<!-- 选择租赁物品 --> |
|
|
|
<view class="box d"> |
|
|
|
<uv-checkbox-group shape="circle" v-model="checkboxValue" |
|
|
|
> |
|
|
|
<view v-for="(item, index) in list" :key="index" class="item"> |
|
|
|
<view class="checkbox"> |
|
|
|
<!-- <uv-checkbox |
|
|
|
:name="item.id" |
|
|
|
:disabled="item.status != 0 |
|
|
|
|| !item.startTime && item.leaseFlag |
|
|
|
|| item.isWash" |
|
|
|
activeColor="#FA5A0A" |
|
|
|
size="40rpx" |
|
|
|
icon-size="35rpx"></uv-checkbox> --> |
|
|
|
<uv-checkbox |
|
|
|
:name="item.id" |
|
|
|
:disabled="!!item.statusInfo" |
|
|
|
activeColor="#FA5A0A" |
|
|
|
size="40rpx" |
|
|
|
icon-size="35rpx"></uv-checkbox> |
|
|
|
</view> |
|
|
|
|
|
|
|
<image class="image" :src="item.goodsPic || 'https://img95.699pic.com/photo/50058/1378.jpg_wh860.jpg'" |
|
|
|
mode=""></image> |
|
|
|
|
|
|
|
<view class="info"> |
|
|
|
<view class="title"> |
|
|
|
<view>{{ item.goodsName }}</view> |
|
|
|
<view> |
|
|
|
<!-- <uv-number-box v-model="item.num" @change="e => valChange(item, e)"></uv-number-box> --> |
|
|
|
数量:{{ item.num }} |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
<view class="unit"> |
|
|
|
规格:{{ item.sku }} |
|
|
|
<!-- <uv-icon name="arrow-down"></uv-icon> --> |
|
|
|
</view> |
|
|
|
<!-- <view class="wan" |
|
|
|
v-if="!item.startTime |
|
|
|
&& item.leaseFlag |
|
|
|
&& item.status == 0"> |
|
|
|
确认收货后,方可水洗 |
|
|
|
</view> |
|
|
|
<view class="wan" v-else-if="item.status != 0"> |
|
|
|
{{ statusText[item.status] }} |
|
|
|
</view> |
|
|
|
<view class="wan" v-else-if="item.isWash"> |
|
|
|
水洗中 |
|
|
|
</view> --> |
|
|
|
<view class="wan" v-if="item.statusInfo"> |
|
|
|
{{ item.statusInfo }} |
|
|
|
</view> |
|
|
|
<view class="price" v-else> |
|
|
|
<view class="" v-if="item.zujin"> |
|
|
|
租金¥ |
|
|
|
<text>{{ item.zujin }}</text> |
|
|
|
元 |
|
|
|
</view> |
|
|
|
<view class="" v-if="item.washPrice"> |
|
|
|
水洗费¥ |
|
|
|
<text>{{ item.washPrice }}</text> |
|
|
|
元 |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
</uv-checkbox-group> |
|
|
|
</view> |
|
|
|
|
|
|
|
<!-- <view class="btn" @click="submit"> |
|
|
|
<button class="a">水洗下单<text v-if="price">({{price}}¥)</text></button> |
|
|
|
</view> --> |
|
|
|
|
|
|
|
<view class="action"> |
|
|
|
<view class="icon"> |
|
|
|
<image src="/static/image/cart/1.png" mode=""></image> |
|
|
|
<view class="num">{{ checkboxValue.length }}</view> |
|
|
|
</view> |
|
|
|
<view class="price"> |
|
|
|
<view class="count"> |
|
|
|
合计 |
|
|
|
<view> |
|
|
|
¥ |
|
|
|
<text>{{ price }}</text> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
<view class="text"> |
|
|
|
<!-- 共{{ checkboxValue.length }}件,已享受更低优惠 --> |
|
|
|
含租金{{zujin}}¥,水洗费{{washPrice}}¥ |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
<view class="btn2" @click="goCleaning">结算</view> |
|
|
|
</view> |
|
|
|
|
|
|
|
<cartSubmitSelect |
|
|
|
@submit="ordersPay" |
|
|
|
:price="price" |
|
|
|
:washPrice="washPrice" |
|
|
|
:rentPrice="zujin" |
|
|
|
submiitTitle="立即水洗" |
|
|
|
ref="cartSubmitSelect"/> |
|
|
|
|
|
|
|
</view> |
|
|
|
</template> |
|
|
|
|
|
|
|
<script> |
|
|
|
import cartSubmitSelect from '@/components/user/cartSubmitSelect.vue' |
|
|
|
import mixinsList from '@/mixins/list.js' |
|
|
|
import mixinLease from '@/mixins/lease.js' |
|
|
|
export default { |
|
|
|
mixins : [mixinsList, mixinLease], |
|
|
|
components: { |
|
|
|
cartSubmitSelect, |
|
|
|
}, |
|
|
|
data() { |
|
|
|
return { |
|
|
|
checkboxValue : [], |
|
|
|
statusText : ['正常', '换货中', '退货中'], |
|
|
|
tabs: [{ |
|
|
|
name: '选择租赁物品' |
|
|
|
}, |
|
|
|
{ |
|
|
|
name: '选择我的物品' |
|
|
|
}, |
|
|
|
], |
|
|
|
type: 1, |
|
|
|
mixinsListApi : 'getLeasePage', |
|
|
|
} |
|
|
|
}, |
|
|
|
computed : { |
|
|
|
price(){ |
|
|
|
return this.washPrice + this.zujin |
|
|
|
}, |
|
|
|
washPrice(){ |
|
|
|
if(this.checkboxValue.length == 0){ |
|
|
|
return 0 |
|
|
|
} |
|
|
|
|
|
|
|
let price = 0 |
|
|
|
|
|
|
|
this.list.forEach(n => { |
|
|
|
if(this.checkboxValue.includes(n.id)){ |
|
|
|
price += n.washPrice || 0 |
|
|
|
} |
|
|
|
}) |
|
|
|
return price |
|
|
|
}, |
|
|
|
zujin(){ |
|
|
|
if(this.checkboxValue.length == 0){ |
|
|
|
return 0 |
|
|
|
} |
|
|
|
|
|
|
|
let price = 0 |
|
|
|
|
|
|
|
this.list.forEach(n => { |
|
|
|
if(this.checkboxValue.includes(n.id)){ |
|
|
|
price += n.zujin || 0 |
|
|
|
} |
|
|
|
}) |
|
|
|
return price |
|
|
|
}, |
|
|
|
}, |
|
|
|
onShow() { |
|
|
|
this.getData() |
|
|
|
}, |
|
|
|
methods: { |
|
|
|
//点击tab栏 |
|
|
|
clickTabs({ |
|
|
|
index, |
|
|
|
name |
|
|
|
}) { |
|
|
|
this.type = index ? 0 : 1; |
|
|
|
this.queryParams.pageSize = 10 |
|
|
|
this.checkboxValue = [] |
|
|
|
// this.mixinsListApi = ['orderPage', 'orderPage'][index] |
|
|
|
this.getData() |
|
|
|
}, |
|
|
|
// 发请求之前处理参数 |
|
|
|
beforeGetData(){ |
|
|
|
let data = {} |
|
|
|
|
|
|
|
data.leaseFlag = this.type |
|
|
|
|
|
|
|
return data |
|
|
|
}, |
|
|
|
getDataThen(list){ |
|
|
|
// list[0] && list[0].d = true |
|
|
|
list.forEach(n => { |
|
|
|
n.statusInfo = this.isLeaseStatus(n) |
|
|
|
}) |
|
|
|
}, |
|
|
|
|
|
|
|
// 去结算按钮 |
|
|
|
goCleaning() { |
|
|
|
if (this.checkboxValue.length < 1) { |
|
|
|
uni.showToast({ |
|
|
|
title: "请勾选商品", |
|
|
|
icon: 'none' |
|
|
|
}) |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
this.$refs.cartSubmitSelect.open('bottom') |
|
|
|
}, |
|
|
|
//商品下单 |
|
|
|
ordersPay({ addressId, couponId }) { |
|
|
|
var self = this |
|
|
|
// var deleteCartIds = this.checkboxValue.join(",") //待删除的购物车id |
|
|
|
|
|
|
|
let data = [] |
|
|
|
let records = this.list |
|
|
|
for (var i = 0; i < records.length; i++) { |
|
|
|
if (this.checkboxValue.includes(records[i].id)) { |
|
|
|
data.push({ |
|
|
|
leaseId: records[i].id, //租赁id |
|
|
|
addressId, //地址id |
|
|
|
type : 1, |
|
|
|
}) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
this.$api('orderCreate', { |
|
|
|
req: JSON.stringify(data) |
|
|
|
}, res => { |
|
|
|
if (res.code == 200) { |
|
|
|
let form = { |
|
|
|
id: res.result.id |
|
|
|
} |
|
|
|
|
|
|
|
if(couponId){ |
|
|
|
form.couponId = couponId |
|
|
|
} |
|
|
|
|
|
|
|
// 不管有没有支付,都要清除购物车数据 |
|
|
|
// self.$api('cartDel', { |
|
|
|
// id: deleteCartIds |
|
|
|
// }, res => { |
|
|
|
// if (res.code == 200) { |
|
|
|
// self.getData() |
|
|
|
// } |
|
|
|
// }) |
|
|
|
|
|
|
|
|
|
|
|
this.$api('orderPay', form, res => { |
|
|
|
if (res.code == 200) { |
|
|
|
uni.requestPayment({ |
|
|
|
provider: 'wxpay', // 服务提提供商 |
|
|
|
timeStamp: res.result.timeStamp, // 时间戳 |
|
|
|
nonceStr: res.result.nonceStr, // 随机字符串 |
|
|
|
package: res.result.packageValue, |
|
|
|
signType: res.result.signType, // 签名算法 |
|
|
|
paySign: res.result.paySign, // 签名 |
|
|
|
success: function(res) { |
|
|
|
console.log('支付成功', res); |
|
|
|
|
|
|
|
uni.redirectTo({ |
|
|
|
url: '/pages/index/order' |
|
|
|
}) |
|
|
|
|
|
|
|
}, |
|
|
|
fail: function(err) { |
|
|
|
console.log('支付失败', err); |
|
|
|
// self.$refs.confirmationPopup.close() |
|
|
|
uni.redirectTo({ |
|
|
|
url: '/pages/index/order' |
|
|
|
}) |
|
|
|
uni.showToast({ |
|
|
|
icon: 'none', |
|
|
|
title: "支付失败" |
|
|
|
}) |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
}) |
|
|
|
} |
|
|
|
}) |
|
|
|
}, |
|
|
|
} |
|
|
|
} |
|
|
|
</script> |
|
|
|
|
|
|
|
<style scoped lang="scss"> |
|
|
|
.page { |
|
|
|
padding-bottom: 200rpx; |
|
|
|
.tabs{ |
|
|
|
position: sticky; |
|
|
|
top: calc(var(--status-bar-height) + 120rpx); |
|
|
|
background-color: #fff; |
|
|
|
// padding-top: 20rpx; |
|
|
|
} |
|
|
|
.btn { |
|
|
|
display: flex; |
|
|
|
justify-content: center; |
|
|
|
position: fixed; |
|
|
|
bottom: 20rpx; |
|
|
|
width: 100%; |
|
|
|
|
|
|
|
.a { |
|
|
|
display: flex; |
|
|
|
justify-content: center; |
|
|
|
align-items: center; |
|
|
|
width: 70%; |
|
|
|
height: 100rpx; |
|
|
|
color: #FFF; |
|
|
|
background-color: $uni-color; |
|
|
|
border: 1px solid red; |
|
|
|
border-radius: 100rpx; |
|
|
|
font-size: 30rpx; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
.d{ |
|
|
|
.item { |
|
|
|
background-color: #fff; |
|
|
|
display: flex; |
|
|
|
padding: 30rpx; |
|
|
|
width: 690rpx; |
|
|
|
|
|
|
|
.checkbox { |
|
|
|
display: flex; |
|
|
|
justify-content: center; |
|
|
|
align-items: center; |
|
|
|
} |
|
|
|
|
|
|
|
.image { |
|
|
|
width: 200rpx; |
|
|
|
height: 200rpx; |
|
|
|
border-radius: 20rpx; |
|
|
|
} |
|
|
|
|
|
|
|
.info { |
|
|
|
flex: 1; |
|
|
|
|
|
|
|
.title { |
|
|
|
display: flex; |
|
|
|
padding: 10rpx 20rpx; |
|
|
|
justify-content: space-between; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
.unit { |
|
|
|
font-size: 24rpx; |
|
|
|
padding: 10rpx 20rpx; |
|
|
|
color: #717171; |
|
|
|
display: flex; |
|
|
|
align-items: center; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
.price { |
|
|
|
color: $uni-color; |
|
|
|
font-size: 24rpx; |
|
|
|
padding: 10rpx 20rpx; |
|
|
|
display: flex; |
|
|
|
justify-content: space-between; |
|
|
|
|
|
|
|
text { |
|
|
|
font-weight: 900; |
|
|
|
} |
|
|
|
} |
|
|
|
.wan{ |
|
|
|
color: $uni-color; |
|
|
|
font-size: 26rpx; |
|
|
|
padding: 10rpx 20rpx; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
.action { |
|
|
|
width: 700rpx; |
|
|
|
position: fixed; |
|
|
|
bottom: 20rpx; |
|
|
|
left: 25rpx; |
|
|
|
background-color: #fff; |
|
|
|
height: 130rpx; |
|
|
|
border-radius: 65rpx; |
|
|
|
box-shadow: 0 0 6rpx 6rpx #00000010; |
|
|
|
display: flex; |
|
|
|
justify-content: center; |
|
|
|
align-items: center; |
|
|
|
overflow: hidden; |
|
|
|
|
|
|
|
.icon { |
|
|
|
position: relative; |
|
|
|
width: 80rpx; |
|
|
|
height: 80rpx; |
|
|
|
margin: 0 20rpx; |
|
|
|
|
|
|
|
image { |
|
|
|
width: 80rpx; |
|
|
|
height: 80rpx; |
|
|
|
} |
|
|
|
|
|
|
|
.num { |
|
|
|
position: absolute; |
|
|
|
right: 10rpx; |
|
|
|
top: 0rpx; |
|
|
|
background-color: $uni-color; |
|
|
|
color: #fff; |
|
|
|
font-size: 18rpx; |
|
|
|
border-radius: 50%; |
|
|
|
height: 30rpx; |
|
|
|
width: 30rpx; |
|
|
|
display: flex; |
|
|
|
justify-content: center; |
|
|
|
align-items: center; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
.price { |
|
|
|
.count { |
|
|
|
display: flex; |
|
|
|
font-size: 26rpx; |
|
|
|
align-items: center; |
|
|
|
|
|
|
|
view { |
|
|
|
color: $uni-color; |
|
|
|
margin-left: 10rpx; |
|
|
|
|
|
|
|
text { |
|
|
|
font-size: 32rpx; |
|
|
|
font-weight: 900; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
.text { |
|
|
|
font-size: 22rpx; |
|
|
|
color: #717171; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
.btn2 { |
|
|
|
margin-left: auto; |
|
|
|
background-color: $uni-color; |
|
|
|
height: 100%; |
|
|
|
padding: 0 50rpx; |
|
|
|
color: #fff; |
|
|
|
display: flex; |
|
|
|
justify-content: center; |
|
|
|
align-items: center; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
</style> |