若依点击菜单进入饼状图和柱状图

本文介绍如何在Vue应用中通过ECharts实现党员数据的饼状图和柱状图展示,包括前后端接口交互、数据处理与ECharts组件的使用。

点击党员统计,显示饼状图和柱状图

在这里插入图片描述

第一步,先添加一个菜单,这里的组件路径要和项目中的目录相同

在这里插入图片描述

在vives添加echarts.vue

在这里插入图片描述

在index.js中添加跳转

在这里插入图片描述

在后端写接口controller

package com.ruoyi.system.controller;

import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.system.mapper.MemberMapper;
import com.ruoyi.system.vo.MemberEcharts;
import com.ruoyi.system.vo.gender;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.*;


@RestController
@RequestMapping("/system/bing")
public class EchartsController extends BaseController {
    @Autowired
    private MemberMapper memberMapper;
    /**
     * 查询年龄分段
     * @return
     */
    //饼状图
    @GetMapping("/pie")
    public AjaxResult pie(){
        List<MemberEcharts> member = memberMapper.selectAge();
        ArrayList<MemberEcharts> memberEcharts = new ArrayList<>();
        for (MemberEcharts echarts : member) {
            MemberEcharts memberEcharts1 = new MemberEcharts();
            memberEcharts1.setName(echarts.getName());
            memberEcharts1.setValue(echarts.getValue());
            memberEcharts.add(memberEcharts1);
        }
        //打印台数据
        for (MemberEcharts memberEchart : memberEcharts) {
            System.out.println("饼状图数据"+"=========="+memberEchart.getName()+memberEchart.getValue());
        }

        return AjaxResult.success(memberEcharts);
    }
    /**
     * 查询年龄分段
     * @return
     */
    @GetMapping(value = "/zhu")
    public AjaxResult zhu(){
        List<gender> genders = memberMapper.selectGender();
        ArrayList<gender> genderArrayList = new ArrayList<>();
        for (gender gender1 : genders) {
            gender gender = new gender();
            gender.setGender(gender1.getGender());
            gender.setCount(gender1.getCount());
            genderArrayList.add(gender);
        }
        //打印台数据
        for (gender gender : genderArrayList) {
            System.out.println("柱状图数据"+"=========="+gender.getGender()+gender.getCount());
        }
        return AjaxResult.success(genderArrayList);
    }
}

实体类,这里写了两个实体类

在这里插入图片描述
在这里插入图片描述

mapper

在这里插入图片描述

mapper.xml

 <!--查询成绩-->
    <select id="selectAge" resultType="com.ruoyi.system.vo.MemberEcharts">
        select nnd as name,count(*) as value from
        (
        select
        case
        when age>=20 and age &lt; 30 then '20-30'
        when age>=30 and age &lt; 40 then '30-40'
        when age>=40 and age &lt; 50 then '40-50'
        when age>=50 and age &lt; 60 then '50-60'
        WHEN age > 59 THEN '大于60'
        end
        as nnd from member  where del_flag = 0
        )
        a
        group by nnd
    </select>
    <!--查询性别-->
    <select id="selectGender" parameterType="string" resultType="com.ruoyi.system.vo.gender">
        SELECT gender as gender, count(gender) as count FROM member where del_flag = 0 group by gender;
    </select>

后端写完写一下前端

这里是我写的echarts.vue

<template>
  <div>
    <el-row>
      <el-col :span="12">
<!--        margin:用于设置DIV的外延边距也就是到父容器的距离。-->
        <div id="bing" style="margin: 100px;width: 500px;height: 700px;float: bottom"></div>
      </el-col>
      <el-col :span="12">
        <div id="zhu" style="width: 500px;height: 800px;float: bottom"></div>
      </el-col>
    </el-row>
  </div>
</template>

<script>
import * as echarts from 'echarts';
import {bing, zhu} from "@/api/system/member";

export default {
  name: "echarts",
  //参数
  data() {
    return {
      pName:[],//name值
      pValue:[],//value值
      myChartStyle: { float: "left", width: "100%", height: "400px" } //图表样式
    };
  },
  mounted() {
    this.$nextTick(()=>{
      this.getList();
      this.list();
    })
  },
  created() {
  },

  methods: {
     getList() {
       bing().then(res => {
         if (res.code == 200) {
           this.myEachars(res.data);
         }
       })
    },
    list() {
      zhu().then(res => {
        console.log(res)
        if (res.code==200){
          this.zhuzhuangtu(res.data);
        }else {
          //验证失败
          this.zhuzhuangtu(null);
        }
      })
    },
    zhuzhuangtu(datms) {

      //参数拼接
      var datas = []
      var xData=[]
      if (datms==null){
        datas.push(0,0);
        xData.push("男","女");
      }else {
        for (let i = 0; i < datms.length; i++) {
          var item = {
            value: datms[i].count,
          };
          var items = {
            value: datms[i].gender,
          };
          datas.push(item);
          xData.push(items);
        }
      }

      // 基本柱状图
      const option = {
        xAxis: {
          data: xData
        },
        yAxis: {},
        series: [
          {
            type: "bar", //形状为柱状图
            data: datas
          }
        ]
      };
      const myChart = echarts.init(document.getElementById("zhu"));
      myChart.setOption(option);
      //随着屏幕大小调节图表
      window.addEventListener("resize", () => {
        myChart.resize();
      });
    },
    //饼图
    myEachars(datm) {
       //数据
      var datas = []
      for (let i = 0; i < datm.length; i++) {
        var item = {
          value: datm[i].value,
          name: datm[i].name,
        };
        datas.push(item);
      }
      console.log(datas);
      // 基于准备好的dom,初始化echarts实例
      var bing = echarts.init(document.getElementById('bing'));

      // 指定图表的配置项和数据
      var option = {
        title: {
          text: '饼图',
        },
        legend: {
          top: 'bottom',
        },
        tooltip: {//鼠标移至有数据
          trigger: 'item'
        },
        toolbox: {
          show: true,
          feature: {
            mark: {show: true},
            dataView: {show: true, readOnly: false},
            restore: {show: true},
            saveAsImage: {show: true}
          }
        },
        series: [//将饼状图的折线部分换成百分比格式
          {
            name: '年龄饼状图',
            type: 'pie',
            radius: '55%',
            center: ['50%', '60%'],
            roseType: 'area',
            itemStyle: {
              emphasis: {
                shadowBlur: 10,
                shadowOffsetX: 0,
                shadowColor: 'rgba(0, 0, 0, 0.5)'
              },
              normal:{
                label: {
                 show:true,
                  formatter:'{d}%'
                }
              }
            },
            data:datas//将数据赋值给date
          }
        ]
      };
      // 使用刚指定的配置项和数据显示图表。
      bing.setOption(option);
    },
  }



}
</script>

写完页面应该写接收后端的接口,应该在src->api下加一个echarts.js,这里我没有加,写在了别的地方

在这里插入图片描述

差不多就这些,想起什么没写再加吧

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拧螺丝的舒克

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值