266 lines
5.8 KiB
JavaScript
266 lines
5.8 KiB
JavaScript
// pages/referrals/referrals.js
|
|
const api = require('../../utils/api')
|
|
const util = require('../../utils/util')
|
|
|
|
Page({
|
|
data: {
|
|
// 导航栏高度
|
|
statusBarHeight: 44,
|
|
navBarHeight: 44,
|
|
totalNavHeight: 88,
|
|
|
|
// 统计数据
|
|
stats: {
|
|
totalReferrals: 0,
|
|
totalContribution: 0
|
|
},
|
|
|
|
// 推荐用户列表
|
|
list: [],
|
|
defaultAvatar: 'https://images.unsplash.com/photo-1534528741775-53994a69daeb?w=500&auto=format&fit=crop&q=60',
|
|
|
|
// 分页
|
|
page: 1,
|
|
pageSize: 20,
|
|
total: 0,
|
|
hasMore: true,
|
|
|
|
// 状态
|
|
loading: false,
|
|
isEmpty: false,
|
|
|
|
// 搜索与筛选
|
|
searchKeyword: '',
|
|
levelFilter: '',
|
|
levelRange: [
|
|
{ label: '全部等级', value: '' },
|
|
{ label: '心伴会员', value: 'soulmate' },
|
|
{ label: '守护会员', value: 'guardian' },
|
|
{ label: '陪伴会员', value: 'companion' },
|
|
{ label: '倾听会员', value: 'listener' },
|
|
{ label: '城市合伙人', value: 'partner' }
|
|
],
|
|
levelIndex: 0
|
|
},
|
|
|
|
onLoad(options) {
|
|
// 计算导航栏高度
|
|
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.loadReferrals()
|
|
},
|
|
|
|
/**
|
|
* 加载推荐用户列表
|
|
*/
|
|
async loadReferrals(page = 1) {
|
|
if (this.data.loading) return
|
|
|
|
this.setData({ loading: true })
|
|
|
|
try {
|
|
const res = await api.commission.getReferrals({
|
|
page,
|
|
pageSize: this.data.pageSize,
|
|
keyword: this.data.searchKeyword,
|
|
level: this.data.levelFilter
|
|
})
|
|
|
|
console.log('推荐用户列表 API 响应:', res)
|
|
|
|
// 处理不同的响应格式
|
|
let listData = []
|
|
let totalCount = 0
|
|
|
|
if (res.success && res.data) {
|
|
// 格式1: { success: true, data: { list: [...], total: 0 } }
|
|
listData = res.data.list || res.data || []
|
|
totalCount = res.data.total || 0
|
|
} else if (res.list) {
|
|
// 格式2: { list: [...], total: 0 }
|
|
listData = res.list || []
|
|
totalCount = res.total || 0
|
|
} else if (Array.isArray(res)) {
|
|
// 格式3: [...]
|
|
listData = res
|
|
totalCount = res.length
|
|
} else {
|
|
// 未知格式,设为空数组
|
|
console.warn('未知的 API 响应格式:', res)
|
|
listData = []
|
|
totalCount = 0
|
|
}
|
|
|
|
const roleMap = {
|
|
'soulmate': '心伴会员',
|
|
'guardian': '守护会员',
|
|
'companion': '陪伴会员',
|
|
'listener': '倾听会员',
|
|
'partner': '城市合伙人'
|
|
};
|
|
|
|
// 预处理列表数据,增加等级显示
|
|
const listDataProcessed = listData.map(item => {
|
|
const roleCode = item.distributorRole || item.role || '';
|
|
|
|
// 处理头像
|
|
let avatar = item.userAvatar || item.avatar || item.avatarUrl;
|
|
if (avatar) {
|
|
avatar = util.getFullImageUrl(avatar);
|
|
}
|
|
|
|
return {
|
|
...item,
|
|
userAvatar: avatar || this.data.defaultAvatar,
|
|
levelText: roleMap[roleCode] || (item.isDistributor ? '分销会员' : '普通用户')
|
|
};
|
|
});
|
|
|
|
const list = page === 1 ? listDataProcessed : [...this.data.list, ...listDataProcessed];
|
|
const hasMore = listData.length === this.data.pageSize
|
|
const isEmpty = list.length === 0
|
|
|
|
// 计算统计数据
|
|
const stats = {
|
|
totalReferrals: totalCount,
|
|
totalContribution: this.calculateTotalContribution(list)
|
|
}
|
|
|
|
this.setData({
|
|
stats,
|
|
list,
|
|
page,
|
|
total: totalCount,
|
|
hasMore,
|
|
isEmpty,
|
|
loading: false
|
|
})
|
|
} catch (error) {
|
|
console.error('加载推荐用户列表失败:', error)
|
|
this.setData({ loading: false })
|
|
wx.showToast({
|
|
title: error.message || '加载失败',
|
|
icon: 'none'
|
|
})
|
|
}
|
|
},
|
|
|
|
/**
|
|
* 计算累计贡献金额
|
|
*/
|
|
calculateTotalContribution(list) {
|
|
return list.reduce((sum, item) => sum + (item.totalContribution || 0), 0)
|
|
},
|
|
|
|
/**
|
|
* 格式化金额
|
|
*/
|
|
formatMoney(amount) {
|
|
return util.formatMoney(amount)
|
|
},
|
|
|
|
/**
|
|
* 格式化时间
|
|
*/
|
|
formatTime(timestamp) {
|
|
return util.formatDate(timestamp)
|
|
},
|
|
|
|
/**
|
|
* 下拉刷新
|
|
*/
|
|
onPullDownRefresh() {
|
|
this.loadReferrals(1).then(() => {
|
|
wx.stopPullDownRefresh()
|
|
})
|
|
},
|
|
|
|
/**
|
|
* 上拉加载更多
|
|
*/
|
|
onReachBottom() {
|
|
if (!this.data.hasMore || this.data.loading) return
|
|
this.loadReferrals(this.data.page + 1)
|
|
},
|
|
|
|
/**
|
|
* 返回上一页
|
|
*/
|
|
onBack() {
|
|
wx.navigateBack()
|
|
},
|
|
|
|
/**
|
|
* 重新加载
|
|
*/
|
|
onRetry() {
|
|
this.loadReferrals(1)
|
|
},
|
|
|
|
/**
|
|
* 搜索输入
|
|
*/
|
|
onSearchInput(e) {
|
|
this.setData({
|
|
searchKeyword: e.detail.value
|
|
})
|
|
},
|
|
|
|
/**
|
|
* 确认搜索
|
|
*/
|
|
onSearch() {
|
|
this.loadReferrals(1)
|
|
},
|
|
|
|
/**
|
|
* 清除搜索
|
|
*/
|
|
onClearSearch() {
|
|
this.setData({
|
|
searchKeyword: ''
|
|
})
|
|
this.loadReferrals(1)
|
|
},
|
|
|
|
/**
|
|
* 等级筛选
|
|
*/
|
|
onLevelChange(e) {
|
|
const index = e.detail.value
|
|
const level = this.data.levelRange[index].value
|
|
this.setData({
|
|
levelIndex: index,
|
|
levelFilter: level
|
|
})
|
|
this.loadReferrals(1)
|
|
},
|
|
|
|
/**
|
|
* 查看用户订单
|
|
*/
|
|
viewOrders(e) {
|
|
const item = e.currentTarget.dataset.item
|
|
const userInfo = encodeURIComponent(JSON.stringify({
|
|
userId: item.userId,
|
|
name: item.userName,
|
|
avatar: item.userAvatar,
|
|
contribution: item.totalContribution
|
|
}))
|
|
wx.navigateTo({
|
|
url: `/pages/referrals/orders/orders?userInfo=${userInfo}`
|
|
})
|
|
}
|
|
})
|