import { useEffect, useState } from 'react'; import { Container, List, ListItem, ListItemButton, ListItemText, ListItemSecondaryAction, IconButton, Typography, Box, CircularProgress, Alert, Button, } from '@mui/material'; import { PlayArrow as PlayIcon, Download as DownloadIcon, Delete as DeleteIcon, } from '@mui/icons-material'; import { useNavigate } from 'react-router-dom'; import { sendMessage } from '@/utils/messages'; interface Session { id: string; startTime: number; tabId: number; chunkCount: number; totalEvents: number; } const ReplayListPage = () => { const [sessions, setSessions] = useState([]); const [isLoading, setIsLoading] = useState(true); const [error, setError] = useState(null); const navigate = useNavigate(); useEffect(() => { fetchSessions(); }, []); const fetchSessions = async () => { try { const data = await sendMessage('popup:get-sessions'); setSessions(data || []); } catch (err) { console.error(err); setError('获取录制历史失败'); } finally { setIsLoading(false); } }; const handlePlay = (sessionId: string) => { navigate(`/replay/${sessionId}`); }; const handleDownload = async (sessionId: string) => { try { await sendMessage('popup:download-session', sessionId); } catch (err) { console.error(err); setError('下载失败'); } }; const handleDelete = async (sessionId: string) => { if (window.confirm('确定要删除这个录制吗?')) { try { await sendMessage('popup:delete-session', sessionId); fetchSessions(); } catch (err) { console.error(err); setError('删除失败'); } } }; if (isLoading) { return ( ); } if (error) { return ( {error} ); } return ( 录制历史 {sessions.length === 0 ? ( 暂无录制历史 点击"录制与回放"页面的开始按钮进行录制 ) : ( {sessions.map((session) => ( handlePlay(session.id)} > {new Date(session.startTime).toLocaleString()} } secondary={ 事件数: {session.chunkCount * 100} Tab: {session.tabId} } /> { e.stopPropagation(); handleDownload(session.id); }} title="下载" > { e.stopPropagation(); handleDelete(session.id); }} title="删除" sx={{ color: 'error.main' }} > ))} )} ); }; export default ReplayListPage;