import type { ReactNode } from 'react'; import { useTranslation } from 'react-i18next'; import { AlertCircle, CheckCircle, MapPin, RefreshCw, Server } from 'lucide-react'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { Checkbox } from '@/components/ui/checkbox'; import type { CloudRegion, CloudServer, ImportResult } from './types'; interface DiscoverImportStepProps { /** 导入结果(非空时显示结果页) */ importResult: ImportResult | null; selectedRegions: string[]; regions: CloudRegion[]; cloudServers: CloudServer[]; selectedServers: string[]; isDiscovering: boolean; isImporting: boolean; discoverErrors: string[]; /** 导入凭证设置面板(Linux SSH / Windows RDP),由父组件渲染后传入 */ importSettingsPanel: ReactNode; onDiscover: () => void; onToggleServer: (instanceId: string) => void; onSelectAllServers: () => void; } /** Step 4: 发现并导入云主机(结果页 / 发现按钮 / 区域标签 / 错误提示 / 主机列表 + 凭证设置) */ export function DiscoverImportStep({ importResult, selectedRegions, regions, cloudServers, selectedServers, isDiscovering, isImporting, discoverErrors, importSettingsPanel, onDiscover, onToggleServer, onSelectAllServers, }: DiscoverImportStepProps) { const { t } = useTranslation(); const allServersSelected = selectedServers.length === cloudServers.length && cloudServers.length > 0; // 导入完成 — 结果页 if (importResult) { return (

{t('server.importComplete')}

{t('server.importedCount', { count: importResult.imported })} {importResult.skipped > 0 && ( {t('server.skippedCount', { count: importResult.skipped })} )}
); } // 发现 + 导入流程 return ( <>

{t('server.selectedRegionsCount', { count: selectedRegions.length })} {cloudServers.length > 0 && ( · {t('server.discoveredHosts', { count: cloudServers.length })} )}

{cloudServers.length > 0 && ( <> {t('server.selectedServersCount', { count: selectedServers.length })} )}
{/* 区域标签 */}
{selectedRegions.map((r) => { const region = regions.find((reg) => reg.code === r); return ( {region?.name || r} ); })}
{/* 发现错误提示 */} {discoverErrors.length > 0 && (

{t('server.partialRegionFailed')}

{discoverErrors.map((err, i) => (

{err}

))}
)} {/* 主机列表 */} {isDiscovering ? (

{t('server.discoveringCloudServers')}

{t('server.scanningRegions')}

) : cloudServers.length === 0 ? (

{t('server.clickDiscoverHint')}

) : (
{cloudServers.map((server) => { const checked = selectedServers.includes(server.instance_id); return ( onToggleServer(server.instance_id)} > ); })}
{t('server.excelHostname')} {t('server.excelIpAddress')}
{server.instance_name || server.hostname || '-'} {server.private_ip || server.public_ip || '-'}
)} {/* 导入中时禁用,由父组件 Footer 按钮触发 onImport */} {isImporting ? null : importSettingsPanel} ); }