2026-03-30 18:08:27 +08:00

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