Files
ACORE/templates/pages/user-group-access.html
T
lokses 8db8f59d2f core: индивидуальные гранты отчётов в группах пользователей
Выдача/отзыв права на отчёты по всем отделам конкретному сотруднику
из портала управления группами.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-10 13:17:41 +03:00

104 lines
7.6 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 i18n %}
<div class="page-content">
<div style="display:flex; align-items:flex-start; justify-content:space-between; gap:1rem; margin-bottom:1.25rem; flex-wrap:wrap;">
<div>
<div style="font-size:0.75rem; color:var(--color-muted-foreground); margin-bottom:0.35rem;">
<a href="{% url 'user_groups' %}"
hx-get="{% url 'user_groups' %}" hx-target="#main-content" hx-push-url="{% url 'user_groups' %}"
hx-indicator="#loader"
style="color:inherit; text-decoration:none;">{% trans "Группы пользователей" %}</a>
<span> › </span><span>{{ group.name }}</span>
</div>
<h1 style="font-size:1.25rem; font-weight:500; color:var(--color-foreground);">
{% trans "Сводная таблица доступа" %} › {{ group.name }}
</h1>
</div>
<form method="post" action="{% url 'user_group_access_copy' group.id %}"
style="display:flex; gap:0.5rem; align-items:center; flex-wrap:wrap; margin:0;">
{% csrf_token %}
<select name="target_group_id" required
style="font-size:0.8125rem; padding:0.35rem 0.5rem; border-radius:0.375rem; border:1px solid var(--color-border); background:var(--color-card); color:var(--color-foreground);">
<option value="">{% trans "Копировать в…" %}</option>
{% for og in other_groups %}
<option value="{{ og.id }}">{{ og.name }}</option>
{% endfor %}
</select>
<button type="submit" class="btn btn-primary" style="font-size:0.8125rem;">{% trans "Копировать доступ" %}</button>
</form>
</div>
{% if ug_message %}
<div style="margin-bottom:1rem; padding:0.65rem 0.9rem; border-radius:0.5rem; background:color-mix(in srgb, #16a34a 12%, var(--color-card)); border:1px solid color-mix(in srgb, #16a34a 30%, var(--color-border)); font-size:0.8125rem;">{{ ug_message }}</div>
{% endif %}
{% if ug_error %}
<div style="margin-bottom:1rem; padding:0.65rem 0.9rem; border-radius:0.5rem; background:color-mix(in srgb, #dc2626 12%, var(--color-card)); border:1px solid color-mix(in srgb, #dc2626 30%, var(--color-border)); font-size:0.8125rem;">{{ ug_error }}</div>
{% endif %}
<form method="post" action="{% url 'user_group_access_save' group.id %}" id="access-matrix-form">
{% csrf_token %}
<div style="background:var(--color-card); border-radius:0.75rem; border:1px solid var(--color-border); overflow:hidden;">
<table style="width:100%; border-collapse:collapse; font-size:0.8125rem;">
<thead>
<tr style="background:var(--color-muted);">
<th style="padding:0.625rem 1rem; text-align:left; font-size:0.7rem; text-transform:uppercase; color:var(--color-muted-foreground);">{% trans "Сущность" %}</th>
<th style="padding:0.625rem 1rem; text-align:left; font-size:0.7rem; text-transform:uppercase; color:var(--color-muted-foreground); width:14rem;">{% trans "Просмотр" %}</th>
<th style="padding:0.625rem 1rem; text-align:left; font-size:0.7rem; text-transform:uppercase; color:var(--color-muted-foreground);">{% trans "Доступ" %}</th>
</tr>
</thead>
<tbody>
{% for row in matrix_rows %}
<tr class="tr-hover access-matrix-row" style="border-bottom:1px solid var(--color-border);" data-section="{{ row.key }}">
<td style="padding:0.75rem 1rem; color:var(--color-foreground); font-weight:500;">{{ row.label }}</td>
<td style="padding:0.65rem 1rem;">
<select name="view_{{ row.key }}" class="access-view-select"
style="width:100%; font-size:0.8125rem; padding:0.35rem 0.5rem; border-radius:0.375rem; border:1px solid var(--color-border); background:var(--color-card); color:var(--color-foreground);">
<option value="0" {% if not row.can_view %}selected{% endif %}>{% trans "Нет" %}</option>
<option value="1" {% if row.can_view %}selected{% endif %}>{% trans "Просмотр" %}</option>
</select>
</td>
<td style="padding:0.65rem 1rem;">
<div class="access-cud" style="display:flex; flex-wrap:wrap; gap:0.75rem 1.25rem; {% if not row.can_view %}opacity:0.45; pointer-events:none;{% endif %}">
<label style="display:inline-flex; align-items:center; gap:0.35rem; cursor:pointer;">
<input type="checkbox" name="create_{{ row.key }}" value="1" {% if row.can_create %}checked{% endif %}>
<span>{% trans "Создать" %}</span>
</label>
<label style="display:inline-flex; align-items:center; gap:0.35rem; cursor:pointer;">
<input type="checkbox" name="update_{{ row.key }}" value="1" {% if row.can_update %}checked{% endif %}>
<span>{% trans "Обновить" %}</span>
</label>
<label style="display:inline-flex; align-items:center; gap:0.35rem; cursor:pointer;">
<input type="checkbox" name="delete_{{ row.key }}" value="1" {% if row.can_delete %}checked{% endif %}>
<span>{% trans "Удалить" %}</span>
</label>
</div>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<div style="margin-top:1rem; background:var(--color-card); border-radius:0.75rem; border:1px solid var(--color-border); padding:1rem 1.25rem;">
<div style="font-size:0.7rem; text-transform:uppercase; letter-spacing:0.04em; color:var(--color-muted-foreground); margin-bottom:0.5rem;">{% trans "Отчёты" %}</div>
<label style="display:flex; align-items:flex-start; gap:0.6rem; cursor:pointer; font-size:0.875rem;">
<input type="checkbox" name="view_all_reports" value="1" {% if view_all_reports %}checked{% endif %} style="margin-top:0.2rem;">
<span>
<strong>{% trans "Видеть отчёты всех отделов" %}</strong>
<span style="display:block; font-size:0.8125rem; color:var(--color-muted-foreground); margin-top:0.2rem;">
{% trans "После публикации руководителем отдела. Без этой галочки сотрудник видит только отчёты своего отдела." %}
</span>
</span>
</label>
</div>
<div style="display:flex; gap:0.75rem; margin-top:1.25rem; flex-wrap:wrap;">
<a href="{% url 'user_groups' %}"
hx-get="{% url 'user_groups' %}" hx-target="#main-content" hx-push-url="{% url 'user_groups' %}"
hx-indicator="#loader"
class="btn btn-secondary" style="text-decoration:none; border:1px solid var(--color-border);">{% trans "Назад" %}</a>
<button type="submit" class="btn btn-primary">{% trans "Сохранить" %}</button>
</div>
</form>
</div>