离婚流程全面升级:①发起方专属确认弹窗(含对方拒绝后果+魅力/金币惩罚实时值)②被申请方三选弹窗(同意/不同意/稍后)③不同意=强制离婚申请人赔一半金币④所有惩罚数值从后台实时查询

This commit is contained in:
2026-03-01 19:02:43 +08:00
parent 9b55b5558b
commit 84a4b42f31
7 changed files with 444 additions and 51 deletions
@@ -172,40 +172,37 @@
return;
},
/** 发起协议离婚 */
/** 发起协议离婚(先拉惩罚配置,再弹专属全屏确认弹窗) */
async doDivorce(marriageId) {
if (!marriageId) return;
this.showUserModal = false;
const confirmed = await window.chatDialog?.confirm(
'提出离婚后,对方将在私人频道收到通知。\n\n如果对方在 24 小时内未作决定,此申请将自动升级为“强制离婚”,并扣除发起方一定的魅力值作为单方面解除契约的惩罚。\n\n您确定要继续发起离婚申请吗?',
'发起离婚',
'#475569'
);
if (!confirmed) return;
window.chatDialog?.alert('请稍候…', '发送申请中', '#9ca3af');
// 从后台实时拉取最新惩罚配置
let divorceConfig = {
mutual_charm_penalty: 0,
forced_charm_penalty: 0,
mutual_cooldown_days: 0,
forced_cooldown_days: 0
};
try {
const res = await fetch(window.chatContext.marriage.divorceUrl(marriageId), {
method: 'POST',
const cfgRes = await fetch(window.chatContext.marriage.divorceConfigUrl, {
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'X-CSRF-TOKEN': document.querySelector('meta[name=csrf-token]').content
'X-Requested-With': 'XMLHttpRequest'
}
});
const data = await res.json();
if (data.ok) {
window.chatDialog?.alert(data.message, '已发出', '#6b7280');
} else {
window.chatDialog?.alert(data.message || '操作失败', '错误', '#dc2626');
}
if (cfgRes.ok) divorceConfig = await cfgRes.json();
} catch (e) {
window.chatDialog?.alert('网络请求失败', '错误', '#dc2626');
/* 网络异常则使用默认值 */ }
// 打开专属离婚确认弹窗
const modal = document.getElementById('divorce-confirm-modal');
if (modal && window.Alpine) {
Alpine.$data(modal).open(marriageId, divorceConfig);
}
},
/** 获取用户资料 */
async fetchUser(username) {
try {