119 lines
2.7 KiB
JavaScript
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();
|
|
}
|
|
});
|