diff --git a/apps/web/src/api/scripts/scripts.ts b/apps/web/src/api/scripts/scripts.ts index d3862dcfc..ac9524dd7 100644 --- a/apps/web/src/api/scripts/scripts.ts +++ b/apps/web/src/api/scripts/scripts.ts @@ -11,8 +11,11 @@ import type { ScriptCategory, } from "./types" -/** 是否启用 mock(后端合入后改为 false) */ -export const SCRIPTS_API_MOCK = true +/** + * 是否启用 mock(#1894:文案库接口已上线,默认 false 走真实 API; + * 通过 SCRIPTS_API_MOCK=true 环境变量可本地开启 mock 调试,行为同 POINTS_API_MOCK) + */ +export const SCRIPTS_API_MOCK = (process.env.SCRIPTS_API_MOCK as string | undefined) === "true" // ==================== Mock 数据 ==================== diff --git a/apps/web/src/api/titles/index.ts b/apps/web/src/api/titles/index.ts deleted file mode 100644 index 9900272d0..000000000 --- a/apps/web/src/api/titles/index.ts +++ /dev/null @@ -1,19 +0,0 @@ -/** - * 标题相关 API — 目录化入口 - * 保持与原 titles.ts 相同导出,向后兼容 - */ - -// 类型 -export type { - TitleItem, - BackendTitleResponse, - BackendCreateTitleRequest, - BackendUpdateTitleRequest, - CreateTitleRequest, -} from "./types" - -// 工具函数 -export { toTitleItem } from "./utils" - -// API 函数 -export { getTitles, createTitle, updateTitle, deleteTitle, batchImportTitles } from "./titles" diff --git a/apps/web/src/api/titles/titles.ts b/apps/web/src/api/titles/titles.ts deleted file mode 100644 index b4174f820..000000000 --- a/apps/web/src/api/titles/titles.ts +++ /dev/null @@ -1,65 +0,0 @@ -/** - * 标题相关 API 函数 - * Phase 1 新增:全局标题库 - * 注意:后端 schema 使用 name + text 字段,前端 UI 用 content 展示 - */ -import apiClient from "../client" -import type { - BackendCreateTitleRequest, - BackendTitleResponse, - BackendUpdateTitleRequest, - CreateTitleRequest, - TitleItem, -} from "./types" -import { toTitleItem } from "./utils" - -/** 获取当前用户的所有标题 */ -export const getTitles = async (): Promise => { - const response = await apiClient.get<{ items: BackendTitleResponse[] } | BackendTitleResponse[]>( - "/titles", - ) - // 兼容两种后端返回格式:{ items: [...] } 或直接 [...] - const items = Array.isArray(response.data) ? response.data : response.data.items || [] - return items.map(toTitleItem) -} - -/** 创建标题 */ -export const createTitle = async (data: CreateTitleRequest): Promise => { - // 后端要求 name(≤255)和 text(≤500),name 从 content 截取 - const payload: BackendCreateTitleRequest = { - name: data.content.slice(0, 255), - text: data.content.slice(0, 500), - category: data.category || "default", - } - const response = await apiClient.post("/titles", payload) - return toTitleItem(response.data) -} - -/** 更新标题 */ -export const updateTitle = async ( - titleId: string, - data: Partial, -): Promise => { - const payload: BackendUpdateTitleRequest = {} - if (data.content !== undefined) { - payload.name = data.content.slice(0, 255) - payload.text = data.content.slice(0, 500) - } - if (data.category !== undefined) { - payload.category = data.category - } - // 后端用 PUT,非 PATCH - const response = await apiClient.put(`/titles/${titleId}`, payload) - return toTitleItem(response.data) -} - -/** 删除标题 */ -export const deleteTitle = async (titleId: string): Promise => { - await apiClient.delete(`/titles/${titleId}`) -} - -/** 批量导入标题 */ -export const batchImportTitles = async (titles: string[]): Promise<{ imported_count: number }> => { - const response = await apiClient.post("/titles/batch-import", { titles }) - return response.data -} diff --git a/apps/web/src/api/titles/types.ts b/apps/web/src/api/titles/types.ts deleted file mode 100644 index 37dc715d9..000000000 --- a/apps/web/src/api/titles/types.ts +++ /dev/null @@ -1,54 +0,0 @@ -/** - * 标题相关类型定义 - */ - -/** 标题条目(前端展示用) */ -export interface TitleItem { - id: string - content: string - category?: string - source?: string - word_count?: number - is_favorite?: boolean - created_at?: string - updated_at?: string -} - -/** 后端标题响应格式 */ -export interface BackendTitleResponse { - id: string - user_id: string - name: string - text: string - category: string - description: string - tags: string[] - usage_count: number - is_active: boolean - created_at: string - updated_at: string -} - -/** 后端创建标题请求格式 */ -export interface BackendCreateTitleRequest { - name: string - text: string - category: string - description?: string - tags?: string[] -} - -/** 后端更新标题请求格式 */ -export interface BackendUpdateTitleRequest { - name?: string - text?: string - category?: string - description?: string - tags?: string[] -} - -/** 创建标题请求(前端接口,保持向后兼容) */ -export interface CreateTitleRequest { - content: string - category?: string -} diff --git a/apps/web/src/api/titles/utils.ts b/apps/web/src/api/titles/utils.ts deleted file mode 100644 index 64b88fbfd..000000000 --- a/apps/web/src/api/titles/utils.ts +++ /dev/null @@ -1,14 +0,0 @@ -/** - * 标题数据转换工具函数 - */ -import type { BackendTitleResponse, TitleItem } from "./types" - -/** 将后端响应映射为前端 TitleItem */ -export const toTitleItem = (item: BackendTitleResponse): TitleItem => ({ - id: item.id, - content: item.text, - category: item.category, - word_count: item.text?.length || 0, - created_at: item.created_at, - updated_at: item.updated_at, -}) diff --git a/apps/web/src/pages/ai-avatar/AiAvatarPage.tsx b/apps/web/src/pages/ai-avatar/AiAvatarPage.tsx index e51cff39d..a9a10e723 100644 --- a/apps/web/src/pages/ai-avatar/AiAvatarPage.tsx +++ b/apps/web/src/pages/ai-avatar/AiAvatarPage.tsx @@ -619,6 +619,7 @@ const AiAvatarPage: React.FC = () => { scriptText={state.scriptText} onScriptTextChange={state.setScriptText} onOpenScriptModal={() => state.setShowScriptModal(true)} + onScriptCreated={(s) => state.selectScript(s as import("./types").Script)} />