From c653c2fa2ba14f4ea9c3e602901ca125b3b512bd Mon Sep 17 00:00:00 2001 From: YunaiV Date: Tue, 5 May 2026 22:15:48 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat(im):=20=E5=A2=9E=E5=BC=BA?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E5=A4=84=E7=90=86=E9=80=BB=E8=BE=91=EF=BC=8C?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=A5=BD=E5=8F=8B=E9=80=9A=E7=9F=A5=E4=B8=8E?= =?UTF-8?q?=E6=92=A4=E5=9B=9E=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../im/home/composables/useMessagePuller.ts | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/views/im/home/composables/useMessagePuller.ts b/src/views/im/home/composables/useMessagePuller.ts index 715f658cd..1a40ff6b4 100644 --- a/src/views/im/home/composables/useMessagePuller.ts +++ b/src/views/im/home/composables/useMessagePuller.ts @@ -17,7 +17,9 @@ import { ImConversationType, ImMessageType, PRIVATE_MESSAGE_PULL_SIZE, - GROUP_MESSAGE_PULL_SIZE + GROUP_MESSAGE_PULL_SIZE, + isFriendChatTip, + isFriendNotification } from '../../utils/constants' import { useUserStore } from '@/store/modules/user' import type { Message } from '../types' @@ -121,6 +123,7 @@ export const useMessagePuller = () => { for (const raw of list) { if (isPrivate) { const message = raw as ImPrivateMessageRespVO + // 特殊:撤回消息的处理 if (message.type === ImMessageType.RECALL) { conversationStore.recallMessage( ImConversationType.PRIVATE, @@ -129,12 +132,23 @@ export const useMessagePuller = () => { ) continue } + // 特殊:离线 pull 期间入库的 FRIEND_* 帧(目前仅 FRIEND_ADD persistent=true)也要走好友数据分发, + // 否则断线期间的好友列表更新会丢失;与 WebSocket 路径 dispatchPrivateFrame 保持对称 + if (isFriendNotification(message.type)) { + wsStore.handleFriendNotification(message) + // 仅 FRIEND_ADD / FRIEND_DELETE 才作为会话气泡入消息列表 + if (!isFriendChatTip(message.type)) { + continue + } + } + // 其它消息正常入会话消息列表 conversationStore.insertMessage( convertPrivateConversation(message), convertPrivateMessage(message) ) } else { const message = raw as ImGroupMessageRespVO + // 特殊:撤回消息的处理 if (message.type === ImMessageType.RECALL) { conversationStore.recallMessage( ImConversationType.GROUP, @@ -143,6 +157,7 @@ export const useMessagePuller = () => { ) continue } + // 其它消息正常入会话消息列表 conversationStore.insertMessage( convertGroupConversation(message), convertGroupMessage(message)