387 lines
9.5 KiB
JavaScript
387 lines
9.5 KiB
JavaScript
// pages/promote/promote.js - 合作推广页面
|
|
|
|
const api = require('../../utils/api')
|
|
|
|
Page({
|
|
data: {
|
|
statusBarHeight: 44,
|
|
navBarHeight: 44,
|
|
totalNavHeight: 88,
|
|
showModal: false, // 控制弹窗显示
|
|
// 推广数据
|
|
isDistributor: false,
|
|
referralCode: '',
|
|
commissionStats: {
|
|
totalReferrals: 0,
|
|
commissionBalance: 0,
|
|
totalEarned: 0
|
|
},
|
|
referrals: [], // Recent referrals for grid
|
|
defaultAvatar: 'https://images.unsplash.com/photo-1534528741775-53994a69daeb?w=500&auto=format&fit=crop&q=60',
|
|
loading: false,
|
|
// 分享配置
|
|
shareConfig: null
|
|
},
|
|
|
|
onLoad() {
|
|
// Calculat nav bar height
|
|
const systemInfo = wx.getSystemInfoSync()
|
|
const statusBarHeight = systemInfo.statusBarHeight || 44
|
|
const menuButton = wx.getMenuButtonBoundingClientRect()
|
|
const navBarHeight = menuButton.height + (menuButton.top - statusBarHeight) * 2
|
|
const totalNavHeight = statusBarHeight + navBarHeight
|
|
|
|
this.setData({
|
|
statusBarHeight,
|
|
navBarHeight,
|
|
totalNavHeight
|
|
})
|
|
|
|
this.loadPromotionData()
|
|
this.loadShareConfig()
|
|
},
|
|
|
|
/**
|
|
* 加载分享配置
|
|
*/
|
|
async loadShareConfig() {
|
|
try {
|
|
const res = await api.promotion.getShareConfig('promote')
|
|
if (res.success && res.data) {
|
|
const util = require('../../utils/util')
|
|
const shareConfig = {
|
|
...res.data,
|
|
imageUrl: res.data.imageUrl ? util.getFullImageUrl(res.data.imageUrl) : ''
|
|
}
|
|
this.setData({ shareConfig })
|
|
}
|
|
} catch (error) {
|
|
console.error('加载分享配置失败:', error)
|
|
}
|
|
},
|
|
|
|
/**
|
|
* 加载推广数据
|
|
*/
|
|
async loadPromotionData() {
|
|
this.setData({ loading: true })
|
|
|
|
try {
|
|
// 1. Get Stats
|
|
const res = await api.commission.getStats()
|
|
if (res.success && res.data) {
|
|
this.setData({
|
|
commissionStats: {
|
|
totalReferrals: res.data.totalReferrals || 0,
|
|
commissionBalance: (res.data.commissionBalance || 0).toFixed(2),
|
|
totalEarned: res.data.totalCommission || 0,
|
|
// 绑定到 WXML 中的字段
|
|
shareCount: res.data.shareCount || 0,
|
|
registeredCount: res.data.totalReferrals || 0,
|
|
orderCount: res.data.orderCount || 0
|
|
},
|
|
referralCode: res.data.referralCode || '',
|
|
isDistributor: res.data.isDistributor || false
|
|
})
|
|
}
|
|
|
|
// 2. Get Referrals Preview (Limit 10 for list)
|
|
const refRes = await api.commission.getReferrals({ page: 1, limit: 10, sortBy: 'time' })
|
|
if (refRes.success && refRes.data) {
|
|
const util = require('../../utils/util')
|
|
const list = (refRes.data.list || refRes.data || []).map(item => {
|
|
let avatar = item.avatar || item.avatarUrl || item.userAvatar;
|
|
if (avatar) {
|
|
avatar = util.getFullImageUrl(avatar);
|
|
}
|
|
const joinedAtRaw = item.boundAt || item.createdAt || '';
|
|
const joinedAt = joinedAtRaw ? util.formatTime(joinedAtRaw, 'YYYY-MM-DD') : '';
|
|
return {
|
|
userId: item.id || item.userId,
|
|
userName: item.nickname || item.userName || item.name || '未知用户',
|
|
userAvatar: avatar || this.data.defaultAvatar,
|
|
level: item.levelText || item.roleName || '普通用户',
|
|
joinedAt: joinedAt,
|
|
referralCount: item.referralCount || 0,
|
|
performance: item.totalContribution || 0
|
|
};
|
|
});
|
|
this.setData({
|
|
referrals: list
|
|
});
|
|
}
|
|
|
|
this.setData({ loading: false })
|
|
} catch (error) {
|
|
console.error('加载推广数据失败:', error)
|
|
this.setData({ loading: false })
|
|
}
|
|
},
|
|
|
|
onWithdraw() {
|
|
wx.navigateTo({
|
|
url: '/pages/withdraw/withdraw'
|
|
})
|
|
},
|
|
|
|
/**
|
|
* 跳转到全部推荐用户列表
|
|
*/
|
|
goToReferrals() {
|
|
wx.navigateTo({
|
|
url: '/pages/referrals/referrals'
|
|
})
|
|
},
|
|
|
|
/**
|
|
* 返回上一页
|
|
*/
|
|
goBack() {
|
|
wx.navigateBack({
|
|
fail: () => {
|
|
// 如果无法返回,跳转到个人中心
|
|
wx.switchTab({ url: '/pages/profile/profile' })
|
|
}
|
|
})
|
|
},
|
|
|
|
/**
|
|
* 显示合作推广弹窗
|
|
*/
|
|
showPromotionModal() {
|
|
this.setData({ showModal: true })
|
|
},
|
|
|
|
/**
|
|
* 关闭合作推广弹窗
|
|
*/
|
|
closeModal() {
|
|
this.setData({ showModal: false })
|
|
},
|
|
|
|
/**
|
|
* 阻止弹窗内容区域点击事件冒泡
|
|
*/
|
|
preventClose() {
|
|
// 空函数,阻止事件冒泡
|
|
},
|
|
|
|
/**
|
|
* 申请合作推广
|
|
*/
|
|
applyPromotion() {
|
|
if (this.data.isDistributor) {
|
|
wx.showToast({
|
|
title: '您已是分销商',
|
|
icon: 'none',
|
|
duration: 2000
|
|
})
|
|
return
|
|
}
|
|
|
|
wx.showModal({
|
|
title: '成为分销商',
|
|
content: '购买身份卡即可成为分销商,推荐好友赚佣金!',
|
|
confirmText: '了解详情',
|
|
cancelText: '暂不需要',
|
|
confirmColor: '#B06AB3',
|
|
success: (res) => {
|
|
if (res.confirm) {
|
|
// 跳转到充值页面购买身份卡
|
|
wx.navigateTo({
|
|
url: '/pages/recharge/recharge'
|
|
})
|
|
}
|
|
}
|
|
})
|
|
},
|
|
|
|
/**
|
|
* 跳转到佣金中心
|
|
*/
|
|
goToCommission() {
|
|
wx.navigateTo({
|
|
url: '/pages/commission/commission'
|
|
})
|
|
},
|
|
|
|
goToPoster() {
|
|
wx.navigateTo({
|
|
url: '/pages/promote-poster/promote-poster'
|
|
})
|
|
},
|
|
|
|
/**
|
|
* 预览推广素材
|
|
*/
|
|
previewMaterial(e) {
|
|
const { index } = e.currentTarget.dataset
|
|
const material = this.data.materials[index]
|
|
|
|
wx.previewImage({
|
|
current: material.image,
|
|
urls: this.data.materials.map(m => m.image)
|
|
})
|
|
},
|
|
|
|
/**
|
|
* 下载推广素材
|
|
*/
|
|
downloadMaterial(e) {
|
|
const { index } = e.currentTarget.dataset
|
|
const material = this.data.materials[index]
|
|
|
|
wx.showLoading({ title: '下载中...' })
|
|
|
|
wx.downloadFile({
|
|
url: material.image,
|
|
success: (res) => {
|
|
wx.hideLoading()
|
|
if (res.statusCode === 200) {
|
|
wx.saveImageToPhotosAlbum({
|
|
filePath: res.tempFilePath,
|
|
success: () => {
|
|
wx.showToast({
|
|
title: '已保存到相册',
|
|
icon: 'success'
|
|
})
|
|
},
|
|
fail: () => {
|
|
wx.showToast({
|
|
title: '保存失败',
|
|
icon: 'none'
|
|
})
|
|
}
|
|
})
|
|
}
|
|
},
|
|
fail: () => {
|
|
wx.hideLoading()
|
|
wx.showToast({
|
|
title: '下载失败',
|
|
icon: 'none'
|
|
})
|
|
}
|
|
})
|
|
},
|
|
|
|
/**
|
|
* 查看教程详情
|
|
*/
|
|
viewTutorial(e) {
|
|
const { index } = e.currentTarget.dataset
|
|
const tutorial = this.data.tutorials[index]
|
|
|
|
wx.showModal({
|
|
title: tutorial.title,
|
|
content: tutorial.content,
|
|
showCancel: false,
|
|
confirmText: '知道了'
|
|
})
|
|
},
|
|
|
|
/**
|
|
* 复制推荐码
|
|
*/
|
|
copyReferralCode() {
|
|
if (!this.data.referralCode) {
|
|
wx.showToast({
|
|
title: '暂无推荐码',
|
|
icon: 'none'
|
|
})
|
|
return
|
|
}
|
|
|
|
wx.setClipboardData({
|
|
data: this.data.referralCode,
|
|
success: () => {
|
|
wx.showToast({
|
|
title: '已复制推荐码',
|
|
icon: 'success'
|
|
})
|
|
}
|
|
})
|
|
},
|
|
|
|
/**
|
|
* 分享推荐码
|
|
*/
|
|
onShareAppMessage() {
|
|
const { referralCode, isDistributor, shareConfig } = this.data
|
|
const referralCodeParam = referralCode ? `?referralCode=${referralCode}` : ''
|
|
|
|
// 记录分享行为
|
|
api.promotion.recordShare({
|
|
type: 'app_message',
|
|
page: '/pages/promote/promote',
|
|
referralCode: referralCode
|
|
}).then(() => {
|
|
this.loadPromotionData()
|
|
}).catch(err => console.error('记录分享失败:', err))
|
|
|
|
// 如果有分享配置且是分销商,使用配置内容
|
|
if (shareConfig && isDistributor && referralCode) {
|
|
return {
|
|
title: shareConfig.title,
|
|
path: `${shareConfig.path || '/pages/index/index'}${referralCodeParam}`,
|
|
imageUrl: shareConfig.imageUrl
|
|
}
|
|
}
|
|
|
|
// 默认分享逻辑
|
|
if (!isDistributor || !referralCode) {
|
|
return {
|
|
title: '心伴AI - 情感陪伴聊天机器人',
|
|
path: '/pages/index/index',
|
|
imageUrl: '/images/share-cover.jpg'
|
|
}
|
|
}
|
|
|
|
return {
|
|
title: `我的推荐码:${referralCode},注册即可享受优惠!`,
|
|
path: `/pages/index/index?referralCode=${referralCode}`,
|
|
imageUrl: '/images/share-commission.png'
|
|
}
|
|
},
|
|
|
|
/**
|
|
* 分享到朋友圈
|
|
*/
|
|
onShareTimeline() {
|
|
const { referralCode, isDistributor, shareConfig } = this.data
|
|
const query = referralCode ? `referralCode=${referralCode}` : ''
|
|
|
|
// 记录分享行为
|
|
api.promotion.recordShare({
|
|
type: 'timeline',
|
|
page: '/pages/promote/promote',
|
|
referralCode: referralCode
|
|
}).then(() => {
|
|
this.loadPromotionData()
|
|
}).catch(err => console.error('记录分享失败:', err))
|
|
|
|
// 如果有分享配置且是分销商,使用配置内容
|
|
if (shareConfig && isDistributor && referralCode) {
|
|
return {
|
|
title: shareConfig.title,
|
|
query: query || shareConfig.query,
|
|
imageUrl: shareConfig.imageUrl
|
|
}
|
|
}
|
|
|
|
// 默认分享逻辑
|
|
if (!isDistributor || !referralCode) {
|
|
return {
|
|
title: '心伴AI - 情感陪伴聊天机器人',
|
|
imageUrl: '/images/share-cover.jpg'
|
|
}
|
|
}
|
|
|
|
return {
|
|
title: `我的推荐码:${referralCode},注册即可享受优惠!`,
|
|
query: `referralCode=${referralCode}`,
|
|
imageUrl: '/images/share-commission.png'
|
|
}
|
|
}
|
|
})
|