From c0ead15bc328c43855d8cb94653d19bc991abac1 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Fri, 19 Jun 2026 10:05:22 -0700 Subject: [PATCH] =?UTF-8?q?feat(im)=EF=BC=9A=E4=BC=98=E5=8C=96=E5=B7=B2?= =?UTF-8?q?=E8=AF=BB=E4=B8=8A=E6=8A=A5=E3=80=81=E7=BE=A4=E8=AF=A6=E6=83=85?= =?UTF-8?q?=E7=BC=93=E5=AD=98=E4=B8=8E=20RTC=20=E9=80=9A=E8=AF=9D=E7=8A=B6?= =?UTF-8?q?=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 已读上报增加本地读位置覆盖判断,避免切换会话和当前会话自动已读时重复调用 read 接口 - 标记会话已读时同步推进本地 read 游标并写入 IndexedDB,接口失败仅记录日志 - 缓存私聊对方 maxReadMessageId,并在状态补拉、回执更新和退出 IM 时维护缓存 - 增加群详情 infoLoaded 内存标记,减少切群时重复拉取群详情,手动刷新和关键通知仍强制刷新 - 同步 GROUP_INFO_UPDATE 的 joinApproval,避免群审批配置在前端缓存中陈旧 - 优化群通话胶囊条状态,记录 participantsLoaded,按需补齐参与者并在通话无人时移除胶囊 - RTC_CALL_START 生成群通话最小胶囊条,后续由参与者事件和 getActiveCall 补齐 - 退出 IM 时清理 RTC 状态和群通话缓存 - Vben antd/antd-next 调整媒体元素为函数 ref,修复 MediaStream 与元素挂载时序问题 - 修复 Vben 消息历史弹窗回调类型标注 --- .../home/components/rtc/rtc-call-inviting.vue | 6 +- .../rtc/rtc-call-participant-tile.vue | 8 +- .../home/components/rtc/rtc-call-running.vue | 12 +-- .../components/rtc/rtc-group-call-banner.vue | 15 +-- .../home/composables/useMediaStreamElement.ts | 18 ++-- .../im/home/composables/useMessagePuller.ts | 8 ++ .../im/home/composables/useMessageSender.ts | 33 +++++-- apps/web-antd/src/views/im/home/index.vue | 2 +- .../components/message/message-history.vue | 2 +- .../components/message/message-panel.vue | 2 +- .../views/im/home/store/conversationStore.ts | 22 ++--- .../src/views/im/home/store/groupStore.ts | 30 ++++-- .../src/views/im/home/store/messageStore.ts | 27 +++++ .../src/views/im/home/store/rtcStore.ts | 56 +++++++++-- .../src/views/im/home/store/websocketStore.ts | 99 +++++++++++++++---- .../web-antd/src/views/im/home/types/index.ts | 3 +- apps/web-antd/src/views/im/utils/db.ts | 8 +- apps/web-antd/src/views/im/utils/message.ts | 2 + .../home/components/rtc/rtc-call-inviting.vue | 7 +- .../rtc/rtc-call-participant-tile.vue | 10 +- .../home/components/rtc/rtc-call-running.vue | 15 ++- .../components/rtc/rtc-group-call-banner.vue | 15 +-- .../home/composables/useMediaStreamElement.ts | 18 ++-- .../im/home/composables/useMessagePuller.ts | 8 ++ .../im/home/composables/useMessageSender.ts | 33 +++++-- .../src/views/im/home/index.vue | 2 +- .../components/message/message-panel.vue | 2 +- .../views/im/home/store/conversationStore.ts | 51 +++++++--- .../src/views/im/home/store/groupStore.ts | 30 ++++-- .../src/views/im/home/store/messageStore.ts | 27 +++++ .../src/views/im/home/store/rtcStore.ts | 56 +++++++++-- .../src/views/im/home/store/websocketStore.ts | 99 +++++++++++++++---- .../src/views/im/home/types/index.ts | 3 +- apps/web-antdv-next/src/views/im/utils/db.ts | 8 +- .../src/views/im/utils/message.ts | 2 + .../components/rtc/rtc-group-call-banner.vue | 15 +-- .../im/home/composables/useMessagePuller.ts | 8 ++ .../im/home/composables/useMessageSender.ts | 33 +++++-- apps/web-ele/src/views/im/home/index.vue | 2 +- .../components/message/message-panel.vue | 2 +- .../views/im/home/store/conversationStore.ts | 51 +++++++--- .../src/views/im/home/store/groupStore.ts | 30 ++++-- .../src/views/im/home/store/messageStore.ts | 27 +++++ .../src/views/im/home/store/rtcStore.ts | 56 +++++++++-- .../src/views/im/home/store/websocketStore.ts | 99 +++++++++++++++---- apps/web-ele/src/views/im/home/types/index.ts | 3 +- apps/web-ele/src/views/im/utils/db.ts | 8 +- apps/web-ele/src/views/im/utils/message.ts | 2 + 48 files changed, 840 insertions(+), 235 deletions(-) diff --git a/apps/web-antd/src/views/im/home/components/rtc/rtc-call-inviting.vue b/apps/web-antd/src/views/im/home/components/rtc/rtc-call-inviting.vue index ed92df052..f22dcac7a 100644 --- a/apps/web-antd/src/views/im/home/components/rtc/rtc-call-inviting.vue +++ b/apps/web-antd/src/views/im/home/components/rtc/rtc-call-inviting.vue @@ -22,7 +22,7 @@ defineEmits<{ toggleSpeaker: [] }>() -const localVideoRef = useMediaStreamElement(() => props.localStream) +const setLocalVideoRef = useMediaStreamElement(() => props.localStream)