245 lines
7.0 KiB
Vue
245 lines
7.0 KiB
Vue
<template>
|
|
<view class="balance-transfer">
|
|
<view class="contain bg-white">
|
|
<input
|
|
style="height: 100rpx"
|
|
v-model="userSn"
|
|
type="text"
|
|
placeholder="请输入对方会员ID/手机号码进行转账"
|
|
/>
|
|
</view>
|
|
<view class="contain transfer-money bg-white mt20">
|
|
<view class="muted xs">转账金额</view>
|
|
<view class="input row-center">
|
|
<view style="font-size: 23px; align-self: flex-end; margin-bottom: 5px">¥</view>
|
|
<input v-model="money" type="digit" placeholder="0.00" />
|
|
<view class="column" style="flex: none">
|
|
<view
|
|
class="xs primary"
|
|
style="text-align: right"
|
|
@tap="money = wallet.user_money"
|
|
>全部</view
|
|
>
|
|
<view class="xs mt10" style="color: #bbbbbb"
|
|
>钱包余额¥{{ wallet.user_money }}</view
|
|
>
|
|
</view>
|
|
</view>
|
|
<view class="btn lg white row-center br60" @tap="transferBtn">转账</view>
|
|
<navigator
|
|
url="/bundle/pages/transfer_record/transfer_record"
|
|
hover-class="none"
|
|
class="mt20 nr lighter row-center"
|
|
>
|
|
转账记录</navigator
|
|
>
|
|
</view>
|
|
<view class="user contain bg-white mt20" v-if="transferList.length">
|
|
<view class="lg bold">最近转账</view>
|
|
<view class="list">
|
|
<view
|
|
class="item row"
|
|
v-for="(item, index) in transferList"
|
|
:key="index"
|
|
@tap="userSn = item.sn"
|
|
>
|
|
<image class="avatar mr30" :src="item.avatar"></image>
|
|
<view>
|
|
<view class="md">{{ item.nickname }}</view>
|
|
<view class="xs muted">会员ID:{{ item.sn }}</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<u-modal
|
|
:value="showTransferInfo"
|
|
show-cancel-button
|
|
title="确认转账给"
|
|
:confirm-color="primaryColor"
|
|
async-close
|
|
confirm-text="确认转账"
|
|
@confirm="showInputPwd"
|
|
@cancel="showTransferInfo = false"
|
|
>
|
|
<view class="slot-content row-center" style="padding: 40rpx 80rpx">
|
|
<view class="transfer-user row">
|
|
<image class="avatar mr30" :src="transferInfo.avatar"></image>
|
|
<view>
|
|
<view class="md">{{ transferInfo.nickname }}</view>
|
|
<view class="xs muted mt10">会员ID:{{ transferInfo.sn }}</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</u-modal>
|
|
<set-pay-pwd ref="setPayPwd" @confirm="transferFun"></set-pay-pwd>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
import {
|
|
hasPayPassword,
|
|
transfer,
|
|
getTransferRecent,
|
|
setPassword,
|
|
transferToInfo,
|
|
getWallet
|
|
} from '@/api/user'
|
|
import { trottle } from '@/utils/tools'
|
|
export default {
|
|
data() {
|
|
return {
|
|
showTransferInfo: false,
|
|
pwd: '',
|
|
comfirmPwd: '',
|
|
userSn: '',
|
|
money: '',
|
|
transferInfo: {},
|
|
transferList: [],
|
|
wallet: {}
|
|
}
|
|
},
|
|
onLoad() {
|
|
this.getTransferRecentFun()
|
|
this.getWalletFun()
|
|
this.transferFun = trottle(this.transferFun, 1000, this)
|
|
},
|
|
onShow() {
|
|
setTimeout(() => {
|
|
this.$refs.setPayPwd && this.$refs.setPayPwd.hasPayWord()
|
|
})
|
|
},
|
|
methods: {
|
|
getWalletFun() {
|
|
getWallet().then((res) => {
|
|
if (res.code == 1) {
|
|
this.wallet = res.data
|
|
}
|
|
})
|
|
},
|
|
showInputPwd() {
|
|
this.showTransferInfo = false
|
|
this.$refs.setPayPwd.showInputPwd()
|
|
},
|
|
getTransferRecentFun() {
|
|
getTransferRecent().then((res) => {
|
|
if (res.code == 1) {
|
|
this.transferList = res.data
|
|
}
|
|
})
|
|
},
|
|
async transferBtn() {
|
|
let { userSn, money } = this
|
|
if (!userSn)
|
|
return this.$toast({
|
|
title: '请输入对方会员ID/手机号码'
|
|
})
|
|
if (!money)
|
|
return this.$toast({
|
|
title: '请输入转账金额'
|
|
})
|
|
|
|
let data = {
|
|
transferTo: userSn
|
|
}
|
|
// 校验会员信息
|
|
const { code: vipCode, data: transferInfo } = await transferToInfo(data)
|
|
if (vipCode != 1) return
|
|
this.transferInfo = transferInfo
|
|
this.showTransferInfo = true
|
|
},
|
|
transferFun(payPwd) {
|
|
const { userSn, money } = this
|
|
let data = {
|
|
transferTo: userSn,
|
|
money: money,
|
|
pay_password: payPwd
|
|
}
|
|
transfer(data).then((res) => {
|
|
if (res.code == 1) {
|
|
this.$toast(
|
|
{
|
|
title: res.msg
|
|
}
|
|
// {
|
|
// tab: 2,
|
|
// url: '/bundle/pages/transfer_record/transfer_record'
|
|
// }
|
|
)
|
|
this.money = ''
|
|
this.showInputPwd()
|
|
this.getWalletFun()
|
|
this.getTransferRecentFun()
|
|
}
|
|
})
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss">
|
|
.balance-transfer {
|
|
padding: 20rpx 30rpx;
|
|
|
|
.contain {
|
|
border-radius: 20rpx;
|
|
padding: 0 24rpx;
|
|
}
|
|
|
|
.transfer-money {
|
|
padding: 30rpx 45rpx;
|
|
|
|
.input {
|
|
border-bottom: $solid-border;
|
|
margin-top: 30rpx;
|
|
|
|
input {
|
|
width: 100%;
|
|
height: 94rpx;
|
|
text-align: left;
|
|
font-size: 66rpx;
|
|
margin-left: 30rpx;
|
|
}
|
|
}
|
|
|
|
.btn {
|
|
background: linear-gradient(79deg, #f95f2f 0%, #ff2c3c 100%);
|
|
line-height: 84rpx;
|
|
margin-top: 80rpx;
|
|
}
|
|
}
|
|
|
|
.user {
|
|
padding: 22rpx 25rpx;
|
|
|
|
.list .item {
|
|
padding: 26rpx 0;
|
|
|
|
&:not(:last-of-type) {
|
|
border-bottom: $solid-border;
|
|
}
|
|
}
|
|
}
|
|
|
|
.avatar {
|
|
width: 68rpx;
|
|
height: 68rpx;
|
|
border-radius: 50%;
|
|
flex: none;
|
|
}
|
|
}
|
|
|
|
/* 弹窗 */
|
|
.balance-transfer .set-word input {
|
|
border: var(--border);
|
|
padding: 16rpx 20rpx;
|
|
font-size: 28rpx;
|
|
border-radius: 6rpx;
|
|
margin-bottom: 20rpx;
|
|
}
|
|
|
|
.balance-transfer .phone {
|
|
padding: 20rpx 0;
|
|
font-size: 42rpx;
|
|
}
|
|
</style>
|