From e71611ff1c68a041d6b6ff8e6ea4677ecba01d10 Mon Sep 17 00:00:00 2001 From: yuetsh <517252939@qq.com> Date: Wed, 24 Sep 2025 01:02:34 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9EAI=E5=88=86=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/A.png | Bin 0 -> 8228 bytes public/B.png | Bin 0 -> 9034 bytes public/C.png | Bin 0 -> 7776 bytes public/S.png | Bin 0 -> 11789 bytes src/admin/user/generate.vue | 33 +-- src/components.d.ts | 24 ++ src/oj/ai/analysis.vue | 240 ++++++++++++++++++ src/oj/ai/components/DifficultyChart.vue | 58 +++++ src/oj/ai/components/Grade.vue | 31 +++ src/oj/ai/components/TagTitle.vue | 21 ++ src/oj/ai/components/TagsChart.vue | 57 +++++ src/oj/ai/components/WeeklyChart.vue | 126 +++++++++ src/oj/api.ts | 18 +- .../problem/components/ProblemSubmission.vue | 22 +- .../submission/components/StatisticsPanel.vue | 21 +- src/routes.ts | 6 + src/shared/components/Header.vue | 10 +- src/shared/composables/chart.ts | 4 + src/utils/types.ts | 10 + 19 files changed, 636 insertions(+), 45 deletions(-) create mode 100644 public/A.png create mode 100644 public/B.png create mode 100644 public/C.png create mode 100644 public/S.png create mode 100644 src/oj/ai/analysis.vue create mode 100644 src/oj/ai/components/DifficultyChart.vue create mode 100644 src/oj/ai/components/Grade.vue create mode 100644 src/oj/ai/components/TagTitle.vue create mode 100644 src/oj/ai/components/TagsChart.vue create mode 100644 src/oj/ai/components/WeeklyChart.vue diff --git a/public/A.png b/public/A.png new file mode 100644 index 0000000000000000000000000000000000000000..01c828e4b770543a0f454eaa3924f918468ed96a GIT binary patch literal 8228 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 W88tzA=Y+BV0000^L`0~$mGCuayYf&(#v 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 literal 0 HcmV?d00001 diff --git a/src/admin/user/generate.vue b/src/admin/user/generate.vue index fbe89e8..88b7740 100644 --- a/src/admin/user/generate.vue +++ b/src/admin/user/generate.vue @@ -2,9 +2,8 @@ import { importUsers } from "../api" const message = useMessage() -const prefix = ref("") +const prefix = ref(0) const rawInput = ref("") -const [needKs] = useToggle(true) const [loading, toggleLoading] = useToggle() const users = shallowRef([]) @@ -13,25 +12,17 @@ function generateUsers() { message.info("请填写相关内容") return false } - // 自动加上 ks 的开头 - let myClass = "" - if (prefix.value) { - if (needKs.value && !prefix.value.startsWith("ks")) { - myClass = "ks" + prefix.value - } else { - myClass = prefix.value - } - } + let className = !!prefix.value ? `ks${prefix.value}` : "" rawInput.value = rawInput.value.trim() const inputs = rawInput.value.split("\n") users.value = inputs.map((u, i) => { - const username = myClass + u + const username = className + u let password = "" for (let j = 0; j < 6; j++) { password += "123456789".charAt(Math.floor(Math.random() * 9)) } const realName = u - const email = `${myClass}.${i + 1}@example.com` + const email = `${className}.${i + 1}@example.com` return [username, password, email, realName] }) return true @@ -68,14 +59,16 @@ async function submit() { - - 前面带上 ks +
ks
+
- + + + + + + + + 查询 + + + + + + {{ durationLabel }}, + {{ !!username ? username : "你" }}一共解决 + {{ solvedProblems.length }} + 道题, + + 并且参加 + {{ contest_count }} 次比赛, + + 综合评价给到 + + {{ greeting }} + + + + + + + + + + + + + + + + + + + + diff --git a/src/oj/ai/components/DifficultyChart.vue b/src/oj/ai/components/DifficultyChart.vue new file mode 100644 index 0000000..e059824 --- /dev/null +++ b/src/oj/ai/components/DifficultyChart.vue @@ -0,0 +1,58 @@ + + + diff --git a/src/oj/ai/components/Grade.vue b/src/oj/ai/components/Grade.vue new file mode 100644 index 0000000..3c9773d --- /dev/null +++ b/src/oj/ai/components/Grade.vue @@ -0,0 +1,31 @@ + + + diff --git a/src/oj/ai/components/TagTitle.vue b/src/oj/ai/components/TagTitle.vue new file mode 100644 index 0000000..48d91e3 --- /dev/null +++ b/src/oj/ai/components/TagTitle.vue @@ -0,0 +1,21 @@ + + diff --git a/src/oj/ai/components/TagsChart.vue b/src/oj/ai/components/TagsChart.vue new file mode 100644 index 0000000..f05c25b --- /dev/null +++ b/src/oj/ai/components/TagsChart.vue @@ -0,0 +1,57 @@ + + + diff --git a/src/oj/ai/components/WeeklyChart.vue b/src/oj/ai/components/WeeklyChart.vue new file mode 100644 index 0000000..0e0eb28 --- /dev/null +++ b/src/oj/ai/components/WeeklyChart.vue @@ -0,0 +1,126 @@ + + + diff --git a/src/oj/api.ts b/src/oj/api.ts index fca4b7e..f18d29e 100644 --- a/src/oj/api.ts +++ b/src/oj/api.ts @@ -90,7 +90,7 @@ export function getSubmissions(params: SubmissionListPayload) { } export function getRankOfProblem(problem_id: string) { - return http.get("user_problem_rank", { params: {problem_id: problem_id} }) + return http.get("user_problem_rank", { params: { problem_id: problem_id } }) } export function getTodaySubmissionCount() { @@ -244,3 +244,19 @@ export function getTutorial(id: number) { export function getTutorials() { return http.get("tutorials") } + +export function getAIDetailData(start: string, end: string, username?: string) { + return http.get("ai/detail", { params: { start, end, username } }) +} + +export function getAIWeeklyData( + end: string, + duration: string, + username?: string, +) { + return http.get("ai/weekly", { params: { end, duration, username } }) +} + +export function getAIAnalysis() { + return http.get("ai/analysis") +} diff --git a/src/oj/problem/components/ProblemSubmission.vue b/src/oj/problem/components/ProblemSubmission.vue index eaebbdb..0b5f9f3 100644 --- a/src/oj/problem/components/ProblemSubmission.vue +++ b/src/oj/problem/components/ProblemSubmission.vue @@ -66,6 +66,7 @@ const class_name = ref("") const rank = ref(-1) const class_ac_count = ref(0) const all_ac_count = ref(0) +const loading = ref(false) const submissions = ref([]) const total = ref(0) @@ -82,7 +83,8 @@ const showList = computed(() => { const errorMsg = computed(() => { if (!userStore.isAuthed) return "请先登录" - else if (!configStore.config.submission_list_show_all) return "不让看了" + else if (!configStore.config.submission_list_show_all) + return "提交列表已被管理员关闭" else return "" }) @@ -100,7 +102,10 @@ async function listSubmissions() { } async function getRankOfThisProblem() { + loading.value = true const res = await getRankOfProblem(route.params.problemID ?? "") + loading.value = false + class_name.value = res.data.class_name rank.value = res.data.rank class_ac_count.value = res.data.class_ac_count @@ -114,8 +119,9 @@ onMounted(() => { watch(query, listSubmissions)