import { Button, FormItem, Input, Modal, Select, Table, Textarea } from '../../../../shared/components' import type { TableColumn } from '../../../../shared/components/Table' import type { ProxyIPHealthResult } from '../../types' import { CHAIN_QUICK_IMPORT_TEMPLATE, DIRECT_QUICK_IMPORT_TEMPLATE, DIRECT_PROXY_PROTOCOL_OPTIONS, type ChainImportForm, type DirectImportForm, type ProxyDisplayInfo, type ProxyImportMode, } from './helpers' export interface ProxyEditFormValue { proxyName: string proxyConfig: string dnsServers: string groupName: string } interface ProxyPoolImportModalProps { open: boolean groups: string[] importMode: ProxyImportMode importUrl: string importResolvedUrl: string importText: string importDnsServers: string importNamePrefix: string importGroupName: string chainImportText: string directImportText: string chainImportForm: ChainImportForm directImportForm: DirectImportForm fetchingImportUrl: boolean canParseImport: boolean onClose: () => void onParse: () => void onFetchImportUrl: () => void onImportModeChange: (nextMode: ProxyImportMode) => void onImportUrlChange: (nextValue: string) => void onImportTextChange: (nextValue: string) => void onImportDnsServersChange: (nextValue: string) => void onImportNamePrefixChange: (nextValue: string) => void onImportGroupNameChange: (nextValue: string) => void onChainImportTextChange: (nextValue: string) => void onDirectImportTextChange: (nextValue: string) => void onApplyChainJSON: () => void onApplyDirectText: () => void onChainImportFormChange: (patch: Partial) => void onChainImportHopChange: (hop: 'first' | 'second', field: keyof ChainImportForm['first'], value: string) => void onFillChainTemplate: () => void onCopyChainTemplate: () => void onFillDirectTemplate: () => void onCopyDirectTemplate: () => void onDirectImportFormChange: (patch: Partial) => void } export function ProxyPoolImportModal({ open, groups, importMode, importUrl, importResolvedUrl, importText, importDnsServers, importNamePrefix, importGroupName, chainImportText, directImportText, chainImportForm, directImportForm, fetchingImportUrl, canParseImport, onClose, onParse, onFetchImportUrl, onImportModeChange, onImportUrlChange, onImportTextChange, onImportDnsServersChange, onImportNamePrefixChange, onImportGroupNameChange, onChainImportTextChange, onDirectImportTextChange, onApplyChainJSON, onApplyDirectText, onChainImportFormChange, onChainImportHopChange, onFillChainTemplate, onCopyChainTemplate, onFillDirectTemplate, onCopyDirectTemplate, onDirectImportFormChange, }: ProxyPoolImportModalProps) { return ( } >

{importMode === 'clash' ? '支持粘贴 Clash YAML,或通过订阅 URL 自动拉取并解析(含 proxies、dns、proxy-groups)' : importMode === 'direct' ? '支持单条录入 HTTP / HTTPS / SOCKS5 代理,也支持 JSON 或多行标准代理文本批量导入,导入后直接生效,不走 Clash 桥接' : '支持两层 SOCKS5 链式代理,使用 JSON 导入,导入后将由本地桥接生成 127.0.0.1 SOCKS5 供 Chromium 使用'}

{importMode === 'clash' && ( <>
onImportUrlChange(event.target.value)} placeholder="订阅 URL" className="flex-1" />
{importResolvedUrl.trim() && (

已绑定订阅:{importResolvedUrl}

)}

获取成功后会自动回填 YAML 文本,并尝试自动填充 DNS 与建议分组;自动刷新时间请在列表顶部统一配置