echarts--(2)--创建一个饼图

一,安装echarts之后创建echarts组件

二,用 option 描述图表

echarts 的使用者,使用 option 来描述其对图表的各种需求,包括:有什么数据、要画什么图表、图表长什么样子、含有什么组件、组件能操作什么事情等等。简而言之,option 表述了:数据、数据如何映射成图形、交互行为。

三,实际例子

<template>
    <div class="revenueBox">
        <div class="container">
            <el-radio-group v-model="rangeRadio" size="small">
                <el-radio-button label="1">当日</el-radio-button>
                <el-radio-button label="2">7</el-radio-button>
                <el-radio-button label="3">30</el-radio-button>
            </el-radio-group>
            <!-- 时间范围选择 -->
            <el-date-picker type="datetime" placeholder="开始时间" v-model="startTime" class="w170 ml20"></el-date-picker>
            <span class="tace ml10 cogr">--</span>
            <el-date-picker type="datetime" placeholder="结束时间" v-model="endTime" class="w170 ml10"></el-date-picker>
            <el-button size="small" class="ml20" type="primary" @click="certain">确定</el-button>
        </div>
        <!-- 总体营业指标 -->
        <div class="container mt20 echartsBox">
            <div class="title">
                <div class="chart-title">总体营业指标</div>
            </div>
            <div class="chart-area ml40">
                <echarts :chartData="option1" :width="'40%'" :class="'leftEchart'"></echarts>
                <span class="middle-span"></span>
                <echarts :chartData="option2" :width="'40%'" :class="'rightEchart'"></echarts>
            </div>
        </div>

        <div class="tableBox">
            <!-- 店内收款占比 -->
            <div class="container mt20 echartsBox">
                <div class="title">
                    <div class="chart-title">店内收款占比</div>
                </div>
                <div class="chart-area ml40">
                    <echarts :chartData="option2" :width="'100%'" ></echarts>
                </div>
            </div>
            <div class="middle-span2"></div>
            <!-- 外卖收款占比 -->
            <div class="container mt20 echartsBox secondechart">
                <div class="title">
                    <div class="chart-title">外卖收款占比</div>
                </div>
                <div class="chart-area ml40">
                    <echarts :chartData="option2" :width="'100%'" ></echarts>
                </div>
            </div>
        </div>
       
    </div>
</template>

<script>
import Echarts from '@/components/echarts';
export default {
    components:{
        Echarts,
    },
    name: "revenueMain",
    data() {
        return {
            rangeRadio:'2',
            startTime:'',
            endTime:'',
            option1: {
                // title: {
                //     text: '某站点用户访问来源',
                //     subtext: '纯属虚构',
                //     left: 'center'
                // },
                tooltip: {
                    trigger: 'item'
                },
                legend: {
                    orient: 'vertical',
                    top:'30%',      //距离顶部位置
                    right: 0,  //右侧显示
                    show:true,   //控制是否显示
                    // itemWidth:15,
                    // itemHeight:15,  //控制icon的宽度和高度
                    icon:'circle'   //把icon设置为圆形
                },
                series: [
                    {
                        name: '访问来源',
                        type: 'pie',
                        radius: ['40%', '70%'],
                        avoidLabelOverlap: false,
                        labelLine: {
                            show: true
                        },
                        label: {
                            formatter: '{b}: {d}%'
                        },
                        data: [
                            {value: 1000, name: '外卖收款'},
                            {value: 1000, name: '店内收款'}
                        ],
                        emphasis: {
                            itemStyle: {
                                shadowBlur: 10,
                                shadowOffsetX: 0,
                                shadowColor: 'rgba(0, 0, 0, 0.5)'
                            }
                        }
                    }
                ]
            },
            option2: {
                tooltip: {
                    trigger: 'item'
                },
                legend: {
                    orient: 'vertical',
                    right: 0,
                    top: 'center',
                },
                series: [
                    {
                        name: '访问来源',
                        type: 'pie',
                        radius: ['40%', '70%'],
                        avoidLabelOverlap: false,
                        labelLine: {
                            show: true
                        },
                        data: [
                            {value: 1048, name: '搜索引擎'},
                            {value: 735, name: '直接访问'},
                            {value: 580, name: '邮件营销'},
                            {value: 484, name: '联盟广告'},
                            {value: 300, name: '视频广告'}
                        ],
                        emphasis: {
                            itemStyle: {
                                shadowBlur: 10,
                                shadowOffsetX: 0,
                                shadowColor: 'rgba(0, 0, 0, 0.5)'
                            }
                        }
                    }
                ]
            }
        }
    },
    methods:{
        //发起请求,获取收款构成的数据
        async getCollections(){
            console.log(this.startTime)
            var params={
                dateType:this.rangeRadio,
                startT:this.startTime,
                endT:this.endTime
            }
            try{
                var res = await this.$http.get('api/analyze/makeCollectionsIndex',params);
            }catch(err){
                console.log("报错了:",err)
            }
            console.log(res)
            
        },
        certain(){
            this.getCollections()
        }
    },
    created(){
        this.getCollections()
    }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style lang="less" scoped>
.container{
    background: #FFFFFF;
    padding: 25px 24px;
}
.revenueBox .echartsBox{
    padding: 0 ;
    .title{
        background: #D2E0FC;
        height: 60px;
        display: flex;
        align-items: center;
        .chart-title{
            border-left: 2px solid #4F7BCA;
            padding-left: 6px;
            color: #333333;
            font-size: 16px;
            font-weight: bold;
        }
    }
    .chart-area{
        width: calc(100% - 80px);
        height: 550px;
        padding: 20px 30px;
        box-sizing: border-box;
        // box-shadow: 0 2px 13px 0 rgba(75, 75, 75, 0.23);
        display: flex;
        align-items: center;
        justify-content: center;
        .middle-span{
            width: 2px;
            height: 180px;
            background: #E9E8E8;
            margin: 0 120px;
        }
    }
}
.tableBox{
    display: flex;
    width: 100%;
    .echartsBox{
        width: 100%;
    }
    .middle-span2{
        width: 20px;
    }
}
.dyic{display: block;}
.w170{width: 170px;}
.ml20{margin-left: 20px;}
.cogr{color:#E9E8E8;}
.lh42{line-height: 42px;}
</style>


实现的效果:
在这里插入图片描述

四,参看配置文档

其实,常用的使用场景,都已经内置了配置项,在这个网站上都可以找到对应的配置数据:
https://echarts.apache.org/zh/option.html#series-pie

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值