Files
lpt-fe/src/api/review.ts
T
cat-shark 5616399108 feat(复习):滚动条回忆卡片——先回忆再对照
- 点击滚动内容不再直接跳详情,先弹回忆卡片展示单条片段
- 用户自行回忆后点击'展开对照'查看该会话全部报告/残片
- 滚动 feed 切换为 smart 模式(时间衰减+掌握度加权)
- 引入主动回忆环节,将 incidental exposure 转化为 testing effect
2026-07-03 23:59:39 +08:00

91 lines
2.3 KiB
TypeScript

import request from "@/utils/request";
export interface ReviewFeedItem {
id: number;
sessionNum: string;
taskNum: string;
taskName: string;
sourceType: "REPORT" | "FRAGMENT";
content: string;
createdTime: string;
}
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 ReviewMindMap {
id: number;
taskNum: string;
title: string;
content: string;
contentFormat: "TEXT" | "MERMAID" | "JSON";
sourceType?: "MANUAL" | "FILE";
fileName?: string;
filePath?: string;
fileFormat?: "XMIND" | "MARKDOWN" | "OPML" | "FREEMIND" | "TEXT";
parsedContent?: string;
parseStatus?: "SUCCESS" | "FAILED";
parseError?: string;
summary?: string;
lastParsedTime?: string;
createdTime?: string;
lastModifiedTime?: string;
}
export const getReviewFeed = (limit: number = 30, mode: "recent" | "random" | "smart" = "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) => {
return request.get(`/review/report/${id}`);
};
export const getFragmentDetail = (id: number) => {
return request.get(`/review/fragment/${id}`);
};
export const getTaskReview = (taskNum: string) => {
return request.get(`/review/task/${taskNum}`);
};
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);
};
export const uploadReviewMindMap = (taskNum: string, file: File) => {
const formData = new FormData();
formData.append("file", file);
return request.post(`/review/mind-map/${taskNum}/upload`, formData, {
headers: { "Content-Type": "multipart/form-data" },
});
};