refactor: VoiceMaterialLibrary Phase 2 - 抽离4个子组件 #858

Merged
xiaoxia merged 8 commits from refactor/voice-material-library-phase2 into develop 2026-07-25 08:13:23 +08:00
Owner

VoiceMaterialLibrary Phase 2 重构

基于Phase 1,继续抽离4个内联子组件到独立文件。

抽离的组件

组件 行数 位置
TagSelector 163行 components/TagSelector.tsx
MaterialForm 190行 components/MaterialForm.tsx
VoiceMaterialCard 244行 components/VoiceMaterialCard.tsx
VoiceMaterialRow 185行 components/VoiceMaterialRow.tsx

效果

  • 主文件 VoiceMaterialLibrary.tsx:1852 → 1117 行(-735行,-39.7%)
  • 4个组件各自职责清晰,便于后续单独优化和测试
  • 播放状态、选中状态等均提升到主组件管理,子组件纯展示

依赖

  • 依赖 #846 (Phase 1),请先合Phase 1
## VoiceMaterialLibrary Phase 2 重构 基于Phase 1,继续抽离4个内联子组件到独立文件。 ### 抽离的组件 | 组件 | 行数 | 位置 | |------|------|------| | TagSelector | 163行 | components/TagSelector.tsx | | MaterialForm | 190行 | components/MaterialForm.tsx | | VoiceMaterialCard | 244行 | components/VoiceMaterialCard.tsx | | VoiceMaterialRow | 185行 | components/VoiceMaterialRow.tsx | ### 效果 - 主文件 VoiceMaterialLibrary.tsx:1852 → 1117 行(-735行,-39.7%) - 4个组件各自职责清晰,便于后续单独优化和测试 - 播放状态、选中状态等均提升到主组件管理,子组件纯展示 ### 依赖 - 依赖 #846 (Phase 1),请先合Phase 1
auto-approve-bot approved these changes 2026-07-25 01:43:34 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
auto-approve-bot approved these changes 2026-07-25 01:43:34 +08:00
auto-approve-bot left a comment
Collaborator

CI全绿,自动审批通过。

CI全绿,自动审批通过。
xiaoxia added 4 commits 2026-07-25 03:09:18 +08:00
- TagSelector: 标签选择器(163行)
- MaterialForm: 上传/编辑表单(190行)
- VoiceMaterialCard: 卡片视图组件(244行)
- VoiceMaterialRow: 列表行组件(185行)

主文件从1852→1117行(-39.7%)
fix: prettier formatting for MaterialForm.tsx
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 36s
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 / PR Build Worker Image (pull_request) Successful in 47s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 1m48s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m49s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m49s
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
PR Automation / Auto Approve on CI Green (pull_request) Successful in 1m5s
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 Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 2m17s
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 / Deploy Production (pull_request) Has been skipped
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 41s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 3m24s
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
Preview Deploy / Deploy Preview Environment (pull_request) Failing after 1m41s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 3m53s
AI Code Review / AI Code Review (pull_request) Successful in 5m53s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 47m14s
4b2bbc7d58
xiaoxia force-pushed refactor/voice-material-library-phase2 from e2032eeb98 to 4b2bbc7d58 2026-07-25 03:09:18 +08:00 Compare
xiaoxia added 1 commit 2026-07-25 04:14:15 +08:00
test: 添加 TagSelector 组件单测,建立 voice-materials 目录依赖链
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 24s
CI/CD Pipeline / Frontend Lint (pull_request) Failing after 47s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m32s
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m34s
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 / PR Build Worker Image (pull_request) Successful in 57s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m46s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 48s
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
Preview Deploy / Deploy Preview Environment (pull_request) Failing after 20s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 47s
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (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 / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 31s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 3m6s
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 4m4s
AI Code Review / AI Code Review (pull_request) Has been cancelled
19c6e20f08
xiaoxia added 1 commit 2026-07-25 04:19:22 +08:00
style: 修复 TagSelector.test.tsx 的 Prettier 格式问题
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 26s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 57s
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 / Frontend Lint (pull_request) Successful in 1m30s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m31s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m47s
Preview Deploy / Deploy Preview Environment (pull_request) Failing after 25s
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 2m21s
CI/CD Pipeline / Build Production API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Production Web Image (pull_request) Has been skipped
PR Automation / Auto Approve on CI Green (pull_request) Successful in 55s
CI/CD Pipeline / Build Production Worker Image (pull_request) Has been skipped
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (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 / Frontend Unit Tests (pull_request) Failing after 21s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Has been skipped
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 3m1s
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 4m0s
AI Code Review / AI Code Review (pull_request) Has been cancelled
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 47m12s
fc8c612311
xiaoxia added 1 commit 2026-07-25 04:24:01 +08:00
test: 修复 TagSelector 测试中 getByText 多元素匹配问题
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 26s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 1m7s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m39s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m39s
CI/CD Pipeline / Build Staging Web Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging API Image (pull_request) Has been skipped
CI/CD Pipeline / Build Staging Worker Image (pull_request) Has been skipped
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 42s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m47s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 48s
Preview Deploy / Deploy Preview Environment (pull_request) Failing after 20s
CI/CD Pipeline / Unit 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 Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (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 Unit Tests (pull_request) Successful in 38s
CI/CD Pipeline / Production Browser E2E (pull_request) Has been skipped
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 3m12s
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / PR Build API Image (pull_request) Has been cancelled
AI Code Review / AI Code Review (pull_request) Has been cancelled
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 47m2s
599b4a58ca
xiaoxia added 1 commit 2026-07-25 04:27:46 +08:00
test: add voice-materials smoke test for vitest related mode
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 22s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 46s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m20s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m23s
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 / PR Build Worker Image (pull_request) Successful in 39s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 1m36s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 46s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 3m0s
CI/CD Pipeline / Unit Tests (pull_request) Has been skipped
Preview Deploy / Deploy Preview Environment (pull_request) Failing after 29s
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 Staging (Watchtower auto-deploy) (pull_request) Has been skipped
CI/CD Pipeline / Frontend Unit Tests (pull_request) Successful in 35s
CI/CD Pipeline / Integration Tests (pull_request) Has been skipped
CI/CD Pipeline / Deploy Production (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 / Production Browser E2E (pull_request) Has been skipped
AI Code Review / AI Code Review (pull_request) Successful in 3m28s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 4m47s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 46m57s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 32s
eaa6d5fb5c
Collaborator

代码审查结果 - PR #858

⚠️ 问题(2个需要修改)

  1. VoiceMaterialCard.tsx / VoiceMaterialRow.tsx (原VoiceMaterialLibrary.tsx 第135-150行):事件监听器内存泄漏风险,handleProgressMouseDown 函数在 document 上绑定了 mousemovemouseup 事件,但仅在 mouseup 触发时移除。若用户在拖拽进度条时组件卸载(如快速切换页面),监听器将无法移除,导致内存泄漏和潜在的运行时错误。
  2. MaterialForm.tsx (原VoiceMaterialLibrary.tsx 第282行):空值处理逻辑错误,onCreateTag 的默认回退函数 async () => ({ id: "", name: "" }) 会返回一个空 ID 的对象。当父组件未传入 onCreateTag 时,用户尝试创建标签会成功添加一个 ID 为空字符串的无效标签,导致 UI 显示异常或数据污染。

💡 建议(1个可选)

  1. TagSelector.tsx (原VoiceMaterialLibrary.tsx 第88行):错误反馈缺失,addTagByName 函数中 catch 块为空,静默忽略创建失败。建议增加 message.error 提示用户标签创建失败,提升用户体验。

格式检查通过 | 逻辑审查需修改 | ⚠️ 建议关注性能


🤖 由 AI 代码审查机器人自动生成 | 2026-07-24 20:32:45 | 模型:

## 代码审查结果 - PR #858 ### ⚠️ 问题(2个需要修改) 1. **VoiceMaterialCard.tsx / VoiceMaterialRow.tsx (原VoiceMaterialLibrary.tsx 第135-150行)**:事件监听器内存泄漏风险,`handleProgressMouseDown` 函数在 `document` 上绑定了 `mousemove` 和 `mouseup` 事件,但仅在 `mouseup` 触发时移除。若用户在拖拽进度条时组件卸载(如快速切换页面),监听器将无法移除,导致内存泄漏和潜在的运行时错误。 2. **MaterialForm.tsx (原VoiceMaterialLibrary.tsx 第282行)**:空值处理逻辑错误,`onCreateTag` 的默认回退函数 `async () => ({ id: "", name: "" })` 会返回一个空 ID 的对象。当父组件未传入 `onCreateTag` 时,用户尝试创建标签会成功添加一个 ID 为空字符串的无效标签,导致 UI 显示异常或数据污染。 ### 💡 建议(1个可选) 1. **TagSelector.tsx (原VoiceMaterialLibrary.tsx 第88行)**:错误反馈缺失,`addTagByName` 函数中 catch 块为空,静默忽略创建失败。建议增加 `message.error` 提示用户标签创建失败,提升用户体验。 --- ✅ 格式检查通过 | ❌ 逻辑审查需修改 | ⚠️ 建议关注性能 --- <sub>🤖 由 AI 代码审查机器人自动生成 | 2026-07-24 20:32:45 | 模型: </sub> <!-- AI_CODE_REVIEW_AUTO_COMMENT -->
xiaoxia merged commit b82b303d6a into develop 2026-07-25 08:13:23 +08:00
xiaoxia deleted branch refactor/voice-material-library-phase2 2026-07-25 08:13:24 +08:00

🗑️ 预览环境已清理

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

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

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