feat(题目): 答错时说清楚「输出了什么、应该是什么」,交对后给相似题,零碎几处对齐设计
Deploy / deploy (push) Canceled after 0s

- 答案错误里「格式和内容都不一样」那一类(样例上错的 44%):原来只说「对照一下,找找
  从哪里开始不一样」,现在是「你的程序输出了「E」,正确的是「D」。拿例子 2 的输入「60」,
  一行一行走一遍你的程序,看它走进了哪个分支」;多行的说第几行开始不一样
- 不在这节课里的题交对之后,结果页签里给「再练几道相似的」(原来只在题面最底下)
- 提交前自动排版改了代码的,结果上面提一句「编辑器里的代码也跟着变了,按 Ctrl+Z 能撤回」
- 交对之后「提交」降成描边按钮,「下一题」是唯一的主按钮
- 「重置代码」先确认(原来点一下就把代码和本地草稿一起清掉了)
- AI 提示的档位写「第 1 档 · 反问」,不写「L0 反问」
- 成就弹窗从右下角挪到右上角,别和结果、点评弹窗叠在一起

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
xuyueandClaude Opus 5.5 committed 2026-09-28 18:39:05 +08:00
1 parent 9110c678fc
commit 972dac3776
10 files changed
+206 -93

No files matched your search

+13 -1
View File
@@ -71,6 +71,12 @@ export const useSubmissionStore = defineStore("submission", () => {
*/
const syntaxErrorInfo = ref("")
/**
* 这次提交之前自动排版改了代码。排版会直接改掉编辑器里的代码(缩进、空格、换行),
* 学生交完发现代码「变了样」却不知道为什么 —— 结果页签里提一句
*/
const formattedBeforeSubmit = ref(false)
const { start: startCooldown, isPending: isCooldown } = useTimeout(5000, {
controls: true,
immediate: false,
@@ -84,6 +90,7 @@ export const useSubmissionStore = defineStore("submission", () => {
const problem = problemStore.problem
if (!problem) return
syntaxErrorInfo.value = ""
formattedBeforeSubmit.value = false
// 0. 提交前自动格式化(Python 用 ruff,C/C++ 用 clang-format,SQL 用 sqlparse)。
// Python 在格式化之前先由服务端的 CPython 查一遍语法,有错就不提交
@@ -95,7 +102,10 @@ export const useSubmissionStore = defineStore("submission", () => {
code: codeStore.code.value,
language: formatLang,
})
codeStore.setCode(res.code)
if (res.code !== codeStore.code.value) {
codeStore.setCode(res.code)
formattedBeforeSubmit.value = true
}
} catch (e) {
if (errorCode(e) === "syntax-error") {
// 仅 Python 会出现:message 是 CPython 的报错原文,交给 PythonErrorExplain 翻译
@@ -151,6 +161,7 @@ export const useSubmissionStore = defineStore("submission", () => {
*/
function reset() {
syntaxErrorInfo.value = ""
formattedBeforeSubmit.value = false
resultSegment.value = "submit"
monitor.reset()
hint.clearHint()
@@ -183,6 +194,7 @@ export const useSubmissionStore = defineStore("submission", () => {
isFormatting,
isSubmittingRequest,
syntaxErrorInfo,
formattedBeforeSubmit,
isCooldown,
submit,
reset,