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

news2025/1/18 11:57:16

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

在开始之前就不阐述用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.coloradmin.cn/o/1622690.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

kafka大数据采集技术实验(未完待续)

Kafka环境搭建 下载地址&#xff1a;https://link.zhihu.com/?targethttps%3A//kafka.apache.org/downloads解压启动zookeeper bin/zookeeper-server-start.sh config/zookeeper.properties需要注意的是 : " c o n f i g / z o o k e e p e r . p r o p e r t i e s &q…

探秘三维地形瓦片服务:流畅展现全球地貌的秘密揭秘

想象一下&#xff0c;如果我们能将全球地形一次性清晰地呈现在我们的电脑屏幕上&#xff0c;那将是怎样的场景&#xff1f;即使拥有比大多数人性能更强悍的电脑&#xff0c;也会忍不住说一句&#xff1a;“卧槽&#xff0c;卡死了”&#xff01;那么&#xff0c;要在电脑中流畅…

linux驱动-CCF-0基础

1. 时钟设备 晶振&#xff1a;提供基础时钟源的&#xff08;可分为有源晶振、无源晶振两种&#xff09;&#xff1b; PLL: 用于倍频的锁相环&#xff1b; mux: 用于多路时钟源选择&#xff1b; Divider: 用于分频的&#xff1b; gate: 用于时钟使能的与门电路等 注册函数…

聚焦数字文创产业!国际数字影像产业园落地成都金牛区

聚焦数字文创产业&#xff01;又一成都文创产业园落地成都金牛区。在数字文创浪潮中&#xff0c;成都金牛区凭借其前瞻性的视野和战略性的布局&#xff0c;成功吸引了又一成都文创产业园“国际数字影像产业园”的落地&#xff0c;为区域经济的增长和文化产业的升级注入了新的活…

C语言实现二叉树

二叉树 1、完全二叉树的递归创建 #define N 6 typedef char data_type; typedef struct bitree{ int n; data_type data; struct bitree *lchild; struct bitree *rchild; }bitree_t; //创建二叉树 bitree_t *create_bitree(int n){ bitree_t *rootNULL; root(bitree_t*)mallo…

提示词优化的自动化探索:Automated Prompt Engineering

编者按&#xff1a; 作者在尝试教授母亲使用 LLM 完成工作任务时&#xff0c;意识到提示词的优化并不像想象中简单。提示词的自动优化对于经验并不丰富的提示词撰写者很有价值&#xff0c;他们没有足够的经验去调整和改进提供给模型的提示词&#xff0c;这引发了对自动化提示词…

node和go的列表转树形, 执行速度测试对比

保证数据一致性&#xff0c;先生成4000条json数据到本地&#xff0c;然后分别读取文本执行处理 node代码 node是用midway框架 forNum1:number 0forNum2:number 0//执行测试async index(){// 生成菜单列表// const menuList await this.generateMenuList([], 4000);const men…

C++ | Leetcode C++题解之第47题全排列II

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<vector<int>> permuteUnique(vector<int>& nums) {dfs(nums, 0);return res;} private:vector<vector<int>> res;void dfs(vector<int> nums, int x) {if (x num…

js的算法-插入排序(直接插入排序)

插入排序 插入排序是一种简单直接的排序方法&#xff0c;其基本思想是每次将一个待排序的记录按其关键字大小插入到前面已经排好序的子序列&#xff0c;直到全部记录插入完成。由插入排序的思想可以引申出三个重要的排序算法&#xff1a; 直接插入排序、折半插入排序和希尔排序…

【书生浦语第二期实战营学习作业笔记(二)】

书生浦语第二期实战营学习作业&笔记(二) 操作文档&#xff1a;https://github.com/InternLM/Tutorial/blob/camp2/helloworld/hello_world.md 基础作业 &#xff1a; 使用 InternLM2-Chat-1.8B 模型生成 300 字的小故事&#xff1a; 八戒部署&#xff08;笔记&#xff0…

【Linux系统编程】第九弹---权限管理操作(下)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、目录权限 2、粘滞位 总结 1、目录权限 首先提出一个问题&#xff0c;删除一个文件需要什么权限呢&#xff1f;&#xff1f…

竞赛 基于大数据的社交平台数据爬虫舆情分析可视化系统

文章目录 0 前言1 课题背景2 实现效果**实现功能****可视化统计****web模块界面展示**3 LDA模型 4 情感分析方法**预处理**特征提取特征选择分类器选择实验 5 部分核心代码6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于大数据…

以算力深挖数据应用价值!和鲸助力北京市市场监管数据应用创新竞赛圆满收官!

历时三个多月&#xff0c;北京市市场监管数据应用创新竞赛&#xff08;以下简称“竞赛”&#xff09;圆满收官。本次竞赛旨在挖掘数据的潜在价值&#xff0c;以优化营商环境、智慧监管、高质量发展为核心议题&#xff0c;鼓励参赛者深入结合监管数据&#xff0c;开展精准而深入…

正式退役!波士顿动力Atlas宣布终止研发!

文 | BFT机器人 4月16日&#xff0c;波士顿动力在YouTube上发布了一段Atlas的最新视频&#xff0c;并宣布了Atlas终止研发的消息。 在最后的告别片段中&#xff0c;它依旧完成了奔跑、跳跃、后空翻等动作&#xff0c;甚至连摔倒在地的动作也还是熟悉的滑稽样。Atlas的退役&…

视频美颜SDK原理与实践:从算法到应用

当下&#xff0c;从社交媒体到视频通话&#xff0c;人们越来越依赖于视频美颜功能来提升自己的形象。而视频美颜SDK作为支撑这一技术的重要工具&#xff0c;其原理和实践至关重要。 一、什么是视频美颜SDK&#xff1f; 视频美颜SDK是一种软件开发工具包&#xff0c;用于集成到…

微软发布Phi-3,手机上就能跑,是时候聊聊小型语言模型了|TodayAI

微软公司最近宣布推出了其最新开发的最新AI语言模型&#xff0c;名为Phi-3。这款小型语言模型&#xff08;SLMs&#xff09;在市场上以其卓越的性能和成本效率获得关注&#xff0c;尤其在语言处理、推理、编程及数学基准测试方面表现出色&#xff0c;超越了同等规模甚至更大规模…

Matlab|含多微网租赁共享储能的配电网博弈优化调度

目录 主要内容 结果一览 下载链接 主要内容 首先利用NSGA-II算法求解三个微网的最优充放电策略并做为已知条件代入到双层调度模型中&#xff1b;然后求解双层模型&#xff0c;上层为主动配电网调度模型&#xff0c;下层包括共享储能优化模型和多微网优化调度模型&a…

SPSS软件安装包(亲测可用)

目录 一、软件简介 二、软件下载 一、软件简介 IBM SPSS Statistics是一款功能强大的统计分析软件&#xff0c;广泛应用于各种学术研究、商业决策和政府机构等领域。其强大的数据分析和可视化功能使得用户能够从数据中发现模式、预测趋势&#xff0c;并做出有根据的决策。 SPS…

《系统架构设计师教程(第2版)》第10章-软件架构的演化和维护-02-面向对象软件架构演化过程

文章目录 1. 对象演化1.1 添加一个新对象&#xff08;AO&#xff09;1.2 删除一个对象&#xff08;DO&#xff09; 2. 消息演化2.1 消息2.2 消息演化的操作2.2.1 Add Message(AM)2.2.2 Delete Message (DM)2.2.3 Swap Message Order(SMO)2.2.4 Overturn Message(OM)2.2.5 Chang…

【漏洞复现】泛微e-office系统ajax.php接口存在任意文件上传漏洞

漏洞描述 泛微e-office系统是标准、易用、快速部署上线的专业协同OA软件。泛微 E-Office 9.5版本存在代码问题漏洞,泛微e-office系统ajax.php接口存在任意文件上传漏洞 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公共秩序,尊重社会公德,…