mobile app admin_base admin_contests admin_dashboard chat contest_detail exam_create exam_detail exam_grade exam_list profile themes
This commit is contained in:
@@ -71,6 +71,18 @@
|
||||
{% else %}
|
||||
<span class="text-red-500 font-medium">0分</span>
|
||||
{% endif %}
|
||||
<span class="text-slate-400 ml-2">(可人工修改)</span>
|
||||
</div>
|
||||
<div class="flex items-center gap-3 mt-2">
|
||||
<label class="text-sm text-slate-600">给分:</label>
|
||||
<input type="number" id="score-{{ q.id }}" min="0" max="{{ q.score }}"
|
||||
value="{{ question_scores.get(q.id|string, (q.score if answers.get(q.id|string,'') == q.get('answer','') else 0)) }}"
|
||||
class="grade-score w-20 px-2 py-1 border border-slate-300 rounded text-sm" data-max="{{ q.score }}" data-qid="{{ q.id }}">
|
||||
<span class="text-sm text-slate-400">/ {{ q.score }}</span>
|
||||
<div class="flex space-x-1">
|
||||
<button type="button" onclick="quickScore('{{ q.id }}', 0)" class="px-2 py-0.5 text-xs rounded border border-red-200 text-red-600 hover:bg-red-50">0分</button>
|
||||
<button type="button" onclick="quickScore('{{ q.id }}', {{ q.score }})" class="px-2 py-0.5 text-xs rounded border border-green-200 text-green-600 hover:bg-green-50">满分</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% else %}
|
||||
@@ -126,21 +138,7 @@ function quickScore(qid, score) {
|
||||
|
||||
function recalcTotal() {
|
||||
let total = 0;
|
||||
// 选择题自动得分
|
||||
{% for q in questions %}
|
||||
{% if q.type == 'choice' %}
|
||||
{% if answers.get(q.id|string,'') == q.get('answer','') %}
|
||||
total += {{ q.score }};
|
||||
{% endif %}
|
||||
{% elif q.type == 'fill' %}
|
||||
{% set student_ans = answers.get(q.id|string,'').strip() %}
|
||||
{% set correct_answers = q.get('answer','').split('|') %}
|
||||
{% if student_ans in correct_answers %}
|
||||
total += {{ q.score }};
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
// 主观题手动得分
|
||||
// 所有题目得分(客观题预填自动判分,教师可人工修改)
|
||||
document.querySelectorAll('.grade-score').forEach(input => {
|
||||
total += parseInt(input.value) || 0;
|
||||
});
|
||||
@@ -155,23 +153,8 @@ recalcTotal();
|
||||
function submitGrade() {
|
||||
const scores = {};
|
||||
{% for q in questions %}
|
||||
{% if q.type == 'choice' %}
|
||||
{% if answers.get(q.id|string,'') == q.get('answer','') %}
|
||||
scores['{{ q.id }}'] = {{ q.score }};
|
||||
{% else %}
|
||||
scores['{{ q.id }}'] = 0;
|
||||
{% endif %}
|
||||
{% elif q.type == 'fill' %}
|
||||
{% set student_ans = answers.get(q.id|string,'').strip() %}
|
||||
{% set correct_answers = q.get('answer','').split('|') %}
|
||||
{% if student_ans in correct_answers %}
|
||||
scores['{{ q.id }}'] = {{ q.score }};
|
||||
{% else %}
|
||||
scores['{{ q.id }}'] = 0;
|
||||
{% endif %}
|
||||
{% else %}
|
||||
scores['{{ q.id }}'] = parseInt(document.getElementById('score-{{ q.id }}').value) || 0;
|
||||
{% endif %}
|
||||
const inp{{ q.id }} = document.getElementById('score-{{ q.id }}');
|
||||
scores['{{ q.id }}'] = inp{{ q.id }} ? (parseInt(inp{{ q.id }}.value) || 0) : 0;
|
||||
{% endfor %}
|
||||
fetch('/api/exams/{{ exam.id }}/grade/{{ submission.id }}', {
|
||||
method:'POST', headers:{'Content-Type':'application/json'},
|
||||
|
||||
Reference in New Issue
Block a user