diff --git a/src/oj/api.ts b/src/oj/api.ts index b46fc9d..88f3331 100644 --- a/src/oj/api.ts +++ b/src/oj/api.ts @@ -304,6 +304,12 @@ export function getCurrentProblemFlowchartSubmission(problemId: number) { }) } +export function getFlowchartSubmissionDetail(problemId: number, page = 0) { + return http.get("flowchart/submission/detail", { + params: { problem_id: problemId, page }, + }) +} + // ==================== 题单相关API ==================== export function getProblemSetList( diff --git a/src/oj/problem/components/ProblemListTitle.vue b/src/oj/problem/components/ProblemListTitle.vue index 0051043..41dd1df 100644 --- a/src/oj/problem/components/ProblemListTitle.vue +++ b/src/oj/problem/components/ProblemListTitle.vue @@ -9,9 +9,6 @@ defineProps<{ diff --git a/src/oj/problem/components/SubmitFlowchart.vue b/src/oj/problem/components/SubmitFlowchart.vue index 6f0102d..77a5e26 100644 --- a/src/oj/problem/components/SubmitFlowchart.vue +++ b/src/oj/problem/components/SubmitFlowchart.vue @@ -16,8 +16,8 @@ import { // API 和状态管理 import { getCurrentProblemFlowchartSubmission, + getFlowchartSubmissionDetail, submitFlowchart, - updateProblemSetProgress, } from "oj/api" import { useProblemStore } from "oj/store/problem" @@ -47,7 +47,6 @@ const { problem } = toRefs(problemStore) const { isDesktop } = useBreakpoints() const { convertToMermaid } = useMermaidConverter() const { renderError, renderFlowchart } = useMermaid() -const route = useRoute() // 状态管理 const rendering = ref(false) @@ -64,6 +63,7 @@ const evaluation = ref({ suggestions: "", criteria_details: {}, }) +const page = ref(1) // ==================== WebSocket 相关函数 ==================== // 处理 WebSocket 消息 @@ -147,33 +147,56 @@ function submit() { } // ==================== 数据获取和处理函数 ==================== -async function getSubmission() { + +async function getCurrentSubmission() { if (!problem.value?.id) return const { data } = await getCurrentProblemFlowchartSubmission(problem.value.id) submissionCount.value = data.count - const submission = data.submission - myMermaidCode.value = submission.mermaid_code - myFlowchartZippedStr.value = submission.flowchart_data.data - if (submission && submission.status === 2) { - rating.value = { - score: submission.ai_score, - grade: submission.ai_grade, - } - evaluation.value = { - score: submission.ai_score, - grade: submission.ai_grade, - feedback: submission.ai_feedback, - suggestions: submission.ai_suggestions, - criteria_details: submission.ai_criteria_details, - } + rating.value = { + score: data.score, + grade: data.grade, } } +async function getSubmission(submissionPage = 0) { + if (!problem.value?.id) return + const { data } = await getFlowchartSubmissionDetail( + problem.value.id, + submissionPage, + ) + const submission = data.submission + myFlowchartZippedStr.value = submission.flowchart_data.data + myMermaidCode.value = submission.mermaid_code || "" + rating.value = { + score: submission.ai_score, + grade: submission.ai_grade, + } + evaluation.value = { + score: submission.ai_score, + grade: submission.ai_grade, + feedback: submission.ai_feedback, + suggestions: submission.ai_suggestions, + criteria_details: submission.ai_criteria_details, + } +} + +async function updatePage(val: number) { + page.value = val + rendering.value = true + await getSubmission(val) + // 等待 DOM 更新 + await nextTick() + await renderFlowchart(mermaidContainer.value, myMermaidCode.value) + rendering.value = false +} + // ==================== 模态框相关函数 ==================== async function openDetailModal() { - rendering.value = true showDetailModal.value = true + rendering.value = true await getSubmission() + // 等待 DOM 更新,确保弹框已经渲染 + await nextTick() await renderFlowchart(mermaidContainer.value, myMermaidCode.value) rendering.value = false } @@ -214,9 +237,10 @@ const getPercentType = (percent: number) => { // ==================== 生命周期钩子 ==================== // 组件挂载时连接 WebSocket 并检查状态 -onMounted(() => { +onMounted(async () => { connect() - getSubmission() + await getCurrentSubmission() + page.value = submissionCount.value }) // 组件卸载时断开连接 @@ -239,11 +263,6 @@ onUnmounted(() => { {{ loading ? "AI 点评中..." : "提交流程图" }} - - - {{ submissionCount }} 次 - - { {{ rating.score }}分 {{ rating.grade }}级 - + @@ -266,15 +285,12 @@ onUnmounted(() => {
- - - - - - -
+ +
+
@@ -341,6 +357,19 @@ onUnmounted(() => {
+ + + + +
diff --git a/src/shared/components/MermaidEditor.vue b/src/shared/components/MermaidEditor.vue index 8b0bfc0..cc83e72 100644 --- a/src/shared/components/MermaidEditor.vue +++ b/src/shared/components/MermaidEditor.vue @@ -6,7 +6,6 @@ let mermaid: any = null const modelValue = defineModel({ default: "" }) const mermaidContainer = useTemplateRef("mermaidContainer") -const codeEditor = useTemplateRef("codeEditor") // 渲染状态 const renderSuccess = ref(false)