功能更新与UI优化:游戏图标移除、用户名片修复、婚礼红包界面重设计

- 移除聊天室右下角浮动游戏图标(占卜、百家乐、赛马、老虎机)
- 用户名片按钮区:修复已婚/已好友时按钮换行问题,统一单行显示
- 婚礼红包弹窗:重设计为喜庆鲜红背景,领取按钮改为圆形米黄样式
- 新增婚礼红包恢复接口(/wedding/pending-envelopes),刷新后自动恢复领取按钮
- 修复 Alpine :style 字符串覆盖静态 style 导致圆形按钮失效的问题
- 撤职后用户等级改为根据经验值重新计算,不再无条件重置为1
- 管理员修改用户经验值后自动重算等级,有职务用户等级锁定
- 娱乐大厅钓鱼游戏按钮直接调用 startFishing() 简化操作流程
- 新增赛马、占卜、百家乐游戏及相关后端逻辑
This commit is contained in:
2026-03-03 23:19:59 +08:00
parent 602dcd7cf1
commit f45483bcba
32 changed files with 3746 additions and 370 deletions
+35 -1
View File
@@ -103,8 +103,10 @@ Route::middleware(['chat.auth'])->group(function () {
Route::post('/{marriage}/setup', [\App\Http\Controllers\WeddingController::class, 'setup'])->name('setup');
// 领取婚礼红包
Route::post('/ceremony/{ceremony}/claim', [\App\Http\Controllers\WeddingController::class, 'claim'])->name('claim');
// 查询是否有待领取红包
// 查询是否有待领取红包(单个婚礼)
Route::get('/ceremony/{ceremony}/envelope', [\App\Http\Controllers\WeddingController::class, 'envelopeStatus'])->name('envelope-status');
// 查询当前用户所有待领取婚礼红包(页面加载时恢复按钮)
Route::get('/pending-envelopes', [\App\Http\Controllers\WeddingController::class, 'pendingEnvelopes'])->name('pending-envelopes');
});
// ── 节日福利(前台)──────────────────────────────────────────────
@@ -140,6 +142,38 @@ Route::middleware(['chat.auth'])->group(function () {
Route::post('/claim', [\App\Http\Controllers\MysteryBoxController::class, 'claim'])->name('claim');
});
// ── 赛马竞猜(前台)─────────────────────────────────────────
Route::prefix('horse-race')->name('horse-race.')->group(function () {
// 获取当前赛事信息(马匹、注池、赔率)
Route::get('/current', [\App\Http\Controllers\HorseRaceController::class, 'currentRace'])->name('current');
// 提交下注
Route::post('/bet', [\App\Http\Controllers\HorseRaceController::class, 'bet'])->name('bet');
// 最近10场历史记录
Route::get('/history', [\App\Http\Controllers\HorseRaceController::class, 'history'])->name('history');
});
// ── 神秘占卜(前台)─────────────────────────────────────────
Route::prefix('fortune')->name('fortune.')->group(function () {
// 查询今日占卜状态(已占卜签文 / 剩余免费次数)
Route::get('/today', [\App\Http\Controllers\FortuneTellingController::class, 'todayStatus'])->name('today');
// 执行占卜(免费或付费)
Route::post('/tell', [\App\Http\Controllers\FortuneTellingController::class, 'tell'])->name('tell');
// 个人历史记录
Route::get('/history', [\App\Http\Controllers\FortuneTellingController::class, 'history'])->name('history');
});
// ── 游戏大厅:实时开关状态接口 ────────────────────────────────────
Route::get('/games/enabled', function () {
return response()->json([
'baccarat' => \App\Models\GameConfig::isEnabled('baccarat'),
'slot_machine' => \App\Models\GameConfig::isEnabled('slot_machine'),
'mystery_box' => \App\Models\GameConfig::isEnabled('mystery_box'),
'horse_racing' => \App\Models\GameConfig::isEnabled('horse_racing'),
'fortune_telling' => \App\Models\GameConfig::isEnabled('fortune_telling'),
'fishing' => \App\Models\GameConfig::isEnabled('fishing'),
]);
})->name('games.enabled');
// ---- 第五阶段:具体房间内部聊天核心 ----
// 进入具体房间界面的初始化
Route::get('/room/{id}', [ChatController::class, 'init'])->name('chat.room');