const request = require('../../utils/request') Page({ data: { id: null, shareToken: '', activity: null, loading: false, submitting: false }, onLoad(options) { this.setData({ id: options.id ? Number(options.id) : null, shareToken: options.share_token || '' }) this.loadDetail() }, onShow() { const pendingBind = wx.getStorageSync('pending_activity_bind') if (pendingBind && Number(pendingBind.activity_id) === Number(this.data.id || 0)) { wx.removeStorageSync('pending_activity_bind') this.handleRegister() return } if (this.data.id || this.data.shareToken) { this.loadDetail() } }, onShareAppMessage() { const activity = this.data.activity || {} const shareToken = activity.share_token || this.data.shareToken || '' return { title: activity.title || '邀请你参加这个活动', path: shareToken ? `/pages/activity-detail/activity-detail?share_token=${shareToken}` : `/pages/activity-detail/activity-detail?id=${this.data.id}`, imageUrl: activity.cover_image || '' } }, normalizeActivity(activity) { const stageTextMap = { before_start: '活动未开始,暂不可查看嘉宾信息', matching_open: '活动已开始,可进入活动匹配', matching_closed: '匹配已截止,可查看选择结果', ended: '活动已结束' } return { ...activity, locationText: activity.location || '待定', signupDeadlineText: activity.signup_deadline || '未设置', matchDeadlineText: activity.match_deadline || '未设置', descriptionText: activity.description || '暂无活动详情', stageText: stageTextMap[activity.stage] || '活动状态待更新', actionText: activity.is_bound || activity.is_registered ? '已绑定' : activity.can_register ? '立即绑定' : '当前不可绑定', selectionSummaryText: `已选 ${activity.selected_count || 0}/${activity.selection_limit || 3},剩余 ${activity.remaining_count || 0}`, registered_preview: Array.isArray(activity.registered_preview) ? activity.registered_preview.map((item) => ({ ...item, nicknameText: item.nickname || '用户' })) : [] } }, async loadDetail() { this.setData({ loading: true }) try { const activity = this.data.shareToken ? await request({ url: `/activities/share/${this.data.shareToken}` }) : await request({ url: `/activities/${this.data.id}` }) this.setData({ id: activity.id || this.data.id, activity: this.normalizeActivity(activity) }) } catch (err) { console.error('Load activity detail failed:', err) wx.showToast({ title: '活动详情加载失败', icon: 'none' }) this.setData({ activity: null }) } finally { this.setData({ loading: false }) } }, goActivityMatch() { if (!this.data.id || !this.data.activity || !this.data.activity.can_enter_match) { wx.showToast({ title: '当前阶段暂不可进入匹配', icon: 'none' }) return } wx.navigateTo({ url: `/pages/match/match?source=activity&activity_id=${this.data.id}` }) }, goMatchResults() { if (!this.data.id) { return } wx.navigateTo({ url: `/pages/my-matches/my-matches?activity_id=${this.data.id}` }) }, async handleRegister() { if (!this.data.activity) { return } if (this.data.activity.is_bound || this.data.activity.is_registered) { wx.showToast({ title: '你已绑定该活动', icon: 'none' }) return } if (!this.data.activity.can_register) { wx.showToast({ title: '当前不可绑定', icon: 'none' }) return } this.setData({ submitting: true }) try { await request({ url: `/activities/${this.data.id}/bind`, method: 'POST' }) wx.showToast({ title: '绑定成功', icon: 'success' }) await this.loadDetail() } catch (err) { console.error('Bind activity failed:', err) if (err && err.message && err.message.includes('资料')) { wx.setStorageSync('pending_activity_bind', { activity_id: this.data.id, share_token: this.data.shareToken || '' }) wx.showModal({ title: '请先完善资料', content: err.message, success: (res) => { if (res.confirm) { wx.navigateTo({ url: '/pages/profile-edit/profile-edit' }) } } }) return } wx.showToast({ title: err.message || '绑定失败', icon: 'none' }) } finally { this.setData({ submitting: false }) } } })