import React, { useState, useEffect } from 'react'; import { ConfigProvider, Layout, Typography, List, Button, Form, Input, Select, Space, Card, Divider } from 'antd'; import { PlusOutlined, DeleteOutlined } from '@ant-design/icons'; import { v4 as uuidv4 } from 'uuid'; import { browser } from 'wxt/browser'; import type { ProxyConfig } from '../../types/proxy'; import { getAllProxyConfigs, saveProxyConfig, deleteProxyConfig, enableProxyConfig } from '../../utils/storage'; import {ContentActionType, ProxyActionType} from '../../types/action'; import './App.css'; const { Header, Content } = Layout; const { Title } = Typography; const { Option } = Select; export default function App() { const [proxies, setProxies] = useState([]); const [form] = Form.useForm(); const [loading, setLoading] = useState(false); useEffect(() => { loadProxies(); // 监听添加代理请求 const handleMessage = (message: any) => { if (message.action === ContentActionType.TRIGGER_ADD_PROXY) { document.getElementById('add-proxy-form')?.scrollIntoView({ behavior: 'smooth' }); } }; browser.runtime.onMessage.addListener(handleMessage); return () => { browser.runtime.onMessage.removeListener(handleMessage); }; }, []); const loadProxies = async () => { try { const configs = await getAllProxyConfigs(); setProxies(configs.filter(config => config.proxyType !== 'direct' && config.proxyType !== 'system')); } catch (error) { console.error('Error loading proxies:', error); } }; const handleSave = async (values: any) => { try { setLoading(true); const newProxy: ProxyConfig = { id: uuidv4(), name: values.name, proxyType: values.proxyType, host: values.host, port: Number(values.port), enabled: false }; // if (values.username) newProxy.username = values.username; // if (values.password) newProxy.password = values.password; await saveProxyConfig(newProxy); // 重新加载代理列表 await loadProxies(); // 重置表单 form.resetFields(); // 通知后台脚本 browser.runtime.sendMessage({ action: ContentActionType.PROXY_CONFIGS_UPDATED, source: 'options' }); } catch (error) { console.error('Error saving proxy:', error); } finally { setLoading(false); } }; const handleDelete = async (id: string) => { try { await deleteProxyConfig(id); await loadProxies(); // 通知后台脚本 browser.runtime.sendMessage({ action: ContentActionType.PROXY_CONFIGS_UPDATED, source: 'options' }); } catch (error) { console.error(`Error deleting proxy ${id}:`, error); } }; const handleActivate = async (id: string) => { try { // 启用代理 await enableProxyConfig(id); // 发送切换代理请求 await browser.runtime.sendMessage({ action: ProxyActionType.SWITCH_PROXY, mode: id }); // 重新加载代理列表 await loadProxies(); } catch (error) { console.error(`Error activating proxy ${id}:`, error); } }; return (
Yaklang 代理管理设置
( handleActivate(proxy.id)} disabled={proxy.enabled} > {proxy.enabled ? '已启用' : '启用'} ,
); }