119 lines
3.1 KiB
JavaScript
119 lines
3.1 KiB
JavaScript
const { API } = require('../../utils/constants');
|
|
const { request } = require('../../utils/http');
|
|
const { formatDateTime } = require('../../utils/format');
|
|
|
|
Page({
|
|
data: {
|
|
eventId: null,
|
|
loggedIn: false,
|
|
|
|
eventDetail: null,
|
|
projects: [],
|
|
|
|
registrationStartText: '-',
|
|
registrationEndText: '-',
|
|
matchStartText: '-',
|
|
matchEndText: '-',
|
|
|
|
selectedProjectIds: [],
|
|
|
|
contactName: '',
|
|
contactPhone: '',
|
|
|
|
submitting: false
|
|
},
|
|
|
|
onLoad(options) {
|
|
const eventId = Number(options.eventId);
|
|
this.setData({ eventId });
|
|
this.fetchDetail(eventId);
|
|
},
|
|
|
|
onShow() {
|
|
const accessToken = wx.getStorageSync('accessToken') || '';
|
|
this.setData({ loggedIn: Boolean(accessToken) });
|
|
},
|
|
|
|
fetchDetail(eventId) {
|
|
if (!eventId) return;
|
|
request({
|
|
path: API.eventDetail(eventId),
|
|
method: 'GET',
|
|
needAuth: false
|
|
})
|
|
.then((detail) => {
|
|
const projects = Array.isArray(detail.projects) ? detail.projects : [];
|
|
this.setData({
|
|
eventDetail: detail,
|
|
projects,
|
|
registrationStartText: formatDateTime(detail.registrationStartTime),
|
|
registrationEndText: formatDateTime(detail.registrationEndTime),
|
|
matchStartText: formatDateTime(detail.matchStartTime),
|
|
matchEndText: formatDateTime(detail.matchEndTime)
|
|
});
|
|
})
|
|
.catch(() => {
|
|
wx.showToast({ title: '加载失败', icon: 'none' });
|
|
});
|
|
},
|
|
|
|
onGoMineLogin() {
|
|
wx.switchTab({ url: '/pages/mine/mine' });
|
|
},
|
|
|
|
onProjectChange(e) {
|
|
this.setData({ selectedProjectIds: e.detail.value || [] });
|
|
},
|
|
|
|
onContactInput(e) {
|
|
const key = e.currentTarget.dataset.key;
|
|
this.setData({
|
|
[key]: e.detail.value || ''
|
|
});
|
|
},
|
|
|
|
async submitApply() {
|
|
if (!this.data.loggedIn) {
|
|
wx.showToast({ title: '请先登录', icon: 'none' });
|
|
return;
|
|
}
|
|
const { eventId, selectedProjectIds, contactName, contactPhone } = this.data;
|
|
if (!eventId) return;
|
|
if (!contactName) return wx.showToast({ title: '请输入联系人姓名', icon: 'none' });
|
|
if (!contactPhone) return wx.showToast({ title: '请输入联系人电话', icon: 'none' });
|
|
if (!selectedProjectIds || selectedProjectIds.length === 0) {
|
|
return wx.showToast({ title: '请选择至少一个项目', icon: 'none' });
|
|
}
|
|
|
|
// SubmitRegistrationInput
|
|
const payload = {
|
|
eventId: Number(eventId),
|
|
registrationMode: 1, // 个人
|
|
teamName: null,
|
|
contactName,
|
|
contactPhone,
|
|
items: selectedProjectIds.map((id) => ({
|
|
projectId: Number(id)
|
|
}))
|
|
};
|
|
|
|
this.setData({ submitting: true });
|
|
request({
|
|
path: API.apply,
|
|
method: 'POST',
|
|
needAuth: true,
|
|
data: payload,
|
|
contentType: 'application/json'
|
|
})
|
|
.then(() => {
|
|
wx.showToast({ title: '提交成功', icon: 'success' });
|
|
wx.switchTab({ url: '/pages/mine/mine' });
|
|
})
|
|
.catch((err) => {
|
|
wx.showToast({ title: err && err.message ? err.message : '提交失败', icon: 'none' });
|
|
})
|
|
.finally(() => this.setData({ submitting: false }));
|
|
}
|
|
});
|
|
|