使用若依SpringBoot+ajax显示ECharts饼图折线

Echarts

参考Echarts官网示例

本篇博客只是简单的运用ajax前后交互的小案例。直接上代码

sql

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for dky_echarts
-- ----------------------------
DROP TABLE IF EXISTS `echarts`;
CREATE TABLE `echarts` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(45) DEFAULT NULL,
  `num` int(11) DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of dky_echarts
-- ----------------------------
INSERT INTO `echarts` VALUES ('1', '苹果', '9');
INSERT INTO `echarts` VALUES ('2', '香蕉', '3');
INSERT INTO `echarts` VALUES ('3', '葡萄', '6');
INSERT INTO `echarts` VALUES ('4', '火龙果', '10');
INSERT INTO `echarts` VALUES ('5', '草莓', '20');

image.html

<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<head>
    <th:block th:include="include :: header('可视化列表')"/>
</head>
<body class="gray-bg">
<div class="container-div">
    <div class="row">
        <div class="col-xs-6">
            <div class="ibox-content">
                <div id="lineEcharts" class="echarts"></div>
            </div>
        </div>
        <div class="col-xs-6">
            <div class="ibox-content">
                <div id="pieEcharts" class="echarts"></div>
            </div>
        </div>
    </div>
    
</div>
<!-- 为ECharts准备一个具备大小(宽高)的Dom -->
<th:block th:include="include :: footer"/>
<th:block th:include="include :: echarts-js"/>

<script th:inline="javascript">
    var prefix = ctx + "state/image";

    //折线图
    $(document).ready(function () {
        //初始化ehcharts实例
        var lineChart = echarts.init(document.getElementById("lineEcharts"));
        //数据加载完之前先显示一段简单的loading动画
        lineChart.showLoading();
        //指定图表的配置项和数据
        var names = []; //类别数组(实际放x轴坐标值)
        var nums = []; //销量数组(Y坐标值)
        $.ajax({
            type: "post",
            async: "true",//异步请求(同步请求将会锁住浏览器,用户其他操作必须等待请求完成才可以执行)
            url: prefix + "/list",
            data: {},
            dataType: "json",
            success: function (result) {
                if (result) {
                    for (var i = 0; i < result.length; i++) {
                        names.push(result[i].name);
                        nums.push(result[i].num);
                    }
                    lineChart.hideLoading();//隐藏加载动画
                    lineChart.setOption({//加载数据图表
                        title: {
                            text: '折线图',
                        },
                        //工具箱
                        //保存图片
                        toolbox: {
                            show: true,
                            feature: {
                                saveAsImage: {
                                    show: true
                                }
                            }
                        },
                        //图例-每一条数据的名字叫销量
                        legend: {
                            data: ['销量']
                        },
                        //x轴
                        xAxis: {
                            type: 'category',
                            boundaryGap: false,
                            data: names
                        },
                        //y轴没有显式设置,根据值自动生成y轴
                        yAxis: {
                            type: 'value'
                        },
                        //数据-data是最终要显示的数据
                        series: [{
                            name: '销量',
                            type: 'line',
                            data: nums
                        }]
                    })
                }
            },
            error: function (errorMsg) {
                alert("图表请求数据失败");
                lineChart.hideLoading();
            }
        })
    })


    //饼图
    $(document).ready(function () {
        var pieChart = echarts.init(document.getElementById("pieEcharts"));
        //数据加载完之前先显示一段简单的loading动画
        pieChart.showLoading();
        //指定图表的配置项和数据
        var names = []; //类别数组(实际放x轴坐标值)
        var nums = []; //销量数组(Y坐标值)
        $.ajax({
            type: "post",
            async: "true",//异步请求(同步请求将会锁住浏览器,用户其他操作必须等待请求完成才可以执行)
            url: prefix + "/list",
            data: {},
            dataType: "json",
            success: function (result) {
                debugger
                if (result) {
                    for (var i = 0; i < result.length; i++) {
                        names.push(result[i].name);
                        var obj = new Object();
                        obj.name = result[i].name;
                        obj.value = result[i].num;
                        nums.push(obj);
                    }
                    pieChart.hideLoading();//隐藏加载动画
                    pieChart.setOption({//加载数据图表
                        title: {
                            text: '饼图',
                            x: 'center'
                        },
                        //工具箱
                        //保存图片
                        toolbox: {
                            show: true,
                            feature: {
                                saveAsImage: {
                                    show: true
                                }
                            }
                        },
                        tooltip: {
                            trigger: 'item',
                            formatter: "{a} <br/>{b} : {c} ({d}%)"
                        },
                        legend: {
                            orient: 'vertical',
                            x: 'left',
                            data: names
                        },
                        calculable: true,
                        series: [{
                            name: '销量',
                            type: 'pie',
                            radius: '55%',
                            center: ['50%', '60%'],
                            data: nums,
                            itemStyle: {
                                emphasis: {
                                    shadowBlur: 10,
                                    shadowOffsextX: 0,
                                    shadowColor: 'rgba(0,0,0,0.5)'
                                }
                            }
                        }]

                    })

                }
            }
        })

    })

</script>
</body>
</html>

Echarts.java

public class Echarts extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    private String name;
    private int num;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getNum() {
        return num;
    }
    public void setNum(int num) {
        this.num = num;
    }
}

mapper.xml

    <select id="findAll" resultType="Echarts">
        SELECT name,num FROM dky_echarts
    </select>

mapper.java


public interface EchartsMapper {

    public List<Echarts> findAll(Echarts echarts);

}

service层省略…

EchartsController.java

package com.ruoyi.web.controller.state;

import java.util.List;

import com.google.gson.Gson;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.sate.domain.Echarts;
import com.ruoyi.sate.service.IEchartsService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

/**
 * @author myy
 * @date 2020-08-29
 */
@Controller
@RequestMapping("/state/image")
public class EchartsController extends BaseController
{
    private String prefix = "state/image";

    private static final Logger LOG = LoggerFactory.getLogger(EchartsController.class);

    @Autowired
    private IEchartsService echartsService;

    @RequiresPermissions("state:image:view")
    @GetMapping()
    public String image()
    {
        return prefix + "/image";
    }

    /**
     * 查询echarts列表
     */
    @RequiresPermissions("state:image:list")
    @PostMapping("/list")
    @ResponseBody
    public String list(Echarts echarts)
    {
        List<Echarts> list = echartsService.findAll(echarts);
        //转换json
        Gson gson = new Gson();
        String str = gson.toJson(list);
        //获取list中第一个字段name和num
        System.err.println(list.get(0).getName()+"----"+list.get(0).getNum());
        return str;
    }


}

转换json依赖

 <!-- gson转换json-->
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.2</version>
        </dependency>

界面
在这里插入图片描述

  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
首先,你需要在 React 项目中安装 echarts: ``` npm install echarts --save ``` 然后,在需要使用饼图的组件中引入 echarts,并在组件的生命周期函数 `componentDidMount` 中初始化 echarts 实例,并使用数据渲染饼图。 例如,以下是一个简单的饼图组件的代码: ``` import React, { Component } from 'react'; import echarts from 'echarts'; class PieChart extends Component { componentDidMount() { this.initChart(); } initChart = () => { const { data } = this.props; const chart = echarts.init(this.chartRef); chart.setOption({ tooltip: { trigger: 'item', formatter: '{a} <br/>{b}: {c} ({d}%)', }, series: [ { name: '访问来源', type: 'pie', radius: ['50%', '70%'], avoidLabelOverlap: false, label: { show: false, position: 'center', }, emphasis: { label: { show: true, fontSize: '30', fontWeight: 'bold', }, }, labelLine: { show: false, }, data, }, ], }); }; render() { return ( <div ref={(ref) => { this.chartRef = ref; }} style={{ width: '100%', height: '300px' }} /> ); } } export default PieChart; ``` 在上面的代码中,我们使用 `componentDidMount` 函数初始化 echarts 实例,并使用传递进来的数据渲染饼图。注意,我们在组件的 `render` 函数中返回一个 `div` 元素,这个元素的 `ref` 属性绑定了一个回调函数,用来获取这个元素的引用,以便后续使用 echarts 来渲染图表。 在父组件中,我们可以使用以下代码来渲染这个饼图组件: ``` import React, { Component } from 'react'; import PieChart from './PieChart'; class App extends Component { state = { data: [ { value: 335, name: '直接访问' }, { value: 310, name: '邮件营销' }, { value: 234, name: '联盟广告' }, { value: 135, name: '视频广告' }, { value: 1548, name: '搜索引擎' }, ], }; render() { const { data } = this.state; return ( <div> <PieChart data={data} /> </div> ); } } export default App; ``` 在父组件中,我们传递一个 `data` 属性给饼图组件,这个属性包含了用于渲染饼图的数据。最终,我们可以在页面中看到一个简单的饼图

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值