From 60a394a18c5dfcde27208f4659b7ad0edfb4b016 Mon Sep 17 00:00:00 2001 From: qinzhenpen Date: Mon, 28 Sep 2026 17:08:01 +0800 Subject: [PATCH] refactor(exam/editor): simplify score table by removing unnecessary score input fields Removed the score input fields from the score table and adjusted the table header accordingly. This change streamlines the exam editor interface, focusing on essential information while maintaining functionality for score calculations. Additionally, cleaned up related CSS styles to reflect the updated layout. --- src/views/teacherEnd/exam/editor.vue | 49 ++-------------------------- 1 file changed, 2 insertions(+), 47 deletions(-) diff --git a/src/views/teacherEnd/exam/editor.vue b/src/views/teacherEnd/exam/editor.vue index fc05062..577e50d 100644 --- a/src/views/teacherEnd/exam/editor.vue +++ b/src/views/teacherEnd/exam/editor.vue @@ -26,24 +26,12 @@
- + - @@ -130,10 +118,6 @@
{{ idx + 1 }} {{ typeOptions.find(t => t.value === question.type)?.label || question.type }} - - - 分 -

{{ question.stem }}

@@ -240,12 +224,11 @@ function isSelected(questionId) { return form.questions.some((item) => item.ques function selectedScore(questionId) { return form.questions.find((item) => item.questionId === questionId)?.score || 1; } function toggleQuestion(question, checked) { if (checked) form.questions.push({ questionId: question.id, score: typeScores[question.type] || 1 }); else form.questions = form.questions.filter((item) => item.questionId !== question.id); } function removeQuestionFromPreview(question) { toggleQuestion(question, false); } -function setScore(questionId, score) { const item = form.questions.find((row) => row.questionId === questionId); if (item) item.score = Number(score); } + function selectedByType(type) { const ids = new Set(bank.value.filter((item) => item.type === type).map((item) => item.id)); return form.questions.filter((item) => ids.has(item.questionId)).length; } function questionCount(type) { return bank.value.filter((item) => item.type === type).length; } function scoreByType(type) { return selectedQuestions(type).reduce((sum, item) => sum + Number(selectedScore(item.id)), 0); } function scorePerQuestion(type) { return Number(typeScores[type] || 1); } -function setTypeScore(type, score) { const value = Number(score); if (!Number.isFinite(value) || value < 0.5) return; typeScores[type] = value; const ids = new Set(bank.value.filter((item) => item.type === type).map((item) => item.id)); for (const item of form.questions) if (ids.has(item.questionId)) item.score = value; } function selectedQuestions(type) { const selected = new Set(form.questions.map((item) => item.questionId)); return bank.value.filter((item) => item.type === type && selected.has(item.id)); } async function nextStep() { if (activeStep.value === 0) { try { await formRef.value.validate(); const start = new Date(form.startTime.replace(" ", "T")); const end = new Date(form.endTime.replace(" ", "T")); if (end <= start) return ElMessage.warning("结束时间必须晚于开始时间"); duration.value = Math.round((end - start) / 60000); } catch { return; } } if (activeStep.value === 1 && !form.questions.length) return ElMessage.warning("至少选择一道试题"); activeStep.value++; } async function save(publish) { if (inProgress.value) { await examApi.updateExam(id.value, form); ElMessage.success("结束时间已更新"); return router.push("/exam/index"); } try { await formRef.value?.validate(); } catch { activeStep.value = 0; return; } if (!form.questions.length) { activeStep.value = 1; return ElMessage.warning("至少选择一道试题"); } const result = isNew.value ? await examApi.createExam(form) : await examApi.updateExam(id.value, form); const examId = result.data.id; if (publish) await examApi.publishExam(examId); ElMessage.success(publish ? "考试已保存并发布" : "考试已保存"); router.push("/exam/index"); } @@ -397,8 +380,6 @@ function toBoolean(value, fallback) { if (value === undefined || value === null tbody tr:hover td { background: #fafcff; } } - .type-score-input { width: 112px; } - .fixed-step-actions { display: flex; align-items: center; @@ -690,32 +671,6 @@ function toBoolean(value, fallback) { if (value === undefined || value === null font-weight: 500; } - .q-score-chip { - display: inline-flex; - align-items: center; - gap: var(--sp-1); - margin-left: auto; - padding: 2px var(--sp-3); - border-radius: var(--r-control); - background: #ffffff; - border: 1px solid var(--edu-primary); - font-size: var(--fs-tag); - color: var(--edu-primary-deep); - - span { color: var(--edu-primary-deep); font-weight: 500; } - - :deep(.el-input-number) { width: 88px; } - :deep(.el-input-number .el-input__wrapper) { - padding: 2px 6px; - box-shadow: none !important; - background: transparent; - } - :deep(.el-input-number__decrease), - :deep(.el-input-number__increase) { - display: none; - } - } - .q-card-stem { margin: 0 0 var(--sp-2); color: var(--text-strong);
题型题库题目数量选题数量每题分值小计
题型题库题目数量选题数量小计
{{ item.label }} {{ questionCount(item.value) }} {{ selectedByType(item.value) }} - - {{ scoreByType(item.value) }}