refactor: VoiceMaterialLibrary Phase 1 - 抽离类型/常量/工具函数 #846
Reference in New Issue
Block a user
Delete Branch "refactor/voice-material-library-phase1"
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?
VoiceMaterialLibrary 拆分 Phase 1
第二个巨无霸页面 VoiceMaterialLibrary(1966行)拆分启动。Phase 1 纯抽离,零逻辑变化。
改动内容
types.ts:类型定义 + 数据映射函数(mapAssetToMaterial / buildMetadata)constants.tsx:常量 + 性别选项配置utils/format.ts:格式化工具函数(genderLabel/genderIcon/genderClass/formatDuration/formatFileSize/formatDate)utils/audio.ts:音频工具函数(getAudioDuration)行数变化
后续Phase
CI全绿,自动审批通过。
CI全绿,自动审批通过。
代码审查结果 - PR #846
⚠️ 问题(2个需要修改)
100644变更为100755(可执行)。源代码文件不应具备可执行权限,这通常是由于开发者本地文件系统配置错误(如core.filemode设置)导致的。这会污染 Git 历史,并可能导致 CI/CD 环境中的安全策略拦截。mapAssetToMaterial函数中gender的赋值逻辑存在类型安全隐患。代码(meta.gender as VoiceGender) || "neutral"使用类型断言强制转换后,如果后端返回了一个非空但不在VoiceGender联合类型中的值(例如 "robot"),由于该值是 truthy,|| "neutral"不会生效,导致最终数据违反类型契约,可能引发后续 Switch 语句处理缺失。💡 建议(2个可选)
getAudioDuration函数存在潜在的内存泄漏和悬挂 Promise 风险。如果音频元数据加载失败且未触发error事件(极端情况),或者加载超时,Promise 将永远不会 resolve。建议增加setTimeout超时机制,并在超时后清理 URL 并 resolve(0)。formatDuration函数未处理NaN输入。当audio.duration不可用时(如流式音频或加载未完成),传入的seconds可能为NaN,导致输出 "NaN:NaN"。建议增加Number.isNaN检查并返回默认值(如 "0:00")。✅ 格式检查通过 | ❌ 逻辑审查需修改 | ⚠️ 建议关注性能
🤖 由 AI 代码审查机器人自动生成 | 2026-07-24 14:36:53 | 模型:
🗑️ 预览环境已清理
PR #846 已关闭或合并,对应的预览环境已被清理。