This commit is contained in:
@@ -161,6 +161,14 @@
|
||||
<!-- Dimensions loaded via JS -->
|
||||
</div>
|
||||
|
||||
<div id="totalScoreDisplay" class="mt-4 p-3 bg-blue-50 rounded-lg border border-blue-200">
|
||||
<div class="flex justify-between items-center">
|
||||
<span class="text-sm font-medium text-blue-800">综合得分</span>
|
||||
<span id="totalScoreValue" class="text-2xl font-bold text-blue-600">0</span>
|
||||
</div>
|
||||
<p class="text-xs text-blue-500 mt-1">各维度分数×权重相加,提交后计算所有评委平均值</p>
|
||||
</div>
|
||||
|
||||
<div class="space-y-2">
|
||||
<label for="comment" class="block text-sm font-medium text-gray-700">评语建议</label>
|
||||
<textarea id="comment" name="comment" rows="4"
|
||||
@@ -297,6 +305,46 @@
|
||||
{% block extra_js %}
|
||||
<script src="https://cdn.staticfile.net/marked/11.1.1/marked.min.js"></script>
|
||||
<script>
|
||||
/**
|
||||
* 更新单个维度分数显示并计算总分
|
||||
*/
|
||||
function updateDimensionScore(dimensionId, maxScore, weight, value) {
|
||||
// 更新分数显示
|
||||
document.getElementById('score_val_' + dimensionId).innerText = value;
|
||||
// 重新计算总分
|
||||
calculateTotalScore();
|
||||
}
|
||||
|
||||
/**
|
||||
* 计算评委的综合得分
|
||||
* 公式:直接用原始分数乘以权重相加 (与后端逻辑一致)
|
||||
*/
|
||||
function calculateTotalScore() {
|
||||
const dimensionsContainer = document.getElementById('scoreDimensions');
|
||||
const dimensionDivs = dimensionsContainer.querySelectorAll('[data-dimension-id]');
|
||||
|
||||
let totalScore = 0;
|
||||
|
||||
dimensionDivs.forEach(div => {
|
||||
const weight = parseFloat(div.dataset.weight);
|
||||
const dimensionId = div.dataset.dimensionId;
|
||||
|
||||
// 获取当前分数
|
||||
const scoreInput = document.querySelector('input[name="score_' + dimensionId + '"]');
|
||||
if (scoreInput) {
|
||||
const score = parseFloat(scoreInput.value) || 0;
|
||||
// 直接用原始分数乘以权重相加
|
||||
totalScore += score * weight;
|
||||
}
|
||||
});
|
||||
|
||||
// 更新显示
|
||||
const totalScoreElement = document.getElementById('totalScoreValue');
|
||||
if (totalScoreElement) {
|
||||
totalScoreElement.innerText = totalScore.toFixed(1);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 切换 AI 总结内容的显示状态(折叠/展开)
|
||||
* 通过添加或移除 line-clamp-5 类来实现截断或完整显示,并更新按钮的文字和图标。
|
||||
@@ -555,14 +603,14 @@ async function viewProject(id) {
|
||||
|
||||
// Render Score Inputs
|
||||
const dimensionsHtml = data.dimensions.map(d => `
|
||||
<div class="bg-white p-3 rounded-lg border border-gray-200">
|
||||
<div class="bg-white p-3 rounded-lg border border-gray-200" data-dimension-id="${d.id}" data-max-score="${d.max_score}" data-weight="${d.weight}">
|
||||
<div class="flex justify-between items-center mb-2">
|
||||
<label class="text-sm font-medium text-gray-700">${d.name}</label>
|
||||
<span class="text-xs text-gray-500 bg-gray-100 px-2 py-0.5 rounded">权重: ${d.weight}</span>
|
||||
<span class="text-xs text-gray-500 bg-gray-100 px-2 py-0.5 rounded">满分: ${d.max_score} | 权重: ${d.weight}</span>
|
||||
</div>
|
||||
<div class="flex items-center gap-4">
|
||||
<input type="range" min="0" max="${d.max_score}" step="1" value="${d.current_score || 0}"
|
||||
oninput="document.getElementById('score_val_${d.id}').innerText = this.value"
|
||||
oninput="updateDimensionScore('${d.id}', '${d.max_score}', '${d.weight}', this.value)"
|
||||
name="score_${d.id}" class="w-full h-2 bg-gray-200 rounded-lg appearance-none cursor-pointer accent-blue-600">
|
||||
<div class="w-12 text-right">
|
||||
<span id="score_val_${d.id}" class="text-lg font-bold text-blue-600">${d.current_score || 0}</span>
|
||||
@@ -573,6 +621,9 @@ async function viewProject(id) {
|
||||
`).join('');
|
||||
document.getElementById('scoreDimensions').innerHTML = dimensionsHtml;
|
||||
|
||||
// 计算初始总分
|
||||
calculateTotalScore();
|
||||
|
||||
document.getElementById('comment').value = data.current_comment || '';
|
||||
|
||||
// Handle Grading Permission
|
||||
|
||||
Reference in New Issue
Block a user