Files
2025-11-17 13:32:54 +08:00

226 lines
6.1 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { fetchUserCoupons } from '../../../services/coupon/index';
Page({
data: {
status: 0,
list: [
{
text: '可使用',
key: 0,
},
{
text: '已使用',
key: 1,
},
{
text: '已失效',
key: 2,
},
],
couponList: [],
loading: false,
},
onLoad() {
this.init();
},
onShow() {
// 页面显示时刷新数据,确保从领券中心返回后显示最新的优惠券
this.fetchList();
},
init() {
this.fetchList();
},
fetchList(status = this.data.status) {
this.setData({ loading: true });
// 状态映射:前端页面状态 -> API状态
// 前端: 0=可使用, 1=已使用, 2=已失效
// API: 1=未使用, 2=已使用, 3=已过期
const statusMap = {
0: 1, // 可使用 -> 未使用(API状态1)
1: 2, // 已使用 -> 已使用(API状态2)
2: 3, // 已失效 -> 已过期(API状态3)
};
const apiStatus = statusMap[status] || 1;
fetchUserCoupons(apiStatus)
.then((result) => {
console.log('获取用户优惠券成功:', result);
console.log('API返回的原始数据:', JSON.stringify(result.data, null, 2));
// 检查第一个优惠券的数据结构
if (result.data && result.data.length > 0) {
const firstCoupon = result.data[0];
console.log('第一个优惠券数据:', firstCoupon);
console.log('优惠券详情:', firstCoupon.coupon);
console.log('优惠券面值:', firstCoupon.coupon?.value);
}
// 转换API数据格式为页面所需格式
const couponList = this.transformCouponData(result.data || [], status);
this.setData({
couponList,
loading: false
});
})
.catch((error) => {
console.error('获取用户优惠券失败:', error);
wx.showToast({
title: '获取优惠券失败',
icon: 'none'
});
this.setData({
couponList: [],
loading: false
});
});
},
// 转换API数据格式
transformCouponData(apiData, status) {
const statusMap = {
0: 'default', // 可使用
1: 'useless', // 已使用
2: 'disabled' // 已失效
};
return apiData.map((item, index) => {
const coupon = item.coupon || item;
return {
key: `coupon_${coupon.id || index}`,
title: coupon.name || '优惠券',
type: coupon.type || 1,
value: coupon.value, // 直接使用原始值让ui-coupon-card组件处理
currency: this.getCurrency(coupon.type),
tag: this.getCouponTag(coupon.type),
desc: this.getCouponDesc(coupon),
timeLimit: this.formatTimeLimit(coupon, status),
status: statusMap[status] || 'default',
};
});
},
// 格式化优惠券金额
formatCouponValue(coupon) {
console.log('formatCouponValue 输入参数:', coupon);
console.log('优惠券类型:', coupon?.type, '面值:', coupon?.value);
if (!coupon || coupon.value === undefined) {
console.log('优惠券数据无效返回0');
return '0';
}
// 直接返回原始值让ui-coupon-card组件处理单位转换
// ui-coupon-card会自动将满减券除以100分转元折扣券除以1085转8.5折)
if (coupon.type === 1) { // 满减券
console.log('满减券,返回原始值:', coupon.value);
return coupon.value.toString(); // 返回原始分值ui-coupon-card会除以100
} else if (coupon.type === 2) { // 折扣券
console.log('折扣券,返回原始值:', coupon.value);
return coupon.value.toString(); // 返回原始值ui-coupon-card会除以10
} else if (coupon.type === 3) { // 免邮券
console.log('免邮券返回0');
return '0';
}
console.log('未知类型返回0');
return '0';
},
// 获取货币符号
getCurrency(type) {
if (type === 1) return '¥';
if (type === 2) return '折';
if (type === 3) return '';
return '¥';
},
// 获取优惠券标签
getCouponTag(type) {
if (type === 1) return '满减券';
if (type === 2) return '折扣券';
if (type === 3) return '免邮券';
return '优惠券';
},
// 获取优惠券描述
getCouponDesc(coupon) {
if (!coupon) {
return '优惠券';
}
if (coupon.type === 1) { // 满减券
if (coupon.min_amount > 0) {
return `${(coupon.min_amount / 100).toFixed(0)}元可用`;
}
return '无门槛使用';
} else if (coupon.type === 2) { // 折扣券
if (coupon.min_amount > 0) {
return `${(coupon.min_amount / 100).toFixed(0)}元可用`;
}
return '全场商品可用';
} else if (coupon.type === 3) { // 免邮券
return '全场包邮';
}
return '优惠券';
},
// 格式化时间限制
formatTimeLimit(coupon, status) {
if (status === 1) { // 已使用
return `已于${this.formatDate(coupon.updated_at || new Date())}使用`;
} else if (status === 2) { // 已失效
return `已于${this.formatDate(coupon.end_time)}过期`;
} else { // 可使用
return `${this.formatDate(coupon.end_time)}前有效`;
}
},
// 格式化日期
formatDate(dateStr) {
const date = new Date(dateStr);
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
return `${year}.${month}.${day}`;
},
tabChange(e) {
const { value } = e.detail;
this.setData({ status: value });
this.fetchList(value);
},
goCouponCenterHandle() {
wx.navigateTo({
url: '/pages/coupon/coupon-center/index',
});
},
onPullDownRefresh_(e) {
// 安全获取callback
const callback = e && e.detail && e.detail.callback;
this.setData(
{
couponList: [],
},
() => {
this.fetchList();
// 确保callback存在且是函数
if (callback && typeof callback === 'function') {
callback();
}
},
);
},
});