From 214db82ba14993002a662b2d5258cd9307806a23 Mon Sep 17 00:00:00 2001 From: Professional Date: Sun, 25 May 2025 00:05:52 +0700 Subject: [PATCH] =?UTF-8?q?=D1=84=D0=B8=D0=BA=D1=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.vue | 30 ++++++++++++++++++++++-------- src/views/ChatListView.vue | 13 +++++++++++-- 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/src/App.vue b/src/App.vue index b04fc88..fba2208 100644 --- a/src/App.vue +++ b/src/App.vue @@ -83,14 +83,28 @@ const handleNewMessage = (message) => { // ВАЖНО: Увеличиваем счетчик ТОЛЬКО если сообщение пришло от другого пользователя if (senderId !== user.value?._id) { - const conversation = conversations.value.find(c => c._id === message.conversationId); - if (conversation) { - conversation.unreadCount = (conversation.unreadCount || 0) + 1; - console.log('[App] Увеличен счетчик в навигации для диалога:', message.conversationId); - } else { - // Если диалога нет в списке, обновим весь список - fetchConversations(); - } + // Добавляем небольшую задержку, чтобы дать время событию messagesRead сработать + // если пользователь находится в том же чате + setTimeout(() => { + const conversation = conversations.value.find(c => c._id === message.conversationId); + if (conversation) { + // Проверяем текущий маршрут - если пользователь находится в этом чате, + // то сообщение уже могло быть автоматически помечено как прочитанное + const currentRoute = route.path; + const isInThisChat = currentRoute === `/chat/${message.conversationId}`; + + if (!isInThisChat) { + // Увеличиваем счетчик только если пользователь НЕ находится в этом чате + conversation.unreadCount = (conversation.unreadCount || 0) + 1; + console.log('[App] Увеличен счетчик в навигации для диалога:', message.conversationId); + } else { + console.log('[App] Пользователь находится в этом чате, счетчик не увеличиваем'); + } + } else { + // Если диалога нет в списке, обновим весь список + fetchConversations(); + } + }, 100); // Задержка 100ms } else { console.log('[App] Сообщение от текущего пользователя, счетчик в навигации не изменяется'); } diff --git a/src/views/ChatListView.vue b/src/views/ChatListView.vue index 573001b..4d99c69 100644 --- a/src/views/ChatListView.vue +++ b/src/views/ChatListView.vue @@ -230,8 +230,17 @@ const handleNewMessageEvent = (message) => { // ВАЖНО: Увеличиваем счетчик ТОЛЬКО если сообщение пришло от другого пользователя if (senderId !== user.value._id) { - conversation.unreadCount = (conversation.unreadCount || 0) + 1; - console.log('[ChatListView] Увеличен счетчик непрочитанных для диалога:', message.conversationId, 'новый счетчик:', conversation.unreadCount); + // Проверяем, находится ли пользователь в текущем чате + const currentRoute = window.location.pathname; + const isInThisChat = currentRoute === `/chat/${message.conversationId}`; + + if (!isInThisChat) { + // Увеличиваем счетчик только если пользователь НЕ находится в этом чате + conversation.unreadCount = (conversation.unreadCount || 0) + 1; + console.log('[ChatListView] Увеличен счетчик непрочитанных для диалога:', message.conversationId, 'новый счетчик:', conversation.unreadCount); + } else { + console.log('[ChatListView] Пользователь находится в этом чате, счетчик не увеличиваем'); + } } else { console.log('[ChatListView] Сообщение от текущего пользователя, счетчик не изменяется'); }