Vue简单封装的echarts组件

<template>
    <div id="main" ></div>
</template>

<script>
import * as echarts from 'echarts';
export default {
    name: 'productChart',
    props:{
        data:{
            type:Object,
            default:()=>{{}}
        },
        columns:{
            type:Array,
            default:[]
        },
        series:{
            type:Array,
            default:{}
        }
    },
    data(){
        return{

        }
    },
    mounted(){
        const dom=document.querySelector('#main')
        console.log(this.series);
       
        this.$nextTick(()=>{
            this.series.forEach(item=>{
            let div=document.createElement('div')
            div.setAttribute('id','box')
            dom.appendChild(div)
            this.initChart(div,item)
        })
        })
    },
    methods:{
        initChart(div,series){
            const myChart=echarts.init(div,null,{height: 400})
            window.addEventListener('resize',()=>{
                myChart.resize()
            })
            const data=[];
            let option={}
            if(series.type==='bar'||series.type==='line'){
                // 柱状图或者折线图的数据处理
                series.product.forEach(item => {
                    this.columns.forEach(el=>{
                        if(el.title===item){
                            data.push(this.data[el.dataIndex])
                        }
                    })
                    });
                //柱状图或者折线图配置信息 
                option={
                legend: {
                    
                },
                tooltip: {
                    trigger: 'axis',
                    axisPointer: {
                    type: 'shadow'
                    }
                },
                grid: {
                    left: '3%',
                    right: '4%',
                    bottom: '3%',
                    containLabel: true
                },
                title: {
                    text: series.chartName,
                    left: 'left'
                },
                xAxis: [
                {
                    type: 'category',
                    data:series.product,
                    axisTick: {
                        alignWithLabel: true
                    }
                },
                ],
                yAxis:[
                    {
                    type: 'value',
                    name:series.unit[0],
                    axisLabel: {
                        formatter: '{value} '+series.unit[1],
                    }
                    }
                ],
                series: [
                    {
                    // 普通样式。
                    itemStyle: {
                    // 点的颜色。
                    color: series.color
                    },
                    type: series.type,
                    data:data
                    }
                ]
            }
            }else if(series.type==='pie'){
                series.product.forEach(item => {
                    this.columns.forEach(el=>{
                        if(el.title===item){
                            data.push({
                                value:this.data[el.dataIndex],
                                name:item
                            })
                        }
                    })
                    });
                option={
                        title: {
                            text: series.chartName,
                            subtext: series.subtext,
                            left: 'center'
                        },
                        tooltip: {
                            trigger: 'item'
                        },
                        legend: {
                            orient: 'vertical',
                            left: 'left'
                        },
                        series: [
                            {
                            name: 'Access From',
                            type: 'pie',
                            radius: '50%',
                            data:data,
                            emphasis: {
                                itemStyle: {
                                shadowBlur: 10,
                                shadowOffsetX: 0,
                                shadowColor: 'rgba(0, 0, 0, 0.5)'
                                }
                            }
                            }
                        ]};
            }
            //表格配置信息
            myChart.setOption(option)
        }
    }
}
</script>

<style lang="less">
#main{
    width:100%
}
#box{
    width:100%;
    height:300px;
    margin-bottom: 120px;
}
</style>

父组件代码

<productChart :data="chartData" :columns="columns" :series="charts"></productChart>


<script>

import productChart from '@/views/business/brReport/components/productChart'
export default {
  components: {
    productChart
  },

  data () {
    
      charts:[
        {
          chartName:'定金图表',//图表名称
          type:'bar',//图表类型
          unit:['人数','人'],//单位
          product:['前天定金','昨天定金','当天定金']//横坐标内容
        },
        {
          chartName:'业绩图表',
          name:'定金',
          type:'line',
          color:'yellow',//图表颜色
          unit:['人数','人'],
          product:['前天定金','昨天定金','当天定金']
        },
        {
          chartName:'人数图表',
          name:'定金',
          type:'bar',
          unit:['人数','人'],
          product:['前天定金','昨天定金','当天定金']
        },
        {
          chartName:'人图表',
          name:'定金',
          type:'pie',
          subtext:'人图表',
          product:['前天定金','昨天定金','当天定金']
        }
      ],
  }
</script>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值