修复:排行榜/留言板缺失布局、退出登录跳转、WebSocket 配置与部署文档

- 修复 LeaderboardController 查询不存在的 sign 字段导致 500 错误
- 修复 leaderboard/index 和 guestbook/index 引用不存在的 layouts.app 布局
- 将排行榜和留言板改为独立 HTML 页面结构(含 Tailwind CDN)
- 修复退出登录返回 JSON 而非重定向的问题,现在会正确跳转回登录页
- 将 REDIS_CLIENT 从 phpredis 改为 predis(兼容无扩展环境)
- 新增 RoomSeeder 自动创建默认公共大厅房间
- 新增 Nginx 生产环境配置示例(含 WebSocket 反向代理)
- 重写 README.md 为完整的中文部署指南
- 修复 rooms/index 和 chat/frame 中 Alpine.js 语法错误
- 将 chat.js 加入 Vite 构建配置
- 新增验证码配置文件
This commit is contained in:
2026-02-26 14:57:24 +08:00
parent 50fc804402
commit d884853968
19 changed files with 1083 additions and 458 deletions
+4 -4
View File
@@ -69,7 +69,7 @@ class AuthController extends Controller
'first_ip' => $ip,
'last_ip' => $ip,
'user_level' => 1, // 默认普通用户等级
'sex' => '保密', // 默认性别
'sex' => 0, // 默认性别: 0保密 1男 2女
// 如果原表里还有其他必填字段,在这里初始化默认值
]);
@@ -101,9 +101,9 @@ class AuthController extends Controller
}
/**
* 退出登录
* 退出登录,清除会话后跳转回登录首页
*/
public function logout(Request $request): JsonResponse
public function logout(Request $request): \Illuminate\Http\RedirectResponse
{
if (Auth::check()) {
$user = Auth::user();
@@ -116,6 +116,6 @@ class AuthController extends Controller
$request->session()->invalidate();
$request->session()->regenerateToken();
return response()->json(['status' => 'success', 'message' => '已成功退出。']);
return redirect('/')->with('success', '您已成功退出聊天室,欢迎下次再来!');
}
}
@@ -28,7 +28,7 @@ class LeaderboardController extends Controller
// 1. 境界榜 (以 user_level 为尊)
$topLevels = Cache::remember('leaderboard:top_levels', $ttl, function () {
return User::select('id', 'username', 'headface', 'user_level', 'sex', 'sign')
return User::select('id', 'username', 'headface', 'user_level', 'sex')
->where('user_level', '>', 0)
->orderByDesc('user_level')
->orderBy('id')
@@ -38,7 +38,7 @@ class LeaderboardController extends Controller
// 2. 修为榜 (以 exp_num 为尊)
$topExp = Cache::remember('leaderboard:top_exp', $ttl, function () {
return User::select('id', 'username', 'headface', 'exp_num', 'sex', 'user_level', 'sign')
return User::select('id', 'username', 'headface', 'exp_num', 'sex', 'user_level')
->where('exp_num', '>', 0)
->orderByDesc('exp_num')
->orderBy('id')
@@ -48,7 +48,7 @@ class LeaderboardController extends Controller
// 3. 财富榜 (以 jjb-交友币 为尊)
$topWealth = Cache::remember('leaderboard:top_wealth', $ttl, function () {
return User::select('id', 'username', 'headface', 'jjb', 'sex', 'user_level', 'sign')
return User::select('id', 'username', 'headface', 'jjb', 'sex', 'user_level')
->where('jjb', '>', 0)
->orderByDesc('jjb')
->orderBy('id')
@@ -58,7 +58,7 @@ class LeaderboardController extends Controller
// 4. 魅力榜 (以 meili 为尊)
$topCharm = Cache::remember('leaderboard:top_charm', $ttl, function () {
return User::select('id', 'username', 'headface', 'meili', 'sex', 'user_level', 'sign')
return User::select('id', 'username', 'headface', 'meili', 'sex', 'user_level')
->where('meili', '>', 0)
->orderByDesc('meili')
->orderBy('id')
+8 -8
View File
@@ -28,7 +28,7 @@ class RoomController extends Controller
public function index(): View
{
$rooms = Room::with('masterUser')
->orderByDesc('is_system') // 系统房间排在最前面
->orderByDesc('room_keep') // 系统房间排在最前面
->orderByDesc('id')
->get();
@@ -43,10 +43,10 @@ class RoomController extends Controller
$data = $request->validated();
$room = Room::create([
'name' => $data['name'],
'description' => $data['description'] ?? '',
'master' => Auth::user()->username,
'is_system' => false, // 用户自建均为非系统房
'room_name' => $data['name'],
'room_des' => $data['description'] ?? '',
'room_owner' => Auth::user()->username,
'room_keep' => false, // 用户自建均为非系统房
]);
return redirect()->route('rooms.index')->with('success', "聊天室 [{$room->name}] 创建成功!");
@@ -67,8 +67,8 @@ class RoomController extends Controller
$data = $request->validated();
$room->update([
'name' => $data['name'],
'description' => $data['description'] ?? '',
'room_name' => $data['name'],
'room_des' => $data['description'] ?? '',
]);
// 广播房间信息更新 (所有人立即可以在聊天框顶部看到)
@@ -122,7 +122,7 @@ class RoomController extends Controller
return back()->with('error', '该用户不存在,无法转让。');
}
$room->update(['master' => $targetUser->username]);
$room->update(['room_owner' => $targetUser->username]);
return back()->with('success', "房间已成功转让给 [{$targetUser->username}]。");
}