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.selectedRegionsCount', { count: selectedRegions.length })} {cloudServers.length > 0 && ( · {t('server.discoveredHosts', { count: cloudServers.length })} )}
{t('server.partialRegionFailed')}
{discoverErrors.map((err, i) => ({err}
))}{t('server.discoveringCloudServers')}
{t('server.scanningRegions')}
{t('server.clickDiscoverHint')}
|
|
{t('server.excelHostname')} | {t('server.excelIpAddress')} |
|---|---|---|
|
|
{server.instance_name || server.hostname || '-'} | {server.private_ip || server.public_ip || '-'} |