2026-01-08 09:17:46 +08:00
|
|
|
import request from "@/utils/request";
|
|
|
|
|
import type { PaginationParams, PaginationResponse } from "@/types/api";
|
|
|
|
|
|
|
|
|
|
export interface Judge {
|
|
|
|
|
id: number;
|
|
|
|
|
username: string;
|
|
|
|
|
nickname: string;
|
|
|
|
|
email?: string;
|
|
|
|
|
phone?: string;
|
|
|
|
|
gender?: 'male' | 'female';
|
|
|
|
|
avatar?: string;
|
|
|
|
|
status?: 'enabled' | 'disabled';
|
2026-01-12 16:06:34 +08:00
|
|
|
organization?: string;
|
2026-01-08 09:17:46 +08:00
|
|
|
validState?: number;
|
|
|
|
|
creator?: number;
|
|
|
|
|
modifier?: number;
|
|
|
|
|
createTime?: string;
|
|
|
|
|
modifyTime?: string;
|
|
|
|
|
roles?: Array<{
|
|
|
|
|
id: number;
|
|
|
|
|
role: {
|
|
|
|
|
id: number;
|
|
|
|
|
name: string;
|
|
|
|
|
code: string;
|
|
|
|
|
};
|
|
|
|
|
}>;
|
|
|
|
|
contestJudges?: Array<{
|
|
|
|
|
contest: {
|
|
|
|
|
id: number;
|
|
|
|
|
contestName: string;
|
|
|
|
|
status: string;
|
|
|
|
|
contestState?: string;
|
|
|
|
|
};
|
|
|
|
|
}>;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export interface QueryJudgeParams extends PaginationParams {
|
2026-01-12 16:06:34 +08:00
|
|
|
organization?: string;
|
2026-01-08 09:17:46 +08:00
|
|
|
nickname?: string;
|
|
|
|
|
username?: string;
|
|
|
|
|
status?: 'enabled' | 'disabled';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export interface CreateJudgeForm {
|
|
|
|
|
nickname: string;
|
|
|
|
|
gender: 'male' | 'female';
|
2026-01-12 16:06:34 +08:00
|
|
|
organization: string;
|
2026-01-08 09:17:46 +08:00
|
|
|
phone: string;
|
|
|
|
|
password: string;
|
|
|
|
|
username?: string;
|
|
|
|
|
email?: string;
|
|
|
|
|
avatar?: string;
|
|
|
|
|
status?: 'enabled' | 'disabled';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export interface UpdateJudgeForm {
|
|
|
|
|
nickname?: string;
|
|
|
|
|
gender?: 'male' | 'female';
|
2026-01-12 16:06:34 +08:00
|
|
|
organization?: string;
|
2026-01-08 09:17:46 +08:00
|
|
|
phone?: string;
|
|
|
|
|
password?: string;
|
|
|
|
|
username?: string;
|
|
|
|
|
email?: string;
|
|
|
|
|
avatar?: string;
|
|
|
|
|
status?: 'enabled' | 'disabled';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export interface JudgeListResponse {
|
|
|
|
|
list: Judge[];
|
|
|
|
|
total: number;
|
|
|
|
|
page: number;
|
|
|
|
|
pageSize: number;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 获取评委列表
|
|
|
|
|
export async function getJudgesList(
|
|
|
|
|
params: QueryJudgeParams
|
|
|
|
|
): Promise<JudgeListResponse> {
|
|
|
|
|
const response = await request.get<any, JudgeListResponse>(
|
|
|
|
|
"/judges-management",
|
|
|
|
|
{
|
|
|
|
|
params,
|
|
|
|
|
}
|
|
|
|
|
);
|
|
|
|
|
return response;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 获取单个评委详情
|
|
|
|
|
export async function getJudgeDetail(id: number): Promise<Judge> {
|
|
|
|
|
const response = await request.get<any, Judge>(`/judges-management/${id}`);
|
|
|
|
|
return response;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 创建评委
|
|
|
|
|
export async function createJudge(data: CreateJudgeForm): Promise<Judge> {
|
|
|
|
|
const response = await request.post<any, Judge>("/judges-management", data);
|
|
|
|
|
return response;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 更新评委
|
|
|
|
|
export async function updateJudge(
|
|
|
|
|
id: number,
|
|
|
|
|
data: UpdateJudgeForm
|
|
|
|
|
): Promise<Judge> {
|
|
|
|
|
const response = await request.patch<any, Judge>(
|
|
|
|
|
`/judges-management/${id}`,
|
|
|
|
|
data
|
|
|
|
|
);
|
|
|
|
|
return response;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 删除评委
|
|
|
|
|
export async function deleteJudge(id: number): Promise<void> {
|
|
|
|
|
return await request.delete<any, void>(`/judges-management/${id}`);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 冻结评委
|
|
|
|
|
export async function freezeJudge(id: number): Promise<Judge> {
|
|
|
|
|
const response = await request.patch<any, Judge>(
|
|
|
|
|
`/judges-management/${id}/freeze`
|
|
|
|
|
);
|
|
|
|
|
return response;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 解冻评委
|
|
|
|
|
export async function unfreezeJudge(id: number): Promise<Judge> {
|
|
|
|
|
const response = await request.patch<any, Judge>(
|
|
|
|
|
`/judges-management/${id}/unfreeze`
|
|
|
|
|
);
|
|
|
|
|
return response;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 批量删除评委
|
|
|
|
|
export async function batchDeleteJudges(ids: number[]): Promise<void> {
|
|
|
|
|
return await request.post<any, void>("/judges-management/batch-delete", {
|
|
|
|
|
ids,
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 兼容性导出:保留 judgesManagementApi 对象
|
|
|
|
|
export const judgesManagementApi = {
|
|
|
|
|
getList: getJudgesList,
|
|
|
|
|
getDetail: getJudgeDetail,
|
|
|
|
|
create: createJudge,
|
|
|
|
|
update: updateJudge,
|
|
|
|
|
delete: deleteJudge,
|
|
|
|
|
freeze: freezeJudge,
|
|
|
|
|
unfreeze: unfreezeJudge,
|
|
|
|
|
batchDelete: batchDeleteJudges,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
2026-01-12 16:06:34 +08:00
|
|
|
|
2026-01-14 10:06:08 +08:00
|
|
|
|
2026-01-14 14:29:16 +08:00
|
|
|
|
2026-01-15 16:35:00 +08:00
|
|
|
|