import { useEffect, useState } from 'react'; import { ChevronRight, KeyRound, Network, Plus, Power, Save, Trash2 } from 'lucide-react'; import { v7 as uuidv7 } from 'uuid'; import { Button } from '@/components/ui/button'; import { Field } from '@/components/ui/field'; import { Switch } from '@/components/ui/switch'; import { request } from '@/platform/messaging/runtime'; import type { ProxyProfile } from '@/types/models'; import { PROXY_KIND_LABELS, proxyProfileDetail } from './presentation'; import type { ProxyViewProps } from './types'; import './proxy-workspace.css'; function createProfile(): ProxyProfile { return { id: uuidv7(), name: '新代理出口', kind: 'fixed_servers', scheme: 'http', host: '127.0.0.1', port: 8080, bypass: [], }; } export function ProxyProfilesView({ state, setState, run, busy }: ProxyViewProps) { const [draft, setDraft] = useState(() => state.proxyProfiles[0] || createProfile()); const [password, setPassword] = useState(''); const [passwordConfigured, setPasswordConfigured] = useState(false); useEffect(() => { setPassword(''); void request('proxy.auth.status', { profileId: draft.id }).then((result) => setPasswordConfigured(result.configured)); }, [draft.id]); const save = () => run(async () => { setState(await request('proxy.save', draft)); if (draft.authEnabled) { if (password) await request('proxy.auth.set', { profileId: draft.id, password }); } else { await request('proxy.auth.set', { profileId: draft.id, password: '' }); } setPassword(''); setPasswordConfigured(Boolean(draft.authEnabled && (password || passwordConfigured))); }, '代理出口已保存'); const remove = () => run(async () => { setState(await request('proxy.delete', { id: draft.id })); await request('proxy.auth.set', { profileId: draft.id, password: '' }); setDraft(state.proxyProfiles[0] || createProfile()); }, '代理出口已删除'); return

代理出口

维护浏览器可以使用的直连、HTTP、HTTPS、SOCKS 和 PAC 出口。

出口{state.proxyProfiles.length}
{state.proxyProfiles.map((profile) => )}
{draft.builtin ? '内置出口' : '自定义出口'}

{draft.name}

{state.activeProxyId === draft.id ? '当前生效' : '未使用'}
setDraft({ ...draft, name: event.target.value })} /> {draft.kind === 'fixed_servers' && <> setDraft({ ...draft, host: event.target.value })} /> setDraft({ ...draft, port: Number(event.target.value) })} />