From 2ad35865c01aeb3ca200961591048d3389f75377 Mon Sep 17 00:00:00 2001 From: kronecker <2026692687@qq.com> Date: Fri, 9 Oct 2026 14:45:53 +0800 Subject: [PATCH] feat(frontend): show submission performance in problem workbench --- frontend/src/views/ProblemDetailView.vue | 236 +++++++++++++++++------ 1 file changed, 173 insertions(+), 63 deletions(-) diff --git a/frontend/src/views/ProblemDetailView.vue b/frontend/src/views/ProblemDetailView.vue index 6683560..5b478f2 100644 --- a/frontend/src/views/ProblemDetailView.vue +++ b/frontend/src/views/ProblemDetailView.vue @@ -2,13 +2,14 @@ import { computed, onBeforeUnmount, ref } from 'vue' import { useRoute } from 'vue-router' import { ElMessage, ElMessageBox } from 'element-plus' -import { findProblem, discussions, submissions } from '../data/preview' +import { findProblem, discussions, submissions, type Submission } from '../data/preview' import { useCodeDraft, codeTemplates, languageLabels } from '../composables/useCodeDraft' import CodeEditor from '../components/CodeEditor.vue' import DifficultyTag from '../components/DifficultyTag.vue' import VerdictTag from '../components/VerdictTag.vue' import EmptyState from '../components/EmptyState.vue' import UiIcon from '../components/UiIcon.vue' +import SubmissionPerformance from '../components/SubmissionPerformance.vue' const route = useRoute() const id = String(route.params.id) const problem = computed(() => findProblem(id)) @@ -17,12 +18,20 @@ const theme = ref('vs') const fontSize = ref(14) const tab = ref('description') const testTab = ref('input') +const workspaceTab = ref<'code' | 'submission'>('code') +const selectedSubmission = ref() const testInput = ref(problem.value?.sampleInput ?? '') const settingsOpen = ref(false) const split = ref(50) const workspace = ref() const codeRelated = computed(() => submissions.filter((s) => s.problemId === id)) const relatedDiscussion = computed(() => discussions.filter((d) => d.problemId === id)) +function viewSubmission(submissionId: string) { + const submission = codeRelated.value.find((item) => item.id === submissionId) + if (!submission) return + selectedSubmission.value = submission + workspaceTab.value = 'submission' +} const draftText = computed( () => ({ @@ -160,10 +169,14 @@ async function copySample(value: string) { />
-
- 语言{{ draftText }} -
-
-
-
- -
-
- 填入题目样例

- 尚未运行。判题服务接入后展示标准输出、错误信息与资源使用情况。 -

+ + + +
+
+ 语言{{ draftText }} +
+
+
+
+ +
+
+ 填入题目样例

+ 尚未运行。判题服务接入后展示标准输出、错误信息与资源使用情况。 +

+
+
+ 评测服务待接入保存草稿自测运行提交代码 +
+
+
+
+
+ +

{{ selectedSubmission.username }} · {{ selectedSubmission.created }}

+
+ 完整详情 → +
+ +

当前展示示例评测记录,源码与测试点详情待接入。

-
- 评测服务待接入保存草稿自测运行提交代码 -
a { + font-size: 12px; +} +.submission-workspace .performance-distribution { + padding: 20px; +} .statement-tabs { padding: 8px 20px 0; background: #fff;