From 8594a7dd0e63753609ec7ae797c8c81ece31c7f2 Mon Sep 17 00:00:00 2001 From: Professional Date: Sat, 24 May 2025 23:57:34 +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 | 11 ++++++- src/views/ChatListView.vue | 62 ++++++++++++++++++++++++++++++++------ 2 files changed, 63 insertions(+), 10 deletions(-) diff --git a/src/App.vue b/src/App.vue index a28cf32..ecd8e83 100644 --- a/src/App.vue +++ b/src/App.vue @@ -71,15 +71,24 @@ const fetchConversations = async () => { // Обработчик новых сообщений const handleNewMessage = (message) => { - // Если сообщение от другого пользователя, увеличиваем счетчик + console.log('[App] Получено новое сообщение:', { + sender: message.sender, + currentUser: user.value?._id, + conversationId: message.conversationId + }); + + // ВАЖНО: Увеличиваем счетчик ТОЛЬКО если сообщение пришло от другого пользователя if (message.sender !== 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(); } + } else { + console.log('[App] Сообщение от текущего пользователя, счетчик в навигации не изменяется'); } }; diff --git a/src/views/ChatListView.vue b/src/views/ChatListView.vue index 17f64d8..c7ca1e9 100644 --- a/src/views/ChatListView.vue +++ b/src/views/ChatListView.vue @@ -52,7 +52,15 @@

{{ getOtherParticipantName(conversation) || 'Собеседник' }}

- {{ formatTimestamp(conversation.updatedAt) }} +
+ {{ formatTimestamp(conversation.updatedAt) }} + + {{ conversation.unreadCount < 100 ? conversation.unreadCount : '99+' }} + +

@@ -69,14 +77,8 @@

- +
- - {{ conversation.unreadCount < 100 ? conversation.unreadCount : '99+' }} -
@@ -209,15 +211,25 @@ const formatLastMessage = (conversation) => { // Обработка событий const handleNewMessageEvent = (message) => { + console.log('[ChatListView] Получено новое сообщение:', { + sender: message.sender, + currentUser: user.value._id, + conversationId: message.conversationId + }); + const conversation = conversations.value.find(c => c._id === message.conversationId); if (conversation) { // Обновляем диалог с новым сообщением conversation.lastMessage = message; conversation.updatedAt = new Date().toISOString(); - // Если сообщение пришло от другого пользователя, увеличиваем счетчик непрочитанных + // ВАЖНО: Увеличиваем счетчик ТОЛЬКО если сообщение пришло от другого пользователя + // И НЕ увеличиваем, если сообщение отправили мы сами if (message.sender !== user.value._id) { conversation.unreadCount = (conversation.unreadCount || 0) + 1; + console.log('[ChatListView] Увеличен счетчик непрочитанных для диалога:', message.conversationId, 'новый счетчик:', conversation.unreadCount); + } else { + console.log('[ChatListView] Сообщение от текущего пользователя, счетчик не изменяется'); } // Сбрасываем статус печати @@ -603,6 +615,38 @@ const getDialogsCountText = (count) => { min-width: 0; /* Для корректной работы text-overflow */ } +/* Контейнер времени и индикатора */ +.timestamp-container { + display: flex; + flex-direction: column; + align-items: flex-end; + gap: 0.25rem; +} + +.timestamp { + font-size: 0.75rem; + color: #6c757d; + flex-shrink: 0; +} + +/* Новый индикатор непрочитанных сообщений под временем */ +.unread-badge-under-time { + background: linear-gradient(135deg, #ff6b6b, #ff5252); + color: white; + font-size: 0.6rem; + font-weight: 700; + border-radius: 10px; + min-width: 18px; + height: 18px; + display: flex; + align-items: center; + justify-content: center; + padding: 0 6px; + box-shadow: 0 2px 6px rgba(255, 107, 107, 0.4); + border: 1.5px solid white; + animation: subtle-pulse 2s ease-in-out infinite; +} + /* Адаптивные стили */ @media (max-width: 576px) { .conversation-card {