feat(题目): 手机上页签行的「⋯」里能直接复制、重置代码、去自测猫,不用先切到「代码」页签
Deploy / deploy (push) Canceled after 0s

- 「⋯」分两组:统计 / 点评 / 我的提交,分隔线,再是去自测猫 / 复制代码 / 重置代码
  (老师还有课堂统计)。原来后几项在「代码」页签工具栏的「更多」里,代码页签那一行
  现在只剩语言选择
- 菜单抽成 useEditorMenu,桌面工具栏的「更多」和手机的「⋯」共用一份;「课堂统计」弹窗
  挂在页面上,两个入口开的是同一个
- 草稿键抽成 useDraftKey:编辑器存取草稿、「重置代码」删草稿用同一份算法。原来键在编辑器里拼、
  当 prop 传给工具栏,挪出去之后再拼一份迟早对不上(题单入口还多了一种)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
xuyueandClaude Opus 5.5 committed 2026-09-28 19:09:06 +08:00
1 parent cd960ca01c
commit a538e60e28
7 files changed
+211 -154

No files matched your search

@@ -11,6 +11,7 @@ import type { LANGUAGE } from "utils/types"
import { beginEditTrace, editTraceExtensions } from "oj/problem/utils/editTrace"
import { errorMarkExtensions } from "oj/problem/utils/errorMark"
import EditorToolbar from "./EditorToolbar.vue"
import { useDraftKey } from "../composables/draftKey"
import CollabBar from "./CollabBar.vue"
import { useFlowchartStore } from "oj/store/flowchart"
@@ -86,20 +87,9 @@ const { isDesktop } = useBreakpoints()
const editorExtensions = [...editTraceExtensions, ...errorMarkExtensions]
const contestID = route.params.contestID || null
const problemSetId = route.params.problemSetId || null
/**
* 本地草稿的键。题单入口单独一份:原来题库和题单共用 `problem_题号_contest_null_语言`,
* 加入题单之前在题库里写对的代码,一进题单就摆在编辑器里(设计文档第 11 节 4)。
* 键的最后一段必须是语言,changeLanguage 靠它判断草稿是不是这门语言的。
*/
const storageKey = computed(() =>
problemSetId
? `problem_${problem.value!._id}_problemset_${problemSetId}_lang_${codeStore.code.language}`
: `problem_${problem.value!._id}_contest_${contestID}_lang_${codeStore.code.language}`,
)
// 草稿存在哪个键下(题单入口单独一份),和「重置代码」共用一份算法
const storageKey = useDraftKey()
// 协作条 40px + 和工具栏之间的 12px 间距,要从编辑器里让出来,不然页面底下多出一截滚动条。
// 手机上:顶栏两行 + 课堂条 + 页签 + 工具栏约 236px,底部还有「运行例子 / 提交」那条约 64px
const editorHeight = computed(() => {
const base = isDesktop.value ? 133 : 300
return `calc(100vh - ${base + (teacherCollab.value ? 52 : 0)}px)`
@@ -171,7 +161,7 @@ provide("flowchartEditorRef", flowchartEditorRef)
<template>
<n-flex vertical>
<CollabBar v-if="teacherCollab" />
<EditorToolbar :storage-key="storageKey" @change-language="changeLanguage" />
<EditorToolbar @change-language="changeLanguage" />
<!--
协作中教师这边不会落到流程图分支:上面那个 watch 已经把他的语言换成了学生的,
而求助入口本身就排掉了流程图(EditorToolbar.vue 的 showHelpButton、服务端的