若依前后端不分离Echarts饼状图、折线图、地图写法。。。。。。

发布时间 2023-08-04 13:57:07作者: 珊珊的卡布奇诺

Controller

@Controller
@RequestMapping("/system/image")
public class EchartsController extends BaseController
{
    private String prefix = "system/state";

    @Autowired
    private IEchartsService echartsService;

    @GetMapping()
    public String image()
    {
        return prefix + "/image";
    }


    //查询全部
    @PostMapping("/list")
    @ResponseBody
    public TableDataInfo list()
    {
        startPage();// 此方法配合前端完成自动分页
        List<Echarts> list = echartsService.findAll();
        return getDataTable(list);
    }


    //查询全部
    @PostMapping("/listditu")
    @ResponseBody
    public TableDataInfo map()
    {
        startPage();// 此方法配合前端完成自动分页
        List<Echarts> list = echartsService.map();
        return getDataTable(list);
    }

}

Service

public interface IEchartsService {

    List<Echarts> findAll();

    public List<Echarts> map();
}

Service实现类

@Service
public class IEchartsServiceImpl implements IEchartsService {

    @Autowired
    private EchartsMapper echartsMapper;


    @Override
    public List<Echarts> findAll() {
        return echartsMapper.findAll();
    }

    @Override
    public List<Echarts> map() {
        return echartsMapper.map();
    }

}

Mapper

public interface EchartsMapper {

    public List<Echarts> findAll();

    public List<Echarts> map();

}

XML很简单,大家自己写就可以了这里就不展示了...........

页面

<!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="wrapper wrapper-content animated fadeInRight">
    <div class="row">
        <div class="col-sm-6">
            <div class="ibox float-e-margins">
                <div class="ibox-title">
                    <h5>水果销量饼状图</h5>
                </div>
                <div class="ibox-content">
                    <div class="echarts" id="pieEcharts"></div>
                </div>
            </div>
        </div>
        <div class="col-sm-6">
            <div class="ibox float-e-margins">
                <div class="ibox-title">
                    <h5>用户访问量折线图</h5>
                </div>
                <div class="ibox-content">
                    <div class="echarts" id="lineEcharts"></div>
                </div>
            </div>
        </div>
    </div>
</div>

<div class="wrapper wrapper-content animated fadeInRight">
    <div class="row">
        <div class="col-sm-12">
            <div class="ibox float-e-margins">
                <div class="ibox-title">
                    <h5>中国地图</h5>
                </div>
                <div class="ibox-content">
                    <div style="height:600px" id="echarts-map-chart"></div>
                </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 + "system/image";

    li();//方法的调用
    function li() {
        var pieChart = echarts.init(document.getElementById("pieEcharts"));
        $.ajax({
            type: "POST",
            url: prefix + "/list",
            data: {},
            dataType: 'json',
            success: function(result) {
                var obj=result.rows;  //根据后台rows获取数据
                var datanew=new Array();
                var point=new Array();

                /*获取数据*/
                $.each(obj,function(n,val){
                    /*获取后台数据*/
                    var call={value:val.num,name:val.name};
                    datanew.push(call);
                    point.push(val.name);
                });

                var pieoption = {
                    title : {
                        text: '水果销量',
                        x:'center'
                    },
                    tooltip : {
                        trigger: 'item',
                        formatter: "{a} <br/>{b} : {c} ({d}%)"
                    },
                    legend: {
                        orient : 'vertical',
                        x : 'left',
                        data: point
                    },
                    calculable : true,
                    series : [
                        {
                            name:'销量',
                            type:'pie',
                            radius: ['40%', '70%'],
                            avoidLabelOverlap: false,
                            data:datanew //给后台数据显示到页面
                        }
                    ]
                };
                pieChart.setOption(pieoption);
                $(window).resize(pieChart.resize);
            }
        });

    }


    foot();//方法的调用
    /*声明方法*/
    function foot() {
        var lineChart = echarts.init(document.getElementById("lineEcharts"));

        var lineoption = {
            title : {
                text: '用户访问量'
            },
            tooltip : {
                trigger: 'axis'
            },
            legend: {
                data:['最多人数','最少人数']
            },
            grid:{
                x:40,
                x2:40,
                y2:24
            },
            calculable : true,
            xAxis : [
                {
                    type : 'category',
                    boundaryGap : false,
                    data : ['周一','周二','周三','周四','周五','周六','周日']
                }
            ],
            yAxis : [
                {
                    type : 'value',
                    axisLabel : {
                        formatter: '{value} 人'
                    }
                }
            ],
            series : [
                {
                    name:'最多人数',
                    type:'line',
                    data:[200, 300, 123, 248, 99, 101, 213],
                    markPoint : {
                        data : [
                            {type : 'max', name: '最大值'},
                            {type : 'min', name: '最小值'}
                        ]
                    },
                    markLine : {
                        data : [
                            {type : 'average', name: '平均值'}
                        ]
                    }
                },
                {
                    name:'最少人数',
                    type:'line',
                    data:[30, 60, 15, 99, 18, 74, 103],
                    markPoint : {
                        data : [
                            {type : 'max', name: '最大值'},
                            {type : 'min', name: '最小值'}
                        ]
                    },
                    markLine : {
                        data : [
                            {type : 'average', name : '平均值'}
                        ]
                    }
                }
            ]
        };
        lineChart.setOption(lineoption);
        $(window).resize(lineChart.resize);

    };


    map();//调用方法
    function map() {
        var mapChart = echarts.init(document.getElementById("echarts-map-chart"));
        $.ajax({
            type: "POST",
            url: prefix + "/listditu",
            data: {},
            dataType: 'json',
            success: function(result) {
                var obj=result.rows;  //根据后台rows获取数据
                var datanew=new Array();
                var point=new Array();

                /*获取数据*/
                $.each(obj,function(n,val){
                    /*获取后台数据*/
                    debugger
                    var call={value:val.num,name:val.name};
                    datanew.push(call);
                    point.push(val.name);
                });

                var mapoption = {
                    title : {
                        text: '地区人数',
                        x:'center'
                    },
                    tooltip : {
                        trigger: 'item'
                    },
                    legend: {
                        orient: 'vertical',
                        x:'left',
                        data:['人数(万)']
                    },
                    dataRange: {
                        min: 0,
                        max: 2500,
                        x: 'left',
                        y: 'bottom',
                        text:['',''],           // 文本,默认为数值文本
                        calculable : true
                    },
                    toolbox: {
                        show: true,
                        orient : 'vertical',
                        x: 'right',
                        y: 'center',
                        feature : {
                            mark : {show: true},
                            dataView : {show: true, readOnly: false},
                            restore : {show: true},
                            saveAsImage : {show: true}
                        }
                    },
                    roamController: {
                        show: true,
                        x: 'right',
                        mapTypeControl: {
                            'china': true
                        }
                    },
                    series : [
                        {
                            name: '人数(万)',
                            type: 'map',
                            mapType: 'china',
                            roam: false,
                            itemStyle:{
                                normal:{label:{show:true}},
                                emphasis:{label:{show:true}}
                            },
                            data:datanew
                        }
                    ]
                };
                mapChart.setOption(mapoption);
                $(window).resize(mapChart.resize);
            }
        });
    }


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

这里的折线图是写死了,大家可以自己更改。饼图和地图都是从后台获取的参数,有需要的可以看一下。

饼图和地图用的是同一个实体类(为了偷懒),大家写的时候可以分开写。