Files
ave-cms/adminx/modules/Requests/view/native-audit.twig
T
2026-07-27 12:58:44 +03:00

27 lines
8.2 KiB
Twig
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.
{% extends '@adminx/main.twig' %}
{% block title %}Проверка Native · Запросы{% endblock %}
{% block content %}
<nav class="breadcrumbs" aria-label="Хлебные крошки"><a href="{{ ADMINX_BASE }}/">Главная</a><i class="ti ti-chevron-right"></i><a href="{{ ADMINX_BASE }}/requests">Запросы</a><i class="ti ti-chevron-right"></i><span>Проверка Native</span></nav>
<div class="page-header"><div class="between"><div><h1>Проверка Native</h1><p class="text-secondary">Сравнение старой и новой выборки без изменения шаблонов сайта</p></div><div class="cluster"><a class="btn btn-ghost" href="{{ ADMINX_BASE }}/requests"><i class="ti ti-arrow-left"></i>К запросам</a>{% if can_manage %}<button class="btn btn-secondary" type="button" data-native-audit-rollback><i class="ti ti-history"></i>Вернуть Legacy</button><button class="btn btn-primary" type="button" data-native-audit-all><i class="ti ti-player-play"></i>Проверить все</button>{% endif %}</div></div></div>
<div class="ax-summary request-audit-summary">
<div class="card stat-tile"><div class="stat-ico" style="background:var(--color-cyan-soft);color:var(--color-cyan)"><i class="ti ti-list-search"></i></div><div><div class="stat-val" data-audit-stat="total">{{ stats.total }}</div><div class="stat-label">Запросов</div></div></div>
<div class="card stat-tile"><div class="stat-ico is-amber"><i class="ti ti-code"></i></div><div><div class="stat-val" data-audit-stat="eligible">{{ stats.eligible }}</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" data-audit-stat="verified">{{ stats.verified }}</div><div class="stat-label">Подтверждены</div></div></div>
<div class="card stat-tile"><div class="stat-ico" style="background:var(--color-violet-soft);color:var(--color-violet)"><i class="ti ti-bolt"></i></div><div><div class="stat-val" data-audit-stat="native">{{ stats.native }}</div><div class="stat-label">В Native</div></div></div>
</div>
<section class="request-audit" data-native-audit-page data-base="{{ ADMINX_BASE }}">
<div class="request-audit-note"><span class="icon-tile" style="--tile-bg:var(--blue-100);--tile-fg:var(--blue-600)"><i class="ti ti-shield-check"></i></span><div><h2>Публичный сайт остаётся на Legacy во время проверки</h2><p>Команда «Проверить все» сначала включает Shadow, затем последовательно сравнивает количество, ID и порядок. Native включается отдельной кнопкой только для точных совпадений.</p></div></div>
{% if can_manage %}<div class="request-audit-progress" data-native-audit-progress hidden><div><b data-native-audit-progress-title>Подготовка</b><span data-native-audit-progress-copy>0 из {{ stats.total }}</span></div><div class="request-audit-progress-track"><span data-native-audit-progress-bar style="width:0%"></span></div></div>{% endif %}
<div class="section-header ax-panel-header requests-panel-header request-audit-header"><div class="section-icon"><i class="ti ti-shield-search"></i></div><div><div class="section-eyebrow">Совместимость</div><h2>Результаты проверки</h2><p class="section-desc">Причины Legacy сохраняются рядом с запросом и не блокируют остальные представления.</p></div>{% if can_manage %}<div class="request-audit-header-actions"><button class="btn btn-secondary" type="button" data-native-audit-stabilize data-audit-enabled="{{ stats.unstable or stats.order_diff ? '1' : '0' }}"{{ stats.unstable or stats.order_diff ? '' : ' disabled' }}><i class="ti ti-list-numbers"></i>Закрепить порядок</button><button class="btn btn-secondary" type="button" data-native-audit-activate data-audit-enabled="{{ stats.verified ? '1' : '0' }}"{{ stats.verified ? '' : ' disabled' }}><i class="ti ti-bolt"></i>Включить подтверждённые</button></div>{% endif %}</div>
<div class="card ax-list-card request-audit-card"><div class="table-scroll"><table class="table table-compact request-audit-table"><thead><tr><th class="request-audit-id">ID</th><th class="table-name-column">Запрос</th><th>Режим</th><th>План</th><th>Сверка</th>{% if can_manage %}<th class="table-actions"><span class="sr-only">Действия</span></th>{% endif %}</tr></thead><tbody>
{% for row in rows %}{% set order_diag = row.audit_details.order_diagnostics|default({}) %}{% set order_criterion = order_diag.criteria|default([])|first %}{% set runtime_checks = row.audit_details.runtime_verification|default([]) %}<tr data-native-audit-row="{{ row.id }}" data-audit-eligible="{{ row.eligible ? '1' : '0' }}" data-audit-verified="{{ row.verified ? '1' : '0' }}" data-audit-status="{{ row.audit_status }}"><td class="mono text-muted">{{ row.id }}</td><td><b>{{ row.title ?: 'Без названия' }}</b><small class="request-audit-alias">{{ row.alias ? '[tag:request:' ~ row.alias ~ ']' : 'alias не задан' }} · рубрика #{{ row.rubric_id }}</small></td><td><span class="badge {{ row.mode == 'native' ? 'badge-green' : (row.mode == 'shadow' ? 'badge-blue' : 'badge-gray') }}" data-audit-mode>{{ row.mode|capitalize }}</span></td><td><span class="badge {{ row.eligible ? 'badge-blue' : 'badge-amber' }}" data-audit-plan>{{ row.eligible ? 'Готов' : 'Legacy' }}</span></td><td><div class="request-audit-result" data-audit-result>{% if row.verified %}<b class="is-success"><i class="ti ti-circle-check"></i>Совпадает</b>{% if row.audit_details.legacy_total is not null %}<small>Legacy: {{ row.audit_details.legacy_total }} · Native: {{ row.audit_details.native_total }}{% if runtime_checks|length > 1 %} · состояний: {{ runtime_checks|length }}{% endif %}</small>{% endif %}{% elseif row.audit_status == 'unstable' %}<b class="is-warning"><i class="ti ti-arrows-sort"></i>Порядок не закреплён</b><small>{{ row.audit_details.reasons|join(' ') }}</small>{% elseif row.audit_status == 'order_diff' %}<b class="is-warning"><i class="ti ti-arrows-sort"></i>Отличается порядок</b><small{% if order_diag.position %} data-tooltip="Позиция {{ order_diag.position }}: Legacy #{{ order_diag.legacy_id }}, Native #{{ order_diag.native_id }}{% if order_criterion %}. {{ order_criterion.label }}: {{ order_criterion.legacy_value }} / {{ order_criterion.native_value }}{% endif %}"{% endif %}>{% if order_diag.position %}Позиция {{ order_diag.position }}: Legacy #{{ order_diag.legacy_id }}, Native #{{ order_diag.native_id }}{% if order_criterion %} · {{ order_criterion.label }}: {{ order_criterion.legacy_value }} / {{ order_criterion.native_value }}{% endif %}{% else %}Legacy: {{ row.audit_details.legacy_total }} · Native: {{ row.audit_details.native_total }}{% endif %}{% if runtime_checks|length > 1 %} · состояний: {{ runtime_checks|length }}{% endif %}</small>{% elseif row.audit_status in ['mismatch', 'incomplete', 'error'] %}<b class="is-danger"><i class="ti ti-alert-triangle"></i>{{ row.audit_status == 'incomplete' ? 'Нужна ручная проверка' : 'Результаты различаются' }}</b><small>{{ row.audit_details.reasons|join(' ') }}</small>{% elseif not row.eligible %}<b class="is-warning"><i class="ti ti-code"></i>Не поддерживается</b><small>{{ row.reasons|join(' ') }}</small>{% else %}<b class="is-pending"><i class="ti ti-clock"></i>Не проверен</b>{% endif %}</div></td>{% if can_manage %}<td class="table-actions"><button class="btn btn-ghost btn-icon btn-sm ax-act ax-act-view" type="button" data-native-audit-one data-tooltip="Проверить" aria-label="Проверить запрос"><i class="ti ti-refresh"></i></button></td>{% endif %}</tr>{% else %}<tr><td colspan="6"><div class="empty-state"><i class="ti ti-list-search"></i><b>Запросов пока нет</b><span>Сначала создайте представление.</span></div></td></tr>{% endfor %}
</tbody></table></div></div>
</section>
{% endblock %}