This commit is contained in:
2026-01-23 13:22:07 +08:00
parent 771db7e59a
commit 50371f9a2e
4 changed files with 135 additions and 15 deletions

View File

@@ -8,12 +8,16 @@ import {
Spinner,
Badge,
Button,
useToastController,
Toast,
ToastTitle,
} from '@fluentui/react-components';
import {
CheckmarkCircle20Filled,
DismissCircle20Filled,
ArrowClockwise20Regular
} from '@fluentui/react-icons';
import { useLayout } from '../context/LayoutContext';
import { testApiStatus, getStatics } from '../api';
import type { StaticsData } from '../api';
@@ -71,6 +75,8 @@ const useStyles = makeStyles({
const StatusDisplay: React.FC = () => {
const styles = useStyles();
const { toasterId } = useLayout();
const { dispatchToast } = useToastController(toasterId);
const [isApiOnline, setIsApiOnline] = useState<boolean | null>(null);
const [statics, setStatics] = useState<StaticsData | null>(null);
const [isTestLoading, setIsTestLoading] = useState<boolean>(true);
@@ -80,23 +86,31 @@ const StatusDisplay: React.FC = () => {
setIsApiOnline(online);
setIsTestLoading(false);
}, []);
const refreshStatics = useCallback(async () => {
const refreshStatics = useCallback(async (isManual: boolean = false) => {
setIsStaticsLoading(true);
try {
const data = await getStatics();
setStatics(data);
if (isManual) {
dispatchToast(
<Toast>
<ToastTitle></ToastTitle>
</Toast>,
{ intent: 'success' }
);
}
} catch (error) {
console.error('Failed to refresh statics:', error);
setStatics(null); // 失败时重置数据
} finally {
setIsStaticsLoading(false);
}
}, []);
}, [dispatchToast]);
useEffect(() => {
// 初始加载
checkStatus();
refreshStatics();
refreshStatics(false);
// 每 10 秒测试一次后端 API 状态
const testInterval = setInterval(checkStatus, 10000);
@@ -141,7 +155,7 @@ const StatusDisplay: React.FC = () => {
className={styles.refreshButton}
appearance="subtle"
icon={<ArrowClockwise20Regular fontSize={16} />}
onClick={refreshStatics}
onClick={() => refreshStatics(true)}
disabled={isStaticsLoading}
title="刷新统计数据"
/>