Files
sionrui/openspec/changes/refactor-identify-face-hooks/tasks.md
sion123 36195ea55a feat: 重构 IdentifyFace.vue 为 Hooks 架构
- 新增 hooks/ 目录,包含三个专用 Hook:
  * useVoiceGeneration - 语音生成和校验逻辑
  * useDigitalHumanGeneration - 数字人视频生成逻辑
  * useIdentifyFaceController - 协调两个子 Hook 的控制器

- 新增 types/identify-face.ts 完整类型定义

- 重构 IdentifyFace.vue 使用 hooks 架构:
  * 视图层与业务逻辑分离
  * 状态管理清晰化
  * 模块解耦,逻辑清晰

- 遵循单一职责原则,每个 Hook 只负责一个领域
- 提升代码可测试性和可维护性
- 支持两种视频素材来源:素材库选择和直接上传
- 实现语音生成优先校验的业务规则

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-28 00:19:17 +08:00

3.1 KiB

Implementation Tasks

1. 创建类型定义

  • 1.1 创建 types/identify-face.ts 文件
    • 定义 VideoState 接口
    • 定义 IdentifyState 接口
    • 定义 AudioState 接口
    • 定义 MaterialValidation 接口
    • 定义 VoiceMeta 接口
    • 导出所有类型

2. 实现 useVoiceGeneration Hook

  • 2.1 创建 hooks/useVoiceGeneration.ts
    • 2.1.1 实现响应式状态初始化
    • 2.1.2 实现 canGenerateAudio 计算属性
    • 2.1.3 实现 suggestedMaxChars 计算属性
    • 2.1.4 实现 generateAudio 方法
    • 2.1.5 实现 parseAudioDuration 辅助函数
    • 2.1.6 实现 validateAudioDuration 方法
    • 2.1.7 实现 resetAudioState 方法
    • 2.1.8 添加错误处理和用户反馈

3. 实现 useDigitalHumanGeneration Hook

  • 3.1 创建 hooks/useDigitalHumanGeneration.ts
    • 3.1.1 实现响应式状态初始化
    • 3.1.2 实现 faceDuration 计算属性
    • 3.1.3 实现 canGenerate 计算属性
    • 3.1.4 实现 handleFileUpload 方法
    • 3.1.5 实现 handleVideoSelect 方法
    • 3.1.6 实现 performFaceRecognition 方法
    • 3.1.7 实现 validateMaterialDuration 方法
    • 3.1.8 实现 resetVideoState 方法
    • 3.1.9 实现视频预览 URL 生成
    • 3.1.10 添加文件格式验证

4. 实现 useIdentifyFaceController Hook

  • 4.1 创建 hooks/useIdentifyFaceController.ts
    • 4.1.1 组合 useVoiceGeneration 和 useDigitalHumanGeneration
    • 4.1.2 实现 generateDigitalHuman 方法
    • 4.1.3 实现 replaceVideo 方法
    • 4.1.4 实现 formatDuration 辅助函数
    • 4.1.5 实现 formatFileSize 辅助函数
    • 4.1.6 确保业务流程顺序(先配音校验再生成)
    • 4.1.7 添加完整的错误处理

5. 重构 IdentifyFace.vue

  • 5.1 重构 IdentifyFace.vue
    • 5.1.1 简化模板,移除业务逻辑
    • 5.1.2 使用 useIdentifyFaceController hook
    • 5.1.3 绑定响应式状态到 UI
    • 5.1.4 绑定事件处理器
    • 5.1.5 保留样式(保持 UI 一致性)
    • 5.1.6 优化计算属性使用

6. 验证和测试

  • 6.1 功能验证
    • 6.1.1 测试视频上传流程
    • 6.1.2 测试素材库选择流程
    • 6.1.3 测试人脸识别流程
    • 6.1.4 测试配音生成流程
    • 6.1.5 测试时长校验逻辑
    • 6.1.6 测试数字人生成流程
    • 6.1.7 测试更换视频流程
  • 6.2 边界情况测试
    • 6.2.1 测试不支持的文件格式
    • 6.2.2 测试网络错误处理
    • 6.2.3 测试空数据场景
    • 6.2.4 测试快速连续操作

7. 清理和优化

  • 7.1 移除旧代码
    • 7.1.1 删除原有的状态管理代码
    • 7.1.2 删除原有的业务逻辑方法
    • 7.1.3 删除重复的辅助函数
  • 7.2 代码质量检查
    • 7.2.1 添加 JSDoc 注释
    • 7.2.2 优化类型定义
    • 7.2.3 统一代码风格
    • 7.2.4 检查未使用的导入

8. 文档更新

  • 8.1 更新 README 或相关文档
    • 8.1.1 说明新的架构设计
    • 8.1.2 添加 Hook 使用示例
    • 8.1.3 说明迁移注意事项