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

6 months ago
<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>