修复:求婚限制异性(前端隐藏按钮 + 后端拦截校验)
前端(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];
|
||||
}
|
||||
|
||||
// 只允许异性之间求婚
|
||||
$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)) {
|
||||
return ['ok' => false, 'message' => $cooldownMsg, 'marriage_id' => null];
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
roomId: {{ $room->id }},
|
||||
userId: {{ $user->id }},
|
||||
username: "{{ $user->username }}",
|
||||
userSex: "{{ $user->sex }}",
|
||||
userLevel: {{ $user->user_level }},
|
||||
superLevel: {{ $superLevel }},
|
||||
levelKick: {{ $levelKick }},
|
||||
|
||||
@@ -709,8 +709,13 @@
|
||||
🪙 送金币
|
||||
</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;
|
||||
background: linear-gradient(135deg,#f43f5e,#ec4899); color:#fff; border:none;"
|
||||
x-on:click="showUserModal = false; openProposeModal(userInfo.username)">
|
||||
|
||||
Reference in New Issue
Block a user