116 lines
3.3 KiB
JavaScript
116 lines
3.3 KiB
JavaScript
/**
|
|
* 活动反馈页 U32
|
|
* 活动结束后开放,用户评价 + 表达进一步了解意向
|
|
*/
|
|
const api = require('../../utils/api');
|
|
|
|
Page({
|
|
data: {
|
|
activityId: '',
|
|
activityTitle: '',
|
|
activityEndAt: '',
|
|
overallExperience: '', // very_satisfied / satisfied / normal / dissatisfied
|
|
willingNextTime: '', // willing / maybe / not_now
|
|
metSomeoneInteresting: null, // true / false / null
|
|
otherParticipants: [],
|
|
selectedInterests: [],
|
|
submitting: false,
|
|
feedbackSubmitted: false
|
|
},
|
|
|
|
onLoad(options) {
|
|
if (options.id) {
|
|
this.setData({ activityId: options.id });
|
|
this.loadData();
|
|
}
|
|
},
|
|
|
|
async loadData() {
|
|
try {
|
|
const token = wx.getStorageSync('accessToken');
|
|
// 加载活动信息
|
|
const activityRes = await api.get(`/activities/${this.data.activityId}`, {}, {
|
|
Authorization: `Bearer ${token}`
|
|
});
|
|
this.setData({
|
|
activityTitle: activityRes.title,
|
|
activityEndAt: activityRes.endAt
|
|
});
|
|
|
|
// 加载同活动已签到用户列表(仅用于选择意向对象)
|
|
const partsRes = await api.get(`/activities/${this.data.activityId}/participants`, {}, {
|
|
Authorization: `Bearer ${token}`
|
|
});
|
|
this.setData({
|
|
otherParticipants: (partsRes || []).filter(p => p.userId !== wx.getStorageSync('userId'))
|
|
});
|
|
} catch (err) {
|
|
console.error('加载失败', err);
|
|
}
|
|
},
|
|
|
|
onOverallChange(e) {
|
|
this.setData({ overallExperience: e.currentTarget.dataset.value });
|
|
},
|
|
|
|
onWillingChange(e) {
|
|
this.setData({ willingNextTime: e.currentTarget.dataset.value });
|
|
},
|
|
|
|
onMetSomeoneChange(e) {
|
|
this.setData({ metSomeoneInteresting: e.currentTarget.dataset.value === 'yes' ? true : false });
|
|
},
|
|
|
|
toggleInterest(userId) {
|
|
const selected = this.data.selectedInterests;
|
|
const idx = selected.indexOf(userId);
|
|
if (idx >= 0) {
|
|
selected.splice(idx, 1);
|
|
} else {
|
|
selected.push(userId);
|
|
}
|
|
this.setData({ selectedInterests: selected });
|
|
},
|
|
|
|
async submitFeedback() {
|
|
const { overallExperience, willingNextTime, metSomeoneInteresting, selectedInterests, activityId } = this.data;
|
|
|
|
if (!overallExperience || !willingNextTime) {
|
|
wx.showToast({ title: '请填写必填项', icon: 'none' });
|
|
return;
|
|
}
|
|
|
|
this.setData({ submitting: true });
|
|
try {
|
|
const token = wx.getStorageSync('accessToken');
|
|
const body = {
|
|
overallExperience,
|
|
willingNextTime,
|
|
metSomeoneInteresting,
|
|
interestTargetUserIds: selectedInterests
|
|
};
|
|
const res = await api.post(`/activities/${activityId}/feedback`, body, {
|
|
Authorization: `Bearer ${token}`
|
|
});
|
|
this.setData({ feedbackSubmitted: true, submitting: false });
|
|
if ((res.newMutuals || []).length > 0) {
|
|
wx.showModal({
|
|
title: '双向匹配成功!',
|
|
content: `您与${res.newMutuals.length}位朋友互相表达了进一步了解意愿,快去缘分中心看看吧`,
|
|
showCancel: false,
|
|
success: () => {
|
|
wx.switchTab({ url: '/pages/fate-center/fate-center' });
|
|
}
|
|
});
|
|
}
|
|
} catch (err) {
|
|
wx.showToast({ title: err.message || '提交失败', icon: 'none' });
|
|
this.setData({ submitting: false });
|
|
}
|
|
},
|
|
|
|
skipFeedback() {
|
|
wx.navigateBack();
|
|
}
|
|
});
|