diff --git a/src/views/components/TrainingAiEvaluation.vue b/src/views/components/TrainingAiEvaluation.vue index 03f7573..183de9f 100644 --- a/src/views/components/TrainingAiEvaluation.vue +++ b/src/views/components/TrainingAiEvaluation.vue @@ -34,7 +34,7 @@ {{ statusLabel(assessmentStatus) }} -

AI将基于已填写的答案给出综合评分和改进方向。

+

AI根据已保存的答案评分。修改并保存答案后可重新助评;答案未变时保留上次结果。

{{ assessmentActionLabel }} @@ -90,9 +90,11 @@ const assessmentReport = computed(() => normalizedReports.value.assessmentReport const score = computed(() => normalizedReports.value.score); const scoreCriteria = computed(() => normalizedReports.value.scoreCriteria); const isHelpDisabled = computed(() => !props.hasAnyAnswer || helpLoading.value || isTerminal(helpStatus.value)); -const isAssessmentDisabled = computed(() => !props.hasAnyAnswer || assessmentLoading.value || isTerminal(assessmentStatus.value)); +const isAssessmentDisabled = computed(() => !props.hasAnyAnswer || assessmentLoading.value || assessmentStatus.value === "PROCESSING"); const helpActionLabel = computed(() => actionLabel(helpStatus.value, "生成助学建议", helpLoading.value)); -const assessmentActionLabel = computed(() => actionLabel(assessmentStatus.value, "请求AI助评", assessmentLoading.value)); +const assessmentActionLabel = computed(() => assessmentStatus.value === "SUCCEEDED" && !assessmentLoading.value + ? "重新助评" + : actionLabel(assessmentStatus.value, "请求AI助评", assessmentLoading.value)); onMounted(() => loadEvaluation()); @@ -136,7 +138,7 @@ async function requestHelp() { async function confirmAssessment() { if (isAssessmentDisabled.value || !props.taskKey) return; try { - await proxy?.$modal?.confirm("AI将根据当前已填写的内容进行评估,是否继续?", "提示"); + await proxy?.$modal?.confirm("AI将根据当前已保存的答案进行评估,答案未变时保留上次结果,是否继续?", "提示"); } catch (error) { return; } diff --git a/src/views/components/TrainingAiSidebar.vue b/src/views/components/TrainingAiSidebar.vue index 1f19858..20e6ce5 100644 --- a/src/views/components/TrainingAiSidebar.vue +++ b/src/views/components/TrainingAiSidebar.vue @@ -64,7 +64,8 @@

请先至少填写并保存一项实训内容,再请求 AI 助评。

- AI智能评分 +

修改并保存答案后可重新助评;答案未变时保留上次结果。

+ {{ reports.assessment.status === "SUCCEEDED" ? "重新助评" : "AI智能评分" }} diff --git a/tests/ai-training-evaluation.static.test.cjs b/tests/ai-training-evaluation.static.test.cjs index aa32297..2686ee4 100644 --- a/tests/ai-training-evaluation.static.test.cjs +++ b/tests/ai-training-evaluation.static.test.cjs @@ -65,3 +65,12 @@ assert(/hasSavedAnswer/.test(page) && /:has-saved-answer="hasSavedAnswer"/.test( assert(/hasSavedAnswer/.test(sidebar), "AI sidebar should accept persisted-answer state"); assert(/!props\.hasSavedAnswer/.test(sidebar), "AI assessment should be disabled until a saved answer exists"); assert(/catch \(error\)/.test(sidebar), "AI sidebar should handle assessment failures without an unhandled rejection"); + +assert(/const isAssessmentDisabled = computed\(\(\) => !props\.hasAnyAnswer \|\| assessmentLoading\.value \|\| assessmentStatus\.value === "PROCESSING"\)/.test(component), + "successful assessments should remain available for checking changed saved answers"); +assert(/assessmentStatus\.value === "SUCCEEDED"[\s\S]*?\? "重新助评"/.test(component), + "successful assessments should expose the reassessment action"); +assert(/reports\.assessment\.status === "SUCCEEDED" \? "重新助评" : "AI智能评分"/.test(sidebar), + "the shared sidebar should expose the reassessment action"); +assert(component.includes("答案未变时保留上次结果") && sidebar.includes("答案未变时保留上次结果"), + "both assessment controls should explain saved-answer reuse");