const { request, ensureLogin, cents } = require('../../utils/api.js') Page({ data: { loading: false, errorMessage: '', coupons: [], packages: [], }, onLoad() { this.loadBenefits() }, async loadBenefits() { this.setData({ loading: true, errorMessage: '' }) try { await ensureLogin() const response = await request('/profile/benefits') this.setData({ coupons: (response.data.coupons || []).map(formatCoupon), packages: (response.data.packages || []).map(formatPackage), }) } catch (error) { this.setData({ errorMessage: error.message || '权益明细加载失败' }) } finally { this.setData({ loading: false }) } }, }) function formatCoupon(item) { const isTime = item.couponType === 'TIME' return { ...item, statusText: benefitStatus(item.status), valueText: isTime ? `${item.timeMinutes || 0}分钟` : cents(item.discountAmountCents), thresholdText: Number(item.minOrderAmountCents || 0) > 0 ? `满${cents(item.minOrderAmountCents)}可用` : '无门槛', validText: `${formatDate(item.validFrom)} 至 ${formatDate(item.validTo)}`, scopeText: scopeText(item), } } function formatPackage(item) { return { ...item, statusText: benefitStatus(item.status), priceText: cents(item.priceCents), remainingAmountText: cents(item.remainingAmountCents), totalAmountText: cents(item.amountCentsTotal), validText: `${formatDate(item.validFrom)} 至 ${formatDate(item.validTo)}`, scopeText: scopeText(item), } } function benefitStatus(status) { return ({ AVAILABLE: '可用', ACTIVE: '可用', FROZEN: '锁定中', USED: '已使用', EXHAUSTED: '已用尽', EXPIRED: '已过期', })[status] || status } function scopeText(item) { if (item.roomId) return `指定房间 ${item.roomId}` if (item.roomCategoryId) return `指定房型 ${item.roomCategoryId}` if (item.storeId) return `指定门店 ${item.storeId}` return item.holidayOnly ? '节假日可用' : '全部门店可用' } function formatDate(value) { const date = new Date(value) const pad = (input) => String(input).padStart(2, '0') return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}` }