fix(题目): 修掉代码审查查出的几处问题——流程图拿到的徽章不弹、点评弹窗读失败时关不掉等
- 流程图画到 A / S 拿到的题单徽章、成就原来不弹:流程图那条 WebSocket 只认评分完成 / 失败, 成就消息被丢掉了,要等下次换路由拉 pending 才出来 - 强制点评弹窗读不出点评、或者一直交不上时,「下一题 / 继续」按钮也给出来:原来弹窗关不掉, 只能按浏览器后退;拦下换题时就记上「继续」,按钮文字不会写错 - 「放回编辑器」走正常的换语言路子(画流程图时切回代码编辑器、读那门语言的草稿); 这道题已经不收的语言(0020 摘掉的 Java / JS / Go)置灰,只能复制 - 举着手时刚交对、1.5 秒内点下一题:原来「确定要换题吗」要问两遍(点评完再问一次), 现在同意过的那个地址不再问 - 课堂看板上评分中、评失败的流程图不再算「尝试过」,和学生的课堂条一个口径; 新加的流程图查询和其他查询并行,不再多等一轮数据库 - 课堂条的数据只认最后发出的那次请求:进页面那次后到的话会把刚做完的那道盖回「没做」 - 「A / S 算做完」收进契约,前后端只留一份;协作中老师的判断统一用 useTeacherCollab; 几处放错位置、说法过时的注释 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
10169f5792
commit
83b6b7a81a
16 files changed
+162
-99
No files matched your search
@@ -1,6 +1,7 @@
|
||||
<script lang="ts" setup>
|
||||
import { getRankOfProblem, getSubmission, getSubmissions } from "oj/api"
|
||||
import { useCodeStore } from "oj/store/code"
|
||||
import { useProblemStore } from "oj/store/problem"
|
||||
import Pagination from "shared/components/Pagination.vue"
|
||||
import SubmissionResultTag from "shared/components/SubmissionResultTag.vue"
|
||||
import { useCollabStore } from "shared/store/collab"
|
||||
@@ -22,6 +23,7 @@ import { useTeacherCollab } from "../composables/teacherCollab"
|
||||
|
||||
const userStore = useUserStore()
|
||||
const codeStore = useCodeStore()
|
||||
const problemStore = useProblemStore()
|
||||
const collabStore = useCollabStore()
|
||||
const ctx = useProblemPageContext()
|
||||
const route = useRoute()
|
||||
@@ -139,11 +141,22 @@ function loadedOf(id: string): Loaded | null {
|
||||
return value && typeof value === "object" ? value : null
|
||||
}
|
||||
|
||||
function putBack(id: string) {
|
||||
/** 这道题现在还收不收那次提交的语言(0020 从题目里摘掉了 Java / JS / Go,老提交还在) */
|
||||
function canPutBack(id: string) {
|
||||
const loaded = loadedOf(id)
|
||||
if (!loaded) return
|
||||
return !!loaded && problemStore.codeLanguages.some((language) => language === loaded.language)
|
||||
}
|
||||
|
||||
async function putBack(id: string) {
|
||||
const loaded = loadedOf(id)
|
||||
if (!loaded || !canPutBack(id)) return
|
||||
// 语言不一样就先按正常的路子切过去(存语言偏好、读那门语言的草稿;画流程图时切回代码编辑器),
|
||||
// 等编辑器切完再放代码 —— 直接改 codeStore 的语言会绕过这些,草稿存错地方
|
||||
if (codeStore.code.language !== loaded.language) {
|
||||
problemStore.switchLanguage(loaded.language)
|
||||
await nextTick()
|
||||
}
|
||||
// 同一个编辑器里 dispatch 一次整段替换,CodeMirror 的历史记着它,Ctrl+Z 能撤回
|
||||
codeStore.setLanguage(loaded.language)
|
||||
codeStore.setCode(loaded.code)
|
||||
message.success("已放回编辑器,按 Ctrl+Z 可以撤回")
|
||||
}
|
||||
@@ -233,6 +246,12 @@ watch(query, () => {
|
||||
size="small"
|
||||
type="primary"
|
||||
secondary
|
||||
:disabled="!canPutBack(row.id)"
|
||||
:title="
|
||||
canPutBack(row.id)
|
||||
? undefined
|
||||
: `这道题现在不收 ${LANGUAGE_SHOW_VALUE[loadedOf(row.id)!.language]} 了,只能复制`
|
||||
"
|
||||
@click="putBack(row.id)"
|
||||
>
|
||||
放回编辑器
|
||||
|
||||
Reference in new issue
Block a user