当前位置: 首页 > news >正文

vue 把echarts封装成一个方法 并且从后端读取数据 +转换数据格式 =动态echarts 联动echarts表

1.把echarts 在 methods 封装成一个方法mounted 在中调用

折线图 和柱状图

mounted调用下边两个方法

  mounted(){//最早获取DOM元素的生命周期函数 挂载完毕console.log('mounted-id' , document.getElementById('charts'))this.line()this.pie()},

methods里边的方法

line() {// 基于准备好的dom,初始化echarts实例var myChart = echarts.init(document.getElementById('charts'));// 绘制图表myChart.setOption({tooltip: {//提示框组件trigger: 'axis',},legend: {},toolbox: {feature: {// dataZoom: {//   yAxisIndex: 'none'// },// restore: {},saveAsImage: {}}},xAxis: {//x轴数据data: [120, 200, 150, 80, 70, 110, 130],},yAxis: {//y轴会自动创建数据},series: [//图表内容{name: '销售额',type: 'line',data: [120, 200, 150, 80, 70, 110, 130],,smooth: true,//是否平滑曲线显示},{name: '销售量',type: 'bar',data: [120, 200, 150, 80, 70, 110, 130],}]});},

饼图

 pie(){let myChart = echarts.init(document.getElementById('pie'));myChart.setOption({tooltip: {trigger: 'item'},legend: {top: '5%',left: 'center'},series: [{name: 'Access From',type: 'pie',radius: ['40%', '70%'],avoidLabelOverlap: false,itemStyle: {borderRadius: 10,borderColor: '#fff',borderWidth: 2},label: {show: false,position: 'center'},emphasis: {label: {show: true,fontSize: 40,fontWeight: 'bold'}},labelLine: {show: false},data: [{ value: 1048, name: 'Search Engine' },{ value: 735, name: 'Direct' },{ value: 580, name: 'Email' },{ value: 484, name: 'Union Ads' },{ value: 300, name: 'Video Ads' }]}]});},

注意的地方:created调用location事件时获取dom对象,是不行的,因为在created钩子函数中是获取不到dom的,我们可以使用mounted钩子替换成created钩子

从后端取数据

发现后端给我们返回的不是echarts的格式 ,这个时候我们做一个操作
在这里插入图片描述
下一步操作 遍历内容 数据格式转换
在这里插入图片描述

最后一步 在echarts柱状图或者折线图里边去显示这些数据

    methods:{// -----获取图标动态数据async format(){let res = await this.$api.format()console.log('获取图标动态数据---',res.data);console.log(res.data.result.data.sale_money);//[{}{}]// 折线图 柱状图数据格式:[xx,xx,xx]// 获取x轴的数据名称let arr = res.data.result.data.sale_money;//拿到数据let arrx = []let total = []let money = []arr.forEach((ele)=>{//ele是取每一项arrx.push(ele.name)total.push(ele.num)money.push(ele.total_amount)})console.log(arrx);console.log(total);console.log(money);this.line(arrx,money,total)},//绘制图表--折线------------------line(arrx,money,total) {// 基于准备好的dom,初始化echarts实例var myChart = echarts.init(document.getElementById('charts'));// 绘制图表myChart.setOption({tooltip: {//提示框组件trigger: 'axis',},legend: {},toolbox: {feature: {// dataZoom: {//   yAxisIndex: 'none'// },// restore: {},saveAsImage: {}}},xAxis: {//x轴数据data:arrx,},yAxis: {//y轴会自动创建数据},series: [//图表内容{name: '销售额',type: 'line',data:money,smooth: true,//是否平滑曲线显示},{name: '销售量',type: 'bar',data: total,}]});},},

饼状图取数据 发现

在这里插入图片描述
数据循环遍历+数据格式转换

    let pieData = []arr.forEach((ele)=>{//ele是取每一项//饼图--对象数据let obj={}obj.name = ele.name;obj.value = ele.total_amount;pieData.push(obj)//[{name:,value:},{},{}]})console.log('饼图',pieData);

饼图最后一步 在echarts柱状图或者折线图里边去显示这些数据

   //绘制饼图pie(pieData) {var myChart = echarts.init(document.getElementById('pie'));var option;option = {tooltip: {trigger: 'item',formatter:'{a}<br/>{b}:{d}%'},legend: {orient: 'vertical',left: 'left'},series: [{name: '产品销售额',type: 'pie',radius: '50%',data:pieData,// data: [//[{},{}]//   { value: 1048, name: '审议' },//   { value: 735, name: '淘宝' },//   { value: 580, name: '京东' }// ],emphasis: {//高亮配置itemStyle: {shadowBlur: 10,shadowOffsetX: 0,shadowColor: 'rgba(0, 0, 0, 0.5)'}}}]};option && myChart.setOption(option);},

在这里插入图片描述
全部代码

<template><div class="home"><!--1.  顶部区域布局---------- --><div class="header"><div class="item">总销售额<div class='num'>{{ totalData.saleTotal | num}}</div><div class="bottom">今日销售额:{{totalData.sale | num}}</div></div><div class="item">总访问量<div class='num'>{{ totalData.viewsTotal | num}}</div><div class="bottom">今日访问量:{{totalData.views | num}}</div></div><div class="item">总收藏量<div class='num'>{{ totalData.collectTotal | num  }}</div><div class="bottom">今日销售额:{{ totalData.collectTotal | num}}</div></div><div class="item">总支付量<div class='num'>{{totalData.payTotal | num }}</div><div class="bottom">今日支付量:{{ totalData.pay | num}}</div></div></div><!--2. 访问数据统计 -----------------><div class="content"><div class="time-info" id='box13'><div class="title">月销售额</div><div id="charts" style="width: 100%; height: 300px"></div></div><div class="area" id="box1"><div class="title">产品销售比例</div><div id="pie" style="width: 100%; height: 300px"></div></div></div><!-- 3.  --><!-- 最新内容 --><div class="home-footer"><el-card class="box-card"><div slot="header" class="clearfix"><span>今日订单</span></div><div class="text item"><el-row><el-col :span="8"><div class="title">今日订单数</div><div>{{ orderData.curOrderCount }}</div></el-col><el-col :span="8"><div class="title">汇总确认订单</div><div>{{ orderData.curCollect }}</div></el-col><el-col :span="8"><div class="title">今日金额</div><div>{{ orderData.curMoney }}</div></el-col></el-row></div></el-card><el-card class="box-card"><div slot="header" class="clearfix"><span>本月订单</span></div><div class="text item"><el-row><el-col :span="8"><div class="title">本月订单数</div><div>{{ orderData.orderCount }}</div></el-col><el-col :span="8"><div class="title">汇总确认订单</div><div>{{ orderData.collect }}</div></el-col><el-col :span="8"><div class="title">本月金额</div><div>{{ orderData.money }}</div></el-col></el-row></div></el-card><el-card class="box-card"><div slot="header" class="clearfix"><span>快捷入口</span></div><div class="text item"><el-button type="primary">产品管理</el-button><el-button>消息管理</el-button><el-button>内容管理</el-button></div></el-card></div></div>
</template><script>
import * as echarts from 'echarts'; 
export default {data(){return{totalData:{},//数据统计orderData:{},//订单数据}},created(){this.totalInfo();//打开页面就要加载this.orderinfo();//this.format();},mounted(){//最早获取DOM元素的生命周期函数 挂载完毕console.log('mounted-id' , document.getElementById('charts'))// this.line()// this.pie()},methods:{// ------获取首页统计数据async totalInfo(){let res = await this.$api.totalInfo();console.log('首页统计信息---',res.data);this.totalData = res.data.data.list;// console.log( res.data.data.list);},// ----获取今日订单数据async orderinfo(){let res = await this.$api.orderinfo()console.log('首页统计信息---',res.data);this.orderData = res.data.list},// -----获取图标动态数据async format(){let res = await this.$api.format()console.log('获取图标动态数据---',res.data);console.log(res.data.result.data.sale_money);//[{}{}]// 折线图 柱状图数据格式:[xx,xx,xx]// 获取x轴的数据名称let arr = res.data.result.data.sale_money;//拿到数据let arrx = []let total = []let money = []let pieData = []arr.forEach((ele)=>{//ele是取每一项arrx.push(ele.name)total.push(ele.num)money.push(ele.total_amount)//饼图--对象数据let obj={}obj.name = ele.name;obj.value = ele.total_amount;pieData.push(obj)//[{name:,value:},{},{}]})console.log(arrx);console.log(total);console.log(money);this.line(arrx,money,total)this.pie(pieData)console.log('饼图',pieData);},//绘制图表--折线------------------line(arrx,money,total) {// 基于准备好的dom,初始化echarts实例var myChart = echarts.init(document.getElementById('charts'));// 绘制图表myChart.setOption({tooltip: {//提示框组件trigger: 'axis',},legend: {},toolbox: {feature: {// dataZoom: {//   yAxisIndex: 'none'// },// restore: {},saveAsImage: {}}},xAxis: {//x轴数据data:arrx,},yAxis: {//y轴会自动创建数据},series: [//图表内容{name: '销售额',type: 'line',data:money,smooth: true,//是否平滑曲线显示},{name: '销售量',type: 'bar',data: total,}]});},//绘制饼图pie(pieData) {var myChart = echarts.init(document.getElementById('pie'));var option;option = {tooltip: {trigger: 'item',formatter:'{a}<br/>{b}:{d}%'},legend: {orient: 'vertical',left: 'left'},series: [{name: '产品销售额',type: 'pie',radius: '50%',data:pieData,// data: [//[{},{}]//   { value: 1048, name: '审议' },//   { value: 735, name: '淘宝' },//   { value: 580, name: '京东' }// ],emphasis: {//高亮配置itemStyle: {shadowBlur: 10,shadowOffsetX: 0,shadowColor: 'rgba(0, 0, 0, 0.5)'}}}]};option && myChart.setOption(option);},},// 使用过滤器----处理数据格式filters:{num(value){if(!value) return;return value.toLocaleString();}}}
</script><style lang="less" scoped>
.home {margin: 10px;
}
.header {display: flex;padding-right: 30px;.item {flex: 1;height: 100px;padding: 10px;background: #fff;border-radius: 10px;margin-left: 20px;margin-right: 20px;font-weight: bold;color: #fff;// text-align: center;position: relative;.num {font-size: 22px;margin: 10px;color: #fff;}.bottom {position: absolute;border-top: 1px solid rgb(246, 245, 245);padding: 10px 20px;bottom: 0;right: 0;left: 0;color: #fff;font-weight: normal;}}.item:nth-child(1) {background-image: linear-gradient(#df887d, #88554d);}.item:nth-child(2) {background-image: linear-gradient(#409eff, #2e556e);}.item:nth-child(3) {background-image: linear-gradient(#b54fa8, #713c7a);}.item:nth-child(4) {background-image: linear-gradient(#1cd2f1, #39717a);}
}
/deep/.el-card__body{// border: 1px solid red;text-align: center;line-height: 30px;
}
// 图表.content {margin: 20px;display: flex;height: 320px;.time-info {flex: 2;background: #fff;margin-right: 20px;padding: 10px;}.area {flex: 1;background: #fff;padding: 10px;}
}//内容.home-footer {display: flex;padding-left: 20px;margin-bottom: 20px;.box-card {flex: 1;margin-right: 30px;span {font-weight: 600;}}
}</style>

相关文章:

vue 把echarts封装成一个方法 并且从后端读取数据 +转换数据格式 =动态echarts 联动echarts表

1.把echarts 在 methods 封装成一个方法mounted 在中调用 折线图 和柱状图 mounted调用下边两个方法 mounted(){//最早获取DOM元素的生命周期函数 挂载完毕console.log(mounted-id , document.getElementById(charts))this.line()this.pie()},methods里边的方法 line() {// …...

Python基础08 面向对象的基本概念

Python使用类(class)和对象(object)&#xff0c;进行面向对象&#xff08;object-oriented programming&#xff0c;简称OOP&#xff09;的编程。 面向对象的最主要目的是提高程序的重复使用性。我们这么早切入面向对象编程的原因是&#xff0c;Python的整个概念是基于对象的。…...

APP自动化之Poco框架

今天给大家介绍一款自动化测试框架Poco&#xff0c;其脚本写法非常简洁、高效&#xff0c;其元素定位器效率更快&#xff0c;其本质基于python的第三方库&#xff0c;调试起来也会非常方便&#xff0c;能够很好的提升自动化测试效率&#xff0c;节省时间。 (一&#xff09;背景…...

c++拷贝构造【显式调用】和运算符=重载构造【隐式调用】解析

深拷贝 vs. 浅拷贝 深拷贝&#xff1a;开辟新内存&#xff0c;独立对象&#xff0c;堆区浅拷贝&#xff1a;共享内存&#xff0c;引用对象&#xff0c;栈区 深拷贝&#xff1a;深拷贝是一种拷贝方式&#xff0c;它会在堆区重新分配内存并复制对象的内容。 这意味着原对象和新…...

无涯教程-JavaScript - LCM函数

描述 LCM函数返回整数的最小公倍数。最小公倍数是最小的正整数,它是所有整数参数number1,number2等的倍数。使用LCM添加具有不同分母的分数。 语法 LCM (number1, [number2] ...)争论 Argument描述Required/OptionalNumber1, number2... 您想要最小公倍数的1到255个值。 如…...

Java多线程篇(3)——线程池

文章目录 线程池ThreadPoolExecutor源码分析1、如何提交任务2、如何执行任务3、如何停止过期的非核心线程4、如何使用拒绝策略 ScheduledThreadPoolExecutor源码分析 线程池 快速过一遍基础知识 7大参数 corePoolSize &#xff1a; 核心线程数 maximumPoolSize&#xff1a; 最…...

那些年我们遇到过的关于excel的操作

本文为直接从百度上搜索的关于excel的函数使用&#xff0c;方便以后用&#xff0c;希望会持续补充 excel中筛选出两列重复的数据【场景&#xff1a;A、B两列数据个数不同且无序&#xff0c;想找出A列中的数据在B列中不存在的&#xff0c;通过比较后单元格为空的代表该行不存在的…...

Angular变更检测机制

前段时间遇到这样一个 bug&#xff0c;通过一个 click 事件跳转到一个新页面&#xff0c;新页面迟迟不加载&#xff1b; 经过多次测试发现&#xff0c;将鼠标移入某个 tab &#xff0c;页面就加载出来了。 举个例子&#xff0c;页面内容无法加载&#xff0c;但是将鼠标移入下图…...

Redis之String类型

文章目录 Redis之String类型1. 赋值/获取值2. 同时设置/获取多个键值3. 数值增减4. 获取字符串长度5. 向尾部追加值6. 分布式锁7.应用场景 Redis之String类型 Redis命令不区分大小写 1. 赋值/获取值 赋值&#xff1a;set key value 取值&#xff1a;get key (当键不存在时候&…...

使用redis中的zset实现滑动窗口限流

使用redis和zset实现滑动窗口限流 文章目录 使用redis和zset实现滑动窗口限流Zset**初始化一个ZSet**&#xff1a;其中包含所有用户的ID和时间戳。**添加元素到ZSet**&#xff1a;当用户发起请求时&#xff0c;将当前时间戳和用户ID作为元素添加到ZSet中。**删除过期的元素**&a…...

Linux下C语言使用 netlink sockets与内核模块通信

netlink简介 Netlink套接字是用以实现用户进程与内核进程通信的一种特殊的进程间通信(IPC) ,也是网络应用程序与内核通信的最常用的接口。在Linux标准内核中&#xff0c;系统默认集成了很多netlink实例&#xff0c;比如日志上报、路由系统等&#xff0c;netlink消息是双向的&a…...

excel中的引用与查找函数篇3

1、INDEX(array,row_num,[col_num])&#xff1a;获取指定范围中指定行号和列号对应的数据 index(查询范围,行号,列号) 行号和列号是相对选中查询范围来写的&#xff1a;分别把第二行第三列的数据和第四行第二列的数据查找出来。 数据是单行或单列&#xff0c;后面只需要给一个参…...

【Linux学习笔记】 - 常用指令学习及其验证(下)

前言&#xff1a;本文延续上一篇文章【Linux学习笔记】 - 常用指令学习及其验证&#xff08;上&#xff09;对常用的指令进行介绍和验证。 一、mv指令 &#xff08;1&#xff09;功能&#xff1a;用来移动文件或者将文件改名 &#xff08;2&#xff09;语法及验证&#xff1a…...

面试官:请说说flex布局_番茄出品.md

面试官&#xff1a;请说说flex布局_番茄出品.md start 依然记得当初学习 flex 布局时&#xff0c;用 flex 布局&#xff1a;画麻将。一筒到九筒&#xff0c;应有尽有。但是光和面试官说&#xff0c;我用 flex 布局画过麻将&#xff0c;并没有什么用。面试官问你一个语法&…...

ChatGLM DeepSpeed/P-Tuning v2 调参

之前尝试了基于ChatGLM-6B使用LoRA进行参数高效微调,本文给大家分享使用DeepSpeed和P-Tuning v2对ChatGLM-6B进行微调,相关代码放置在GitHub上面:llm-action。 ChatGLM-6B简介 ChatGLM-6B相关的简介请查看之前的文章,这里不再赘述。 P-Tuning v2简介 P-Tuning是一种较新…...

Leetcode每日一题:打家劫舍系列Ⅰ、Ⅱ、Ⅲ、Ⅳ(2023.9.16~2023.9.19 C++)

由于之前写过打家劫舍系列&#xff0c;这里直接弄个合集&#xff0c;后面应该还有个iv。 目录 198. 打家劫舍 213. 打家劫舍 II 337. 打家劫舍 III 2560. 打家劫舍 IV 198. 打家劫舍 题目描述&#xff1a; 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都…...

容易对一个异性产生依赖感怎么办?

歌词&#xff1a;爱总让人伤心&#xff0c;但你要学会去明白~ &#x1f442; Photograph - Ed Sheeran - 单曲 - 网易云音乐 目录 &#x1f33c;前言 &#x1f61f;一、对另一个人的依赖感&#xff0c;本质是什么&#xff1f; &#x1f60a;二、如何减少对伴侣的依赖感&am…...

Windows10/11无线网卡WIFI驱动详细下载安装教程

官网下载WIFI驱动 《intel官网》 找到下载Windows 10 and Windows 11* WiFi package drivers 查看详细信息 下载对应操作系统的WIFI驱动 安装驱动&#xff0c;然后重启电脑即可。...

面向面试知识--Lottery项目

面向面试知识–Lottery项目 1.设计模式 为什么需要设计模式&#xff1f; &#xff08;设计模式是什么&#xff1f;优点有哪些&#xff1f;&#xff09; 设计模式是一套经过验证的有效的软件开发指导思想/解决方案&#xff1b;提高代码的可重用性和可维护性&#xff1b;提高团…...

SpringBoot接口中如何直接返回图片数据

SpringBoot接口中如何直接返回图片数据 目录 接口直接返回图片数据 起因 类似这种 根据个人经验 优雅的实现图片返回 接口直接返回图片数据 起因 最近在做涉及到分享推广的业务&#xff0c;需要由业务员分享二维码进入推广页面&#xff0c;由于是新项目&#xff0c;前期…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...

Windows电脑能装鸿蒙吗_Windows电脑体验鸿蒙电脑操作系统教程

鸿蒙电脑版操作系统来了&#xff0c;很多小伙伴想体验鸿蒙电脑版操作系统&#xff0c;可惜&#xff0c;鸿蒙系统并不支持你正在使用的传统的电脑来安装。不过可以通过可以使用华为官方提供的虚拟机&#xff0c;来体验大家心心念念的鸿蒙系统啦&#xff01;注意&#xff1a;虚拟…...

Python的__call__ 方法

在 Python 中&#xff0c;__call__ 是一个特殊的魔术方法&#xff08;magic method&#xff09;&#xff0c;它允许一个类的实例像函数一样被调用。当你在一个对象后面加上 () 并执行时&#xff08;例如 obj()&#xff09;&#xff0c;Python 会自动调用该对象的 __call__ 方法…...