1. 新增SSE看板广播机制,业务操作后主动推送刷新事件 2. 新增产线工序横道图与工位状态展示面板 3. 移除dashboard无用的three.js依赖 4. 重构WMS客户端布局与WMS前端资源哈希 5. 新增工位终端时钟图标与大屏自适应布局 6. 新增系统截图脚本与说明书生成工具 7. 修复多处代码细节与空值处理逻辑
64 lines
2.4 KiB
TypeScript
64 lines
2.4 KiB
TypeScript
import { useState } from 'react';
|
|
import { Layout, Tag, Spin } from '@douyinfe/semi-ui';
|
|
import { useDashboardData } from './hooks/useDashboardData';
|
|
import { ProductionBoard } from './pages/ProductionBoard';
|
|
import { WarehouseBoard } from './pages/WarehouseBoard';
|
|
import { LineModel } from './pages/LineModel';
|
|
import { ErrorRetry } from './components/ErrorRetry';
|
|
|
|
export function App() {
|
|
const { data: dashboard, mode, error, retry } = useDashboardData();
|
|
const loading = !dashboard && !error;
|
|
const [now, setNow] = useState(() => new Date());
|
|
|
|
// 时钟
|
|
setTimeout(() => setNow(new Date()), 1000);
|
|
|
|
return (
|
|
<Layout className="app-shell">
|
|
<Layout.Header className="app-header">
|
|
<div className="app-meta">
|
|
{mode === 'sse' && <Tag color="green">实时推送</Tag>}
|
|
{mode === 'polling' && <Tag color="blue">轮询刷新</Tag>}
|
|
{mode === 'demo' && <Tag color="amber">演示数据</Tag>}
|
|
{mode === 'init' && <Tag color="grey">连接中</Tag>}
|
|
<span className="clock">{now.toLocaleTimeString('zh-CN')}</span>
|
|
<span className="date">{now.toLocaleDateString('zh-CN', { weekday: 'long' })}</span>
|
|
</div>
|
|
</Layout.Header>
|
|
|
|
<Layout.Content className="app-content">
|
|
{loading ? (
|
|
<div style={{ display: 'flex', justifyContent: 'center', padding: 80 }}>
|
|
<Spin size="large" tip="数据加载中…" />
|
|
</div>
|
|
) : (
|
|
<ErrorRetry error={error} mode={mode} loading={loading} onRetry={retry}>
|
|
{dashboard ? (
|
|
<div className="dashboard-grid">
|
|
<section className="dash-section production">
|
|
<div className="board-card">
|
|
<ProductionBoard data={dashboard} />
|
|
</div>
|
|
</section>
|
|
<section className="dash-section warehouse">
|
|
<div className="board-card">
|
|
<WarehouseBoard data={dashboard} />
|
|
</div>
|
|
</section>
|
|
<section className="dash-section model">
|
|
<LineModel data={dashboard} />
|
|
</section>
|
|
</div>
|
|
) : (
|
|
<div style={{ padding: 40, textAlign: 'center', color: '#94a3b8' }}>
|
|
等待产线数据…
|
|
</div>
|
|
)}
|
|
</ErrorRetry>
|
|
)}
|
|
</Layout.Content>
|
|
</Layout>
|
|
);
|
|
}
|