/** * SuccessConfirmDialog 成功牵手双确认弹窗(AGENTS.md 第 6 条) * * 双角色: * - 发起方(请求方):mode="request" → 显示"发起牵手请求" * - 被请求方(确认方):mode="confirm" → 显示"对方请求与你成功牵手" * * 不变量(AGENTS.md): * - 第 6 条:成功牵手必须双确认——本组件是用户侧的唯一确认入口, * 点击确认后由调用方调用 stores.confirmSuccess(matchId)(内部触发 matchService.confirmSuccess)。 * - 第 6 条(隐式):发起方 7 天内未确认则请求过期,本组件显示过期倒计时(如有 expiresAt)。 */ Component({ options: { addGlobalClass: true }, properties: { visible: { type: Boolean, value: false }, mode: { type: String, value: 'request' }, // request | confirm targetName: { type: String, value: '' }, expiresAt: { type: Number, value: 0 }, // 过期时间戳(mode=confirm 时由调用方传入) }, data: { titleText: '', contentText: '', confirmText: '', expiresInText: '', }, observers: { 'mode, targetName, expiresAt'(mode, name, expiresAt) { let title = ''; let content = ''; let confirm = ''; if (mode === 'request') { title = '发起成功牵手'; content = `发起后 ${name || '对方'} 需在 7 天内确认。双方均确认后,关系将置为"成功牵手",平台不再为你推荐其他人。`; confirm = '发起牵手请求'; } else { title = '对方发起牵手请求'; content = `${name || '对方'} 希望与你确认成功牵手。确认后你们的关系将置为"成功牵手",平台不再为你们推荐其他人。`; confirm = '我同意'; } let expiresInText = ''; if (expiresAt > 0) { const remain = expiresAt - Date.now(); if (remain > 0) { const days = Math.floor(remain / (24 * 3600 * 1000)); const hours = Math.floor((remain % (24 * 3600 * 1000)) / (3600 * 1000)); expiresInText = days > 0 ? `剩余 ${days} 天 ${hours} 小时` : `剩余 ${hours} 小时`; } else { expiresInText = '已过期'; } } this.setData({ titleText: title, contentText: content, confirmText: confirm, expiresInText, }); }, }, methods: { onConfirm() { this.triggerEvent('confirm', { mode: this.data.mode }); }, onCancel() { this.triggerEvent('cancel', {}); }, onStop() {}, }, });