mirror of
https://github.com/avecms/AVE.cms.git
synced 2026-08-01 08:45:44 +00:00
77 lines
5.4 KiB
Twig
77 lines
5.4 KiB
Twig
{% extends '@adminx/main.twig' %}
|
|
{% block title %}Регистрационные удостоверения{% endblock %}
|
|
{% block content %}
|
|
<nav class="breadcrumbs" aria-label="Хлебные крошки"><a href="{{ ADMINX_BASE }}/">Главная</a><i class="ti ti-chevron-right"></i><span>Рег. удостоверения</span></nav>
|
|
|
|
<div class="page-header"><div class="between">
|
|
<div><h1>Регистрационные удостоверения</h1><p class="text-secondary">Реестр РУ Росздравнадзора на медизделия и их сроки действия.</p></div>
|
|
{% if can_manage %}<a class="btn btn-primary" href="{{ ADMINX_BASE }}/registrations/create"><i class="ti ti-plus"></i>Добавить РУ</a>{% endif %}
|
|
</div></div>
|
|
|
|
<div class="ax-summary registrations-summary">
|
|
<div class="card stat-tile"><div class="stat-ico"><i class="ti ti-file-certificate"></i></div><div><div class="stat-val">{{ summary.total }}</div><div class="stat-label">Всего РУ</div></div></div>
|
|
<div class="card stat-tile"><div class="stat-ico is-green"><i class="ti ti-circle-check"></i></div><div><div class="stat-val">{{ summary.active }}</div><div class="stat-label">Действуют</div></div></div>
|
|
<div class="card stat-tile"><div class="stat-ico is-amber"><i class="ti ti-clock-exclamation"></i></div><div><div class="stat-val">{{ summary.expiring }}</div><div class="stat-label">Истекают ≤60 дн.</div></div></div>
|
|
<div class="card stat-tile"><div class="stat-ico is-red"><i class="ti ti-ban"></i></div><div><div class="stat-val">{{ summary.inactive }}</div><div class="stat-label">Приостановлены/аннулированы</div></div></div>
|
|
</div>
|
|
|
|
<div class="card ax-list-card registrations-card">
|
|
<form class="ax-list-head registrations-toolbar" method="get" action="{{ ADMINX_BASE }}/registrations">
|
|
<div class="ax-list-title">
|
|
<span class="icon-tile" style="--tile-bg:var(--teal-100);--tile-fg:var(--teal-600)"><i class="ti ti-file-certificate"></i></span>
|
|
<div><h2>Реестр РУ</h2><p class="text-secondary">Фильтр по статусу, классу риска и поиск по номеру, владельцу, изделию.</p></div>
|
|
</div>
|
|
<div class="registrations-filters">
|
|
<select class="select" name="status" onchange="this.form.submit()">
|
|
<option value="">Все статусы</option>
|
|
{% for code, s in statuses %}<option value="{{ code }}" {{ filters.status == code ? 'selected' : '' }}>{{ s.label }}</option>{% endfor %}
|
|
</select>
|
|
<select class="select" name="risk_class" onchange="this.form.submit()">
|
|
<option value="">Класс риска</option>
|
|
{% for r in risk_classes %}<option value="{{ r }}" {{ filters.risk_class == r ? 'selected' : '' }}>Класс {{ r }}</option>{% endfor %}
|
|
</select>
|
|
<div class="input-icon">
|
|
<i class="ti ti-search"></i>
|
|
<input class="input" type="search" name="q" value="{{ filters.q }}" placeholder="Номер, владелец, изделие…">
|
|
</div>
|
|
<button class="btn btn-secondary" type="submit"><i class="ti ti-filter"></i>Показать</button>
|
|
{% if filters.status or filters.risk_class or filters.q %}<a class="btn btn-ghost" href="{{ ADMINX_BASE }}/registrations">Сбросить</a>{% endif %}
|
|
</div>
|
|
</form>
|
|
|
|
<div class="table-scroll">
|
|
<table class="table table-compact registrations-table">
|
|
<thead><tr>
|
|
<th>Номер РУ</th><th>Медизделие</th><th>Владелец</th>
|
|
<th>Класс</th><th>Выдано</th><th>Срок</th><th>Статус</th><th></th>
|
|
</tr></thead>
|
|
<tbody>
|
|
{% for item in items %}
|
|
<tr data-id="{{ item.id }}">
|
|
<td>
|
|
<a class="registrations-number" href="{{ ADMINX_BASE }}/registrations/{{ item.id }}/edit">
|
|
<b class="mono">{{ item.number }}</b>
|
|
{% if item.scan_url %}<small><i class="ti ti-paperclip"></i> скан прикреплён</small>{% endif %}
|
|
</a>
|
|
</td>
|
|
<td>{{ item.product_name }}</td>
|
|
<td>{{ item.holder ?: '—' }}</td>
|
|
<td>{% if item.risk_class %}<span class="badge badge-gray">{{ item.risk_class }}</span>{% else %}<span class="text-muted">—</span>{% endif %}</td>
|
|
<td>{{ item.issued_label ?: '—' }}</td>
|
|
<td>{% if item.perpetual %}<span class="text-muted">бессрочно</span>{% else %}<span class="{{ item.is_expiring ? 'text-danger' : '' }}">{{ item.valid_label ?: '—' }}</span>{% endif %}</td>
|
|
<td><span class="badge badge-{{ item.status_color }}">{{ item.status_label }}</span></td>
|
|
<td class="ta-right">
|
|
{% if item.scan_url %}<a class="btn btn-ghost btn-icon" href="{{ item.scan_url }}" target="_blank" rel="noopener" data-tooltip="Открыть скан"><i class="ti ti-external-link"></i></a>{% endif %}
|
|
<a class="btn btn-ghost btn-icon" href="{{ ADMINX_BASE }}/registrations/{{ item.id }}/edit" data-tooltip="Открыть"><i class="ti ti-pencil"></i></a>
|
|
{% if can_manage %}<button class="btn btn-ghost btn-icon text-danger" data-reg-delete="{{ item.id }}" data-tooltip="Удалить"><i class="ti ti-trash"></i></button>{% endif %}
|
|
</td>
|
|
</tr>
|
|
{% else %}
|
|
<tr><td colspan="8"><div class="empty-state">{% if filters.status or filters.risk_class or filters.q %}Ничего не найдено по фильтру.{% else %}Удостоверения ещё не добавлены.{% endif %}</div></td></tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
{% endblock %}
|