diff --git a/apps/web/src/admin/api.ts b/apps/web/src/admin/api.ts index 1c7b8b8..ef7bf3d 100644 --- a/apps/web/src/admin/api.ts +++ b/apps/web/src/admin/api.ts @@ -51,6 +51,7 @@ import type { GenerateTestInputsRequest, GenerateTestInputsResponse, TestCaseFiles, + CheckUsernamesResponse, } from "@oj2/contract" export function getBaseInfo() { @@ -182,7 +183,15 @@ export function getAdminUserRank(offset: number, limit: number, keyword: string) } // 用户列表 -export function getUserList(offset = 0, limit = 10, type = "", keyword: string, orderBy = "") { +export function getUserList( + offset = 0, + limit = 10, + type = "", + keyword: string, + orderBy = "", + /** 班级,NO_CLASS 是「没填班级」 */ + className = "", +) { return api.get("admin/users", { // "-last_login" 是旧接口传下来的取值(路由 query 里可能还存着),改叫 "-lastLogin"; // "-online" 是新增的,原样透传 @@ -192,10 +201,16 @@ export function getUserList(offset = 0, limit = 10, type = "", keyword: string, keyword, type, orderBy: orderBy === "-last_login" ? "-lastLogin" : orderBy, + className: className || undefined, }, }) } +/** 批量建号之前查重:这些用户名哪些已经有了 */ +export function checkUsernames(usernames: string[]) { + return api.post("admin/users/check", { usernames }) +} + // 编辑用户 export function editUser(user: AdminUserForm) { return api.put(`admin/users/${user.id}`, { @@ -216,8 +231,9 @@ export async function resetPassword(userID: number) { } // 导入用户 +/** 批量建号。addedClasses:这批里的新班级,后端已经顺手加进了班级列表 */ export function importUsers(users: string[][]) { - return api.post("admin/users", { users }) + return api.post<{ imported: number; addedClasses: string[] }>("admin/users", { users }) } // 批量删除用户 diff --git a/apps/web/src/admin/user/components/Actions.vue b/apps/web/src/admin/user/components/Actions.vue index ececb14..4c744ff 100644 --- a/apps/web/src/admin/user/components/Actions.vue +++ b/apps/web/src/admin/user/components/Actions.vue @@ -1,7 +1,13 @@ diff --git a/apps/web/src/admin/user/components/UserNameCell.vue b/apps/web/src/admin/user/components/UserNameCell.vue index 69e5685..52f4ead 100644 --- a/apps/web/src/admin/user/components/UserNameCell.vue +++ b/apps/web/src/admin/user/components/UserNameCell.vue @@ -11,20 +11,27 @@ const props = defineProps() const hasRoleTag = computed(() => props.user.adminType !== USER_TYPE.REGULAR_USER) diff --git a/apps/web/src/admin/user/generate.vue b/apps/web/src/admin/user/generate.vue index 8b20c32..c985ac6 100644 --- a/apps/web/src/admin/user/generate.vue +++ b/apps/web/src/admin/user/generate.vue @@ -1,5 +1,7 @@ diff --git a/apps/web/src/admin/user/list.vue b/apps/web/src/admin/user/list.vue index 6126951..0f73064 100644 --- a/apps/web/src/admin/user/list.vue +++ b/apps/web/src/admin/user/list.vue @@ -1,7 +1,7 @@ @@ -357,3 +411,24 @@ watch(() => [query.page, query.limit, query.type, query.orderBy], listUsers) + +