import { useMemo, useState } from 'react'; import { exportDinsarResults } from '../api/dinsar'; import { getDinsarEngineMeta } from '../utils/dinsarEngines'; const EXAMPLE_TARGET_DIR = String.raw`例如: D:\Export\Results 或 \\server\share\results`; export default function ResultExportModal({ results = [], onClose }) { const [targetDir, setTargetDir] = useState(''); const [selectedIds, setSelectedIds] = useState(() => new Set(results.map((result) => result.id))); const [exporting, setExporting] = useState(false); const [exportResult, setExportResult] = useState(null); const [error, setError] = useState(''); const selectedCount = selectedIds.size; const sortedResults = useMemo(() => [...results], [results]); const toggleSelect = (id) => { setSelectedIds((prev) => { const next = new Set(prev); if (next.has(id)) { next.delete(id); } else { next.add(id); } return next; }); }; const toggleAll = () => { if (selectedIds.size === results.length) { setSelectedIds(new Set()); return; } setSelectedIds(new Set(results.map((result) => result.id))); }; const handleExport = async () => { const dir = targetDir.trim(); if (!dir) { setError('请输入目标路径。'); return; } if (selectedIds.size === 0) { setError('请至少选择一个结果。'); return; } setError(''); setExporting(true); setExportResult(null); try { const response = await exportDinsarResults([...selectedIds], dir); setExportResult(response); } catch (eventualError) { setError(eventualError.response?.data?.detail || eventualError.message || '提取失败。'); } finally { setExporting(false); } }; return (