2026-05-09 16:19:37 +08:00

104 lines
2.6 KiB
JavaScript

const auth = require('../../../utils/auth');
const { formatDateTime } = require('../../../utils/format');
const STATUS_MAP = {
0: '待支付',
1: '已支付',
2: '支付失败',
3: '已退款',
4: '已取消'
};
Page({
data: {
registrations: [],
registrationsLoading: false,
registrationsLoadingText: '加载中...',
pageNo: 1,
pageSize: 10,
hasMore: true
},
onShow() {
const accessToken = wx.getStorageSync('accessToken') || '';
if (!accessToken) {
wx.redirectTo({ url: '/subpackages/mine/login/login' });
return;
}
if (!this.data.registrations || this.data.registrations.length === 0) {
this.initData();
}
},
onPullDownRefresh() {
this.initData(true).finally(() => wx.stopPullDownRefresh());
},
initData(reset = false) {
if (reset) {
this.setData({
registrations: [],
pageNo: 1,
hasMore: true,
registrationsLoadingText: '加载中...'
});
}
return this.loadRegistrations(reset ? 1 : this.data.pageNo, reset);
},
loadRegistrations(pageNo, reset = false) {
if (this.data.registrationsLoading) return Promise.resolve();
if (!this.data.hasMore && !reset) return Promise.resolve();
if (reset) {
this.setData({ pageNo, registrationsLoading: true });
} else {
this.setData({ registrationsLoading: true });
}
const pageSize = this.data.pageSize;
return auth
.fetchMyRegistrations({ pageNo, pageSize })
.then((page) => {
const rows = (page && Array.isArray(page.rows) ? page.rows : []).map((r) => {
return {
...r,
registrationTimeText: formatDateTime(r.registrationTime),
statusText: STATUS_MAP[r.status] || r.status
};
});
const nextRows = reset ? rows : this.data.registrations.concat(rows);
const pages = page && typeof page.pages === 'number' ? page.pages : 1;
const hasMore = pageNo < pages && rows.length > 0;
this.setData({
registrations: nextRows,
hasMore,
registrationsLoading: false,
registrationsLoadingText: hasMore ? '加载中...' : '没有更多了'
});
})
.catch(() => {
this.setData({
registrationsLoading: false,
registrationsLoadingText: '加载失败'
});
});
},
onReachBottom() {
if (this.data.registrationsLoading || !this.data.hasMore) return;
const next = this.data.pageNo + 1;
this.setData({ pageNo: next });
this.loadRegistrations(next, false);
},
goToMine() {
wx.navigateTo({ url: '/pages/mine/mine' });
}
});