фикс
This commit is contained in:
parent
49eaf17c34
commit
6138825262
@ -397,6 +397,21 @@ const sendMessage = () => {
|
|||||||
conversationId: conversationId.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);
|
console.log('[ChatView] Отправка сообщения через сокет:', messageData);
|
||||||
sendingMessage.value = true;
|
sendingMessage.value = true;
|
||||||
socket.emit('sendMessage', messageData);
|
socket.emit('sendMessage', messageData);
|
||||||
@ -407,14 +422,29 @@ const sendMessage = () => {
|
|||||||
|
|
||||||
const handleNewMessage = (message) => {
|
const handleNewMessage = (message) => {
|
||||||
console.log('[ChatView] Получено новое сообщение:', message);
|
console.log('[ChatView] Получено новое сообщение:', message);
|
||||||
|
|
||||||
if (message.conversationId === conversationId.value) {
|
if (message.conversationId === conversationId.value) {
|
||||||
|
// Проверяем, является ли это сообщение подтверждением отправки ранее добавленного временного сообщения
|
||||||
|
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);
|
messages.value.push(message);
|
||||||
scrollToBottom();
|
scrollToBottom();
|
||||||
|
|
||||||
|
// Если сообщение от другого пользователя и окно активно - помечаем как прочитанное
|
||||||
if (message.sender?._id !== currentUser.value?._id && document.hasFocus()) {
|
if (message.sender?._id !== currentUser.value?._id && document.hasFocus()) {
|
||||||
markMessagesAsReadOnServer();
|
markMessagesAsReadOnServer();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sendingMessage.value = false;
|
sendingMessage.value = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1192,6 +1222,28 @@ const handleClickOutsideContextMenu = (event) => {
|
|||||||
color: #dc3545;
|
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) {
|
@media (max-width: 576px) {
|
||||||
.message-wrapper {
|
.message-wrapper {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user