diff --git a/apps/web/src/oj/problem/components/LessonNext.vue b/apps/web/src/oj/problem/components/LessonNext.vue new file mode 100644 index 0000000..b8d43b4 --- /dev/null +++ b/apps/web/src/oj/problem/components/LessonNext.vue @@ -0,0 +1,75 @@ + + + + + diff --git a/apps/web/src/oj/problem/components/SubmissionResult.vue b/apps/web/src/oj/problem/components/SubmissionResult.vue index f476f6a..a47e8ef 100644 --- a/apps/web/src/oj/problem/components/SubmissionResult.vue +++ b/apps/web/src/oj/problem/components/SubmissionResult.vue @@ -17,6 +17,7 @@ import { useProblemStore } from "oj/store/problem" import PythonErrorExplain from "./PythonErrorExplain.vue" import RuntimeErrorExplain from "./RuntimeErrorExplain.vue" import WrongAnswerExplain from "./WrongAnswerExplain.vue" +import LessonNext from "./LessonNext.vue" import { useAIStream } from "shared/composables/aiStream" import { submitHintFeedback } from "oj/api" import { MdPreview } from "md-editor-v3" @@ -121,6 +122,18 @@ const sampleCheck = computed(() => { return submission.statisticInfo?.sample_check ?? null }) +/** + * 通过之后给「这节课的下一题」。比赛有自己的题目列表;从题单入口进来的,通过后 + * 1.5 秒会自动跳回题单(SubmitCode 的 goToProblemSetDelayed),这两种都不给 + */ +const route = useRoute() +const showLessonNext = computed( + () => + props.submission?.result === SubmissionStatus.accepted && + problemStore.problem?.contestId == null && + !route.params.problemSetId, +) + const msg = computed(() => { if (!props.submission) return "" // 走 PythonErrorExplain / RuntimeErrorExplain 那两张中文卡片 @@ -288,6 +301,12 @@ const columns: DataTableColumn[] = [ /> + + problem.value?._id, + (next, previous) => { + if (!previous || next === previous) return + showResult.value = false + syntaxErrorInfo.value = "" + commentPanel.value = false + cancelCommentPanel() + cancelGoToProblemSet() + resetSubmission() + }, +) + // ==================== 计算属性 ==================== const buttonState = computed(() => getSubmitButtonState({ diff --git a/apps/web/src/oj/problem/composables/useSubmissionMonitor.ts b/apps/web/src/oj/problem/composables/useSubmissionMonitor.ts index 469e922..0203a4e 100644 --- a/apps/web/src/oj/problem/composables/useSubmissionMonitor.ts +++ b/apps/web/src/oj/problem/composables/useSubmissionMonitor.ts @@ -129,6 +129,18 @@ export function useSubmissionMonitor() { startPollingFallback() } + /** + * 换题的时候丢掉当前这条提交。题目页换题(顶栏题号直达、「下一题」)是同一个组件 + * 复用、只换路由参数,不清的话上一道题的结果面板原样挂在新题上;而且上一道还在判的话, + * 判完触发的「通过」处理会把**新题**标成已解决。提交本身照常判完落库,只是这边不再跟。 + */ + const reset = () => { + pausePolling() + unsubscribe() + submissionId.value = "" + submission.value = undefined + } + // ==================== 计算属性 ==================== const judging = computed(() => submission.value?.result === SubmissionStatus.judging) @@ -159,5 +171,6 @@ export function useSubmissionMonitor() { // 方法 startMonitoring, pausePolling, + reset, } }