feat: general lab comment and strict square UI
Add a non-required general comment for a student's lab grade (progress V9, API, admin modal, student card). Empty string is the default. Switch the UI to square corners and bump static asset versions.
This commit is contained in:
@@ -93,7 +93,7 @@
|
||||
</button>
|
||||
<button class="score-link" type="button"
|
||||
th:classappend="${cell.score == null} ? 'none' : ''"
|
||||
th:attr="data-student=${row.studentId},data-student-name=${row.fullName},data-lab=${cell.labId},data-lab-name='ЛР ' + ${cell.labNumber},data-score=${cell.score},data-comments=${row.commentsJson},data-ci=${iterStat.index}" data-action="grade"
|
||||
th:attr="data-student=${row.studentId},data-student-name=${row.fullName},data-lab=${cell.labId},data-lab-name='ЛР ' + ${cell.labNumber},data-score=${cell.score},data-general-comment=${cell.generalComment},data-comments=${row.commentsJson},data-ci=${iterStat.index}" data-action="grade"
|
||||
th:title="${cell.score} ? 'Оценка ' + ${cell.score} + ' — изменить' : 'Оценки нет — выставить балл и комментарии'">
|
||||
<span th:text="${cell.score} ?: '—'">—</span>
|
||||
</button>
|
||||
@@ -160,6 +160,9 @@
|
||||
<div><label class="label">Студент</label><input class="input" id="grade-who" readonly></div>
|
||||
<div><label class="label" for="grade-score">Балл (0–5)</label>
|
||||
<input class="input" id="grade-score" name="score" type="number" min="0" max="5" step="0.1"></div>
|
||||
<div><label class="label" for="grade-general">Общий комментарий по лабораторной</label>
|
||||
<textarea class="input" id="grade-general" name="generalComment" rows="4"
|
||||
placeholder="Итоговый комментарий по работе в целом…"></textarea></div>
|
||||
<div id="cs-rows"></div>
|
||||
<div class="flex gap-2">
|
||||
<button class="btn btn-secondary" type="button" data-action="comment-add">+ комментарий</button>
|
||||
@@ -342,7 +345,7 @@
|
||||
<div class="dlg-body" id="assign-modal-body"></div>
|
||||
</dialog>
|
||||
|
||||
<script th:src="@{/js/admin-group.js(v='34')}" defer></script>
|
||||
<script th:src="@{/js/admin-group.js(v='35')}" defer></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -196,7 +196,7 @@
|
||||
</dialog>
|
||||
</th:block>
|
||||
</div>
|
||||
<script th:src="@{/js/admin-lab.js(v='34')}" defer></script>
|
||||
<script th:src="@{/js/admin-lab.js(v='35')}" defer></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -13,22 +13,22 @@
|
||||
<noscript>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
|
||||
</noscript>
|
||||
<link rel="icon" type="image/svg+xml" th:href="@{/favicon.svg(v='34')}">
|
||||
<!-- v=4: сброс кэша стилей после редизайна; при изменении css поднимать версию -->
|
||||
<link rel="icon" type="image/svg+xml" th:href="@{/favicon.svg(v='35')}">
|
||||
<!-- v=35: сброс кэша стилей после изменения геометрии; при изменении css поднимать версию -->
|
||||
<link rel="stylesheet" th:href="@{/css/bootstrap.min.css}">
|
||||
<link rel="stylesheet" th:href="@{/css/bootstrap-icons.min.css}">
|
||||
<link rel="stylesheet" th:href="@{/css/app.css(v='34')}">
|
||||
<link id="hljs-light" rel="stylesheet" th:href="@{/css/hljs-github.css(v='34')}">
|
||||
<link id="hljs-dark" rel="stylesheet" th:href="@{/css/hljs-github-dark.css(v='34')}" disabled>
|
||||
<script th:src="@{/js/highlight.min.js(v='34')}" defer></script>
|
||||
<script th:src="@{/js/table-scroll.js(v='34')}" defer></script>
|
||||
<script th:src="@{/js/tablekit.js(v='34')}" defer></script>
|
||||
<link rel="stylesheet" th:href="@{/css/app.css(v='35')}">
|
||||
<link id="hljs-light" rel="stylesheet" th:href="@{/css/hljs-github.css(v='35')}">
|
||||
<link id="hljs-dark" rel="stylesheet" th:href="@{/css/hljs-github-dark.css(v='35')}" disabled>
|
||||
<script th:src="@{/js/highlight.min.js(v='35')}" defer></script>
|
||||
<script th:src="@{/js/table-scroll.js(v='35')}" defer></script>
|
||||
<script th:src="@{/js/tablekit.js(v='35')}" defer></script>
|
||||
<script th:src="@{/js/bootstrap.bundle.min.js}" defer></script>
|
||||
<script th:src="@{/js/theme-init.js(v='34')}"></script>
|
||||
<script th:src="@{/js/app.js(v='34')}" defer></script>
|
||||
<script th:src="@{/js/ui-state.js(v='34')}" defer></script>
|
||||
<script th:src="@{/js/md-content.js(v='34')}" defer></script>
|
||||
<script th:src="@{/js/submit-guard.js(v='34')}" defer></script>
|
||||
<script th:src="@{/js/theme-init.js(v='35')}"></script>
|
||||
<script th:src="@{/js/app.js(v='35')}" defer></script>
|
||||
<script th:src="@{/js/ui-state.js(v='35')}" defer></script>
|
||||
<script th:src="@{/js/md-content.js(v='35')}" defer></script>
|
||||
<script th:src="@{/js/submit-guard.js(v='35')}" defer></script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="page d-flex flex-column min-vh-100">
|
||||
|
||||
@@ -138,7 +138,7 @@
|
||||
</div>
|
||||
|
||||
|
||||
<script th:src="@{/js/mdeditor.js(v='34')}" defer></script>
|
||||
<script th:src="@{/js/mdeditor.js(v='35')}" defer></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -183,7 +183,7 @@
|
||||
</div>
|
||||
</dialog>
|
||||
|
||||
<script th:src="@{/js/content-sort.js(v='34')}" defer></script>
|
||||
<script th:src="@{/js/content-sort.js(v='35')}" defer></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -236,8 +236,8 @@
|
||||
</div>
|
||||
</dialog>
|
||||
|
||||
<script th:src="@{/js/mdeditor.js(v='34')}" defer></script>
|
||||
<script th:src="@{/js/content-sort.js(v='34')}" defer></script>
|
||||
<script th:src="@{/js/mdeditor.js(v='35')}" defer></script>
|
||||
<script th:src="@{/js/content-sort.js(v='35')}" defer></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -143,7 +143,7 @@
|
||||
</div>
|
||||
</dialog>
|
||||
|
||||
<script th:src="@{/js/content-sort.js(v='34')}" defer></script>
|
||||
<script th:src="@{/js/content-sort.js(v='35')}" defer></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -57,6 +57,10 @@
|
||||
<h2 class="section-title">Оценка и комментарии</h2>
|
||||
<div class="card card-body mb-6">
|
||||
<p class="mb-4 mt-1">Ваша оценка за лабораторную: <span class="score-big" th:text="${grade}"></span></p>
|
||||
<div th:if="${!#strings.isEmpty(generalComment)}" class="general-comment">
|
||||
<h3 class="group-title">Общий комментарий по лабораторной</h3>
|
||||
<p class="pre-wrap mb-4" th:text="${generalComment}">—</p>
|
||||
</div>
|
||||
<div class="review-cols">
|
||||
<div class="review-col" th:if="${!#lists.isEmpty(commentsPositive)}">
|
||||
<h3 class="group-title tone-positive-text">Позитивный</h3>
|
||||
@@ -107,7 +111,7 @@
|
||||
<p class="text-sm text-muted">Ожидайте преподавателя с проверкой.</p>
|
||||
</div>
|
||||
</div>
|
||||
<script th:src="@{/js/defense-timer.js(v='34')}" defer></script>
|
||||
<script th:src="@{/js/defense-timer.js(v='35')}" defer></script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user