ai-c/pages/promote/promote.js
2026-02-02 18:21:32 +08:00

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'
}
}
})