From 022199b8a28bbab4daa32eed2bd155c7f232c316 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=98=D0=B3=D0=BE=D1=80=D1=8C=20=D0=9D=D0=B0=D0=B4=D0=B5?= =?UTF-8?q?=D0=B8=D0=BD?= Date: Fri, 28 Nov 2025 08:19:15 +0300 Subject: [PATCH] =?UTF-8?q?Fix:=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=B2=D0=B8=D0=B4=D0=B5=D0=BE=20=D0=B8=20=D1=81?= =?UTF-8?q?=D1=82=D0=B8=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20=D0=B2?= =?UTF-8?q?=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Исправление видео: - Видео элементы создаются с уникальными ID - src устанавливается после добавления в DOM через requestAnimationFrame - Используется preload='auto' вместо 'metadata' для немедленной загрузки - video.load() вызывается после установки src Стилизация вложений: - Убран bg-light у ссылок на файлы - Добавлены стили .message-attachments для прозрачного фона - Для bubble-me используется rgba(255,255,255,0.15) фон - Для обычных сообщений используется rgba(0,0,0,0.05) фон - Добавлены hover эффекты - Файлы теперь соответствуют цвету сообщения --- backend/static/css/components/chat-detail.css | 37 ++++++++++++ .../js/components/chatMessageTemplates.js | 58 +++++++------------ .../templates/communications/chat_detail.html | 2 +- 3 files changed, 58 insertions(+), 39 deletions(-) diff --git a/backend/static/css/components/chat-detail.css b/backend/static/css/components/chat-detail.css index d2f67482..878432c3 100644 --- a/backend/static/css/components/chat-detail.css +++ b/backend/static/css/components/chat-detail.css @@ -231,6 +231,43 @@ main.main { opacity: 1; } +/* Вложения в сообщениях */ +.message-attachments { + margin-top: 8px; +} + +.message-attachments .attachment-item { + background: transparent !important; + padding: 0; + margin-bottom: 8px; +} + +.message-attachments a { + background: rgba(0, 0, 0, 0.05); + border: 1px solid rgba(0, 0, 0, 0.08); + transition: all 0.2s ease; +} + +.bubble-me .message-attachments a { + background: rgba(255, 255, 255, 0.15); + border-color: rgba(255, 255, 255, 0.2); +} + +.message-attachments a:hover { + background: rgba(0, 0, 0, 0.08); +} + +.bubble-me .message-attachments a:hover { + background: rgba(255, 255, 255, 0.25); +} + +.message-attachments video, +.message-attachments img, +.message-attachments audio { + max-width: 100%; + border-radius: 8px; +} + /* Выпадающее меню вложений */ .dropdown-menu { min-width: 200px; diff --git a/backend/static/js/components/chatMessageTemplates.js b/backend/static/js/components/chatMessageTemplates.js index 3c5b508c..3417e77b 100644 --- a/backend/static/js/components/chatMessageTemplates.js +++ b/backend/static/js/components/chatMessageTemplates.js @@ -155,9 +155,10 @@ export function createMessageElement(msg, options = {}) { // Формирование вложений let attachmentsHTML = ''; + let videoIds = []; if (msg.has_attachments && msg.attachments && msg.attachments.length > 0) { attachmentsHTML = '
'; - msg.attachments.forEach(att => { + msg.attachments.forEach((att, index) => { attachmentsHTML += '
'; if (att.file_type === 'image') { @@ -175,9 +176,11 @@ export function createMessageElement(msg, options = {}) {
${esc(att.file_name)}
`; } else if (att.file_type === 'video') { + const videoId = `video_${Date.now()}_${index}`; + videoIds.push({ id: videoId, url: att.file_url, mime: att.mime_type }); attachmentsHTML += ` -