From 2ebacf91ba620c384f97b5eb72a4f0d940729078 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: Sun, 30 Nov 2025 11:29:54 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=BB=D1=83=D1=87=D1=88=D0=B5=D0=BD?= =?UTF-8?q?=D0=B0=20=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=82=D1=83=D1=80=D0=B0?= =?UTF-8?q?=20=D1=81=D0=BF=D0=B8=D1=81=D0=BA=D0=BE=D0=B2=20=D1=87=D0=B0?= =?UTF-8?q?=D1=82=D0=BE=D0=B2:=20=D0=BA=D1=80=D1=83=D0=B3=D0=BB=D1=8B?= =?UTF-8?q?=D0=B5=20=D0=B0=D0=B2=D0=B0=D1=82=D0=B0=D1=80=D1=8B,=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6=D0=BA=D0=B0=20=D0=B8=D0=B7?= =?UTF-8?q?=D0=BE=D0=B1=D1=80=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8=D0=B9,=20?= =?UTF-8?q?=D0=BD=D0=B0=D0=B7=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=BE=D1=82?= =?UTF-8?q?=D0=B4=D0=B5=D0=BB=D0=BE=D0=B2,=20badge=20'=D0=9E=D1=81=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2=D0=BD=D0=BE=D0=B9'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../commands/update_department_chat_names.py | 41 ++++++++++ backend/communications/signals.py | 7 +- .../css/components/chat-list-enhanced.css | 2 +- .../templates/communications/chat_list.html | 75 +++++++++++++++---- 4 files changed, 110 insertions(+), 15 deletions(-) create mode 100644 backend/communications/management/commands/update_department_chat_names.py diff --git a/backend/communications/management/commands/update_department_chat_names.py b/backend/communications/management/commands/update_department_chat_names.py new file mode 100644 index 00000000..9cb0099b --- /dev/null +++ b/backend/communications/management/commands/update_department_chat_names.py @@ -0,0 +1,41 @@ +""" +Management command для обновления названий основных чатов отделов +""" +from django.core.management.base import BaseCommand +from communications.models import Chat + + +class Command(BaseCommand): + help = 'Обновляет названия основных чатов отделов' + + def handle(self, *args, **options): + # Находим все основные чаты отделов без названия + chats = Chat.objects.filter( + type='department', + is_main=True + ).select_related('department') + + updated = 0 + for chat in chats: + if not chat.name or chat.name == '': + old_name = chat.name or '(пусто)' + chat.name = f"Основной чат {chat.department.name}" + chat.save() + self.stdout.write( + self.style.SUCCESS( + f'✓ Обновлен чат ID {chat.id}: ' + f'"{old_name}" → "{chat.name}"' + ) + ) + updated += 1 + + if updated == 0: + self.stdout.write( + self.style.WARNING('Нет чатов для обновления') + ) + else: + self.stdout.write( + self.style.SUCCESS( + f'\n✓ Обновлено названий: {updated}' + ) + ) diff --git a/backend/communications/signals.py b/backend/communications/signals.py index bfcf20ca..429bc6cb 100644 --- a/backend/communications/signals.py +++ b/backend/communications/signals.py @@ -16,7 +16,12 @@ def create_main_department_chat(sender, instance, created, **kwargs): if not Chat.objects.filter( type="department", department=instance, is_main=True ).exists(): - Chat.objects.create(type="department", department=instance, is_main=True) + Chat.objects.create( + type="department", + department=instance, + is_main=True, + name=f"Основной чат {instance.name}" + ) @receiver(pre_save, sender='communications.Chat') diff --git a/backend/static/css/components/chat-list-enhanced.css b/backend/static/css/components/chat-list-enhanced.css index e892b86f..7217bf4d 100644 --- a/backend/static/css/components/chat-list-enhanced.css +++ b/backend/static/css/components/chat-list-enhanced.css @@ -86,7 +86,7 @@ .card-icon img { width: 44px; height: 44px; - border-radius: 8px; /* Овальная форма вместо круглой */ + border-radius: 50%; /* Круглая форма */ object-fit: cover; border: 2px solid var(--bs-border-color); } diff --git a/backend/templates/communications/chat_list.html b/backend/templates/communications/chat_list.html index 6ce2bb28..ce03c72c 100644 --- a/backend/templates/communications/chat_list.html +++ b/backend/templates/communications/chat_list.html @@ -101,6 +101,11 @@
{{ chat.name|default:"Глобальный чат" }} + {% if chat.is_main %} + + Основной + + {% endif %} {{ chat.messages.count }} @@ -129,6 +134,11 @@
@@ -157,12 +167,26 @@ data-chat-id="{{ chat.pk }}" data-type="department" data-last-ts="{% if last %}{{ last.created_at|date:'U' }}000{% else %}{{ chat.created_at|date:'U' }}000{% endif %}" - data-haystack="{{ chat.department.name }}"> -
+ data-haystack="{{ chat.name|default:'Основной чат' }} {{ chat.department.name }}"> + + {# Аватар чата отдела или иконка #} +
+ {% if chat.avatar %} + {{ chat.name|default:'Основной чат' }} + {% else %} + + {% endif %} +
+
+ {# Название отдела таким же шрифтом как последнее сообщение #} + + {{ chat.department.name }} + {% if last %} - {{ last.created_at|date:"d.m.Y H:i" }} · + · {{ last.created_at|date:"d.m.Y H:i" }} · {{ last.author.get_full_name|default:last.author.username }}: - {{ last.content|default:"(вложение)"|truncatechars:120 }} + {{ last.content|default:"(вложение)"|truncatechars:100 }} {% else %} - Сообщений пока нет. + · Сообщений пока нет {% endif %}
@@ -191,6 +219,11 @@ @@ -220,12 +253,22 @@ data-type="private" data-last-ts="{% if last %}{{ last.created_at|date:'U' }}000{% else %}{{ chat.created_at|date:'U' }}000{% endif %}" data-haystack="{% for u in chat.participants.all %}{% if u != user %} {{ u.get_full_name|default:u.username }}{% endif %}{% endfor %}"> + + {# Аватар собеседника #}
{% with p0=chat.participants.all.0 p1=chat.participants.all.1 %} - {% if p0 and p0 != user and p0.avatar %} - {{ p0.get_full_name|default:p0.username }} - {% elif p1 and p1 != user and p1.avatar %} - {{ p1.get_full_name|default:p1.username }} + {% if p0 and p0 != user %} + {% if p0.avatar %} + {{ p0.get_full_name|default:p0.username }} + {% else %} + + {% endif %} + {% elif p1 and p1 != user %} + {% if p1.avatar %} + {{ p1.get_full_name|default:p1.username }} + {% else %} + + {% endif %} {% else %} {% endif %} @@ -317,13 +360,19 @@ data-unread>+{{ chat.unread_count|default:0 }}
+ {# Описание группы если есть #} + {% if chat.description %} + + {{ chat.description|truncatechars:80 }} + + {% endif %} {% if last %} - {{ last.created_at|date:"d.m.Y H:i" }} · + {% if chat.description %}
{% endif %}{{ last.created_at|date:"d.m.Y H:i" }} · {{ last.author.get_full_name|default:last.author.username }}: - {{ last.content|default:"(вложение)"|truncatechars:120 }} + {{ last.content|default:"(вложение)"|truncatechars:100 }}
- {% else %} + {% elif not chat.description %} Сообщений пока нет. {% endif %}