mirror of
https://github.com/avecms/AVE.cms.git
synced 2026-08-01 08:45:44 +00:00
27 lines
8.2 KiB
Twig
27 lines
8.2 KiB
Twig
{% 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 %}
|