fix(im): 修复点击未读会话后重新登录未读回潮

点击会话时,消息列表可能尚未加载完成,导致已读上报只能从空列表算出 messageId = 0,并跳过服务端已读接口。此时本地未读已清零,但服务端读位置未推进,重新登录后会按服务端状态恢复未读。

已读上报时改为取已加载消息最大编号和会话末条服务端消息编号的较大值,确保消息列表尚未加载时也能使用 lastMessageId 推进服务端读位置。
pull/884/MERGE
YunaiV 2026-06-17 00:48:44 +08:00
parent 4879c4705f
commit cb625d11bb
1 changed files with 3 additions and 2 deletions

View File

@ -222,7 +222,7 @@ export const useMessageSender = () => {
/**
* /
* 1.
* 2. id
* 2. id
*/
const readActive = async () => {
const conversation = conversationStore.activeConversation
@ -231,13 +231,14 @@ export const useMessageSender = () => {
}
// 本地标记已读未读数清零UI 立刻响应)
conversationStore.markConversationRead(conversation.type, conversation.targetId)
const maxMessageId = messageStore
const loadedMaxMessageId = messageStore
.getMessages(getClientConversationId(conversation.type, conversation.targetId))
.reduce<number>(
(maxMessageId, message) =>
message.id && message.id > maxMessageId ? message.id : maxMessageId,
0
)
const maxMessageId = Math.max(loadedMaxMessageId, conversation.lastMessageId || 0)
if (!maxMessageId) {
return
}