Files
barter-app/pages/order/buy.vue
2021-09-18 15:31:50 +08:00

352 lines
7.8 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view v-if="loding">
<!-- 订单信息 -->
<view class="order-list" v-for="(mall, mallIndex) in detail" :key="mallIndex">
<view class="shop-name">
<image class="logo" :src="mall.shop.cover" mode="aspectFill"></image>
{{mall.shop.name || '-'}}
</view>
<view class="item" v-for="(item, itemsIndex) in mall.items" :key="itemsIndex">
<image class="cover" :src="item.cover" mode="aspectFill"></image>
<view class="title">{{item.title}}</view>
<view class="tool">
<view class="price"><text></text>{{item.price}}</view>
<uni-number-box class="number" :min="item.number" :value="qty" @change="numberChange"></uni-number-box>
</view>
</view>
</view>
<view class="amount">
<view class="item">
<label>订单金额</label>
<view class="price nowrap">{{amount}}</view>
</view>
<block v-if="coupons.length > 0">
<view class="item">
<label>使用优惠券</label>
<picker mode="selector" :range="coupons" range-key="title" :value="couponIndex" @change="couponsChange">
<view class="picker-text nowrap">
{{couponIndex == 0 ? '选择优惠券' : coupons[couponIndex].title}}
<uni-icons type="arrowright" color="#ddd"></uni-icons>
</view>
</picker>
</view>
<view class="item">
<label>优惠金额</label>
<view class="price nowrap">-{{couponPrice}}</view>
</view>
</block>
<view class="item">
<label>实际支付金额</label>
<view class="price nowrap">{{total}}</view>
</view>
</view>
<!-- 支付方式 -->
<radio-group class="pay-group" @change="payType">
<view class="item">
<label>
<radio class="radio" value="eb" checked color="#c82626" />
<view class="title">易货额支付</view>
<view class="sub-title" v-if="payValue === 'eb'">可用{{account.getEBBalance}} 冻结{{account.getEBFrozen}}</view>
</label>
</view>
<view class="item">
<label>
<radio class="radio" value="wx" color="#c82626" />
<view class="title">微信支付</view>
</label>
</view>
</radio-group>
<!-- footer -->
<view class="footer">
<button size="default" @click="buyOrder">提交订单</button>
</view>
</view>
</template>
<script>
import { buy, eb } from '@/apis/interfaces/order'
export default {
data() {
return {
loding : false,
detail : {},
qty : 1,
couponPrice : 0,
amount : 0,
total : 0,
coupons : [],
couponIndex : 0,
couponId : '',
account : {},
payValue : 'eb',
}
},
created(){
buy({
goods_sku_id: this.$Route.query.skuId,
qty : this.qty,
type : 1
}, 'GET').then(res=>{
this.loding = true
this.payValue = this.$Route.query.type === 1 ? 'wx' : 'eb'
this.detail = res.detail
this.couponPrice = res.coupon_price.toFixed(2)
this.amount = res.amount.toFixed(2)
this.total = res.total.toFixed(2)
this.coupons = res.coupons
this.account = res.account
}).catch(err =>{
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
methods: {
// 获取可用优惠券
getCoupons(){
buy({
goods_sku_id : this.$Route.query.skuId,
qty : this.qty,
type : 1,
coupon_grant_id : this.couponId
}, 'GET').then(res=>{
this.couponPrice = res.coupon_price.toFixed(2)
this.amount = res.amount.toFixed(2)
this.total = res.total.toFixed(2)
this.coupons = [{
title : '不使用',
coupon_grant_id : ''
}, ...res.coupons]
}).catch(err =>{
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
// 选择优惠券
couponsChange(e){
this.couponIndex = e.detail.value
this.couponId = this.coupons[e.detail.value].coupon_grant_id
this.getCoupons()
},
// 选择支付类型
payType(e){
this.payValue = e.detail.value
},
//数量变化
numberChange(e){
this.qty = e
this.getCoupons()
},
// 提交订单
buyOrder(){
buy({
goods_sku_id : this.$Route.query.skuId,
qty : this.qty,
coupon_grant_id : this.couponId,
type : 1,
remark : 'app订单易货产品',
channel : 'app'
}, 'POST').then(res=>{
console.log(res)
switch (this.payValue){
case 'eb':
this.ebPay(res.order_no)
break;
case 'wx':
this.wxPay(res.order_no)
break;
default:
uni.showToast({
title: '支付方式错误',
icon : 'none'
})
break;
}
}).catch(err =>{
uni.showToast({
title: err.message,
icon : 'none'
})
})
},
// 微信pay
wxPay(orderNo){
uni.showToast({
title: '微信支付' + orderNo,
icon : 'none'
})
},
// 易币支付
ebPay(orderNo){
eb(orderNo).then(res => {
this.$Router.replace({
name : 'payResults',
params : {
index: 1,
price: this.total,
type : 'eb',
total: '可在我的资产下我的权证中查看购买的数字权证'
}
})
}).catch(err => {
uni.showModal({
title : '支付提示',
content : err.message,
showCancel : false,
})
})
}
}
}
</script>
<style lang="scss" scoped>
// 商品统计
.amount{
background: white;
margin: $margin;
border-radius: $radius/2;
padding: 0 $padding;
box-sizing: border-box;
.item{
position: relative;
border-bottom: solid 1rpx $border-color;
padding-left: 160rpx;
line-height: 90rpx;
text-align: right;
&:last-child{
border-bottom: none;
}
label{
position: absolute;
left: 0;
top: 0;
font-size: $title-size-lg;
}
.number-box{
display: inline-block;
line-height: 90rpx;
}
.price{
color: $text-price;
}
.picker-text{
font-size: $title-size-lg;
color: $text-gray;
}
}
}
// 支付方式
.pay-group{
background: white;
margin: $margin;
border-radius: $radius/2;
padding: 0 $padding;
box-sizing: border-box;
.item{
position: relative;
border-bottom: solid 1rpx $border-color;
padding: ($padding - 10) 70rpx ($padding - 10) 0;
&:last-child{
border-bottom: none;
}
.radio{
position: absolute;
right: 0;
top: 50%;
margin-top: -25rpx;
}
.sub-title{
font-size: $title-size-sm;
color: $text-gray;
line-height: 40rpx;
}
.title{
font-size: $title-size-lg;
line-height: 50rpx;
}
}
}
// 支付按钮
.footer{
padding: 0 $padding $padding*2;
button{
background: $text-price;
font-size: $title-size;
color: white;
height: 90rpx;
line-height: 90rpx;
font-weight: bold;
border-radius: $radius/2;
&::after{
border: none;
}
}
}
// 订单商品列表
.order-list{
background: white;
margin: $margin;
border-radius: $radius/2;
padding: $padding;
box-sizing: border-box;
.shop-name{
position: relative;
padding-bottom: $padding;
font-size: $title-size-lg;
padding-left: 68rpx;
line-height: 48rpx;
min-height: 48rpx;
color: $text-color;
.logo{
position: absolute;
left: 0;
top: 0;
width: 48rpx;
height: 48rpx;
}
}
.item{
position: relative;
padding-left: 180rpx;
padding-bottom: $padding/2;
padding-top: $padding/2;
min-height: 160rpx;
.cover{
position: absolute;
left: 0;
top: $padding/2;
height: 160rpx;
width: 160rpx;
background: #2C405A;
}
.title{
height: 110rpx;
line-height: 40rpx;
font-size: $title-size-lg;
color: $text-color;
}
.tool{
display: flex;
justify-content: space-between;
align-items: center;
.price{
font-weight: bold;
color: $text-price;
font-size: $title-size;
line-height: 40rpx;
height: 40rpx;
text{
font-size: 80%;
}
}
}
}
}
</style>