From ddafacf64d348ece0bfe9d7192c772c6227e49fb Mon Sep 17 00:00:00 2001 From: YunaiV Date: Wed, 17 Jun 2026 01:38:52 +0800 Subject: [PATCH] =?UTF-8?q?fix(im):=20=E4=BF=AE=E5=A4=8D=E5=8E=86=E5=8F=B2?= =?UTF-8?q?=E9=80=80=E7=BE=A4=E7=BE=A4=E6=9C=AA=E8=AF=BB=E5=92=8C=E6=88=90?= =?UTF-8?q?=E5=91=98=E5=8A=A0=E8=BD=BD=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 已读上报使用会话末条消息编号兜底 - 历史退群群不再请求群成员列表 - 群聊 read 放开当前成员校验,保留可见性校验 - Vben 群详情补齐 joinStatus - 补充退群群已读边界测试 --- .../conversation/components/message/MessagePanel.vue | 9 ++++++--- src/views/im/home/store/messageStore.ts | 5 ++++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/views/im/home/pages/conversation/components/message/MessagePanel.vue b/src/views/im/home/pages/conversation/components/message/MessagePanel.vue index 1bf687fa9..4113e9abb 100644 --- a/src/views/im/home/pages/conversation/components/message/MessagePanel.vue +++ b/src/views/im/home/pages/conversation/components/message/MessagePanel.vue @@ -437,12 +437,15 @@ const groupMembers = computed(() => { }) }) -/** 切换到群会话时同步群信息 + 成员;各自 fire-and-forget + catch,任何一项失败不牵连其它 */ +/** 切换到群会话时同步群信息 + 成员 */ async function ensureGroupData(groupId: number) { - // 远程异步拉群信息(群名 / 公告 / 群主等元数据) - groupStore.fetchGroupInfo(groupId).catch((error) => { + // 远程拉群信息(群名 / 公告 / 群主等元数据) + await groupStore.fetchGroupInfo(groupId).catch((error) => { console.warn('[IM MessagePanel] fetchGroupInfo 失败', { groupId }, error) }) + if (isGroupQuit(groupStore.getGroup(groupId))) { + return + } // 先从 IDB 同步加载群成员,让首帧立即出成员名 / 头像 await groupStore.loadGroupMemberList(groupId).catch((error) => { diff --git a/src/views/im/home/store/messageStore.ts b/src/views/im/home/store/messageStore.ts index bdb3b3e21..2c474334f 100644 --- a/src/views/im/home/store/messageStore.ts +++ b/src/views/im/home/store/messageStore.ts @@ -27,7 +27,7 @@ import { } from '../../utils/message' import { resolveConversationLastContent } from '../../utils/conversation' import { getCurrentUserId } from '@/utils/auth' -import { tryGetSenderDisplayName } from '../../utils/user' +import { isGroupQuit, tryGetSenderDisplayName } from '../../utils/user' import { useGroupStore } from './groupStore' import { useConversationStore } from './conversationStore' import type { ImConversationReadRespVO } from '@/api/im/conversation/read' @@ -137,6 +137,9 @@ function deriveLastSenderDisplayName( if (conversation.type === ImConversationType.GROUP) { const groupStore = useGroupStore() const group = groupStore.getGroup(conversation.targetId) + if (isGroupQuit(group)) { + return conversation.lastSenderId === senderId ? conversation.lastSenderDisplayName : undefined + } const fetchPromise = group?.membersLoaded && !group.membersExpired ? groupStore.fetchGroupMember(conversation.targetId, senderId)