基于 Vue3 + ECharts 的数据大屏实例(提供gitHub仓库地址)

最近做了一个 ECharts 可视化大屏,使用chatgpt生成设计稿,整体是典型的"顶栏 + 三列布局 + 多图表面板"结构。项目代码不复杂,但把大屏常见的几个核心点都串起来了:布局、图表封装、模拟数据、动态轮播、响应式适配。

一、技术栈

  • Vue 3
  • Vite
  • ECharts 5
  • Element Plus
  • SCSS

项目入口很简单,src/main.js 里完成 Vue 挂载、Element Plus 注册和路由接入;src/App.vue 负责根容器;真正的大屏页面主要集中在 src/views/Overview.vue

二、项目结构

这套大屏的文件拆分比较清晰:

  • src/views/Overview.vue:主大屏页面,负责整体布局和各图表初始化
  • src/components/ChartBox.vue:统一的面板容器,负责标题、边框和背景
  • src/components/DashboardHeader.vue:顶部导航栏
  • src/components/CenterSummaryGrid.vue:中间汇总卡片区
  • src/layouts/DashboardLayout.vue:大屏整体布局壳
  • src/utils/mockDashboard.js:所有模拟数据集中管理

这种拆法的好处是:页面逻辑集中,图表容器统一,数据和视图分离,后期换真实接口也方便。

三、核心实现思路

1. 页面布局:先搭骨架,再放图表

大屏主体使用 CSS Grid + Flex 混合布局,整体分三列:

  • 左侧:核心指标、访问趋势、用户画像
  • 中间:地图背景 + 汇总指标
  • 右侧:销售额趋势、渠道占比、实时交易

布局上使用了 vhvw 这类比例单位,让不同分辨率下也能保持相对一致的视觉效果。

2. 图表容器统一封装

所有图表都放在 ChartBox 里,它统一处理:

  • 标题栏
  • 边框
  • 背景
  • 内容插槽

这样每个图表只需要关心自己的 option 配置,不需要重复写外壳样式。

3. ECharts 初始化方式

Overview.vue 中通过 ref 拿到 DOM,再在 onMounted() 里初始化图表:

  • echarts.init(el)
  • chart.setOption(option)
  • window.resize 时统一调用 chart.resize()

这种方式适合大屏场景,简单直接,也便于维护。

4. 模拟数据集中管理

所有展示数据都放在 mockDashboard.js

  • 核心指标
  • 访问趋势
  • 用户画像雷达图
  • 销售额趋势
  • 渠道占比
  • 实时交易记录

这样做的好处是:页面文件不会被一堆静态数据撑爆,后面接接口时也只需要替换这一层数据源。

四、几个重点图表实现

1. 访问趋势分析:折线图滚动播放

这个模块做了一个自动轮播效果,核心思路是:

  • 准备更长的时间序列数据
  • 使用 dataZoom 控制可视窗口
  • 用定时器按固定间隔往后推进窗口
  • 在组件卸载时清理定时器

这样图表看起来就像在自动播放,适合大屏展示场景。

2. 渠道占比:环形图 + 右侧百分比列表

渠道占比这块没有直接套 ECharts 默认图例,而是自己拆成了两部分:

  • 左侧:环形饼图
  • 右侧:自定义百分比列表

这样做的好处是视觉更稳定,也更容易对齐大屏风格。环形图的标签和引导线通过 labellabelLine 调整,右侧列表则是 Vue 模板循环渲染。

3. 用户画像:雷达图 + 文本指标

用户画像模块用雷达图展示整体特征,再配合右侧指标列表,形成"图形 + 文本"的组合展示方式。这个方式比单纯雷达图更适合数据看板,信息更完整。

五、实现上的几个小经验

  1. 大屏项目先统一容器,再做图表,比先堆图表更省事。
  2. 图表样式尽量封装到一个面板组件里,减少重复代码。
  3. 静态演示数据集中管理,后续接接口时成本很低。
  4. 自动轮播图表要注意销毁定时器和 resize 监听,避免内存泄漏。
  5. 文字和布局尽量用相对单位,不然大屏一换分辨率就容易变形。

六、总结

这个大屏的实现并不复杂,核心就是三件事:

  • 用 Vue3 搭建结构清晰的页面
  • 用 ECharts 完成各种图表展示
  • 用组件化和数据分层保证后续可维护性

如果你也在做大屏项目,建议先把布局和图表容器抽出来,再逐个填充图表逻辑,整体会清爽很多。

如果这篇文章或者这个项目对你有帮助,麻烦给个 Star 支持一下,这会是我继续完善项目的最大动力。

https://github.com/mxnican/echartsDV

相关推荐
宁雨桥2 小时前
for of,for in以及传统for循环的区别与不同场景下的使用选择
前端·javascript
椰羊~王小美2 小时前
除了前端 JS 配置的国际化,对于 JS 没覆盖到的文本,怎么实现国际化
前端·javascript·状态模式
AC赳赳老秦2 小时前
DBA 专属方案:用 OpenClaw 实现 SQL 语句优化、慢查询分析、数据库备份巡检全自动化
服务器·前端·数据库·ffmpeg·自动化·deepseek·openclaw
燐妤3 小时前
前端HTML编程1:初识html
前端·html5
xiaoye37083 小时前
java接口文档工具 swagger2和swagger3对比
java·服务器·前端
tongyiixiaohuang3 小时前
基于轻易云的数据集成,实现企业系统间灵活对接
java·前端·数据库
哥本哈士奇3 小时前
Power BI学习笔记第17篇:Power BI Dashboard 常用布局方案推荐
前端·powerbi
军军君013 小时前
数字孪生监控大屏实战模板:固体颗粒物监管平台
前端·javascript·vue.js·typescript·前端框架·echarts·less
菜鸟小码3 小时前
MapReduce 核心思想:分而治之,大数据处理的智慧之源
前端·javascript·mapreduce