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' }); } });