library-picturebook-activity/frontend/src/api/preset-comments.ts
zhangxiaohua f6b292bebf 新增预设评语功能及评审相关优化
- 新增预设评语表(PresetComment)及相关API
- 新增预设评语管理页面
- 优化评审作品弹框,支持预设评语选择
- 优化赛果发布列表页面
- 更新路由和菜单配置

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 14:46:25 +08:00

140 lines
3.3 KiB
TypeScript

import request from "@/utils/request";
export interface PresetComment {
id: number;
contestId: number;
judgeId: number;
content: string;
score?: number;
sortOrder: number;
useCount: number;
validState: number;
creator?: number;
modifier?: number;
createTime: string;
modifyTime: string;
}
export interface CreatePresetCommentParams {
contestId: number;
content: string;
score?: number;
sortOrder?: number;
}
export interface UpdatePresetCommentParams {
content?: string;
score?: number;
sortOrder?: number;
}
export interface SyncPresetCommentsParams {
sourceContestId: number;
targetContestIds: number[];
}
export interface JudgeContest {
id: number;
contestName: string;
contestState: string;
status: string;
}
// 获取预设评语列表
export async function getPresetCommentsList(
contestId: number
): Promise<PresetComment[]> {
const response = await request.get<any, PresetComment[]>(
"/contests/preset-comments",
{
params: { contestId },
}
);
return response;
}
// 获取单个预设评语详情
export async function getPresetCommentDetail(
id: number
): Promise<PresetComment> {
const response = await request.get<any, PresetComment>(
`/contests/preset-comments/${id}`
);
return response;
}
// 创建预设评语
export async function createPresetComment(
data: CreatePresetCommentParams
): Promise<PresetComment> {
const response = await request.post<any, PresetComment>(
"/contests/preset-comments",
data
);
return response;
}
// 更新预设评语
export async function updatePresetComment(
id: number,
data: UpdatePresetCommentParams
): Promise<PresetComment> {
const response = await request.patch<any, PresetComment>(
`/contests/preset-comments/${id}`,
data
);
return response;
}
// 删除预设评语
export async function deletePresetComment(id: number): Promise<void> {
return await request.delete<any, void>(`/contests/preset-comments/${id}`);
}
// 批量删除预设评语
export async function batchDeletePresetComments(ids: number[]): Promise<void> {
return await request.post<any, void>("/contests/preset-comments/batch-delete", {
ids,
});
}
// 同步预设评语到其他赛事
export async function syncPresetComments(
data: SyncPresetCommentsParams
): Promise<{ message: string; count: number }> {
const response = await request.post<any, { message: string; count: number }>(
"/contests/preset-comments/sync",
data
);
return response;
}
// 获取评委的赛事列表
export async function getJudgeContests(): Promise<JudgeContest[]> {
const response = await request.get<any, JudgeContest[]>(
"/contests/preset-comments/judge/contests"
);
return response;
}
// 增加使用次数
export async function incrementUseCount(id: number): Promise<PresetComment> {
const response = await request.post<any, PresetComment>(
`/contests/preset-comments/${id}/use`
);
return response;
}
// 兼容性导出:保留 presetCommentsApi 对象
export const presetCommentsApi = {
getList: getPresetCommentsList,
getDetail: getPresetCommentDetail,
create: createPresetComment,
update: updatePresetComment,
delete: deletePresetComment,
batchDelete: batchDeletePresetComments,
sync: syncPresetComments,
getJudgeContests: getJudgeContests,
incrementUseCount: incrementUseCount,
};