import React, { useState } from 'react'; import { Download, Search, Calendar, Filter, MessageSquare, Mic, Video, Eye, X, Play } from 'lucide-react'; import { Button, Input, TableHeader, TableRow, TableHead, TableCell, Badge, Drawer } from '../components/UI'; import { mockCallLogs } from '../services/mockData'; import { CallLog, InteractionType } from '../types'; export const HistoryPage: React.FC = () => { const [logs] = useState(mockCallLogs); const [searchTerm, setSearchTerm] = useState(''); const [statusFilter, setStatusFilter] = useState<'all' | 'connected' | 'missed'>('all'); const [sourceFilter, setSourceFilter] = useState<'all' | 'debug' | 'external'>('all'); const [typeFilter, setTypeFilter] = useState<'all' | InteractionType>('all'); const [selectedLog, setSelectedLog] = useState(null); const filteredLogs = logs.filter(log => { const matchesSearch = log.agentName.toLowerCase().includes(searchTerm.toLowerCase()); const matchesStatus = statusFilter === 'all' || log.status === statusFilter; const matchesSource = sourceFilter === 'all' || log.source === sourceFilter; const matchesType = typeFilter === 'all' || log.type === typeFilter; return matchesSearch && matchesStatus && matchesSource && matchesType; }); const handleExport = () => { // Generate CSV content const headers = ['ID', 'Agent', 'Source', 'Type', 'Status', 'Start Time', 'Duration']; const rows = filteredLogs.map(log => [ log.id, log.agentName, log.source, log.type, log.status, log.startTime, log.duration ].join(',')); const csvContent = "data:text/csv;charset=utf-8," + [headers.join(','), ...headers.join(',')].join('\n'); const encodedUri = encodeURI(csvContent); const link = document.createElement("a"); link.setAttribute("href", encodedUri); link.setAttribute("download", "history_logs.csv"); document.body.appendChild(link); link.click(); document.body.removeChild(link); }; return (

历史记录

setSearchTerm(e.target.value)} />
编号 代理小助手 类型 来源 接听状态 通话接通时间 通话时长 {filteredLogs.map(log => ( setSelectedLog(log)}> #{log.id} {log.agentName}
{log.type === 'text' && } {log.type === 'audio' && } {log.type === 'video' &&
{log.source === 'debug' ? '调试' : '外部'} {log.status === 'connected' ? '已接通' : '未接通'} {log.startTime} {log.duration}
))} {filteredLogs.length === 0 && ( 暂无记录 )}
{selectedLog && ( setSelectedLog(null)} title="历史记录详情" >

{selectedLog.agentName}

{selectedLog.type} Record
ID: #{selectedLog.id}
时间: {selectedLog.startTime}
时长: {selectedLog.duration}
状态: {selectedLog.status}
{(selectedLog.details && selectedLog.details.length > 0) ? ( selectedLog.details.map((detail, index) => (
{detail.role === 'user' ? 'User' : 'AI Assistant'} {detail.timestamp}
{/* Video Frames */} {selectedLog.type === 'video' && detail.role === 'user' && detail.imageUrls && detail.imageUrls.length > 0 && (
{detail.imageUrls.map((url, i) => (
{`Frame
))}
)} {/* Content / Transcript */}
{selectedLog.type !== 'text' && (
{selectedLog.type === 'audio' ? :
Transcript
)} {detail.content}
{/* Audio Player Placeholder for Audio/Video types */} {selectedLog.type !== 'text' && (
00:05
)}
)) ) : (

暂无对话详情数据

)}
)}
); };