300 lines
7.3 KiB
JavaScript
300 lines
7.3 KiB
JavaScript
const { API } = require('../../utils/constants');
|
|
const { request } = require('../../utils/http');
|
|
const { formatDateTime, eventStatusText, eventFormatText } = require('../../utils/format');
|
|
|
|
Page({
|
|
data: {
|
|
sectionTab: 'list',
|
|
loggedIn: false,
|
|
|
|
banners: [],
|
|
rows: [],
|
|
loading: false,
|
|
loadingText: '加载中...',
|
|
|
|
pageNo: 1,
|
|
pageSize: 10,
|
|
hasMore: true,
|
|
|
|
status: 1,
|
|
keyword: '',
|
|
|
|
refresherTriggered: false
|
|
},
|
|
|
|
onLoad() {
|
|
this.fetchBanners();
|
|
this.loadEvents(true);
|
|
},
|
|
|
|
onShow() {
|
|
const loggedIn = !!(wx.getStorageSync('accessToken') || '');
|
|
this.setData({ loggedIn });
|
|
if (this.data.sectionTab === 'registered' && loggedIn) {
|
|
this.loadMyEvents(true);
|
|
}
|
|
},
|
|
|
|
/** 页面 disableScroll 后,下拉刷新由 scroll-view 的 refresher 承担 */
|
|
onRefresherRefresh() {
|
|
this.setData({ refresherTriggered: true });
|
|
this.fetchBanners();
|
|
const p =
|
|
this.data.sectionTab === 'list'
|
|
? this.loadEvents(true)
|
|
: this.loadMyEvents(true);
|
|
p.finally(() => {
|
|
this.setData({ refresherTriggered: false });
|
|
});
|
|
},
|
|
|
|
onPullDownRefresh() {
|
|
this.fetchBanners();
|
|
const p =
|
|
this.data.sectionTab === 'list'
|
|
? this.loadEvents(true)
|
|
: this.loadMyEvents(true);
|
|
p.finally(() => {
|
|
wx.stopPullDownRefresh();
|
|
});
|
|
},
|
|
|
|
fetchBanners() {
|
|
request({
|
|
path: API.banners,
|
|
method: 'GET',
|
|
needAuth: false
|
|
})
|
|
.then((data) => {
|
|
this.setData({
|
|
banners: Array.isArray(data) ? data : []
|
|
});
|
|
})
|
|
.catch(() => {
|
|
this.setData({ banners: [] });
|
|
});
|
|
},
|
|
|
|
onSectionTab(e) {
|
|
const tab = e.currentTarget.dataset.tab;
|
|
if (!tab || tab === this.data.sectionTab) return;
|
|
|
|
this.setData({
|
|
sectionTab: tab,
|
|
pageNo: 1,
|
|
rows: [],
|
|
hasMore: true
|
|
});
|
|
|
|
if (tab === 'list') {
|
|
this.loadEvents(true);
|
|
} else {
|
|
this.loadMyEvents(true);
|
|
}
|
|
},
|
|
|
|
onStatusTap(e) {
|
|
const status = Number(e.currentTarget.dataset.status);
|
|
this.setData({
|
|
status,
|
|
pageNo: 1,
|
|
rows: [],
|
|
hasMore: true
|
|
});
|
|
this.loadEvents(true);
|
|
},
|
|
|
|
onKeywordInput(e) {
|
|
this.setData({ keyword: e.detail.value || '' });
|
|
},
|
|
|
|
onSearch() {
|
|
if (this.data.sectionTab !== 'list') {
|
|
this.setData({ sectionTab: 'list', pageNo: 1, rows: [], hasMore: true });
|
|
}
|
|
this.setData({
|
|
pageNo: 1,
|
|
rows: [],
|
|
hasMore: true
|
|
});
|
|
this.loadEvents(true);
|
|
},
|
|
|
|
onScrollToLower() {
|
|
if (this.data.loading || !this.data.hasMore) return;
|
|
if (this.data.sectionTab === 'list') {
|
|
const next = this.data.pageNo + 1;
|
|
this.setData({ pageNo: next });
|
|
this.loadEvents(false);
|
|
} else {
|
|
if (!this.data.loggedIn) return;
|
|
const next = this.data.pageNo + 1;
|
|
this.setData({ pageNo: next });
|
|
this.loadMyEvents(false);
|
|
}
|
|
},
|
|
|
|
goLogin() {
|
|
wx.navigateTo({ url: '/subpackages/mine/login/login' });
|
|
},
|
|
|
|
onBannerTap(e) {
|
|
const linkType = e.currentTarget.dataset.linktype;
|
|
const eventId = e.currentTarget.dataset.eventid;
|
|
const linkUrl = e.currentTarget.dataset.linkurl;
|
|
|
|
if (linkType === 'Event' && eventId) {
|
|
wx.navigateTo({ url: `/pages/detail/detail?id=${eventId}` });
|
|
return;
|
|
}
|
|
if (linkUrl) {
|
|
wx.showToast({ title: '该轮播链接为外部链接/其他跳转,请在后台配置', icon: 'none' });
|
|
}
|
|
},
|
|
|
|
onEventTap(e) {
|
|
const id = Number(e.currentTarget.dataset.id);
|
|
if (!id) return;
|
|
wx.navigateTo({ url: `/pages/detail/detail?id=${id}` });
|
|
},
|
|
|
|
loadEvents(reset) {
|
|
if (this.data.loading) return Promise.resolve();
|
|
|
|
if (reset) {
|
|
this.setData({
|
|
rows: [],
|
|
pageNo: 1,
|
|
hasMore: true
|
|
});
|
|
}
|
|
|
|
this.setData({ loading: true });
|
|
const pageNo = reset ? 1 : this.data.pageNo;
|
|
const pageSize = this.data.pageSize;
|
|
const status = this.data.status;
|
|
const keyword = this.data.keyword;
|
|
|
|
return request({
|
|
path: API.eventList,
|
|
method: 'GET',
|
|
needAuth: false,
|
|
data: {
|
|
page: pageNo,
|
|
pagesize: pageSize,
|
|
PageNo: pageNo,
|
|
PageSize: pageSize,
|
|
status,
|
|
Status: status,
|
|
keyword,
|
|
Keyword: keyword
|
|
}
|
|
})
|
|
.then((res) => {
|
|
const rows = (res && Array.isArray(res.rows) ? res.rows : []).map((item) => {
|
|
const id = item.id;
|
|
return {
|
|
...item,
|
|
rowKey: `e-${id}`,
|
|
registrationStartText: formatDateTime(item.registrationStartTime),
|
|
registrationEndText: formatDateTime(item.registrationEndTime),
|
|
matchStartText: formatDateTime(item.matchStartTime),
|
|
matchEndText: formatDateTime(item.matchEndTime),
|
|
eventStatusText: eventStatusText(item.eventStatus),
|
|
eventFormatText: eventFormatText(item.eventType || item.eventFormat)
|
|
};
|
|
});
|
|
|
|
const nextRows = reset ? rows : this.data.rows.concat(rows);
|
|
|
|
const pages = res && typeof res.pages === 'number' ? res.pages : 1;
|
|
const hasMore = pageNo < pages && rows.length > 0;
|
|
|
|
this.setData({
|
|
rows: nextRows,
|
|
hasMore,
|
|
loading: false,
|
|
loadingText: hasMore ? '加载中...' : '没有更多了'
|
|
});
|
|
})
|
|
.catch((err) => {
|
|
this.setData({
|
|
loading: false,
|
|
hasMore: false,
|
|
rows: reset ? [] : this.data.rows,
|
|
loadingText: err && err.message ? err.message : '加载失败'
|
|
});
|
|
});
|
|
},
|
|
|
|
loadMyEvents(reset) {
|
|
if (!this.data.loggedIn) {
|
|
this.setData({ rows: [], loading: false });
|
|
return Promise.resolve();
|
|
}
|
|
|
|
if (this.data.loading) return Promise.resolve();
|
|
|
|
if (reset) {
|
|
this.setData({
|
|
rows: [],
|
|
pageNo: 1,
|
|
hasMore: true
|
|
});
|
|
}
|
|
|
|
this.setData({ loading: true });
|
|
const pageNo = reset ? 1 : this.data.pageNo;
|
|
const pageSize = this.data.pageSize;
|
|
|
|
return request({
|
|
path: API.eventMyList,
|
|
method: 'GET',
|
|
needAuth: true,
|
|
data: {
|
|
page: pageNo,
|
|
pagesize: pageSize,
|
|
PageNo: pageNo,
|
|
PageSize: pageSize
|
|
}
|
|
})
|
|
.then((res) => {
|
|
const rows = (res && Array.isArray(res.rows) ? res.rows : []).map((item) => {
|
|
const eid = item.eventId;
|
|
const rid = item.registrationId;
|
|
return {
|
|
id: eid,
|
|
rowKey: `m-${rid}`,
|
|
eventName: item.eventName,
|
|
coverImage: item.coverImage,
|
|
address: '',
|
|
eventStatusText: '已报名',
|
|
registrationTimeText: formatDateTime(item.registrationTime),
|
|
projectCount: item.projectCount,
|
|
eventFormatText: ''
|
|
};
|
|
});
|
|
|
|
const nextRows = reset ? rows : this.data.rows.concat(rows);
|
|
|
|
const pages = res && typeof res.pages === 'number' ? res.pages : 1;
|
|
const hasMore = pageNo < pages && rows.length > 0;
|
|
|
|
this.setData({
|
|
rows: nextRows,
|
|
hasMore,
|
|
loading: false,
|
|
loadingText: hasMore ? '加载中...' : '没有更多了'
|
|
});
|
|
})
|
|
.catch(() => {
|
|
this.setData({
|
|
loading: false,
|
|
hasMore: false,
|
|
rows: reset ? [] : this.data.rows,
|
|
loadingText: '加载失败'
|
|
});
|
|
});
|
|
}
|
|
});
|