Commit Graph

62 Commits

Author SHA1 Message Date
c8ebbc750e 百家乐后台统计:新增会员输掉金币总数卡片 2026-03-17 20:35:15 +08:00
91597e6b2c 修复:彩票/五子棋广播消息中用户名支持单击双击交互
- 修复彩票购买明细页「中奖等级」列始终显示「等待开奖」的问题
  原因:判断条件误用了不存在的 'drawn' 状态,已改为 'settled'

- 系统传音广播消息中的【用户名】现在支持单击(切换发言对象)
  和双击(查看名片),与普通消息行为一致

- 新增 isGameLabel() 函数,通过游戏名前缀匹配 + 含空格检测,
  防止【五子棋】【双色球 第N期 开奖】等标签被误识别为用户名
2026-03-16 15:43:27 +08:00
78564e2a1d feat: 增加自定义头像上传、自动压缩与自动清理功能,统一全站头像路径读取逻辑 2026-03-12 15:26:54 +08:00
d827c8a1df fix: 修复后台求婚记录列表未显示已成功和已离婚记录的问题 2026-03-12 12:33:28 +08:00
4606888b0c fix(chat): 修正双色球明细花费显示为 0 的问题 2026-03-12 09:00:48 +08:00
a14761c498 fix(chat): 修正彩票视图中显示期号与号码球的对应字段名 2026-03-12 08:58:42 +08:00
289b79affe feat(chat): 增加五子棋的后台历史记录查阅面板与统计展示 2026-03-12 08:52:33 +08:00
a6b0c24b66 fix(chat): 修正彩票历史记录及明细页中 prize_pool / tickets_count 引用的字段名错误 2026-03-12 08:50:23 +08:00
9e1e5fb7db feat(chat): 完善后台彩票游戏的历史总览、期号列表及单期购买明细页面 2026-03-12 08:48:30 +08:00
1c42f05e20 feat(chat): 完善五子棋功能,包含AI对战、PvP邀请、断线重连及界面美化 2026-03-12 08:35:21 +08:00
318eb6f234 新增:AI 接口连通性测试功能;修复:Ollama 超时问题
- 后台 AI 厂商列表新增「 测试」按钮,实时验证接口连通性
- 显示响应耗时(含冷启动)和模型返回内容
- AiChatService 请求超时从 30s 调整为 120s(兼容 Ollama 本地冷启动)
- 测试接口超时设为 60s
2026-03-06 03:29:13 +08:00
b13861c869 新增:双色球彩票后台管理(阶段三)
🎛️ 后台游戏配置页
  - lottery 参数标签完整配置(14个参数分组展示)
    开奖时间/购票限制/奖池分配/固定小奖/超级期
  - 双色球专属手动操作区(仿神秘箱子风格)
     当前期次状态展示(实时加载)
     手动开新期(含确认弹窗)
     强制立即开奖(含二次确认防误触)

🔌 后台接口
  - POST /admin/lottery/open-issue  手动开期
  - POST /admin/lottery/force-draw  强制开奖
  - GameConfigController 新增两个 JsonResponse 方法

📋 全局开关
  - 与所有现有游戏一致,后台 toggle 即时生效(60s缓存刷新)
  - 默认关闭,管理员开启后调度器自动接管
2026-03-04 15:47:09 +08:00
040dbdef3c 优化:全站金币图标由 🪙(银灰色)统一替换为 💰(金黄色)
🪙 在多数平台/字体上渲染为银灰色,与「金币」语义不符;
💰 各平台均渲染为金黄色,更直观传达金币概念。

涉及文件(43处):
- app/Jobs:百家乐、赛马结算广播
- app/Http/Controllers:管理员命令、红包、老虎机、神秘箱子
- app/Listeners
- resources/views:聊天室各游戏面板、商店、toolbar、后台页面等
2026-03-04 15:00:02 +08:00
b62a9f6240 功能:后台游戏历史记录查询中心 + 游戏管理页实时统计
- 新增 GameHistoryController,提供各游戏历史记录查询接口
  - 百家乐:局次列表 + 单局下注明细(含结果分布统计)
  - 老虎机:转动记录含图案分布,支持结果类型/玩家名筛选
  - 赛马:场次列表 + 单场下注明细(含马匹信息展示)
  - 神秘箱子:投放/领取历史,支持箱子类型/领取状态筛选
  - 神秘占卜:签文等级分布统计 + 历史记录,支持等级/玩家名筛选
- 新增 /admin/game-history/ 路由组(stats + 各游戏历史 + 单局详情共9条路由)
- 游戏管理页(/admin/game-configs)优化:
  - 每个游戏卡片新增「📋 历史记录」直达按钮
  - 新增「📊 加载实时统计」按钮,AJAX 异步拉取并展示各游戏汇总卡片
- 更新 GAMES_TODO.md,标记通用待办已完成
2026-03-03 23:40:31 +08:00
602dcd7cf1 feat: 神秘箱子系统完整实现 + 婚姻状态弹窗 + 工具栏优化
## 新功能
- 神秘箱子系统(MysteryBox)完整实现:
  - 新增 MysteryBox / MysteryBoxClaim 模型及迁移文件
  - DropMysteryBoxJob / ExpireMysteryBoxJob 队列作业
  - MysteryBoxController(/mystery-box/status + /mystery-box/claim)
  - 支持三种类型:普通箱(500~2000金)/ 稀有箱(5000~20000金)/ 黑化箱(陷阱扣200~1000金)
  - 调度器自动投放 + 管理员手动投放
  - CurrencySource 新增 MYSTERY_BOX / MYSTERY_BOX_TRAP 枚举

- 婚姻状态弹窗(工具栏「婚姻」按钮):
  - 工具栏「呼叫」改为「婚姻」,点击打开婚姻状态弹窗
  - 动态渲染三种状态:单身 / 求婚中 / 已婚
  - 被求婚方可直接「答应 / 婉拒」;已婚可申请离婚(含二次确认)

## 优化修复
- frame.blade.php:Alpine.js CDN 补加 defer,修复所有组件初始化报错
- scripts.blade.php:神秘箱子暗号主动拦截(不依赖轮询),领取成功后弹 chatDialog 展示结果,更新金币余额
- MysteryBoxController:claim() 时 change() 补传 room_id 记录来源房间
- 后台游戏管理页(game-configs):投放箱子按钮颜色修复;弹窗替换为 window.adminDialog
- admin/layouts:新增全局 adminDialog 弹窗组件(替代原生 alert/confirm)
- baccarat-panel:FAB 拖动重构为 Alpine.js baccaratFab() 组件,与 slotFab 一致
- GAMES_TODO.md:神秘箱子移入已完成区,补全修复记录
2026-03-03 19:29:43 +08:00
03ec3a9fbb 功能:钓鱼游戏后台管理系统
一、钓鱼全局开关
- 钓鱼纳入 GameConfig(game_key=fishing),游戏管理页可一键开关
- cast() 接口加开关校验,关闭时返回 403 友好提示
- GameConfigSeeder 新增 fishing 配置(含4个参数)

二、钓鱼事件数据库化
- 新建 fishing_events 表(emoji/name/message/exp/jjb/weight/is_active/sort)
- FishingEvent 模型含 rollOne() 加权随机方法
- FishingEventSeeder 填充7条初始事件(经验降低、金币提升)
- FishingController::randomFishResult() 改为读数据库事件

三、钓鱼参数迁移至 GameConfig
- fishing_cost/wait_min/wait_max/cooldown 改为 GameConfig::param() 读取
- 保留 Sysparam fallback 兼容旧数据

四、后台管理页面
- 新建 FishingEventController(CRUD + AJAX toggle)
- 新建 admin/fishing/index.blade.php(事件列表+概率显示+编辑弹窗)
- 侧边栏「游戏管理」下方新增「🎣 钓鱼事件」入口
- 游戏管理视图 gameParamLabels 新增钓鱼参数标签
2026-03-03 16:46:36 +08:00
783afe0677 重构:运维工具迁移为独立页面,侧边栏新增「运维工具」菜单
- 新建 OpsController,承接四项运维操作
- 新建 admin/ops/index.blade.php 独立页面(卡片式布局)
- admin 路由改为 /admin/ops/* -> admin.ops.*
- 侧边栏「AI 厂商配置」下方新增「🛠️ 运维工具」菜单入口
- SystemController 移除运维方法,职责回归纯参数配置
- system/edit 移除内嵌运维块,页面保持简洁
2026-03-03 15:07:36 +08:00
adb9f157e6 功能:后台系统配置页新增「运维工具」面板(仅 id=1 可见)
- 应用缓存清理:config:clear + cache:clear
- 路由缓存清理:route:clear
- 视图缓存清理:view:clear
- 幽灵在线清理:扫描并清空所有房间 Redis 在线名单

所有操作均有确认弹窗,执行结果 Flash 提示反馈。
后端 abort(403) 双重校验,非超管无法访问接口。
2026-03-03 15:00:54 +08:00
a41e701fed 功能:后台房间管理新增「创建房间」功能
- RoomManagerController 新增 store() 方法,含房间名唯一校验、默认值设置
- 路由增加 POST /admin/rooms -> admin.rooms.store
- 视图增加「+ 新增房间」折叠表单(仅 id=1 超管可见)
- 补充 Flash 成功/错误提示展示
- 原有编辑/删除功能保持不变
2026-03-03 14:36:09 +08:00
e21f049643 修复:勤务日榜在线时长统计虚高(142小时)+ UI文字调整
Bug修复:
- closeDutyLog 增加 whereDate 限制,只关闭今日日志,历史遗留记录置0,避免跨天时长被计入榜单
- tickDutyLog(ChatController/AutoSaveExp)找不到今日开放日志时不再盲目新建,避免同一 login_at 产生几十条重复记录后 SUM 叠加导致虚假142小时
- AppointmentService 撤职时 closeDutyLog 同步增加今日/历史遗留区分处理

UI调整:
- 登录页版权文字「飘落的流星」→「流星」
- 后台布局标题「飘落流星 控制台」→「控制台」
- 后台侧边栏移除非超管查看各模块时的「(只读)」标注
2026-03-01 22:55:55 +08:00
6fa42b90d5 功能:站长礼包系统(金币/经验双类型)+ 后台用户编辑权限收紧(仅 id=1 超管)
新增功能:
- 礼包系统:superlevel 站长可发 888 数量 10 份礼包,支持金币/经验双类型
- 发包前三按钮选择(金币礼包 / 经验礼包 / 取消),使用 chatBanner 弹窗
- 聊天室系统公告含「立即抢包」按钮,金币红色/经验紫色配色区分
- WebSocket 实时推送红包弹窗卡片至所有在线用户
- Redis LPOP 原子分发 + 数据库 unique 约束防重领,并发安全
- 弹窗打开自动拉取服务端最新状态(剩余数量/已领/过期实时刷新)
- 新增 GET /red-packet/{id}/status 状态查询接口
- 新增 CurrencySource::RED_PACKET_RECV / RED_PACKET_RECV_EXP 枚举
安全加固:
- 后台用户编辑/强杀按钮仅 id=1 超管可见(前端隐藏 + 后端 403 双重拦截)
2026-03-01 22:20:54 +08:00
8a74bfd639 新增游戏管理系统:①game_configs表+模型(forGame/isEnabled/param静态方法) ②GameConfigSeeder初始化5款游戏参数 ③后台卡片式管理页(开关+参数表单) ④侧边栏菜单「游戏管理」 2026-03-01 20:17:18 +08:00
8c99e1fad7 后台侧边栏菜单新增「节日福利」入口(婚姻管理之后) 2026-03-01 20:08:46 +08:00
c5fe9faf94 新增节日福利系统:①数据库表+模型 ②TriggerHolidayEventJob队列任务(在线用户筛选/金额分配/WebSocket广播) ③后台管理页面(列表/创建/手动触发) ④前台领取弹窗+WebSocket监听 ⑤定时调度每分钟扫描 ⑥CurrencySource补充HOLIDAY_BONUS 2026-03-01 20:06:53 +08:00
759fb6deae 功能:后台新增商店管理页面(站长菜单)
- 路由:GET/POST/PUT/PATCH/DELETE /admin/shop
- 控制器:Admin/ShopItemController(index/store/update/toggle/destroy)
- 视图:admin/shop/index.blade.php
  - 表格展示所有商品(名称/类型色标/价格/有效期/排序/状态)
  - Alpine.js 弹窗新增/编辑(支持全字段)
  - 上下架一键切换(PATCH toggle)
  - 删除按键(含二次确认)
- 侧边栏:VIP 下方新增「🛒 商店管理」链接
- 权限:superlevel 可查看/编辑;id=1 可新增/删除
2026-03-01 16:47:34 +08:00
37af4ba975 修复:婚姻管理总览页 Tailwind v4 动态类无法构建问题
- 「婚礼档位」按钮改用 style 内联颜色(bg-pink-600 未被扫描)
- 快捷入口4张卡片 hover 颜色改为完整静态类名
  (Tailwind v4 无法扫描动态拼接 bg-xx / text-xx)
- npm run build 验证已生效
2026-03-01 15:23:35 +08:00
d2797d5b59 功能:婚姻系统第9步(后台管理页面)
Admin/MarriageManagerController:
- index() 总览统计卡片
- list() 婚姻列表(筛选/强制离婚/取消求婚)
- proposals() 求婚记录
- ceremonies() 婚礼红包记录
- claimDetail() 红包领取明细
- intimacyLogs() 亲密度日志(来源筛选)
- configs/updateConfigs 参数配置(批量保存)
- tiers/updateTier 婚礼档位管理

Views(7个页面):admin/marriages/{index|list|configs|tiers|ceremonies|claim-detail|proposals|intimacy-logs}
侧边栏:superlevel 区块新增「💒 婚姻管理」入口
2026-03-01 15:15:03 +08:00
632a4240c4 功能:禁用词管理支持批量添加
- 新增 ForbiddenUsernameController::batchStore()
  支持换行、逗号、中文逗号、空格多种分隔格式
  自动去重、跳过已存在词语、忽略超长词
  返回成功数/跳过数详细提示
- 新增路由 POST /admin/forbidden-usernames/batch
- View 新增卡片加「单个/批量」两 Tab 切换
  批量 Tab 使用 textarea 多行输入
2026-03-01 14:04:28 +08:00
fc495ccceb 功能:禁用用户名管理(永久禁词列表)
数据库:
- 新增迁移 username_blacklist 表加 type/reason 列
  type: temp(改名30天保留)| permanent(管理员永久禁用)
  reason: 禁用原因备注(最长100字符)

核心逻辑:
- UsernameBlacklist::isBlocked() 同时拦截两种类型
  也包含 isReserved() 兼容旧调用
  增加 scopePermanent()/scopeTemp() 查询作用域
- AuthController 注册时加 isBlocked() 拦截
  禁词/保留期内均不可注册
- ShopService::useRenameCard() 已有 isReserved() 调用
  因已改用 isBlocked() 别名,无需修改

后台:
- ForbiddenUsernameController:index/store/update/destroy
- 路由:/admin/forbidden-usernames(chat.site_owner 中间件)
- 视图:admin/forbidden-usernames/index.blade.php
  新增表单、关键词搜索、分页、行内编辑原因、删除
- 侧边栏加「🚫 禁用用户名」入口(仅站长可见)
2026-03-01 14:00:38 +08:00
2947f0f741 功能:用户列表增加在线状态列,支持点击排序
- UserManagerController 注入 ChatStateService,从 Redis 聚合
  所有活跃房间在线用户名(跨房间去重)
- 排序白名单加入 'online',在线排序用 orderByRaw CASE WHEN 虚拟列
  desc = 在线用户优先显示,asc = 离线用户优先
- 视图表头加「在线 ↕」可排序列(绿色高亮箭头)
- 每行显示绿色实心点+「在线」/灰点+「离线」小徽章
- my-duty-logs 分页已有 paginate(30)+withQueryString+links(),无需改动
2026-03-01 12:54:34 +08:00
0dff79dd51 修复:6列统计卡片改用 inline style,规避 Tailwind 未编译 grid-cols-6 2026-03-01 12:26:23 +08:00
769632dea8 优化:履职记录统计卡片改为固定6列一行,紧凑尺寸 2026-03-01 12:24:15 +08:00
855f169516 功能:后台「我的履职记录」页面
- 侧边栏「我的履职记录」链接,位于「任命管理」上方
- 路由:GET /admin/my-duty-logs → appointments.my-duty-logs
- 控制器:AppointmentController::myDutyLogs()
  支持按操作类型、日期范围筛选,分页,withQueryString()
- 视图:admin/appointments/my-duty-logs.blade.php
  顶部 6 格汇总统计(奖励/踢出/禁言/警告/任命/撤职)
  每张卡片可点击快速按类型筛选
  表格显示:操作时间、类型 Badge、操作对象、所属部门·职务、金币金额、备注
2026-03-01 12:22:13 +08:00
57f515e2eb 修复:去掉多余的 @section 导致的 section 嵌套报错
将 inlinePatch script 块迁移回 @section('content') 内部,
彻底移除 @push/@endpush/@section('scripts') 等无效指令。

根本原因:admin layout 无 @yield('scripts'),在 @endsection 后
再开 @push 或 @section 会触发 'Cannot end a section' 异常。
2026-03-01 11:30:23 +08:00
89d93c92ed 功能:职务列表内联编辑 + 全局奖励配置自动保存
职务列表三列内联编辑(失焦/回车自动保存,无需打开编辑弹窗):
- 人数上限:PATCH max_persons
- 单次上限:PATCH max_reward
- 单日上限:PATCH daily_reward_limit
保存成功显示短暂绿色 ✓,失败显示红色错误提示

全局奖励接收次数配置改为 AJAX 自动保存,失焦/回车触发,
无需保存按钮(原表单已移除)

新增接口:
- PATCH /admin/positions/{position}/patch(quickPatch)
- POST  /admin/positions/reward-config(saveRewardConfig,兼容 JSON + 重定向)
2026-03-01 11:28:15 +08:00
baaa7087b0 功能:全局奖励接收次数上限(职务管理页配置)
新增全局 sysparam 配置 reward_recipient_daily_max:
- 控制每位用户单日内从所有职务持有者处累计接收奖励的最高次数
- 0 = 不限制

后端变更:
- PositionController::saveRewardConfig() 保存配置
- POST admin/positions/reward-config 路由
- AdminCommandController::reward() 新增第④层校验:
  全局次数上限(优先级低于职务级别的 recipient_daily_limit)

视图变更:
- 职务管理页顶部加橙色配置卡片(行内表单,即改即存)
- 显示当前全局配置值
2026-03-01 11:22:02 +08:00
a145c6fc0a 修复+改进:职务奖励次数上限和后台列表展示
修复:
- recipient_daily_limit 统计逻辑修正:移除 user_id 过滤,
  改为统计今日所有职务持有者对同一接收者的累计发放次数
  (上限含义:该用户今日最多从所有职务人员处收到 N 次奖励)

改进:
- 后台职务列表新增「单日上限」列显示 daily_reward_limit
- 「奖励上限」列改名为「单次上限」更准确
- 两列均支持 null(不限)/ 0(禁止)/ 数值 三种状态区分显示
2026-03-01 11:16:22 +08:00
41d4acdd72 修复:职务编辑表单中 0 值被 || '' 误转为空字符串
openEdit() 中三个奖励字段从 OR 运算符改为显式 null 检查:
- max_reward: pos.max_reward !== null ...
- daily_reward_limit 同上
- recipient_daily_limit 同上
- max_persons 改用 JS ?? 空值合并运算符

根本原因:0 在 JS 中是 falsy,pos.max_reward || '' 会将 0 变成 '',
提交到后端后 nullable 规则将空字符串解析为 null 覆盖掉用户的 0 设置。
2026-03-01 11:11:57 +08:00
ff57afe388 功能:职务奖励金币发放系统
数据库:
- positions 新增 daily_reward_limit(单日累计上限)
- positions 新增 recipient_daily_limit(同一接收者每日次数上限)

后端:
- CurrencySource::POSITION_REWARD 新枚举值
- AdminCommandController::reward() 三层限额校验
  ① 单次上限 ② 单日累计上限 ③ 同一接收者每日次数
  写履职记录(PositionAuthorityLog)+ UserCurrencyService
  聊天室悄悄话通知接收者
- POST /command/reward 路由注册

前端(user-actions.blade.php):
- 名片按钮行 2+1 布局(加好友/送礼物/送金币)
- 送金币仅在 myMaxReward>0 时显示(职务持有者)
- 内联奖励金币面板:金额输入 + 确认发放 + 说明文字
- sendReward() 前端校验 + API 调用 + chatDialog 反馈

后台(positions/index):
- 编辑表单新增两个奖励限额字段
- PositionController 验证规则同步更新
2026-03-01 11:09:29 +08:00
5f30220609 feat: 任命/撤销通知系统 + 用户名片UI优化
- 任命/撤销事件增加 type 字段区分类型
- 任命:全屏礼花 + 紫色弹窗 + 紫色系统消息
- 撤销:灰色弹窗 + 灰色系统消息,无礼花
- 消息分发:操作者/被操作者显示在私聊面板,其他人显示在公屏
- 系统消息加随机鼓励语(各5条轮换)
- ChatStateService 修复 Redis key 前缀扫描问题(getAllActiveRoomIds)
- 用户名片折叠优化:管理员视野、职务履历均可折叠
- 管理操作 + 职务操作合并为「🔧 管理操作」折叠区
- 悄悄话改为「🎁 送礼物」按钮,礼物面板内联展开
2026-02-28 23:44:38 +08:00
aeffb8e4d4 整理:合并零散迁移文件,36个简化为24个纯建表迁移
- users 表:吸收 s_color类型变更/sign/question/answer/vip_level_id/has_received_new_gift
- rooms 表:吸收 visit_num、announcement
- sysparam 表:吸收全部 seed(99级经验/权限等级/钓鱼/魅力/排行榜,直接写最终值)
- 新增 create_shop_tables(shop_items+user_purchases+username_blacklist+默认商品)
- 新增 create_user_currency_logs_table(积分流水表含完整索引)
- 删除 14 个已吸收的 add_column / seed 零散迁移
2026-02-28 14:03:04 +08:00
27b52da0e5 修复:积分流水统计页改用后台 admin layout 2026-02-28 13:55:35 +08:00
5233a485eb 功能:后台侧边栏新增「积分流水统计」菜单入口 2026-02-28 13:54:47 +08:00
0662901b1b 修复:后台积分统计页面 layout 改为 layouts.app 2026-02-28 13:41:50 +08:00
0c5e218aa8 功能:新增用户积分流水系统
- 新建 user_currency_logs 流水表 (Migration)
- App\Enums\CurrencySource 来源枚举(可扩展)
- App\Models\UserCurrencyLog 流水模型
- App\Services\UserCurrencyService 统一积分变更服务
- FishingController:抛竿/收竿接入流水记录
- AutoSaveExp:自动存点接入流水记录
- Admin/UserManagerController:管理员调整接入流水记录
- LeaderboardController:新增今日三榜(经验/金币/魅力)+ 个人流水日志页
- Admin/CurrencyStatsController:后台活动统计页
- views:新增个人日志页、后台统计页;排行榜新增今日榜数据传递
- routes:新增个人日志路由 /my/currency-logs、后台路由 /admin/currency-stats
2026-02-28 12:49:26 +08:00
b170724f3f 修复:后台布局移除 Tailwind CDN,改用 Vite 原生编译产物避免控制台警告 2026-02-27 16:50:37 +08:00
8b18c7159f 修复:后台布局文件缺少 csrf-token meta 标签,导致 AJAX 请求取不到 token 报 JS TypeError 拦截发送 2026-02-27 16:49:00 +08:00
aa9a9318f5 重构:将后台编辑用户 AJAX 提交方法移入 Alpine data 组件内部,彻底解决作用域和数据获取问题 2026-02-27 16:47:03 +08:00
2c5d4cedea 修复:后台编辑用户时弹窗里的数据为空(移除了不小心造成的 td x-data 孤立作用域) 2026-02-27 16:44:11 +08:00
39d03d30a8 修复:后台编辑用户弹窗改为直接传 Alpine $data,避免 querySelector 找到错误的 x-data 元素导致网络异常 2026-02-27 16:41:57 +08:00