'use client' import { useEffect, useState, Suspense } from 'react' import { useSearchParams } from 'next/navigation' import { Table, TableHeader, TableBody, TableHead, TableRow, TableCell } from '@/components/ui/table' import { Pagination } from '@/components/ui/pagination' interface GatewayConfig { city: string edge: string user: string public: string inner_ip: string ischange: number isonline: number } interface ApiResponse { data: GatewayConfig[] totalCount: number currentPage: number totalPages: number } function GatewayConfigContent() { const [data, setData] = useState([]) const [loading, setLoading] = useState(false) const [macAddress, setMacAddress] = useState('') const [error, setError] = useState('') const searchParams = useSearchParams() // 分页状态 const [currentPage, setCurrentPage] = useState(1) const [itemsPerPage, setItemsPerPage] = useState(100) const [totalItems, setTotalItems] = useState(0) // 判断是否为MAC地址查询(用于控制分页显示) const isMacQuery = !!macAddress // 监听URL的mac参数变化 useEffect(() => { const urlMac = searchParams.get('mac') if (urlMac) { setMacAddress(urlMac) setCurrentPage(1) // 重置到第一页 fetchData(urlMac, 1, itemsPerPage) } else { setMacAddress('') setCurrentPage(1) // 重置到第一页 fetchData('', 1, itemsPerPage) } }, [searchParams]) const fetchData = async (mac: string, page: number = 1, limit: number = itemsPerPage) => { setLoading(true) setError('') try { // 计算偏移量 const offset = (page - 1) * limit // 构建API URL let apiUrl = `/api/stats?type=gateway_config&offset=${offset}&limit=${limit}` if (mac.trim()) { apiUrl += `&mac=${encodeURIComponent(mac)}` } const response = await fetch(apiUrl) if (!response.ok) { throw new Error(`HTTP错误! 状态: ${response.status}`) } const result: ApiResponse = await response.json() // 检查返回的数据是否有效 if (!result.data || result.data.length === 0) { if (mac.trim()) { setError(`未找到MAC地址为 ${mac} 的网关配置信息`) } else { setError('未找到任何网关配置信息') } setData([]) setTotalItems(0) return } setData(result.data) setTotalItems(result.totalCount || 0) } catch (error) { console.error('获取网关配置失败:', error) setError(error instanceof Error ? error.message : '获取网关配置失败') setData([]) setTotalItems(0) } finally { setLoading(false) } } const handleSubmit = (e: React.FormEvent) => { e.preventDefault() setCurrentPage(1) // 重置到第一页 fetchData(macAddress, 1, itemsPerPage) } // 处理页码变化 const handlePageChange = (page: number) => { setCurrentPage(page) fetchData(macAddress, page, itemsPerPage) } // 处理每页显示数量变化 const handleSizeChange = (size: number) => { setItemsPerPage(size) setCurrentPage(1) fetchData(macAddress, 1, size) } const getStatusBadge = (value: number, trueText: string = '是', falseText: string = '否') => { // 0是正常1是更新,正常(绿)+ 更新(红) return ( {value === 0 ? trueText : falseText} ) } const getOnlineStatus = (isonline: number) => { // 0是空闲1是在用,在用(红)+ 空闲(绿) return (
{getStatusBadge(isonline, '空闲', '在用')}
) } return (

网关配置状态

查询和管理网关设备的配置信息

{/* 查询表单 */}
setMacAddress(e.target.value)} placeholder="输入MAC地址查询" className="px-4 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent" />
{error && (
{error}
)}
{loading ? (

正在查询网关配置信息...

) : data.length > 0 ? ( <>
城市 MAC地址 IP地址 线路 端口 配置更新 在用状态 {data.map((item, index) => ( {item.city}
{item.edge}
{item.public}
{item.user}
{item.inner_ip}
{getStatusBadge(item.ischange, '正常', '更新')} {getOnlineStatus(item.isonline)}
))}
{totalItems}
配置条数
{data.filter(item => item.isonline === 1).length}
在用节点
{data.filter(item => item.ischange === 1).length}
需要更新
{/* 分页组件 - 仅在非MAC查询时显示 */} {!isMacQuery && ( )} ) : (
📋

暂无网关配置数据

)}
) } export default function GatewayConfig() { return (

加载搜索参数...

}> ) }