feat: 文案库管理独立页面(放导航标题库下方) #1811

Open
opened 2026-09-09 08:38:10 +08:00 by xiaoxia · 0 comments
Owner

需求

把文案库从 AI数字人弹窗里抽出来,做成独立页面,放在导航「资源管理→标题库」正下方。

硬性要求

严格按照要求做,不脑补,不改变其他功能和 UI 设计。

改动范围(仅这 3 处 + 新页面)

1. 路由注册 apps/web/src/router/appRoutes.tsx

titles 路由(/app/titles之后voices/products 之前,新增:

{
  path: "scripts",
  lazy: lazyRoute(() => import("@/pages/scripts/ScriptLibrary")),
}

2. 导航注册 apps/web/src/config/navigation.ts

NAV_ITEMS 数组:在 titles之后新增:

{
  key: "scripts",
  label: "文案库",
  path: "/app/scripts",
  icon: React.createElement(EditOutlined),  // 或其他合适图标,不要新造风格
},

NAV_GROUPS「资源管理」items 数组:同样在 titles之后插入同一条。

3. 新建页面 apps/web/src/pages/scripts/ScriptLibrary.tsx

风格与 apps/web/src/pages/titles/TitleLibrary.tsx 对齐(同类资源管理页面统一风格),但不复制代码,按需简化。

功能(按后端已有 API 能力,不额外发挥):

  • 文案列表:展示 title / content(截取预览)/ 字数 / 创建时间
  • 新建文案:弹窗表单,字段 title + content
  • 编辑文案:弹窗表单,同上
  • 删除文案:确认后删除
  • 搜索:按 title 搜索
  • 列表为空时的空状态

对接后端 API(已上线 staging):

  • GET /api/v1/scripts — 列表(返回 {items, total}
  • POST /api/v1/scripts — 新建(body {title, content}
  • PUT /api/v1/scripts/{id} — 编辑
  • DELETE /api/v1/scripts/{id} — 删除

不要做的:

  • 不要加分类/标签/行业筛选(标题库有这些,但文案库后端没这些字段,不要硬造)
  • 不要加 AI 生成文案(文案库后端没这个接口)
  • 不要改标题库、智能剪辑、AI数字人等任何现有页面
  • 不要改 SideBar/Header/AppLayout 的布局

4. AI数字人弹窗保留「从文案库选择」入口

  • AiAvatarPage.tsx 的文案选择弹窗(ModalScriptPicker)保留,从文案库选择时点击打开独立文案库页面选择?或保持弹窗内选?
  • 建议:弹窗内保留轻量选择(只读列表+选中),新建/编辑等管理操作引导去独立页面。
  • 如果你希望弹窗完全移除、全部去独立页面选,请说明。

验收标准

  • 导航「资源管理」下标题库正下方出现「文案库」入口
  • 进入 /app/scripts 显示文案列表
  • 能新建、编辑、删除文案,列表实时刷新
  • 搜索功能正常
  • 列表为空有空状态提示
  • 风格与标题库对齐
  • 不破坏任何现有页面/功能
  • PR CI 全绿

参考

  • 标题库页面:apps/web/src/pages/titles/TitleLibrary.tsx
  • 后端 API 封装参考:apps/api/app/services/script_service.py
  • 现有前端文案 API:apps/web/src/pages/ai-avatar/api/aiAvatar.ts(getScripts 等,需解包 items)
## 需求 把文案库从 AI数字人弹窗里抽出来,做成独立页面,放在导航「资源管理→标题库」正下方。 ## 硬性要求 **严格按照要求做,不脑补,不改变其他功能和 UI 设计。** ## 改动范围(仅这 3 处 + 新页面) ### 1. 路由注册 `apps/web/src/router/appRoutes.tsx` 在 `titles` 路由(`/app/titles`)**之后**、`voices`/`products` 之前,新增: ```ts { path: "scripts", lazy: lazyRoute(() => import("@/pages/scripts/ScriptLibrary")), } ``` ### 2. 导航注册 `apps/web/src/config/navigation.ts` NAV_ITEMS 数组:在 `titles` 项**之后**新增: ```ts { key: "scripts", label: "文案库", path: "/app/scripts", icon: React.createElement(EditOutlined), // 或其他合适图标,不要新造风格 }, ``` NAV_GROUPS「资源管理」items 数组:同样在 `titles` 项**之后**插入同一条。 ### 3. 新建页面 `apps/web/src/pages/scripts/ScriptLibrary.tsx` 风格与 `apps/web/src/pages/titles/TitleLibrary.tsx` **对齐**(同类资源管理页面统一风格),但不复制代码,按需简化。 **功能(按后端已有 API 能力,不额外发挥):** - 文案列表:展示 title / content(截取预览)/ 字数 / 创建时间 - 新建文案:弹窗表单,字段 title + content - 编辑文案:弹窗表单,同上 - 删除文案:确认后删除 - 搜索:按 title 搜索 - 列表为空时的空状态 **对接后端 API(已上线 staging):** - `GET /api/v1/scripts` — 列表(返回 `{items, total}`) - `POST /api/v1/scripts` — 新建(body `{title, content}`) - `PUT /api/v1/scripts/{id}` — 编辑 - `DELETE /api/v1/scripts/{id}` — 删除 **不要做的:** - 不要加分类/标签/行业筛选(标题库有这些,但文案库后端没这些字段,不要硬造) - 不要加 AI 生成文案(文案库后端没这个接口) - 不要改标题库、智能剪辑、AI数字人等任何现有页面 - 不要改 SideBar/Header/AppLayout 的布局 ### 4. AI数字人弹窗保留「从文案库选择」入口 - `AiAvatarPage.tsx` 的文案选择弹窗(ModalScriptPicker)保留,从文案库选择时点击打开独立文案库页面选择?或保持弹窗内选? - **建议**:弹窗内保留轻量选择(只读列表+选中),新建/编辑等管理操作引导去独立页面。 - 如果你希望弹窗完全移除、全部去独立页面选,请说明。 ## 验收标准 - [ ] 导航「资源管理」下标题库正下方出现「文案库」入口 - [ ] 进入 /app/scripts 显示文案列表 - [ ] 能新建、编辑、删除文案,列表实时刷新 - [ ] 搜索功能正常 - [ ] 列表为空有空状态提示 - [ ] 风格与标题库对齐 - [ ] 不破坏任何现有页面/功能 - [ ] PR CI 全绿 ## 参考 - 标题库页面:apps/web/src/pages/titles/TitleLibrary.tsx - 后端 API 封装参考:apps/api/app/services/script_service.py - 现有前端文案 API:apps/web/src/pages/ai-avatar/api/aiAvatar.ts(getScripts 等,需解包 items)
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: xiaoxia/xiaoxia-saas#1811