diff --git a/apps/web/src/pages/voices/components/MaterialVoiceTab.tsx b/apps/web/src/pages/voices/components/MaterialVoiceTab.tsx index 31f5f8a1c..2c406ec3a 100644 --- a/apps/web/src/pages/voices/components/MaterialVoiceTab.tsx +++ b/apps/web/src/pages/voices/components/MaterialVoiceTab.tsx @@ -136,8 +136,9 @@ export const MaterialVoiceTab: React.FC = ({ const material = mapAssetToMaterial(asset) // duration 优先取顶层(后端从 metadata 提取),兜底 metadata const cardDuration = asset.duration || material.duration || 0 - // AI 生成素材标识(metadata.source === "tts_job") - const isAiMaterial = (asset.metadata as Record)?.source === "tts_job" + // AI 生成素材标识:兼容旧素材(无 source 字段但有 tts_job_id) + const meta = asset.metadata as Record + const isAiMaterial = meta?.source === "tts_job" || !!meta?.tts_job_id const isPlaying = playingId === asset.id const isSelected = selectedIds.has(asset.id) // 播放中以 audio 真实时长为准,未播放显示卡片时长