import { useEffect, useState } from 'react'; import { Layout, Nav, Tag, Spin } from '@douyinfe/semi-ui'; import { IconMonitorStroked, IconSaveStroked, IconGridView } from '@douyinfe/semi-icons'; import { useDashboardData } from '@bj_power_dashboard/hooks/useDashboardData'; import { ProductionBoard } from '@bj_power_dashboard/pages/ProductionBoard'; import { WarehouseBoard } from '@bj_power_dashboard/pages/WarehouseBoard'; import { LineModel } from '@bj_power_dashboard/pages/LineModel'; import { ErrorRetry } from '@bj_power_dashboard/components/ErrorRetry'; type PageKey = 'production' | 'warehouse' | 'model'; const navItems = [ { itemKey: 'production', text: '生产总览', icon: }, { itemKey: 'warehouse', text: '仓储动态', icon: }, { itemKey: 'model', text: '产线孪生', icon: }, ]; const CYCLE_ORDER: PageKey[] = ['production', 'warehouse', 'model']; const CYCLE_MS = 40_000; export function App() { const [page, setPage] = useState('production'); const { data: dashboard, mode, error, retry } = useDashboardData(); const loading = !dashboard && !error; // 无人值守自动轮播:40s 切下一屏;手动点选后重新计时 useEffect(() => { const timer = setInterval(() => { setPage((cur) => { const idx = CYCLE_ORDER.indexOf(cur); return CYCLE_ORDER[(idx + 1) % CYCLE_ORDER.length]; }); }, CYCLE_MS); return () => clearInterval(timer); }, [page]); const selectPage = (k: string) => setPage(k as PageKey); return (
北京电力智能产线 · 生产看板
{mode === 'sse' && 实时推送} {mode === 'polling' && 轮询刷新} {mode === 'demo' && 演示数据} {mode === 'init' && 连接中} {new Date().toLocaleTimeString('zh-CN')}