Commit Graph

245 Commits (fe69fd7d940920d083632ec22f7e5813f28c9b01)

Author SHA1 Message Date
YunaiV b0dcc7c840 feat(im): 优化免打扰会话未读展示
- 免打扰会话保留头像小红点提示
- 会话预览行展示免打扰未读条数
- 总未读统计继续排除免打扰会话
- 同步 Vue3 + Vben 三端会话项展示
2026-06-19 18:29:31 -07:00
YunaiV a5299ef2e8 fix(im):修复已读补上报字段与群通话竞态
- 将会话已上报读位置字段改为 reportedReadMessageId,避免旧 readMessageId 本地缓存污染跳过判断
- read API 跳过逻辑继续基于已上报读位置,失败后可重新进入会话补上报
- RTC_CALL_END 按 room 移除群通话胶囊,避免旧房间结束事件误删新房间通话
- participantsLoaded 仅在同 room 下继承,避免新房间误跳过参与者补齐
2026-06-19 11:16:42 -07:00
YunaiV b6e13c59c7 feat(im):优化已读上报补偿与群通话探测缓存
- 会话新增 readMessageId,记录已上报到服务端的最大已读消息编号
- readActive 与 WebSocket 自动已读改为基于服务端已上报读位置判断是否跳过接口
- read 接口成功后同步 readMessageId,失败时保留本端已读体验并允许后续重新进入补上报
- 拉取服务端 read 进度时同步更新会话 readMessageId,同时保持本地读位置单调合并
- 群信息新增 activeCallLoaded / activeCallExpired,首登与重连时失效群通话探测缓存
- 群通话胶囊在本地无通话且探测过期时懒加载 getActiveCall,避免离线错过通话后无法发现
- 群通话写入或移除时标记探测已加载,并避免通话探测状态写入 IndexedDB
- 为 IndexedDB DO 类型补充存储结构注释
2026-06-19 11:05:06 -07:00
YunaiV 2172415cad feat(im):优化已读上报、群详情缓存与 RTC 通话状态
- 已读上报增加本地读位置覆盖判断,避免切换会话和当前会话自动已读时重复调用 read 接口
- 标记会话已读时同步推进本地 read 游标并写入 IndexedDB,接口失败仅记录日志
- 缓存私聊对方 maxReadMessageId,并在状态补拉、回执更新和退出 IM 时维护缓存
- 增加群详情 infoLoaded 内存标记,减少切群时重复拉取群详情,手动刷新和关键通知仍强制刷新
- 同步 GROUP_INFO_UPDATE 的 joinApproval,避免群审批配置在前端缓存中陈旧
- 优化群通话胶囊条状态,记录 participantsLoaded,按需补齐参与者并在通话无人时移除胶囊
- RTC_CALL_START 生成群通话最小胶囊条,后续由参与者事件和 getActiveCall 补齐
- 退出 IM 时清理 RTC 状态和群通话缓存
- Vben antd/antd-next 调整媒体元素为函数 ref,修复 MediaStream 与元素挂载时序问题
- 修复 Vben 消息历史弹窗回调类型标注
2026-06-19 10:05:37 -07:00
YunaiV dcafe6efdc fix(im): 将频道消息的 pull 改成 pullChannelMessageList 2026-06-18 19:58:41 -07:00
YunaiV 61c9e1acf2 fix(im): 修复群备注首屏展示和聊天列表名称覆盖
- 后端群 VO 返回当前用户维度的 groupRemark 和 silent
- 群列表构建时通过成员关系回填个人群设置,并继续仅对有效成员回填置顶消息
- Vue3 群列表同步时以接口返回的个人群设置为准,只保留成员缓存
- 会话名写入入口统一使用 getGroupDisplayName,避免群备注被原群名覆盖
- 空群头像且成员未加载时异步预拉群成员,用于合成群头像
- 启用 IM Maven 模块和 yudao-server 对 IM 模块的依赖
2026-06-18 08:59:04 -07:00
YunaiV ab2fa4e6b8 fix(im):群昵称修改改为静默同步
- 后端将 GROUP_MEMBER_NICKNAME_UPDATE 改为非持久化事件,避免写入群聊历史消息
- 保留群昵称变更的 WebSocket 在线同步,继续更新成员 displayUserName
- Vue3 聊天侧栏从当前群成员的 displayUserName 回填「我在本群的昵称」
- Vue3 WebSocket 收到 GROUP_MEMBER_NICKNAME_UPDATE 时只同步 groupStore,不再插入消息列表
- 补充后端单测,覆盖群昵称变更事件不入库但仍推送
2026-06-18 06:57:05 -07:00
YunaiV e5bba07dec fix(im): 补回录音格式探测和 IM 初始化门控
- 录音前按浏览器能力选择 MIME 类型,并按实际格式生成语音文件后缀
- 频道消息发送表单改用 UserSelectV2 多选接收人
- IM 外层壳完成本地库和缓存恢复后再挂载子路由
2026-06-17 19:51:59 +08:00
芋道源码 68c5f3fc4b
!884 Merge remote-tracking branch 'origin/master'
Merge pull request !884 from 芋道源码/master
2026-06-17 08:32:32 +00:00
YunaiV 07c8f143ea fix(im): 修复重新登录会话未读闪烁
- 新增会话读位置本地存储,独立维护 conversationReads
- 启动时先恢复本地读位置,并在会话列表渲染前修正未读状态
- 消息入库时基于读位置过滤已读历史消息,避免重新累计未读
- READ 同步与主动已读统一走 conversationStore,保证读位置单调推进
- 兼容旧会话 readMessageId 数据迁移
2026-06-17 13:30:16 +08:00
YunaiV 8ba76813ae fix(im): 收敛离线拉取的实时副作用
- 离线 pull 只还原历史好友、群聊事件气泡,不再重放实时通知副作用
- 好友详情请求增加 in-flight 去重,有效好友已存在时跳过重复拉取
- 修复软删好友重新添加时被本地缓存误跳过的问题
- 群创建通知只拉群详情,群成员改为进入会话后懒加载
- 避免群基础信息缺失或退群时兜底拉取整群成员
2026-06-17 09:20:29 +08:00
YunaiV ddafacf64d fix(im): 修复历史退群群未读和成员加载问题
- 已读上报使用会话末条消息编号兜底
- 历史退群群不再请求群成员列表
- 群聊 read 放开当前成员校验,保留可见性校验
- Vben 群详情补齐 joinStatus
- 补充退群群已读边界测试
2026-06-17 01:38:52 +08:00
YunaiV cb625d11bb fix(im): 修复点击未读会话后重新登录未读回潮
点击会话时,消息列表可能尚未加载完成,导致已读上报只能从空列表算出 messageId = 0,并跳过服务端已读接口。此时本地未读已清零,但服务端读位置未推进,重新登录后会按服务端状态恢复未读。

已读上报时改为取已加载消息最大编号和会话末条服务端消息编号的较大值,确保消息列表尚未加载时也能使用 lastMessageId 推进服务端读位置。
2026-06-17 00:48:44 +08:00
YunaiV 4879c4705f refactor: 扁平化 IM WebSocket 通知推送 API
- 将 WebSocket 推送入口统一为 userId/userIds + conversationType + contentType + payload
- 移除业务侧 ImNotificationWebSocketDTO 构造和无会话专用发送入口
- 收敛私聊、群聊、频道、好友、加群申请、RTC 通知调用路径
- 精简 ImNotificationWebSocketDTO,仅保留统一外壳字段
- 保留群消息 payload 的 receiptStatus、readCount、receiverUserIds
- 更新相关单元测试,覆盖群消息通知 payload 字段
2026-06-16 11:38:56 +08:00
YunaiV 2685bc357f feat(im): 增强消息拉取与状态补偿可靠性
- 新增会话读位置持久化接口与前端同步逻辑
- 增加好友、好友申请、加群申请的增量拉取补偿
- 统一前端 pull 编排,增加回扫窗口、落库等待和账号切换守卫
- 调整群成员为按群懒加载缓存,并移除全局成员增量链路
- 修复消息落库、读位置补偿、READ 事件乱序下的未读状态一致性
- 完善群申请红点快照刷新和管理员角色变化补偿
- 更新消息存储设计与修复记录文档
2026-06-15 08:26:32 +08:00
YunaiV cf85fd4c86 feat(im): 统一消息读位置和回执状态模型
- 新增 im_conversation_read 会话读位置表,并补充消息存储推拉相关索引
- 群消息固化 receiver_user_ids 快照,按可见成员快照拉取和统计回执
- 统一消息 status 为 NORMAL/RECALL,新增私聊 receipt_status 并复用统一回执状态
- 前端改用 receiptStatus 展示私聊已读、群回执和频道已读态
- 补齐私聊、群聊、频道 WebSocket 已读同步和离线补偿逻辑
- 更新 IM 消息状态、回执状态字典和管理后台展示
- 调整相关单测和测试建表脚本
2026-06-14 09:34:16 +08:00
YunaiV 8c796950f9 feat: 完善 IM 群历史消息拉取与历史群前端门控
- 后端群列表返回历史群成员状态 joinStatus,用于区分当前群和历史退群群
- 群消息拉取支持基于 receiver_user_ids 快照过滤可见消息
- 补充群消息 pull、群成员候选、私聊 pull 相关索引与 SQL 脚本
- 前端接入 joinStatus,并封装历史退群群判断
- 历史退群群禁发、隐藏群操作入口,并从通讯录、转发、推荐名片候选中排除
- 保留历史群会话展示能力,用于查看退群前历史消息
2026-06-14 02:01:09 +08:00
久我山八重很不高兴w ba5c378a00
update src/views/im/manager/face/userItem/index.vue.
Signed-off-by: 久我山八重很不高兴w <479067860@qq.com>
2026-06-01 14:00:10 +00:00
YunaiV 89a49cf19c refactor(frontend): 统一当前登录用户 ID 获取入口
- 新增 getCurrentUserId 到 utils/auth
- 替换 IM、CRM、BPM、MES、Mall 等模块中直接读取 userStore.getUser.id 的写法
- 移除 IM 内部 currentUser 工具依赖,统一从全局 auth 工具获取当前用户编号
- 保留 userStore 对昵称、头像、部门等非 ID 字段的读取
2026-05-28 23:38:46 +08:00
YunaiV 763e11eb78 refactor(im): 统一本地存储入口和 store 命名
- 删除 utils/storage.ts,getCurrentUserId 移到 utils/user.ts
- StorageKeys 移到 utils/db.ts,按 localStorage / settings 分组
- db 客户端新增 clearStore;整桶 store 改为 clearStore + 循环 put 单事务
- 业务 store action / getter 统一改为 verbXxxList / verbXxx 风格
- draft API 加 Conversation 前缀;FriendStore loadFriends 改名 loadFriendData
- 卸载 localforage 依赖
2026-05-28 19:49:54 +08:00
YunaiV 664904bd06 refactor(im): 拆分会话消息存储并合并草稿
- 新增 IM IndexedDB DB client,按当前用户初始化本地库
- 将会话与消息拆成 conversations / messages 逐条存储
- 将草稿合并进 Conversation.draft,删除 draftStore
- 优化 pull 批量写入,消息、会话摘要和游标同事务落库
- 统一 store action 命名,清理旧 localStorage key 和 TODO
- 保留 maxId settings 游标,避免本地消息回收后游标回退
2026-05-28 08:39:49 +08:00
YunaiV 811b93d9f1 refactor(im): 拆分会话和消息本地存储
- 新增 IM IndexedDB DB 封装、schema、key helper 和 session guard
- 新增 messageStore,支持消息逐条持久化、分页加载、ack 合并、撤回和回执更新
- 调整 conversationStore 只持久化会话摘要,不再内嵌 messages 数组
- 切换发送、拉取、WebSocket、媒体上传和消息组件到 messageStore
- 增加离开 IM 时的 store 清理和本地存储序列化保护
2026-05-27 23:46:18 +08:00
YunaiV e1b8370267 fix: 修复 IM 申请与 RTC 边界问题
- 复用好友申请、群申请和群邀请唯一键冲突后的旧记录,并补充测试
- 收敛 RTC 旁观者加入、忙线校验、追加邀请超员和群通话通知逻辑
- 为 RTC 参与者补充房间用户唯一约束与 MySQL 迁移
- 统一群本体管理请求的 id 字段,并同步前端调用
- 修复前端来电活跃态守卫和 LiveKit 重连前断开旧房间
- 清理群成员通知基类命名和相关注释
2026-05-25 20:54:11 +08:00
YunaiV a4dfb717aa fix(im):批量修复群管理、RTC 和消息链路问题
- 修复群管理行锁、管理员角色更新、群主转让、置顶消息并发问题
- 修复好友申请 maxId 游标、重复申请排序、通知类型校验和消息内容结构校验
- 修复消息统计口径、RTC token 鉴权、离会通知、前端拉取取消和媒体重试
- 优化表情批量删除、WebSocket 推送注释、群 READ 字段和相关单测
- 更新 bug_todo、bug_done 和 bug_rejected,剩余 9 个待修
2026-05-25 09:04:25 +08:00
YunaiV f3807e30d5 fix(im): 批量修复 P1/P2 问题
- 修复管理端消息内容搜索和私聊双向查询
- 加强 RTC 通话并发状态保护,去除重复接口错误提示
- 支持成员永久禁言
- 脱敏群消息 WebSocket 定向收件人字段
- 更新 IM bug 台账,剩余 P1/P2 共 35 个
2026-05-25 00:28:59 +08:00
YunaiV 8b06efe5ee fix: 加强 IM 上传 URL 与 RTC 来电载荷校验 2026-05-24 23:41:46 +08:00
YunaiV 309a4bf4d0 fix(im): 强化好友关系、消息历史和前端交互
- 校验群资料字段长度,并在同意好友申请时复验双方用户
- 仅向双向有效好友推送资料更新通知
- WebSocket 推送收件人去重,并忽略空用户编号
- 群聊和私聊历史保留撤回消息记录
- 校验群通话排除发起人后仍需存在被邀请人
- 统一 IM 前端接口参数传递方式
- 抽取全局 URL 安全打开工具,并复用到消息预览
- 防止好友申请同意和拒绝按钮重复操作
- 补充好友、消息、RTC、WebSocket 相关测试
2026-05-24 21:24:15 +08:00
YunaiV 2ede2b371f fix(im): 批量修复 P0 安全边界和通话流程问题
- 拒绝匿名 WebSocket 握手,收紧 RTC 接听和入会忙线校验
- 支持封禁群解散,管理端解散改为独立权限码
- 增加个人表情数量配置、唯一约束和并发重复兜底
- 修复 RTC 异常断开上报、视频远端音频和好友选择大列表渲染
- 让个人表情添加失败透出后端业务错误
- 流转 P0 bug 文档,并按产品取舍记录 apiSecret 默认值不强制拦截
2026-05-24 20:21:00 +08:00
YunaiV 00f273ca77 fix(im):加固好友、群成员与群消息边界流程
- 清理好友重加时的 deleteTime 和历史备注残留
- 清理群成员重入时的 quitTime、muteEndTime 和邀请来源残留
- 允许封禁群成员主动退群,仍拦截已解散群
- 校验群已读游标的消息归属和可见性
- 收窄群消息置顶通知为专用展示对象并同步前端展示
- 回填群成员单查接口的昵称和头像
- 补充相关回归测试并流转 IM bug 状态文档
2026-05-24 18:22:07 +08:00
YunaiV 72d8c499a4 feat(im): 修一批管理端统计与成员选择器细节
- 消息趋势 / 用户趋势图表加 loading 态(接口错误由全局拦截器统一提示)
- 群成员选择器 grid 模式补右上角 × 移除按钮
- 统计接口 6 个 API 补全返回值泛型
2026-05-22 20:15:15 +08:00
YunaiV 38ecc4f40c feat(im): 修一批前端性能 / 跨账号防御与侧边栏占位
- friendStore.getFriend 改 friendMap 索引,高频反查从 O(N) 降到 O(1)
- faceStore 加 storeEpoch,切账号后旧表情拉取 / 增删响应不再回写新账号
- friendStore 写路径统一补 epoch 守卫(loadFriendInfo / 单查申请 / 删好友 /
  免打扰 / 置顶 / 拉黑 / 备注),切账号瞬间的旧响应不污染新账号好友状态
- 私聊侧边栏 friend 缺失时给加载占位,替代原本的空白抽屉
2026-05-22 08:38:56 +08:00
YunaiV 9893aedbb2 feat(im): 修一批 WS 健壮性与跨账号防御
- WS 重连改指数退避(1→2→4→8→16→30s + jitter),频率封顶不再固定 3s 形成惊群
- onerror 不再调 reconnect,主动 close 让 onclose 成为唯一重连入口,避免双触计数 +2
- 私聊 / 群消息入口加防御层,senderId / receiverId / 定向 receiverUserIds 不含当前用户的帧直接丢弃
- useMessagePuller 引入 epoch + userId 双重快照,离开 IM / 切账号时旧 pull 写入前自检跳出
- cancelPull 同步清 WS messageBuffer,防止下次进 IM 把旧 session 缓冲帧回放进新 store
2026-05-21 20:02:44 +08:00
YunaiV 5a983bb1eb feat(im): 修一批上传安全与群聊交互问题
- 限制消息媒体上传大小,并让视频独立上传路径复用同一校验
- 禁止发送可执行 / 脚本类文件扩展名
- 切账号时废弃好友 store 未返回请求
- 多选转发过滤撤回 / 系统类消息
- 邀请群成员时前端拦截人数上限
- 允许群管理员 @ 所有人
2026-05-21 17:31:46 +08:00
YunaiV fead282395 feat(im): 修一批正确性 / UX 细节:群名 trim 空、敏感词 / 封禁理由空白校验、默认群名计入创建者、ack 后重算会话摘要、文本重试复用 clientMessageId 防重复 2026-05-21 15:57:46 +08:00
YunaiV 73aa578c9b feat(im): 修管理端 3 处:群消息 atUserNicknames 类型允许 null、移除前端无效的「消息内容」查询入口、表情包宽高加表单校验 2026-05-21 15:10:34 +08:00
YunaiV 7a236b4378 feat(im): 修 L-13/L-16:PagedScroller 加 itemKey 防索引乱位、私聊 Message.targetId 改对端 userId、抽 getPrivateMessagePeerId 收敛 4 处 peer 计算 2026-05-21 14:50:42 +08:00
YunaiV 1015423431 feat(im): 修一批 L 危:window.open 加 noopener、@ 浮层箭头方向跟随定位、置顶展开切群重置、加黑名单取消静默、菜单负坐标兜底、群选择回显跨页补查 2026-05-21 14:25:21 +08:00
YunaiV 3949e0c89f fix(im): 修复 IM 前端批量 UX 状态问题 2026-05-21 13:25:55 +08:00
YunaiV 29b257b8cd feat(im): 修一批状态串扰:群申请列表防同群 WS 推送乱序覆盖、群免打扰同步会话、跨端群已读清 @、联系人 selection 跟随 store、好友申请按钮并发锁 2026-05-21 11:11:36 +08:00
YunaiV 1e08e9fbca feat(im): 修 IM 切账号串号:loadConversations 开头清状态、加 loadedUserId 守门跨账号同 key 误激活、新增 clear() 对齐 friend/group store 2026-05-21 10:06:52 +08:00
YunaiV 69653163b0 feat(im): 修 IM 历史消息切会话串号:loadEarlier 用 getConversationKey 守卫,watch(conversation) 重置分页态 2026-05-21 09:05:44 +08:00
YunaiV 8468d9bf4d feat(im): 修 WebSocket 重复连接:connect 入口检测旧 socket 状态复用 / 重建,disconnect 解绑全部 handler 2026-05-21 08:41:44 +08:00
YunaiV f7cda1fc4e feat(im): 修一组细节:会话 silent 跟随新消息同步、合并末尾刷摘要 + 群 @ 标记、录音 1s 下限、邀请 reload 透 friendIds、pull 游标取最大 id 2026-05-21 01:13:29 +08:00
YunaiV b63492199a feat(im): 对齐微信:免打扰会话改小红点、消息 Tab 二次点击滚动到下一未读、移除工具栏 hover tooltip 2026-05-20 23:57:18 +08:00
YunaiV c6b6e723e0 feat(im): 将 style 尽量多的改成 unocss,ai 友好 2026-05-20 19:38:14 +08:00
YunaiV 0a07d4a2e4 feat(im): 将 style 尽量多的改成 unocss,ai 友好 2026-05-20 13:56:46 +08:00
YunaiV fc812aef26 feat(im): 增加频道消息的已读状态 2026-05-20 01:00:46 +08:00
YunaiV 30b963149a feat(im): 修复频道消息的引用展示不对; 2026-05-19 23:57:46 +08:00
YunaiV 9a36cfe933 feat(im): 继续优化频道的各种代码(v4)优化卡片样式 2026-05-19 23:52:11 +08:00
YunaiV 94e5fc00ac feat(im): 继续优化频道的各种代码(v3) 2026-05-19 22:06:38 +08:00