From 309ca0ece25dd91feda31d3934fbaff82cb606d4 Mon Sep 17 00:00:00 2001 From: yuetsh <517252939@qq.com> Date: Fri, 16 Oct 2026 14:59:55 +0800 Subject: [PATCH] =?UTF-8?q?refactor(=E5=89=8D=E7=AB=AF):=20=E5=85=A8?= =?UTF-8?q?=E7=AB=99=E5=85=B1=E7=94=A8=E7=9A=84=E7=8F=AD=E7=BA=A7=E4=B8=8B?= =?UTF-8?q?=E6=8B=89=E3=80=81=E8=83=B6=E5=9B=8A=E9=85=8D=E8=89=B2=E6=8C=AA?= =?UTF-8?q?=E5=87=BA=E6=8F=90=E4=BA=A4=E5=88=97=E8=A1=A8=E7=9B=AE=E5=BD=95?= =?UTF-8?q?=EF=BC=8C=E7=BC=96=E8=BE=91=E5=99=A8=E4=B8=8D=E5=86=8D=E5=81=B7?= =?UTF-8?q?=E8=AF=BB=E9=A2=98=E7=9B=AE=E9=A1=B5=E7=9A=84=20store?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - classLabel / groupClassOptions / classSelectOptions 挪到 utils/classes.ts,useTone 挪到 shared/composables/tone.ts:原来放在 oj/submission/ 下,被前台、后台、shared 引了 50 多处 - 流程图编辑器的草稿键改由题目页传进来(键名不变,学生存着的草稿照样读得到)。原来编辑器 自己读题目页的 store 和路由拼,后台出题页也用这个组件,那边 store 是空的 - SQL 表名补全改由题目页传表进来。原来补全直接读题目页的 store,自学页的 SQL 代码块会 补出上一道看过的题的表名 实跑:提交列表、题目页、排名、后台题目页、SQL 题、流程图题打开无报错;SQL 题输入 stu 补出 students;流程图加一步,草稿照旧存在 flowchart-v2-problem-<题号>。 Co-Authored-By: Claude Opus 5.5 --- apps/web/src/admin/ai/list.vue | 2 +- apps/web/src/admin/learn/index.vue | 2 +- apps/web/src/admin/problem/Stuck.vue | 2 +- apps/web/src/admin/setting/config.vue | 2 +- apps/web/src/admin/setting/home.vue | 4 +- apps/web/src/admin/user/generate.vue | 2 +- apps/web/src/admin/user/list.vue | 2 +- apps/web/src/oj/ai/analysis.vue | 2 +- apps/web/src/oj/ai/components/LessonDays.vue | 2 +- apps/web/src/oj/class/components/PkDuel.vue | 2 +- apps/web/src/oj/class/components/PkGrid.vue | 2 +- apps/web/src/oj/class/pk.vue | 2 +- apps/web/src/oj/class/utils.ts | 2 +- apps/web/src/oj/classroom/board.vue | 4 +- .../oj/contest/components/ContestBadge.vue | 2 +- .../src/oj/contest/components/RankMini.vue | 2 +- apps/web/src/oj/contest/detail.vue | 2 +- apps/web/src/oj/contest/list.vue | 2 +- apps/web/src/oj/contest/pages/class.vue | 4 +- apps/web/src/oj/contest/pages/problems.vue | 2 +- apps/web/src/oj/contest/pages/rank.vue | 4 +- apps/web/src/oj/home/TeacherHome.vue | 2 +- .../oj/problem/components/ProblemEditor.vue | 15 +++++ .../src/oj/problem/components/ProblemInfo.vue | 5 +- .../src/oj/problem/components/ProgressRow.vue | 2 +- apps/web/src/oj/problem/components/TagNav.vue | 2 +- apps/web/src/oj/problem/list.vue | 2 +- .../oj/problemset/components/BadgeLadder.vue | 2 +- .../oj/problemset/components/ClassView.vue | 4 +- apps/web/src/oj/problemset/detail.vue | 2 +- apps/web/src/oj/problemset/list.vue | 2 +- .../src/oj/rank/components/ClassBattle.vue | 2 +- .../oj/rank/components/ClassDetailDrawer.vue | 2 +- .../web/src/oj/rank/components/RankAvatar.vue | 2 +- apps/web/src/oj/rank/list.vue | 2 +- apps/web/src/oj/rank/utils.ts | 2 +- .../statistics/components/AttemptSquares.vue | 2 +- .../src/oj/statistics/components/ByClass.vue | 5 +- .../oj/statistics/components/CodeStats.vue | 2 +- .../oj/statistics/components/FlowStats.vue | 2 +- .../src/oj/statistics/components/Lessons.vue | 4 +- .../src/oj/statistics/components/StatItem.vue | 2 +- .../statistics/components/StatisticsView.vue | 4 +- apps/web/src/oj/statistics/results.ts | 2 +- .../submission/components/FlowchartPane.vue | 2 +- .../submission/components/FlowchartState.vue | 2 +- .../oj/submission/components/StatusPill.vue | 2 +- .../submission/components/SubmissionPane.vue | 5 +- .../submission/components/SubmissionView.vue | 5 +- .../src/oj/submission/composables/explain.ts | 2 +- apps/web/src/oj/submission/list.vue | 5 +- apps/web/src/oj/submission/utils.ts | 55 ------------------- .../src/oj/user/components/ProfileCard.vue | 2 +- .../components/FlowchartEditor/index.vue | 27 ++++----- apps/web/src/shared/components/Login.vue | 2 +- .../src/shared/components/SyncCodeEditor.vue | 7 ++- .../submission => shared}/composables/tone.ts | 0 .../src/shared/extensions/autocompletion.ts | 18 ++++-- apps/web/src/utils/classes.ts | 55 +++++++++++++++++++ 59 files changed, 168 insertions(+), 142 deletions(-) rename apps/web/src/{oj/submission => shared}/composables/tone.ts (100%) create mode 100644 apps/web/src/utils/classes.ts diff --git a/apps/web/src/admin/ai/list.vue b/apps/web/src/admin/ai/list.vue index 42bfb09..e226f08 100644 --- a/apps/web/src/admin/ai/list.vue +++ b/apps/web/src/admin/ai/list.vue @@ -2,7 +2,7 @@ import { Icon } from "@iconify/vue" import PageHeader from "admin/components/PageHeader.vue" import { useThemeVars } from "naive-ui" -import { classLabel } from "oj/submission/utils" +import { classLabel } from "utils/classes" import { useBackClose } from "shared/composables/backClose" import { useBreakpoints } from "shared/composables/breakpoints" import Pagination from "shared/components/Pagination.vue" diff --git a/apps/web/src/admin/learn/index.vue b/apps/web/src/admin/learn/index.vue index 0d9676e..3ac1dbe 100644 --- a/apps/web/src/admin/learn/index.vue +++ b/apps/web/src/admin/learn/index.vue @@ -6,7 +6,7 @@ import { getLearnBoard, getLearnExercises } from "admin/api" import { parseTime, readableDuration } from "utils/functions" import { useConfigStore } from "shared/store/config" import UserName from "shared/components/UserName.vue" -import { groupClassOptions } from "oj/submission/utils" +import { groupClassOptions } from "utils/classes" import { groupByProject, splitTitle, type TutorialType } from "oj/learn/lesson" import "oj/learn/learn.css" import ExerciseAttempts from "./ExerciseAttempts.vue" diff --git a/apps/web/src/admin/problem/Stuck.vue b/apps/web/src/admin/problem/Stuck.vue index d480889..92ae0e0 100644 --- a/apps/web/src/admin/problem/Stuck.vue +++ b/apps/web/src/admin/problem/Stuck.vue @@ -7,7 +7,7 @@ import type { StuckProblem, StuckProblemDetail, StuckStudent } from "utils/types import { getStuckProblemDetail, getStuckProblems } from "admin/api" import { useConfigStore } from "shared/store/config" import UserName from "shared/components/UserName.vue" -import { classLabel, groupClassOptions } from "oj/submission/utils" +import { classLabel, groupClassOptions } from "utils/classes" import { periodRange, type Period } from "oj/statistics/period" import { resultName, useResultColor } from "oj/statistics/results" import { useBackClose } from "shared/composables/backClose" diff --git a/apps/web/src/admin/setting/config.vue b/apps/web/src/admin/setting/config.vue index f6a5381..d75e70e 100644 --- a/apps/web/src/admin/setting/config.vue +++ b/apps/web/src/admin/setting/config.vue @@ -1,7 +1,7 @@