fix(#1677): AI Review 跟进修复(标题校验/TTS依赖/排序兜底/预览数硬上限) #1712
Reference in New Issue
Block a user
Delete Branch "fix/1677-review-followups"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
背景
PR #1711 合并后,AI Code Review 的阻塞+建议修复(提交于 20fe447e)未随 PR 合入,本 PR 补上。
修复内容
handleConfirmGenerate单视频标题校验与buildPayload.validateGenerateInputs语义对齐——aiAutoSelect 自动模式允许空标题(后端生成,既有设计),手动模式必填,逻辑显式化避免提交空标题previewTitles[0](variant0Title),批量模式下编辑第 2+ 个变体标题不再触发多余 TTS 请求BatchGenerationGrid排序加(variantIndex || 0)兜底,防 undefined 导致 NaN 排序异常CanvasPreviewGrid渲染数加MAX_PREVIEW_COUNT(10) 硬上限,防止同时播放媒体元素过多导致浏览器卡顿本地 tsc/eslint/prettier/vitest/build 全绿。
🚀 预览环境已部署
【阻塞级判定】
📊 审查概览
🔴 阻塞级问题(必须修复)
Math.min(count, MAX_PREVIEW_COUNT)将渲染数量限制为 10 个。当count大于 10 时,索引 10 及之后的预览项将不会渲染。这导致用户无法看到、无法取消选择、也无法与这些隐藏的项目交互,造成 UI 状态与实际数据状态严重脱节(例如用户以为只生成了 10 个,实际可能生成了 20 个)。count的最大值。💡 改进建议(不阻塞合并)
[apps/web/src/pages/generate/GeneratePage.tsx:135] 空指针风险防御
previewTitles[0]假设previewTitles始终是数组。虽然通常情况下如此,但在初始化或异常状态下可能为null/undefined。建议添加可选链previewTitles?.[0]以增强健壮性。[apps/web/src/pages/generate/components/BatchGenerationGrid.tsx:25] 排序逻辑的类型安全
a.variantIndex || 0的写法虽然处理了null/undefined,但如果variantIndex是字符串类型(例如来自某些 API 的 "1", "2"),减法运算会将其转换为数字,但如果是非数字字符串则会得到NaN,导致排序不稳定。建议显式转换为数字:Number(a.variantIndex || 0)。✅ 良好实践
GeneratePage.tsx中,通过提取variant0Title并将其加入useEffect依赖,精准地解决了批量模式下编辑非首项标题触发多余 TTS 请求的性能问题,逻辑清晰有效。BatchGenerationGrid.tsx中,对variantIndex进行了|| 0的兜底处理,防止了因undefined导致的排序异常。✅ 格式检查通过 | ❌ 逻辑审查需修改 | ⚠️ 建议关注性能
🤖 由 AI 代码审查机器人自动生成 | 2026-09-05 04:53:28 | 模型:
CI全绿,自动审批通过。
CI全绿,自动审批通过。
🗑️ 预览环境已清理
PR #1712 已关闭或合并,对应的预览环境已被清理。