import { Button, FormItem, Input, Modal, Select, Table, Textarea } from '../../../../shared/components' import type { TableColumn } from '../../../../shared/components/Table' import type { ProxyIPHealthResult } from '../../types' import { type ChainImportForm, type ProxyDisplayInfo, type ProxyImportMode, } from './helpers' export interface ProxyEditFormValue { proxyName: string proxyConfig: string preferredKernel: string dnsServers: string groupName: string } export { ProxyPoolImportModal } from './ProxyPoolImportModal' interface ProxyPoolPreviewModalProps { open: boolean importMode: ProxyImportMode importDnsServers: string previewList: ProxyDisplayInfo[] removedPreviewProxyNames: string[] importing: boolean onClose: () => void onBack: () => void onConfirm: () => void onRemoveProxy: (proxyId: string) => void } export function ProxyPoolPreviewModal({ open, importMode, importDnsServers, previewList, removedPreviewProxyNames, importing, onClose, onBack, onConfirm, onRemoveProxy, }: ProxyPoolPreviewModalProps) { const previewColumns: TableColumn[] = [ { key: 'proxyName', title: '代理名称', width: '200px' }, { key: 'type', title: '类型', width: '100px' }, { key: 'server', title: '服务器', width: '200px' }, { key: 'port', title: '端口', width: '100px', render: (value) => value || '-' }, { key: 'actions', title: '操作', width: '96px', render: (_, record) => ( ), }, ] return ( } >
{importMode === 'clash' && importDnsServers.trim() && (

已配置批量 DNS,将应用到以下所有代理

)}

保留 {previewList.length} 条,删除 {removedPreviewProxyNames.length} 条。删除项不会进入后续比较环节。

) } interface ProxyPoolEditModalProps { open: boolean saving: boolean groups: string[] editForm: ProxyEditFormValue chainEditMode: boolean chainEditForm: ChainImportForm onClose: () => void onSave: () => void onChange: (patch: Partial) => void onChainEditFormChange: (patch: Partial) => void onChainEditHopChange: (hop: 'first' | 'second', field: keyof ChainImportForm['first'], value: string) => void } export function ProxyPoolEditModal({ open, saving, groups, editForm, chainEditMode, chainEditForm, onClose, onSave, onChange, onChainEditFormChange, onChainEditHopChange, }: ProxyPoolEditModalProps) { return ( } >
{ if (chainEditMode) { onChainEditFormChange({ proxyName: event.target.value }) return } onChange({ proxyName: event.target.value }) }} placeholder="节点名称" /> onChange({ groupName: event.target.value })} placeholder="分组名称" list="edit-proxy-groups-datalist" /> {groups.map((group) => ( onChainEditFormChange({ localPort: event.target.value })} placeholder="留空自动分配" />

第一层代理

onChainEditHopChange('first', 'server', event.target.value)} /> onChainEditHopChange('first', 'port', event.target.value)} /> onChainEditHopChange('first', 'username', event.target.value)} /> onChainEditHopChange('first', 'password', event.target.value)} />

第二层代理

onChainEditHopChange('second', 'server', event.target.value)} /> onChainEditHopChange('second', 'port', event.target.value)} /> onChainEditHopChange('second', 'username', event.target.value)} /> onChainEditHopChange('second', 'password', event.target.value)} />
) : (