- Замена всех CDN зависимостей на локальные файлы: * Bootstrap 5.3.3 (CSS + JS) * Bootstrap Icons 1.11.3 (CSS + шрифты woff/woff2) * FullCalendar 6.1.8 (JS + локали) * Cropper.js 1.6.1 * emoji-picker-element 1.21.3 - Web Push Notifications: * VAPID ключи настроены в settings.py * Service Worker (sw.js) в корне backend/ * API endpoints: /api/v1/notifications/push/ * Auto-request permission при загрузке страницы * Simplified subscribe logic (Phase 1 refactor) * resetEverything() для восстановления после ошибок - Документация: * backend/docs/guides/WEB_PUSH_QUICK_TEST.md * backend/docs/guides/FIX_NO_PUSH_SUBSCRIPTIONS.md * backend/docs/troubleshooting/WEB_PUSH_OFFLINE_ISSUE.md - Обновлено 10 шаблонов для использования local vendor - Устранены проблемы с CORS и integrity checks - Все иконки Bootstrap Icons теперь отображаются корректно
82 lines
3.1 KiB
HTML
82 lines
3.1 KiB
HTML
{% load static django_bootstrap5 %}
|
||
|
||
{% block content %}
|
||
<div class="container">
|
||
<div class="d-flex align-items-center gap-3 mb-4">
|
||
<i class="bi-megaphone display-6 text-primary"></i>
|
||
<h2 class="mb-0 fw-bold" style="letter-spacing:0.5px;">
|
||
Новости отдела:
|
||
</h2>
|
||
</div>
|
||
|
||
<div class="mb-3">
|
||
<a href="{% url 'feed:post_create' %}?department={{ department.pk }}" class="btn btn-primary">
|
||
<i class="bi-plus-circle"></i> Новая публикация
|
||
</a>
|
||
</div>
|
||
|
||
{% if new_employees %}
|
||
<div class="alert alert-light p-3 mb-4 border rounded-3">
|
||
<div class="fw-semibold mb-2">Новые сотрудники отдела:</div>
|
||
<div class="d-flex gap-2 flex-wrap">
|
||
{% for emp in new_employees %}
|
||
<a href="{% url 'employees:employee_detail' emp.pk %}" title="{{ emp.get_full_name }}">
|
||
{% if emp.avatar %}
|
||
<img src="{{ emp.avatar.url }}" class="rounded-circle border" style="width: 40px; height: 40px; object-fit: cover;">
|
||
{% else %}
|
||
<span class="bi-person-circle fs-2 text-secondary"></span>
|
||
{% endif %}
|
||
</a>
|
||
{% endfor %}
|
||
</div>
|
||
</div>
|
||
{% endif %}
|
||
|
||
{% if posts %}
|
||
<div class="row g-4">
|
||
{% for post in posts %}
|
||
<div class="col-12">
|
||
<div class="card shadow-sm h-100 border-0">
|
||
{% if post.image %}
|
||
<img src="{{ post.image.url }}" class="card-img-top"
|
||
alt="{{ post.title }}"
|
||
style="max-height: 240px; object-fit: cover; border-top-left-radius:.5rem; border-top-right-radius:.5rem;">
|
||
{% endif %}
|
||
<div class="card-body">
|
||
<h5 class="card-title mb-2 d-flex align-items-center gap-2">
|
||
{{ post.title }}
|
||
{% if post.pinned %}
|
||
<span class="badge bg-warning text-dark"></span>
|
||
{% endif %}
|
||
{% if department.head == user %}
|
||
<a href="{% url 'feed:pin_post' post.pk %}" class="btn btn-sm btn-outline-warning ms-2">
|
||
{% if post.pinned %} Открепить {% else %} Закрепить {% endif %}
|
||
</a>
|
||
{% endif %}
|
||
</h5>
|
||
<p class="card-text mb-2">{{ post.body|truncatewords:32 }}</p>
|
||
<div class="small text-muted mb-2">
|
||
Автор: {{ post.author.get_full_name|default:post.author.username }} • {{ post.created_at|date:"d.m.Y H:i" }}
|
||
</div>
|
||
<a href="{% url 'feed:post_detail' post.pk %}" class="btn btn-sm btn-outline-primary rounded-pill px-3">
|
||
Подробнее
|
||
</a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
{% endfor %}
|
||
</div>
|
||
{% else %}
|
||
<div class="alert alert-info shadow-sm mt-4 rounded-3">
|
||
В отделе пока нет новостей.
|
||
</div>
|
||
{% endif %}
|
||
</div>
|
||
{% endblock %}
|
||
|
||
{% block extra_js %}
|
||
{{ block.super }}
|
||
<!-- Emoji Picker Library -->
|
||
<script type="module" src="{% static 'vendor/emoji-picker/index.js' %}"></script>
|
||
{% endblock %}
|