feat(title): AI 自动选择标题开关可用 — 自动生成+只读显示+样式可调+校验放行 #1236

Merged
xiaoxia merged 13 commits from fix/ai-auto-select-title into develop 2026-08-04 17:24:59 +08:00
Owner

修改内容

问题

AI 自动选择标题开关打开后隐藏了手动输入,但没有任何自动生成标题的逻辑,导致标题为空、最终校验报错。

修复

1. useAiTitleGenerator.ts — 新增 autoGenerateTitle 方法

  • 开关打开时,自动从已有的 AI 标题生成结果中选一个标题填入
  • 如果还没有生成过 AI 标题,则用默认关键词("短视频")自动调一次 generateTitlesFromTopic 生成结果,取第一个

2. useTitleStyleUpdaters.ts — toggleAiAutoSelect 调用 autoGenerateTitle

  • 打开开关时,调用 autoGenerateTitle 获取一个标题并填入 titleSettings.title
  • 关闭开关时,保持当前标题不变

3. Step4TitleSettings.tsx — 开关打开时的 UI

  • 显示当前自动选中的标题(只读状态)+ 一个「🔄 换一个」按钮
  • 保留样式面板(位置/字号/颜色等),让用户仍然可以设置标题的展示样式

4. buildPayload.ts — validateGenerateInputs 放行

  • 当 aiAutoSelect 为 true 时,标题为空不报错(后端自行生成)
  • ai_auto_select: true 已正确传给后端

5. useAiTitleGenerator.ts — handleSelectAiTitle 不强制关闭开关

  • 去掉 aiAutoSelect: false 的强制重置

涉及文件

  • apps/web/src/pages/generate/hooks/useStep4Title/useAiTitleGenerator.ts
  • apps/web/src/pages/generate/hooks/useStep4Title/useTitleStyleUpdaters.ts
  • apps/web/src/pages/generate/hooks/useStep4Title/index.ts
  • apps/web/src/pages/generate/components/Step4TitleSettings.tsx
  • apps/web/src/pages/generate/hooks/generate-video/buildPayload.ts
## 修改内容 ### 问题 AI 自动选择标题开关打开后隐藏了手动输入,但没有任何自动生成标题的逻辑,导致标题为空、最终校验报错。 ### 修复 **1. useAiTitleGenerator.ts — 新增 autoGenerateTitle 方法** - 开关打开时,自动从已有的 AI 标题生成结果中选一个标题填入 - 如果还没有生成过 AI 标题,则用默认关键词("短视频")自动调一次 generateTitlesFromTopic 生成结果,取第一个 **2. useTitleStyleUpdaters.ts — toggleAiAutoSelect 调用 autoGenerateTitle** - 打开开关时,调用 autoGenerateTitle 获取一个标题并填入 titleSettings.title - 关闭开关时,保持当前标题不变 **3. Step4TitleSettings.tsx — 开关打开时的 UI** - 显示当前自动选中的标题(只读状态)+ 一个「🔄 换一个」按钮 - 保留样式面板(位置/字号/颜色等),让用户仍然可以设置标题的展示样式 **4. buildPayload.ts — validateGenerateInputs 放行** - 当 aiAutoSelect 为 true 时,标题为空不报错(后端自行生成) - ai_auto_select: true 已正确传给后端 **5. useAiTitleGenerator.ts — handleSelectAiTitle 不强制关闭开关** - 去掉 aiAutoSelect: false 的强制重置 ### 涉及文件 - apps/web/src/pages/generate/hooks/useStep4Title/useAiTitleGenerator.ts - apps/web/src/pages/generate/hooks/useStep4Title/useTitleStyleUpdaters.ts - apps/web/src/pages/generate/hooks/useStep4Title/index.ts - apps/web/src/pages/generate/components/Step4TitleSettings.tsx - apps/web/src/pages/generate/hooks/generate-video/buildPayload.ts
xiaoxia added 5 commits 2026-08-04 14:41:56 +08:00
feat(title): skip title validation when aiAutoSelect is true
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 / Deploy Staging (Watchtower auto-deploy) (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 / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 42s
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 / Validate - Migration (alembic) (pull_request) Successful in 55s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 59s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m35s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m38s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 59s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 1m32s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 2m26s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m41s
AI Code Review / AI Code Review (pull_request) Failing after 4m16s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 4m45s
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
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 / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Successful in 15s
7db66576ea

🚀 预览环境已部署

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

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

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

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

🚀 **预览环境已部署** | 项目 | 详情 | |------|------| | PR号 | #1236 | | 预览链接 | [https://pr-1236.preview.xiaoxiajianji.com](https://pr-1236.preview.xiaoxiajianji.com) | | API环境 | staging | > 💡 预览环境使用 staging API 数据,请勿在预览环境中操作重要数据。 > > 🔄 每次提交新代码后预览环境会自动更新。 > > 🗑️ PR 关闭或合并后,预览环境会自动清理。
auto-approve-bot approved these changes 2026-08-04 14:44:23 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot approved these changes 2026-08-04 14:44:23 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
xiaoxia added 1 commit 2026-08-04 14:49:48 +08:00
fix(title): TitleStylePanel 移到条件分支外,两种模式下均可见
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Has been cancelled
CI/CD Pipeline / Validate - Code Quality (pull_request) Has been cancelled
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Has been cancelled
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Has been cancelled
CI/CD Pipeline / Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Frontend Lint (pull_request) Has been cancelled
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / PR Build API Image (pull_request) Has been cancelled
CI/CD Pipeline / PR Build Web Image (pull_request) Has been cancelled
CI/CD Pipeline / PR Build Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been cancelled
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been cancelled
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Build Production API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been cancelled
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been cancelled
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / CI Gate (pull_request) Has been cancelled
AI Code Review / AI Code Review (pull_request) Has been cancelled
PR Automation / Auto Approve on CI Green (pull_request) Has been cancelled
PR Automation / Auto Merge on CI Green + Approved (pull_request) Has been cancelled
Preview Deploy / Deploy Preview Environment (pull_request) Has been cancelled
d3150fd717
xiaoxia added 1 commit 2026-08-04 14:49:49 +08:00
xiaoxia added 1 commit 2026-08-04 14:49:51 +08:00
fix(title): 用 useEffect 监听 aiAutoSelect 变化触发 autoGenerateTitle
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 / 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 / Check if frontend-only change (pull_request) Successful in 47s
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m13s
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 / Validate - Type Check (mypy) (pull_request) Successful in 1m37s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 48s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 58s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 1m49s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m53s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 2m9s
AI Code Review / AI Code Review (pull_request) Failing after 2m30s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m39s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 5m25s
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
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 / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Failing after 6s
924742b40b
xiaoxia added 1 commit 2026-08-04 15:02:12 +08:00
chore: trigger CI re-run
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 / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 36s
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 / Validate - Code Quality (pull_request) Has been cancelled
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Has been cancelled
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Has been cancelled
CI/CD Pipeline / Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Frontend Lint (pull_request) Has been cancelled
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / PR Build Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been cancelled
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / CI Gate (pull_request) Has been cancelled
AI Code Review / AI Code Review (pull_request) Has been cancelled
PR Automation / Auto Approve on CI Green (pull_request) Has been cancelled
PR Automation / Auto Merge on CI Green + Approved (pull_request) Has been cancelled
Preview Deploy / Deploy Preview Environment (pull_request) Has been cancelled
8ac6d7ebbd
xiaoxia added 1 commit 2026-08-04 15:03:01 +08:00
fix(title): use optional chaining for defensive null check
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 / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Has been cancelled
CI/CD Pipeline / Validate - Code Quality (pull_request) Has been cancelled
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Has been cancelled
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Has been cancelled
CI/CD Pipeline / Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / Integration Tests (pull_request) Has been cancelled
CI/CD Pipeline / Frontend Lint (pull_request) Has been cancelled
CI/CD Pipeline / Frontend Unit Tests (pull_request) Has been cancelled
CI/CD Pipeline / PR Build API Image (pull_request) Has been cancelled
CI/CD Pipeline / PR Build Web Image (pull_request) Has been cancelled
CI/CD Pipeline / PR Build Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production API Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Web Image (pull_request) Has been cancelled
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been cancelled
CI/CD Pipeline / Deploy Production (pull_request) Has been cancelled
CI/CD Pipeline / Production Browser E2E (pull_request) Has been cancelled
CI/CD Pipeline / Canary Release to Production (pull_request) Has been cancelled
CI/CD Pipeline / CI Gate (pull_request) Has been cancelled
AI Code Review / AI Code Review (pull_request) Has been cancelled
PR Automation / Auto Approve on CI Green (pull_request) Has been cancelled
PR Automation / Auto Merge on CI Green + Approved (pull_request) Has been cancelled
Preview Deploy / Deploy Preview Environment (pull_request) Has been cancelled
6e05ccc95a
xiaoxia added 1 commit 2026-08-04 15:03:19 +08:00
fix(title): add null check for picked title to prevent runtime error
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 / Deploy Staging (Watchtower auto-deploy) (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 / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 41s
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 / Validate - Migration (alembic) (pull_request) Successful in 53s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 57s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m35s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m46s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 1m8s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 1m53s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 1m22s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m37s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 4m20s
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
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 / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Failing after 6s
AI Code Review / AI Code Review (pull_request) Successful in 6m47s
9dd78e65cc
xiaoxia added 1 commit 2026-08-04 15:11:48 +08:00
fix(title): destructure autoGenerateTitle to satisfy exhaustive-deps lint rule
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 / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (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 / Check if frontend-only change (pull_request) Successful in 46s
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 / Validate - Migration (alembic) (pull_request) Successful in 57s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m2s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m38s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m39s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 1m14s
AI Code Review / AI Code Review (pull_request) Failing after 2m18s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m34s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 1m40s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 2m31s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 4m25s
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
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 / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Successful in 5s
e35f4688d1
Collaborator

【阻塞级判定】

  • 是否存在阻塞级问题:是
  • 阻塞级问题数量:1 个

📊 审查概览

  • 整体评价:需修改
  • 建议级问题数量:1 个

🔴 阻塞级问题(必须修复)

  1. [apps/web/src/pages/generate/hooks/useStep4Title/index.ts: 28] 初始化逻辑导致自动生成失效
    • 问题类型:逻辑bug
    • 问题描述:prevAiAutoSelect 被初始化为 titleSettings.aiAutoSelect。当页面刷新或组件首次加载时,如果 titleSettings.aiAutoSelect 已经是 trueprevAiAutoSelect.current 也为 true。此时 useEffect 中的条件 !prevAiAutoSelect.current 为假,导致不会触发 autoGenerateTitle()。用户在“AI 自动选择”模式下将看不到标题,必须手动点击“换一个”才能生成,违背了“自动选择”的预期行为。
    • 修改建议:应增加一个标记位判断是否为首次挂载,或者调整判断逻辑。例如:
      const isMounted = useRef(false);
      useEffect(() => {
        if (!isMounted.current) {
          isMounted.current = true;
          // 如果初始状态就是开启且无标题,也应触发生成
          if (titleSettings.aiAutoSelect && !titleSettings.title) {
            autoGenerateTitle();
          }
          prevAiAutoSelect.current = titleSettings.aiAutoSelect;
          return;
        }
      
        if (titleSettings.aiAutoSelect && !prevAiAutoSelect.current && !titleSettings.title) {
          autoGenerateTitle();
        }
        prevAiAutoSelect.current = titleSettings.aiAutoSelect;
      }, [titleSettings.aiAutoSelect, titleSettings.title, autoGenerateTitle]);
      

💡 改进建议(不阻塞合并)

  1. [apps/web/src/pages/generate/hooks/useStep4Title/useAiTitleGenerator.ts: 85] 边界情况处理
    • 具体内容:在 autoGenerateTitle 函数中,如果 generateTitlesFromTopic("短视频") 返回空数组(例如接口异常或无数据),picked 将为 undefined,导致标题被设置为空字符串。虽然前端有占位符显示,且后端校验已放行,但建议增加重试逻辑或错误提示,避免用户提交空标题。

良好实践

  • buildPayload.ts 中使用了可选链 titleSettings.title?.trim(),有效避免了空指针异常。
  • Step4TitleSettings.tsxTitleStylePanel 移至条件渲染外,符合 DRY 原则,确保两种模式下均可调整样式。

🤖 由 AI 代码审查机器人自动生成 | 2026-08-04 07:14:07 | 模型:

### 【阻塞级判定】 - 是否存在阻塞级问题:是 - 阻塞级问题数量:1 个 ### 📊 审查概览 - 整体评价:需修改 - 建议级问题数量:1 个 ### 🔴 阻塞级问题(必须修复) 1. **[apps/web/src/pages/generate/hooks/useStep4Title/index.ts: 28] 初始化逻辑导致自动生成失效** - 问题类型:逻辑bug - 问题描述:`prevAiAutoSelect` 被初始化为 `titleSettings.aiAutoSelect`。当页面刷新或组件首次加载时,如果 `titleSettings.aiAutoSelect` 已经是 `true`,`prevAiAutoSelect.current` 也为 `true`。此时 `useEffect` 中的条件 `!prevAiAutoSelect.current` 为假,导致不会触发 `autoGenerateTitle()`。用户在“AI 自动选择”模式下将看不到标题,必须手动点击“换一个”才能生成,违背了“自动选择”的预期行为。 - 修改建议:应增加一个标记位判断是否为首次挂载,或者调整判断逻辑。例如: ```javascript const isMounted = useRef(false); useEffect(() => { if (!isMounted.current) { isMounted.current = true; // 如果初始状态就是开启且无标题,也应触发生成 if (titleSettings.aiAutoSelect && !titleSettings.title) { autoGenerateTitle(); } prevAiAutoSelect.current = titleSettings.aiAutoSelect; return; } if (titleSettings.aiAutoSelect && !prevAiAutoSelect.current && !titleSettings.title) { autoGenerateTitle(); } prevAiAutoSelect.current = titleSettings.aiAutoSelect; }, [titleSettings.aiAutoSelect, titleSettings.title, autoGenerateTitle]); ``` ### 💡 改进建议(不阻塞合并) 1. **[apps/web/src/pages/generate/hooks/useStep4Title/useAiTitleGenerator.ts: 85] 边界情况处理** - 具体内容:在 `autoGenerateTitle` 函数中,如果 `generateTitlesFromTopic("短视频")` 返回空数组(例如接口异常或无数据),`picked` 将为 `undefined`,导致标题被设置为空字符串。虽然前端有占位符显示,且后端校验已放行,但建议增加重试逻辑或错误提示,避免用户提交空标题。 ### ✅ 良好实践 - `buildPayload.ts` 中使用了可选链 `titleSettings.title?.trim()`,有效避免了空指针异常。 - `Step4TitleSettings.tsx` 将 `TitleStylePanel` 移至条件渲染外,符合 DRY 原则,确保两种模式下均可调整样式。 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-08-04 07:14:07 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
xiaoxia added 1 commit 2026-08-04 17:17:35 +08:00
fix(title): 首次挂载时AI自动选择开关已开启也要触发生成
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 / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Staging API Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Staging E2E Tests (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 30s
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 / Validate - Migration (alembic) (pull_request) Successful in 59s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 59s
Preview Deploy / Deploy Preview Environment (pull_request) Successful in 1m43s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 1m21s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 1m56s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 1m39s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 2m15s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 2m1s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 4m29s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Integration Tests (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 / Canary Release to Production (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / CI Gate (pull_request) Successful in 6s
AI Code Review / AI Code Review (pull_request) Successful in 6m57s
ACR Cleanup / ACR Image Cleanup (pull_request_target) Successful in 47s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 1m1s
d112f4ea6b
修复 useStep4Title/index.ts 中 prevAiAutoSelect 初始化为 true 时
useEffect 不触发生成的 bug。新增 isFirstMount ref 区分首次挂载
和后续开关切换,确保页面刷新后 aiAutoSelect=true 也能自动生成标题。

Fixes AI Code Review blocking issue on PR #1236
xiaoxia merged commit 4800ada7ec into develop 2026-08-04 17:24:59 +08:00
xiaoxia deleted branch fix/ai-auto-select-title 2026-08-04 17:24:59 +08:00

🗑️ 预览环境已清理

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

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

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