feat: 增加发送微信群内自定义公告功能,并优化离线防抖与自我播报过滤机制

- 后台微信机器人增加群内独立公告的分发推送模块
- 聊天室系统引入3秒离线延迟(防抖)防重复播报
- 优化聊天界面消息拉取过滤自身的欢迎或离场广播
- 管理员登录时的烟花特效同步至用户当前的前端显示
This commit is contained in:
2026-04-02 16:07:40 +08:00
parent e36b779a4a
commit fa5e37f003
8 changed files with 300 additions and 136 deletions

View File

@@ -137,4 +137,37 @@
</form>
</div>
</div>
<!-- 发送群内公告/消息 独立模块 -->
<div class="bg-white rounded-xl shadow-sm border border-gray-100 overflow-hidden mt-6">
<div class="p-6 border-b border-gray-100 flex justify-between items-center bg-gray-50">
<div>
<h2 class="text-lg font-bold text-gray-800">发送群内公告 (即时通知)</h2>
<p class="text-xs text-gray-500 mt-1">发出的内容将通过微信机器人直接推送到上方配置的目标微信群。</p>
</div>
</div>
<div class="p-6">
@if($errors->has('announcement_content'))
<div class="mb-4 p-3 bg-red-50 border border-red-200 rounded-lg text-red-700 text-sm">
{{ $errors->first('announcement_content') }}
</div>
@endif
<form action="{{ route('admin.wechat_bot.send_announcement') }}" method="POST">
@csrf
<div class="mb-4">
<label class="block text-sm font-bold text-gray-700 mb-2">公告内容</label>
<textarea name="announcement_content" rows="4" class="w-full border-gray-300 rounded-md shadow-sm p-3 bg-gray-50 border focus:ring-indigo-500 focus:border-indigo-500" placeholder="请输入要发送到微信群内的公告/通知内容...">{{ old('announcement_content') }}</textarea>
</div>
<div class="flex">
<button type="submit" class="px-6 py-2 bg-indigo-600 text-white rounded-md font-bold hover:bg-indigo-700 shadow-sm transition flex items-center">
<svg class="w-5 h-5 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 19l9 2-9-18-9 18 9-2zm0 0v-8"></path></svg>
立即发送公告
</button>
</div>
</form>
</div>
</div>
@endsection

View File

@@ -722,12 +722,7 @@
renderUserList();
// 管理员自己进房时,在本地播放烟花(服务端广播可能在 WS 连上前已发出)
const ctx = window.chatContext;
if (ctx && ctx.userLevel >= ctx.superLevel && typeof EffectManager !== 'undefined') {
// 延迟 800ms 确保页面渲染完成再播特效
setTimeout(() => EffectManager.play('fireworks'), 800);
}
});
// 监听机器人动态开关