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>

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

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

相关文章

在Android studio 创建Flutter项目运行出现问题总结

在Android studio 中配置Flutter出现的问题 A problem occurred configuring root project ‘android’出现这个问题。解决办法 首先找到flutter配置的位置 在D:\xxx\flutter\packages\flutter_tools\gradle位置中的flutter.gradle buildscript { repositories { googl…

3D目标检测框架 MMDetection3D环境搭建 docker篇

本文介绍如何搭建3D目标检测框架&#xff0c;使用docker快速搭建MMDetection3D的开发环境&#xff0c;实现视觉3D目标检测、点云3D目标检测、多模态3D目标检测等等。 需要大家提前安装好docker&#xff0c;并且docker版本> 19.03。 1、下载MMDetection3D源码 https://gith…

《Linux运维总结:Centos7.6之OpenSSH7.4升级版本至9.4》

一、环境信息 操作系统&#xff1a;Centos7.6.1810 OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 如下图所示&#xff1a; 注意&#xff1a;升级后由于加密算法的区别&#xff0c;低版本的SSH工具可能无法连接&#xff0c;建议改用Xshell7或SecureCRT9.0以上版本。 二、注意事项 1、检…

Centos安装显卡

1、安装基础环境 yum -y install epel-release yum -y install gcc kernel-devel kernel-headers 2.对应内核版本 yum info kernel-devel kernel-headers Cat /proc/version 3、yum安装版本不对应。则去官网手动下载 离线安装对应的rpm&#xff1a; https://pkgs.org/dow…

如何代码降重

目录 一、使用的相关工具二、冗余代码的分类和压缩策略2.1 无用代码2.2 重复代码2.3 相似代码 三、长久治理机制3.1 git-hooks 一、使用的相关工具 以下工具都有各自详细说明的文档。除非有必要&#xff0c;下文不再对其相关使用作详细说明。 仓库代码查重工具&#xff1a;http…

Python(八十七)函数的定义与调用

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

九芯电子丨语音智能风扇,助您畅享智慧生活

回忆童年时期的传统机械风扇&#xff0c;那“古老”的扇叶连摆动看起来是那么吃力。在一个闷热的夏夜&#xff0c;风扇的噪音往往令人印象深刻。但在今天&#xff0c;静音家用风扇已取代了传统的机械风扇。与此同时&#xff0c;随着智能化的发展&#xff0c;智能家居已逐渐成为…

[计算机入门] 电源选项设置

3.10 电源选项设置 有时候我们的电脑一段时间没有用&#xff0c;会自己关掉屏幕或者直接睡眠&#xff0c;这是电源选项没有设置好导致的。 1、打开控制面板&#xff0c;打开其中的电源选项 2、点击左侧上方的选择关闭显示器的时间 3、进入到编辑计划设置界面&#xff0c;在…

大数据学习1.1-Centos8网络配置

1.查看虚拟网卡 2.配置网络信息 打勾处取消 记住箭头的数字 3.修改 网络连接 4.进入虚拟网络 5.进入属性 6.修改IPv4 5.将iIP和DNS进行修改 6.配置网络信息-进入修改网络配置文件 # 进入root用户 su root # 进入网络配置文件 cd /etc/sysconfig/network-scripts/ # 修改网络配…

thrift的简单使用

写在前面 本文一起看下一种由facebook出品的rpc框架thrift。 源码 。 1&#xff1a;开发步骤 1:编写thrift idl文件 2&#xff1a;根据thrift idl文件生成java模板代码 3&#xff1a;继承模板代码的*.Iface接口给出server的具体服务实现 4&#xff1a;使用模板的HelloWorldSe…

综合管廊安全监测,助力市政管廊智能化管理

综合管廊是一种集管线维护、建设、管理于一体的地下综合通道&#xff0c;可以将电力、通讯、燃气、供热、供水等工程管线集于一体&#xff0c;综合管廊对于城市建设具有重要意义&#xff0c;可以防止管线破裂&#xff0c;杜绝反复开挖路面&#xff0c;有效缓解交通拥堵&#xf…

散列查找—

1.除数取余法 2.直接定址法 3.平方取中法 处理冲突的方法 1.开放定址法 查找效率分析 2.平方探测法 3.伪随机序列法 4.再散列法

三步实现Mybatis(Mybatis-Plus)多数据源配置

前言 要实现多数据源可以采用dynamic-datasource或者mybatis-mate&#xff0c;本文就以dynamic-datasource为例 dynamic-datasource简介 springboot 快速集成多数据源的启动器 使用文档(opens new window) 支持 数据源分组 &#xff0c;适用于多种场景 纯粹多库 读写分离 一主…

基于Python和mysql开发的看图猜成语微信小程序(源码+数据库+程序配置说明书+程序使用说明书)

一、项目简介 本项目是一套基于Python和mysql开发的看图猜成语微信小程序&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Python学习者。 包含&#xff1a;项目源码、项目文档、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都…

netty之ByteBuf

Java NIO 提供了 ByteBuffer 作为它的字节容器&#xff0c;但是这个类使用起来过于复杂&#xff0c;而且也有些繁琐。ByteBuf是对java ByteBuffer的封装。 两个索引 ByteBuf有两个重要的索引&#xff0c;readerIndex和writeIndex。一个用于读取一个用于写入。这两个值初始值都…

adb操作及常用命令

问题&#xff1a;no devices/emulators found&#xff1a;adb devices 没有连接的设备 解决方案&#xff1a; 大概率是因为usb调试功能没有打开&#xff0c;可以查看手机设备是否开启usb调试功能 Android若未开启&#xff0c;可通过设置-关于手机&#xff0c;连续点击版本号7…

小程序自定义导航栏

小程序自定义导航栏&#x1f424;&#x1f424; js data: {statusBarHeight: wx.getSystemInfoSync().statusBarHeight, // 状态栏高度navBarHeight: 44, // 导航栏高度},getSystemInfo() {//获取当前设备信息wx.getSystemInfo({success: res > {// 获取胶囊按钮信息let men…

Linux下的Docker安装,以Ubuntu为例

Docker是一种流行的容器化平台&#xff0c;它能够简化应用程序的部署和管理。 Docker安装 1、检查卸载老版本Docker&#xff08;为保证安装正确&#xff0c;尽量在安装前先进行一次卸载&#xff09; apt-get remove docker docker-engine docker.io containerd runc 2、Dock…

【LeetCode热题100】--15.三数之和

15.三数之和 注意&#xff1a;最后答案中不能包含重复的三元组 使用排序双指针 可以使用三重循环枚举三元组&#xff0c;但是需要哈希表进行去重操作&#xff0c;得到不包含重复三元组的最终答案&#xff0c;消耗量大量的时间和空间 对于不重复的本质&#xff0c;保持三重循环…

malloc是如何实现内存分配的?

文章目录 前言一、malloc实现原理概括&#xff1f;二、brk() 函数与mmap()函数三、mmap实现原理普通读写与mmap对比mmap内存映射实现过程mmap 的适用场景 前言 在C和C中&#xff0c;malloc函数是用于动态分配内存的常用函数。本文将深入探究malloc函数的内存分配实现机制&…