2026-02-26 12:02:00 +08:00
|
|
|
|
<?php
|
|
|
|
|
|
|
2026-02-26 22:27:49 +08:00
|
|
|
|
use App\Http\Controllers\AdminCommandController;
|
2026-02-26 13:35:38 +08:00
|
|
|
|
use App\Http\Controllers\AuthController;
|
2026-02-28 23:44:38 +08:00
|
|
|
|
use App\Http\Controllers\ChangelogController;
|
2026-02-26 21:30:07 +08:00
|
|
|
|
use App\Http\Controllers\ChatBotController;
|
2026-02-26 13:35:38 +08:00
|
|
|
|
use App\Http\Controllers\ChatController;
|
2026-02-28 23:44:38 +08:00
|
|
|
|
use App\Http\Controllers\FeedbackController;
|
2026-02-26 21:10:34 +08:00
|
|
|
|
use App\Http\Controllers\FishingController;
|
2026-02-26 13:35:38 +08:00
|
|
|
|
use App\Http\Controllers\RoomController;
|
|
|
|
|
|
use App\Http\Controllers\UserController;
|
2026-02-26 14:57:24 +08:00
|
|
|
|
use Illuminate\Support\Facades\Auth;
|
2026-02-26 12:02:00 +08:00
|
|
|
|
use Illuminate\Support\Facades\Route;
|
|
|
|
|
|
|
2026-02-26 13:35:38 +08:00
|
|
|
|
// 聊天室首页 (即登录/注册页面)
|
2026-02-26 12:02:00 +08:00
|
|
|
|
Route::get('/', function () {
|
2026-02-26 14:57:24 +08:00
|
|
|
|
if (Auth::check()) {
|
|
|
|
|
|
return redirect()->route('rooms.index');
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-02-26 21:10:34 +08:00
|
|
|
|
// 获取可用房间列表供登录页选择(原版风格)
|
|
|
|
|
|
$rooms = \App\Models\Room::orderBy('id')->get();
|
|
|
|
|
|
|
|
|
|
|
|
return view('index', compact('rooms'));
|
2026-02-26 13:35:38 +08:00
|
|
|
|
})->name('home');
|
|
|
|
|
|
|
|
|
|
|
|
// 处理登录/自动注册请求
|
|
|
|
|
|
Route::post('/login', [AuthController::class, 'login'])->name('login.post');
|
|
|
|
|
|
|
|
|
|
|
|
// 处理退出登录
|
|
|
|
|
|
Route::post('/logout', [AuthController::class, 'logout'])->name('logout');
|
|
|
|
|
|
|
|
|
|
|
|
// 聊天室系统内部路由 (需要鉴权)
|
|
|
|
|
|
Route::middleware(['chat.auth'])->group(function () {
|
|
|
|
|
|
// ---- 第六阶段:大厅与房间管理 ----
|
2026-02-27 01:20:43 +08:00
|
|
|
|
Route::get('/guide', fn () => view('rooms.guide'))->name('guide');
|
2026-02-26 13:35:38 +08:00
|
|
|
|
Route::get('/rooms', [RoomController::class, 'index'])->name('rooms.index');
|
|
|
|
|
|
Route::post('/rooms', [RoomController::class, 'store'])->name('rooms.store');
|
|
|
|
|
|
Route::put('/rooms/{id}', [RoomController::class, 'update'])->name('rooms.update');
|
|
|
|
|
|
Route::delete('/rooms/{id}', [RoomController::class, 'destroy'])->name('rooms.destroy');
|
|
|
|
|
|
Route::post('/rooms/{id}/transfer', [RoomController::class, 'transfer'])->name('rooms.transfer');
|
|
|
|
|
|
|
2026-03-12 09:33:38 +08:00
|
|
|
|
// ═══════════════════════════════════════════════════════════════════
|
|
|
|
|
|
// 排行榜系统 (风云榜、土豪榜等)
|
|
|
|
|
|
// ═══════════════════════════════════════════════════════════════════
|
2026-02-26 13:35:38 +08:00
|
|
|
|
Route::get('/leaderboard', [\App\Http\Controllers\LeaderboardController::class, 'index'])->name('leaderboard.index');
|
2026-03-12 09:47:06 +08:00
|
|
|
|
Route::get('/leaderboard/today', [\App\Http\Controllers\LeaderboardController::class, 'todayIndex'])->name('leaderboard.today');
|
2026-02-26 13:35:38 +08:00
|
|
|
|
|
2026-03-12 09:33:38 +08:00
|
|
|
|
// ═══════════════════════════════════════════════════════════════════
|
|
|
|
|
|
// 邀请排行达人榜
|
|
|
|
|
|
// ═══════════════════════════════════════════════════════════════════
|
|
|
|
|
|
Route::get('/invites/leaderboard', [\App\Http\Controllers\InviteController::class, 'leaderboard'])->name('invite.leaderboard');
|
|
|
|
|
|
|
|
|
|
|
|
// ═══════════════════════════════════════════════════════════════════用户个人积分流水日志(查询自己的经验/金币/魅力历史)
|
2026-02-28 12:49:26 +08:00
|
|
|
|
Route::get('/my/currency-logs', [\App\Http\Controllers\LeaderboardController::class, 'myLogs'])->name('currency.my-logs');
|
|
|
|
|
|
|
2026-02-28 23:44:38 +08:00
|
|
|
|
// ---- 勤务台(展示四榜)----
|
|
|
|
|
|
Route::get('/duty-hall', [\App\Http\Controllers\DutyHallController::class, 'index'])->name('duty-hall.index');
|
|
|
|
|
|
|
2026-02-26 13:35:38 +08:00
|
|
|
|
// ---- 第十阶段:站内信与留言板系统 ----
|
|
|
|
|
|
Route::get('/guestbook', [\App\Http\Controllers\GuestbookController::class, 'index'])->name('guestbook.index');
|
|
|
|
|
|
Route::post('/guestbook', [\App\Http\Controllers\GuestbookController::class, 'store'])->middleware('throttle:10,1')->name('guestbook.store');
|
|
|
|
|
|
Route::delete('/guestbook/{id}', [\App\Http\Controllers\GuestbookController::class, 'destroy'])->name('guestbook.destroy');
|
|
|
|
|
|
|
|
|
|
|
|
// ---- 第七阶段:用户资料与特权管理 ----
|
|
|
|
|
|
Route::get('/user/{username}', [UserController::class, 'show'])->name('user.show');
|
|
|
|
|
|
Route::put('/user/profile', [UserController::class, 'updateProfile'])->name('user.update_profile');
|
2026-04-02 14:56:51 +08:00
|
|
|
|
Route::post('/user/generate-wechat-code', [UserController::class, 'generateWechatCode'])->name('user.generate_wechat_code');
|
|
|
|
|
|
Route::post('/user/unbind-wechat', [UserController::class, 'unbindWechat'])->name('user.unbind_wechat');
|
2026-02-27 10:02:33 +08:00
|
|
|
|
Route::post('/user/send-email-code', [\App\Http\Controllers\Api\VerificationController::class, 'sendEmailCode'])->name('user.send_email_code');
|
2026-02-26 13:35:38 +08:00
|
|
|
|
Route::put('/user/password', [UserController::class, 'changePassword'])->name('user.update_password');
|
|
|
|
|
|
Route::post('/user/{username}/kick', [UserController::class, 'kick'])->name('user.kick');
|
|
|
|
|
|
Route::post('/user/{username}/mute', [UserController::class, 'mute'])->name('user.mute');
|
2026-02-26 21:10:34 +08:00
|
|
|
|
Route::post('/user/{username}/ban', [UserController::class, 'ban'])->name('user.ban');
|
|
|
|
|
|
Route::post('/user/{username}/banip', [UserController::class, 'banIp'])->name('user.banip');
|
2026-02-26 13:35:38 +08:00
|
|
|
|
|
2026-03-01 00:48:51 +08:00
|
|
|
|
// ---- 好友系统 ----
|
|
|
|
|
|
Route::get('/friends', [\App\Http\Controllers\FriendController::class, 'index'])->name('friend.index');
|
|
|
|
|
|
Route::get('/friend/{username}/status', [\App\Http\Controllers\FriendController::class, 'status'])->name('friend.status');
|
|
|
|
|
|
Route::post('/friend/{username}/add', [\App\Http\Controllers\FriendController::class, 'addFriend'])->name('friend.add');
|
|
|
|
|
|
Route::delete('/friend/{username}/remove', [\App\Http\Controllers\FriendController::class, 'removeFriend'])->name('friend.remove');
|
|
|
|
|
|
|
2026-03-01 15:09:33 +08:00
|
|
|
|
// ── 婚姻系统(前台)──────────────────────────────────────────────
|
|
|
|
|
|
Route::prefix('marriage')->name('marriage.')->group(function () {
|
|
|
|
|
|
// 查询当前用户婚姻状态
|
|
|
|
|
|
Route::get('/status', [\App\Http\Controllers\MarriageController::class, 'status'])->name('status');
|
|
|
|
|
|
// 查询目标用户婚姻信息(名片用)
|
|
|
|
|
|
Route::get('/target', [\App\Http\Controllers\MarriageController::class, 'targetStatus'])->name('target-status');
|
|
|
|
|
|
// 当前用户持有的戒指列表
|
|
|
|
|
|
Route::get('/rings', [\App\Http\Controllers\MarriageController::class, 'myRings'])->name('rings');
|
|
|
|
|
|
// 发起求婚
|
|
|
|
|
|
Route::post('/propose', [\App\Http\Controllers\MarriageController::class, 'propose'])->name('propose');
|
|
|
|
|
|
// 接受/拒绝求婚
|
|
|
|
|
|
Route::post('/{marriage}/accept', [\App\Http\Controllers\MarriageController::class, 'accept'])->name('accept');
|
|
|
|
|
|
Route::post('/{marriage}/reject', [\App\Http\Controllers\MarriageController::class, 'reject'])->name('reject');
|
|
|
|
|
|
// 申请离婚(type: mutual|forced)
|
|
|
|
|
|
Route::post('/{marriage}/divorce', [\App\Http\Controllers\MarriageController::class, 'divorce'])->name('divorce');
|
2026-03-01 19:02:43 +08:00
|
|
|
|
// 离婚惩罚配置查询(前端展示风险提示用)
|
|
|
|
|
|
Route::get('/divorce-config', [\App\Http\Controllers\MarriageController::class, 'divorceConfig'])->name('divorce-config');
|
2026-03-01 15:09:33 +08:00
|
|
|
|
// 确认协议离婚
|
|
|
|
|
|
Route::post('/{marriage}/confirm-divorce', [\App\Http\Controllers\MarriageController::class, 'confirmDivorce'])->name('confirm-divorce');
|
2026-03-01 19:02:43 +08:00
|
|
|
|
// 拒绝离婚申请(被申请方选择不同意→弹强制离婚)
|
|
|
|
|
|
Route::post('/{marriage}/reject-divorce', [\App\Http\Controllers\MarriageController::class, 'rejectDivorce'])->name('reject-divorce');
|
2026-03-01 15:09:33 +08:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
// ── 婚礼系统(前台)──────────────────────────────────────────────
|
|
|
|
|
|
Route::prefix('wedding')->name('wedding.')->group(function () {
|
|
|
|
|
|
// 婚礼档位列表
|
|
|
|
|
|
Route::get('/tiers', [\App\Http\Controllers\WeddingController::class, 'tiers'])->name('tiers');
|
|
|
|
|
|
// 设置并发起婚礼
|
|
|
|
|
|
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');
|
2026-03-03 23:19:59 +08:00
|
|
|
|
// 查询是否有待领取红包(单个婚礼)
|
2026-03-01 15:09:33 +08:00
|
|
|
|
Route::get('/ceremony/{ceremony}/envelope', [\App\Http\Controllers\WeddingController::class, 'envelopeStatus'])->name('envelope-status');
|
2026-03-03 23:19:59 +08:00
|
|
|
|
// 查询当前用户所有待领取婚礼红包(页面加载时恢复按钮)
|
|
|
|
|
|
Route::get('/pending-envelopes', [\App\Http\Controllers\WeddingController::class, 'pendingEnvelopes'])->name('pending-envelopes');
|
2026-03-01 15:09:33 +08:00
|
|
|
|
});
|
|
|
|
|
|
|
2026-03-01 20:06:53 +08:00
|
|
|
|
// ── 节日福利(前台)──────────────────────────────────────────────
|
|
|
|
|
|
Route::prefix('holiday')->name('holiday.')->group(function () {
|
|
|
|
|
|
// 领取节日福利红包
|
|
|
|
|
|
Route::post('/{event}/claim', [\App\Http\Controllers\HolidayController::class, 'claim'])->name('claim');
|
|
|
|
|
|
// 查询当前用户在活动中的领取状态
|
|
|
|
|
|
Route::get('/{event}/status', [\App\Http\Controllers\HolidayController::class, 'status'])->name('status');
|
|
|
|
|
|
});
|
|
|
|
|
|
|
2026-03-01 20:25:09 +08:00
|
|
|
|
// ── 百家乐(前台)────────────────────────────────────────────────
|
|
|
|
|
|
Route::prefix('baccarat')->name('baccarat.')->group(function () {
|
|
|
|
|
|
Route::get('/current', [\App\Http\Controllers\BaccaratController::class, 'currentRound'])->name('current');
|
|
|
|
|
|
Route::post('/bet', [\App\Http\Controllers\BaccaratController::class, 'bet'])->name('bet');
|
|
|
|
|
|
Route::get('/history', [\App\Http\Controllers\BaccaratController::class, 'history'])->name('history');
|
|
|
|
|
|
});
|
|
|
|
|
|
|
2026-03-01 21:00:21 +08:00
|
|
|
|
// ── 老虎机(前台)────────────────────────────────────────────────
|
|
|
|
|
|
Route::prefix('slot')->name('slot.')->group(function () {
|
|
|
|
|
|
// 获取配置及今日剩余次数
|
|
|
|
|
|
Route::get('/info', [\App\Http\Controllers\SlotMachineController::class, 'info'])->name('info');
|
|
|
|
|
|
// 执行一次转动
|
|
|
|
|
|
Route::post('/spin', [\App\Http\Controllers\SlotMachineController::class, 'spin'])->name('spin');
|
|
|
|
|
|
// 个人历史记录
|
|
|
|
|
|
Route::get('/history', [\App\Http\Controllers\SlotMachineController::class, 'history'])->name('history');
|
|
|
|
|
|
});
|
|
|
|
|
|
|
2026-03-03 19:29:43 +08:00
|
|
|
|
// ── 神秘箱子(前台)──────────────────────────────────────────────
|
|
|
|
|
|
Route::prefix('mystery-box')->name('mystery-box.')->group(function () {
|
|
|
|
|
|
// 查询当前可领取的箱子(前端轮询/显示悬浮提示用)
|
|
|
|
|
|
Route::get('/status', [\App\Http\Controllers\MysteryBoxController::class, 'status'])->name('status');
|
|
|
|
|
|
// 用户发送暗号领取箱子
|
|
|
|
|
|
Route::post('/claim', [\App\Http\Controllers\MysteryBoxController::class, 'claim'])->name('claim');
|
|
|
|
|
|
});
|
|
|
|
|
|
|
2026-03-03 23:19:59 +08:00
|
|
|
|
// ── 赛马竞猜(前台)─────────────────────────────────────────
|
|
|
|
|
|
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');
|
|
|
|
|
|
});
|
|
|
|
|
|
|
2026-03-04 15:38:02 +08:00
|
|
|
|
// ── 双色球彩票(前台)──────────────────────────────────────
|
|
|
|
|
|
Route::prefix('lottery')->name('lottery.')->group(function () {
|
|
|
|
|
|
// 当期状态:奖池金额 / 剩余购票时间 / 我的购票
|
|
|
|
|
|
Route::get('/current', [\App\Http\Controllers\LotteryController::class, 'current'])->name('current');
|
|
|
|
|
|
// 购票(自选或机选)
|
|
|
|
|
|
Route::post('/buy', [\App\Http\Controllers\LotteryController::class, 'buy'])->name('buy');
|
|
|
|
|
|
// 服务端机选号码生成(不扣费,俩前端展示后确认购买)
|
|
|
|
|
|
Route::get('/quick-pick', [\App\Http\Controllers\LotteryController::class, 'quickPick'])->name('quick-pick');
|
|
|
|
|
|
// 历史期次(最近20期)
|
|
|
|
|
|
Route::get('/history', [\App\Http\Controllers\LotteryController::class, 'history'])->name('history');
|
|
|
|
|
|
// 我的购票记录
|
|
|
|
|
|
Route::get('/my', [\App\Http\Controllers\LotteryController::class, 'my'])->name('my');
|
|
|
|
|
|
});
|
|
|
|
|
|
|
2026-03-12 08:35:21 +08:00
|
|
|
|
// ── 五子棋(前台)───────────────────────────────────────────────
|
|
|
|
|
|
Route::prefix('gomoku')->name('gomoku.')->group(function () {
|
|
|
|
|
|
// 获取五子棋配置(入场费、奖励,对外暴露给前端面板)
|
|
|
|
|
|
Route::get('/config', function () {
|
|
|
|
|
|
$c = \App\Models\GameConfig::query()->where('game_key', 'gomoku')->first();
|
|
|
|
|
|
$p = $c?->params ?? [];
|
|
|
|
|
|
|
|
|
|
|
|
return response()->json([
|
|
|
|
|
|
'ok' => true,
|
|
|
|
|
|
'pvp_reward' => (int) ($p['pvp_reward'] ?? 80),
|
|
|
|
|
|
'pve_levels' => [
|
|
|
|
|
|
['level' => 1, 'name' => '简单', 'fee' => (int) ($p['pve_easy_fee'] ?? 0), 'reward' => (int) ($p['pve_easy_reward'] ?? 20)],
|
|
|
|
|
|
['level' => 2, 'name' => '普通', 'fee' => (int) ($p['pve_normal_fee'] ?? 10), 'reward' => (int) ($p['pve_normal_reward'] ?? 50)],
|
|
|
|
|
|
['level' => 3, 'name' => '困难', 'fee' => (int) ($p['pve_hard_fee'] ?? 30), 'reward' => (int) ($p['pve_hard_reward'] ?? 120)],
|
|
|
|
|
|
['level' => 4, 'name' => '专家', 'fee' => (int) ($p['pve_expert_fee'] ?? 80), 'reward' => (int) ($p['pve_expert_reward'] ?? 300)],
|
|
|
|
|
|
],
|
|
|
|
|
|
]);
|
|
|
|
|
|
})->name('config');
|
|
|
|
|
|
// 查询当前用户是否有进行中的对局(用于重进时恢复)
|
|
|
|
|
|
Route::get('/active', [\App\Http\Controllers\GomokuController::class, 'active'])->name('active');
|
|
|
|
|
|
// 创建对局(pvp=随机邀请 | pve=人机对战)
|
|
|
|
|
|
Route::post('/create', [\App\Http\Controllers\GomokuController::class, 'create'])->name('create');
|
|
|
|
|
|
// 加入 PvP 对战
|
|
|
|
|
|
Route::post('/{game}/join', [\App\Http\Controllers\GomokuController::class, 'join'])->name('join');
|
|
|
|
|
|
// 落子
|
|
|
|
|
|
Route::post('/{game}/move', [\App\Http\Controllers\GomokuController::class, 'move'])->name('move');
|
|
|
|
|
|
// 认输
|
|
|
|
|
|
Route::post('/{game}/resign', [\App\Http\Controllers\GomokuController::class, 'resign'])->name('resign');
|
|
|
|
|
|
// 取消等待中的邀请
|
|
|
|
|
|
Route::post('/{game}/cancel', [\App\Http\Controllers\GomokuController::class, 'cancel'])->name('cancel');
|
|
|
|
|
|
// 获取当前棋盘状态
|
|
|
|
|
|
Route::get('/{game}/state', [\App\Http\Controllers\GomokuController::class, 'state'])->name('state');
|
|
|
|
|
|
});
|
|
|
|
|
|
|
2026-03-03 23:19:59 +08:00
|
|
|
|
// ── 游戏大厅:实时开关状态接口 ────────────────────────────────────
|
|
|
|
|
|
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'),
|
2026-03-04 15:38:02 +08:00
|
|
|
|
'lottery' => \App\Models\GameConfig::isEnabled('lottery'),
|
2026-03-12 08:35:21 +08:00
|
|
|
|
'gomoku' => \App\Models\GameConfig::isEnabled('gomoku'),
|
2026-03-03 23:19:59 +08:00
|
|
|
|
]);
|
|
|
|
|
|
})->name('games.enabled');
|
|
|
|
|
|
|
2026-02-26 13:35:38 +08:00
|
|
|
|
// ---- 第五阶段:具体房间内部聊天核心 ----
|
|
|
|
|
|
// 进入具体房间界面的初始化
|
|
|
|
|
|
Route::get('/room/{id}', [ChatController::class, 'init'])->name('chat.room');
|
|
|
|
|
|
|
|
|
|
|
|
// 发送消息
|
|
|
|
|
|
Route::post('/room/{id}/send', [ChatController::class, 'send'])->name('chat.send');
|
|
|
|
|
|
|
2026-02-26 23:47:54 +08:00
|
|
|
|
// 挂机心跳存点 (限制每分钟最多调用 6 次防止挂机脚本滥用)
|
2026-02-26 13:35:38 +08:00
|
|
|
|
Route::post('/room/{id}/heartbeat', [ChatController::class, 'heartbeat'])
|
2026-02-26 23:47:54 +08:00
|
|
|
|
->middleware('throttle:6,1')
|
2026-02-26 13:35:38 +08:00
|
|
|
|
->name('chat.heartbeat');
|
|
|
|
|
|
|
|
|
|
|
|
// 退出房间
|
|
|
|
|
|
Route::post('/room/{id}/leave', [ChatController::class, 'leave'])->name('chat.leave');
|
2026-02-26 21:10:34 +08:00
|
|
|
|
|
2026-03-03 14:46:22 +08:00
|
|
|
|
// 所有房间在线人数(右侧房间面板用)
|
|
|
|
|
|
Route::get('/rooms/online-status', [ChatController::class, 'roomsOnlineStatus'])->name('chat.rooms-online-status');
|
|
|
|
|
|
|
2026-02-26 21:10:34 +08:00
|
|
|
|
// 头像列表(供选择)
|
|
|
|
|
|
Route::get('/headface/list', [ChatController::class, 'headfaceList'])->name('headface.list');
|
|
|
|
|
|
|
|
|
|
|
|
// 修改头像
|
|
|
|
|
|
Route::post('/headface/change', [ChatController::class, 'changeAvatar'])->name('headface.change');
|
|
|
|
|
|
|
2026-03-12 15:26:54 +08:00
|
|
|
|
// 上传自定义头像
|
|
|
|
|
|
Route::post('/headface/upload', [ChatController::class, 'uploadAvatar'])->name('headface.upload');
|
|
|
|
|
|
|
2026-02-26 21:10:34 +08:00
|
|
|
|
// 设置房间公告/祝福语
|
|
|
|
|
|
Route::post('/room/{id}/announcement', [ChatController::class, 'setAnnouncement'])->name('chat.announcement');
|
|
|
|
|
|
|
|
|
|
|
|
// ---- 钓鱼小游戏(复刻原版 diaoyu/ 功能)----
|
|
|
|
|
|
Route::post('/room/{id}/fish/cast', [FishingController::class, 'cast'])->name('fishing.cast');
|
|
|
|
|
|
Route::post('/room/{id}/fish/reel', [FishingController::class, 'reel'])->name('fishing.reel');
|
2026-02-26 21:30:07 +08:00
|
|
|
|
|
|
|
|
|
|
// ---- AI 聊天机器人 ----
|
|
|
|
|
|
Route::post('/chatbot/chat', [ChatBotController::class, 'chat'])->name('chatbot.chat');
|
|
|
|
|
|
Route::post('/chatbot/clear', [ChatBotController::class, 'clearContext'])->name('chatbot.clear');
|
2026-02-26 22:27:49 +08:00
|
|
|
|
|
2026-02-27 01:01:56 +08:00
|
|
|
|
// ---- 送花/礼物互动 ----
|
|
|
|
|
|
Route::post('/gift/flower', [ChatController::class, 'sendFlower'])->name('gift.flower');
|
2026-03-18 20:12:17 +08:00
|
|
|
|
Route::post('/gift/gold', [ChatController::class, 'giftGold'])->name('gift.gold');
|
2026-02-27 01:01:56 +08:00
|
|
|
|
|
2026-02-26 22:27:49 +08:00
|
|
|
|
// ---- 管理员命令(聊天室内实时操作)----
|
|
|
|
|
|
Route::post('/command/warn', [AdminCommandController::class, 'warn'])->name('command.warn');
|
|
|
|
|
|
Route::post('/command/kick', [AdminCommandController::class, 'kick'])->name('command.kick');
|
|
|
|
|
|
Route::post('/command/mute', [AdminCommandController::class, 'mute'])->name('command.mute');
|
|
|
|
|
|
Route::post('/command/freeze', [AdminCommandController::class, 'freeze'])->name('command.freeze');
|
2026-03-01 11:09:29 +08:00
|
|
|
|
Route::post('/command/reward', [AdminCommandController::class, 'reward'])->name('command.reward');
|
2026-03-01 11:50:12 +08:00
|
|
|
|
Route::get('/command/reward-quota', [AdminCommandController::class, 'rewardQuota'])->name('command.reward_quota');
|
2026-02-26 22:27:49 +08:00
|
|
|
|
Route::get('/command/whispers/{username}', [AdminCommandController::class, 'viewWhispers'])->name('command.whispers');
|
|
|
|
|
|
Route::post('/command/announce', [AdminCommandController::class, 'announce'])->name('command.announce');
|
2026-02-26 23:05:56 +08:00
|
|
|
|
Route::post('/command/clear-screen', [AdminCommandController::class, 'clearScreen'])->name('command.clear_screen');
|
2026-02-27 14:14:35 +08:00
|
|
|
|
Route::post('/command/effect', [AdminCommandController::class, 'effect'])->name('command.effect');
|
2026-02-27 15:57:12 +08:00
|
|
|
|
|
2026-03-01 22:20:54 +08:00
|
|
|
|
// ---- 礼包红包(superlevel 发包 / 所有登录用户可抢)----
|
|
|
|
|
|
Route::post('/command/red-packet/send', [\App\Http\Controllers\RedPacketController::class, 'send'])->name('command.red_packet.send');
|
|
|
|
|
|
Route::get('/red-packet/{envelopeId}/status', [\App\Http\Controllers\RedPacketController::class, 'status'])->name('red_packet.status');
|
|
|
|
|
|
Route::post('/red-packet/{envelopeId}/claim', [\App\Http\Controllers\RedPacketController::class, 'claim'])->name('red_packet.claim');
|
|
|
|
|
|
|
2026-02-27 15:57:12 +08:00
|
|
|
|
// ---- 商店(购买特效卡/改名卡)----
|
|
|
|
|
|
Route::get('/shop/items', [\App\Http\Controllers\ShopController::class, 'items'])->name('shop.items');
|
|
|
|
|
|
Route::post('/shop/buy', [\App\Http\Controllers\ShopController::class, 'buy'])->name('shop.buy');
|
|
|
|
|
|
Route::post('/shop/rename', [\App\Http\Controllers\ShopController::class, 'rename'])->name('shop.rename');
|
2026-02-28 23:44:38 +08:00
|
|
|
|
|
2026-03-21 09:50:46 +08:00
|
|
|
|
// ---- 银行资金接口 ----
|
2026-03-18 20:31:19 +08:00
|
|
|
|
Route::get('/bank', [\App\Http\Controllers\BankController::class, 'info'])->name('bank.info');
|
2026-03-21 09:50:46 +08:00
|
|
|
|
Route::get('/bank/ranking', [\App\Http\Controllers\BankController::class, 'ranking'])->name('bank.ranking');
|
2026-03-18 20:31:19 +08:00
|
|
|
|
Route::post('/bank/deposit', [\App\Http\Controllers\BankController::class, 'deposit'])->name('bank.deposit');
|
|
|
|
|
|
Route::post('/bank/withdraw', [\App\Http\Controllers\BankController::class, 'withdraw'])->name('bank.withdraw');
|
|
|
|
|
|
|
2026-02-28 23:44:38 +08:00
|
|
|
|
// ---- 开发日志(独立前台页面 /changelog)----
|
|
|
|
|
|
Route::get('/changelog', [ChangelogController::class, 'index'])->name('changelog.index');
|
|
|
|
|
|
// 懒加载接口:scroll 到底追加更多日志
|
|
|
|
|
|
Route::get('/changelog/more', [ChangelogController::class, 'loadMoreChangelogs'])->name('changelog.more');
|
|
|
|
|
|
|
|
|
|
|
|
// ---- 用户反馈(独立前台页面 /feedback)----
|
|
|
|
|
|
// 反馈列表页
|
|
|
|
|
|
Route::get('/feedback', [FeedbackController::class, 'index'])->name('feedback.index');
|
|
|
|
|
|
// 懒加载接口:scroll 到底追加更多反馈
|
|
|
|
|
|
Route::get('/feedback/more', [FeedbackController::class, 'loadMore'])->name('feedback.more');
|
|
|
|
|
|
// 提交新反馈
|
|
|
|
|
|
Route::post('/feedback', [FeedbackController::class, 'store'])->middleware('throttle:5,1')->name('feedback.store');
|
|
|
|
|
|
// 赞同/取消赞同(Toggle)
|
|
|
|
|
|
Route::post('/feedback/{id}/vote', [FeedbackController::class, 'vote'])->name('feedback.vote');
|
|
|
|
|
|
// 提交补充评论
|
|
|
|
|
|
Route::post('/feedback/{id}/reply', [FeedbackController::class, 'reply'])->middleware('throttle:10,1')->name('feedback.reply');
|
|
|
|
|
|
// 删除反馈(本人24小时内或管理员)
|
|
|
|
|
|
Route::delete('/feedback/{id}', [FeedbackController::class, 'destroy'])->name('feedback.destroy');
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
// ═══════════════════════════════════════════════════════════════════
|
|
|
|
|
|
// 后台管理路由(三层权限)
|
|
|
|
|
|
// 层级 1|chat.has_position ── 有在职职务即可(id=1 始终通过)
|
|
|
|
|
|
// 层级 2|chat.site_owner ── 仅站长(id=1)
|
|
|
|
|
|
// 聊天室内快速任命/撤销(需登录 + 有在职职务)
|
|
|
|
|
|
Route::middleware(['chat.auth', 'chat.has_position'])->prefix('chat-appoint')->name('chat.appoint.')->group(function () {
|
|
|
|
|
|
Route::get('/positions', [\App\Http\Controllers\ChatAppointmentController::class, 'positions'])->name('positions');
|
|
|
|
|
|
Route::post('/appoint', [\App\Http\Controllers\ChatAppointmentController::class, 'appoint'])->name('appoint');
|
|
|
|
|
|
Route::post('/revoke', [\App\Http\Controllers\ChatAppointmentController::class, 'revoke'])->name('revoke');
|
2026-02-26 13:35:38 +08:00
|
|
|
|
});
|
|
|
|
|
|
|
2026-02-28 23:44:38 +08:00
|
|
|
|
// ═══════════════════════════════════════════════════════════════════
|
|
|
|
|
|
Route::middleware(['chat.auth', 'chat.has_position'])->prefix('admin')->name('admin.')->group(function () {
|
|
|
|
|
|
|
|
|
|
|
|
// ──────────────────────────────────────────────────────────────
|
|
|
|
|
|
// 层级 1:有在职职务即可访问
|
|
|
|
|
|
// ──────────────────────────────────────────────────────────────
|
|
|
|
|
|
|
2026-02-26 13:35:38 +08:00
|
|
|
|
// 后台首页概览
|
|
|
|
|
|
Route::get('/', [\App\Http\Controllers\Admin\DashboardController::class, 'index'])->name('dashboard');
|
|
|
|
|
|
|
2026-02-28 23:44:38 +08:00
|
|
|
|
// 积分流水统计
|
|
|
|
|
|
Route::get('/currency-stats', [\App\Http\Controllers\Admin\CurrencyStatsController::class, 'index'])->name('currency-stats.index');
|
|
|
|
|
|
|
|
|
|
|
|
// 用户管理:有职务的人只能查看(index),update/destroy 仅站长
|
|
|
|
|
|
Route::get('/users', [\App\Http\Controllers\Admin\UserManagerController::class, 'index'])->name('users.index');
|
|
|
|
|
|
|
|
|
|
|
|
// 秘语查看(耳语记录)
|
|
|
|
|
|
Route::get('/whispers', function () {
|
|
|
|
|
|
return view('admin.whispers');
|
|
|
|
|
|
})->name('whispers.index');
|
|
|
|
|
|
|
2026-03-01 12:22:13 +08:00
|
|
|
|
// 我的履职记录(当前登录者自己的权限操作记录)
|
|
|
|
|
|
Route::get('/my-duty-logs', [\App\Http\Controllers\Admin\AppointmentController::class, 'myDutyLogs'])->name('appointments.my-duty-logs');
|
|
|
|
|
|
|
2026-02-28 23:44:38 +08:00
|
|
|
|
// 任命管理(任命权限由 AppointmentService 内部校验)
|
|
|
|
|
|
Route::get('/appointments', [\App\Http\Controllers\Admin\AppointmentController::class, 'index'])->name('appointments.index');
|
|
|
|
|
|
Route::post('/appointments', [\App\Http\Controllers\Admin\AppointmentController::class, 'store'])->name('appointments.store');
|
|
|
|
|
|
Route::delete('/appointments/{userPosition}/revoke', [\App\Http\Controllers\Admin\AppointmentController::class, 'revoke'])->name('appointments.revoke');
|
|
|
|
|
|
Route::get('/appointments/{userPosition}/duty-logs', [\App\Http\Controllers\Admin\AppointmentController::class, 'dutyLogs'])->name('appointments.duty-logs');
|
|
|
|
|
|
Route::get('/appointments/{userPosition}/authority-logs', [\App\Http\Controllers\Admin\AppointmentController::class, 'authorityLogs'])->name('appointments.authority-logs');
|
|
|
|
|
|
Route::get('/appointments/history', [\App\Http\Controllers\Admin\AppointmentController::class, 'history'])->name('appointments.history');
|
|
|
|
|
|
Route::get('/appointments/search-users', [\App\Http\Controllers\Admin\AppointmentController::class, 'searchUsers'])->name('appointments.search-users');
|
|
|
|
|
|
|
|
|
|
|
|
// ── 层级 1.5:superlevel 及以上可完整操作以下模块 ──
|
|
|
|
|
|
Route::middleware(['chat.level:super'])->group(function () {
|
|
|
|
|
|
// 部门 / 职务列表 + 编辑(删除仍限 id=1)
|
|
|
|
|
|
Route::get('/departments', [\App\Http\Controllers\Admin\DepartmentController::class, 'index'])->name('departments.index');
|
|
|
|
|
|
Route::get('/positions', [\App\Http\Controllers\Admin\PositionController::class, 'index'])->name('positions.index');
|
|
|
|
|
|
Route::put('/departments/{department}', [\App\Http\Controllers\Admin\DepartmentController::class, 'update'])->name('departments.update');
|
|
|
|
|
|
Route::put('/positions/{position}', [\App\Http\Controllers\Admin\PositionController::class, 'update'])->name('positions.update');
|
2026-03-01 11:28:15 +08:00
|
|
|
|
Route::patch('/positions/{position}/patch', [\App\Http\Controllers\Admin\PositionController::class, 'quickPatch'])->name('positions.quick_patch');
|
2026-03-01 11:22:02 +08:00
|
|
|
|
Route::post('/positions/reward-config', [\App\Http\Controllers\Admin\PositionController::class, 'saveRewardConfig'])->name('positions.reward_config');
|
2026-02-28 23:44:38 +08:00
|
|
|
|
|
2026-03-01 01:28:23 +08:00
|
|
|
|
// 大卡片通知广播(仅超级管理员,安全隔离:普通用户无此接口)
|
|
|
|
|
|
Route::post('/banner/broadcast', [\App\Http\Controllers\Admin\BannerBroadcastController::class, 'send'])->name('admin.banner.broadcast');
|
|
|
|
|
|
|
2026-02-28 23:44:38 +08:00
|
|
|
|
// 聊天室参数(含保存)
|
2026-02-27 09:39:26 +08:00
|
|
|
|
Route::get('/system', [\App\Http\Controllers\Admin\SystemController::class, 'edit'])->name('system.edit');
|
|
|
|
|
|
Route::put('/system', [\App\Http\Controllers\Admin\SystemController::class, 'update'])->name('system.update');
|
2026-02-27 09:47:47 +08:00
|
|
|
|
|
2026-04-02 14:56:51 +08:00
|
|
|
|
// 微信机器人配置
|
|
|
|
|
|
Route::get('/wechat-bot', [\App\Http\Controllers\Admin\WechatBotController::class, 'edit'])->name('wechat_bot.edit');
|
|
|
|
|
|
Route::put('/wechat-bot', [\App\Http\Controllers\Admin\WechatBotController::class, 'update'])->name('wechat_bot.update');
|
|
|
|
|
|
|
2026-03-03 15:00:54 +08:00
|
|
|
|
// 运维工具(仅 id=1 超管可用)
|
2026-03-03 15:07:36 +08:00
|
|
|
|
Route::get('/ops', [\App\Http\Controllers\Admin\OpsController::class, 'index'])->name('ops.index');
|
|
|
|
|
|
Route::post('/ops/clear-cache', [\App\Http\Controllers\Admin\OpsController::class, 'clearCache'])->name('ops.clear-cache');
|
|
|
|
|
|
Route::post('/ops/clear-routes', [\App\Http\Controllers\Admin\OpsController::class, 'clearRoutes'])->name('ops.clear-routes');
|
|
|
|
|
|
Route::post('/ops/clear-views', [\App\Http\Controllers\Admin\OpsController::class, 'clearViews'])->name('ops.clear-views');
|
|
|
|
|
|
Route::post('/ops/clear-room-online', [\App\Http\Controllers\Admin\OpsController::class, 'clearRoomOnline'])->name('ops.clear-room-online');
|
2026-03-03 15:00:54 +08:00
|
|
|
|
|
2026-03-03 14:36:09 +08:00
|
|
|
|
// 房间管理(含新增/编辑/删除)
|
2026-02-28 23:44:38 +08:00
|
|
|
|
Route::get('/rooms', [\App\Http\Controllers\Admin\RoomManagerController::class, 'index'])->name('rooms.index');
|
2026-03-03 14:36:09 +08:00
|
|
|
|
Route::post('/rooms', [\App\Http\Controllers\Admin\RoomManagerController::class, 'store'])->name('rooms.store');
|
2026-02-28 23:44:38 +08:00
|
|
|
|
Route::put('/rooms/{room}', [\App\Http\Controllers\Admin\RoomManagerController::class, 'update'])->name('rooms.update');
|
|
|
|
|
|
Route::delete('/rooms/{room}', [\App\Http\Controllers\Admin\RoomManagerController::class, 'destroy'])->name('rooms.destroy');
|
|
|
|
|
|
|
|
|
|
|
|
// 随机事件(含新增/编辑/删除/切换)
|
|
|
|
|
|
Route::get('/autoact', [\App\Http\Controllers\Admin\AutoactController::class, 'index'])->name('autoact.index');
|
|
|
|
|
|
Route::post('/autoact', [\App\Http\Controllers\Admin\AutoactController::class, 'store'])->name('autoact.store');
|
|
|
|
|
|
Route::put('/autoact/{autoact}', [\App\Http\Controllers\Admin\AutoactController::class, 'update'])->name('autoact.update');
|
|
|
|
|
|
Route::delete('/autoact/{autoact}', [\App\Http\Controllers\Admin\AutoactController::class, 'destroy'])->name('autoact.destroy');
|
|
|
|
|
|
Route::post('/autoact/{autoact}/toggle', [\App\Http\Controllers\Admin\AutoactController::class, 'toggle'])->name('autoact.toggle');
|
|
|
|
|
|
|
|
|
|
|
|
// VIP 会员等级(含新增/编辑/删除)
|
|
|
|
|
|
Route::get('/vip', [\App\Http\Controllers\Admin\VipController::class, 'index'])->name('vip.index');
|
|
|
|
|
|
Route::post('/vip', [\App\Http\Controllers\Admin\VipController::class, 'store'])->name('vip.store');
|
|
|
|
|
|
Route::put('/vip/{vip}', [\App\Http\Controllers\Admin\VipController::class, 'update'])->name('vip.update');
|
|
|
|
|
|
Route::delete('/vip/{vip}', [\App\Http\Controllers\Admin\VipController::class, 'destroy'])->name('vip.destroy');
|
2026-03-01 15:09:33 +08:00
|
|
|
|
|
2026-03-28 17:20:33 +08:00
|
|
|
|
// 全局用户金币/积分流水
|
|
|
|
|
|
Route::get('/currency-logs', [\App\Http\Controllers\Admin\CurrencyLogController::class, 'index'])->name('currency-logs.index');
|
|
|
|
|
|
|
2026-03-01 16:47:34 +08:00
|
|
|
|
// 🛒 商店商品管理(查看/编辑所有 superlevel 可用,新增/删除仅 id=1)
|
|
|
|
|
|
Route::get('/shop', [\App\Http\Controllers\Admin\ShopItemController::class, 'index'])->name('shop.index');
|
|
|
|
|
|
Route::post('/shop', [\App\Http\Controllers\Admin\ShopItemController::class, 'store'])->name('shop.store');
|
|
|
|
|
|
Route::put('/shop/{shopItem}', [\App\Http\Controllers\Admin\ShopItemController::class, 'update'])->name('shop.update');
|
|
|
|
|
|
Route::patch('/shop/{shopItem}/toggle', [\App\Http\Controllers\Admin\ShopItemController::class, 'toggle'])->name('shop.toggle');
|
|
|
|
|
|
Route::delete('/shop/{shopItem}', [\App\Http\Controllers\Admin\ShopItemController::class, 'destroy'])->name('shop.destroy');
|
|
|
|
|
|
|
2026-03-01 15:09:33 +08:00
|
|
|
|
// 💒 婚姻管理(superlevel 及以上)
|
|
|
|
|
|
Route::prefix('marriages')->name('marriages.')->group(function () {
|
|
|
|
|
|
// 总览统计
|
|
|
|
|
|
Route::get('/', [\App\Http\Controllers\Admin\MarriageManagerController::class, 'index'])->name('index');
|
|
|
|
|
|
// 婚姻列表(支持筛选)
|
|
|
|
|
|
Route::get('/list', [\App\Http\Controllers\Admin\MarriageManagerController::class, 'list'])->name('list');
|
|
|
|
|
|
// 求婚记录
|
|
|
|
|
|
Route::get('/proposals', [\App\Http\Controllers\Admin\MarriageManagerController::class, 'proposals'])->name('proposals');
|
|
|
|
|
|
// 婚礼红包记录
|
|
|
|
|
|
Route::get('/ceremonies', [\App\Http\Controllers\Admin\MarriageManagerController::class, 'ceremonies'])->name('ceremonies');
|
|
|
|
|
|
// 红包领取明细
|
|
|
|
|
|
Route::get('/ceremonies/{ceremony}/claims', [\App\Http\Controllers\Admin\MarriageManagerController::class, 'claimDetail'])->name('claim-detail');
|
|
|
|
|
|
// 亲密度日志
|
|
|
|
|
|
Route::get('/intimacy-logs', [\App\Http\Controllers\Admin\MarriageManagerController::class, 'intimacyLogs'])->name('intimacy-logs');
|
|
|
|
|
|
// 参数配置(GET=页面,POST=保存)
|
|
|
|
|
|
Route::get('/configs', [\App\Http\Controllers\Admin\MarriageManagerController::class, 'configs'])->name('configs');
|
|
|
|
|
|
Route::post('/configs', [\App\Http\Controllers\Admin\MarriageManagerController::class, 'updateConfigs'])->name('configs.update');
|
|
|
|
|
|
// 婚礼档位(GET=页面,PUT=保存)
|
|
|
|
|
|
Route::get('/tiers', [\App\Http\Controllers\Admin\MarriageManagerController::class, 'tiers'])->name('tiers');
|
|
|
|
|
|
Route::put('/tiers/{tier}', [\App\Http\Controllers\Admin\MarriageManagerController::class, 'updateTier'])->name('tiers.update');
|
|
|
|
|
|
// 强制离婚
|
|
|
|
|
|
Route::post('/{marriage}/force-dissolve', [\App\Http\Controllers\Admin\MarriageManagerController::class, 'forceDissolve'])->name('force-dissolve');
|
|
|
|
|
|
Route::post('/{marriage}/cancel-proposal', [\App\Http\Controllers\Admin\MarriageManagerController::class, 'cancelProposal'])->name('cancel-proposal');
|
|
|
|
|
|
});
|
2026-03-01 20:06:53 +08:00
|
|
|
|
|
|
|
|
|
|
// 📅 节日福利活动管理
|
|
|
|
|
|
Route::prefix('holiday-events')->name('holiday-events.')->group(function () {
|
|
|
|
|
|
Route::get('/', [\App\Http\Controllers\Admin\HolidayEventController::class, 'index'])->name('index');
|
|
|
|
|
|
Route::get('/create', [\App\Http\Controllers\Admin\HolidayEventController::class, 'create'])->name('create');
|
|
|
|
|
|
Route::post('/', [\App\Http\Controllers\Admin\HolidayEventController::class, 'store'])->name('store');
|
|
|
|
|
|
Route::get('/{holidayEvent}/edit', [\App\Http\Controllers\Admin\HolidayEventController::class, 'edit'])->name('edit');
|
|
|
|
|
|
Route::put('/{holidayEvent}', [\App\Http\Controllers\Admin\HolidayEventController::class, 'update'])->name('update');
|
|
|
|
|
|
Route::post('/{holidayEvent}/toggle', [\App\Http\Controllers\Admin\HolidayEventController::class, 'toggle'])->name('toggle');
|
|
|
|
|
|
Route::post('/{holidayEvent}/trigger-now', [\App\Http\Controllers\Admin\HolidayEventController::class, 'triggerNow'])->name('trigger-now');
|
|
|
|
|
|
Route::delete('/{holidayEvent}', [\App\Http\Controllers\Admin\HolidayEventController::class, 'destroy'])->name('destroy');
|
|
|
|
|
|
});
|
2026-03-01 20:17:18 +08:00
|
|
|
|
|
|
|
|
|
|
// 🎮 游戏管理(开关 + 核心参数配置)
|
|
|
|
|
|
Route::prefix('game-configs')->name('game-configs.')->group(function () {
|
|
|
|
|
|
Route::get('/', [\App\Http\Controllers\Admin\GameConfigController::class, 'index'])->name('index');
|
|
|
|
|
|
Route::post('/{gameConfig}/toggle', [\App\Http\Controllers\Admin\GameConfigController::class, 'toggle'])->name('toggle');
|
|
|
|
|
|
Route::post('/{gameConfig}/params', [\App\Http\Controllers\Admin\GameConfigController::class, 'updateParams'])->name('params');
|
|
|
|
|
|
});
|
2026-03-03 16:46:36 +08:00
|
|
|
|
|
2026-03-03 23:40:31 +08:00
|
|
|
|
// 📊 游戏历史记录查询(各游戏历史 + 实时统计摘要)
|
|
|
|
|
|
Route::prefix('game-history')->name('game-history.')->group(function () {
|
|
|
|
|
|
// 各游戏实时统计摘要(JSON 接口,供游戏管理页 AJAX 加载)
|
|
|
|
|
|
Route::get('/stats', [\App\Http\Controllers\Admin\GameHistoryController::class, 'stats'])->name('stats');
|
|
|
|
|
|
// 百家乐局次历史
|
|
|
|
|
|
Route::get('/baccarat', [\App\Http\Controllers\Admin\GameHistoryController::class, 'baccarat'])->name('baccarat');
|
|
|
|
|
|
Route::get('/baccarat/{round}', [\App\Http\Controllers\Admin\GameHistoryController::class, 'baccaratRound'])->name('baccarat.round');
|
|
|
|
|
|
// 老虎机历史
|
|
|
|
|
|
Route::get('/slot', [\App\Http\Controllers\Admin\GameHistoryController::class, 'slot'])->name('slot');
|
|
|
|
|
|
// 赛马场次历史
|
|
|
|
|
|
Route::get('/horse', [\App\Http\Controllers\Admin\GameHistoryController::class, 'horse'])->name('horse');
|
|
|
|
|
|
Route::get('/horse/{race}', [\App\Http\Controllers\Admin\GameHistoryController::class, 'horseRace'])->name('horse.race');
|
|
|
|
|
|
// 神秘箱子投放历史
|
|
|
|
|
|
Route::get('/mystery-box', [\App\Http\Controllers\Admin\GameHistoryController::class, 'mysteryBox'])->name('mystery-box');
|
|
|
|
|
|
// 神秘占卜历史
|
|
|
|
|
|
Route::get('/fortune', [\App\Http\Controllers\Admin\GameHistoryController::class, 'fortune'])->name('fortune');
|
2026-03-12 08:48:30 +08:00
|
|
|
|
// 彩票场次历史
|
|
|
|
|
|
Route::get('/lottery', [\App\Http\Controllers\Admin\GameHistoryController::class, 'lottery'])->name('lottery');
|
|
|
|
|
|
Route::get('/lottery/{issue}', [\App\Http\Controllers\Admin\GameHistoryController::class, 'lotteryIssue'])->name('lottery.issue');
|
2026-03-12 08:52:33 +08:00
|
|
|
|
// 五子棋历史
|
|
|
|
|
|
Route::get('/gomoku', [\App\Http\Controllers\Admin\GameHistoryController::class, 'gomoku'])->name('gomoku');
|
2026-03-03 23:40:31 +08:00
|
|
|
|
});
|
|
|
|
|
|
|
2026-03-03 19:29:43 +08:00
|
|
|
|
// 📦 神秘箱子:管理员手动投放
|
|
|
|
|
|
Route::post('/mystery-box/drop', [\App\Http\Controllers\Admin\GameConfigController::class, 'dropMysteryBox'])->name('mystery-box.drop');
|
|
|
|
|
|
|
2026-03-04 15:47:09 +08:00
|
|
|
|
// 🎟️ 双色球彩票:管理员手动操作
|
|
|
|
|
|
Route::post('/lottery/open-issue', [\App\Http\Controllers\Admin\GameConfigController::class, 'openLotteryIssue'])->name('lottery.open-issue');
|
|
|
|
|
|
Route::post('/lottery/force-draw', [\App\Http\Controllers\Admin\GameConfigController::class, 'forceLotteryDraw'])->name('lottery.force-draw');
|
|
|
|
|
|
|
2026-03-03 16:46:36 +08:00
|
|
|
|
// 🎣 钓鱼事件管理
|
|
|
|
|
|
Route::prefix('fishing')->name('fishing.')->group(function () {
|
|
|
|
|
|
Route::get('/', [\App\Http\Controllers\Admin\FishingEventController::class, 'index'])->name('index');
|
|
|
|
|
|
Route::post('/', [\App\Http\Controllers\Admin\FishingEventController::class, 'store'])->name('store');
|
|
|
|
|
|
Route::put('/{fishing}', [\App\Http\Controllers\Admin\FishingEventController::class, 'update'])->name('update');
|
|
|
|
|
|
Route::post('/{fishing}/toggle', [\App\Http\Controllers\Admin\FishingEventController::class, 'toggle'])->name('toggle');
|
|
|
|
|
|
Route::delete('/{fishing}', [\App\Http\Controllers\Admin\FishingEventController::class, 'destroy'])->name('destroy');
|
|
|
|
|
|
});
|
2026-02-28 23:44:38 +08:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
// ──────────────────────────────────────────────────────────────
|
|
|
|
|
|
// 层级 2:仅站长(id=1)可进行以下操作
|
|
|
|
|
|
// ──────────────────────────────────────────────────────────────
|
|
|
|
|
|
Route::middleware(['chat.site_owner'])->group(function () {
|
|
|
|
|
|
|
|
|
|
|
|
// 用户编辑 & 删除
|
|
|
|
|
|
Route::put('/users/{user}', [\App\Http\Controllers\Admin\UserManagerController::class, 'update'])->name('users.update');
|
|
|
|
|
|
Route::delete('/users/{user}', [\App\Http\Controllers\Admin\UserManagerController::class, 'destroy'])->name('users.destroy');
|
|
|
|
|
|
|
2026-02-27 09:47:47 +08:00
|
|
|
|
// 发信配置管理
|
|
|
|
|
|
Route::get('/smtp', [\App\Http\Controllers\Admin\SmtpController::class, 'edit'])->name('smtp.edit');
|
|
|
|
|
|
Route::put('/smtp', [\App\Http\Controllers\Admin\SmtpController::class, 'update'])->name('smtp.update');
|
|
|
|
|
|
Route::post('/smtp/test', [\App\Http\Controllers\Admin\SmtpController::class, 'test'])->name('smtp.test');
|
2026-02-26 13:35:38 +08:00
|
|
|
|
|
2026-02-28 23:44:38 +08:00
|
|
|
|
// 部门新增/删除(编辑已在 superlevel 层)
|
|
|
|
|
|
Route::post('/departments', [\App\Http\Controllers\Admin\DepartmentController::class, 'store'])->name('departments.store');
|
|
|
|
|
|
Route::delete('/departments/{department}', [\App\Http\Controllers\Admin\DepartmentController::class, 'destroy'])->name('departments.destroy');
|
2026-02-28 12:49:26 +08:00
|
|
|
|
|
2026-02-28 23:44:38 +08:00
|
|
|
|
// 职务新增/删除(编辑已在 superlevel 层)
|
|
|
|
|
|
Route::post('/positions', [\App\Http\Controllers\Admin\PositionController::class, 'store'])->name('positions.store');
|
|
|
|
|
|
Route::delete('/positions/{position}', [\App\Http\Controllers\Admin\PositionController::class, 'destroy'])->name('positions.destroy');
|
|
|
|
|
|
|
|
|
|
|
|
// AI 厂商配置管理
|
2026-02-27 09:39:26 +08:00
|
|
|
|
Route::get('/ai-providers', [\App\Http\Controllers\Admin\AiProviderController::class, 'index'])->name('ai-providers.index');
|
|
|
|
|
|
Route::post('/ai-providers', [\App\Http\Controllers\Admin\AiProviderController::class, 'store'])->name('ai-providers.store');
|
|
|
|
|
|
Route::put('/ai-providers/{id}', [\App\Http\Controllers\Admin\AiProviderController::class, 'update'])->name('ai-providers.update');
|
|
|
|
|
|
Route::post('/ai-providers/{id}/toggle', [\App\Http\Controllers\Admin\AiProviderController::class, 'toggleEnabled'])->name('ai-providers.toggle');
|
|
|
|
|
|
Route::post('/ai-providers/{id}/default', [\App\Http\Controllers\Admin\AiProviderController::class, 'setDefault'])->name('ai-providers.default');
|
2026-03-06 03:29:13 +08:00
|
|
|
|
Route::post('/ai-providers/{id}/test', [\App\Http\Controllers\Admin\AiProviderController::class, 'testConnection'])->name('ai-providers.test');
|
2026-02-27 09:39:26 +08:00
|
|
|
|
Route::post('/ai-providers/toggle-chatbot', [\App\Http\Controllers\Admin\AiProviderController::class, 'toggleChatBot'])->name('ai-providers.toggle-chatbot');
|
2026-03-26 11:15:11 +08:00
|
|
|
|
Route::post('/ai-providers/update-settings', [\App\Http\Controllers\Admin\AiProviderController::class, 'updateSettings'])->name('ai-providers.update-settings');
|
2026-02-27 09:39:26 +08:00
|
|
|
|
Route::delete('/ai-providers/{id}', [\App\Http\Controllers\Admin\AiProviderController::class, 'destroy'])->name('ai-providers.destroy');
|
2026-02-28 23:44:38 +08:00
|
|
|
|
|
|
|
|
|
|
// 开发日志管理
|
|
|
|
|
|
Route::resource('changelogs', \App\Http\Controllers\Admin\ChangelogController::class)->except(['show']);
|
|
|
|
|
|
|
|
|
|
|
|
// 用户反馈管理
|
|
|
|
|
|
Route::get('/feedback', [\App\Http\Controllers\Admin\FeedbackManagerController::class, 'index'])->name('feedback.index');
|
|
|
|
|
|
Route::put('/feedback/{id}', [\App\Http\Controllers\Admin\FeedbackManagerController::class, 'update'])->name('feedback.update');
|
2026-03-01 14:00:38 +08:00
|
|
|
|
|
|
|
|
|
|
// 禁用用户名管理(永久禁止注册/改名的词语:领导人名称、攻击性词汇等)
|
|
|
|
|
|
Route::get('/forbidden-usernames', [\App\Http\Controllers\Admin\ForbiddenUsernameController::class, 'index'])->name('forbidden-usernames.index');
|
|
|
|
|
|
Route::post('/forbidden-usernames', [\App\Http\Controllers\Admin\ForbiddenUsernameController::class, 'store'])->name('forbidden-usernames.store');
|
2026-03-01 14:04:28 +08:00
|
|
|
|
Route::post('/forbidden-usernames/batch', [\App\Http\Controllers\Admin\ForbiddenUsernameController::class, 'batchStore'])->name('forbidden-usernames.batch');
|
2026-03-01 14:00:38 +08:00
|
|
|
|
Route::put('/forbidden-usernames/{id}', [\App\Http\Controllers\Admin\ForbiddenUsernameController::class, 'update'])->name('forbidden-usernames.update');
|
|
|
|
|
|
Route::delete('/forbidden-usernames/{id}', [\App\Http\Controllers\Admin\ForbiddenUsernameController::class, 'destroy'])->name('forbidden-usernames.destroy');
|
2026-02-27 09:39:26 +08:00
|
|
|
|
});
|
2026-02-26 12:02:00 +08:00
|
|
|
|
});
|
2026-03-12 09:33:38 +08:00
|
|
|
|
|
|
|
|
|
|
// ═══════════════════════════════════════════════════════════════════
|
|
|
|
|
|
// 邀请链接路由 (严格纯数字)
|
|
|
|
|
|
// 必须放在最后以避免与其他如 /admin 路由冲突
|
|
|
|
|
|
// ═══════════════════════════════════════════════════════════════════
|
|
|
|
|
|
Route::get('/{inviter_id}', [\App\Http\Controllers\InviteController::class, 'handle'])
|
|
|
|
|
|
->where('inviter_id', '[0-9]+')
|
|
|
|
|
|
->name('invite.link');
|