diff --git a/apps/desktop/src/pages/tools/VoiceGenerationHistory.tsx b/apps/desktop/src/pages/tools/VoiceGenerationHistory.tsx index e9844ec..f013d09 100644 --- a/apps/desktop/src/pages/tools/VoiceGenerationHistory.tsx +++ b/apps/desktop/src/pages/tools/VoiceGenerationHistory.tsx @@ -59,23 +59,54 @@ const VoiceGenerationHistory: React.FC = () => { const allRecords = await invoke('get_speech_generation_records', { limit: 100 // 限制最近100条记录 }); - + + // 调试:打印原始记录数据 + console.log('🔍 原始记录数据:', allRecords); + if (allRecords.length > 0) { + console.log('🔍 第一条记录状态:', { + status: allRecords[0].status, + statusType: typeof allRecords[0].status, + statusValue: JSON.stringify(allRecords[0].status) + }); + } + + // 标准化记录状态 + const normalizedRecords = allRecords.map(record => ({ + ...record, + status: normalizeStatus(record.status) + })); + + console.log('🔄 状态标准化后:', normalizedRecords.length > 0 ? { + originalStatus: allRecords[0]?.status, + normalizedStatus: normalizedRecords[0]?.status + } : '无记录'); + // 根据搜索和筛选条件过滤记录 - let filteredRecords = allRecords; - + let filteredRecords = normalizedRecords; + if (searchText.trim()) { - filteredRecords = filteredRecords.filter(record => + filteredRecords = filteredRecords.filter(record => record.text.toLowerCase().includes(searchText.toLowerCase()) || (record.voice_name && record.voice_name.toLowerCase().includes(searchText.toLowerCase())) || record.voice_id.toLowerCase().includes(searchText.toLowerCase()) ); } - + if (statusFilter !== 'all') { - filteredRecords = filteredRecords.filter(record => record.status === statusFilter); + const normalizedFilter = normalizeStatus(statusFilter); + filteredRecords = filteredRecords.filter(record => { + console.log('🔍 状态筛选比较:', { + recordStatus: record.status, + filterStatus: statusFilter, + normalizedFilter, + isEqual: record.status === normalizedFilter + }); + return record.status === normalizedFilter; + }); } - + setRecords(filteredRecords); + console.log('✅ 最终显示记录数:', filteredRecords.length); } catch (error) { console.error('加载语音生成记录失败:', error); addNotification({ @@ -210,6 +241,37 @@ const VoiceGenerationHistory: React.FC = () => { // ============= 辅助函数 ============= + // 状态转换函数 - 确保类型安全 + const normalizeStatus = (status: any): SpeechGenerationRecordStatus => { + // 如果已经是正确的枚举值,直接返回 + if (Object.values(SpeechGenerationRecordStatus).includes(status)) { + return status as SpeechGenerationRecordStatus; + } + + // 如果是字符串,尝试转换 + if (typeof status === 'string') { + const normalizedStatus = status.toLowerCase(); + switch (normalizedStatus) { + case 'pending': + return SpeechGenerationRecordStatus.PENDING; + case 'processing': + return SpeechGenerationRecordStatus.PROCESSING; + case 'completed': + return SpeechGenerationRecordStatus.COMPLETED; + case 'failed': + return SpeechGenerationRecordStatus.FAILED; + case 'cancelled': + return SpeechGenerationRecordStatus.CANCELLED; + default: + console.warn('⚠️ 未知状态字符串:', status); + return SpeechGenerationRecordStatus.PENDING; + } + } + + console.warn('⚠️ 无法识别的状态类型:', status, typeof status); + return SpeechGenerationRecordStatus.PENDING; + }; + // 格式化时间 const formatTime = (timeStr: string) => { const date = new Date(timeStr); @@ -225,14 +287,27 @@ const VoiceGenerationHistory: React.FC = () => { // 获取状态样式 const getStatusStyle = (status: SpeechGenerationRecordStatus) => { + console.log('🎨 获取状态样式:', { + status, + statusType: typeof status, + enumValues: Object.values(SpeechGenerationRecordStatus), + isCompleted: status === SpeechGenerationRecordStatus.COMPLETED, + completedValue: SpeechGenerationRecordStatus.COMPLETED + }); + switch (status) { - case SpeechGenerationRecordStatus.Completed: + case SpeechGenerationRecordStatus.COMPLETED: return 'bg-green-100 text-green-800 border-green-200'; - case SpeechGenerationRecordStatus.Failed: + case SpeechGenerationRecordStatus.FAILED: return 'bg-red-100 text-red-800 border-red-200'; - case SpeechGenerationRecordStatus.Processing: + case SpeechGenerationRecordStatus.PROCESSING: return 'bg-blue-100 text-blue-800 border-blue-200'; + case SpeechGenerationRecordStatus.PENDING: + return 'bg-yellow-100 text-yellow-800 border-yellow-200'; + case SpeechGenerationRecordStatus.CANCELLED: + return 'bg-gray-100 text-gray-800 border-gray-200'; default: + console.warn('⚠️ 未知状态,使用默认样式:', status); return 'bg-gray-100 text-gray-800 border-gray-200'; } }; @@ -240,12 +315,16 @@ const VoiceGenerationHistory: React.FC = () => { // 获取状态图标 const getStatusIcon = (status: SpeechGenerationRecordStatus) => { switch (status) { - case SpeechGenerationRecordStatus.Completed: + case SpeechGenerationRecordStatus.COMPLETED: return ; - case SpeechGenerationRecordStatus.Failed: + case SpeechGenerationRecordStatus.FAILED: return ; - case SpeechGenerationRecordStatus.Processing: + case SpeechGenerationRecordStatus.PROCESSING: return ; + case SpeechGenerationRecordStatus.PENDING: + return ; + case SpeechGenerationRecordStatus.CANCELLED: + return ; default: return ; } @@ -253,15 +332,27 @@ const VoiceGenerationHistory: React.FC = () => { // 获取状态文本 const getStatusText = (status: SpeechGenerationRecordStatus) => { + console.log('📝 获取状态文本:', { + status, + statusType: typeof status, + isCompleted: status === SpeechGenerationRecordStatus.COMPLETED, + completedValue: SpeechGenerationRecordStatus.COMPLETED + }); + switch (status) { - case SpeechGenerationRecordStatus.Completed: + case SpeechGenerationRecordStatus.COMPLETED: return '已完成'; - case SpeechGenerationRecordStatus.Failed: + case SpeechGenerationRecordStatus.FAILED: return '失败'; - case SpeechGenerationRecordStatus.Processing: + case SpeechGenerationRecordStatus.PROCESSING: return '处理中'; - default: + case SpeechGenerationRecordStatus.PENDING: return '待处理'; + case SpeechGenerationRecordStatus.CANCELLED: + return '已取消'; + default: + console.warn('⚠️ 未知状态,使用默认文本:', status); + return '未知状态'; } };