import { sitecontrollerAll } from '@/servers/api/site'; import { useEffect, useState } from 'react'; // 站点数据的类型定义 interface Site { id: number; name: string; [key: string]: any; } // 自定义 Hook:管理站点数据 const useSites = () => { // 添加站点数据状态 const [sites, setSites] = useState([]); // 添加加载状态 const [loading, setLoading] = useState(false); // 添加错误状态 const [error, setError] = useState(null); // 获取站点数据 const fetchSites = async () => { // 设置加载状态为 true setLoading(true); // 清空之前的错误信息 setError(null); try { // 调用 API 获取所有站点数据 const { data, success } = await sitecontrollerAll(); // 判断请求是否成功 if (success) { // 将站点数据保存到状态中 setSites(data || []); } else { // 如果请求失败,设置错误信息 setError('获取站点数据失败'); } } catch (error) { // 捕获异常并打印错误日志 console.error('获取站点数据失败:', error); // 设置错误信息 setError('获取站点数据时发生错误'); } finally { // 无论成功与否,都将加载状态设置为 false setLoading(false); } }; // 根据站点ID获取站点名称 const getSiteName = (siteId: number | undefined | null) => { // 如果站点ID不存在,返回默认值 if (!siteId) return '-'; // 如果站点ID是字符串类型,直接返回 if (typeof siteId === 'string') { return siteId; } // 在站点列表中查找对应的站点 const site = sites.find((s) => s.id === siteId); // 如果找到站点,返回站点名称;否则返回站点ID的字符串形式 return site ? site.name : String(siteId); }; // 根据站点ID获取站点对象 const getSiteById = (siteId: number | undefined | null) => { // 如果站点ID不存在,返回 null if (!siteId) return null; // 在站点列表中查找对应的站点 const site = sites.find((s) => s.id === siteId); // 返回找到的站点对象,如果找不到则返回 null return site || null; }; // 组件加载时获取站点数据 useEffect(() => { // 调用获取站点数据的函数 fetchSites(); }, []); // 空依赖数组表示只在组件挂载时执行一次 // 返回站点数据和相关方法 return { sites, // 站点数据列表 loading, // 加载状态 error, // 错误信息 fetchSites, // 重新获取站点数据的方法 getSiteName, // 根据ID获取站点名称的方法 getSiteById, // 根据ID获取站点对象的方法 }; }; // 导出 useSites Hook export default useSites;