From 17aefb966ec5c20651464bc52f1e6651f0f790a1 Mon Sep 17 00:00:00 2001 From: wangdongbo <949818794@qq.com> Date: Tue, 10 Feb 2026 16:47:19 +0800 Subject: [PATCH] no message --- pages/message/message.vue | 50 ++++++++---------------------------- utils/conversation-merger.js | 5 +++- 2 files changed, 14 insertions(+), 41 deletions(-) diff --git a/pages/message/message.vue b/pages/message/message.vue index af2576e..f90e9a4 100644 --- a/pages/message/message.vue +++ b/pages/message/message.vue @@ -330,16 +330,14 @@ const setupConversationListener = () => { existing.lastMessageTime !== conversationData.lastMessageTime || existing.unreadCount !== conversationData.unreadCount ) { - // 只更新变化的字段,保持头像和未读数稳定 + // 只更新变化的字段,保持头像稳定 conversationList.value[existingIndex] = { ...conversationData, // 保持原有头像,避免闪动 avatar: existing.avatar || conversationData.avatar, - // 保留较大的未读数(避免被后端数据覆盖) - unreadCount: Math.max( - existing.unreadCount || 0, - conversationData.unreadCount || 0 - ), + // 【修复】直接使用 TIM SDK 返回的未读数,不使用 Math.max + // 这样才能正确处理标记已读的情况(unreadCount 从 N 变为 0) + unreadCount: conversationData.unreadCount || 0 }; needSort = true; console.log( @@ -367,40 +365,12 @@ const setupConversationListener = () => { globalTimChatManager.setCallback("onMessageReceived", (message) => { console.log("消息列表页面收到新消息:", message); - // 找到对应的会话 - const conversationID = message.conversationID; - const conversationIndex = conversationList.value.findIndex( - (conv) => conv.conversationID === conversationID - ); - - if (conversationIndex !== -1) { - const conversation = conversationList.value[conversationIndex]; - - // 检查当前页面栈,判断用户是否正在查看该会话的聊天详情页 - const pages = getCurrentPages(); - const currentPage = pages[pages.length - 1]; - - // 获取当前页面的 groupID 参数(如果在聊天详情页) - const currentGroupID = currentPage?.options?.groupID; - const isViewingThisConversation = - currentPage?.route === "pages/message/index" && - currentGroupID === conversation.groupID; - - // 如果用户正在查看这个具体的会话,不增加未读数 - if (isViewingThisConversation) { - console.log("用户正在查看该会话,不增加未读数"); - return; - } - - // 只在用户不在该会话的聊天页面时才增加未读数 - conversation.unreadCount = (conversation.unreadCount || 0) + 1; - console.log( - "已更新会话未读数:", - conversation.name, - "unreadCount:", - conversation.unreadCount - ); - } + // 【修复】不再手动更新未读数 + // TIM SDK 会在收到新消息时自动更新会话的未读数,并触发 onConversationListUpdated 事件 + // 手动 +1 可能导致未读数不准确(重复计数) + // + // 注意:onConversationListUpdated 事件会在消息接收后自动触发, + // 其中包含了正确的未读数,因此这里不需要手动处理 }); }; diff --git a/utils/conversation-merger.js b/utils/conversation-merger.js index 186bf5a..a4ae454 100644 --- a/utils/conversation-merger.js +++ b/utils/conversation-merger.js @@ -144,7 +144,10 @@ function mergeConversationData(conversation, groupDetailsMap) { name: formatConversationName(groupDetail), // 更新头像(优先使用已有头像,避免闪动) - avatar: conversation.avatar || groupDetail.patient?.avatar || '/static/default-avatar.png' + avatar: conversation.avatar || groupDetail.patient?.avatar || '/static/default-avatar.png', + + // 【修复】保留未读消息数(确保不被覆盖) + unreadCount: conversation.unreadCount || 0 } }