「失败 3 次解锁 AI 提示」实际是「在当前这次页面会话里再失败 3 次」: problemStore.failCount 是个从 0 起数的内存计数器,刷新、切题、跳进跳出就归零, 而后端闸门数的是数据库里的历史失败数,两边根本不是一回事。昨天在这题上撞了 十次墙的学生今天进来照样看不到按钮。 - 数法收成一个 countFailedSubmissions(),题目详情的 myFailedCount 和 POST /ai/hint 共用。原来详情把「等待/正在评分」也算失败,连点三次提交就能 把按钮点亮,点下去却回 hint-locked - 阈值 3 挪进契约 HINT_MIN_FAILURES,两端引用同一个常量 - failCount 改成 myFailedCount + 本次会话增量;在题目页里登录的补拉一次详情, 否则停在匿名时的 0 - 结果面板改 display-directive="show",不再一收起来就把流式输出中的提示连同 那次 LLM 调用一起作废;补「上次结果」按钮,原来唯一的重开方式是再提交一次 - prompt 里的判题结果翻成中文,原来拼的是裸状态码,模型不知道 -1 是什么 - system_error 不计入失败数、也不显示按钮:判题机自己崩了不是学生的问题 - 比赛中不给提示,和「求助」按钮同一个口径 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RC5uL72UY9aZFuTvUKe2jv
This commit is contained in:
1 parent
2e78b6efdf
commit
bb0f5ec5ef
10 files changed
+172
-34
No files matched your search
@@ -5,7 +5,27 @@ export const useProblemStore = defineStore("problem", () => {
|
||||
const problem = ref<Problem | null>(null)
|
||||
const route = useRoute()
|
||||
|
||||
const failCount = ref(0)
|
||||
/**
|
||||
* 本次会话里新增的失败提交数。**只是增量**,历史失败数看 `problem.myFailedCount`。
|
||||
*
|
||||
* 原来 failCount 就是这一个从 0 起数的 ref,于是「失败 3 次解锁 AI 提示」实际变成了
|
||||
* 「在当前这次页面会话里再失败 3 次」:刷新一下、从题单跳进跳出一次就清零,
|
||||
* 昨天在这题上撞了十次墙的学生今天进来照样看不到按钮。而后端的闸门数的是数据库里
|
||||
* 的历史失败数,两边根本不是一回事。
|
||||
*/
|
||||
const sessionFailCount = ref(0)
|
||||
|
||||
/**
|
||||
* 这道题一共失败了几次 = 服务端算好的历史值 + 本次会话的增量。
|
||||
* 和后端 `countFailedSubmissions` 同一个口径,所以按钮亮起来的时刻就是
|
||||
* `POST /ai/hint` 放行的时刻。
|
||||
*
|
||||
* 题目详情只在 problemID 变化时重新拉(见 oj/problem/detail.vue 的 init),
|
||||
* 而那时下面的 watch 已经把增量清零了,不会和新的 myFailedCount 叠加。
|
||||
*/
|
||||
const failCount = computed(
|
||||
() => (problem.value?.myFailedCount ?? 0) + sessionFailCount.value,
|
||||
)
|
||||
|
||||
const languages = computed<LANGUAGE[]>(() => {
|
||||
if (route.name === "problem" && problem.value?.allowFlowchart) {
|
||||
@@ -15,13 +35,13 @@ export const useProblemStore = defineStore("problem", () => {
|
||||
})
|
||||
|
||||
function incrementFailCount() {
|
||||
failCount.value++
|
||||
sessionFailCount.value++
|
||||
}
|
||||
|
||||
watch(
|
||||
() => problem.value?.id,
|
||||
() => {
|
||||
failCount.value = 0
|
||||
sessionFailCount.value = 0
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
Reference in new issue
Block a user