湘妃到家前端代码仓库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

366 lines
8.7 KiB

<template>
<view class="content">
<mNavbar title="我的钱包" :leftClick="leftClick" />
<view class="banner" />
<view class="b-relative center font-m">
<image src="/static/ms/w.png" />
<view class="title" style="position: absolute; top: 40rpx; left: 40rpx">
<view style="line-height: 40rpx; font-size: 28rpx">账号余额</view>
<view style="line-height: 60rpx; font-size: 40rpx">{{ userInfo.price }}</view>
</view>
<view class="font-menu flex flex-sb">
<view @click="toRunningWater(0)">充值记录</view>
<view @click="toRunningWater(1)">提现记录</view>
<view @click="toRunningWater(2)">下单记录</view>
<view @click="toRunningWater(3)">佣金记录</view>
</view>
</view>
<view class="from-body">
<view>我要充值</view>
<view @click="selectOption(index)" class="top-label" v-for="(item,index) in rechargeList" :key="item.id">
<view class="top-label-box">
<view style="font-size: 14px; font-weight: 500; padding: 20rpx 0px 10rpx;">充值</view>
<view class="top-label-box-one">
<view style="font-size: 20px;">{{ item.money }}</view>
<text>元</text>
<!-- <view class="top-label-box-two">{{ item.discount == 0 ? "不享优惠" : `享${item.discount}折优惠`}}</view> -->
<view style="font-size: 12px; color: #47D594; margin-left: 20rpx;">送{{ item.sendMoney }}.00元
</view>
</view>
<view style="font-size: 10px; margin-top: 40rpx;">{{ item.remarks }}</view>
<!-- <view class="top-label-box-tag">到期时间:{{ item.endTime }}</view> -->
<div :class="{ activeLabel : optionIndex == index }"></div>
</view>
</view>
<view class="money">
<van-cell-group inset>
<van-field @update:model-value="priceChange" type="number" v-model="price" label="¥"
placeholder="请输入自定义金额" label-width="10" label-align="center "
style="background-color: #F5F5F5; margin: 10rpx 0px; border-radius: 20px;" />
<van-field v-model="phone" placeholder="请输入技师手机号"
style="background-color: #F5F5F5; margin: 10rpx 0px; border-radius: 20px;" />
</van-cell-group>
</view>
<view>充值说明</view>
<view v-html="instructions" style="line-height: 40rpx; font-size: 24rpx;color: #666666; font-weight: 400;">
</view>
</view>
<view class="recharge">
<view @click="wxPay" class="btn">
立即充值
</view>
</view>
</view>
</template>
<script>
import mNavbar from '@/components/base/m-navbar.vue'
export default {
components: {
mNavbar,
},
data() {
return {
rechargeList: [],
userInfo: {},
optionIndex: 0,
instructions: [],
price: '',
phone: '',
id: undefined,
rechargePrice: 0
}
},
onShow() {
this.getrRechargeList()
this.getUserInfo()
this.getConfig()
},
methods: {
getUserInfo() {
this.$api('getUserInfo', {}, res => {
if (res.code == 200) {
this.userInfo = res.result;
}
})
},
//获取充值套餐
getrRechargeList() {
this.$api('getRechargeList', {}, res => {
if (res.code == 200) {
const rechargeList = res.result;
this.rechargeList = rechargeList;
//默认选中第一个充值方案
this.rechargePrice = rechargeList[0].money;
this.id = rechargeList[0].id;
}
})
},
leftClick() { //返回个人中心
uni.switchTab({
url: '/pages/index/center'
})
},
selectOption(index) { //选择充值方案
this.optionIndex = index;
this.id = this.rechargeList[index].id;
this.rechargePrice = this.rechargeList[index].money;
},
toRunningWater(status) { //跳转流水页面
uni.navigateTo({
url: `/pages/mine/runningWater?status=${status}`
})
},
wxPay() { //立即充值(支付)
if (this.phone) {
if (!this.validatePhone(this.phone)) {
return uni.showToast({
title: '手机号格式不合法',
icon: 'none'
})
}
}
let data = {
price: this.rechargePrice ? this.rechargePrice : this.price,
type: 0,
phone: this.phone,
id: this.id
}
this.$api('recharge', data, res => {
if (res.code == 200) {
this.chooseWXPay(res)
}
})
},
getConfig() { //获取配置
this.$api('getConfig', {}, res => {
if (res.code == 200) {
for (let i = 0; i < res.result.length; i++) {
if (res.result[i].keyValue == 'payValue') {
this.instructions = res.result[i].content
}
}
}
})
},
priceChange(price) { //用户输入充值金额
this.rechargePrice = undefined;
this.optionIndex = undefined;
this.id = undefined;
},
validatePhone(phone) {
var phoneRegex = /^1(3|4[0-9]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9\d)\d{8}$/;
return phoneRegex.test(phone);
},
chooseWXPay(res){
window.jWeixin.config({
debug: false,
appId:res.result.appId,//必填
jsApiList: ['chooseWXPay']
});
window.jWeixin.ready(function() {
window.jWeixin.chooseWXPay({
appId: res.result.appId,
timestamp: res.result
.timeStamp, // 支付签名时间戳,注意微信 jssdk 中的所有使用 timestamp 字段均为小写。但最新版的支付后台生成签名使用的 timeStamp 字段名需大写其中的 S 字符
nonceStr: res.result.nonceStr, // 支付签名随机串,不长于 32 位
package: res.result.packageValue, // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=\*\*\*)
signType: res.result.signType, // 微信支付V3的传入 RSA ,微信支付V2的传入格式与V2统一下单的签名格式保持一致
paySign: res.result.paySign, // 支付签名
success: function(res) {
this.getUserInfo()
// 支付成功后的回调函数
uni.navigateTo({
url: '/pages/payment/payment-success?price=' + this.projectDetail.price
})
}
});
});
jWeixin.error(function(res) {
// uni.showToast({
// icon: 'none',
// title: '支付失败',
// });
});
},
}
}
</script>
<style scoped>
.content {
padding-bottom: 60px;
}
body {
background-color: #fff;
}
.banner {
width: 100vw;
height: 256rpx;
background: #cfece7;
}
.center {
width: 710rpx;
height: 316rpx;
margin: -204rpx auto 0;
}
.center image {
width: 710rpx;
height: 316rpx;
border-radius: 12rpx;
}
.font-m {
font-family: PingFang SC, PingFang SC-Bold;
font-weight: 700;
text-align: left;
color: #ffffff;
text-shadow: 0 4rpx 6rpx 0 rgba(40, 170, 133, 0.81);
}
.font-menu {
font-size: 24rpx;
font-family: PingFang SC, PingFang SC-Regular;
font-weight: 500;
text-align: center;
color: #ffffff;
line-height: 24rpx;
width: 710rpx;
position: absolute;
left: 0;
bottom: 25rpx;
}
.font-menu view {
width: calc(100% / 4);
border-right: 1rpx solid #fff;
}
.item-line input {
width: 456rpx;
height: 60rpx;
line-height: 60rpx;
background: #f5f5f5;
border-radius: 12rpx;
font-size: 24rpx;
font-family: PingFang SC, PingFang SC-Medium;
font-weight: 500;
text-align: left;
color: #939393;
padding: 0 20rpx;
}
.from-body {
padding: 40rpx 20rpx;
font-size: 28rpx;
text-align: left;
color: #333333;
}
.top-label {
position: relative;
width: 96%;
margin-left: 2%;
height: 200rpx;
background-image: url(/static/ms/cz.png);
background-repeat: no-repeat;
background-size: 100% 100%;
overflow: hidden;
border-radius: 10px;
margin-top: 20rpx;
}
.top-label-box {
position: relative;
height: 100%;
padding-left: 35rpx;
box-sizing: border-box;
}
.top-label-box .activeLabel {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
background: url('../../static/ms/select.png');
background-repeat: no-repeat;
background-size: 100% 100%;
}
.top-label-box-one {
display: flex;
align-items: center;
}
.top-label-box-two {
margin-left: 18rpx;
font-size: 12px;
padding: 6rpx 8rpx;
background-color: #EBCB85;
border-bottom-left-radius: 10px;
border-top-right-radius: 10px;
}
.top-label-box-tag {
position: absolute;
border: 1px solid;
font-size: 12px;
padding: 6rpx 10rpx;
color: #fff;
background-color: #24CC80;
top: -1px;
right: 0px;
border-bottom-left-radius: 10px;
}
.money {
margin: 20rpx 0rpx;
}
.recharge {
position: fixed;
display: flex;
justify-content: center;
align-items: center;
left: 0;
bottom: 0;
width: 750rpx;
height: 100rpx;
background: white;
}
.recharge .btn {
display: flex;
align-items: center;
justify-content: center;
width: 85%;
height: 80rpx;
border-radius: 40rpx;
color: white;
font-size: 28rpx;
background: linear-gradient(180deg, #6FDFBE, #5AC796);
}
@media all and (min-width: 961px) {
.recharge {
left: 50% !important;
transform: translateX(-50%);
}
}
</style>