Files
lpt-fe/src/api/standardMindMap.ts
T

73 lines
2.4 KiB
TypeScript

import request from "@/utils/request";
import type { ApiResponse } from "@/utils/request";
// ============ 标准思维导图 ============
export interface StandardMindMap {
id: number;
taskNum: string;
title: string;
content: string;
outline: string;
summary: string;
generator: "BUILTIN" | "AI" | "USER" | "USER_MERGE";
generatorVersion?: string;
sourceReportCount: number;
generatedTime?: string;
createdTime?: string;
lastModifiedTime?: string;
}
export interface RecallRecord {
id: number;
taskNum: string;
standardMapId: number;
focusPath?: string;
recallContent: string;
compareResult: string;
recallRatio: number;
matchedCount: number;
missedCount: number;
extraCount: number;
createdTime: string;
}
// AI 聚合类接口耗时较长,统一放宽到 5 分钟(默认全局 30s)
const AI_TIMEOUT = { timeout: 300_000 };
/** 获取/自动生成标准思维导图(首次访问会触发 AI 生成) */
export const getStandardMindMap = (taskNum: string) => {
return request.get<StandardMindMap>(`/review/standard-mind-map/${taskNum}`, {}, AI_TIMEOUT);
};
/** 强制重新生成标准思维导图(全量或增量) */
export const regenerateStandardMindMap = (taskNum: string, mode: "full" | "incremental" = "full") => {
return request.post<StandardMindMap>(`/review/standard-mind-map/${taskNum}/regenerate?mode=${mode}`, null, AI_TIMEOUT);
};
/** 用户编辑标准思维导图(大纲文本) */
export const updateStandardMindMap = (taskNum: string, outline: string) => {
return request.put(`/review/standard-mind-map/${taskNum}`, { outline });
};
/** 用户提交回忆大纲,与标准导图对比(可选指定起始节点路径) */
export const recallCompare = (
taskNum: string,
recallOutline: string,
focusPath?: string,
): Promise<ApiResponse<StandardMindMap>> => {
const body: Record<string, any> = { recallOutline };
if (focusPath) body.focusPath = focusPath;
return request.post(`/review/standard-mind-map/${taskNum}/recall`, body, AI_TIMEOUT);
};
/** 在标准导图中查找与内容最匹配的节点 */
export const findNode = (taskNum: string, content: string) => {
return request.post<{ path: string }>(`/review/standard-mind-map/${taskNum}/find-node`, { content });
};
/** 获取该任务的所有回忆对比记录 */
export const listRecallRecords = (taskNum: string) => {
return request.get<RecallRecord[]>(`/review/standard-mind-map/${taskNum}/recall-records`);
};