- 流程图题的工具栏最左边是「写代码 / 画流程图」。原来流程图藏在语言下拉里,叫一个名叫 Flowchart 的「语言」;画完一道题之后它还被记成语言偏好,下一道能画的题一打开就是画布 - 「交给 AI 点评」交完切到「结果」页签:评的时候写着「AI 正在看你的图」、画布照样能改; 评完是分数、评语、改进建议、四项得分,顶上一排历次分数,点哪次看哪次。 原来是提交按钮旁一个 1000px 的弹框,盖住画布,翻历次评分要一页一页点 - 画到 A / S:给「照着它写代码 →」,题单里 1.5 秒后回题单(和代码通过一样), 课堂条当场标成做完;只在这一页上刚评完的那次才算,进页面读到以前的 A 不跳 - 「把这一版载回画布」只在画布和那一版不一样时出现;载回、进页面读回草稿后都缩放到装下整张图 - 题单入口能画流程图了(原来只有题库入口能画),题单里的代码草稿、流程图草稿各存一份, 加入题单之前写的、画的不会一进题单就摆在编辑器里 - 手机上不给「画流程图」(节点库是拖放,手机上拖不动),题面里以前画好的那张照样看得到 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
55 lines
1.9 KiB
Vue
55 lines
1.9 KiB
Vue
<script lang="ts" setup>
|
|
import { storeToRefs } from "pinia"
|
|
import { compressToBase64 } from "utils/functions"
|
|
import { useBreakpoints } from "shared/composables/breakpoints"
|
|
import { useMermaidConverter } from "../composables/useMermaidConverter"
|
|
import { useProblemStore } from "oj/store/problem"
|
|
import { useFlowchartStore, type FlowchartEditorInstance } from "oj/store/flowchart"
|
|
|
|
/**
|
|
* 「交给 AI 点评」按钮。
|
|
*
|
|
* 提交和评分(WebSocket + 轮询 + 超时)在 flowchart store;评分结果、历次分数、载回旧版
|
|
* 都在左栏「结果」页签(FlowchartResult)。原来这里还有一个分数按钮和 1000px 的评分弹框,
|
|
* 弹框盖住画布,学生没法一边看改进建议一边改图。
|
|
*/
|
|
|
|
const flowchartEditorRef = inject<Ref<FlowchartEditorInstance | null>>("flowchartEditorRef")
|
|
|
|
const message = useMessage()
|
|
const { problem } = storeToRefs(useProblemStore())
|
|
const flowchartStore = useFlowchartStore()
|
|
const { loading } = storeToRefs(flowchartStore)
|
|
const { isDesktop } = useBreakpoints()
|
|
const { convertToMermaid } = useMermaidConverter()
|
|
|
|
function submit() {
|
|
const editor = flowchartEditorRef?.value
|
|
if (!editor) return
|
|
const flowchartData = editor.getFlowchartData()
|
|
if (!flowchartData?.nodes?.length || !flowchartData?.edges?.length) {
|
|
message.warning("画布上还没有图:从左边拖几个框进来,再用线连起来")
|
|
return
|
|
}
|
|
flowchartStore.submit(
|
|
convertToMermaid(flowchartData),
|
|
compressToBase64(JSON.stringify(flowchartData)),
|
|
)
|
|
}
|
|
|
|
// 进题、换题都读一次历次分数(store 里同一道题只读一次)
|
|
watch(() => problem.value?.id, flowchartStore.ensureLoaded, { immediate: true })
|
|
</script>
|
|
|
|
<template>
|
|
<n-button
|
|
:size="isDesktop ? 'medium' : 'small'"
|
|
type="primary"
|
|
:loading="loading"
|
|
:disabled="loading"
|
|
@click="submit"
|
|
>
|
|
{{ loading ? "AI 正在看…" : "交给 AI 点评" }}
|
|
</n-button>
|
|
</template>
|