diff --git a/app/Http/Controllers/ChatController.php b/app/Http/Controllers/ChatController.php index a2b32ae..75b5b3b 100644 --- a/app/Http/Controllers/ChatController.php +++ b/app/Http/Controllers/ChatController.php @@ -1135,4 +1135,73 @@ class ChatController extends Controller return $isLeveledUp; } + + /** + * 用户间赠送金币(任何登录用户均可调用) + * + * 从自己的余额中扣除指定金额,转入对方账户, + * 并在房间内通过「系统传音」广播一条赠送提示。 + */ + public function giftGold(Request $request): JsonResponse + { + $request->validate([ + 'to_user' => 'required|string', + 'room_id' => 'required|integer', + 'amount' => 'required|integer|min:1|max:999999', + ]); + + $sender = Auth::user(); + $toName = $request->input('to_user'); + $roomId = $request->integer('room_id'); + $amount = $request->integer('amount'); + + // 不能给自己转账 + if ($toName === $sender->username) { + return response()->json(['status' => 'error', 'message' => '不能给自己赠送哦~']); + } + + // 查目标用户 + $receiver = User::where('username', $toName)->first(); + if (! $receiver) { + return response()->json(['status' => 'error', 'message' => '用户不存在']); + } + + // 余额校验 + if (($sender->jjb ?? 0) < $amount) { + return response()->json([ + 'status' => 'error', + 'message' => '金币不足!您当前余额 '.($sender->jjb ?? 0)." 金币,无法赠送 {$amount} 金币。", + ]); + } + + // 执行转账(直接操作字段,与 sendFlower 保持一致风格) + $sender->decrement('jjb', $amount); + $receiver->increment('jjb', $amount); + + // 广播「系统传音」条目至全房间 + $sysMsg = [ + 'id' => $this->chatState->nextMessageId($roomId), + 'room_id' => $roomId, + 'from_user' => '系统传音', + 'to_user' => '大家', + 'content' => "💝 【{$sender->username}】 向 【{$toName}】 赠送了 {$amount} 金币!", + 'is_secret' => false, + 'font_color' => '#b45309', + 'action' => '', + 'sent_at' => now()->toDateTimeString(), + ]; + + $this->chatState->pushMessage($roomId, $sysMsg); + broadcast(new MessageSent($roomId, $sysMsg)); + SaveMessageJob::dispatch($sysMsg); + + return response()->json([ + 'status' => 'success', + 'message' => "赠送成功!已向 {$toName} 赠送 {$amount} 金币。", + 'data' => [ + 'my_jjb' => $sender->fresh()->jjb, + 'target_jjb' => $receiver->fresh()->jjb, + ], + ]); + } } diff --git a/resources/views/chat/frame.blade.php b/resources/views/chat/frame.blade.php index 612b253..eb8a409 100644 --- a/resources/views/chat/frame.blade.php +++ b/resources/views/chat/frame.blade.php @@ -69,6 +69,8 @@ rewardUrl: "{{ route('command.reward') }}", rewardQuotaUrl: "{{ route('command.reward_quota') }}", userJjb: {{ (int) $user->jjb }}, // 当前用户金币(求婚前金额预检查用) + myGold: {{ (int) $user->jjb }}, // 赠金币面板显示余额用(赠送成功后前端更新) + // ─── 婚姻系统 ────────────────────────────── minWeddingCost: {{ (int) \App\Models\WeddingTier::where('is_active', true)->orderBy('amount')->value('amount') ?? 0 }}, marriage: { diff --git a/resources/views/chat/partials/layout/input-bar.blade.php b/resources/views/chat/partials/layout/input-bar.blade.php index 23704ad..e73ef81 100644 --- a/resources/views/chat/partials/layout/input-bar.blade.php +++ b/resources/views/chat/partials/layout/input-bar.blade.php @@ -96,7 +96,8 @@ ]; @endphp @foreach ($welcomeMessages as $msg) -
+ @endforeach @@ -145,8 +146,8 @@ {{-- 第二行:输入框 + 发送 --}}