You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
228 lines
6.9 KiB
Vue
228 lines
6.9 KiB
Vue
<template>
|
|
<view class="container p-bottom">
|
|
<!-- 清单列表 -->
|
|
<view class="m-top20">
|
|
<view v-for="(item, index) in storeRule" :key="index" class="checkout_list">
|
|
<view class="flow-shopList dis-flex">
|
|
<view class="flow-list-right flex-box">
|
|
<text class="goods-name twolist-hidden">预存¥{{ item.store }} 到账 ¥{{ item.upStore }}</text>
|
|
<view class="flow-list-cont dis-flex flex-x-between flex-y-center">
|
|
<text class="small">X{{ item.num }} </text>
|
|
<text class="flow-cont">¥{{ item.amount.toFixed(2) }}</text>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<view class="flow-num-box b-f">
|
|
<text>共{{ totalNum }}张,合计:</text>
|
|
<text class="flow-money col-m">¥{{ totalAmount.toFixed(2) }}</text>
|
|
</view>
|
|
</view>
|
|
|
|
<!-- 支付方式 -->
|
|
<view class="pay-method flow-all-money b-f m-top20">
|
|
<view class="flow-all-list dis-flex">
|
|
<text class="flex-five">支付方式</text>
|
|
</view>
|
|
<!-- 微信支付 -->
|
|
<view class="pay-item dis-flex flex-x-between" @click="handleSelectPayType(PayTypeEnum.WECHAT.value)">
|
|
<view class="item-left dis-flex flex-y-center">
|
|
<view class="item-left_icon wechat">
|
|
<text class="iconfont icon-weixinzhifu"></text>
|
|
</view>
|
|
<view class="item-left_text">
|
|
<text>{{ PayTypeEnum.WECHAT.name }}</text>
|
|
</view>
|
|
</view>
|
|
<view class="item-right col-m" v-if="curPayType == PayTypeEnum.WECHAT.value">
|
|
<text class="iconfont icon-duihao"></text>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
|
|
<!-- 买家留言 -->
|
|
<view class="flow-all-money b-f m-top20">
|
|
<view class="ipt-wrapper">
|
|
<textarea v-model="remark" rows="3" maxlength=100 placeholder="买家留言 (选填,100字以内)" type="text"></textarea>
|
|
</view>
|
|
</view>
|
|
|
|
<!-- 提交订单 -->
|
|
<view class="flow-fixed-footer b-f m-top10">
|
|
<view class="dis-flex chackout-box">
|
|
<view class="chackout-left pl-12">
|
|
<view class="col-amount-do">应付金额:¥{{ totalAmount.toFixed(2) }}</view>
|
|
<view class="col-amount-view">实得金额:¥{{ getTotalAmount.toFixed(2) }}</view>
|
|
</view>
|
|
<view class="chackout-right" @click="onSubmitOrder()">
|
|
<view class="flow-btn f-32" :class="{ disabled }">提交订单</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
import * as Verify from '@/utils/verify'
|
|
import * as CouponApi from '@/api/coupon'
|
|
import * as SettlementApi from '@/api/settlement'
|
|
import PayTypeEnum from '@/common/enum/order/PayType'
|
|
import { wxPayment } from '@/utils/app'
|
|
|
|
export default {
|
|
data() {
|
|
return {
|
|
// 枚举类
|
|
PayTypeEnum,
|
|
// 当前页面参数
|
|
options: {},
|
|
// 当前选中的支付方式
|
|
curPayType: PayTypeEnum.WECHAT.value,
|
|
// 买家留言
|
|
remark: '',
|
|
// 禁用submit按钮
|
|
disabled: false,
|
|
// 按钮禁用
|
|
disabled: false,
|
|
couponId: 0,
|
|
selectNum: "",
|
|
storeRule: [],
|
|
totalAmount: 0,
|
|
getTotalAmount: 0,
|
|
totalNum: 0
|
|
}
|
|
},
|
|
|
|
/**
|
|
* 生命周期函数--监听页面加载
|
|
*/
|
|
onLoad(options) {
|
|
this.options = options
|
|
this.couponId = options.couponId
|
|
this.selectNum = options.selectNum
|
|
},
|
|
|
|
/**
|
|
* 生命周期函数--监听页面显示
|
|
*/
|
|
onShow() {
|
|
// 获取当前订单信息
|
|
this.getCouponDetail()
|
|
},
|
|
|
|
methods: {
|
|
|
|
// 获取卡券信息
|
|
getCouponDetail() {
|
|
const app = this
|
|
return new Promise((resolve, reject) => {
|
|
CouponApi.detail(app.couponId)
|
|
.then(result => {
|
|
app.initData()
|
|
app.couponInfo = result.data
|
|
let ruleItem = app.couponInfo.inRule.split(",")
|
|
let selected = app.selectNum.split(",")
|
|
ruleItem.forEach(function(item, index) {
|
|
let rule = item.split("_")
|
|
let num = selected[index]
|
|
let amount = parseFloat(rule[0]) * num
|
|
app.totalAmount += parseFloat(amount)
|
|
app.getTotalAmount += parseFloat(rule[1] * num)
|
|
app.totalNum += parseInt(num)
|
|
if (num > 0) {
|
|
app.storeRule.push({"store": parseFloat(rule[0]), "num": parseInt(num), "amount": parseFloat(amount), "upStore": parseFloat(rule[1])})
|
|
}
|
|
})
|
|
resolve(result)
|
|
})
|
|
.catch(err => reject(err))
|
|
})
|
|
},
|
|
|
|
initData() {
|
|
this.storeRule = [],
|
|
this.totalAmount = 0,
|
|
this.getTotalAmount = 0,
|
|
this.totalNum = 0
|
|
},
|
|
|
|
// 选择支付方式
|
|
handleSelectPayType(value) {
|
|
this.curPayType = value
|
|
},
|
|
|
|
// 订单提交
|
|
onSubmitOrder() {
|
|
const app = this
|
|
if (app.disabled) {
|
|
app.$toast('请勿重复提交订单哦');
|
|
return false
|
|
}
|
|
// 表单验证
|
|
if (!app.onVerifyFrom()) {
|
|
return false
|
|
}
|
|
// 按钮禁用
|
|
app.disabled = true
|
|
// 请求api
|
|
SettlementApi.submit(app.couponId, app.selectNum, "prestore", app.remark, 0, 0, 0, "", 0, 0, 0, "", "JSAPI")
|
|
.then(result => app.onSubmitCallback(result))
|
|
.catch(err => {
|
|
if (err.result) {
|
|
const errData = err.result.data
|
|
if (errData.isCreated) {
|
|
app.navToMyOrder(errData.orderInfo.id)
|
|
return false
|
|
}
|
|
}
|
|
app.disabled = false
|
|
})
|
|
},
|
|
|
|
// 订单提交成功后回调
|
|
onSubmitCallback(result) {
|
|
const app = this
|
|
// 发起微信支付
|
|
if (result.data.payType == PayTypeEnum.WECHAT.value) {
|
|
wxPayment(result.data.payment)
|
|
.then(() => app.$success('支付成功'))
|
|
.catch(err => app.$error('支付失败'))
|
|
.finally(() => {
|
|
app.disabled = false
|
|
app.navToMyOrder(result.data.orderInfo.id)
|
|
})
|
|
}
|
|
|
|
// 余额支付
|
|
if (result.data.payType == PayTypeEnum.BALANCE.value) {
|
|
app.$success('支付成功')
|
|
app.disabled = false
|
|
app.navToMyOrder(result.data.orderInfo.id)
|
|
}
|
|
},
|
|
|
|
// 跳转到我的订单(等待1秒)
|
|
navToMyOrder(orderId) {
|
|
setTimeout(() => {
|
|
this.$navTo('pages/order/detail?orderId='+orderId)
|
|
}, 1000)
|
|
},
|
|
|
|
// 表单验证
|
|
onVerifyFrom() {
|
|
const app = this
|
|
if (app.hasError) {
|
|
app.$toast(app.errorMsg)
|
|
return false
|
|
}
|
|
return true
|
|
},
|
|
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
@import "./style.scss";
|
|
</style>
|