H5端齐采药项目,uniapp框架
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.
 
 
 
 
 

758 lines
17 KiB

<template>
<view>
<view class="head df jcsb">
<div>
<div class="head-yu">账户余额</div>
<div class="head-one">{{balance}}<span></span></div>
</div>
<div class="covip df aic jcsa" @click="show=true">充值</div>
</view>
<view class="list">
<view class="name">
历史记录
</view>
<mescroll-uni ref="mescroll" @getData="getList" top="380rpx">
<!-- <block slot="list"> -->
<view v-for="(item,index) in pagelist" :key="index" slot="list">
<view class="card">
<view class="left">
<view class="name">
{{item.type_name}}
</view>
<view class="time-one">{{ $util.timeStampTurnTime(item.create_time) }}</view>
</view>
<view class="right">
{{item.account_data}}
</view>
</view>
</view>
<!-- </block> -->
</mescroll-uni>
<loading-cover ref="loadingCover"></loading-cover>
</view>
<u-overlay :show="show" @click="show = false">
<view class="Recharge" @tap.stop>
<view class="df jcsb qinru">
<div></div>
<div>请输入充值金额</div>
<!-- <image :src="$util.img('/upload/weapp/user/X.png')" mode=""></image> -->
<image :src="$util.img('/upload/weapp/user/xx.png')" mode=""></image>
</view>
<view class="df mannin">
<view class="" v-for="(item,index) in copper" :key="index">
<view :style="arr==index?{background:'#21BBF3',color:'#fff'}:''" class="mannin-one df aic jcsa"
@click="btn(item,index)">¥{{item}}</view>
</view>
</view>
<view class="df head-pay">
<div class="df aic"></div>
<div>
<input placeholder="请输入充值金额" v-model="recharge_money" type="number">
<div class="arr">¥</div>
<div class="box">元</div>
</div>
</view>
<!-- <view class="about">
*充值满500总赠送50优惠券,充值满1000送100优惠券
</view> -->
<view class="xuind">
</view>
<view class="Select-payment">
<!-- <div><input type="radio" name="sex" value="微信支付" checked="checked" /></div> -->
<div v-for="(item,index) in radiolist1" :key="index">
<div class="arr df aic jcsb" @click="time(index)">
<div class="df aic">
<image :src="$util.img(item.img)"></image>
<text>{{item.name}}</text>
</div>
<image v-if="index==indexa" :src="$util.img(`/upload/weapp/user/gou.png`)" mode=""></image>
<image v-else :src="$util.img(`/upload/weapp/user/un_gou.png`)" mode=""></image>
</div>
</div>
</view>
<view class="btn-qz df aic jcsa" @click="zfqd">
确定支付
</view>
</view>
</u-overlay>
</view>
</template>
<script>
// #ifdef H5
import { Weixin } from 'common/js/wx-jssdk.js';
// #endif
// 包裹 uniapi 接口
const MiniWarp = (fn, data) => {
return new Promise((resolve, reject) => {
fn({
success: (res) => resolve(res),
fail: (res) => reject(res),
...data,
})
})
}
const uniLogin = data => MiniWarp(uni.login, data);
const requestPayment = data => MiniWarp(uni.requestPayment, data);
export default {
data() {
return {
token: uni.getStorageSync('token'),
show: false,
arr: -1,
indexa: 0,
balance: '',
pagelist: [],
recharge_money: "",
out_trade_no: "",
list: [],
copper: [],
radiolist1: [
// #ifndef MP-ALIPAY
{
name: '微信支付',
img: '/upload/weapp/pageSalesman/reportForm/WeChat.png',
payCode: "WECHAT_JSAPI"
},
// #endif
// #ifndef MP-WEIXIN
{
name: '支付宝支付',
img: '/upload/weapp/pageSalesman/reportForm/Alipay.png',
payCode: "ALIPAY_JSAPI"
},
// #endif
],
};
},
onShow() {
this.getBalance()
this.getCopper();
this.$refs.mescroll.refresh();
},
onHide() {
uni.removeStorageSync('chemeData')
},
methods: {
getBalance() {
this.$api.sendRequest({
url: '/api/memberaccount/info',
data: {
account_type: "balance"
},
success: res => {
console.log(res);
this.balance = res.data.balance
}
});
},
getCopper() {
this.$api.sendRequest({
url: '/api/ordercreate/getRechargeList',
success: res => {
this.copper = res.data
}
})
},
getList(mescroll) {
this.$api.sendRequest({
url: "/api/memberaccount/page",
data: {
page: mescroll.num,
page_size: mescroll.size,
account_type: "balance"
},
success: res => {
let newArr = [];
let msg = res.message;
if (res.code == 0 && res.data) {
newArr = res.data.list;
} else {
this.$util.showToast({
title: msg
});
}
mescroll.endSuccess(newArr.length);
//设置列表数据
if (mescroll.num == 1) {
this.pagelist = []; //如果是第一页需手动制空列表
this.related_id = 0;
}
this.pagelist = this.pagelist.concat(newArr); //追加新数据
if (this.$refs.loadingCover) this.$refs.loadingCover.hide();
}
})
},
btn(item, index) {
this.arr = index;
this.recharge_money = item;
},
time(index) {
this.indexa = index
console.log(index);
},
zfqd() {
if (!this.recharge_money) {
this.$util.showToast({
title: '请输入充值金额'
});
return;
}
this.$api.sendRequest({
url: '/api/ordercreate/rechargeCreate',
data: {
recharge_money: this.recharge_money,
},
success: res => {
this.out_trade_no = res.data;
// console.log(this.indexa);
// this.indexa 0 微信支付 1支付宝支付
// #ifdef MP-ALIPAY
if (this.indexa == 0) {
this.alipay()
}
// #endif
// #ifdef MP-WEIXIN
if (this.indexa == 0) {
this.weixinPay()
}
// #endif
// #ifdef APP-PLUS
if (this.indexa == 0) {
this.baofuWx()
} else if (this.indexa == 1) {
this.alipay()
}
// #endif
}
})
// this.show = false
// this.$util.showToast({
// title: '支付成功'
// });
},
// 支付宝支付
alipay() {
// #ifdef MP-ALIPAY
console.log(`MP-ALIPAY`);
this.aliPay()
// #endif
// #ifdef APP-PLUS
console.log(`APP-PLUS`);
this.$api.sendRequest({
url: '/api/pay/getAliSchemeUrl',
data: {
token: this.token,
out_trade_no: this.out_trade_no,
goods_type: 2,
pay_money: this.recharge_money,
page: 'pages_tool/pay/index'
},
success: res => {
console.log(res, 'res');
// #ifdef APP-PLUS
plus.runtime.openURL(res.data.openlink);
// #endif
// #ifndef APP-PLUS
window.open(res.data.openlink)
// #endif
this.show = false
// this.$util.showToast({
// title: '支付成功'
// });
}
})
// #endif
},
// 宝付支付
baofuWx() {
// console.log('/pages_tool/pay/index?token=' + uni.getStorageSync('token') +
// '&out_trade_no=' + this.out_trade_no + '&goods_type=2');
// #ifdef MP-WEIXIN || APP-PLUS
this.weixinPay()
// #endif
// // #ifndef MP-WEIXIN
// this.$api.sendRequest({
// url: '/api/pay/getSchemeUrl',
// data: {
// token: this.token,
// out_trade_no: this.out_trade_no,
// goods_type: 2,
// pay_money: this.recharge_money
// },
// success: res => {
// console.log(res, 'res');
// // #ifdef APP-PLUS
// plus.runtime.openURL(res.data.openlink);
// // #endif
// // #ifndef APP-PLUS
// window.open(res.data.openlink)
// // #endif
// this.show = false
// // this.$util.showToast({
// // title: '支付成功'
// // });
// }
// })
// // #endif
},
async aliPay() {
try {
let provider = 'alipay'
// 微信登录
const loginRes = await uniLogin({ provider })
console.log(loginRes, 'loginRes');
this.aliCode = loginRes.code;
// return
// 请求后端
// let url = '/api/boofopay/unifiedOrder';
// debug 模式调用 测试支付接口
// appBaseInfo = wx.getAppBaseInfo()
// if (appBaseInfo.enableDebug)
// url = '/api/boofopay/test'
// goods_type 默认1 充值余额2
let url = '/api/boofopay/rechargeUnifiedOrder'
const res = await this.$api.sendRequest({
url,
data: {
token: this.token,
code: this.aliCode,
payCode: "ALIPAY_JSAPI", //payCode 支付宝:ALIPAY_JSAPI 微信:WECHAT_JSAPI
out_trade_no: this.out_trade_no,
goods_type: 2,
},
async: false
})
// 拼接支付参数
const { trade_no } = res.data.chlRetParam
await requestPayment({
provider,
orderInfo: trade_no
});
// 退出小程序
// wx.exitMiniProgram()
this.getBalance()
this.$refs.mescroll.refresh();
this.show = false;
} catch (e) {
//TODO handle the exception
console.log(e);
}
},
async weixinPay() {
try {
let provider = 'weixin'
// 微信登录
const loginRes = await uniLogin({ provider })
// console.log(loginRes, 'loginRes');
const wxCode = loginRes.code ;
// 请求后端
// console.log('wxCode', wxCode);
// return
const appBaseInfo = wx.getAppBaseInfo()
// console.log(666);
// let url = '/api/boofopay/rechargeUnifiedOrder'
let url = '/api/boofopay/preRechargeUnifiedOrder'
const res = await this.$api.sendRequest({
url,
data: {
token: this.token,
// code: wxCode,
payCode: "WECHAT_JSAPI", //payCode 支付宝:ALIPAY_JSAPI 微信:WECHAT_JSAPI
out_trade_no: this.out_trade_no,
goods_type: 2
},
// success: res => {
// if (res.code < 0) {
// this.$util.showToast({
// title: res.message
// });
// }
// },
async: false
})
// console.log('获取宝付的token', res.data);
// #ifdef MP-WEIXIN
uni.navigateToMiniProgram({
appId:'wx9f0f95c42bcf73c9',
path: `pages/pay-plugin/pay-plugin?tradeNo=${res.data.token}&type=BF`,
success: () => {
// this.$util.redirectTo('/pages/member/index');
this.getBalance()
this.$refs.mescroll.refresh();
this.show = false;
}
})
// #endif
// #ifdef APP-PLUS
plus.share.getServices(response => {
let sweixin = null;
for (let i = 0; i < response.length; i++) {
let t = response[i];
if (t.id == 'weixin') {
sweixin = t;
}
}
if(sweixin) {
sweixin.launchMiniProgram({
id:'gh_d3de2c52074f',
type: 0,
path: `pages/pay-plugin/pay-plugin?tradeNo=${res.data.token}&type=BF`,
success: () => {
this.show = false
this.$util.showToast({
title: '支付成功'
});
}
})
} else {
plus.nativeUI.alert('当前环境不支持微信操作!');
}
})
// #endif
// 拼接支付参数
// const { timeStamp, nonceStr, package: payPackage, signType, paySign } = res.data.chlRetParam
// .wc_pay_data
// await requestPayment({
// provider,
// timeStamp,
// nonceStr,
// package: payPackage,
// signType,
// paySign,
// });
// 退出小程序
// wx.exitMiniProgram()
// this.getBalance()
// this.$refs.mescroll.refresh();
// this.show = false;
} catch (e) {
//TODO handle the exception
console.log(e);
}
},
}
}
</script>
<style lang="scss" scoped>
/deep/ .mescroll-uni-content {
background-color: #FFFFFF;
.jcsb {
width: calc(100 vw - 64rpx) !important;
}
}
.head {
width: 686rpx;
height: 232rpx;
background: linear-gradient(130deg, #21BBF3 0%, #09B6FF 100%);
border-radius: 24rpx;
padding: 0 48rpx;
box-sizing: border-box;
margin: 0 auto;
margin-top: 32rpx;
.head-yu {
font-size: 28rpx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #FFFFFF;
line-height: 40rpx;
margin-top: 48rpx;
}
.head-one {
font-size: 64rpx;
font-family: DINAlternate-Bold, DINAlternate;
font-weight: bold;
color: #FFFFFF;
line-height: 64rpx;
margin-top: 16rpx;
span {
font-size: 28rpx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #FFFFFF;
line-height: 40rpx;
margin-left: 8rpx;
}
}
.covip {
width: 152rpx;
height: 64rpx;
background: #FFFFFF;
border-radius: 32rpx;
font-size: 28rpx;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #21BBF3;
line-height: 40rpx;
margin-top: 88rpx;
}
}
.list {
width: calc(100 vw - 64rpx);
height: 100%;
background: #FFFFFF;
border-radius: 24rpx;
padding: 32rpx 32rpx 40rpx 32rpx;
box-sizing: border-box;
margin: 0 auto;
margin-top: 30rpx;
.card {
width: calc(100% - 64rpx);
margin: 20rpx auto;
display: flex;
justify-content: space-between;
padding-bottom: 20rpx;
border-bottom: #BFBFBF 1rpx solid;
.time-one {
font-size: 24rpx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #999999;
line-height: 34rpx;
margin: 8rpx 4rpx 0 0;
}
.name {
font-size: 28rpx;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #222222;
line-height: 44rpx;
margin-bottom: 8rpx;
}
.right {
font-size: 40rpx;
font-family: DINAlternate-Bold, DINAlternate;
font-weight: bold;
color: #222222;
}
}
.name-cz {
font-size: 28rpx;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #222222;
line-height: 40rpx;
margin-top: 32rpx;
}
.time-two {
font-size: 24rpx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #999999;
margin-top: 8rpx;
}
.sex {
font-size: 40rpx;
font-family: DINAlternate-Bold, DINAlternate;
font-weight: bold;
color: #222222;
line-height: 48rpx;
margin-top: 48rpx;
}
.xukjs {
width: 622rpx;
height: 1rpx;
background: #E8E8E8;
border-radius: 2rpx;
margin-top: 32rpx;
}
}
.Recharge {
width: 750rpx;
height: 854rpx;
background: #FFFFFF;
border-radius: 32rpx 32rpx 0rpx 0rpx;
position: fixed;
bottom: 0;
image {
width: 40rpx;
height: 40rpx;
}
.qinru {
font-size: 32rpx;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #222222;
line-height: 44rpx;
margin-top: 40rpx;
padding: 0 32rpx;
box-sizing: border-box;
}
.mannin {
margin-top: 64rpx;
display: flex;
flex-wrap: wrap;
.mannin-one {
width: 202rpx;
height: 104rpx;
background: rgba(33, 187, 243, 0.08);
border-radius: 16rpx;
font-size: 36rpx;
font-family: DINAlternate-Bold, DINAlternate;
font-weight: bold;
color: #21BBF3;
line-height: 64rpx;
margin: 10rpx 24rpx;
}
}
.head-pay {
padding: 24rpx 0 0 32rpx;
// margin-top: 24rpx;
}
.head-pay div:nth-child(2) {
// margin-left: 68rpx;
position: relative;
input {
// border: 1rpx solid red;
width: 700rpx;
height: 70rpx;
background: #F6F6F6;
border-radius: 16rpx;
margin: 0 auto;
padding: 0 68rpx;
box-sizing: border-box;
}
.arr {
font-size: 36rpx;
font-family: DINAlternate-Bold, DINAlternate;
font-weight: bold;
color: #21BBF3;
line-height: 44rpx;
position: absolute;
top: 50%;
left: 20rpx;
transform: translateY(-50%);
}
.box {
position: absolute;
top: 50%;
transform: translateY(-50%);
right: 24rpx;
}
}
.about {
font-size: 24rpx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #BFBFBF;
line-height: 34rpx;
margin: 16rpx 0 32rpx 0;
margin-left: 30rpx;
}
.xuind {
width: 654rpx;
height: 1rpx;
background: #E8E8E8;
margin: 0 auto;
border-radius: 2rpx;
margin-bottom: 4rpx;
}
.Select-payment {
width: 702rpx;
background: #FFFFFF;
border-radius: 16rpx;
margin-top: 24rpx;
padding: 32rpx;
box-sizing: border-box;
margin: 0 auto;
.arr {
margin-right: 16rpx;
margin-bottom: 32rpx;
image {
width: 40rpx;
height: 40rpx;
}
text {
font-size: 28rpx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #333333;
line-height: 40rpx;
margin-left: 16rpx;
}
}
}
.btn-qz {
width: 686rpx;
height: 80rpx;
background: #21BBF3;
border-radius: 40rpx;
font-size: 28rpx;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #FFFFFF;
line-height: 40rpx;
margin: 0 auto;
}
}
</style>