Files
danyang-match/miniapp/components/recommend-card/index.js
T

54 lines
1.8 KiB
JavaScript
Raw Normal View History

2026-09-09 22:05:00 +08:00
/**
* RecommendCard 推荐卡片(规范 §22-25, §107-108)
*
* 推荐首页核心卡片,包含:头像 + 基本信息 + 推荐理由 + Like/Pass 操作。
* 不变量(AGENTS.md):
* - 第 2 条:Required 不可自动放宽——推荐理由仅作弱文字提示,
* 不暴露"放宽了 X 条件才得到这个推荐"的字样,前端只显示后端返回的 reasons。
* - 第 5 条:红娘不可替用户操作——本卡片仅由当前用户操作,不接受 matchmakerId 参数。
*/
const { STATUS_BADGE } = require('../../constants');
Component({
options: { addGlobalClass: true },
properties: {
recommendation: { type: Object, value: null },
// 是否显示操作按钮(详情页用,可能用底部固定按钮替代)
showActions: { type: Boolean, value: true },
// 是否禁用按钮(操作进行中)
actionLoading: { type: Boolean, value: false },
},
data: {
levelTextMap: {
high: '很合适',
medium: '比较合适',
normal: '值得了解',
},
levelKindMap: {
high: 'success',
medium: 'info',
normal: 'warning',
},
},
methods: {
onViewDetail() {
if (!this.data.recommendation) return;
this.triggerEvent('view', { userId: this.data.recommendation.userId });
},
onLike() {
if (this.data.actionLoading) return;
if (!this.data.recommendation) return;
this.triggerEvent('like', { userId: this.data.recommendation.userId });
},
onPass() {
if (this.data.actionLoading) return;
if (!this.data.recommendation) return;
this.triggerEvent('pass', { userId: this.data.recommendation.userId });
},
onBlock(e) {
// 阻止冒泡避免触发 view
this.triggerEvent('block', { userId: this.data.recommendation.userId });
},
},
});