|
|
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 |
|
|
|
476499832f
|
功能:勤务台榜单新增管理操作次数 + 奖励金币次数统计
DutyHallController:
- 新增 position_authority_logs 关联查询
- 统计管理操作次数(warn/kick/mute/banip/other,排除人事任免)
- 统计奖励金币次数及累计金额(action_type=reward)
- 时间范围统一过滤(日/周/月/总)
- 合并两表数据到榜单 Collection
duty-hall/index.blade.php:
- 表格扩展为 6 列:名次、成员、在线时长、登录次数、管理操作、奖励金币
- 奖励金币栏 hover 显示次数+总金额 tooltip
- 移动端显示紧凑卡片(管理/奖励只在 >0 时显示)
- 底部图例说明各列含义
|
2026-03-01 10:51:48 +08:00 |
|
|
|
5a7d1565e5
|
修复:channels.php 移除 int 类型提示,改用强转比较防兼容性问题
int $id 类型提示在某些 PHP 版本下对字符串参数可能失败,
统一改为 (int) 强转比较,与 App.Models.User.{id} 写法一致。
|
2026-03-01 01:54:19 +08:00 |
|
|
|
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 |
|
|
|
a44a9ce242
|
修复:回加好友成功后大卡片自动关闭
quickFriendAction 是 async 函数,await 完成后
检查按钮文字是否为 '✅',1.5 秒后调用 close() 关闭 banner。
|
2026-03-01 01:33:41 +08:00 |
|
|
|
f951ec428d
|
重构:聊天室所有 alert() 改为 window.chatDialog.alert()
scripts.blade.php 全部 21 处原生 alert() 替换:
- 成功类 → chatDialog.alert(..., '提示', '#16a34a')
- 失败/错误类 → chatDialog.alert(..., '操作失败', '#cc4444')
- 网络异常类 → chatDialog.alert(..., '网络异常', '#cc4444')
- 连接断开/踢出 → chatDialog.alert(..., '连接警告', '#b45309')
- 一般提示 → chatDialog.alert(..., '提示', '#336699')
DEVELOPMENT.md 新增 §7.9 window.chatBanner 使用文档
|
2026-03-01 01:32:20 +08:00 |
|
|
|
5c53b8cf2f
|
功能:window.chatBanner 全局大卡片公共组件
前端:
- window.chatBanner.show(options) 全局 API,完全自定义:
icon/title/name/body/sub/gradient/titleColor/autoClose/buttons
- window.chatBanner.close(id) 关闭指定 banner
- showFriendBanner / showAppointmentBanner 均改用 chatBanner 实现
- setupBannerNotification() 监听私有+房间频道的 BannerNotification 事件
后端:
- BannerNotification 事件(ShouldBroadcastNow),支持 user/room 双目标
- BannerBroadcastController(仅超级管理员路由,三层中间件保护)
- 内容字段 strip_tags 净化防 XSS,按钮 action 白名单校验
安全:
- window.chatBanner.show() 被人控制台调用只影响自己,无法推给他人
- HTTP 入口 POST /admin/banner/broadcast 仅超管可访问
|
2026-03-01 01:28:23 +08:00 |
|
|
|
0f0691d037
|
修复:FriendAdded/FriendRemoved 改为 ShouldBroadcastNow
ShouldBroadcast 走队列(异步),不保证及时广播;
ShouldBroadcastNow 不走队列,与 MessageSent 一致,立即推送到 Reverb。
这是大卡弹窗收不到的真实原因。
|
2026-03-01 01:21:33 +08:00 |
|
|
|
7985a9b0d7
|
修复:FriendAdded/FriendRemoved 加 broadcastAs() 修复私有频道事件名不匹配
前端 .listen('.FriendAdded') 匹配的是短名 FriendAdded,
但默认广播名是 App\Events\FriendAdded(全类名),导致监听器永远不触发。
加 broadcastAs() 返回短名后两端匹配,弹窗可正常弹出。
|
2026-03-01 01:13:50 +08:00 |
|
|
|
779179af01
|
功能:好友添加通知改为居中大卡弹窗(同任命公告风格)
FriendAdded:
- 互相好友 → 绿色渐变大卡 + '你们现在互为好友 🎊',5秒自动消失
- 单向添加 → 蓝绿渐变大卡 + [➕ 回加好友] + [稍后再说] 按钮,手动关闭
FriendRemoved:保留右下角 Toast 通知
效果复用 appoint-pop 弹出动画关键帧
|
2026-03-01 01:09:37 +08:00 |
|
|
|
d60a225368
|
修复:好友悄悄话链接 href 出现字面 \'#\' 导致404问题
PHP 双引号字符串里单引号不需要反斜杠转义,
\'#\' 会原样输出 \'#\' 而非 '#',导致 href 跳转到错误 URL。
改为直接写 '#' 即可。
|
2026-03-01 01:05:47 +08:00 |
|
|
|
212f7a0096
|
功能:好友悄悄话内嵌快捷操作链接
后端:
- notifyOnlineUser 生成带内联 <a> 标签的内容
- added 未互相 → 嵌入 '➕ 回加好友' 链接
- removed 互相 → 嵌入 '🗑️ 同步移除' 链接
- 链接调用全局 quickFriendAction(act, username, el)
前端:
- 新增 window.quickFriendAction() 全局函数
- 防重复点击(dataset.done 标记)
- 成功后更新链接文字 '✅ 已回加' / '✅ 已移除',不刷新页面
|
2026-03-01 01:03:10 +08:00 |
|
|
|
cc16f89bbe
|
修复:好友悄悄话文案根据互相状态精确区分
- notifyOnlineUser 加 $mutual 参数
- added + mutual=false → '但你还没有添加对方为好友'
- added + mutual=true → '你们现在互为好友 🎉'
- removed + mutual=true → '你的好友列表中仍保留对方'
- removed + mutual=false → '已将你从他的好友列表移除'
- 删除操作悄悄话改为灰色 (#6b7280),语义更准确
|
2026-03-01 00:59:10 +08:00 |
|
|
|
3c2038e8fe
|
优化:好友通知弹窗根据互相状态显示不同内容
FriendAdded 事件:
- 新增 hasAddedBack 字段(B 是否已回加 A)
- Toast:已互相好友 → '你们现在互为好友 🎉'
- Toast:未回加 → '但你还没有添加对方为好友' + [➕ 回加] 一键操作按钮
FriendRemoved 事件:
- 新增 hadAddedBack 字段(之前是否互相好友)
- Toast:之前互相好友 → 提示 + [🗑️ 同步移除] 一键操作按钮
- Toast:单向好友 → 简单通知,无操作按钮
Toast 改进:
- 右上角 × 关闭按钮
- 快捷操作按钮支持 fetch 直接请求
- 完成后显示结果并自动关闭,延时改为 8 秒
|
2026-03-01 00:54:10 +08:00 |
|
|
|
700ab9def4
|
feat: 好友系统全实现
后端:
- FriendController:add/remove/status/index 四个接口
- FriendAdded / FriendRemoved 广播事件(私有频道)
- channels.php 注册 user.{username} 私有频道鉴权
- routes/web.php 注册好友路由
- ChatController::init() 修复 DutyLog 在 return 后执行的 bug
- ChatController::notifyFriendsOnline() 上线时悄悄话通知好友
前端:
- user-actions:写私信 → 加好友/删好友按钮(动态状态)
- toggleFriend() 方法 + fetchUser 后加载好友状态
- scripts:监听私有频道 FriendAdded/FriendRemoved
- showFriendToast() 右下角浮窗通知(5秒自动消失)
- global-dialog 加 fdSlideIn 动画
|
2026-03-01 00:48:51 +08:00 |
|
|
|
8853d08e5a
|
文档:DEVELOPMENT.md 补充 7.8 全局弹窗系统使用指南
记录 window.chatDialog.alert/confirm 的 API、使用示例、
Alpine.js 组件内的代理用法及颜色速查表,
并声明聊天室内禁止使用浏览器原生弹窗的规范
|
2026-03-01 00:36:54 +08:00 |
|
|
|
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 |
|
|
|
e2ae4b34b3
|
修复:Chrome 离开按钮 confirm 弹窗闪烁 → 自定义 HTML 弹窗
- 移除原生 confirm(),改为自定义 #leave-confirm-modal 弹窗
- 红色渐变标题栏,取消/确定离开两个按钮
- 点击遮罩可关闭,不触发任何浏览器原生对话框机制
|
2026-03-01 00:29:00 +08:00 |
|
|
|
f0cbcfa949
|
修复:Alpine.js userInfo.position_history 初始 undefined 导致 length 报错
- userInfo 初始值加 position_history: [],防止挂载时 undefined.length
- x-text 和 x-if 里加可选链 ?.length ?? 0 双重兜底
|
2026-03-01 00:23:08 +08:00 |
|
|
|
91b569ffd3
|
修复:离开按钮 confirm 弹窗在 Chrome 闪烁消失
将 beforeunload 改为 pagehide 事件:
- pagehide 在页面关闭/刷新时触发,但不会弹原生「离开网站」确认框
- 与原生 confirm() 不产生冲突,Chrome/Edge 行为一致
- leaveRoom() 设 _manualLeave 标记,pagehide 里不重复发 beacon
|
2026-03-01 00:18:46 +08:00 |
|
|
|
0f5b8a4f52
|
修复:Chrome 点击离开时出现原生"离开网站"弹窗闪烁
主动调用 remove 移除 beforeunload 监听后再导航,
Chrome 不再触发原生确认框,Edge 行为不变
|
2026-03-01 00:16:34 +08:00 |
|
|
|
1caaec5601
|
修复:关闭浏览器时 leave 不触发导致勤务日志不结算
- 新增 sendLeaveBeacon(),使用 navigator.sendBeacon 发送 leave 请求
- beforeunload 事件:关闭标签/浏览器/刷新均自动结算
- visibilitychange 事件:切到后台 30 秒后自动结算,切回来取消
- sendBeacon 比 fetch 更可靠,浏览器关闭时也能确保请求发出
|
2026-03-01 00:12:47 +08:00 |
|
|
|
94414057e6
|
修复:User 模型 fillable 缺少 in_time/out_time,导致进房时间静默写入失败
|
2026-03-01 00:10:44 +08:00 |
|
|
|
76fd17c727
|
功能:存点时自动同步在职用户勤务日志
- heartbeat 手动存点:调用 tickDutyLog()
- AutoSaveExp 自动存点:调用 tickDutyLog()
- 逻辑:今日已有开放日志则刷新 duration_seconds,无则新建(login_at 取 in_time 进房时间)
- 修复:TIMESTAMPDIFF 结果用 GREATEST(0, ...) 防 unsigned 溢出
- 修复:database.php MySQL 连接加 timezone=+08:00,与 PHP Asia/Shanghai 时区对齐
|
2026-03-01 00:04:59 +08:00 |
|
|
|
5f30220609
|
feat: 任命/撤销通知系统 + 用户名片UI优化
- 任命/撤销事件增加 type 字段区分类型
- 任命:全屏礼花 + 紫色弹窗 + 紫色系统消息
- 撤销:灰色弹窗 + 灰色系统消息,无礼花
- 消息分发:操作者/被操作者显示在私聊面板,其他人显示在公屏
- 系统消息加随机鼓励语(各5条轮换)
- ChatStateService 修复 Redis key 前缀扫描问题(getAllActiveRoomIds)
- 用户名片折叠优化:管理员视野、职务履历均可折叠
- 管理操作 + 职务操作合并为「🔧 管理操作」折叠区
- 悄悄话改为「🎁 送礼物」按钮,礼物面板内联展开
|
2026-02-28 23:44:38 +08:00 |
|
|
|
a599047cf0
|
文档:恢复原项目参考路径(仅作功能参照,不做数据迁移)
|
2026-02-28 14:14:20 +08:00 |
|
|
|
95dd259913
|
文档:清理旧 ASP/数据导入相关内容,重写注意事项为全新项目视角
|
2026-02-28 14:13:00 +08:00 |
|
|
|
ff097cce3c
|
文档:在 DEVELOPMENT.md 补充积分流水系统完整开发者使用指南
|
2026-02-28 14:06:55 +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 |
|
|
|
7643740eda
|
功能:今日风云榜独立页 /leaderboard/today,导航新增「今日榜」按钮
|
2026-02-28 13:50:51 +08:00 |
|
|
|
0662901b1b
|
修复:后台积分统计页面 layout 改为 layouts.app
|
2026-02-28 13:41:50 +08:00 |
|
|
|
72d23af335
|
功能:ChatController 新人礼包 6666 金币接入积分流水,记录 newbie_bonus 来源
|
2026-02-28 13:34:40 +08:00 |
|
|
|
1eb58ea331
|
功能:排行榜页面新增今日三榜(今日经验/金币/魅力)及个人日志入口
|
2026-02-28 12:50:15 +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 |
|
|
|
3f5d0e9539
|
功能:自动存点通知实现滚动替换,新消息到来时自动删除旧的通知,保持包厢窗口整洁
|
2026-02-28 11:56:42 +08:00 |
|
|
|
ffe35c048d
|
修复:历史消息服务端过滤,只加载与当前用户相关的记录,避免他人私聊和系统通知混入包厢窗
|
2026-02-28 11:54:29 +08:00 |
|
|
|
2219d7e26e
|
修复:增强 Flexbox 布局约束,防止过长的历史消息打破 100vh 将底部输入框挤出屏幕
|
2026-02-28 11:29:56 +08:00 |
|
|
|
0ff64d2737
|
修复:增强 scripts.blade.php 的 JS 健壮性,解决因 DOM 元素缺失导致的执行中断及变量未初始化问题
|
2026-02-28 11:22:18 +08:00 |
|
|
|
28d402d204
|
修复:重写本地清屏逻辑,使用 localStorage 记录拉取游标,避免进房带历史功能导致清屏失效
|
2026-02-28 11:20:34 +08:00 |
|
|
|
9a98bdfbe6
|
修复:聊天室初次加载时附带历史消息,解决因网络延迟错失入场欢迎语的问题
|
2026-02-28 11:17:09 +08:00 |
|
|
|
cb2e962116
|
优化:与AI聊天不再阻塞全局发言锁,允许在AI思考期间继续在公屏聊天
|
2026-02-28 11:12:51 +08:00 |
|
|
|
7bbc4c18d7
|
优化:AI聊天机器人知道对方的名字,并且连接超时不再抛出底层的cURL长代码错误
|
2026-02-27 17:50:08 +08:00 |
|
|
|
e7436e7898
|
修复:与AI聊天或其他特定错误拦截后,发送消息按钮永久失灵的问题
|
2026-02-27 17:45:18 +08:00 |
|
|
|
4ef95eaa27
|
新增:新人首次入住聊天室大礼包自动发放功能(6666金币 + 满场烟花 + 公屏欢迎)
|
2026-02-27 17:21:33 +08:00 |
|
|
|
efc4dfd752
|
修复:聊天室界面的送鱼按钮 Alpine.js 语法错误导致发言被卡住的问题
|
2026-02-27 17:04:12 +08:00 |
|
|
|
3ad67a1610
|
优化:修改单次特效卡的公屏广播文案,避免让大家误以为是赠送了道具卡实体
|
2026-02-27 17:00:26 +08:00 |
|
|
|
4fe3c1eed9
|
修复:商店购买单次特效卡并指定给别人时,购买者自己也必须能看到特效播放
|
2026-02-27 16:56:57 +08:00 |
|
|
|
b170724f3f
|
修复:后台布局移除 Tailwind CDN,改用 Vite 原生编译产物避免控制台警告
|
2026-02-27 16:50:37 +08:00 |
|