148 lines
5.3 KiB
JavaScript
148 lines
5.3 KiB
JavaScript
const { request } = require('../../utils_new/request');
|
|
const util = require('../../utils/util');
|
|
|
|
Page({
|
|
data: {
|
|
statusBarHeight: 20,
|
|
navBarHeight: 44,
|
|
totalNavHeight: 64,
|
|
defaultAvatar: 'https://images.unsplash.com/photo-1534528741775-53994a69daeb?w=500&auto=format&fit=crop&q=60',
|
|
loading: true,
|
|
stats: {
|
|
todayReferrals: 0,
|
|
totalReferrals: 0,
|
|
totalContribution: '0.00'
|
|
},
|
|
cardTitle: '守护会员',
|
|
list: []
|
|
},
|
|
onLoad() {
|
|
const sys = wx.getSystemInfoSync();
|
|
const menu = wx.getMenuButtonBoundingClientRect();
|
|
const statusBarHeight = sys.statusBarHeight || 20;
|
|
const navBarHeight = menu.height + (menu.top - statusBarHeight) * 2;
|
|
this.setData({
|
|
statusBarHeight,
|
|
navBarHeight,
|
|
totalNavHeight: statusBarHeight + navBarHeight
|
|
});
|
|
this.load();
|
|
},
|
|
onBack() {
|
|
wx.navigateBack({ delta: 1 });
|
|
},
|
|
async load() {
|
|
this.setData({ loading: true });
|
|
try {
|
|
try {
|
|
const statsRes = await request({ url: '/api/commission?action=stats', method: 'GET' });
|
|
const statsBody = statsRes.data || {};
|
|
if (statsBody.success) {
|
|
const d = statsBody.data || {};
|
|
this.setData({
|
|
stats: {
|
|
todayReferrals: Number(d.todayReferrals || d.today_referrals || 0),
|
|
totalReferrals: Number(d.totalReferrals || d.total_referrals || 0),
|
|
totalContribution: Number(d.totalContribution || d.total_contribution || 0).toFixed(2)
|
|
},
|
|
cardTitle: this.getCardTitle(d.cardType || d.level || 'guardian_card')
|
|
});
|
|
}
|
|
|
|
const res = await request({ url: '/api/commission?action=referrals&page=1&pageSize=50', method: 'GET' });
|
|
const body = res.data || {};
|
|
|
|
console.log('[团队页面] API响应:', JSON.stringify(body, null, 2));
|
|
|
|
// Flexible data extraction
|
|
let rawList = [];
|
|
if (Array.isArray(body.data)) {
|
|
rawList = body.data;
|
|
} else if (body.data && Array.isArray(body.data.list)) {
|
|
rawList = body.data.list;
|
|
} else if (body.list && Array.isArray(body.list)) {
|
|
rawList = body.list;
|
|
}
|
|
|
|
console.log('[团队页面] rawList:', JSON.stringify(rawList.slice(0, 2), null, 2));
|
|
|
|
const roleMap = {
|
|
'soulmate': '心伴会员',
|
|
'guardian': '守护会员',
|
|
'companion': '陪伴会员',
|
|
'listener': '倾听会员',
|
|
'partner': '城市合伙人'
|
|
};
|
|
|
|
const list = rawList.map((x) => {
|
|
const user = x.user || {};
|
|
// Map fields robustly
|
|
let avatar = x.avatarUrl || x.avatar_url || x.userAvatar || user.avatarUrl || user.avatar_url || '';
|
|
if (avatar) {
|
|
avatar = util.getFullImageUrl(avatar);
|
|
}
|
|
|
|
const name = x.userName || x.nickname || x.nickName || user.nickname || user.nickName || ('用户' + (x.userId || x.id || ''));
|
|
const contribution = Number(x.totalContribution || x.total_contribution || x.amount || 0).toFixed(2);
|
|
const dateStr = x.boundAt || x.created_at || x.createdAt || Date.now();
|
|
|
|
// Get Member Level - 优先使用API返回的中文等级名称
|
|
const levelText = x.userRoleName || user.userRoleName || roleMap[x.userRole] || roleMap[x.distributorRole] || roleMap[x.role] || (x.isDistributor ? '分销会员' : '普通用户');
|
|
|
|
return {
|
|
...x,
|
|
userId: x.userId || x.id,
|
|
userAvatar: avatar || this.data.defaultAvatar,
|
|
userName: name,
|
|
levelText: levelText,
|
|
totalContribution: contribution,
|
|
boundAtText: this.formatDate(new Date(dateStr))
|
|
};
|
|
});
|
|
|
|
this.setData({ list });
|
|
} catch (err) {
|
|
console.log('API failed, using mock data', err);
|
|
this.setData({
|
|
stats: { todayReferrals: 2, totalReferrals: 15, totalContribution: '128.50' },
|
|
list: [
|
|
{ userId: 1, userName: '小王', userAvatar: '', boundAtText: '2025-01-20 10:30:45', totalContribution: '12.50' },
|
|
{ userId: 2, userName: 'Alice', userAvatar: '', boundAtText: '2025-01-18 14:22:30', totalContribution: '30.00' },
|
|
{ userId: 3, userName: 'Bob', userAvatar: '', boundAtText: '2025-01-15 09:15:00', totalContribution: '5.00' }
|
|
]
|
|
});
|
|
}
|
|
} finally {
|
|
this.setData({ loading: false });
|
|
}
|
|
},
|
|
formatDate(d) {
|
|
const y = d.getFullYear();
|
|
const m = String(d.getMonth() + 1).padStart(2, '0');
|
|
const day = String(d.getDate()).padStart(2, '0');
|
|
const h = String(d.getHours()).padStart(2, '0');
|
|
const min = String(d.getMinutes()).padStart(2, '0');
|
|
const s = String(d.getSeconds()).padStart(2, '0');
|
|
return `${y}-${m}-${day} ${h}:${min}:${s}`;
|
|
},
|
|
onAvatarError(e) {
|
|
const index = e.currentTarget.dataset.index;
|
|
if (index !== undefined) {
|
|
const list = this.data.list;
|
|
list[index].userAvatar = this.data.defaultAvatar;
|
|
this.setData({ list });
|
|
}
|
|
},
|
|
getCardTitle(type) {
|
|
const map = {
|
|
'guardian_card': '守护会员',
|
|
'companion_card': '陪伴会员',
|
|
'identity_card': '身份会员',
|
|
'vip': 'VIP会员',
|
|
'partner': '城市合伙人'
|
|
};
|
|
return map[type] || '守护会员';
|
|
}
|
|
});
|
|
|