135 lines
4.3 KiB
JavaScript
135 lines
4.3 KiB
JavaScript
/**
|
||
* 公益红娘服务页 U33
|
||
*
|
||
* 重构要点(遵循 AGENTS.md 不变量):
|
||
* - 数据:MatchmakerStore.fetchMyServices + activeService 派生
|
||
* - 展示:ui-matchmaker-card 展示当前进行中的服务,"查看红娘推荐"按钮触发跳转
|
||
* - 申请:跳转 matchmaker-apply 页,不在本页填写(AGENTS 第 1 条:用户永久免费,无高级/付费红娘差异化)
|
||
* - 推荐:红娘推荐列表跳 fate-center 页,最终 Like/Pass 仍走 matchStore(AGENTS 第 5 条:红娘不可替用户操作)
|
||
* - 进度:跳 matchmaker-progress 页查看服务跟进记录
|
||
*/
|
||
const { matchmakerStore, appStore } = require('../../stores');
|
||
const { to, ROUTE, buildPath, MATCHMAKER_SERVICE_STATUS } = require('../../constants');
|
||
|
||
Page({
|
||
data: {
|
||
statusBarHeight: 20,
|
||
navBarHeight: 44,
|
||
loading: false,
|
||
firstLoaded: false,
|
||
/** @type {import('../../types').MatchmakerService|null} 进行中的服务 */
|
||
activeService: null,
|
||
/** @type {import('../../types').MatchmakerService[]} 历史(不含活跃服务) */
|
||
historyServices: [],
|
||
/** 是否展示"查看红娘推荐"按钮 */
|
||
showRecommendations: false,
|
||
/** 红娘能力说明(静态文案,无敏感信息) */
|
||
capabilities: [
|
||
'推荐合适对象(基于你的择偶条件)',
|
||
'调整择偶条件的专业建议',
|
||
'协助联系你感兴趣的意向对象',
|
||
'推荐参加合适的相亲活动',
|
||
'聊天沟通的方法指导',
|
||
],
|
||
/** 空状态操作 */
|
||
emptyActions: [
|
||
{ text: '申请红娘帮助', event: 'apply', variant: 'primary' },
|
||
],
|
||
},
|
||
|
||
onLoad() {
|
||
try {
|
||
const sysInfo = wx.getSystemInfoSync ? wx.getSystemInfoSync() : null;
|
||
if (sysInfo) {
|
||
this.setData({
|
||
statusBarHeight: sysInfo.statusBarHeight || 20,
|
||
navBarHeight: 44,
|
||
});
|
||
}
|
||
} catch (e) { /* 使用默认值 */ }
|
||
|
||
this._unsub = matchmakerStore.bindToPage(this, {
|
||
activeService: 'activeService',
|
||
});
|
||
this.fetchServices();
|
||
},
|
||
|
||
onShow() {
|
||
// 从 apply/progress 页返回后刷新(状态可能已变更)
|
||
if (this.data.firstLoaded) {
|
||
this.fetchServices();
|
||
}
|
||
},
|
||
|
||
onUnload() {
|
||
if (this._unsub) this._unsub();
|
||
},
|
||
|
||
async fetchServices() {
|
||
if (this.data.loading) return;
|
||
this.setData({ loading: true });
|
||
try {
|
||
await matchmakerStore.fetchMyServices();
|
||
const { activeService, myServices } = matchmakerStore.state;
|
||
// 仅当服务处于 in_service / waiting_user 时展示"查看推荐"入口
|
||
const showRecommendations = !!activeService && (
|
||
activeService.status === MATCHMAKER_SERVICE_STATUS.IN_SERVICE ||
|
||
activeService.status === MATCHMAKER_SERVICE_STATUS.WAITING_USER
|
||
);
|
||
// 历史列表排除活跃服务,避免重复展示
|
||
const historyServices = activeService
|
||
? myServices.filter((s) => s.serviceId !== activeService.serviceId)
|
||
: myServices;
|
||
this.setData({
|
||
loading: false,
|
||
firstLoaded: true,
|
||
activeService,
|
||
historyServices,
|
||
showRecommendations,
|
||
});
|
||
} catch (err) {
|
||
this.setData({ loading: false, firstLoaded: true });
|
||
appStore.toastError(err, '加载红娘服务失败');
|
||
}
|
||
},
|
||
|
||
onBack() {
|
||
wx.navigateBack();
|
||
},
|
||
|
||
/** 申请红娘帮助 */
|
||
onApplyService() {
|
||
wx.navigateTo({ url: ROUTE.DETAIL.MATCHMAKER_APPLY });
|
||
},
|
||
|
||
/** 查看服务进度(卡片头部点击) */
|
||
onViewService(e) {
|
||
const serviceId = e.detail.serviceId;
|
||
if (!serviceId) return;
|
||
wx.navigateTo({ url: to.matchmakerProgress(serviceId) });
|
||
},
|
||
|
||
/**
|
||
* 查看红娘推荐(AGENTS 第 5 条:红娘不替用户 Like,推荐列表里仍由用户本人操作)
|
||
* 跳 fate-center,由该页通过 matchStore.like/pass 完成最终选择
|
||
*/
|
||
onViewRecommendations(e) {
|
||
const serviceId = e.detail.serviceId;
|
||
if (!serviceId) return;
|
||
wx.navigateTo({ url: buildPath(ROUTE.MAIN.FATE_CENTER, { id: serviceId }) });
|
||
},
|
||
|
||
/** 历史服务列表项点击 */
|
||
onHistoryTap(e) {
|
||
const serviceId = e.currentTarget.dataset.serviceId;
|
||
if (!serviceId) return;
|
||
wx.navigateTo({ url: to.matchmakerProgress(serviceId) });
|
||
},
|
||
|
||
/** 空状态操作 */
|
||
onEmptyAction(e) {
|
||
const { event } = e.detail;
|
||
if (event === 'apply') this.onApplyService();
|
||
},
|
||
});
|