300 lines
6.5 KiB
Vue
300 lines
6.5 KiB
Vue
<template>
|
|
<view>
|
|
<TransNavVue title="我的钱包"/>
|
|
<view class="container">
|
|
<!-- 修改顶部黑色区域显示现金余额 -->
|
|
<view class="top-card black-bg">
|
|
|
|
<text class="amount">{{ walletData.balance || 0 }}</text>
|
|
<view class="card-content">
|
|
<text class="label">账号余额</text>
|
|
<view class="right-content" @click="showCashWithdraw">
|
|
<image src="/static/images/myPage/crownIcon.png" class="arrow-icon"></image>
|
|
<text class="withdraw-text">余额提现</text>
|
|
<image src="/static/images/rightBtn.png" class="arrow-icon"></image>
|
|
</view>
|
|
</view>
|
|
|
|
|
|
|
|
</view>
|
|
|
|
<!-- 修改下方橙色区域显示M币余额 -->
|
|
<view class="bottom-card orange-bg">
|
|
<view class="card-content">
|
|
<view class="left-content">
|
|
<text class="amount">{{ walletData.coin || 0 }}</text>
|
|
<view class="label">M币使用
|
|
<image style="width:24rpx;height:24rpx;display:inline-block" src="/static/images/rightBtn.png" ></image>
|
|
</view>
|
|
|
|
</view>
|
|
<image style="width: 150rpx; height:150rpx" src="/static/images/myPage/Mbg.png" class="honey-icon"></image>
|
|
</view>
|
|
</view>
|
|
|
|
<!-- 修改弹窗中的余额显示 -->
|
|
<uni-popup ref="popup" type="center">
|
|
<view class="popup-content center-popup">
|
|
<text class="title">现金提现</text>
|
|
<text class="balance">当前有<text class="amount-highlight">{{ walletData.balance || 0 }}</text>可提现</text>
|
|
<text class="notice">提现3-5分钟到账</text>
|
|
<button class="confirm-btn" @click="handleWithdraw">立即提现</button>
|
|
</view>
|
|
</uni-popup>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
|
|
<script setup>
|
|
import { ref, onMounted } from 'vue'
|
|
import { request } from '@/utils/request'
|
|
import { useTokenStorage } from '../../utils/storage'
|
|
import TransNavVue from '../../components/TransNav.vue'
|
|
const { getAccessToken,getOpenId } = useTokenStorage()
|
|
|
|
const popup = ref(null)
|
|
const walletData = ref({
|
|
balance: 0,
|
|
coin: 0
|
|
})
|
|
|
|
onMounted(() => {
|
|
getWalletInfo()
|
|
|
|
|
|
})
|
|
const getWalletInfo = async () => {
|
|
try {
|
|
const res = await request({
|
|
url: '/app-api/WeiXinMini/wallet/get/Info',
|
|
showLoading: true,
|
|
|
|
})
|
|
|
|
if (res.code === 0 || res.code === 200) {
|
|
walletData.value = res.data || {};
|
|
|
|
} else {
|
|
throw new Error(res.msg || '数据异常')
|
|
}
|
|
} catch (err) {
|
|
console.error('获取用户信息失败:', err)
|
|
|
|
}
|
|
}
|
|
|
|
|
|
const handleWithdraw = async () => {
|
|
try {
|
|
|
|
if (walletData.value.balance === 0) {
|
|
throw new Error('账号余额不足')
|
|
} else {
|
|
const res = await request({
|
|
url: '/app-api/weixin/pay/initiate/payout',
|
|
method: 'POST',
|
|
data: { transferAmount: walletData.value.balance,
|
|
openid: getOpenId(),
|
|
transferRemark: '极蜜部落提现',
|
|
transferSceneId: '1000',
|
|
transferSceneReportInfos: [
|
|
{
|
|
infoType: '活动名称',
|
|
infoContent: '极蜜部落提现'
|
|
},
|
|
{
|
|
infoType: '奖励说明',
|
|
infoContent: '提现奖励'
|
|
}
|
|
]
|
|
},
|
|
showLoading: true,
|
|
|
|
})
|
|
|
|
if (res.code === 0 || res.code === 200) {
|
|
uni.showToast({
|
|
title: '提现申请已提交',
|
|
icon: 'success'
|
|
});
|
|
await getWalletInfo()
|
|
} else {
|
|
throw new Error(res.msg || '提现失败')
|
|
}
|
|
}
|
|
} catch (err) {
|
|
console.error('提现失败:', err)
|
|
uni.showToast({
|
|
title: err.message || '提现失败',
|
|
icon: 'error'
|
|
});
|
|
} finally {
|
|
popup.value.close()
|
|
}
|
|
};
|
|
const showCashWithdraw = () => {
|
|
popup.value.open();
|
|
};
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
.container {
|
|
padding: 20rpx;
|
|
|
|
.top-card, .bottom-card {
|
|
border-radius: 16rpx;
|
|
padding: 50rpx;
|
|
margin-bottom: 20rpx;
|
|
height: 230rpx;
|
|
|
|
.amount {
|
|
font-size: 48rpx;
|
|
font-weight: bold;
|
|
color: #fff;
|
|
}
|
|
.card-content {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
|
|
|
|
|
|
|
|
|
|
.label {
|
|
font-size: 28rpx;
|
|
color: rgba(255, 255, 255, 0.8);
|
|
margin-top: 10rpx;
|
|
}
|
|
|
|
|
|
.right-content {
|
|
display: flex;
|
|
align-items: center;
|
|
|
|
.withdraw-text {
|
|
font-size: 28rpx;
|
|
color: #fff;
|
|
margin-left: 10rpx;
|
|
}
|
|
|
|
.arrow-icon {
|
|
width: 24rpx;
|
|
height: 24rpx;
|
|
margin-left: 10rpx;
|
|
}
|
|
}
|
|
|
|
.honey-icon {
|
|
width: 60rpx;
|
|
height: 60rpx;
|
|
}
|
|
}
|
|
}
|
|
|
|
.black-bg {
|
|
background: linear-gradient(to bottom, #3b3b3b, #060608);
|
|
}
|
|
|
|
.orange-bg {
|
|
background: #ff7f27;
|
|
}
|
|
|
|
.withdraw-btn {
|
|
background: #fff;
|
|
color: #000;
|
|
border-radius: 40rpx;
|
|
padding: 0 30rpx;
|
|
height: 60rpx;
|
|
line-height: 60rpx;
|
|
font-size: 28rpx;
|
|
}
|
|
|
|
.popup-content {
|
|
background: #fff;
|
|
padding: 40rpx;
|
|
border-radius: 20rpx ;
|
|
|
|
.title {
|
|
font-size: 36rpx;
|
|
font-weight: bold;
|
|
display: block;
|
|
margin-bottom: 30rpx;
|
|
}
|
|
|
|
.balance {
|
|
font-size: 32rpx;
|
|
display: block;
|
|
margin-bottom: 40rpx;
|
|
}
|
|
|
|
.confirm-btn {
|
|
background: #ff6f0e;
|
|
color: #fff;
|
|
height: 80rpx;
|
|
line-height: 80rpx;
|
|
border-radius: 40rpx;
|
|
font-size: 32rpx;
|
|
}
|
|
}
|
|
}
|
|
.center-popup {
|
|
width: 600rpx;
|
|
min-height: 400rpx;
|
|
margin: 0 auto;
|
|
border-radius: 30rpx;
|
|
padding: 50rpx;
|
|
background: linear-gradient(180deg #fff2da, #ffffff 57%);
|
|
|
|
|
|
.title {
|
|
font-size: 40rpx;
|
|
font-weight: bold;
|
|
display: block;
|
|
text-align: center;
|
|
margin-bottom: 40rpx;
|
|
color: #000; /* 标题保持黑色 */
|
|
}
|
|
|
|
.balance {
|
|
font-size: 36rpx;
|
|
display: block;
|
|
text-align: center;
|
|
margin-bottom: 30rpx;
|
|
color: #000; /* 整体文字为黑色 */
|
|
}
|
|
|
|
.amount-highlight {
|
|
color: #ff6f0e; /* 仅金额数字为橙色 */
|
|
}
|
|
|
|
.notice {
|
|
font-size: 28rpx;
|
|
color: #999;
|
|
display: block;
|
|
text-align: center;
|
|
margin-bottom: 50rpx;
|
|
}
|
|
|
|
.confirm-btn {
|
|
width: 100%;
|
|
background: #ff6f0e;
|
|
color: #fff;
|
|
height: 90rpx;
|
|
line-height: 90rpx;
|
|
border-radius: 45rpx;
|
|
font-size: 34rpx;
|
|
}
|
|
}
|
|
</style>
|