This commit is contained in:
Professional 2025-05-24 02:39:39 +07:00
parent 49eaf17c34
commit 6138825262

View File

@ -396,6 +396,21 @@ const sendMessage = () => {
text: newMessageText.value,
conversationId: conversationId.value,
};
// Создаем временное сообщение с локальным ID и статусом "отправляется"
const tempMessage = {
_id: `temp-${Date.now()}`,
tempId: `temp-${Date.now()}`, // используем tempId для идентификации временного сообщения
conversationId: conversationId.value,
sender: currentUser.value, // Используем полный объект текущего пользователя
text: newMessageText.value,
createdAt: new Date(),
status: 'sending' // Устанавливаем начальный статус "отправляется"
};
// Добавляем временное сообщение в массив
messages.value.push(tempMessage);
scrollToBottom();
console.log('[ChatView] Отправка сообщения через сокет:', messageData);
sendingMessage.value = true;
@ -407,15 +422,30 @@ const sendMessage = () => {
const handleNewMessage = (message) => {
console.log('[ChatView] Получено новое сообщение:', message);
if (message.conversationId === conversationId.value) {
messages.value.push(message);
// Проверяем, является ли это сообщение подтверждением отправки ранее добавленного временного сообщения
if (message.sender?._id === currentUser.value?._id) {
// Находим и удаляем все временные сообщения (они могут накапливаться при быстрой отправке)
messages.value = messages.value.filter(msg => !msg.tempId);
}
// Проверяем, есть ли поле status в сообщении, если нет - добавляем
if (!message.status) {
message.status = 'delivered';
}
// Добавляем полученное сообщение
messages.value.push(message);
scrollToBottom();
// Если сообщение от другого пользователя и окно активно - помечаем как прочитанное
if (message.sender?._id !== currentUser.value?._id && document.hasFocus()) {
markMessagesAsReadOnServer();
}
}
sendingMessage.value = false;
sendingMessage.value = false;
};
const handleMessageDeletedBySocket = (data) => {
@ -1192,6 +1222,28 @@ const handleClickOutsideContextMenu = (event) => {
color: #dc3545;
}
/* Индикаторы статуса сообщений */
.message-status {
font-size: 0.8rem;
display: flex;
align-items: center;
opacity: 0.9;
color: inherit;
}
.message-status i {
font-size: 12px; /* Уменьшаем размер иконок статуса */
}
/* Стили для разных статусов */
.bi-clock {
opacity: 0.8;
}
.bi-check2-all {
color: #4dabf7; /* Синий цвет для прочитанных сообщений */
}
/* Адаптивные стили */
@media (max-width: 576px) {
.message-wrapper {