修复:求婚按钮异性判断 - 统一 sex 字段格式
根因:sex 字段数据库存整数(0/1/2),但前后端判断混用了
字符串('男'/'女')导致比较永远错误。
修复三处:
1. UserController::show() - sex 返回统一转字符串(1→'男' 2→'女' 其他→'')
2. frame.blade.php - chatContext.userSex 注入时同样转字符串
3. MarriageService::propose() - 后端性别校验改用整数(1/2)比较
逻辑链路:
- 未设置性别(sex=0) → '' → x-show && userInfo.sex 为'' falsy → 按钮隐藏 ✓
- 同性(如两个男) → '男'==='男' → !== 为false → 按钮隐藏 ✓
- 异性(男+女) → '男'!=='女' → 按钮显示 ✓
This commit is contained in:
@@ -44,7 +44,9 @@ class UserController extends Controller
|
||||
$activePosition = $targetUser->activePosition?->load('position.department')->position;
|
||||
$data = [
|
||||
'username' => $targetUser->username,
|
||||
'sex' => $targetUser->sex,
|
||||
'sex' => match ((int) $targetUser->sex) {
|
||||
1 => '男', 2 => '女', default => ''
|
||||
},
|
||||
'headface' => $targetUser->headface,
|
||||
'usersf' => $targetUser->usersf,
|
||||
'user_level' => $targetUser->user_level,
|
||||
|
||||
@@ -47,12 +47,12 @@ class MarriageService
|
||||
return ['ok' => false, 'message' => '不能向自己求婚!', 'marriage_id' => null];
|
||||
}
|
||||
|
||||
// 只允许异性之间求婚
|
||||
$validSexes = ['男', '女'];
|
||||
// 只允许异性之间求婚(sex 字段:1=男 2=女 0=未设置)
|
||||
$validSexes = [1, 2];
|
||||
if (
|
||||
! in_array($proposer->sex, $validSexes, true) ||
|
||||
! in_array($target->sex, $validSexes, true) ||
|
||||
$proposer->sex === $target->sex
|
||||
! in_array((int) $proposer->sex, $validSexes, true) ||
|
||||
! in_array((int) $target->sex, $validSexes, true) ||
|
||||
(int) $proposer->sex === (int) $target->sex
|
||||
) {
|
||||
return ['ok' => false, 'message' => '只有男女双方才能互相求婚,请确认双方性别设置。', 'marriage_id' => null];
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
roomId: {{ $room->id }},
|
||||
userId: {{ $user->id }},
|
||||
username: "{{ $user->username }}",
|
||||
userSex: "{{ $user->sex }}",
|
||||
userSex: "{{ match ((int) $user->sex) {1 => '男',2 => '女',default => ''} }}",
|
||||
userLevel: {{ $user->user_level }},
|
||||
superLevel: {{ $superLevel }},
|
||||
levelKick: {{ $levelKick }},
|
||||
|
||||
Reference in New Issue
Block a user