import { useState, useEffect } from 'react'; import { Input } from "@heroui/input"; import { Button } from "@heroui/button"; import { Card, CardBody } from "@heroui/card"; import { useNavigate } from 'react-router-dom'; import toast from 'react-hot-toast'; import { reinitializeBaseURL } from '@/api/network'; import { getPanelAddresses, savePanelAddress, setCurrentPanelAddress, deletePanelAddress, validatePanelAddress, } from '@/utils/panel'; interface PanelAddress { name: string; address: string; inx: boolean; } export const SettingsPage = () => { const navigate = useNavigate(); const [panelAddresses, setPanelAddresses] = useState([]); const [newName, setNewName] = useState(''); const [newAddress, setNewAddress] = useState(''); const setPanelAddressesFunc = (newAddress: PanelAddress[]) => { setPanelAddresses(newAddress); } // 加载面板地址列表 const loadPanelAddresses = async () => { (window as any).setPanelAddresses = setPanelAddressesFunc getPanelAddresses(); }; // 添加新面板地址 const addPanelAddress = async () => { if (!newName.trim() || !newAddress.trim()) { toast.error('请输入名称和地址'); return; } // 验证地址格式 if (!validatePanelAddress(newAddress.trim())) { toast.error('地址格式不正确,请检查:\n• 必须是完整的URL格式\n• 必须以 http:// 或 https:// 开头\n• 支持域名、IPv4、IPv6 地址\n• 端口号范围:1-65535\n• 示例:http://192.168.1.100:3000'); return; } (window as any).setPanelAddresses = setPanelAddressesFunc savePanelAddress(newName.trim(), newAddress.trim()); setNewName(''); setNewAddress(''); toast.success('添加成功'); }; // 设置当前面板地址 const setCurrentPanel = async (name: string) => { (window as any).setPanelAddresses = setPanelAddressesFunc setCurrentPanelAddress(name); reinitializeBaseURL(); }; // 删除面板地址 const handleDeletePanelAddress = async (name: string) => { (window as any).setPanelAddresses = setPanelAddressesFunc deletePanelAddress(name); reinitializeBaseURL(); toast.success('删除成功'); }; // 页面加载时获取数据 useEffect(() => { loadPanelAddresses(); }, []); return (
{/* 顶部导航 */}

面板设置

{/* 内容区域 */}
{/* 添加新地址 */}

添加新面板地址

setNewName(e.target.value)} /> setNewAddress(e.target.value)} />
{/* 地址列表 */}

已保存的面板地址

{panelAddresses.length === 0 ? (

暂无保存的面板地址

) : (
{panelAddresses.map((panel, index) => (
{panel.name} {panel.inx && ( 当前 )}

{panel.address}

{!panel.inx && ( )}
))}
)}
); };