ai-c/pages/membership-benefits/membership-benefits.js
2026-02-04 15:48:45 +08:00

103 lines
3.1 KiB
JavaScript

const api = require('../../utils/api');
Page({
data: {
statusBarHeight: 20,
navBarHeight: 44,
totalNavHeight: 64,
role: '',
level: '',
currentPackage: null,
loading: true
},
onLoad(options) {
const { role, level } = options;
const systemInfo = wx.getSystemInfoSync();
const statusBarHeight = systemInfo.statusBarHeight || 20;
const menuButton = wx.getMenuButtonBoundingClientRect();
const navBarHeight = menuButton.height + (menuButton.top - statusBarHeight) * 2;
this.setData({
statusBarHeight,
navBarHeight,
totalNavHeight: statusBarHeight + navBarHeight,
role: role || '',
level: level || ''
});
this.loadBenefits();
},
async loadBenefits() {
try {
const res = await api.payment.getPackages();
const body = res.data || {};
const list = Array.isArray(body) ? body : body?.data || [];
if (!list.length) {
this.setData({ loading: false });
return;
}
// 映射逻辑与 recharge.js 保持一致
const allPackages = list.map((p) => {
const attrs = p.attributes || {};
const benefits = p.benefits || attrs.benefits || [];
const gradientStart = p.gradientStart || attrs.gradient_start || '#60A5FA';
const gradientEnd = p.gradientEnd || attrs.gradient_end || '#2563EB';
const tagColor = p.tagColor || attrs.tag_color || '#1E3A8A';
let vipType = attrs.type || p.vipType || '';
if (vipType === 'monthly') vipType = 'month';
if (vipType === 'yearly') vipType = 'year';
if (vipType === 'lifetime') vipType = 'svip';
return {
id: p.id,
title: p.title,
subtitle: p.subtitle || attrs.subtitle || (benefits[0] || ''),
benefits,
vipType,
gradient: `background: linear-gradient(180deg, ${gradientStart}, ${gradientEnd});`,
iconGradient: `background: linear-gradient(180deg, ${gradientStart}, ${gradientEnd});`,
checkColor: tagColor || gradientEnd
};
});
// 根据 role 或 level 寻找匹配的套餐
let currentPackage = null;
if (this.data.role) {
// 优先根据 role 匹配 (soulmate, guardian, companion, listener)
currentPackage = allPackages.find(p => p.vipType === this.data.role);
}
if (!currentPackage && this.data.level) {
// 如果 role 没匹配到,尝试根据 levelText 匹配 (SVIP, VIP)
if (this.data.level === 'SVIP') {
currentPackage = allPackages.find(p => p.vipType === 'svip');
} else if (this.data.level === 'VIP') {
currentPackage = allPackages.find(p => p.vipType === 'month' || p.vipType === 'year');
}
}
// 如果还是没找到,默认取第一个(兜底)
if (!currentPackage && allPackages.length > 0) {
currentPackage = allPackages[0];
}
this.setData({
currentPackage,
loading: false
});
} catch (err) {
console.error('Failed to load benefits:', err);
this.setData({ loading: false });
}
},
onBack() {
wx.navigateBack({ delta: 1 });
}
});