ai-c/pages/my-activities/my-activities.js
2026-02-02 18:21:32 +08:00

119 lines
2.7 KiB
JavaScript

const api = require('../../utils/api');
const util = require('../../utils/util');
Page({
data: {
activeTab: 'upcoming', // upcoming | ended
activities: [],
loading: false,
hasMore: true,
page: 1,
limit: 20,
statusBarHeight: 20
},
onLoad() {
this.setData({
statusBarHeight: wx.getSystemInfoSync().statusBarHeight
});
this.loadActivities(true);
},
onPullDownRefresh() {
this.loadActivities(true).then(() => {
wx.stopPullDownRefresh();
});
},
onReachBottom() {
if (this.data.hasMore && !this.data.loading) {
this.loadActivities(false);
}
},
switchTab(e) {
const tab = e.currentTarget.dataset.tab;
if (tab === this.data.activeTab) return;
this.setData({
activeTab: tab,
activities: [],
page: 1,
hasMore: true
}, () => {
this.loadActivities(true);
});
},
async loadActivities(isRefresh = false) {
if (this.data.loading) return;
this.setData({ loading: true });
if (isRefresh) {
this.setData({ page: 1, hasMore: true });
}
try {
// 映射 tab 到 API 的 time_status
const timeStatusMap = {
'upcoming': 'upcoming',
'ended': 'finished'
};
const res = await api.activity.getMyRegistrations({
page: this.data.page,
limit: this.data.limit,
time_status: timeStatusMap[this.data.activeTab]
});
if (res.success && res.data) {
const newList = res.data.list.map(item => {
// 格式化日期和图片
return {
...item,
cover_image: util.getFullImageUrl(item.cover_image || item.coverImage),
date_display: item.start_date || item.activityDate,
// 映射时间状态文字
time_status_text: this.getTimeStatusText(item.activity_time_status),
time_status_class: item.activity_time_status
};
});
this.setData({
activities: isRefresh ? newList : [...this.data.activities, ...newList],
page: this.data.page + 1,
hasMore: newList.length === this.data.limit
});
}
} catch (err) {
console.error('Load my activities failed', err);
wx.showToast({
title: '加载失败',
icon: 'none'
});
} finally {
this.setData({ loading: false });
}
},
getTimeStatusText(status) {
const map = {
'pending': '待开始',
'started': '进行中',
'finished': '已结束'
};
return map[status] || '';
},
goDetail(e) {
const id = e.currentTarget.dataset.id;
wx.navigateTo({
url: `/pages/activity-detail/activity-detail?id=${id}`
});
},
goBack() {
wx.navigateBack();
}
});