diff --git a/apps/web/src/oj/problem/components/ProblemReaction.vue b/apps/web/src/oj/problem/components/ProblemReaction.vue index f0febb2..55db22c 100644 --- a/apps/web/src/oj/problem/components/ProblemReaction.vue +++ b/apps/web/src/oj/problem/components/ProblemReaction.vue @@ -270,7 +270,7 @@ function sectorAriaLabel(index: number) { aria-label="题目点评" >

- 选一块最接近的,每道题只能评一次{{ guard ? "" : "。选完就能看到大家是怎么选的" }} + 选一块最接近的,每道题只能评一次。选完就能看到大家是怎么选的

{ return { label: "好的", target: null } }) +/** 选完停多久;按钮底边那条线按同一个时长缩完 */ +const LINGER_MS = 2500 +const { start: lingerThenClose, stop: stopLingering } = useTimeoutFn(closeCommentPanel, LINGER_MS, { + immediate: false, +}) + +function onReviewed() { + reviewed.value = true + lingerThenClose() +} + function continueAfterReview() { const target = continueAction.value.target if (target && !navigationAfterReview) navigationAfterReview = target @@ -160,6 +176,7 @@ watch( (next, previous) => { if (!previous || next === previous) return commentPanel.value = false + stopLingering() cancelCommentPanel() reviewOwed.value = false navigationAfterReview = null @@ -243,21 +260,57 @@ watch( - + + + diff --git a/docs/specs/2026-09-28-problem-page-redesign-design.md b/docs/specs/2026-09-28-problem-page-redesign-design.md index fea2f48..013c968 100644 --- a/docs/specs/2026-09-28-problem-page-redesign-design.md +++ b/docs/specs/2026-09-28-problem-page-redesign-design.md @@ -221,8 +221,10 @@ B 看得到。 - 防误触:弹出后 600ms 内轮盘半透明、点不了;强制弹窗里不响应 Enter / 空格(键盘触发的 click 的 `detail` 是 0),扇区不进 Tab 顺序;弹窗 `auto-focus` 关掉,不预选任何一块。 抽屉里的是学生自己点开的,不设防、键盘能选。 -- 选完不马上关:弹窗里换成横条图,下面只有一个按钮、焦点落在它上面 —— 被拦下的换题写「继续」, - 否则是这节课的「下一题:题号 题目」,都没有就是「好的」。 +- 选完不用再点:标题换成「大家是这样觉得的」,就地变成玫瑰图停 2.5 秒,然后自己关。轮盘正下方 + 居中一个按钮,停着的时候底边一条线缩完就关,急着走的直接点 —— 被拦下的换题写「继续」, + 否则是这节课的「下一题:题号 题目」,都没有就是「好的」。(2026-10-12 改过一版点一块就关, + 学生看不到结果;2026-10-14 改成现在这样。) - **窗口期内换题要先点评**:通过后 1.5 秒内点「下一题」、课堂条芯片、‹ ›、顶栏题号直达, 先立刻弹出点评,选完再跳。**现在线上可以被跳过**(`SubmitCode.vue` 换题时 `cancelCommentPanel()`)。 - 查询或提交点评的接口出错时不能把学生卡住:查询失败就不弹;提交失败留在弹窗里提示「没记上,再点一次」。