фикс
This commit is contained in:
parent
49eaf17c34
commit
6138825262
@ -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 {
|
||||
|
Loading…
x
Reference in New Issue
Block a user