81 lines
2.2 KiB
JavaScript
81 lines
2.2 KiB
JavaScript
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())}`
|
|
}
|