5616399108
- 点击滚动内容不再直接跳详情,先弹回忆卡片展示单条片段 - 用户自行回忆后点击'展开对照'查看该会话全部报告/残片 - 滚动 feed 切换为 smart 模式(时间衰减+掌握度加权) - 引入主动回忆环节,将 incidental exposure 转化为 testing effect
91 lines
2.3 KiB
TypeScript
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" },
|
|
});
|
|
};
|