diff --git a/backend/static/css/components/chat-detail.css b/backend/static/css/components/chat-detail.css index 72605852..4bfcfcae 100644 --- a/backend/static/css/components/chat-detail.css +++ b/backend/static/css/components/chat-detail.css @@ -270,10 +270,20 @@ main.main { } .message-attachments .text-secondary { + color: inherit; opacity: 0.7; } -.bubble-me .message-attachments .text-primary { +.bubble-me .message-attachments .text-secondary { + color: rgba(255, 255, 255, 0.9) !important; + opacity: 1; +} + +.bubble-me .message-attachments .fw-semibold { + color: rgba(255, 255, 255, 0.95) !important; +} + +.bubble-me .message-attachments i { color: rgba(255, 255, 255, 0.9) !important; } diff --git a/backend/templates/communications/chat_detail.html b/backend/templates/communications/chat_detail.html index 57f1eed6..d6793efe 100644 --- a/backend/templates/communications/chat_detail.html +++ b/backend/templates/communications/chat_detail.html @@ -148,7 +148,7 @@
Собеседник печатает…
-
+ {% csrf_token %}
@@ -354,62 +354,56 @@ document.addEventListener('DOMContentLoaded', function() { return; } - // Если есть вложения, отправляем через API - if (selectedFiles.length > 0) { - const formData = new FormData(); - // Если текст пустой, отправляем пустую строку - formData.append('content', content || ''); - - selectedFiles.forEach((file, index) => { - formData.append(`file_${index}`, file); + // Всегда отправляем через API (с файлами или без) + const formData = new FormData(); + formData.append('content', content || ''); + + selectedFiles.forEach((file, index) => { + formData.append(`file_${index}`, file); + }); + + formData.append('chat_id', '{{ chat.id }}'); + + const csrftoken = getCookie('csrftoken'); + console.log('CSRF token:', csrftoken); + + if (!csrftoken) { + console.error('CSRF token not found in cookies!'); + alert('Ошибка: CSRF токен не найден. Обновите страницу.'); + return; + } + + try { + const response = await fetch('/api/v1/communications/upload-message/', { + method: 'POST', + body: formData, + headers: { + 'X-CSRFToken': csrftoken + } }); - formData.append('chat_id', '{{ chat.id }}'); + const result = await response.json(); - const csrftoken = getCookie('csrftoken'); - console.log('CSRF token:', csrftoken); - - if (!csrftoken) { - console.error('CSRF token not found in cookies!'); - alert('Ошибка: CSRF токен не найден. Обновите страницу.'); - return; - } - - try { - const response = await fetch('/api/v1/communications/upload-message/', { - method: 'POST', - body: formData, - headers: { - 'X-CSRFToken': csrftoken - } - }); + if (result.ok) { + console.log('Сообщение отправлено:', result); - const result = await response.json(); + // Очищаем форму + textarea.value = ''; + selectedFiles = []; + updatePreview(); + documentInput.value = ''; + imageInput.value = ''; + cameraInput.value = ''; + audioInput.value = ''; - if (result.ok) { - console.log('Сообщение с файлами отправлено:', result); - - // Очищаем форму - textarea.value = ''; - selectedFiles = []; - updatePreview(); - documentInput.value = ''; - imageInput.value = ''; - cameraInput.value = ''; - audioInput.value = ''; - - // Отображаем сообщение через WebSocket будет автоматически - } else { - console.error('Ошибка отправки:', result.error); - alert('Ошибка при отправке файлов: ' + result.error); - } - } catch (error) { - console.error('Ошибка отправки файлов:', error); - alert('Ошибка сети при отправке файлов'); + // Отображаем сообщение через WebSocket будет автоматически + } else { + console.error('Ошибка отправки:', result.error); + alert('Ошибка при отправке: ' + result.error); } - } else if (content) { - // Отправляем только текст (стандартное поведение формы) - chatForm.submit(); + } catch (error) { + console.error('Ошибка отправки:', error); + alert('Ошибка сети при отправке сообщения'); } }); });