修复:求婚限制异性(前端隐藏按钮 + 后端拦截校验)
前端(user-actions.blade.php): - 求婚按钮增加三重条件:对方未婚 + 双方性别均已填写 + 性别不同 后端(MarriageService::propose): - 增加异性校验:两方性别必须为「男/女」且不同 - 报错:只有男女双方才能互相求婚 frame.blade.php: - chatContext 注入 userSex(当前用户性别)供前端判断
This commit is contained in:
@@ -47,6 +47,16 @@ class MarriageService
|
|||||||
return ['ok' => false, 'message' => '不能向自己求婚!', 'marriage_id' => null];
|
return ['ok' => false, 'message' => '不能向自己求婚!', 'marriage_id' => null];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 只允许异性之间求婚
|
||||||
|
$validSexes = ['男', '女'];
|
||||||
|
if (
|
||||||
|
! in_array($proposer->sex, $validSexes, true) ||
|
||||||
|
! in_array($target->sex, $validSexes, true) ||
|
||||||
|
$proposer->sex === $target->sex
|
||||||
|
) {
|
||||||
|
return ['ok' => false, 'message' => '只有男女双方才能互相求婚,请确认双方性别设置。', 'marriage_id' => null];
|
||||||
|
}
|
||||||
|
|
||||||
// 检查求婚方是否在冷静期
|
// 检查求婚方是否在冷静期
|
||||||
if ($cooldownMsg = $this->checkCooldown($proposer)) {
|
if ($cooldownMsg = $this->checkCooldown($proposer)) {
|
||||||
return ['ok' => false, 'message' => $cooldownMsg, 'marriage_id' => null];
|
return ['ok' => false, 'message' => $cooldownMsg, 'marriage_id' => null];
|
||||||
|
|||||||
@@ -31,6 +31,7 @@
|
|||||||
roomId: {{ $room->id }},
|
roomId: {{ $room->id }},
|
||||||
userId: {{ $user->id }},
|
userId: {{ $user->id }},
|
||||||
username: "{{ $user->username }}",
|
username: "{{ $user->username }}",
|
||||||
|
userSex: "{{ $user->sex }}",
|
||||||
userLevel: {{ $user->user_level }},
|
userLevel: {{ $user->user_level }},
|
||||||
superLevel: {{ $superLevel }},
|
superLevel: {{ $superLevel }},
|
||||||
levelKick: {{ $levelKick }},
|
levelKick: {{ $levelKick }},
|
||||||
|
|||||||
@@ -709,8 +709,13 @@
|
|||||||
🪙 送金币
|
🪙 送金币
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
{{-- 求婚按钮(对方未婚 且 我也未婚时显示) --}}
|
{{-- 求婚按钮:对方未婚 + 双方均已设置性别 + 异性 --}}
|
||||||
<button x-show="!marriageLoading && (!targetMarriage || targetMarriage.status === 'none')"
|
<button
|
||||||
|
x-show="!marriageLoading
|
||||||
|
&& (!targetMarriage || targetMarriage.status === 'none')
|
||||||
|
&& userInfo.sex
|
||||||
|
&& window.chatContext.userSex
|
||||||
|
&& userInfo.sex !== window.chatContext.userSex"
|
||||||
style="flex:1; padding: 7px 10px; border-radius: 5px; font-size: 12px; font-weight: bold; cursor: pointer;
|
style="flex:1; padding: 7px 10px; border-radius: 5px; font-size: 12px; font-weight: bold; cursor: pointer;
|
||||||
background: linear-gradient(135deg,#f43f5e,#ec4899); color:#fff; border:none;"
|
background: linear-gradient(135deg,#f43f5e,#ec4899); color:#fff; border:none;"
|
||||||
x-on:click="showUserModal = false; openProposeModal(userInfo.username)">
|
x-on:click="showUserModal = false; openProposeModal(userInfo.username)">
|
||||||
|
|||||||
Reference in New Issue
Block a user