import Card from '@/components/card'; import { Ellipsis, Modal } from '@c-x/ui'; import { useEffect, useState } from 'react'; import { DomainSecurityScanningResult, DomainSecurityScanningRiskDetail } from '@/api/types'; import { getSecurityScanningDetail, getUserSecurityScanningDetail } from '@/api'; import { Box, CircularProgress, List, ListItem, ListItemButton, Stack } from '@mui/material'; interface RiskLevelBoxProps { level: 'severe' | 'critical' | 'suggest'; } const RiskLevelBox = ({ level }: RiskLevelBoxProps) => { const riskConfig = { severe: { text: '严重', color: 'risk.severe', }, critical: { text: '高风险', color: 'risk.critical', }, suggest: { text: '低风险', color: 'risk.suggest', }, }; const config = riskConfig[level]; if (!config) return null; return ( {config.text} ); }; const TaskDetail = ({ task, open, onClose, admin, }: { task?: DomainSecurityScanningResult; open: boolean; onClose: () => void; admin: boolean }) => { const [loading, setLoading] = useState(true); const [vulns, setVulns] = useState([]); const fetchData = async () => { setLoading(true); const resp = await (admin ? getSecurityScanningDetail : getUserSecurityScanningDetail)({ id: task?.id as string }); setVulns(resp); setLoading(false); }; useEffect(() => { console.log(task) if (open) { fetchData(); }; // eslint-disable-next-line react-hooks/exhaustive-deps }, [task, open]); return ( {task?.name} / {task?.project_name} } sx={{ '.MuiDialog-paper': { maxWidth: 1300, }, }} width={1200} open={open} onCancel={onClose} footer={null} > {loading ? (
) : ( vulns.map((vuln) => ( {vuln.desc} {vuln.filename}:{vuln?.start?.line} )) )}
); }; export default TaskDetail;