<template> <view> <view class="payment-top acea-row row-column row-center-wrapper"> <text class="name">我的余额</text> <view class="pic"> <text> ¥ <text class="pic-font">{{ now_money || 0 }}</text> </text> </view> </view> <view class="recharge"> <view class="nav acea-row row-around row-middle"> <view class="item on">账户充值</view> </view> <view class="info-wrapper"> <view class="picList acea-row row-between mt-20"> <view class="pic-box pic-box-color acea-row row-center-wrapper row-column" :class="activePic === index ? 'pic-box-color-active' : ''" v-for="(item, index) in picList" :key="index" @click="picCharge(index, item)"> <view class="pic-number-pic"> <text> {{ item.value.price }} <text class="pic-number">元</text> </text> </view> <view class="pic-number" v-if="item.value.give_price > 0">赠送:{{ item.value.give_price }} 元</view> </view> <!-- <view class="pic-box pic-box-color acea-row row-center-wrapper" @click="picCharge(picList.length, money)" > <input type="number" placeholder="其他" v-model="money" class="pic-box-money pic-number-pic" /> </view>--> </view> <view class="tip">提示:充值后帐户的金额不能提现</view> <view class="pay-btn bg-color-red" @click="recharge">立即充值</view> </view> </view> </view> </template> <script> import { mapGetters } from "vuex"; import { weappPay } from "@/libs/wechat"; import { rechargeWechat, getRechargeApi } from "@/api/user"; import { add, sub } from "@/utils/bc"; import { subscribeMessage } from "@/libs/order"; export default { name: "Recharge", components: {}, props: {}, data: function () { return { active: 0, from: this.$deviceType, money: "", now_money: "", picList: [], activePic: 0, numberPic: "", paid_price: "", rechar_id: 0, }; }, computed: mapGetters(["userInfo"]), mounted: function () { this.now_money = this.userInfo.nowMoney; this.getRecharge(); }, methods: { /** * 充值额度选择 */ getRecharge() { getRechargeApi() .then((res) => { this.picList = res.data.recharge_price_ways || []; if (this.picList[0]) { this.rechar_id = this.picList[0].id; this.paid_price = this.picList[0].value.price; this.numberPic = this.picList[0].value.give_price; } }) .catch((res) => { uni.showToast({ title: err.msg || err.response.data.msg || err.response.data.message, icon: "none", duration: 2000, }); }); }, /** * 选择金额 */ picCharge(idx, item) { this.activePic = idx; if (idx == this.picList.length) { this.rechar_id = 0; this.paid_price = ""; this.numberPic = ""; } else { this.money = ""; this.rechar_id = item.id; this.paid_price = item.value.give_price; this.numberPic = item.value.price; } }, recharge: function () { let that = this, price = Number(this.money); if (this.picList.length == this.activePic && price === 0) { uni.showToast({ title: "请输入您要充值的金额", icon: "none", duration: 2000, }); return; } else if (this.picList.length == this.activePic && price < 0.01) { uni.showToast({ title: "充值金额不能低于0.01", icon: "none", duration: 2000, }); return; } else if (this.picList.length == this.activePic && price > 99999) { uni.showToast({ title: "充值金额不能大于99999", icon: "none", duration: 2000, }); return; } let prices = "", paid_price = ""; if (price) { prices = price; paid_price = 0; } else { prices = that.numberPic; paid_price = that.paid_price; } rechargeWechat({ price: prices, from: this.$deviceType == 'weixin' || this.$deviceType == 'weixinh5' ? 'uniappH5' : this.$deviceType, paid_price: paid_price, rechar_id: that.rechar_id, }) .then((res) => { var data = res.data.data; weappPay(res.data.data) .then(() => { prices = add(prices, paid_price); that.now_money = add(prices, parseFloat(that.userInfo.nowMoney)); uni.showToast({ title: "支付成功", icon: "success", duration: 2000, }); // #ifdef MP-WEIXIN subscribeMessage() // #endif this.$yrouter.back(); }) .finally((res) => { //if(typeof(res) == "undefined") return uni.showToast({ title: res, icon: "none", duration: 2000, }); }) .catch(function () { uni.showToast({ title: "支付失败", icon: "none", duration: 2000, }); }); }) .catch((err) => { console.log(err); uni.showToast({ title: err.msg || err.response.data.msg || err.response.data.message, icon: "none", duration: 2000, }); }); }, }, }; </script> <style scoped lang="less"> #iframe { display: none; } .pic-box-color-active { background-color: #eb3729 !important; color: #fff !important; } .picList { margin-bottom: 0.3 * 100rpx; margin-top: 0.3 * 100rpx; } .font-color { color: #e83323; } .recharge { border-radius: 0.1 * 100rpx; width: 100%; background-color: #fff; margin: 0.2 * 100rpx auto 0 auto; padding: 0.3 * 100rpx; border-top-right-radius: 0.39 * 100rpx; border-top-left-radius: 0.39 * 100rpx; margin-top: -0.45 * 100rpx; box-sizing: border-box; } .recharge .nav { height: 0.75 * 100rpx; line-height: 0.75 * 100rpx; padding: 0 1 * 100rpx; } .recharge .nav .item { font-size: 0.3 * 100rpx; color: #333; } .recharge .nav .item.on { font-weight: bold; border-bottom: 0.04 * 100rpx solid #e83323; } .recharge .info-wrapper {} .recharge .info-wrapper .money { margin-top: 0.6 * 100rpx; padding-bottom: 0.2 * 100rpx; border-bottom: 1px dashed #ddd; text-align: center; } .recharge .info-wrapper .money span { font-size: 0.56 * 100rpx; color: #333; font-weight: bold; } .recharge .info-wrapper .money input { display: inline-block; width: 3 * 100rpx; font-size: 0.84 * 100rpx; text-align: center; color: #282828; font-weight: bold; padding-right: 0.7 * 100rpx; } .recharge .info-wrapper .money input::placeholder { color: #ddd; } .recharge .info-wrapper .money input::-webkit-input-placeholder { color: #ddd; } .recharge .info-wrapper .money input:-moz-placeholder { color: #ddd; } .recharge .info-wrapper .money input::-moz-placeholder { color: #ddd; } .recharge .info-wrapper .money input:-ms-input-placeholder { color: #ddd; } .tip { font-size: 0.28 * 100rpx; color: #333333; font-weight: 800; margin-bottom: 0.14 * 100rpx; } .recharge .info-wrapper .tips span { color: #ef4a49; } .recharge .info-wrapper .pay-btn { display: block; width: 100%; height: 0.86 * 100rpx; margin: 0.5 * 100rpx auto 0 auto; line-height: 0.86 * 100rpx; text-align: center; color: #fff; border-radius: 0.5 * 100rpx; font-size: 0.3 * 100rpx; font-weight: bold; } .payment-top { width: 100%; height: 3.5 * 100rpx; background-color: #eb3729; } .payment-top .name { font-size: 0.26 * 100rpx; color: rgba(255, 255, 255, 0.8); margin-top: -0.38 * 100rpx; margin-bottom: 0.3 * 100rpx; } .payment-top .pic { font-size: 0.32 * 100rpx; color: #fff; } .payment-top .pic-font { font-size: 0.78 * 100rpx; color: #fff; } .picList .pic-box { width: 32%; height: auto; border-radius: 0.2 * 100rpx; margin-top: 0.21 * 100rpx; padding: 0.2 * 100rpx 0; } .pic-box-color { background-color: #f4f4f4; color: #656565; } .pic-number { font-size: 0.22 * 100rpx; } .pic-number-pic { font-size: 0.38 * 100rpx; margin-right: 0.1 * 100rpx; text-align: center; } .pic-box-money { width: 100%; display: block; } </style>