Corp/backend/templates/feed/department_feed.html
Игорь Надеин 7838a55ef4 feat: Replace CDN with local vendor libraries + complete Web Push setup
- Замена всех 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 теперь отображаются корректно
2026-01-06 09:22:16 +03:00

82 lines
3.1 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{% 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 %}