fix(ux): #1894 文案/标题数据源全面切到 /api/v1/scripts(P1 阻塞发版) #1971

Merged
auto-approve-bot merged 2 commits from fix/1894-script-title-source-cleanup into develop 2026-09-17 04:53:59 +08:00
Owner

背景

#1894 第一批(PR #1965 已合入)切换文案库后,主人在 staging 实测发现多个页面数据源没切干净:

  1. AI数字人-文案选择:文案库中的文案选不到
  2. AI数字人-历史文案:用户手动输入的文案在新文案库找不到
  3. AI数字人-标题选择:标题没对接到文案库 title
  4. 智能剪辑-标题选择:标题没对接到文案库 title

阻塞 #1894 发版,需要立即修复。

根因定位

问题 根因
文案/标题选不到 api/scripts/scripts.tsSCRIPTS_API_MOCK = true 硬编码,所有文案库消费端走 mock 数据
AI数字人、智能剪辑标题下拉空 PanelTitleConfig / useStep4Title 还在调已废弃的 @/api/titles
AI数字人自输文案看不到 手动输入的文案不会自动入库,切到新接口后自然消失
AI数字人字段对不齐 本地复写了一份 getScripts,与共享 @/api/scripts 类型不一致

修复清单

  • api/scripts/scripts.tsSCRIPTS_API_MOCK 改为环境变量开关(同 POINTS_API_MOCK 模式,默认 false 走真实 API)
  • 删除废弃 api/titles/ 整个目录 + 孤儿组件 TitleLibraryModal.tsx + test/api/titles.test.ts
  • pages/ai-avatar/api/aiAvatar.ts:文案 CRUD 方法统一 re-export from @/api/scripts,去重本地实现
  • pages/ai-avatar/types.tsScript 类型改为 import("@/api/scripts").ScriptItem
  • AiAvatarPage.tsxScriptSelectModalLazy:适配 { items, total } 分页响应,page_size:200
  • PanelScript.tsx:手动输入 tab 增加「💾 保存到文案库」按钮(正文前 20 字自动作标题),toast 1s 自动关闭
  • PanelTitleConfig.tsx:标题 AutoComplete 改为从 getScripts()s.title 去重候选,label 改为「📚 文案库标题」
  • generate/hooks/useStep4Title/index.tsuserTitles 改为从 getScripts() 映射 { content: s.title }
  • test/pages/GeneratePage.test.tsx:mock 从 @/api/titles 替换为 @/api/scripts

验证

  • CI Lint / Unit / Build / Integration 全绿
  • AI Code Review 通过
  • staging 重测:AI数字人文案选择/保存、AI数字人标题选择、智能剪辑标题选择

待跟进

  • P2 抖音链接错误提示友好化(等后端 #1963 合入后联调)
  • 等后端删 title_text/title_config 字段后,清理 api/scripts/types.ts 里的残留类型

Refs: #1894

## 背景 #1894 第一批(PR #1965 已合入)切换文案库后,主人在 staging 实测发现多个页面数据源没切干净: 1. **AI数字人-文案选择**:文案库中的文案选不到 2. **AI数字人-历史文案**:用户手动输入的文案在新文案库找不到 3. **AI数字人-标题选择**:标题没对接到文案库 title 4. **智能剪辑-标题选择**:标题没对接到文案库 title 阻塞 #1894 发版,需要立即修复。 ## 根因定位 | 问题 | 根因 | | --- | --- | | 文案/标题选不到 | `api/scripts/scripts.ts` 中 `SCRIPTS_API_MOCK = true` **硬编码**,所有文案库消费端走 mock 数据 | | AI数字人、智能剪辑标题下拉空 | `PanelTitleConfig` / `useStep4Title` 还在调已废弃的 `@/api/titles` | | AI数字人自输文案看不到 | 手动输入的文案不会自动入库,切到新接口后自然消失 | | AI数字人字段对不齐 | 本地复写了一份 `getScripts`,与共享 `@/api/scripts` 类型不一致 | ## 修复清单 - [x] `api/scripts/scripts.ts`:`SCRIPTS_API_MOCK` 改为环境变量开关(同 `POINTS_API_MOCK` 模式,默认 false 走真实 API) - [x] 删除废弃 `api/titles/` 整个目录 + 孤儿组件 `TitleLibraryModal.tsx` + `test/api/titles.test.ts` - [x] `pages/ai-avatar/api/aiAvatar.ts`:文案 CRUD 方法统一 re-export from `@/api/scripts`,去重本地实现 - [x] `pages/ai-avatar/types.ts`:`Script` 类型改为 `import("@/api/scripts").ScriptItem` - [x] `AiAvatarPage.tsx` 内 `ScriptSelectModalLazy`:适配 `{ items, total }` 分页响应,`page_size:200` - [x] `PanelScript.tsx`:手动输入 tab 增加「💾 保存到文案库」按钮(正文前 20 字自动作标题),toast 1s 自动关闭 - [x] `PanelTitleConfig.tsx`:标题 AutoComplete 改为从 `getScripts()` 取 `s.title` 去重候选,label 改为「📚 文案库标题」 - [x] `generate/hooks/useStep4Title/index.ts`:`userTitles` 改为从 `getScripts()` 映射 `{ content: s.title }` - [x] `test/pages/GeneratePage.test.tsx`:mock 从 `@/api/titles` 替换为 `@/api/scripts` ## 验证 - [ ] CI Lint / Unit / Build / Integration 全绿 - [ ] AI Code Review 通过 - [ ] staging 重测:AI数字人文案选择/保存、AI数字人标题选择、智能剪辑标题选择 ## 待跟进 - P2 抖音链接错误提示友好化(等后端 #1963 合入后联调) - 等后端删 `title_text`/`title_config` 字段后,清理 `api/scripts/types.ts` 里的残留类型 Refs: #1894
auto-approve-bot approved these changes 2026-09-17 00:20:37 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot approved these changes 2026-09-17 00:20:37 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。

🚀 预览环境已部署

项目 详情
PR号 #1971
预览链接 https://pr-1971.preview.xiaoxiajianji.com
API环境 staging

💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。

🔄 每次提交新代码后预览环境会自动更新。

🗑️ PR 关闭或合并后,预览环境会自动清理。

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #1971 | | 预览链接 | [https://pr-1971.preview.xiaoxiajianji.com](https://pr-1971.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
xiaoxia force-pushed fix/1894-script-title-source-cleanup from f4aadc5f71 to 741eaca358 2026-09-17 00:50:25 +08:00 Compare
xiaoxia added 2 commits 2026-09-17 04:42:52 +08:00
根因:
1. api/scripts 中 SCRIPTS_API_MOCK 被硬编码为 true,文案库/AI数字人/智能剪辑
   都拿 mock 数据,用户在文案库新建的文案、AI数字人手动输入的文案在其他
   页面选不到。
2. AI数字人页(PanelTitleConfig)、智能剪辑 step4(useStep4Title)仍在
   调已废弃的 @/api/titles,标题下拉为空。
3. AI数字人页自维护一份 getScripts 本地实现,返回类型/字段与共享
   @/api/scripts 不一致,且未共享 mock 开关。

修复:
- api/scripts/scripts.ts: SCRIPTS_API_MOCK 改为 env 开关(同 POINTS_API_MOCK
  模式,默认 false 走真实 API)。
- 删除废弃 api/titles/ 整个目录 + 相关单测(test/api/titles.test.ts、
  ai-avatar/components/TitleLibraryModal.tsx 孤儿组件)。
- ai-avatar/api/aiAvatar.ts: 文案库相关方法(getScripts/createScript/
  getScript/deleteScript)统一 re-export from @/api/scripts,不再
  本地重复实现。
- ai-avatar/types.ts: Script 类型改为 import("@/api/scripts").ScriptItem
  别名,保证字段对齐。
- ai-avatar/AiAvatarPage.tsx 内 ScriptSelectModalLazy: getScripts 适配
  { items, total } 分页结构,传 page_size:200 一次拿全。
- ai-avatar/components/PanelScript.tsx: 手动输入 tab 下增加「💾 保存到文案库」
  按钮,一键把当前口播文案以正文前20字为默认标题自动入库,解决主人反馈
  「历史文案在新文案库找不到」的问题;保存成功 toast 1s 自动关闭。
- ai-avatar/components/PanelTitleConfig.tsx: 标题 AutoComplete 数据源改为
  getScripts(),取 scripts[].title 去重作为候选,文案从「📚 标题库」
  改为「📚 文案库标题」。
- generate/hooks/useStep4Title/index.ts: userTitles 数据源改为 getScripts(),
  映射为 { content: s.title },复用下游消费逻辑(ut.content)。
- test/pages/GeneratePage.test.tsx: 把 @/api/titles mock 替换为
  @/api/scripts mock。

待跟进:
- P2 抖音错误提示友好化(等后端 #1963 合入后联调)。
chore: 注释格式微调,触发 CI
CI/CD Pipeline / Dedup Check - skip PR tests when covered by push pipeline (pull_request) Successful in 1s
CI/CD Pipeline / Check push changed paths (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 1s
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Retag skipped Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 1m21s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 1m28s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m35s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m41s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 1m44s
CI/CD Pipeline / Validate - Python (mypy + alembic) (pull_request) Successful in 5m31s
CI/CD Pipeline / Validate - Style (pull_request) Successful in 6m27s
AI Code Review / AI Code Review (pull_request) Successful in 6m49s
CI/CD Pipeline / Validate - Security (pull_request) Successful in 10m18s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Successful in 1s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 9m39s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Failing after 29s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 38s
ff3d915c5e
xiaoxia force-pushed fix/1894-script-title-source-cleanup from 941e590067 to ff3d915c5e 2026-09-17 04:42:52 +08:00 Compare
auto-approve-bot merged commit b68c29c69b into develop 2026-09-17 04:53:59 +08:00
auto-approve-bot deleted branch fix/1894-script-title-source-cleanup 2026-09-17 04:54:02 +08:00

🗑️ 预览环境已清理

PR #1971 已关闭或合并,对应的预览环境已被清理。

如有需要,可以重新打开 PR 来重新生成预览环境。

🗑️ **预览环境已清理** PR #1971 已关闭或合并,对应的预览环境已被清理。 > 如有需要,可以重新打开 PR 来重新生成预览环境。
Sign in to join this conversation.