vue3+Echarts+Nodejs实现动态数据可视化

最近在做毕设的后台管理系统,刚好需要做数据动态可视化的功能,就来记录一下具体的实现方式吧!

在开始之前就不阐述用vue创建项目的具体步骤了,主要详细讲解一下vue3、echarts和nodejs三者之间是如何实现数据的动态显示的,我这边项目是使用的vite创建的。

一、安装echarts

在vscode的终端利用npm进行以下命令

npm install echarts

二、引用、使用echarts

(1)在需要使用的组件中引入echarts

import * as echarts from 'echarts'

(2)接下来就是如何使用该组件了,这里通过一个案例来展示

<template><div class="food-sale"><h4>美食占比情况</h4><div class="food-cahrt" ref="foodChart"></div></div>
</template><script setup>
import {ref,onMounted,onBeforeMount} from 'vue'
import * as echarts from 'echarts'
import { fontSize } from '@/utils/fontSize'
const foodChart=ref(null)  
let myfoodChart=null
//定义数据变量
const foodData=ref([{name:'',value:''}
])
const initChart=()=>{myfoodChart=echarts.init(foodChart.value)const option={tooltip: {trigger: 'item',backgroundColor:'rgba(62, 177, 52, .6)',textStyle:{color:'#cfd',}},legend: {orient: 'vertical',//设置图例的方向right: '5%',top: "center",itemWidth: 10, // 图标宽设置itemHeight: 10, // 图标长设置itemGap:20,//设置图例的间距textStyle: {fontSize: fontSize(35),fontFamily: 'sy-m',}},series: [{// name: '实时设备',type: 'pie',radius: ['40%', '60%'],avoidLabelOverlap: false,label: {show: false,position: 'center'},emphasis: {label: {show: true,// fontSize:12,fontSize:fontSize(30),fontWeight:600,lineHeight: 18,color:'rgb(122, 170, 236)',formatter: '{b}\n{d}%',rich: {    // 显示出的内容,设置样式b: {fontSize: fontSize(16),color:'rgb(66, 127, 212)',align: 'center'},d: {fontSize: fontSize(20),padding: 0,}}}},labelLine: {show: false},data:foodData.value}]}myfoodChart.setOption(option)//设置饼图自动转动let count = 0;setInterval(() => {myfoodChart.dispatchAction({type: 'downplay',seriesIndex: 0,dataIndex: count});count++;if (count === 5) {count = 0;}myfoodChart.dispatchAction({type: 'highlight',seriesIndex: 0,dataIndex: count});}, 2000);
}
// 图表自适应
const resizeChart = () => {myfoodChart.resize()
}
onMounted(() => {initChart()window.addEventListener('resize', resizeChart)
})
onBeforeMount(()=>{window.removeEventListener('resize', resizeChart)
})
</script><style lang='less' scoped>
.food-sale{width: 43%;height: 16.5vw;background: #fff;margin-top: 1vw;border-radius:0.5vw;h4{font-size: 16px;padding-left: 0.8vw;padding-top: 0.5vw;}.food-cahrt{width: 80%;height: 17vw;}
} 
</style>

三、利用nodejs模拟数据

上述是前端需要实现的页面部分,接下来是如何利用nodejs来模拟页面所需的后端数据

(1)在cmd上输入以下命令,注意此命令只可安装一次

npm install express-generator -g

(2)然后进入你自己创建的项目目录输入下面的命令,此步骤是在cmd中操作

express --view=ejs server

(3)打开服务文件夹

cd server

(4)在server文件中的routes中会有一个index.js文件,在此文件中进行模拟数据

router.get("/api/home/food",function(req, res, next){return res.json({"code":200,"data":{list:[{name:'炒米粉',value:10840},{name:'拉条子拌面',value:9840},{name:'大盘鸡',value:8560},{name:'烤全羊',value:8060},{name:'手抓饭',value:7060},]}});
})

四、获取数据

(1)在src文件夹下新建一个名为api的文件夹,里面新建一个名为homeData.js的文件获取数据

import { get, post} from "@/utils/http.js";
//获取用户信息数据
export const getFoodList = (params) => get('/api/home/food',params);

(2)在上述需要用到该数据的组件中引入此文件

import {getFoodList} from '@/api/homeData'

(3)获取数据

获取图表数据
const getChartData=()=>{return new Promise((resolve, reject) =>{getFoodList().then(res=>{if(res.code===200&&res.data){// console.log(res,'shuju')foodData.value=[]res.data.forEach((item,index)=>{foodData.value[index]={name:item.name,value:item.value}})// console.log(chartData.xAxis,'xshuju')}// console.log(res.data,'shuju')resolve(res.data)}).catch(error=>{reject(error)})})
}

(4)挂载数据

onMounted(async() => {await getChartData()
})

五、结果展示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/641182.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在 VSCode 中运行 C#

文章目录 1.为何选择VSCode而不是VS2.操作步骤2.1 安装.NET2.2 安装扩展插件2.2.1 C#2.2.2 Code Runner 3.新建工程HelloCsharp 1.为何选择VSCode而不是VS VS实在是太“重”了&#xff0c;如果只是写一些简单控制台程序进行调试&#xff0c;则完全没必要 2.操作步骤 2.1 安装…

数据赋能(65)——要求:岗位与能力要求关系

“要求&#xff1a;岗位与能力要求关系”是作为标准的参考内容编写的。 岗位与能力要求关系存在多种。岗位与能力要求主要关系如下图所示 所有岗位所需要一定的基础能力或者称为胜任能力&#xff0c;主要基础能力包括&#xff1a;数据思维能力、协调与沟通能、持续学习能力、创…

Redis入门到通关之Redis数据结构-Hash篇

文章目录 ☃️ 概述☃️底层实现☃️源码☃️其他 欢迎来到 请回答1024 的博客 &#x1f353;&#x1f353;&#x1f353;欢迎来到 请回答1024的博客 关于博主&#xff1a; 我是 请回答1024&#xff0c;一个追求数学与计算的边界、时间与空间的平衡&#xff0c;0与1的延伸的后…

【Redis】set 数据类型

文章目录 常用命令sadd & smemberssismember & scardspopsmove & srem 多个集合间的交互命令交集 & sinter & sinterstore并集 & sunion & sunionstore差集 & sdiff & sdiffstore 内部编码 集合类型也是保存多个字符串类型的元素的&#x…

文旅元宇宙平台|景区导览|数字人导游|智能导览系统

随着科技的飞速发展&#xff0c;人工智能、虚拟数字人以及元宇宙等前沿技术逐渐走进人们的日常生活&#xff0c;为各行各业带来了前所未有的变革。在这个数字化浪潮中&#xff0c;道可云文旅元宇宙平台应运而生&#xff0c;以其独特的技术应用和创新的商业模式&#xff0c;引领…

前沿论文 | LLM推理性能优化最佳实践

原文&#xff1a;安全验证 - 知乎​ 来源 题目&#xff1a;LLM Inference Performance Engineering: Best Practices 地址&#xff1a;https://www.databricks.com/blog/llm-inference-performance-engineering-best-practices 在这篇博文中&#xff0c;MosaicML工程团队分析了…

node.js-包

包的概念 包&#xff1a;将模块&#xff0c;代码&#xff0c;其他资料聚合成的一个文件夹 包分类&#xff1a; 1.项目包&#xff1a;主要用于编写项目和业务逻辑的文件夹 2.软件包&#xff1a;封装工具和方法供开发者使用&#xff08;一般使用npm管理&#xff09; 1&#…

编译支持播放H265的cef控件

接着在上次编译的基础上增加h265支持编译支持视频播放的cef控件&#xff08;h264&#xff09; 测试页面&#xff0c;直接使用cef_enhancement,里边带着的那个html即可&#xff0c;h265视频去这个网站下载elecard,我修改的这个版本参考了里边的修改方式&#xff0c;不过我的这个…

BI建设案例:FineBI大数据分析平台助力工程机械行业降本增效

工程机械行业作为国民经济的重要支柱&#xff0c;产品多样化、应用广泛&#xff0c;市场集中度高。其上游涉及原材料和核心零部件&#xff0c;下游则与房地产、基建工程和采矿等行业紧密相连。 如今&#xff0c;中国已崛起为全球工程机械制造大国&#xff0c;各类机械产品产量…

物联网通信中NB-IoT、Cat.1、Cat.M该如何选择?

物联网通信中NB-IoT、Cat.1、Cat.M该如何选择? 参考链接:物联网通信中NB-IoT、Cat.1、Cat.M该如何选择?​​ 在我们准备设计用于大规模联网的物联网设备时,选择到适合的LTE IoT标准将是我们遇到的难点。这是我们一开始设计产品方案就需要解决的一个问题,其决定我们设备需…

力扣HOT100 - 101. 对称二叉树

解题思路&#xff1a; class Solution {public boolean isSymmetric(TreeNode root) {if(root null) return true;return recur(root.left, root.right);}boolean recur(TreeNode L, TreeNode R) {if (L null && R null) return true;if (L null || R null || L.…

IDEA代码重构

重构 重构的目的&#xff1a; 提高代码的可读性、可维护性、可扩展性和性能。 重命名元素 重命名类 当我们进行重命名操作的时候可以看到第六行存在一个R(rename)&#xff0c;点击后就会弹出所偶有引用&#xff0c;这样可以避免我们在修改后存在遗漏引用处未修改。 我们可以通过…