From 97d3dabf4f3d29f37b2653d789303b542da5bef5 Mon Sep 17 00:00:00 2001 From: yuetsh <517252939@qq.com> Date: Mon, 19 Jan 2026 17:11:43 +0800 Subject: [PATCH] add class username --- src/oj/submission/list.vue | 4 +- src/shared/api.ts | 4 ++ src/shared/components/Login.vue | 48 ++++++++++++++++++++- src/shared/components/LoginSummaryModal.vue | 10 ++--- 4 files changed, 56 insertions(+), 10 deletions(-) diff --git a/src/oj/submission/list.vue b/src/oj/submission/list.vue index c348678..08e46df 100644 --- a/src/oj/submission/list.vue +++ b/src/oj/submission/list.vue @@ -357,7 +357,7 @@ const flowchartColumns: DataTableColumn[] = [ [] = [ -import { login } from "../api" +import { getClassUsernames, login } from "../api" import { storeToRefs } from "pinia" import { useAuthModalStore } from "../store/authModal" import { useConfigStore } from "../store/config" @@ -18,6 +18,8 @@ const { loginError: msg, } = storeToRefs(authStore) const loginRef = ref() +const classUserOptions = ref([]) +const classUserLoading = ref(false) const classList = computed(() => { const defaults = [{ label: "没有我所在的班级", value: "" }] const configs = @@ -28,7 +30,9 @@ const classList = computed(() => { return [...defaults, ...configs] }) const rules: FormRules = { - username: [{ required: true, message: "用户名必填", trigger: "blur" }], + username: [ + { required: true, message: "用户名必填", trigger: ["blur", "change"] }, + ], password: [ { required: true, message: "密码必填", trigger: "blur" }, { min: 6, max: 20, message: "长度在 6 到 20 位之间", trigger: "input" }, @@ -73,6 +77,34 @@ function goSignup() { authStore.switchToSignup() } +async function loadClassUsernames(selectedClass: string) { + classUserLoading.value = true + try { + const res = await getClassUsernames(selectedClass) + classUserOptions.value = res.data.map((name: string) => ({ + label: name, + value: name, + })) + } catch { + classUserOptions.value = [] + } finally { + classUserLoading.value = false + } +} + +watch( + () => form.value.class, + (selectedClass) => { + classUserOptions.value = [] + form.value.username = "" + if (!selectedClass) { + classUserLoading.value = false + return + } + loadClassUsernames(selectedClass.slice(2)) + }, +) + onMounted(() => { authStore.clearLoginError() }) @@ -107,7 +139,19 @@ onMounted(() => { /> + { }) const hasAnalysis = computed(() => !!loginSummaryStore.analysis) -