Files
customerTicket/templates/tickets/staff_magic_audit.html
T
2026-09-10 11:34:19 +03:30

7 lines
4.4 KiB
HTML

{% extends 'base.html' %}
{% block title %}{{ page_title }}{% endblock %}
{% block content %}<div class="operations-page operations-audit">
<section class="staff-page-head"><div><p class="eyebrow">امنیت و ردپای دسترسی</p><h1>ممیزی لینک‌های جادویی</h1><p>{% if global_access %}نمای مدیریتی همه واحدها{% else %}نمای محدود به واحدهای مجاز شما{% endif %}؛ زمان، سازنده، گیرنده، IP و دستگاه هر بازدید ثبت می‌شود.</p></div></section>
<section class="ticket-stream"><form method="get" class="operations-toolbar"><input name="q" value="{{ request.GET.q }}" placeholder="شماره تیکت، نام یا موبایل"><select name="unit"><option value="">همه واحدهای مجاز</option>{% for unit in units %}<option value="{{ unit.pk }}" {% if request.GET.unit == unit.pk|stringformat:'s' %}selected{% endif %}>{{ unit }}</option>{% endfor %}</select><select name="status"><option value="">همه وضعیت‌ها</option><option value="active" {% if request.GET.status == 'active' %}selected{% endif %}>فعال</option><option value="opened" {% if request.GET.status == 'opened' %}selected{% endif %}>مشاهده‌شده</option><option value="unopened" {% if request.GET.status == 'unopened' %}selected{% endif %}>بازنشده</option><option value="expired" {% if request.GET.status == 'expired' %}selected{% endif %}>منقضی</option><option value="revoked" {% if request.GET.status == 'revoked' %}selected{% endif %}>باطل‌شده</option></select><input type="date" name="created_from" value="{{ request.GET.created_from }}" aria-label="از تاریخ"><input type="date" name="created_to" value="{{ request.GET.created_to }}" aria-label="تا تاریخ"><button type="submit">اعمال فیلتر</button></form><div class="table-scroll"><table><thead><tr><th>ایجاد</th><th>تیکت / واحد</th><th>سازنده</th><th>گیرنده</th><th>اعتبار</th><th>بازدیدها</th><th>آخرین IP / دستگاه</th><th>اقدام</th></tr></thead><tbody>{% for link in links %}<tr><td>{{ link.created_at|date:'Y/m/d H:i:s' }}</td><td><a href="{% url 'staff_tickets:detail' link.ticket.public_id %}">{{ link.ticket.ticket_number }}</a><small class="table-subtitle">{{ link.created_unit|default:'بدون واحد' }}</small></td><td>{{ link.created_by|default:'سیستم' }}</td><td>{{ link.recipient_name|default:'—' }}<small class="table-subtitle" dir="ltr">{{ link.recipient_mobile }}</small></td><td>{% if link.revoked_at %}<span class="status-pill is-danger">لغوشده</span>{% elif link.expires_at < now %}<span class="status-pill is-muted">منقضی</span>{% else %}<span class="status-pill is-success">فعال</span>{% endif %}<small class="table-subtitle">تا {{ link.expires_at|date:'Y/m/d H:i' }}</small></td><td><b class="view-counter">{{ link.view_count }}</b>{% for hit in link.access_logs.all|slice:':3' %}<small class="table-subtitle">{{ hit.opened_at|date:'m/d H:i:s' }} · {{ hit.ip_address|default:'IP نامشخص' }}</small>{% endfor %}</td><td dir="ltr">{{ link.last_used_ip|default:'—' }}<small class="table-subtitle">{{ link.last_user_agent|truncatechars:55|default:'—' }}</small></td><td>{% if can_revoke and not link.revoked_at and link.expires_at > now %}<form method="post" action="{% url 'staff_tickets:magic_revoke' link.pk %}">{% csrf_token %}<button type="submit">ابطال فوری</button></form>{% else %}—{% endif %}</td></tr>{% empty %}<tr><td colspan="8" class="empty-state">لینکی مطابق جست‌وجو وجود ندارد.</td></tr>{% endfor %}</tbody></table></div>{% if page.paginator.num_pages > 1 %}<nav class="queue-switcher" aria-label="صفحه‌بندی">{% if page.has_previous %}<a href="?page={{ page.previous_page_number }}&q={{ request.GET.q|urlencode }}&unit={{ request.GET.unit }}&status={{ request.GET.status }}&created_from={{ request.GET.created_from }}&created_to={{ request.GET.created_to }}">صفحه قبل</a>{% endif %}<span>صفحه {{ page.number }} از {{ page.paginator.num_pages }}</span>{% if page.has_next %}<a href="?page={{ page.next_page_number }}&q={{ request.GET.q|urlencode }}&unit={{ request.GET.unit }}&status={{ request.GET.status }}&created_from={{ request.GET.created_from }}&created_to={{ request.GET.created_to }}">صفحه بعد</a>{% endif %}</nav>{% endif %}</section></div>
{% endblock %}