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