From 00f273ca771679fd688b25cd2a942447c6a69790 Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sun, 24 May 2026 18:22:07 +0800 Subject: [PATCH] =?UTF-8?q?fix(im)=EF=BC=9A=E5=8A=A0=E5=9B=BA=E5=A5=BD?= =?UTF-8?q?=E5=8F=8B=E3=80=81=E7=BE=A4=E6=88=90=E5=91=98=E4=B8=8E=E7=BE=A4?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E8=BE=B9=E7=95=8C=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 清理好友重加时的 deleteTime 和历史备注残留 - 清理群成员重入时的 quitTime、muteEndTime 和邀请来源残留 - 允许封禁群成员主动退群,仍拦截已解散群 - 校验群已读游标的消息归属和可见性 - 收窄群消息置顶通知为专用展示对象并同步前端展示 - 回填群成员单查接口的昵称和头像 - 补充相关回归测试并流转 IM bug 状态文档 --- src/views/im/home/store/groupStore.ts | 36 +++++++++++++++++---------- src/views/im/utils/message.ts | 6 +---- 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/src/views/im/home/store/groupStore.ts b/src/views/im/home/store/groupStore.ts index a72ca08bf..76fcfe744 100644 --- a/src/views/im/home/store/groupStore.ts +++ b/src/views/im/home/store/groupStore.ts @@ -14,7 +14,12 @@ import { } from '@/api/im/group/member' import { useConversationStore } from './conversationStore' import { useGroupRequestStore } from './groupRequestStore' -import { ImConversationType, ImGroupMemberRole, ImMessageType } from '../../utils/constants' +import { + ImConversationType, + ImGroupMemberRole, + ImMessageStatus, + ImMessageType +} from '../../utils/constants' import { CommonStatusEnum } from '@/utils/constants' import { getCurrentUserId, @@ -700,7 +705,7 @@ export const useGroupStore = defineStore('imGroupStore', { } }, - /** 群消息置顶:从 payload 直接拿完整消息对象 push 到 pinnedMessages */ + /** 群消息置顶:从 payload 取消息展示数据加入置顶列表 */ applyGroupMessagePinNotification(groupId: number, payload: GroupNotificationPayload) { const message = payload.message if (!message) { @@ -715,17 +720,22 @@ export const useGroupStore = defineStore('imGroupStore', { if (existing.some((msg) => msg.id === message.id)) { return } - // message 字段名跟 Message 一致(仅 sendTime 需要从 ISO 串转毫秒戳,selfSend 按当前用户算) - const newMessage: Message = { - ...message, - clientMessageId: message.clientMessageId || '', - sendTime: new Date(message.sendTime).getTime(), - targetId: message.groupId, - selfSend: message.senderId === getCurrentUserId(), - atUserIds: message.atUserIds || [], - receiverUserIds: message.receiverUserIds || [] - } - group.pinnedMessages = [...existing, newMessage] + group.pinnedMessages = [ + ...existing, + { + id: message.id, + clientMessageId: '', + senderId: message.senderId, + type: message.type, + content: message.content, + status: ImMessageStatus.UNREAD, + sendTime: new Date(message.sendTime).getTime(), + targetId: message.groupId || groupId, + selfSend: message.senderId === getCurrentUserId(), + atUserIds: message.atUserIds ? [...message.atUserIds] : [], + receiverUserIds: message.receiverUserIds ? [...message.receiverUserIds] : [] + } + ] this.saveGroups() }, diff --git a/src/views/im/utils/message.ts b/src/views/im/utils/message.ts index 5a14bf294..f04376459 100644 --- a/src/views/im/utils/message.ts +++ b/src/views/im/utils/message.ts @@ -693,20 +693,16 @@ export type GroupNotificationPayload = { // 自由进群事件 entrantUserId?: number addSource?: number - // PIN 事件携带的完整被置顶消息对象 + // PIN 事件携带的被置顶消息展示数据 message?: { id: number - clientMessageId?: string senderId: number groupId: number type: number content: string - status: number sendTime: string atUserIds?: number[] receiverUserIds?: number[] - receiptStatus?: number - readCount?: number } }