This commit is contained in:
Professional 2025-05-24 23:57:34 +07:00
parent a14997b84c
commit 8594a7dd0e
2 changed files with 63 additions and 10 deletions

View File

@ -71,15 +71,24 @@ const fetchConversations = async () => {
// Обработчик новых сообщений // Обработчик новых сообщений
const handleNewMessage = (message) => { const handleNewMessage = (message) => {
// Если сообщение от другого пользователя, увеличиваем счетчик console.log('[App] Получено новое сообщение:', {
sender: message.sender,
currentUser: user.value?._id,
conversationId: message.conversationId
});
// ВАЖНО: Увеличиваем счетчик ТОЛЬКО если сообщение пришло от другого пользователя
if (message.sender !== user.value?._id) { if (message.sender !== user.value?._id) {
const conversation = conversations.value.find(c => c._id === message.conversationId); const conversation = conversations.value.find(c => c._id === message.conversationId);
if (conversation) { if (conversation) {
conversation.unreadCount = (conversation.unreadCount || 0) + 1; conversation.unreadCount = (conversation.unreadCount || 0) + 1;
console.log('[App] Увеличен счетчик в навигации для диалога:', message.conversationId);
} else { } else {
// Если диалога нет в списке, обновим весь список // Если диалога нет в списке, обновим весь список
fetchConversations(); fetchConversations();
} }
} else {
console.log('[App] Сообщение от текущего пользователя, счетчик в навигации не изменяется');
} }
}; };

View File

@ -52,7 +52,15 @@
<div class="conversation-info"> <div class="conversation-info">
<div class="conversation-header"> <div class="conversation-header">
<h3 class="user-name">{{ getOtherParticipantName(conversation) || 'Собеседник' }}</h3> <h3 class="user-name">{{ getOtherParticipantName(conversation) || 'Собеседник' }}</h3>
<div class="timestamp-container">
<span class="timestamp">{{ formatTimestamp(conversation.updatedAt) }}</span> <span class="timestamp">{{ formatTimestamp(conversation.updatedAt) }}</span>
<span
v-if="conversation.unreadCount > 0"
class="unread-badge-under-time"
>
{{ conversation.unreadCount < 100 ? conversation.unreadCount : '99+' }}
</span>
</div>
</div> </div>
<p class="last-message"> <p class="last-message">
<span v-if="conversation.typing" class="typing-text"> <span v-if="conversation.typing" class="typing-text">
@ -69,14 +77,8 @@
</p> </p>
</div> </div>
<!-- Right side: Unread badge and arrow --> <!-- Right side: только стрелка -->
<div class="conversation-right"> <div class="conversation-right">
<span
v-if="conversation.unreadCount > 0"
class="unread-badge"
>
{{ conversation.unreadCount < 100 ? conversation.unreadCount : '99+' }}
</span>
<div class="conversation-arrow"> <div class="conversation-arrow">
<i class="bi-chevron-right"></i> <i class="bi-chevron-right"></i>
</div> </div>
@ -209,15 +211,25 @@ const formatLastMessage = (conversation) => {
// Обработка событий // Обработка событий
const handleNewMessageEvent = (message) => { 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); const conversation = conversations.value.find(c => c._id === message.conversationId);
if (conversation) { if (conversation) {
// Обновляем диалог с новым сообщением // Обновляем диалог с новым сообщением
conversation.lastMessage = message; conversation.lastMessage = message;
conversation.updatedAt = new Date().toISOString(); conversation.updatedAt = new Date().toISOString();
// Если сообщение пришло от другого пользователя, увеличиваем счетчик непрочитанных // ВАЖНО: Увеличиваем счетчик ТОЛЬКО если сообщение пришло от другого пользователя
// И НЕ увеличиваем, если сообщение отправили мы сами
if (message.sender !== user.value._id) { if (message.sender !== user.value._id) {
conversation.unreadCount = (conversation.unreadCount || 0) + 1; 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 */ 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) { @media (max-width: 576px) {
.conversation-card { .conversation-card {