lkddi
|
a562ecca72
|
修复聊天室离开播报:显式点击离开按钮时绕过队列防抖,同步发送离开广播,解决本地无队列运行时播报丢失的问题
|
2026-04-02 16:21:35 +08:00 |
|
lkddi
|
4d60893dbe
|
feat(ai): 将小班长升级为完全独立的实体用户并支持随机金币发放及持续在线刷级,设定为女兵人设并使用自定义头像
|
2026-03-26 11:15:11 +08:00 |
|
lkddi
|
0ca028f73d
|
新增赠送金币功能:任意用户可从自己余额赠送金币给他人,成功后聊天室系统传音广播;职务奖励金币移入管理区,删除管理区私信按钮
|
2026-03-18 20:12:17 +08:00 |
|
lkddi
|
ca415cceef
|
欢迎语:加部门职务姓名前缀,点选后自动发送
|
2026-03-17 21:19:38 +08:00 |
|
lkddi
|
35a80279e6
|
feat: 聊天室手机端自适应
- 新增 mobile-drawer.blade.php:手机端浮动按钮 + 工具菜单抽屉 + 名单抽屉(独立维护)
- frame.blade.php:手机端代码改为 @include 引入
- chat.css:添加 @media (max-width: 640px) 响应式样式
- 隐藏桌面端工具条和右侧名单面板
- 浮动按钮样式(位于屏幕中间偏右)
- 抽屉组件从顶部向下展开
- 手机端隐藏房间介绍、输入栏动作/字色/字号/禁音/分屏控件
- 现有 modal 弹窗 max-width 自适应修复
- scripts.blade.php:重构 renderUserList 提取 _renderUserListToContainer
- 修复代码损坏残留,补回 setAction/scrollToBottom/autoScrollEl
|
2026-03-17 17:49:14 +08:00 |
|
lkddi
|
4cf7ef1bd1
|
修复:Alpine.js 改为本地加载,解决部分用户无法访问 CDN 导致 Alpine 未定义的问题
|
2026-03-15 17:08:13 +08:00 |
|
lkddi
|
1c42f05e20
|
feat(chat): 完善五子棋功能,包含AI对战、PvP邀请、断线重连及界面美化
|
2026-03-12 08:35:21 +08:00 |
|
lkddi
|
bfb1a3bca4
|
重构(chat): 聊天室 Partials 第二阶段分类拆分及修复红包弹窗隐藏 Bug
- 完成对 scripts.blade.php 中非核心业务逻辑(钓鱼游戏、AI机器人、系统全局公告)的深度抽象隔离
- 修复抢红包逻辑中 setInterval 缺失时间参数(1000)引发浏览器前端主线程挂起的重度阻塞问题
- 修复 lottery-panel 组件结尾漏写 </div> 导致的连锁级渲染树崩溃(该崩溃导致红包节点被意外当作隐藏后代节点渲染,造成彻底不可见)
- 对相关模板规范代码结构,执行 Laravel Pint 格式化并提交
|
2026-03-09 11:30:11 +08:00 |
|
lkddi
|
4114571040
|
新增:双色球彩票前台 UI(阶段二)
🎟️ lottery-panel.blade.php 彩票面板
- 红球 1~12(12宫格选3)/ 蓝球 1~6(骰子点数选1)
- 购物车机制:可加入多注后一次性购买
- 机选按钮(单注/3注)
- 本期我的购票记录展示(含中奖标记)
- 最近8期历史开奖号码表格
- 规则折叠说明(奖级表格)
- 停售/已开奖状态自动切换
- 内联购票结果提示(3秒自动消失)
🎮 游戏大厅集成
- game-hall 注入 lottery 开关状态
- GAME_HALL_GAMES 追加双色球卡片(动态展示奖池/倒计时/超级期徽章)
- frame.blade.php 引入 lottery-panel
🗺️ 路由 /games/enabled 已含 lottery 键
|
2026-03-04 15:41:57 +08:00 |
|
lkddi
|
f45483bcba
|
功能更新与UI优化:游戏图标移除、用户名片修复、婚礼红包界面重设计
- 移除聊天室右下角浮动游戏图标(占卜、百家乐、赛马、老虎机)
- 用户名片按钮区:修复已婚/已好友时按钮换行问题,统一单行显示
- 婚礼红包弹窗:重设计为喜庆鲜红背景,领取按钮改为圆形米黄样式
- 新增婚礼红包恢复接口(/wedding/pending-envelopes),刷新后自动恢复领取按钮
- 修复 Alpine :style 字符串覆盖静态 style 导致圆形按钮失效的问题
- 撤职后用户等级改为根据经验值重新计算,不再无条件重置为1
- 管理员修改用户经验值后自动重算等级,有职务用户等级锁定
- 娱乐大厅钓鱼游戏按钮直接调用 startFishing() 简化操作流程
- 新增赛马、占卜、百家乐游戏及相关后端逻辑
|
2026-03-03 23:19:59 +08:00 |
|
lkddi
|
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 |
|
lkddi
|
36fbc9982c
|
修复:Alpine.js 改为同步加载,修复 Windows 用户双击名字时 Alpine is not defined 报错
- 移除 defer 属性,确保 Alpine 在 DOM 可交互前完成初始化
- 版本号从模糊 @3.x.x 锁定为 @3.14.8,避免 CDN 解析歧义
|
2026-03-03 17:17:47 +08:00 |
|
lkddi
|
9359184e38
|
新增老虎机游戏:①slot_machine_logs表+模型(8种权重图案/判奖) ②SlotMachineController(扣费/随机/赔付/诅咒/三7全服广播) ③前台面板(三列滚轮动画/逐列停止/赔率说明/历史记录) ④CurrencySource三个枚举
|
2026-03-01 21:00:21 +08:00 |
|
lkddi
|
ff28775635
|
新增百家乐游戏:①数据库表+模型 ②OpenBaccaratRoundJob开局(广播+公屏) ③CloseBaccaratRoundJob结算(摇骰+赔付+CAS防并发) ④BaccaratController下注接口 ⑤前端弹窗(倒计时/骰子动画/历史趋势) ⑥调度器每分钟检查开局 ⑦GameConfig管控开关
|
2026-03-01 20:25:09 +08:00 |
|
lkddi
|
c5fe9faf94
|
新增节日福利系统:①数据库表+模型 ②TriggerHolidayEventJob队列任务(在线用户筛选/金额分配/WebSocket广播) ③后台管理页面(列表/创建/手动触发) ④前台领取弹窗+WebSocket监听 ⑤定时调度每分钟扫描 ⑥CurrencySource补充HOLIDAY_BONUS
|
2026-03-01 20:06:53 +08:00 |
|
lkddi
|
84a4b42f31
|
离婚流程全面升级:①发起方专属确认弹窗(含对方拒绝后果+魅力/金币惩罚实时值)②被申请方三选弹窗(同意/不同意/稍后)③不同意=强制离婚申请人赔一半金币④所有惩罚数值从后台实时查询
|
2026-03-01 19:02:43 +08:00 |
|
lkddi
|
d7c6e0e7a8
|
变更:求婚及离婚弹窗在有效期内重新刷新必现,并移除全局提示框的点击背景蒙层关闭功能强制操作
|
2026-03-01 18:08:50 +08:00 |
|
lkddi
|
9ccc0b379d
|
优化:求婚前提示最低婚礼费用并检查金币余额
点击「送出求婚」前弹出确认弹窗:
💍 确认向【XXX】发出求婚吗?
📋 婚礼费用说明:
• 婚礼最低费用:🪙 5,888 金币
• 您当前金币:🪙 XXX 金币
⚠️ 戒指一旦送出即消耗,对方拒绝则戒指遗失。
金币不足时:直接拦截并弹 alert 说明,不发出请求
金币充足时:需确认后才发出求婚请求
同时在 chatContext 注入 userJjb 和 minWeddingCost
|
2026-03-01 17:19:27 +08:00 |
|
lkddi
|
e0c15b437e
|
修复:求婚按钮异性判断 - 统一 sex 字段格式
根因:sex 字段数据库存整数(0/1/2),但前后端判断混用了
字符串('男'/'女')导致比较永远错误。
修复三处:
1. UserController::show() - sex 返回统一转字符串(1→'男' 2→'女' 其他→'')
2. frame.blade.php - chatContext.userSex 注入时同样转字符串
3. MarriageService::propose() - 后端性别校验改用整数(1/2)比较
逻辑链路:
- 未设置性别(sex=0) → '' → x-show && userInfo.sex 为'' falsy → 按钮隐藏 ✓
- 同性(如两个男) → '男'==='男' → !== 为false → 按钮隐藏 ✓
- 异性(男+女) → '男'!=='女' → 按钮显示 ✓
|
2026-03-01 16:04:32 +08:00 |
|
lkddi
|
e20f94fe17
|
修复:求婚限制异性(前端隐藏按钮 + 后端拦截校验)
前端(user-actions.blade.php):
- 求婚按钮增加三重条件:对方未婚 + 双方性别均已填写 + 性别不同
后端(MarriageService::propose):
- 增加异性校验:两方性别必须为「男/女」且不同
- 报错:只有男女双方才能互相求婚
frame.blade.php:
- chatContext 注入 userSex(当前用户性别)供前端判断
|
2026-03-01 15:34:36 +08:00 |
|
lkddi
|
877fd1935f
|
功能:婚姻系统第12步(前端交互)
chat.js:
- 监听婚姻全局广播(MarriageAccepted/Divorced/WeddingCelebration)
- initMarriagePrivateChannel() 监听私人频道
(求婚/拒绝/过期/离婚申请/红包领取)
frame.blade.php:
- chatContext.marriage 注入所有婚姻 API URL
- 引入 marriage-modals.blade.php 弹窗组件
marriage-modals.blade.php(新建):
- 求婚弹窗(选戒指→求婚)
- 收到求婚弹窗(接受/拒绝)
- 结婚成功公告弹窗(可跳转婚礼设置)
- 婚礼设置弹窗(档位/支付方式/立即OR定时)
- 婚礼红包领取弹窗
- 所有 WebSocket 事件处理
user-actions.blade.php:
- 名片加「💍 求婚」按钮(对方未婚时)
- 名片加「💑 已婚状态」标签(对方已婚时)
- fetchUser 同步拉取对方婚姻状态
MarriageController:
- targetStatus 返回增加 status/partner_name/marriage_id
- myRings 返回增加 status/intimacy_bonus/charm_bonus
|
2026-03-01 15:31:07 +08:00 |
|
lkddi
|
1d7aa636a0
|
功能:4种全屏特效增加 Web Audio API 实时合成音效
新建 public/js/effects/effect-sounds.js:
- 雷电:低频白噪声爆裂 + 雷鸣渐衰(10次,与视觉同步)
- 烟花:发射滑音(200→700Hz)+ 带通噪声爆炸(9轮)
- 下雨:双层带通白噪声(1200Hz+3500Hz)持续淡入淡出
- 下雪:4000Hz+高频风声 + 五声音阶轻柔铃音(5次随机)
- 所有音效纯 Web Audio API 合成,无外部音频文件
- 旧 AudioContext 若被 suspended 自动 resume
effect-manager.js:
- play() 调用 EffectSounds.play(type) 同步触发音效
- _cleanup() 调用 EffectSounds.stop() 兜底停止
frame.blade.php:effect-sounds.js 在 effect-manager 前引入
|
2026-03-01 13:07:36 +08:00 |
|
lkddi
|
3d7b86f06d
|
功能:奖励发放聊天室公告 + 右下角 Toast 通知卡片
后端(AdminCommandController::reward):
- 新增聊天室公开公告消息(系统公告,所有在场用户可见)
- 接收者私信附带 toast_notification 字段触发前端小卡片
- 公告文案:「🪙 [职务人] 向 [目标] 发放了 [N] 枚奖励金币!」
前端:
- 新建 chat/partials/toast-notification.blade.php:
全局右下角 Toast 组件,window.chatToast.show() API
支持 title/message/icon/color/duration/action 配置
多条 Toast 从右下角向上堆叠,独立计时、独立关闭
- chat:message 事件监听中检测 toast_notification 字段,
自动弹出右下角通知卡片(仅接收方可见)
- showFriendToast 迁移至 window.chatToast.show(),
删除 80 行旧实现,代码量净减
- frame.blade.php 引入新 partial
DEVELOPMENT.md:
- 新增 §7.9 chatToast 完整文档(API、使用场景、迁移说明)
- 原 chatBanner 章节编号改为 §7.10
|
2026-03-01 12:15:18 +08:00 |
|
lkddi
|
21cabb08c9
|
功能:奖励金币改为独立弹窗(展示额度信息)
- 点击「送金币」按钮打开独立弹窗,不再内联在用户名片中
- 弹窗展示 4 格额度信息:单次上限、单日上限、今日已发、剩余额度
- 新增 GET /command/reward-quota 接口(rewardQuota 方法)
返回当前操作人实时额度,超管返回全部不限
- 发放成功后页面内实时更新今日已发/剩余额度,无需刷新
- 移除原内联奖励面板,action 改为调用全局 openRewardModal()
|
2026-03-01 11:50:12 +08:00 |
|
lkddi
|
3d30d7e811
|
功能:id=1 超管无需职务即可发放奖励金币
前端(frame.blade.php):
- Auth::id()===1 时 myMaxReward=-1(不限),送金币按钮始终显示
后端(AdminCommandController::reward):
- isSuperAdmin=true 时跳过职务检查和①②③④限额校验
- 全局接收次数⑤对超管同样生效(防止刷奖励)
- 履职记录 user_position_id 允许 null(超管无职务时)
- 发放备注改用 positionName 变量(超管显示「超级管理员」)
顺带修复:②操作人单日累计统计之前误查 target_user_id,
已改为正确的 user_id(操作人自己今日已发总额)
|
2026-03-01 11:43:51 +08:00 |
|
lkddi
|
8dcf23d7e4
|
修复:单次上限三态逻辑(null=不限/-1=不限/0=禁止/正整数=有上限)
frame.blade.php:
- max_reward=null → myMaxReward=-1(不限,有权限)
- max_reward=0 → myMaxReward=0(禁止发放)
- max_reward=N → myMaxReward=N(有具体上限)
user-actions.blade.php:
- 按钮显示条件:myMaxReward !== 0(-1 和正整数都显示)
- 面板上限文字:-1 显示「不限」,正整数显示具体数值
- sendReward 校验:0=禁止阻断,-1=不限跳过上限校验,N=有上限
- 输入框 :max:-1 时上限 999999(实际不限),N 时上限 N
|
2026-03-01 11:39:28 +08:00 |
|
lkddi
|
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 |
|
lkddi
|
7bae5e56ff
|
修复:私有频道改用数字 ID,解决中文用户名导致 Pusher 频道名非法
错误原因:Pusher 频道名只允许 [a-zA-Z0-9_\-=@,.],
中文用户名(如「超级舞魅」)用于 private-user.{username} 导致
PusherException: Invalid channel name。
修复方案(改用数字 ID):
- FriendAdded/FriendRemoved 构造加 toUserId 参数
- broadcastOn() 改为 PrivateChannel('user.' . $toUserId)
- FriendController 传入 $target->id / $targetUser->id
- channels.php 鉴权改为 'user.{id}',核对 $user->id 数字相等
- frame.blade.php chatContext 加 userId
- scripts.blade.php Echo.private 改用 userId 订阅
|
2026-03-01 01:41:04 +08:00 |
|
lkddi
|
7ec0904c5c
|
重构:全局自定义弹窗系统 window.chatDialog
- 新增 chat/partials/global-dialog.blade.php(全局弹窗 HTML + JS)
- 提供 chatDialog.alert() 和 chatDialog.confirm() 两个异步 API
- Alpine.js userCardComponent 的 $alert/$confirm 代理到全局 API
- toolbar 离开按钮统一改用 chatDialog.confirm(),移除独立 leave-confirm-modal
- 支持动态标题颜色、淡入动画,兼容 Chrome/Edge/Firefox
|
2026-03-01 00:34:11 +08:00 |
|
lkddi
|
5f30220609
|
feat: 任命/撤销通知系统 + 用户名片UI优化
- 任命/撤销事件增加 type 字段区分类型
- 任命:全屏礼花 + 紫色弹窗 + 紫色系统消息
- 撤销:灰色弹窗 + 灰色系统消息,无礼花
- 消息分发:操作者/被操作者显示在私聊面板,其他人显示在公屏
- 系统消息加随机鼓励语(各5条轮换)
- ChatStateService 修复 Redis key 前缀扫描问题(getAllActiveRoomIds)
- 用户名片折叠优化:管理员视野、职务履历均可折叠
- 管理操作 + 职务操作合并为「🔧 管理操作」折叠区
- 悄悄话改为「🎁 送礼物」按钮,礼物面板内联展开
|
2026-02-28 23:44:38 +08:00 |
|
lkddi
|
28d402d204
|
修复:重写本地清屏逻辑,使用 localStorage 记录拉取游标,避免进房带历史功能导致清屏失效
|
2026-02-28 11:20:34 +08:00 |
|
lkddi
|
9a98bdfbe6
|
修复:聊天室初次加载时附带历史消息,解决因网络延迟错失入场欢迎语的问题
|
2026-02-28 11:17:09 +08:00 |
|
lkddi
|
4ef95eaa27
|
新增:新人首次入住聊天室大礼包自动发放功能(6666金币 + 满场烟花 + 公屏欢迎)
|
2026-02-27 17:21:33 +08:00 |
|
lkddi
|
7fb86bfe21
|
Feat: 商店功能完整实现(单次特效卡888/周卡8888/改名卡5000,含购买、周卡覆盖、改名黑名单)
|
2026-02-27 15:57:12 +08:00 |
|
lkddi
|
4da2d19b1f
|
Feat: 新增下雪特效,加强烟花/下雨在浅色背景的显色(发光粒子+深色雨线)
|
2026-02-27 14:22:13 +08:00 |
|
lkddi
|
709e0d4975
|
Feat: 实现全屏特效系统(烟花/下雨/雷电),管理员一键触发全房间广播
|
2026-02-27 14:14:35 +08:00 |
|
lkddi
|
74c4a6f11c
|
重构:将头像弹窗和设置弹窗迁移到 toolbar.blade.php
- 头像选择弹窗、个人设置弹窗、savePassword/saveSettings JS 移入 toolbar
- frame.blade.php 从 298 行减至约 100 行,只保留框架结构
- 按钮和弹窗集中在同一文件,职责清晰
|
2026-02-27 00:24:21 +08:00 |
|
lkddi
|
cc5cd680f1
|
重构:将用户名片弹窗完整迁移到 user-actions.blade.php
- 从 frame.blade.php 中移除 276 行用户名片弹窗代码
- 全部整合到 user-actions.blade.php(全局函数 + Alpine 组件 + 弹窗 HTML)
- frame.blade.php 减负至约 300 行,结构更清晰
- 所有用户交互逻辑集中管理:单击切换目标、双击名片弹窗、管理操作
|
2026-02-27 00:20:49 +08:00 |
|
lkddi
|
bf6f378613
|
重构:抽取 switchTarget/openUserCard 到独立文件 user-actions.blade.php
- 新增 chat/partials/user-actions.blade.php 作为用户交互全局函数
- 从 scripts.blade.php 中移除 switchTarget、openUserCard、showUserInfoInSay2
- frame.blade.php 在 scripts 之前引入 user-actions
- 代码职责更清晰,方便维护
|
2026-02-27 00:17:32 +08:00 |
|
lkddi
|
fc09a6b895
|
修复:loadWhispers 加 Accept: application/json header
- 确保控制器返回 JSON 而不是 HTML 视图
- 解决名片弹窗查看私聊报网络异常的问题
|
2026-02-27 00:07:36 +08:00 |
|
lkddi
|
bfd90ca882
|
统一:所有图片后缀从 .GIF 改为 .gif
- headface 目录 371 个文件重命名为小写后缀
- 代码中所有 .GIF 引用改为 .gif(User.php/AuthController/channels.php/frame.blade/scripts.blade)
- 新增迁移:将 users 表 usersf 列中的 .GIF 批量替换为 .gif
- 解决 Linux 大小写敏感导致图片加载失败的问题
|
2026-02-26 23:27:35 +08:00 |
|
lkddi
|
bc80c42fa3
|
修复:sex 字段类型统一为整数(0=保密 1=男 2=女)
- 生产库 sex 列为 int,之前错误传入中文字符串
- AuthController 注册时直接保存整数
- UpdateProfileRequest 验证改为 in:0,1,2
- 设置弹窗 select value 改为整数
|
2026-02-26 22:57:30 +08:00 |
|
lkddi
|
7126d844dc
|
修复:设置弹窗保存无提示 - 用 @json() 替代直接引号嵌入避免 JS 语法错误
|
2026-02-26 22:53:20 +08:00 |
|
lkddi
|
c38a53fa74
|
功能:注册保存性别 + 聊天室个人设置弹窗
- 登录表单的性别选择(bSex)在注册时保存到数据库(男/女/保密)
- 新增 question/answer 密保字段迁移(hasColumn 安全检查)
- User 模型 fillable 增加 sign/question/answer
- UpdateProfileRequest 增加 email/question/answer 验证
- 聊天室工具栏新增设置按钮
- 设置弹窗包含:修改密码、性别、邮箱、密保问题
|
2026-02-26 22:50:35 +08:00 |
|
lkddi
|
ba1c94e0f7
|
优化:管理操作按等级独立显示,查看私信仅站长可用
- 新增 level_warn(警告等级) 和 level_freeze(冻结等级) 系统参数
- AdminCommandController 各操作使用独立等级检查
- 弹窗各按钮按 sysparam 等级条件独立显示/隐藏
- 查看私信(🔍)仅 superlevel 站长可见
- 后台系统参数可配置各操作所需等级
|
2026-02-26 22:38:33 +08:00 |
|
lkddi
|
928e613b1b
|
优化:查看私信按钮移入管理操作列表,取消独立站长操作区
|
2026-02-26 22:33:10 +08:00 |
|
lkddi
|
14c4effefa
|
新增:管理员命令系统(警告/踢出/禁言/冻结/查看私信/站长公屏)
- 新建 AdminCommandController 处理6个管理操作命令
- 注册管理员命令路由 /command/*
- 更新 UserKicked 事件增加原因字段
- 更新 UserMuted 事件支持自定义提示消息
- 重构用户名片弹窗管理面板:警告/踢出/禁言/冻结按钮
- 站长专属:查看私信记录、📢公屏讲话按钮
- 被踢出时显示踢出原因
|
2026-02-26 22:27:49 +08:00 |
|
lkddi
|
fd3214eaff
|
功能:VIP 赞助会员系统
- 新建 vip_levels 表(名称、图标、颜色、经验/金币倍率、专属进入/离开模板)
- 默认4个等级种子:白银🥈(×1.5)、黄金🥇(×2.0)、钻石💎(×3.0)、至尊👑(×5.0)
- 后台 VIP 等级 CRUD 管理(新增/编辑/删除,配置模板和倍率)
- 后台用户编辑弹窗支持设置 VIP 等级和到期时间
- ChatController 心跳经验按 VIP 倍率加成
- FishingController 正向奖励按 VIP 倍率加成(负面惩罚不变)
- 在线名单显示 VIP 图标和管理员🛡️标识
- VIP 用户进入/离开使用专属颜色和标题
- 后台侧栏新增「👑 VIP 会员等级」入口
|
2026-02-26 21:30:07 +08:00 |
|
lkddi
|
ea06328885
|
功能:字体颜色持久化、等级体系升级至99级、钓鱼小游戏、补充系统参数
- 字体颜色:s_color 改为 varchar,发消息时保存颜色,进入聊天室自动恢复
- 等级体系:maxlevel 15→99,superlevel 16→100,99级经验阶梯(幂次曲线)
- 管理权限等级按比例调整:禁言50、踢人60、设公告60、封号80、封IP90
- 钓鱼小游戏:FishingController(抛竿扣金币+收竿随机结果+广播)
- 补充6个缺失的 sysparam 参数 + 4个钓鱼参数
- 用户列表点击用户名后自动聚焦输入框
- Pint 格式化
|
2026-02-26 21:10:34 +08:00 |
|
lkddi
|
d884853968
|
修复:排行榜/留言板缺失布局、退出登录跳转、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 构建配置
- 新增验证码配置文件
|
2026-02-26 14:57:24 +08:00 |
|