仪表板功能
**本文档引用的文件** - [[ui-web/src/app/dashboard/page.tsx]](../../file/ui-web/src/app/dashboard/page.tsx) - [[ui-web/src/components/KPICard.tsx]](../../file/ui-web/src/components/kpicard.tsx) - [[ui-web/src/components/ChartComponent.tsx]](../../file/ui-web/src/components/chartcomponent.tsx) - [[ui-web/src/components/RealtimeChart.tsx]](../../file/ui-web/src/components/realtimechart.tsx) - [[ui-web/src/components/DataTable.tsx]](../../file/ui-web/src/components/datatable.tsx) - [[ui-web/src/components/DashboardGridStack.tsx]](../../file/ui-web/src/components/dashboardgridstack.tsx) - [[ui-web/src/hooks/useECharts.ts]](../../file/ui-web/src/hooks/useecharts.ts) - [[ui-web/src/utils/widgetDataTransform.ts]](../../file/ui-web/src/utils/widgetdatatransform.ts) - [[ui-web/src/utils/formatters.ts]](../../file/ui-web/src/utils/formatters.ts) - [[ui-web/src/store/useBiStore.ts]](../../file/ui-web/src/store/usebistore.ts) - [[bi-chat/bi-chat-web/src/components/chat/ChartViewer.tsx]](../../file/bi-chat/bi-chat-web/src/components/chat/chartviewer.tsx) - [[bi-chat/bi-chat-web/src/components/chat/ChartRenderer.tsx]](../../file/bi-chat/bi-chat-web/src/components/chat/chartrenderer.tsx)
目录
简介
本文件系统性梳理 BI 仪表板功能,覆盖实时数据展示机制、KPI 指标卡片设计与实现、多种图表类型集成(折线图、柱状图、饼图等)、响应式设计原则;并结合实际代码示例,说明仪表板组件的构建方式、数据绑定策略、实时更新机制;同时阐述仪表板的布局管理、拖拽排序功能与个性化配置选项,并提供性能优化技巧与最佳实践。
项目结构
仪表板功能主要位于前端工程 ui-web 的页面与组件层,采用模块化组织:
- 页面层:仪表板入口页面负责聚合数据与布局
- 组件层:KPI 卡片、通用图表、实时图表、数据表格、网格布局与部件渲染器
- 工具层:数据转换、格式化、ECharts 封装 Hook
- 状态层:BI 全局状态管理
图表来源
- [ui-web/src/app/dashboard/page.tsx]
- [ui-web/src/components/KPICard.tsx]
- [ui-web/src/components/ChartComponent.tsx]
- [ui-web/src/components/RealtimeChart.tsx]
- [ui-web/src/components/DataTable.tsx]
- [ui-web/src/components/DashboardGridStack.tsx]
- [ui-web/src/hooks/useECharts.ts]
- [ui-web/src/utils/widgetDataTransform.ts]
- [ui-web/src/utils/formatters.ts]
- [ui-web/src/store/useBiStore.ts]
章节来源
核心组件
- 仪表板页面:负责数据拉取、状态管理与布局编排
- KPI 指标卡片:展示关键指标、趋势与变化率
- 通用图表组件:基于 ECharts 支持折线、柱状、饼图、面积图
- 实时图表组件:滚动窗口展示动态数据流
- 数据表格:动态列与分页展示
- 网格布局组件:支持拖拽排序、尺寸调整、部件增删改、模板与指标配置
章节来源
- [ui-web/src/components/KPICard.tsx]
- [ui-web/src/components/ChartComponent.tsx]
- [ui-web/src/components/RealtimeChart.tsx]
- [ui-web/src/components/DataTable.tsx]
- [ui-web/src/components/DashboardGridStack.tsx]
架构总览
仪表板采用“页面聚合 + 组件解耦 + 工具转换 + 状态驱动”的架构:
- 页面层通过状态与副作用获取初始数据与模拟实时更新
- 组件层通过 props 接收数据,内部封装图表初始化、销毁与响应式适配
- 工具层提供统一的数据转换与格式化能力,保证不同部件的数据形态一致
- 状态层集中管理 BI 初始化与用户上下文
图表来源
- [ui-web/src/app/dashboard/page.tsx]
- [ui-web/src/components/KPICard.tsx]
- [ui-web/src/components/ChartComponent.tsx]
- [ui-web/src/components/RealtimeChart.tsx]
- [ui-web/src/components/DataTable.tsx]
详细组件分析
实时数据展示机制
- 页面层通过副作用模拟初始数据与定时更新,形成滚动窗口的实时数据
- 实时图表组件基于 ECharts,按时间戳序列绘制折线图,自动平滑与填充区域
- 图表组件监听窗口 resize,确保在容器变化时正确重绘
图表来源
章节来源
KPI 指标卡片设计与实现
- 数据结构包含指标名称、数值、变化率与趋势方向
- 格式化策略根据指标类型(金额、百分比、整数)进行本地化与单位换算
- 趋势图标与颜色随趋势变化而动态切换
图表来源
章节来源
多种图表类型的集成
- 通用图表组件支持折线、柱状、饼图、面积图四种类型,统一配置 ECharts 选项
- 实时图表组件针对时间序列数据进行专门优化(平滑曲线、区域填充、动态坐标轴)
- 图表组件通过 Hook 封装初始化、销毁与 resize 观察,减少重复逻辑
图表来源
- [ui-web/src/components/ChartComponent.tsx]
- [ui-web/src/components/RealtimeChart.tsx]
- [ui-web/src/hooks/useECharts.ts]
章节来源
- [ui-web/src/components/ChartComponent.tsx]
- [ui-web/src/components/RealtimeChart.tsx]
- [ui-web/src/hooks/useECharts.ts]
响应式设计原理
- 页面使用栅格系统进行断点布局,移动端与桌面端自适应
- 图表组件通过容器尺寸监听与 ECharts 自身的响应式容器实现自适应
- 表格组件支持分页与列宽自适应,保障小屏可读性
图表来源
- [ui-web/src/app/dashboard/page.tsx]
- [ui-web/src/components/ChartComponent.tsx]
- [ui-web/src/components/DataTable.tsx]
章节来源
布局管理、拖拽排序与个性化配置
- 网格布局组件基于 GridStack,支持拖拽移动与拖拽右下角调整尺寸
- 编辑模式下启用拖拽与缩放,非编辑模式禁用交互
- 个性化配置包括:部件类型(卡片/表格/折线图/环形图)、模板选择、指标选择、维度选择、日期范围、排序与分页参数
- 数据转换工具将 API 返回的预览数据转换为各部件所需的数据结构
图表来源
- [ui-web/src/components/DashboardGridStack.tsx]
- [ui-web/src/components/DashboardGridStack.tsx]
- [ui-web/src/utils/widgetDataTransform.ts]
章节来源
- [ui-web/src/components/DashboardGridStack.tsx]
- [ui-web/src/components/DashboardGridStack.tsx]
- [ui-web/src/components/DashboardGridStack.tsx]
- [ui-web/src/utils/widgetDataTransform.ts]
数据绑定策略
- 页面层通过状态管理数据,组件通过 props 接收数据并渲染
- 部件渲染器通过统一的数据转换工具将 API 数据映射为卡片、表格、折线图、饼图的内部结构
- 格式化工具根据字段元数据(单位、显示名)进行本地化与单位换算
图表来源
章节来源
- [ui-web/src/utils/widgetDataTransform.ts]
- [ui-web/src/utils/widgetDataTransform.ts]
- [ui-web/src/utils/widgetDataTransform.ts]
- [ui-web/src/utils/formatters.ts]
个性化配置选项
- 指标分组与选择:按一级分组筛选二级指标,支持动态生成选项
- 环形图维度选择:从维度字典中筛选可用维度,支持缓存上次选择
- 模板选择:从模板列表中选择,不同部件类型对应不同模板字段
- 日期范围与排序:通过回调函数传递给部件,支持联动更新
章节来源
- [ui-web/src/components/DashboardGridStack.tsx]
- [ui-web/src/components/DashboardGridStack.tsx]
- [ui-web/src/components/DashboardGridStack.tsx]
图表组件对比(聊天场景)
- 聊天场景下的图表渲染器与查看器展示了更丰富的交互(切换图表类型、动画过渡、主题风格),可作为仪表板图表组件的扩展参考
章节来源
- [bi-chat/bi-chat-web/src/components/chat/ChartViewer.tsx]
- [bi-chat/bi-chat-web/src/components/chat/ChartRenderer.tsx]
依赖关系分析
- 组件间依赖:页面依赖 KPI、图表、实时图表、表格;网格布局依赖数据转换与格式化工具
- 外部依赖:ECharts、GridStack、Ant Design Web React
- 状态依赖:BI 初始化状态影响指标与维度字典
图表来源
- [ui-web/src/app/dashboard/page.tsx]
- [ui-web/src/components/DashboardGridStack.tsx]
- [ui-web/src/hooks/useECharts.ts]
章节来源
性能考虑
- 图表初始化与销毁:组件在卸载时释放实例与事件监听,避免内存泄漏
- 懒加载与按需引入:网格布局初始化时按需引入 GridStack,减少首屏体积
- 数据转换与格式化:统一的转换与格式化工具避免重复计算,提升渲染效率
- 响应式适配:使用 ResizeObserver 替代频繁的 window resize 监听,降低重排成本
- 实时更新节流:页面层定时器按固定间隔更新,避免高频重渲染
章节来源
- [ui-web/src/components/ChartComponent.tsx]
- [ui-web/src/components/RealtimeChart.tsx]
- [ui-web/src/hooks/useECharts.ts]
- [ui-web/src/components/DashboardGridStack.tsx]
故障排查指南
- 图表不显示或空白
- 检查容器高度与宽度是否正确设置
- 确认 ECharts 实例已初始化且未被提前销毁
- 确认数据结构符合组件要求(categories/series 等)
- 实时数据不更新
- 检查定时器是否仍在运行
- 确认新数据点已正确替换旧数据点
- 拖拽排序无效
- 确认处于编辑模式
- 检查 GridStack 初始化是否成功
- 数据格式异常
- 检查格式化工具的字段单位与显示名映射
- 确认数据转换工具的输入输出结构一致
章节来源
- [ui-web/src/components/ChartComponent.tsx]
- [ui-web/src/components/RealtimeChart.tsx]
- [ui-web/src/components/DashboardGridStack.tsx]
- [ui-web/src/utils/formatters.ts]
结论
本仪表板功能通过清晰的页面-组件-工具-状态分层,实现了 KPI 展示、多图表集成、实时数据更新与灵活的网格布局。借助统一的数据转换与格式化工具,以及对 ECharts 的封装,系统具备良好的可维护性与扩展性。建议在生产环境中进一步完善错误边界、加载状态与网络拦截策略,以提升用户体验与稳定性。