feat(流程图): 「写代码 / 画流程图」变成工具栏上的切换,AI 的评分和历次分数挪进结果页签,题单里也能画

- 流程图题的工具栏最左边是「写代码 / 画流程图」。原来流程图藏在语言下拉里,叫一个名叫
  Flowchart 的「语言」;画完一道题之后它还被记成语言偏好,下一道能画的题一打开就是画布
- 「交给 AI 点评」交完切到「结果」页签:评的时候写着「AI 正在看你的图」、画布照样能改;
  评完是分数、评语、改进建议、四项得分,顶上一排历次分数,点哪次看哪次。
  原来是提交按钮旁一个 1000px 的弹框,盖住画布,翻历次评分要一页一页点
- 画到 A / S:给「照着它写代码 →」,题单里 1.5 秒后回题单(和代码通过一样),
  课堂条当场标成做完;只在这一页上刚评完的那次才算,进页面读到以前的 A 不跳
- 「把这一版载回画布」只在画布和那一版不一样时出现;载回、进页面读回草稿后都缩放到装下整张图
- 题单入口能画流程图了(原来只有题库入口能画),题单里的代码草稿、流程图草稿各存一份,
  加入题单之前写的、画的不会一进题单就摆在编辑器里
- 手机上不给「画流程图」(节点库是拖放,手机上拖不动),题面里以前画好的那张照样看得到

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
xuyueandClaude Opus 5.5 committed 2026-09-28 18:19:16 +08:00
1 parent 3fe3caa944
commit 11368813cc
16 files changed
+747 -388

No files matched your search

@@ -44,7 +44,20 @@ const ctx = useProblemPageContext()
const userStore = useUserStore()
const codeStore = useCodeStore()
const problemStore = useProblemStore()
const { problem, languages } = storeToRefs(problemStore)
const { problem, codeLanguages, canDraw } = storeToRefs(problemStore)
/**
* 「写代码 / 画流程图」是两种作业,不是两门语言。原来流程图藏在语言下拉里,叫一个名叫
* Flowchart 的「语言」—— 有的题流程图交了几百次、代码个位数,入口却在下拉的第一项里。
*/
const drawing = computed(() => codeStore.code.language === "Flowchart")
const mode = computed({
get: () => (drawing.value ? "draw" : "code"),
set: (value: "draw" | "code") => {
if (value === "draw") problemStore.switchLanguage("Flowchart")
else problemStore.switchLanguage(problemStore.supportedLanguage(codeStore.preferredLanguage()))
},
})
const { isDesktop } = useBreakpoints()
@@ -183,7 +196,7 @@ const handleMenuSelect = (key: string) => {
// computed:换题时组件复用,选项得跟着新题的语言走
const languageOptions = computed<DropdownOption[]>(() =>
languages.value.map((it) => ({
codeLanguages.value.map((it) => ({
label: () =>
h(NFlex, { align: "center" }, () => [
h(Icon, {
@@ -239,8 +252,15 @@ const goEdit = () => {
<template>
<n-flex align="center">
<!-- 协作中的老师不会落到画图:求助入口本身就排掉了流程图 -->
<n-radio-group v-if="canDraw && !showCollabBar" v-model:value="mode" :size="buttonSize">
<n-radio-button value="code">写代码</n-radio-button>
<n-radio-button value="draw">画流程图</n-radio-button>
</n-radio-group>
<!-- 协作中编辑器的语言跟着学生走,这个选择器改了也不会生效,索性禁掉 -->
<n-select
v-if="!drawing"
v-model:value="codeStore.code.language"
style="width: 120px"
:size="buttonSize"