feat: 增加内容生成配置管理
This commit is contained in:
@@ -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" }),
|
||||
|
||||
Reference in New Issue
Block a user