Vue 封装echarts饼状图(Pie)组件

目的:减少重复代码,便于维护

效果显示:

组件代码

<template><div class="ldw-data-content-box"><div class="ldw-chilren-box"><div class="title"><div>{{ title }}</div><div class="btn"><slot></slot></div></div><div v-if="row" class="ldw-row-class"><div class="canvas-box"><div :id="'canvas-box'+number" style="width: 100%;height:100%;"></div></div><div class="quan-quan-box" style="justify-content: space-evenly;"><div class="ldw-quan-quan" style="width:100%;" v-for="(item,index) in data" :key="index"><div class="ldw-quan-box" :style="{background:item.ldwColor.length?`linear-gradient(0deg,${item.ldwColor[0]},${item.ldwColor[1]})`:''}"></div><div class="ldw-text-text ldw-w" :style="'width:'+item.w+'px'">{{item.name}}</div><div>:</div><div>{{ item.value }}</div></div></div></div><div style="width:100%;flex:1;display: flex;flex-flow: column;" v-else><div style="width:100%;flex:1;"><div :id="'canvas-box'+number" style="width: 100%;height:100%;"></div></div><div :style="{'height':h+'px','marginTop':top+'px','margin':'0 auto'}" :class="column?'flex-column':'flex-center-sp flex flex-center-cz flex-col'"><div class="ldw-quan-quan" :class="column?'flex-center-sp':''" v-for="(item,index) in data" :key="index"><div class="ldw-quan-box" :style="{background:item.ldwColor.length?`linear-gradient(0deg,${item.ldwColor[0]},${item.ldwColor[1]})`:''}"></div><div v-if="column">{{item.name}}</div><div v-else class="ldw-text-text ldw-w" :style="'width:'+item.w+'px'">{{item.name}}</div><div>:</div><div>{{ item.value }}</div></div></div></div></div></div>
</template><script>
var echarts = require("echarts");
const total = function(data){return data.reduce((prev,cur)=>{return prev+cur.value},0)
}
export default {props:{title:"",data:{require:true,type:Array,default:()=>[]},w:{type:String,default:"auto"},column:{type:Boolean,default:true},row:{type:Boolean,default:false},listH:{type:Number,default:56},label:{type:Boolean,default:false}},data(){return{bg:["#0090FF","#31CFB8","#E55240"],number:null,top:0,h:56,myChart:null}},watch: {data: {//深度监听,可监听到对象、数组的变化handler(val, oldVal) {if (val != null) {this.setOption();}},deep: true, //true 深度监听},listH:{//深度监听,可监听到对象、数组的变化handler(val, oldVal) {this.h  = val},}},created(){this.h = this.listHthis.number = Math.random(1000)+1;},mounted(){this.initData()},methods:{initData(){let canvas = document.getElementById(`canvas-box${this.number}`)this.myChart = echarts.init(canvas);this.setClick()this.setOption()},setClick(){let that = thisthis.myChart.on("click", function(params) {that.$emit('eClick',params)});},setOption(){let option = {title: {text:'总计',//主标题文本subtext:""+total(this.data),//副标题文本left:'center',top:'40%',textStyle:{fontSize: 16,color:'#6c7a89',align:'center'},subtextStyle:{fontFamily : "微软雅黑",fontSize: 26,color:'#060606',fontWeight:600}},tooltip: {trigger: 'item'},legend: {show:false},series: [{name:this.title,type: 'pie',radius: ['55%', '80%'],avoidLabelOverlap: false,label: this.labelFn(this.label),labelLine: this.labelLineFn(this.label),data: this.colorFormat(this.data)}]};this.myChart.setOption(option)},resize(){this.myChart.resize()},labelColor(){arr.forEach((item)=>{if(item.ldwColor){item.itemStyle = {color:{}}}})return arr},colorFormat(arr){arr.forEach((item)=>{if(item.ldwColor){item.itemStyle = {color:{type: 'linear',x: 0,y: 0,x2: 0,y2: 1,colorStops: [{offset: 0, color: item.ldwColor[0] // 0% 处的颜色}, {offset: 1, color: item.ldwColor[1] // 100% 处的颜色}],global: false // 缺省为 false}}}})return arr},labelFn(state){if(state){return {color: 'inherit',fontWeight:"bold",fontSize:12,padding:[0,-60],formatter:(params)=>{return `${params.name}\n${(params.value/total(this.data)*100).toFixed(1)}%\n\n`}}}else{return {show:false}}},labelLineFn(state){if(state){return {smooth: 0.2,length: 10,length2: 70}}else{return {show:false}}}}
}
</script><style scoped>
.ldw-data-content-box{width:100%;height:100%;display: flex;
}.ldw-data-content-box>.ldw-chilren-box{width:100%;height:100%;display: flex;justify-content: center;align-items: center;flex-flow: column;overflow: hidden;
}
.ldw-data-content-box>.ldw-chilren-box>.title{font-size: 18px;color:#000;text-align: center;padding:24px 0;width:100%;position: relative;
}.ldw-bg-box{background: rgba(255,255,255,0.5);border: 1px solid #F4FDFE;border-radius: 20px;
}.ldw-text-text{display: inline-block;text-align: justify;line-height: 0;margin-left: 20px;
}.ldw-text-text::after{content:"";display: inline-block;width:100%;overflow:hidden;height:0;
}.ldw-quan-quan{width:100%;display: flex;align-items: center;
}.ldw-w{margin-top:6px;position: relative;
}.ldw-quan-box{width: 13px;height: 13px;border-radius: 2px;margin-right: 20px;
}.flex-column{width:100%;display: flex;justify-content: space-around;
}.flex-column .ldw-w{width: auto;
}.flex-column .ldw-quan-box{margin-right: 10px;
}.btn{position: absolute;right: 50px;top:50%;transform: translateY(-50%);
}.ldw-row-class{display: flex;width: 100%;justify-content: center;align-items: center;flex: 1;padding:0 20px;
}.canvas-box{text-align: center;width:65%;height: 100%;
}.quan-quan-box{width:35%;height: 100%;display: flex;flex-flow: column;justify-content: center;align-items: center;
}.m-m-m{margin: 0 auto;
}
</style>

调用代码

<template><div class="root flex flex-col border-box"><div  style="width: 400px; height: 400px;"  ><Pie  :title="'统计'"  :data="list" ></Pie></div></div>
</template><script>import Pie from '@/components/echarts/pieInfo.vue'export default{name:'',created() {},mounted() {this.list = this.chartData},components: {Pie},data() {return {list:[],chartData:[{value:100, type:'一季度'},{value:105, type:'二季度'},{value:201, type:'三季度'},{value:167, type:'四季度'},]}},methods:{}}
</script>

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

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

相关文章

积分上下限无穷_数学分析|第九章 定积分利用等价无穷小量和定积分定义解决数列极限问题总结...

当公式或文字展示不完全时&#xff0c;记得向左←滑动哦&#xff01;摘要&#xff1a; 当我们利用等价无穷小量时&#xff0c;不仅仅可以利用等价替换&#xff0c;有的时候我们需要利用极限的定义语言来解决问题&#xff0c;当等价无穷小量和连加数列结合在一起时&#xff0c;虽…

React 性能优化之批量处理 unstable_batchedUpdates

手动批量处理 unstable_batchedUpdates 可用于手动批量更新state&#xff0c;可以指定多个setState合并为一个更新请求。 import { useState, useLayoutEffect } from "react"; import { unstable_batchedUpdates } from "react-dom";function App() {con…

关于配置Webapck的 exclude 不过滤 node_modules Babel却没有处理转换node_modules的源码

最近对公司的项目引入了 nanoid 替换 uuid 的使用。但是在sentry日志中发现Unexpected token >的错误。立马查看编译后bunld发现 nanoid 箭头函数没有被转换。所以对此记录一下原因和解决办法。 报错的原因 1.nanoid 源码是没有经过babel转换的。 查看nanoid的源码&#x…

python语言中的注释符_各种语言中的注释符总结

各种语言中的注释符c语言/* 注释内容*/// 注释内容Pascal&#xff1a;{ 注释内容}Vb&#xff1a;Rem 注释内容‘注释内容Vbscript&#xff1a;‘注释内容rem 注释内容Javascript&#xff1a;// 注释内容/* 注释内容*/Java&#xff1a;// 注释内容/* 注释内容*/Delphi&#xff1…

关于 Taro 的 ScrollView 在Dom结构发生变化会自动回滚到顶部解决方案和原因

使用Taro开发小程序时候发现 ScrollView 会在同级节点发生增删情况下会自动会滚ScrollView到顶部&#xff0c;经过多次验证和查阅Taro原理发现这是Taro自身bug 出现回滚顶部bug的演示代码 下面有一个列表和按钮&#xff0c;点击按钮会出现加载更多的字样。但是当我们点击按钮时…

android 贝塞尔曲线_OpenGL 实践之贝塞尔曲线绘制

说到贝塞尔曲线&#xff0c;大家肯定都不陌生&#xff0c;网上有很多关于介绍和理解贝塞尔曲线的优秀文章和动态图。以下两个是比较经典的动图了。二阶贝塞尔曲线&#xff1a;三阶贝塞尔曲线&#xff1a;由于在工作中经常要和贝塞尔曲线打交道&#xff0c;所以简单说一下自己的…

Node.js Event loop 图解

直接上自己制作的流程图

支持串行隔离级别_从0到1理解数据库事务(上):并发问题与隔离级别

最近准备写一篇关于Spanner事务的分享&#xff0c;所以先分享一些基础知识&#xff0c;涉及ACID、隔离级别、MVCC、锁&#xff0c;由于太长&#xff0c;只好拆分成上下两篇&#xff1a;上&#xff1a;并发问题与隔离级别主要讲事务所要解决的问题、思路&#xff0c;先理解为什么…

mysql_unbuffered_query的_用mysql_unbuffered_query函数取大数据

昨天在做项目的时候&#xff0c;因为涉及到数据表结构的改动&#xff0c;需要进行大量数据的导入&#xff0c;那么如何高效的进行是我比较关注的。本文暂且从使用PHP脚本层面上来说&#xff0c;因为使用其他语言或其他方式也可以进行数据的重导。 在讨论这个问题的时候&#xf…

如何发布接口_Devops下的接口全生命周期管理与测试

什么是devops&#xff1f;随着时间的推移&#xff0c;devops的定义也在不断的演进。对于其定义可能出现千人千面&#xff0c;但从核心观点&#xff0c;整体业界还是保持着一致的认识。DevOps不是单一的技术或者工具&#xff0c;甚至不只是一个流程&#xff0c;而是包含应用设计…

lisp修改界址线属性_地籍与房产测量 A卷答案

地籍与房产测量 A卷答案一、单项选择题(共10个小题&#xff0c;每小题2分&#xff0c;共20分。)1、地籍测绘规范规定 界址点的精度分( C )A.一级 B.二级 C.三级 D.四级2、界址点的精度要求最高为 AA.5cm B.10cm C.15cm D.20cm3、城镇地区城区地籍图的比例尺一般采用( A )A. 1:1…

mysql获取数据库名_mysql获取数据库名

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航&#xff0c;为用户…

scala mysql连接池_Java与Scala的两种简易版连接池

Java版简易版连接池&#xff1a;import java.sql.Connection;import java.sql.DriverManager;import java.util.LinkedList;/*** 简易版的连接池*/public class ConnectionPool {//静态的Connectionprivate static LinkedListconnections;//加载驱动static {try {Class.forName…

查看mysql日志post_(转)MySQL 日志组提交

原文:https://jin-yang.github.io/post/mysql-group-commit.html组提交 (group commit) 是为了优化写日志时的刷磁盘问题&#xff0c;从最初只支持 InnoDB redo log 组提交&#xff0c;到 5.6 官方版本同时支持 redo log 和 binlog 组提交&#xff0c;大大提高了 MySQL 的事务处…

like语句太慢 sqlserver_SQLServer找出执行慢的SQL语句

SELECT(total_elapsed_time / execution_count)/1000 N平均时间ms,total_elapsed_time/1000 N总花费时间ms,total_worker_time/1000 N所用的CPU总时间ms,total_physical_reads N物理读取总次数,total_logical_reads/execution_count N每次逻辑读次数,total_logical_reads N逻辑…

mysql maxpreparedstmtcount_NodeJs Mysql Cant't create more than max_prepared_stmt_count statements

这阵子碰到一个数据库上的问题&#xff0c;一个刚上线不到一周的 NodeJs 接口服务里所有的查询全部都挂掉了&#xff0c;接口一直处于 pending 状态&#xff0c;看了下 pm2 的日志发现了报错&#xff1a;Cantt create more than max_prepared_stmt_count statements&#xff0c…

MySQL查询语句转postGRE语句_PostgreSQL DBA常用SQL查询语句

查看帮助命令DB# help --总的帮助DB# \h --SQL commands级的帮助DB# \? --psql commands级的帮助按列显示&#xff0c;类似MySQL的\GDB# \xExpanded display is on.查看DB安装目录(最好root用户执行)find / -name initdb查看有多少DB实例在运行(最好root用户执行)find / -name…

苹果cms10自适应模板_哪里有苹果cms10自适应模板?

1&#xff0c;苹果CMSv10大图轮播高端大气自适应视频网站模板源码苹果cms10自适应模板下载地址&#xff1a;https://www.mytheme.cn/maccms/54.html第一款大图宽屏的海报轮播幻灯样式&#xff0c;宽屏模板支持DIY扩展自适应影视模板苹果cms10自适应模板苹果cms10自适应模板2&am…

python实现进程通信_python进程间的通讯实现

1&#xff1a;进程间通讯的方法&#xff1a;apply_async()非阻塞式通讯 apply()阻塞式通讯2&#xff1a;使用Queue实现对Process创建的进程间通讯&#xff0c;Queue本身是一个消息队列程序&#xff0c;Queue常用方法&#xff1a;Queue.qsize():返回当前消息队列的消息数量Q…

yum mysql 版本低_mysql小版本升级(yum方式)

5.7.21 --> 5.7.231. 数据库备份(略)2. mysql配置文件备份cp /etc/my.cnf /etc/my.cnf.bak3. yum配置mysql源3.1安装mysql57-community-release-el6-8.noarch.rpm之类的东西rpm -ivh mysql57-community-release-el6-8.noarch.rpm3.2 查看mysql的repovim /etc/yum.repos…