70 lines
2.5 KiB
JavaScript
70 lines
2.5 KiB
JavaScript
/**
|
|
* 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() {},
|
|
},
|
|
});
|