feat: complete review workflow UI

This commit is contained in:
2026-06-20 09:20:24 +08:00
parent 45ac0a98d1
commit 8ed1d45ae1
9 changed files with 629 additions and 95 deletions
+89 -2
View File
@@ -10,8 +10,50 @@ export interface ReviewFeedItem {
createdTime: string;
}
export const getReviewFeed = (limit: number = 30) => {
return request.get("/review/feed", { limit });
export interface ReviewTaskStats {
taskNum: string;
taskName: string;
reportCount: number;
fragmentCount: number;
effectiveTime: number;
sessionCount: number;
todayEffectiveTime: number;
weekEffectiveTime: number;
avgEffectiveTime: number;
avgEffectivenessRatio: number;
}
export interface ReviewApplication {
id: number;
taskNum: string;
title: string;
description?: string;
resourceUrl?: string;
status: "TODO" | "DOING" | "DONE";
createdTime?: string;
lastModifiedTime?: string;
}
export interface ReviewMindMap {
id: number;
taskNum: string;
title: string;
content: string;
contentFormat: "TEXT" | "MERMAID" | "JSON";
createdTime?: string;
lastModifiedTime?: string;
}
export const getReviewFeed = (limit: number = 30, mode: "recent" | "random" = "recent") => {
return request.get("/review/feed", { limit, mode });
};
export const getReviewTaskStats = () => {
return request.get("/review/tasks");
};
export const getReviewTaskStatsByTask = (taskNum: string) => {
return request.get(`/review/tasks/${taskNum}`);
};
export const getReportDetail = (id: number) => {
@@ -25,3 +67,48 @@ export const getFragmentDetail = (id: number) => {
export const getTaskReview = (taskNum: string) => {
return request.get(`/review/task/${taskNum}`);
};
export const getReviewApplications = (taskNum: string) => {
return request.get(`/review/applications/${taskNum}`);
};
export const createReviewApplication = (payload: {
taskNum: string;
title: string;
description?: string;
resourceUrl?: string;
status?: ReviewApplication["status"];
}) => {
return request.post("/review/applications", payload);
};
export const updateReviewApplication = (
id: number,
payload: {
title: string;
description?: string;
resourceUrl?: string;
status?: ReviewApplication["status"];
},
) => {
return request.put(`/review/applications/${id}`, payload);
};
export const deleteReviewApplication = (id: number) => {
return request.del(`/review/applications/${id}`);
};
export const getReviewMindMap = (taskNum: string) => {
return request.get(`/review/mind-map/${taskNum}`);
};
export const upsertReviewMindMap = (
taskNum: string,
payload: {
title: string;
content: string;
contentFormat?: ReviewMindMap["contentFormat"];
},
) => {
return request.put(`/review/mind-map/${taskNum}`, payload);
};