fix test editor UI and test completition UI

This commit is contained in:
Константин Лебединский
2026-04-30 20:54:37 +05:00
parent b72b485fce
commit 9511fcb555
6 changed files with 684 additions and 84 deletions
@@ -3,42 +3,54 @@
{% block content %}
<div class="test-detail-page attempt-review-page">
<p class="link-back"><a href="/tests">← к списку тестов</a></p>
<h1 class="font-headline" style="font-size:1.35rem;margin-top:0;">Разбор: {{ review.testTitle }}</h1>
{% set tl = review.timeLimit %}
{% set timestr = 'без ограничения' if tl is none or tl == 0 else (tl|string ~ ' мин') %}
{% set rm = review.resultMode or 'end' %}
{% set res = 'сразу' if rm == 'immediate' else 'в конце' %}
{% set hint = 'недоступны' if rm != 'immediate' else (кл' if review.hintsEnabled else 'выкл') %}
<p class="text-sm text-muted" style="margin:0.35rem 0 0.75rem;line-height:1.45;">
Порог: {{ review.passingThreshold }}% · Вопросов: {{ review.totalQuestions }} · Время: {{ timestr }} · Результат: {{ res }} · Подсказки: {{ hint }}
</p>
<p>
Правильно: <strong>{{ review.correctCount }}</strong> из {{ review.totalQuestions }}
({{ review.percent }}%). Порог: {{ review.passingThreshold }}%.
{% if review.passed %}
<span class="text-muted">Зачёт.</span>
{% else %}
<span class="error-text">Незачёт.</span>
{% endif %}
</p>
<header class="attempt-review-page__header">
<p class="link-back attempt-review-page__back"><a href="/tests">← к списку тестов</a></p>
<h1 class="attempt-review-page__title font-headline">Разбор: {{ review.testTitle }}</h1>
{% set tl = review.timeLimit %}
{% set timestr = 'без ограничения' if tl is none or tl == 0 else (tl|string ~ ' мин') %}
{% set rm = review.resultMode or 'end' %}
{% set res = 'сразу' if rm == 'immediate' else 'в конце' %}
{% set hint = 'недоступны' if rm != 'immediate' else ('вкл' if review.hintsEnabled else 'выкл') %}
<p class="attempt-review-page__params text-muted text-sm">
Порог: {{ review.passingThreshold }}% · Вопросов: {{ review.totalQuestions }} · Время: {{ timestr }} · Результат: {{ res }} · Подсказки: {{ hint }}
</p>
<div class="attempt-review-score {% if review.passed %}attempt-review-score--pass{% else %}attempt-review-score--fail{% endif %}">
<div class="attempt-review-score__main">
<span class="attempt-review-score__label">Итог</span>
<p class="attempt-review-score__value">
Правильно <strong>{{ review.correctCount }}</strong> из {{ review.totalQuestions }}
<span class="attempt-review-score__percent">({{ review.percent }}%)</span>
</p>
<p class="attempt-review-score__threshold">Порог зачёта: {{ review.passingThreshold }}%</p>
</div>
<span class="attempt-review-score__verdict">{% if review.passed %}Зачёт{% else %}Незачёт{% endif %}</span>
</div>
</header>
<div class="attempts-card-list">
<div class="attempt-review-page__list">
{% for q in review.questions %}
<article class="attempt-card">
<div class="attempt-card__meta">
<span>{{ 'Верно' if q.isUserCorrect else 'Ошибка' }}</span>
<article class="attempt-card attempt-review-card">
<div class="attempt-review-card__head">
<span class="attempt-review-card__num">{{ loop.index }}</span>
<span class="attempt-review-card__badge {% if q.isUserCorrect %}attempt-review-card__badge--ok{% else %}attempt-review-card__badge--bad{% endif %}">
{{ 'Верно' if q.isUserCorrect else 'Ошибка' }}
</span>
</div>
<p style="margin-top:.25rem;"><strong>{{ loop.index }}.</strong> {{ q.text }}</p>
<ul class="attempt-review-options">
<p class="attempt-review-card__question">{{ q.text }}</p>
{% if q.aiHint %}
<div class="attempt-review-hint">
<span class="attempt-review-hint__label">Подсказка</span>
<p class="attempt-review-hint__text">{{ q.aiHint }}</p>
</div>
{% endif %}
<ul class="attempt-review-options" role="list">
{% for o in q.options %}
<li class="attempt-review-option
{% if o.isCorrect %}attempt-review-option--correct{% endif %}
{% if o.selected and not o.isCorrect %}attempt-review-option--wrong{% endif %}">
<span class="attempt-review-option__text">
{% if o.selected %}☑{% else %}☐{% endif %}
{{ o.text }}
{% if o.isCorrect %}<strong> (правильный)</strong>{% endif %}
<span class="attempt-review-option__mark" aria-hidden="true">{% if o.selected %}☑{% else %}☐{% endif %}</span>
<span class="attempt-review-option__body">{{ o.text }}{% if o.isCorrect %}<span class="attempt-review-option__tag">верный ответ</span>{% endif %}</span>
</span>
</li>
{% endfor %}