forked from yoone/WEB
93 lines
2.8 KiB
TypeScript
93 lines
2.8 KiB
TypeScript
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<Site[]>([]);
|
||
|
||
// 添加加载状态
|
||
const [loading, setLoading] = useState<boolean>(false);
|
||
|
||
// 添加错误状态
|
||
const [error, setError] = useState<string | null>(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;
|