Vue3携手Echarts,打造炫酷数据可视化大屏
一、引言
在数字化时代,数据如同企业的血液,蕴含着巨大的价值。而如何将这些抽象的数据转化为直观、易懂的信息,以便更好地支持决策和展示成果,成为了众多开发者和企业关注的焦点。数据可视化大屏应运而生,它以直观、醒目的方式展示关键数据指标,使复杂的数据变得一目了然,帮助企业快速洞察数据背后的趋势和规律。无论是在企业的监控中心、会议室,还是在展览展示场合,数据可视化大屏都发挥着重要作用,成为了信息展示和决策支持的强大工具。
Vue3 作为新一代的前端框架,带来了诸多性能提升和开发体验的优化,其响应式原理、Composition API 等特性,让代码的组织和复用更加高效。Echarts 则是一款功能强大的数据可视化图表库,提供了丰富多样的图表类型和灵活的配置选项,能够轻松实现各种复杂的数据可视化需求。将 Vue3 和 Echarts 结合起来,开发数据可视化大屏,既能充分利用 Vue3 的高效开发能力,又能借助 Echarts 强大的图表展示功能,为用户带来极致的数据可视化体验。
本文将详细介绍如何使用 Vue3 + Echarts 搭建一个数据可视化大屏项目,从项目搭建、Echarts 图表配置到数据动态更新,一步步带你实现一个炫酷的数据可视化大屏。无论你是 Vue 开发者,还是对数据可视化感兴趣的技术爱好者,都能从本文中获得有价值的信息和实践经验。
二、技术栈简介
(一)Vue3
Vue3 是 Vue.js 的最新版本,相较于 Vue2,它带来了许多令人瞩目的改进和新特性,为前端开发带来了更高的效率和更好的体验。
在性能方面,Vue3 重构了响应式系统,使用 Proxy API 取代了 Vue2 中的 Object.defineProperty。这一改变使得 Vue3 能够更高效地追踪和响应数据变化,尤其是在处理嵌套对象和数组时,性能提升显著。例如,当数据量较大且包含复杂嵌套结构时,Vue3 的响应式更新速度更快,页面渲染更加流畅,减少了卡顿现象 ,让用户操作更加顺滑。
Vue3 引入的 Composition API 是其一大亮点。与 Vue2 的 Options API 不同,Composition API 允许开发者将相关的逻辑代码组合在一起,以函数的形式进行复用,而不是按照组件选项来组织代码。比如,在一个数据可视化大屏项目中,可能会有多个组件需要处理数据的获取、格式化和展示逻辑,使用 Composition API,可以将这些逻辑封装成独立的函数,在不同组件中轻松复用,大大提高了代码的可维护性和可复用性。同时,代码结构更加清晰,开发者可以更方便地理解和管理组件的逻辑。
Vue3 在 TypeScript 支持方面也有了很大的提升。由于 Vue3 本身就是使用 TypeScript 编写的,因此对 TypeScript 提供了更原生、更全面的支持。在开发过程中,TypeScript 可以帮助我们更早地发现代码中的类型错误,提供更智能的代码补全和类型推断,提高代码的质量和稳定性,这对于大型项目的开发尤为重要。
(二)Echarts
Echarts 是一款由百度开源的数据可视化图表库,它基于 JavaScript 语言,底层依赖轻量级的 Canvas 类库 ZRender,能够提供直观、生动、可交互、可高度个性化定制的数据可视化图表。无论是在 PC 端还是移动设备上,Echarts 都能流畅运行,并且兼容当前绝大部分浏览器,如 IE8 及以上版本、Chrome、Firefox、Safari 等。
Echarts 最显著的特点之一就是拥有丰富的图表类型,涵盖了常规的折线图、柱状图、散点图、饼图、K 线图,用于统计的盒形图,用于地理数据可视化的地图、热力图、线图,用于关系数据可视化的关系图、treemap、旭日图,多维数据可视化的平行坐标,以及用于 BI 的漏斗图、仪表盘等。这些丰富的图表类型可以满足各种不同的数据展示需求,比如在数据可视化大屏中,我们可以使用柱状图来比较不同数据项的大小,用折线图展示数据的变化趋势,用饼图呈现数据的占比情况,用地图展示地理分布数据等。
除了丰富的图表类型,Echarts 还提供了强大的配置选项,开发者可以通过这些选项对图表的外观、样式、标签、坐标轴、图例等进行高度自定义,以满足项目的各种设计需求。例如,可以自由设置图表的颜色主题、字体样式、线条粗细、数据标签的显示方式等。同时,Echarts 还支持多种交互行为,如缩放、平移、数据筛选、图例切换、数据提示等,使用户能够与图表进行自然交互,更深入地探索数据背后的信息 ,增强了数据可视化的实用性和趣味性。
三、项目搭建
(一)创建 Vue3 项目
创建 Vue3 项目有多种方式,这里我们介绍两种常用的方法:使用 Vite 和 Vue CLI。
使用 Vite 创建 Vue3 项目:
Vite 是一个由原生 ESM 驱动的 Web 开发构建工具,具有快速的冷启动和即时的热模块更新等优势,能显著提升开发效率。在开始之前,请确保你的系统已经安装了最新版本的 Node.js,Node.js 是运行在服务器端 JavaScript 的运行环境,同时也是管理 npm(Node Package Manager)的命令行工具,它对于前端开发至关重要。
切换到打算创建项目的目录,在文件路径栏输入cmd,并按回车唤出命令提示符。再键入以下 Vue 官方的项目脚手架工具的指令,最后按回车将会安装并执行create-vue:
npm create vue@latest
按照提示进行操作:
✔ Project name: … my - vue3 - echarts - project # 输入项目名称,这里以my-vue3-echarts-project为例✔ Add TypeScript? … No / Yes # 是否添加TypeScript支持,根据项目需求选择,这里选择No✔ Add JSX Support? … No / Yes # 是否添加JSX支持,根据项目需求选择,这里选择No✔ Add Vue Router for Single Page Application development? … No / Yes # 是否添加Vue Router用于单页应用开发,根据项目需求选择,这里选择No✔ Add Pinia for state management? … No / Yes # 是否添加Pinia进行状态管理,根据项目需求选择,这里选择No✔ Add Vitest for Unit testing? … No / Yes # 是否添加Vitest进行单元测试,根据项目需求选择,这里选择No✔ Add an End - to - End Testing Solution? … No / Cypress / Playwright # 是否添加端到端测试解决方案,根据项目需求选择,这里选择No✔ Add ESLint for code quality? … No / Yes # 是否添加ESLint进行代码质量检查,根据项目需求选择,这里选择Yes✔ Add Prettier for code formatting? … No / Yes # 是否添加Prettier进行代码格式化,根据项目需求选择,这里选择Yes✔ Add Vue DevTools 7 extension for debugging? (experimental) … No / Yes # 是否添加Vue DevTools 7扩展用于调试,根据项目需求选择,这里选择NoScaffolding project in./my - vue3 - echarts - project...Done.
项目创建完成后,切换到新建项目的目录:
cd my - vue3 - echarts - project
然后安装项目依赖:
npm install
最后,启动开发服务器:
npm run dev
此时,你可以在浏览器中访问http://localhost:5173/来预览你的项目。
使用 Vue CLI 创建 Vue3 项目:
如果之前已经安装过 Vue CLI,先查看版本,保证 Vue CLI 版本在 4.5.0 以上。
vue --V
如果版本低于 4.5.0,执行以下命令升级:
npm install -g @vue/cli
安装完成后,打开终端(或命令提示符),进入希望创建项目的目录,运行以下命令创建一个新的 Vue3 项目:
vue create my - vue3 - echarts - project
同样,将my - vue3 - echarts - project替换为你自定义的项目名称。这将启动一个交互式的项目创建过程,你可以选择默认选项,也可以手动选择要添加的功能插件,比如是否使用 TypeScript、是否安装 Vue Router 等。这里我们按默认选项进行创建,选择默认选项后按下回车键确认选择。
创建完成后,进入项目目录:
cd my - vue3 - echarts - project
运行项目:
npm run serve
在浏览器中打开http://localhost:8080(默认端口号为 8080)即可预览你的 Vue3 项目 。
(二)安装 Echarts
项目创建完成后,接下来需要安装 Echarts。我们可以通过 npm 或 yarn 来安装 Echarts。
使用 npm 安装 Echarts:
npm install echarts --save
使用 yarn 安装 Echarts:
yarn add echarts
在安装过程中,可能会遇到一些问题。比如,安装过程中有可能会出现报错,这可能是由于网络问题、依赖冲突或其他原因导致的。如果遇到网络问题,可以尝试更换 npm 源或使用 cnpm 进行安装。例如,切换到淘宝 npm 源:
npm config set registry https://registry.npm.taobao.org
如果是依赖冲突问题,需要查看报错信息,分析具体的冲突原因,然后尝试解决冲突。比如,可以尝试更新相关依赖的版本,或者排除某些冲突的依赖 。
(三)项目基本配置
创建好 Vue3 项目并安装 Echarts 后,我们来了解一下项目的基本配置。
项目目录结构:
以使用 Vite 创建的项目为例,项目目录结构如下:
my - vue3 - echarts - project├──.vscode # vscode个性化设置和扩展配置│ └── extensions.json├── node_modules # 项目依赖├── public # 公共静态资源│ └── favicon.ico├── src # 项目源代码│ ├── assets # 静态资源,如图片、样式等│ ├── components # Vue组件│ ├── App.vue # 主组件、父组件│ └── main.ts # 入口TS文件├──.gitignore # Git忽略文件配置├── env.d.ts # 用于定义环境相关的类型声明,帮助在代码中提供更好的类型提示和检查├── index.html # 项目的主HTML文件,通常是应用加载和渲染的基础页面├── package.json # 项目描述文件,定义了项目所需的npm包等信息├── package - lock.json # 记录了项目所安装的具体包版本的锁定信息,确保在不同环境下安装的包版本一致├── README.md # 项目说明文档├── tsconfig.app.json # TypeScript的配置文件,针对应用的特定配置,用于指导TypeScript编译器如何处理代码├── tsconfig.json # TypeScript配置文件├── tsconfig.node.json # TypeScript的配置文件,分别针对节点环境的特定配置,用于指导TypeScript编译器如何处理代码└── vite.config.js # Vite的配置文件
了解项目目录结构有助于我们更好地组织和管理代码。例如,src/components目录用于存放可复用的组件,src/assets目录用于存放静态资源,src/App.vue是项目的主组件,所有其他组件都将在这个组件中进行组合和展示 。
文件命名规范:
在项目开发中,遵循良好的文件命名规范有助于提高代码的可读性和可维护性。一般来说,组件文件使用 PascalCase 命名,例如MyComponent.vue;JavaScript 文件和 TypeScript 文件使用 camelCase 命名,例如myFunction.js或myModule.ts;样式文件使用 kebab - case 命名,例如my - style.css。同时,文件名要能够准确反映文件的内容和功能,避免使用模糊或无意义的命名 。
在 Vue3 项目中引入 Echarts 的配置方式:
有两种常见的引入方式,全局引入和局部引入。
全局引入:
在main.ts中进行全局引入和挂载:
import { createApp } from 'vue'import App from './App.vue'import * as echarts from 'echarts'const app = createApp(App)app.config.globalProperties.$echarts = echartsapp.mount('#app')
这样在项目的任何组件中都可以通过this.$echarts来访问 Echarts。
局部引入:
在需要使用 Echarts 的组件中进行局部引入:
<template><div id="main" style="width: 600px;height:400px;"></div>
</template><script setup>
import * as echarts from 'echarts'
import { onMounted } from 'vue'onMounted(() => {const myChart = echarts.init(document.getElementById('main'))const option = {title: {text: 'ECharts 入门示例'},tooltip: {},legend: {data: ['销量']},xAxis: {data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']},yAxis: {},series: [{name: '销量',type: 'bar',data: [5, 20, 36, 10, 10, 20]}]}myChart.setOption(option)
})
</script>
局部引入的方式更加灵活,适合在特定组件中使用 Echarts,避免了全局引入带来的资源浪费 。
四、数据可视化大屏开发实战
(一)需求分析与设计
在开始开发数据可视化大屏之前,深入的需求分析和合理的设计至关重要。常见的数据可视化大屏需求场景涵盖多个领域,比如在企业运营监控场景中,需要实时展示关键业务指标,如销售额、订单量、用户活跃度等,以便管理者能够及时掌握企业运营状况,做出决策。在数据分析场景中,可能涉及对历史数据的分析和展示,通过不同类型的图表,如柱状图、折线图、饼图等,呈现数据的分布、趋势和占比关系 ,帮助分析师挖掘数据背后的规律和价值。
在设计思路上,首先要确定大屏的主题和目标受众,明确需要展示的数据和信息。例如,如果是为企业管理层设计的运营监控大屏,重点应突出关键业务指标和异常数据的展示;如果是用于对外展示的数据大屏,则要注重界面的美观和信息的易懂性。
布局方案方面,一般建议选择深色系背景。这是因为深色背景能够更好地突出图表和数据,减少视觉疲劳,同时营造出科技感和专业感。在图表分布上,要遵循合理的原则。将重要的、核心的数据指标放在大屏的中心位置或显眼区域,以便用户能够第一时间关注到。比如,在一个电商数据可视化大屏中,将当日销售额、订单量等关键指标用较大的数字和突出的图表展示在屏幕中央。对于次要的数据和辅助信息,可以分布在屏幕的周边区域。同时,要注意图表之间的间隔和对齐,保持界面的整洁和美观 。还可以根据数据的相关性和逻辑关系,将相关的图表放在相邻位置,方便用户进行对比和分析。例如,将销售额和销售量的柱状图放在一起,用户可以直观地看到两者之间的关系 。
(二)图表组件开发
在 Vue3 项目中使用 Echarts 开发图表组件是实现数据可视化大屏的关键步骤。下面我们以柱状图、折线图和饼图为例,详细讲解图表组件的开发过程。
1. 柱状图
柱状图是一种常用的图表类型,用于比较不同类别数据的大小。在 Vue3 组件中绘制柱状图,首先要准备好数据。假设我们有一个数组,包含不同月份的销售额数据,如下所示:
const salesData = [{ month: '一月', sales: 120 },{ month: '二月', sales: 150 },{ month: '三月', sales: 130 },// 更多月份数据...
];
接下来,在 Vue3 组件中使用 Echarts 绘制柱状图。这里我们采用局部引入 Echarts 的方式,代码如下:
<template><div id="barChart" style="width: 100%; height: 400px;"></div>
</template><script setup>
import * as echarts from 'echarts';
import { onMounted } from 'vue';const salesData = [{ month: '一月', sales: 120 },{ month: '二月', sales: 150 },{ month: '三月', sales: 130 },
];onMounted(() => {const myChart = echarts.init(document.getElementById('barChart'));const option = {title: {text: '各月销售额对比'},tooltip: {trigger: 'axis',axisPointer: {type:'shadow'}},legend: {data: ['销售额']},xAxis: {type: 'category',data: salesData.map(item => item.month)},yAxis: {type: 'value'},series: [{name: '销售额',type: 'bar',data: salesData.map(item => item.sales)}]};myChart.setOption(option);
});
</script>
在上述代码中,首先在template中定义了一个用于显示柱状图的div元素。在script setup中,引入 Echarts 和 Vue 的onMounted生命周期函数。在onMounted函数中,通过echarts.init初始化 Echarts 实例,并传入柱状图所在的 DOM 元素。然后,定义了图表的配置项option,包括标题、提示框、图例、坐标轴和系列数据。其中,xAxis的data属性设置为月份数组,series中的data属性设置为销售额数组 。最后,通过myChart.setOption(option)应用配置项,绘制出柱状图。
2. 折线图
折线图主要用于展示数据的变化趋势,特别适用于时间序列数据。与柱状图相比,折线图更强调数据的连续性和变化趋势。假设我们有一个数组,记录了某股票在一周内每天的收盘价,如下所示:
const stockData = [{ day: '周一', price: 120 },{ day: '周二', price: 125 },{ day: '周三', price: 118 },// 更多天数数据...
];
在 Vue3 组件中绘制折线图的代码如下:
<template><div id="lineChart" style="width: 100%; height: 400px;"></div>
</template><script setup>
import * as echarts from 'echarts';
import { onMounted } from 'vue';const stockData = [{ day: '周一', price: 120 },{ day: '周二', price: 125 },{ day: '周三', price: 118 },
];onMounted(() => {const myChart = echarts.init(document.getElementById('lineChart'));const option = {title: {text: '一周股票收盘价走势'},tooltip: {trigger: 'axis'},legend: {data: ['收盘价']},xAxis: {type: 'category',data: stockData.map(item => item.day)},yAxis: {type: 'value'},series: [{name: '收盘价',type: 'line',data: stockData.map(item => item.price)}]};myChart.setOption(option);
});
</script>
这段代码与柱状图的绘制代码结构相似,主要区别在于series中的type属性设置为'line',表示绘制折线图。这样,通过连接各个数据点,能够清晰地展示股票收盘价的变化趋势 。同时,在配置项中,还可以根据需求设置折线的样式,如线条颜色、粗细、标记点的样式等,以增强图表的可读性和美观性 。
3. 饼图
饼图用于展示数据的占比关系,将一个整体按照不同的类别分割成扇形,每个扇形的面积代表该类别在整体中所占的比例。假设我们有一个数组,记录了某公司不同部门的人数占比,如下所示:
const departmentData = [{ department: '销售部', count: 30 },{ department: '研发部', count: 50 },{ department: '财务部', count: 10 },// 更多部门数据...
];
在 Vue3 组件中绘制饼图的代码如下:
<template><div id="pieChart" style="width: 100%; height: 400px;"></div>
</template><script setup>
import * as echarts from 'echarts';
import { onMounted } from 'vue';const departmentData = [{ department: '销售部', count: 30 },{ department: '研发部', count: 50 },{ department: '财务部', count: 10 },
];onMounted(() => {const myChart = echarts.init(document.getElementById('pieChart'));const option = {title: {text: '各部门人数占比'},tooltip: {trigger: 'item',formatter: '{a} <br/>{b}: {c} ({d}%)'},legend: {orient: 'vertical',left: 'left',data: departmentData.map(item => item.department)},series: [{name: '部门人数',type: 'pie',radius: '50%',data: departmentData.map(item => ({ name: item.department, value: item.count })),emphasis: {itemStyle: {shadowBlur: 10,shadowOffsetX: 0,shadowColor: 'rgba(0, 0, 0, 0.5)'}}}]};myChart.setOption(option);
});
</script>
在这段代码中,同样先初始化 Echarts 实例。配置项option中,series的type属性设置为'pie'表示绘制饼图。radius属性设置饼图的半径,这里设置为'50%'表示半径为容器宽度的一半。data属性通过映射departmentData数组,将部门名称和人数作为饼图的数据项。在tooltip的formatter属性中,定义了提示框的显示格式,包括系列名称、数据项名称、数据值和占比 。通过这些设置,能够清晰地展示各部门人数在总人数中的占比关系。同时,还可以通过设置不同的颜色来区分各个扇形,使饼图更加直观和美观 。例如,可以在series中添加color属性,传入一个颜色数组,为每个部门设置不同的颜色 。
(三)数据请求与动态更新
在实际的数据可视化大屏项目中,数据往往来自后端接口。我们可以使用 Axios 等库来从后端获取数据。Axios 是一个基于 Promise 的 HTTP 客户端,可用于浏览器和 Node.js,它具有简洁的 API 和良好的兼容性,能够方便地进行数据请求和处理。
首先,需要安装 Axios。在项目根目录下的终端中运行以下命令:
npm install axios --save
安装完成后,在需要获取数据的组件中引入 Axios:
import axios from 'axios';
假设后端提供了一个接口/api/sales,用于获取销售额数据。在 Vue3 组件中,可以在onMounted生命周期函数中发送请求获取数据,并更新图表:
<template><div id="barChart" style="width: 100%; height: 400px;"></div>
</template><script setup>
import * as echarts from 'echarts';
import { onMounted } from 'vue';
import axios from 'axios';let myChart;onMounted(() => {myChart = echarts.init(document.getElementById('barChart'));fetchData();
});const fetchData = async () => {try {const response = await axios.get('/api/sales');const salesData = response.data;const option = {title: {text: '各月销售额对比'},tooltip: {trigger: 'axis',axisPointer: {type:'shadow'}},legend: {data: ['销售额']},xAxis: {type: 'category',data: salesData.map(item => item.month)},yAxis: {type: 'value'},series: [{name: '销售额',type: 'bar',data: salesData.map(item => item.sales)}]};myChart.setOption(option);} catch (error) {console.error('获取数据失败:', error);}
};
</script>
在上述代码中,fetchData函数使用axios.get方法发送 GET 请求到/api/sales接口。如果请求成功,将返回的数据用于更新图表的配置项option,然后通过myChart.setOption(option)更新图表。如果请求失败,会在控制台输出错误信息。
为了实现数据的实时更新和图表的动态刷新,可以使用定时器定时调用fetchData函数。例如,每 5 秒更新一次数据:
let timer;onMounted(() => {myChart = echarts.init(document.getElementById('barChart'));fetchData();timer = setInterval(fetchData, 5000);
});// 在组件销毁时清除定时器
onBeforeUnmount(() => {clearInterval(timer);
});
这样,每隔 5 秒就会向后端发送一次请求,获取最新的数据并更新图表,实现数据的实时展示和动态更新 。在实际应用中,还可以根据业务需求,结合 WebSocket 等技术实现更实时、更高效的数据推送和更新 。例如,当后端数据发生变化时,通过 WebSocket 主动推送数据到前端,前端接收到数据后立即更新图表,无需定时轮询,从而减少不必要的请求和资源消耗 。
(四)大屏适配与优化
大屏在不同分辨率下的适配问题是开发过程中需要重点关注的。由于大屏的尺寸和分辨率各不相同,为了确保在各种屏幕上都能呈现出良好的视觉效果,需要采取相应的适配措施。
一种常用的解决方案是使用 CSS 媒体查询。媒体查询允许根据设备的特性(如屏幕宽度、高度、分辨率等)来应用不同的 CSS 样式。例如,当屏幕宽度小于 1920px 时,调整图表的字体大小和边距,以适应较小的屏幕:
@media (max-width: 1920px) {#barChart {font-size: 14px;padding: 10px;}
}
另一种方法是使用 Viewport。Viewport 是网页布局的视口,通过设置 Viewport 的属性,可以控制网页在不同设备上的缩放和布局。在 HTML 的<head>标签中添加以下代码:
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
width=device-width表示视口的宽度等于设备的宽度,initial-scale=1.0表示初始缩放比例为 1,maximum-scale=1.0表示最大缩放比例为 1,user-scalable=no表示禁止用户缩放页面。这样可以确保网页在不同设备上以合适的比例显示 。
在性能优化方面,首先可以按需加载 Echarts 模块。Echarts 体积较大,如果全部引入会增加项目的打包体积和加载时间。可以使用 Echarts 的按需引入功能,只引入项目中实际使用的图表类型和组件。例如,在main.js中:
import * as echarts from 'echarts/core';
import { BarChart } from 'echarts/charts';
import {TitleComponent,TooltipComponent,LegendComponent
} from 'echarts/components';
import { CanvasRenderer } from 'echarts/renderers';echarts.use([TitleComponent,TooltipComponent,LegendComponent,BarChart,CanvasRenderer
]);
上述代码只引入了柱状图相关的组件和渲染器,减少了不必要的代码加载。
优化数据处理也是提高性能的关键。在获取到数据后,尽量减少数据的处理时间。例如,如果数据量较大,可以对数据进行抽样或聚合处理,减少图表渲染的数据量。同时,合理使用缓存机制,对于频繁请求且数据变化不大的数据,可以将其缓存起来,避免重复请求和处理 。在图表更新时,尽量采用局部更新的方式,而不是重新渲染整个图表,以提高更新效率 。比如,当数据发生变化时,只更新图表中变化的数据部分,而不是重新设置整个图表的配置项 。通过这些适配和优化措施,可以提升数据可视化大屏在不同环境下的性能和用户体验 。
五、项目部署与上线
(一)项目打包
完成数据可视化大屏的开发后,我们需要将项目打包,生成可部署的静态文件。如果项目是使用 Vue CLI 创建的,在项目根目录下打开终端,运行以下命令进行打包:
npm run build
执行该命令后,Vue CLI 会对项目进行编译和打包,将所有的源代码、依赖库和静态资源进行处理和合并,最终生成一个dist目录。在这个目录中,包含了打包后的 HTML、CSS、JavaScript 文件以及其他静态资源,这些文件可以直接部署到服务器上 。
如果项目是基于 Vite 搭建的,同样在项目根目录的终端中执行打包命令:
npm run build
Vite 会快速地对项目进行打包优化,利用其原生 ESM 的优势,高效地生成静态文件。在打包过程中,Vite 会对代码进行压缩、Tree - shaking(摇树优化,去除未使用的代码)等操作,以减小文件体积,提高加载性能 。打包完成后,也会在项目根目录下生成dist目录,里面的文件就是可以部署到服务器上的最终版本 。
(二)部署到服务器
将打包后的文件部署到服务器,需要先搭建服务器环境。假设我们使用的是 Linux 服务器,并且以 Nginx 作为 Web 服务器。首先,通过 SSH 连接到服务器。如果还没有安装 Nginx,可以使用以下命令进行安装(以 Ubuntu 系统为例):
sudo apt updatesudo apt install nginx
安装完成后,可以通过以下命令启动 Nginx 服务:
sudo systemctl start nginx
并设置 Nginx 开机自启:
sudo systemctl enable nginx
接下来,将本地打包生成的dist目录中的文件上传到服务器。可以使用工具如 FileZilla(图形化界面的 FTP 客户端),打开 FileZilla,填写服务器的 IP 地址、用户名、密码和端口号(默认为 22),连接到服务器。然后将本地dist目录中的所有文件拖放到服务器的指定目录,比如/var/www/html 。
或者使用命令行工具scp进行文件传输。在本地终端中运行以下命令(假设服务器 IP 为192.168.1.100,用户名是ubuntu,上传到服务器的/var/www/html目录):
scp -r dist/* ubuntu@192.168.1.100:/var/www/html
上传完成后,还需要配置 Nginx,使其能够正确访问上传的文件。打开 Nginx 的配置文件,一般位于/etc/nginx/sites - available/default,在配置文件中添加或修改以下内容:
server {listen 80;server_name your_domain.com; # 替换为你的域名或服务器IPlocation / {root /var/www/html; # 指向上传文件的目录index index.html;try_files $uri $uri/ /index.html; # 处理单页应用的路由}
}
配置完成后,保存文件,并启用该配置:
sudo ln -s /etc/nginx/sites - available/default /etc/nginx/sites - enabled/
最后,重启 Nginx 服务使配置生效:
sudo systemctl restart nginx
此时,在浏览器中输入服务器的 IP 地址或域名,就可以访问部署的数据可视化大屏了。如果在部署过程中遇到问题,比如页面无法访问、资源加载失败等,可以通过查看 Nginx 的日志文件(一般位于/var/log/nginx/目录下)来排查错误原因 。例如,如果是权限问题导致无法访问文件,可以检查文件和目录的权限设置;如果是路由配置问题导致页面 404,可以检查try_files的配置是否正确 。通过这些步骤,我们就完成了数据可视化大屏从开发到部署上线的全过程 。
六、总结与展望
(一)总结项目开发过程
在本次使用 Vue3 + Echarts 开发数据可视化大屏的项目中,我们从项目搭建开始,逐步完成了需求分析、图表组件开发、数据请求与动态更新以及大屏适配与优化等关键环节,最终实现了一个功能完备的数据可视化大屏。
在项目搭建阶段,我们通过 Vite 和 Vue CLI 两种方式创建了 Vue3 项目,并成功安装了 Echarts 库,为后续的开发奠定了基础。在需求分析与设计过程中,我们深入了解了数据可视化大屏的常见需求场景,明确了设计思路和布局方案,这使得我们在开发过程中有了清晰的方向 。
在图表组件开发方面,我们详细学习了如何使用 Echarts 在 Vue3 组件中绘制柱状图、折线图和饼图。通过实际操作,掌握了不同图表类型的配置要点和数据绑定方式,能够根据具体的数据和展示需求,灵活选择和定制图表 。在数据请求与动态更新环节,利用 Axios 从后端获取数据,并通过定时器实现了数据的实时更新和图表的动态刷新,使大屏能够展示最新的数据信息 。
大屏适配与优化是确保项目在不同环境下良好运行的重要步骤。我们采用了 CSS 媒体查询和 Viewport 等技术解决了大屏在不同分辨率下的适配问题,同时通过按需加载 Echarts 模块和优化数据处理等方式,提高了项目的性能 。在项目部署与上线阶段,成功将打包后的文件部署到服务器,使数据可视化大屏能够在网络上被访问 。
在整个开发过程中,我们也遇到了一些问题。例如,在数据请求时,可能会遇到接口返回数据格式不符合预期的情况,这就需要我们在前端对数据进行预处理和转换 。在图表配置过程中,对于一些复杂的图表效果和交互功能,需要花费时间去研究 Echarts 的文档和示例,以找到合适的配置方法 。通过不断地查阅资料、参考示例和调试代码,我们成功解决了这些问题,积累了宝贵的经验 。
(二)展望未来发展方向
随着大数据、人工智能等技术的不断发展,数据可视化技术也将迎来更加广阔的发展空间。未来,数据可视化将更加注重用户体验和交互性,通过引入更多的交互方式,如手势识别、语音控制等,使用户能够更加自然、便捷地与数据进行交互,深入探索数据背后的信息 。
在技术方面,随着硬件性能的提升和图形渲染技术的发展,数据可视化将能够处理和展示更加复杂和大规模的数据。同时,与人工智能的结合也将成为趋势,例如利用机器学习算法自动分析数据、推荐合适的图表类型和可视化方案,或者实现数据的智能预测和预警 。
对于开发者来说,持续学习和掌握新的技术和工具至关重要。不断提升自己在前端开发、数据处理、可视化设计等方面的能力,才能跟上数据可视化技术的发展步伐 。希望本文能够为大家在使用 Vue3 + Echarts 开发数据可视化大屏的道路上提供帮助,也期待大家在这个充满挑战和机遇的领域中不断探索,创造出更加优秀的数据可视化作品 。
相关文章:
Vue3携手Echarts,打造炫酷数据可视化大屏
一、引言 在数字化时代,数据如同企业的血液,蕴含着巨大的价值。而如何将这些抽象的数据转化为直观、易懂的信息,以便更好地支持决策和展示成果,成为了众多开发者和企业关注的焦点。数据可视化大屏应运而生,它以直观、醒…...
Java Web项目部署指南2025
Java Web项目部署指南 适用场景:本地 Windows 开发打包 → 远程 Ubuntu 服务器部署(2025年最佳实践) 适合人群:Java Web初学者、运维新手、需要一站式部署流程的开发者 🚀 部署流程横向流程图 #mermaid-svg-aznXsajzfU…...
STC单片机与淘晶驰串口屏通讯例程之04【密码登录与修改】
大家好,我是『芯知识学堂』的SingleYork,上一讲笔者给大家介绍了STC单片机与淘晶驰串口屏通讯例程之03【单片机程序解析】,今天笔者要跟大家分享的淘晶驰串口屏的密码登录与密码修改功能的实现。 很多项目中,为了保护某些参数不被随意修改,往往需要增加密码来保护,这也是…...
青听音乐 1.0.6| 全网音乐免费听,无损下载,4条音源,界面简洁无广告
一款强大的音乐播放器,内部集成了相当丰富的功能,可以一键搜索任何想要的歌曲或歌手专辑,同时还支持下载和收藏,拥有非常流畅的速度,使用起来没有任何限制!软件自带有大厂的解析音源,运行非常稳…...
FISCO BCOS【初体验笔记】
飞梭区块链搭建初体验笔记 环境部署创建四个节点的飞梭区块链用的VMware17 centos 7.9 区块链是飞梭2.0用的webase-frontJava环境的正确安装Webase-front搭建 智能合约设计一点合约调试笔记 智能合约abi文件转为go文件后端项目配置相关工具linux常用命令(防忘记&…...
56.[前端开发-前端工程化]Day03-webpack构建工具
邂逅Webpack和打包过程 1 认识webpack工具 前端开发的流程 内置模块path path常见的API 在webpack中的使用 认识webpack 脚手架依赖webpack Webpack到底是什么呢 Webpack官方的图片 Vue项目加载的文件有哪些呢? Webpack的使用前提 Webpack的安装 2 webpack基本打包…...
两次解析格式化字符串 + 使用SQLAlchemy的relationship执行任意命令 -- link-shortener b01lersCTF 2025
题目描述: A fast and reliable link shortener service, with a new feature to add private links! 我们走一遍逻辑 注册 app.route("/register", methods[GET, POST]) def register(): """ 用户注册路由,处理用户注册请求ÿ…...
双目测量中的将视差图重投影成三维坐标图
双目测距主要步骤如下: 左右两张图片 → 匹配 → 得到视差图 disp; 使用 cv2.reprojectImageTo3D(disp, Q) 将视差图 重投影 成三维坐标图 → 得到 points_3d 什么是 points_3d? points_3d cv2.reprojectImageTo3D(disp, Q)points_3d.shap…...
WebAssembly(Wasm):现代Web开发的超级加速器
在当今的Web开发领域,性能和效率是开发者们永恒的追求目标。随着Web应用的复杂度不断增加,传统的JavaScript在某些场景下已经难以满足高性能计算和复杂逻辑处理的需求。此时,WebAssembly(Wasm)作为一种新兴的Web技术&a…...
学习黑客Nmap 命令法诀
筑基期第二重 — Nmap 命令法诀 修炼目标 这一重我们要把上一阶段学到的“神识探查原理”化成 实战招式:掌握日常最常用的 Nmap 命令,并能随心组合。每条命令都配上“修仙比喻”,让你边笑边记。 1. 基础法诀速查表(凡修版…...
基于思考过程评价的心理问题咨询对话记性评估
基于思考过程评价的心理问题咨询对话记性评估 摘要: 在心理问题咨询的对话场景中,传统记性评价多局限于对话结果的相似度计算,无法全面捕捉来访者及咨询师在对话过程中的思维动态。本文提出一种聚焦此对话场景的记性评价新方法,将思考过程纳入评估范畴。详细阐释其基于认知…...
SQL数据库操作大全:从基础到高级查询技巧
大家好,欢迎来到程序视点!我是你们的老朋友.小二! SQL数据库操作核心语法精要 数据库基础操作 创建/删除数据库:CREATE DATABASE / DROP DATABASE 备份SQL Server:使用sp_addumpdevice和BACKUP DATABASE命令 数据库…...
基于MATLAB图像中的圆形目标识别和标记
一、前言 在数字图像处理中,有些图像类别可以使用圆形度进行区分。圆度有时被称为圆形度,其定义为:圆度 4πA / P,其中A是面积,P是周长。这个公式的来源是,对于圆来说,这个值等于1,…...
android-ndk开发(4): linux开发机有线连接android设备
android-ndk开发(4): linux开发机有线连接android设备 2025/05/05 1. 概要 linux 系统, 例如最常见的 ubuntu, 在通过 USB 线把 android 设备连接到开发机上时, 仅仅是 ”物理上的连接”。 这时候 adb 是无法识别到 android 设备的。 需要…...
相机biaoding
需要先安装linux客户端(海康机器人官网),sudo dpkg -i MVS-2.1.2_x86_64_20221208.deb cd /opt/MVS/bin/ 再./MVS.sh运行,客户端启动。 打开海康相机客户端 cd /opt/MVS/bin export LD_LIBRARY_PATH/opt/MVS/bin/:$LD_LIBRARY_PATH ./MVS …...
linux 中inotify与inode的关系是什么?
在 Linux 系统中,inotify 和 inode 是两个密切相关但功能不同的概念,它们共同构成了文件系统的核心机制。以下是它们的关系解析: 一、基本概念 1. inode(索引节点) 定义:inode 是 Linux 文件系统中存储文…...
Paramiko 核心类关系图解析
类图关键说明 SSHClient 核心类 用户主要交互入口,聚合 Transport 对象依赖策略类处理主机密钥验证(AutoAddPolicy/RejectPolicy) Transport 引擎 管理底层连接生命周期组合 AuthHandler 处理认证逻辑组合 KexBase 实现密钥交换可创建多个 C…...
LeetCode算法题 (反转链表)Day17!!!C/C++
https://leetcode.cn/problems/reverse-linked-list/description/ 一、题目分析 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。今天这道题目非常的言简意赅,就是给定一个链表将其反转后返回反转后的头节点。 二、示例分析 输…...
3.5/Q1,GBD数据库最新一区文章解读
文章题目:Global burden of low vision and blindness due to age-related macular degeneration from 1990 to 2021 and projections for 2050 DOI:10.1186/s12889-024-21047-x 中文标题:1990年至2021年因年龄相关性黄斑变性导致的低视力和失…...
【AI论文】像素修补师(PixelHacker):具有结构和语义一致性的图像修复(Image Inpainting)
摘要:图像修复是图像编辑和图像生成之间的一个基础研究领域。 最近最先进的方法(SOTA)探索了新的注意力机制、轻量级架构和上下文感知建模,展示了令人印象深刻的性能。 然而,他们经常在复杂的结构(如纹理、…...
卡洛诗中式西餐,打破“高价即高端”认知
在餐饮消费从“功能满足”向“意义消费”跃迁的今天,Z世代对饮食的期待早已超越“吃饱”的生理需求。萨莉亚原团队成员出来升级孵化的新概念西餐卡洛诗作为中式西餐赛道的破局者,通过场景重构、产品升维与情感绑定,将西餐体验转化为情绪的载体…...
Sui 上线两周年,掀起增长「海啸」
两年前的 5 月 3 日,Sui 的主网正式发布,将在开发网和测试网上验证过的下一代技术承诺变为现实。这一新兴网络旨在优化现有区块链技术,结合高性能计算环境与安全性、可验证性及韧性。 随着 Sui 迎来两周年,这股浪潮已成长为「海啸…...
手写 Vue 源码 === reactive 方法
目录 1. 响应式系统概述 2. Proxy与Reflect的应用 3. 响应式对象的创建 4. WeakMap的使用 主要特点 WeakMap 与 Map 的区别 应用场景 5. 依赖收集与触发更新 6. 响应式标记 7. 性能优化 8. 与Vue2的对比 9. 实际应用示例 10. 总结 Vue3的响应式系统是其核心特性…...
第一章-Rust入门
Rust 简介 Rust 是一种强类型的静态编程语言,它可以编写更快、更可靠的软件,兼备高层次的易用性与低层次的控制力。 Rust 具有以下几个特点: 内存安全,且不牺牲性能“编译通过就能正常运行”令人愉悦的语法和强大的语言特性优秀…...
【AI入门】Cherry入门1:Cherry Studio的安装及配置
前言 尝试了Trae配置MCP,测试了n8n设置MCP工作流,但感觉好累啊,CherryStudio横空出世,开着中文界面,就倍感亲切,看着大家操作很丝滑的样子,咱也鸟枪换炮了,哇哈哈😄&…...
雷电模拟器-超好用的Windows安卓模拟器
一、雷电模拟器介绍 雷电模拟器是一款功能强大的软件,它能够在电脑上模拟出安卓手机系统,让你可以在电脑上运行各类手机应用及游戏。其采用虚拟安卓手机操作界面,为玩家带来了独特的体验。 (一)强大的兼容性 雷电模拟…...
数据集-目标检测系列- 蜥蜴 检测数据集 lizard >> DataBall
数据集-目标检测系列- 蜥蜴 检测数据集 lizard >> DataBall DataBall 助力快速掌握数据集的信息和使用方式。 贵在坚持! * 相关项目 1)数据集可视化项目:gitcode: https://gitcode.com/DataBall/DataBall-detections-100s/overview…...
Kubernetes控制平面组件:Controller Manager 之 NamespaceController 全方位讲解
云原生学习路线导航页(持续更新中) kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计(一)Kubernetes架构原则和对象设计(二)Kubernetes架构原则和对象设计(三)Kubernetes控…...
数据结构小扫尾——栈
数据结构小扫尾——栈 jarringslee 文章目录 数据结构小扫尾——栈栈本质上是一种特殊的线性表。(一)线性表的定义(二)线性表的运算 什么是栈。(一)栈的定义(二)栈的分类࿰…...
策略模式(Strategy Pattern)
🧠 策略模式(Strategy Pattern) 策略模式是一种行为型设计模式,它允许定义一系列的算法或行为,然后将每个算法封装到一个类中,使得它们可以互换。策略模式让算法独立于使用它的客户端进行变化,…...
Qwen2_5-Omni-3B:支持视频、音频、图像和文本的全能AI,可在本地运行
Qwen2.5-Omni-3B是阿里云推出的全能AI模型。它能同时处理视频、音频、图像和文本。只有3B参数,却能在本地运行强大的多模态功能。 近日,已经在Hugging Face上发布。它是小型多模态AI系统的重要突破。 特点 Qwen2.5-Omni-3B与普通语言模型不同。它是真正的多模态系统,可以同…...
GZIPOutputStream 类详解
GZIPOutputStream 类详解 GZIPOutputStream 是 Java 中用于压缩数据为 GZIP 格式的输出流类,属于 java.util.zip 包。它是 DeflaterOutputStream 的子类,专门生成符合 GZIP 格式(.gz 文件)的压缩数据。 1. 核心功能 将数据压缩为…...
sudo useradd -r -s /bin/false -U -m -d /usr/share/ollama ollama解释这行代码的含义
这行命令用于为 OLLAMA 服务创建专用的系统用户,具体参数解析如下: sudo 以管理员权限执行命令,确保有足够权限创建系统用户。 useradd Linux 用户创建命令,用于在系统中新增用户。 -r 创建系统账户(非登录用户&…...
自注意力(Self-Attention)和位置编码
自注意力 给定序列 x 1 , … , x n \mathbf{x}_1, \ldots, \mathbf{x}_n x1,…,xn, ∀ x i ∈ R d \forall \mathbf{x}_i \in \mathbb{R}^d ∀xi∈Rd 自注意力池化层将 x i \mathbf{x}_i xi 当做key, value, query来对序列抽取特征得到 y 1 , … , y n \mathbf{y}…...
Linux压缩和解压类
一、gzip/gunzip 压缩 1、基本语法 gzip 文件 (功能描述:压缩文件,只能将文件压缩为*.gz文件) gunzip 文件.gz (功能描述:解压缩文件命令) 2、经验技巧 (1&#…...
Kubernetes控制平面组件:Controller Manager详解
云原生学习路线导航页(持续更新中) kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计(一)Kubernetes架构原则和对象设计(二)Kubernetes架构原则和对象设计(三)Kubernetes控…...
使用 JavaScript 实现数据导出为 Excel 和 CSV 文件
在 Web 开发中,经常会遇到需要将数据导出为文件的需求,例如将数据导出为 Excel 或 CSV 文件。今天,我们就来探讨如何使用 JavaScript 实现这一功能。 一、实现思路 我们通过 HTML 创建一个按钮,点击按钮时,触发 Java…...
设一个测试情境,新用户注册后显示的名字不完整,测试思路是怎么样的?
问题分析:新用户注册后显示名称不完整 典型表现:用户注册时输入"张三丰",系统仅显示"张"或"张三"等不完整信息 一、测试排查思维导图 二、详细测试方案 1. 前端测试 输入验证: 测试不同长度名称(1字符/10字符/50字符) 测试含空格名称(如…...
NHANES指标推荐:ZJU index
文章题目:Association between ZJU index and gallstones in US adult: a cross-sectional study of NHANES 2017-2020 DOI:10.1186/s12876-024-03553-9 中文标题:ZJU指数与美国成年人胆结石的关联:2017-2020年NHANES横断面研究 发…...
数据存储——高级存储之PV和PVC
一、概述 PV ( Persistent Volume )是持久化卷的意思,是对底层的共享存储的一种抽象。一般情况下 PV 由 kubernetes 管理员进行创建和配置,它与底层具体的共享存储技术有关,并通过插件完成与共享存储的对接。 PVC &a…...
Astro Canvas 数据中心→设备一览大屏操作指南
✅ Astro Canvas 数据中心→设备一览大屏操作指南 📌 目标 通过API连接器 → 转换器 → 数据源 → 数据集 → Astro大屏设计,展示从 IoTDA 获取的设备影子数据,并在 Astro 大屏中以设备一览形式可视化展示(如设备ID、温度、湿度、烟雾浓度等状态)。 🔁 一、整体流程概…...
Cisco NDO - Nexus Dashboard Orchestrator
目录 一、什么是 Cisco NDO? 二、ND vs. NDO? 三、NDO vs. NDFC 四、NDO 用例: 一、什么是 Cisco NDO? Nexus Dashboard Orchestrator(NDO)可通过单一界面,实现跨多个数据中心的一致性网络与策略编排、可扩展性与灾难恢复等。 当在本地、多种私有云或公有云中同时运…...
Android 控件CalendarView、TextClock用法
一 UI代码 <?xml version="1.0" encoding="utf-8"?> <androidx.coordinatorlayout.widget.CoordinatorLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto…...
Socket 编程 TCP
Socket 编程 TCP TCP socket API 详解V1 - Echo ServerV2 - Echo Server 多进程版本V3 - Echo Server 多线程版本V4 - Echo Server 线程池版本多线程远程命令执行v5 引入线程池版本翻译 TCP socket API 详解 socket(): socket()打开一个网络通讯端口,如果成功的话,就像 open…...
信息系统项目管理师-软考高级(软考高项)2025最新(七)
个人笔记整理---仅供参考 项目立项管理 7.1项目建议与立项申请 项目建议书内容必背! 7.2项目可行性研究 项目可行性研究必考 7.3项目的评估与决策...
Qt中的UIC
Qt中的UIC(User Interface Compiler, 用户界面编译器):读取由Qt Widgets Designer生成的XML格式(.ui)文件并创建相应的C头文件或Python源文件。如将mainwindow.ui文件生成ui_mainwindow.h。 uic.exe位置在6.8.0\msvc2019_64\bin ,其支持的输入参数如下所…...
【MATLAB例程】基于RSSI原理的Wi-Fi定位程序,N个锚点(数量可自适应)、三维空间,轨迹使用UKF进行滤波,附代码下载链接
本文所述程序实现了一种基于信号强度(RSSI)的Wi-Fi定位算法,并结合无迹卡尔曼滤波(UKF)对动态目标轨迹进行滤波优化。代码支持自适应锚点数量,适用于三维空间定位,可模拟目标运动、信号噪声及非…...
vulkanscenegraph显示倾斜模型(6.5)-vsg::DatabasePager
前言 上章深入分析了帧循环过程中,多线程下的记录与提交机制。本章将分析vsg::DatabasePager在更新场景图过程中的作用,进一步揭露vsg中场景图管理机制,并通过分析代码,详细解释vsg中场景图管理机制中的节点添加、节点删除、节点加…...
利用 Python pyttsx3实现文字转语音(TTS)
今天,我想跟大家分享如何利用 Python 编程语言,来实现文字转换为语音的功能,也就是我们常说的 Text-to-Speech (TTS) 技术。 你可能会好奇,为什么学习这个?想象一下,如果你想把书本、文章、杂志的内容转换…...
【PostgreSQL数据分析实战:从数据清洗到可视化全流程】5.1 描述性统计分析(均值/方差/分位数计算)
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 5.1 描述性统计分析:均值、方差与分位数计算实战5.1.1 数据准备与分析目标数据集介绍分析目标 5.1.2 均值计算:从整体到分组分析总体均值计算加权均值…...