1321
This commit is contained in:
@@ -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="刷新统计数据"
|
||||
/>
|
||||
|
||||
Reference in New Issue
Block a user