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="题目点评"
>
{
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(
-
+
-
-
- {{ continueAction.label }}
-
-
+
+
+ {{ continueAction.label }}
+
+
+
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()`)。
- 查询或提交点评的接口出错时不能把学生卡住:查询失败就不弹;提交失败留在弹窗里提示「没记上,再点一次」。