<template>
|
|
<view class="promote-page">
|
|
|
|
<uv-status-bar></uv-status-bar>
|
|
<!-- 主要内容区域 -->
|
|
<view class="content">
|
|
<!-- 推广官图片 -->
|
|
<view class="promote-image-container">
|
|
<uv-icon name="arrow-left" size="20" color="black" @click="goBack"></uv-icon>
|
|
<view :style="{flex: 1, justifyContent: 'center', display: 'flex'}">
|
|
<image
|
|
class="promote-image"
|
|
src="/static/推广官.png"
|
|
mode="widthFix"
|
|
></image>
|
|
</view>
|
|
</view>
|
|
|
|
<!-- 推广标语图片 -->
|
|
<view class="slogan-container">
|
|
<image
|
|
class="slogan-image"
|
|
src="/static/推广标语.png"
|
|
mode="widthFix"
|
|
></image>
|
|
</view>
|
|
|
|
|
|
</view>
|
|
|
|
<!-- 外部大容器 -->
|
|
<view class="main-container">
|
|
<!-- 个人信息容器 -->
|
|
<view class="profile-container">
|
|
<image class="profile-avatar" :src="userInfo.avatar" mode="aspectFill"></image>
|
|
<view class="profile-info">
|
|
<text class="profile-name">{{ userInfo.name }}</text>
|
|
<!-- <text class="profile-id">ID: {{ userInfo.id }}</text> -->
|
|
</view>
|
|
<view class="profile-stats">
|
|
<view class="stat-item">
|
|
<text class="stat-number">{{ num }}</text>
|
|
<text class="stat-label">推广人数</text>
|
|
</view>
|
|
<view class="stat-item">
|
|
<text class="stat-number">{{ userInfo.price || 0 }}</text>
|
|
<text class="stat-label">总佣金</text>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
|
|
<!-- 功能按钮区域 -->
|
|
<view class="function-buttons">
|
|
<view class="function-item" @click="goTeam">
|
|
<image class="function-icon" src="/static/团队图标.png" mode="aspectFit"></image>
|
|
<text class="function-text">我的团队</text>
|
|
</view>
|
|
<view class="function-item" @click="goQrcode">
|
|
<image class="function-icon" src="/static/二维码图标.png" mode="aspectFit"></image>
|
|
<text class="function-text">我的二维码</text>
|
|
</view>
|
|
<view class="function-item" @click="goCash">
|
|
<image class="function-icon" src="/static/提现图标.png" mode="aspectFit"></image>
|
|
<text class="function-text">提现</text>
|
|
</view>
|
|
</view>
|
|
|
|
<!-- 余额显示 -->
|
|
<view class="balance-section">
|
|
<text class="balance-label">余额</text>
|
|
<text class="balance-amount">¥{{ userInfo.commission || 0 }}</text>
|
|
<!-- <uv-icon name="arrow-right" size="16" color="#999"></uv-icon> -->
|
|
</view>
|
|
|
|
<!-- 转账记录容器 -->
|
|
<view class="record-container">
|
|
<view class="record-list">
|
|
<view v-if="hasMore && !list.length">
|
|
<uv-loading-icon text="加载中" ></uv-loading-icon>
|
|
</view>
|
|
<view v-else-if="!list.length">
|
|
<uv-empty ></uv-empty>
|
|
</view>
|
|
<view v-else class="record-item" v-for="(item, index) in list" :key="index">
|
|
<view class="record-avatar">
|
|
<image class="avatar" :src="item.userInfo.avatar" mode="aspectFill"></image>
|
|
<text class="avatar-name">{{ item.user_dictText }}</text>
|
|
</view>
|
|
<view class="record-info">
|
|
<text class="record-title">{{ item.title }}</text>
|
|
<text class="record-date">{{ item.createTime }}</text>
|
|
</view>
|
|
<view class="record-amount">
|
|
<text class="amount">{{ item.type === '1' ? '+' + item.money : '-' + item.money }}</text>
|
|
|
|
<!-- 领取按钮 - 当status=1且为微信提现时显示 -->
|
|
<uv-button
|
|
v-if="item.withdrawal && item.withdrawal.status === '1' && item.withdrawal.withdrawStatus === '0' && item.withdrawal.method === '0'"
|
|
:custom-style="{
|
|
height: '60rpx',
|
|
borderRadius: '30rpx',
|
|
background: '#06DADC',
|
|
border: '1rpx solid #06DADC',
|
|
lineHeight: '60rpx',
|
|
fontSize: '24rpx',
|
|
padding: '0 20rpx'
|
|
}"
|
|
type="primary"
|
|
size="mini"
|
|
@click="requestMerchantTransfer(item.withdrawal)">
|
|
领取
|
|
</uv-button>
|
|
|
|
<text class="status"
|
|
:class="item.withdrawal.status === '1'
|
|
&& item.withdrawal.withdrawStatus === '0' ? 'status-available' : 'status-received'"
|
|
v-else-if="item.withdrawal ">{{ getText(item.withdrawal) }}</text>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
|
|
<!-- 底部固定按钮 -->
|
|
<view class="bottom-button-container">
|
|
<uv-button :custom-style="{
|
|
|
|
height: '82rpx',
|
|
borderRadius: '198rpx',
|
|
background: '#06DADC',
|
|
border: '2rpx solid #06DADC',
|
|
lineHeight: '82rpx',
|
|
fontSize: '36rpx'
|
|
}" type="primary" @click="goQrcode">分享</uv-button>
|
|
<uv-safe-bottom></uv-safe-bottom>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
import MixinList from '@/mixins/list'
|
|
import uvLoadingIcon from '../../uni_modules/uv-loading-icon/components/uv-loading-icon/uv-loading-icon.vue'
|
|
export default {
|
|
components: { uvLoadingIcon },
|
|
mixins: [MixinList],
|
|
data() {
|
|
return {
|
|
mixinListApi: 'promotion.water',
|
|
num: 0,
|
|
userInfo: {},
|
|
}
|
|
},
|
|
methods: {
|
|
goBack() {
|
|
uni.navigateBack()
|
|
},
|
|
goTeam() {
|
|
uni.navigateTo({
|
|
url: '/subPages/user/team'
|
|
})
|
|
},
|
|
goCash() {
|
|
uni.navigateTo({
|
|
url: '/subPages/user/cash'
|
|
})
|
|
},
|
|
|
|
getText(widhdraw) {
|
|
// 如果已经领取了
|
|
if (widhdraw.withdrawStatus !== '0') {
|
|
return '已领取,' + (widhdraw.method === '0' ? '微信打款' : '线下付款')
|
|
}else if (widhdraw.status === '0') {
|
|
return '提现待审核中'
|
|
}else if(widhdraw.status === '2'){
|
|
return '审核失败!'
|
|
}
|
|
},
|
|
// 获取推广统计
|
|
async getStatistics() {
|
|
const res = await this.$api.promotion.statistics()
|
|
if (res.code === 200) {
|
|
this.num = res.result.num
|
|
}
|
|
},
|
|
// 获取用户信息
|
|
async getUserInfo() {
|
|
const res = await this.$api.login.getUserInfo()
|
|
if (res.code === 200) {
|
|
this.userInfo = res.result
|
|
}
|
|
},
|
|
// 提现接口
|
|
requestMerchantTransfer(item) {
|
|
if (!wx.canIUse('requestMerchantTransfer')) {
|
|
wx.showModal({
|
|
content: '你的微信版本过低,请更新至最新版本。',
|
|
showCancel: false,
|
|
});
|
|
return
|
|
}
|
|
// 提现
|
|
|
|
// #ifdef H5
|
|
// H5环境下检查微信环境
|
|
if (!this.isInWechat()) {
|
|
uni.showToast({
|
|
title: '请在微信中打开',
|
|
icon: 'none'
|
|
})
|
|
return
|
|
}
|
|
|
|
// H5环境下使用专门的H5提现方法
|
|
this.requestMerchantTransferH5(item.packageInfo, async () => {
|
|
const withdrawRes = await this.$api.promotion.withdrawSuccess({
|
|
id : item.id
|
|
})
|
|
if (withdrawRes.code === 200) {
|
|
uni.showToast({
|
|
title: '提现成功',
|
|
icon: 'success'
|
|
})
|
|
}
|
|
})
|
|
return
|
|
// #endif
|
|
|
|
// #ifdef MP-WEIXIN
|
|
wx.requestMerchantTransfer({
|
|
mchId: '1724993508',//
|
|
appId: wx.getAccountInfoSync().miniProgram.appId,
|
|
package: item.packageInfo,
|
|
success: async (res) => {
|
|
// res.err_msg将在页面展示成功后返回应用时返回ok,并不代表提款成功
|
|
console.log('success:', res);
|
|
// this.getData()
|
|
|
|
const withdrawRes = await this.$api.promotion.withdrawSuccess({
|
|
id : item.id
|
|
})
|
|
if (withdrawRes.code === 200) {
|
|
uni.showToast({
|
|
title: '提现成功',
|
|
icon: 'success'
|
|
})
|
|
}
|
|
},
|
|
fail: (res) => {
|
|
console.log('fail:', res);
|
|
// this.getData()
|
|
},
|
|
});
|
|
// #endif
|
|
},
|
|
|
|
// #ifdef H5
|
|
// H5环境下的微信收款确认
|
|
requestMerchantTransferH5(packageInfo, callback) {
|
|
// 使用Vue原型上的jWeixin
|
|
const jWeixin = this.$jWeixin
|
|
if (!jWeixin) {
|
|
console.error('jWeixin未初始化')
|
|
uni.showToast({
|
|
title: '微信环境异常',
|
|
icon: 'none'
|
|
})
|
|
return
|
|
}
|
|
|
|
jWeixin.ready(() => {
|
|
jWeixin.checkJsApi({
|
|
jsApiList: ['requestMerchantTransfer'],
|
|
success: (res) => {
|
|
if (res.checkResult['requestMerchantTransfer']) {
|
|
// H5环境下使用WeixinJSBridge
|
|
if (typeof WeixinJSBridge !== 'undefined') {
|
|
WeixinJSBridge.invoke('requestMerchantTransfer', {
|
|
mchId: '1724993508',
|
|
appId: wx.getAccountInfoSync().miniProgram.appId,
|
|
package: packageInfo,
|
|
}, (res) => {
|
|
if (res.err_msg === 'requestMerchantTransfer:ok') {
|
|
|
|
callback && callback()
|
|
} else {
|
|
console.log('提现失败:', res)
|
|
uni.showToast({
|
|
title: '提现失败,请稍后再试',
|
|
icon: 'none'
|
|
})
|
|
}
|
|
})
|
|
} else {
|
|
console.error('WeixinJSBridge未找到')
|
|
uni.showToast({
|
|
title: '请在微信中打开',
|
|
icon: 'none'
|
|
})
|
|
}
|
|
} else {
|
|
uni.showToast({
|
|
title: '你的微信版本过低,请更新至最新版本',
|
|
icon: 'none'
|
|
})
|
|
}
|
|
},
|
|
fail: (error) => {
|
|
console.error('checkJsApi失败:', error)
|
|
uni.showToast({
|
|
title: '微信接口检查失败',
|
|
icon: 'none'
|
|
})
|
|
}
|
|
})
|
|
})
|
|
|
|
jWeixin.error((res) => {
|
|
console.error('微信配置失败:', res)
|
|
uni.showToast({
|
|
title: '微信配置失败',
|
|
icon: 'none'
|
|
})
|
|
})
|
|
},
|
|
// #endif
|
|
|
|
// 去二维码
|
|
goQrcode() {
|
|
uni.navigateTo({
|
|
url: '/subPages/user/share'
|
|
})
|
|
},
|
|
},
|
|
async onShow() {
|
|
Promise.all([
|
|
this.getUserInfo(),
|
|
this.getStatistics()
|
|
])
|
|
},
|
|
|
|
}
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
.promote-page {
|
|
min-height: 100vh;
|
|
background: linear-gradient(124deg, #22F2EB 0%, #24B0F6 30%);
|
|
// background: linear-gradient(124deg, #22F2EB 0%, #24B0F6 100%);
|
|
|
|
}
|
|
|
|
.content {
|
|
padding: 0rpx 40rpx 0;
|
|
|
|
.promote-image-container {
|
|
display: flex;
|
|
justify-content: center;
|
|
margin-bottom: 30rpx;
|
|
align-items: center;
|
|
|
|
.promote-image {
|
|
margin: 0 auto;
|
|
width: 168rpx;
|
|
}
|
|
}
|
|
|
|
.slogan-container {
|
|
display: flex;
|
|
justify-content: center;
|
|
margin-bottom: 80rpx;
|
|
|
|
.slogan-image {
|
|
width: 670rpx;
|
|
}
|
|
}
|
|
}
|
|
|
|
// 外部大容器
|
|
.main-container {
|
|
width: 100%;
|
|
border-radius: 48rpx;
|
|
border: 2rpx solid #06DADC12;
|
|
box-sizing: border-box;
|
|
padding: 40rpx;
|
|
padding-bottom: 200rpx;
|
|
background: linear-gradient(180deg, #DEFFFF 0%, #FBFEFF 22.65%, #F0FBFF 100%);
|
|
|
|
// 个人信息容器
|
|
.profile-container {
|
|
background: #fff;
|
|
margin-bottom: 30rpx;
|
|
display: flex;
|
|
align-items: center;
|
|
|
|
|
|
border-radius: 48rpx;
|
|
border-width: 2rpx;
|
|
justify-content: space-between;
|
|
background: linear-gradient(180deg, #DEFFFF 0%, #FBFEFF 22.65%, #F0FBFF 100%);
|
|
// background: red;
|
|
border: 2rpx solid #06DADC12;
|
|
// padding-top: 32rpx;
|
|
padding-right: 40rpx;
|
|
// padding-bottom: 32rpx;
|
|
// padding-left: 40rpx;
|
|
height: 200rpx;
|
|
.profile-avatar {
|
|
width: 128rpx;
|
|
height: 128rpx;
|
|
border-radius: 50%;
|
|
margin-right: 24rpx;
|
|
}
|
|
|
|
.profile-info {
|
|
flex: 1;
|
|
|
|
.profile-name {
|
|
display: block;
|
|
font-size: 32rpx;
|
|
font-weight: 600;
|
|
color: #333;
|
|
margin-bottom: 8rpx;
|
|
}
|
|
|
|
.profile-id {
|
|
font-size: 24rpx;
|
|
color: #999;
|
|
}
|
|
}
|
|
|
|
.profile-stats {
|
|
display: flex;
|
|
|
|
.stat-item {
|
|
text-align: center;
|
|
margin-left: 100rpx;
|
|
|
|
.stat-number {
|
|
display: block;
|
|
font-size: 32rpx;
|
|
font-weight: bold;
|
|
color: #333;
|
|
margin-bottom: 8rpx;
|
|
}
|
|
|
|
.stat-label {
|
|
font-size: 24rpx;
|
|
color: #999;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// 功能按钮区域
|
|
.function-buttons {
|
|
|
|
display: flex;
|
|
justify-content: space-around;
|
|
align-items: center;
|
|
margin-bottom: 48rpx;
|
|
|
|
.function-item {
|
|
display: flex;
|
|
// flex-direction: column;
|
|
align-items: center;
|
|
|
|
gap: 16rpx;
|
|
border-right: 1px solid #06DADC;
|
|
padding-right: 30rpx;
|
|
&:nth-child(3) {
|
|
border-right: none;
|
|
}
|
|
.function-icon {
|
|
width: 46rpx;
|
|
height: 46rpx;
|
|
// margin-bottom: 16rpx;
|
|
}
|
|
|
|
.function-text {
|
|
font-size: 24rpx;
|
|
color: #181818;
|
|
}
|
|
}
|
|
}
|
|
|
|
// 余额显示
|
|
.balance-section {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
margin-bottom: 40rpx;
|
|
|
|
.balance-label {
|
|
font-size: 32rpx;
|
|
color: #191919;
|
|
font-weight: 500;
|
|
}
|
|
|
|
.balance-amount {
|
|
font-size: 32rpx;
|
|
font-weight: 500;
|
|
color: #191919;
|
|
flex: 1;
|
|
margin-left: 20rpx;
|
|
}
|
|
}
|
|
|
|
// 转账记录容器
|
|
.record-container {
|
|
.record-list {
|
|
min-height: 40vh;
|
|
border: 1px solid #F0F0F0;
|
|
border-radius: 24rpx;
|
|
|
|
// background: red;
|
|
.record-item {
|
|
height: 116rpx;
|
|
background: #fff;
|
|
// border-radius: 16rpx;
|
|
padding: 16rpx 32rpx;
|
|
// margin-bottom: 20rpx;
|
|
display: flex;
|
|
align-items: center;
|
|
border-bottom: 2rpx solid #F1F1F1 ;
|
|
// margin-right: 24rpx;
|
|
// box-sizing: border-box;
|
|
|
|
.record-avatar{
|
|
display: flex;
|
|
align-items: center;
|
|
flex-direction: column;
|
|
gap: 12rpx;
|
|
.avatar-name {
|
|
font-size: 24rpx;
|
|
color: #999;
|
|
}
|
|
.avatar {
|
|
width: 50rpx;
|
|
height: 50rpx;
|
|
border-radius: 50%;
|
|
// margin-right: 24rpx;
|
|
}
|
|
}
|
|
|
|
.record-info {
|
|
flex: 3;
|
|
text-align: center;
|
|
.record-title {
|
|
display: block;
|
|
font-size: 28rpx;
|
|
color: #333;
|
|
margin-bottom: 8rpx;
|
|
}
|
|
|
|
.record-date {
|
|
font-size: 26rpx;
|
|
color: #A3A3A3;
|
|
}
|
|
}
|
|
|
|
.record-amount {
|
|
flex: 2;
|
|
text-align: center;
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
gap: 8rpx;
|
|
|
|
.amount {
|
|
display: block;
|
|
font-size: 28rpx;
|
|
font-weight: bold;
|
|
color: #333;
|
|
}
|
|
|
|
.status {
|
|
font-size: 26rpx;
|
|
// padding: 8rpx 16rpx;
|
|
border-radius: 20rpx;
|
|
|
|
&.status-received {
|
|
// background: #f0f0f0;
|
|
color: #A3A3A3;
|
|
}
|
|
|
|
&.status-available {
|
|
// background: #22F2EB;
|
|
padding: 3rpx 16rpx;
|
|
|
|
color: $primary-color;
|
|
border: 2rpx solid $primary-color;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// 底部固定按钮
|
|
.bottom-button-container {
|
|
position: fixed;
|
|
bottom: 0;
|
|
left: 0;
|
|
right: 0;
|
|
padding: 30rpx 40rpx;
|
|
background: rgba(255, 255, 255, 0.95);
|
|
border-top: 1px solid #F1F1F1;
|
|
// height: 143rpx;
|
|
// backdrop-filter: blur(10rpx);
|
|
|
|
}
|
|
</style>
|