feature: 新增伏笔管理系统,支持可视化追踪、AI智能关联回收及章节生成时的伏笔提醒
This commit is contained in:
@@ -470,7 +470,7 @@ export const outlineApi = {
|
||||
|
||||
export const characterApi = {
|
||||
getCharacters: (projectId: string) =>
|
||||
api.get<unknown, Character[]>(`/characters/project/${projectId}`),
|
||||
api.get<unknown, { total: number; items: Character[] }>(`/characters/project/${projectId}`).then(res => res.items),
|
||||
|
||||
getCharacter: (id: string) => api.get<unknown, Character>(`/characters/${id}`),
|
||||
|
||||
@@ -582,7 +582,7 @@ export const characterApi = {
|
||||
|
||||
export const chapterApi = {
|
||||
getChapters: (projectId: string) =>
|
||||
api.get<unknown, Chapter[]>(`/chapters/project/${projectId}`),
|
||||
api.get<unknown, { total: number; items: Chapter[] }>(`/chapters/project/${projectId}`).then(res => res.items),
|
||||
|
||||
getChapter: (id: string) => api.get<unknown, Chapter>(`/chapters/${id}`),
|
||||
|
||||
@@ -920,4 +920,85 @@ export const adminApi = {
|
||||
success: boolean;
|
||||
message: string;
|
||||
}>(`/admin/users/${userId}`),
|
||||
};
|
||||
|
||||
// 伏笔管理API
|
||||
export const foreshadowApi = {
|
||||
// 获取项目伏笔列表
|
||||
getProjectForeshadows: (projectId: string, params?: {
|
||||
status?: string;
|
||||
category?: string;
|
||||
source_type?: string;
|
||||
is_long_term?: boolean;
|
||||
page?: number;
|
||||
limit?: number;
|
||||
}) =>
|
||||
api.get<unknown, import('../types').ForeshadowListResponse>(
|
||||
`/foreshadows/projects/${projectId}`,
|
||||
{ params }
|
||||
),
|
||||
|
||||
// 获取伏笔统计
|
||||
getForeshadowStats: (projectId: string, currentChapter?: number) =>
|
||||
api.get<unknown, import('../types').ForeshadowStats>(
|
||||
`/foreshadows/projects/${projectId}/stats`,
|
||||
{ params: { current_chapter: currentChapter } }
|
||||
),
|
||||
|
||||
// 获取章节伏笔上下文
|
||||
getChapterContext: (projectId: string, chapterNumber: number, params?: {
|
||||
include_pending?: boolean;
|
||||
include_overdue?: boolean;
|
||||
lookahead?: number;
|
||||
}) =>
|
||||
api.get<unknown, import('../types').ForeshadowContextResponse>(
|
||||
`/foreshadows/projects/${projectId}/context/${chapterNumber}`,
|
||||
{ params }
|
||||
),
|
||||
|
||||
// 获取待回收伏笔
|
||||
getPendingResolveForeshadows: (projectId: string, currentChapter: number, lookahead?: number) =>
|
||||
api.get<unknown, { total: number; items: import('../types').Foreshadow[] }>(
|
||||
`/foreshadows/projects/${projectId}/pending-resolve`,
|
||||
{ params: { current_chapter: currentChapter, lookahead } }
|
||||
),
|
||||
|
||||
// 获取单个伏笔
|
||||
getForeshadow: (foreshadowId: string) =>
|
||||
api.get<unknown, import('../types').Foreshadow>(`/foreshadows/${foreshadowId}`),
|
||||
|
||||
// 创建伏笔
|
||||
createForeshadow: (data: import('../types').ForeshadowCreate) =>
|
||||
api.post<unknown, import('../types').Foreshadow>('/foreshadows', data),
|
||||
|
||||
// 更新伏笔
|
||||
updateForeshadow: (foreshadowId: string, data: import('../types').ForeshadowUpdate) =>
|
||||
api.put<unknown, import('../types').Foreshadow>(`/foreshadows/${foreshadowId}`, data),
|
||||
|
||||
// 删除伏笔
|
||||
deleteForeshadow: (foreshadowId: string) =>
|
||||
api.delete<unknown, { message: string; id: string }>(`/foreshadows/${foreshadowId}`),
|
||||
|
||||
// 标记伏笔为已埋入
|
||||
plantForeshadow: (foreshadowId: string, data: import('../types').PlantForeshadowRequest) =>
|
||||
api.post<unknown, import('../types').Foreshadow>(`/foreshadows/${foreshadowId}/plant`, data),
|
||||
|
||||
// 标记伏笔为已回收
|
||||
resolveForeshadow: (foreshadowId: string, data: import('../types').ResolveForeshadowRequest) =>
|
||||
api.post<unknown, import('../types').Foreshadow>(`/foreshadows/${foreshadowId}/resolve`, data),
|
||||
|
||||
// 标记伏笔为已废弃
|
||||
abandonForeshadow: (foreshadowId: string, reason?: string) =>
|
||||
api.post<unknown, import('../types').Foreshadow>(
|
||||
`/foreshadows/${foreshadowId}/abandon`,
|
||||
null,
|
||||
{ params: { reason } }
|
||||
),
|
||||
|
||||
// 从分析结果同步伏笔
|
||||
syncFromAnalysis: (projectId: string, data: import('../types').SyncFromAnalysisRequest) =>
|
||||
api.post<unknown, import('../types').SyncFromAnalysisResponse>(
|
||||
`/foreshadows/projects/${projectId}/sync-from-analysis`,
|
||||
data
|
||||
),
|
||||
};
|
||||
Reference in New Issue
Block a user