feat: 增加内容生成配置管理

This commit is contained in:
2026-08-03 17:23:42 +08:00
parent 3f8ff30bbc
commit 8ee4d65b7b
17 changed files with 1348 additions and 43 deletions

View File

@@ -15,6 +15,11 @@ import type {
const API_BASE = import.meta.env.VITE_API_BASE_URL ?? "/api";
const TOKEN_KEY = "ai-kb-user-token";
const REQUEST_TIMEOUT_MS = 15_000;
const CONTENT_GENERATION_TIMEOUT_MS = 45_000;
interface RequestOptions {
timeoutMs?: number;
}
export class ApiError extends Error {
constructor(
@@ -39,7 +44,7 @@ export function clearToken() {
window.localStorage.removeItem(TOKEN_KEY);
}
async function request<T>(path: string, init: RequestInit = {}): Promise<T> {
async function request<T>(path: string, init: RequestInit = {}, options: RequestOptions = {}): Promise<T> {
const headers = new Headers(init.headers);
headers.set("Content-Type", "application/json");
const token = getToken();
@@ -47,7 +52,7 @@ async function request<T>(path: string, init: RequestInit = {}): Promise<T> {
headers.set("Authorization", `Bearer ${token}`);
}
const controller = new AbortController();
const timeout = window.setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);
const timeout = window.setTimeout(() => controller.abort(), options.timeoutMs ?? REQUEST_TIMEOUT_MS);
let response: Response;
try {
response = await fetch(`${API_BASE}${path}`, { ...init, headers, signal: controller.signal });
@@ -90,11 +95,19 @@ export const api = {
deleteSession: (sessionId: number) => request<null>(`/chat/session/${sessionId}`, { method: "DELETE" }),
finishTopic: (sessionId: number) => request<FinishTopicResult>(`/chat/session/${sessionId}/topic/finish`, { method: "POST", body: JSON.stringify({}) }),
topicSettlement: (summaryId: number) => request<FinishTopicResult>(`/chat/topic/settlement/${summaryId}`),
generateHelpCard: (sessionId: number) => request<TeacherHelpCard>(`/chat/session/${sessionId}/help-card`, { method: "POST", body: JSON.stringify({}) }),
generateHelpCard: (sessionId: number) => request<TeacherHelpCard>(
`/chat/session/${sessionId}/help-card`,
{ method: "POST", body: JSON.stringify({}) },
{ timeoutMs: CONTENT_GENERATION_TIMEOUT_MS },
),
markHelpCardCopied: (cardId: number) => request<TeacherHelpCard>(`/chat/help-card/${cardId}/copied`, { method: "POST", body: JSON.stringify({}) }),
helpCards: (limit = 20) => request<TeacherHelpCard[]>(`/chat/help-card/list?limit=${limit}`),
deleteHelpCard: (cardId: number) => request<null>(`/chat/help-card/${cardId}`, { method: "DELETE" }),
generateShareDraft: (sessionId: number) => request<ShareDraft>(`/chat/session/${sessionId}/share-draft`, { method: "POST", body: JSON.stringify({}) }),
generateShareDraft: (sessionId: number) => request<ShareDraft>(
`/chat/session/${sessionId}/share-draft`,
{ method: "POST", body: JSON.stringify({}) },
{ timeoutMs: CONTENT_GENERATION_TIMEOUT_MS },
),
markShareDraftCopied: (draftId: number) => request<ShareDraft>(`/chat/share-draft/${draftId}/copied`, { method: "POST", body: JSON.stringify({}) }),
shareDrafts: (limit = 20) => request<ShareDraft[]>(`/chat/share-draft/list?limit=${limit}`),
deleteShareDraft: (draftId: number) => request<null>(`/chat/share-draft/${draftId}`, { method: "DELETE" }),