import { useState, useEffect } from 'react'; import { Link } from 'react-router-dom'; import { getRepairReports, type RepairReport, getProjects } from '../api'; const STATUS_LABELS: Record = { NEW: '新发现', VERIFYING: '验证中', CANNOT_REPRODUCE: '无法复现', PENDING_FIX: '待修复', FIXING: '修复中', FIXED: '已修复', VERIFIED: '已验证', DEPLOYED: '已部署', FIX_FAILED: '修复失败', }; export default function RepairList() { const [reports, setReports] = useState([]); const [loading, setLoading] = useState(true); const [projects, setProjects] = useState([]); const [filters, setFilters] = useState({ project_id: '', page: 1, }); const [totalPages, setTotalPages] = useState(1); useEffect(() => { const fetchProjects = async () => { try { const res = await getProjects(); setProjects(res.data.projects); } catch (err) { console.error(err); } }; fetchProjects(); }, []); useEffect(() => { const fetchReports = async () => { setLoading(true); try { const res = await getRepairReports({ page: filters.page, project_id: filters.project_id || undefined, }); setReports(res.data.items); setTotalPages(res.data.total_pages); } catch (err) { console.error(err); } finally { setLoading(false); } }; fetchReports(); }, [filters]); const handleFilterChange = (key: string, value: string) => { setFilters((prev) => ({ ...prev, [key]: value, page: 1 })); }; return (

修复报告

AI 自动修复记录及结果

{loading ? (
) : reports.length === 0 ? (
暂无修复报告
) : ( {reports.map((report) => ( ))}
编号 项目 缺陷编号 修改文件数 测试结果 状态 日期 操作
#{report.id} {report.project_id} #{report.error_log_id} {report.modified_files.length} 个文件 {report.test_passed ? '通过' : '失败'} {STATUS_LABELS[report.status] || report.status} {new Date(report.created_at).toLocaleString()} 查看
)}
{totalPages > 1 && (
第 {filters.page} 页,共 {totalPages} 页
)}
); }