vue整合echarts


1.簡介

 

ECharts是百度的一個項目,后來百度把Echart捐給apache,用於圖表展示,提供了常規的折線圖柱狀圖散點圖餅圖K線圖,用於統計的盒形圖,用於地理數據可視化的地圖熱力圖線圖,用於關系數據可視化的關系圖treemap旭日圖,多維數據可視化的平行坐標,還有用於 BI 的漏斗圖儀表盤,並且支持圖與圖之間的混搭。
官方網站:https://echarts.baidu.com/ 使用和highcharts大同小異 ,可見詳細文檔 https://www.cnblogs.com/fqh2020/p/11988458.html

2.基本使用

入門參考:官網->文檔->教程->5分鍾上手ECharts

(1)創建html頁面:柱圖.html

(2)引入ECharts

 

<script src="echarts.min.js"></script>

 

(3)定義圖表區域

<div id="main" style="width: 600px;height:400px;"></div> 

(4)渲染圖表

<script type="text/javascript">
    // 基於准備好的dom,初始化echarts實例
    var myChart = echarts.init(document.getElementById('main'));
    // 指定圖表的配置項和數據
    var option = {
        title: {
            text: 'ECharts 入門示例'
        },
        tooltip: {},
        legend: {
            data:['銷量']
        },
        xAxis: {
            data: ["襯衫","羊毛衫","雪紡衫","褲子","高跟鞋","襪子"]
        },
        yAxis: {},
        series: [{
            name: '銷量',
            type: 'bar',
            data: [5, 20, 36, 10, 10, 20]
        }]
    };
    // 使用剛指定的配置項和數據顯示圖表。
    myChart.setOption(option);
</script>

3.vue整合echarts

3.1安裝echarts

npm install --save echarts@4.1.0

3.2 編寫前端圖表頁面

這里以折線圖為例

<template>
    <div class="app-container">
        <!--表單-->
        <el-form :inline="true" class="demo-form-inline">
            <el-form-item>
                <el-select v-model="searchObj.type" clearable placeholder="請選擇">
                    <el-option label="學員登錄數統計" value="login_num" />
                    <el-option label="學員注冊數統計" value="register_num" />
                    <el-option label="課程播放數統計" value="video_view_num" />
                    <el-option label="每日課程數統計" value="course_num" />
                </el-select>
            </el-form-item>
            <el-form-item>
                <el-date-picker v-model="searchObj.begin" type="date" placeholder="選擇開始日期" value-format="yyyy-MM-dd" />
            </el-form-item>
            <el-form-item>
                <el-date-picker v-model="searchObj.end" type="date" placeholder="選擇截止日期" value-format="yyyy-MM-dd" />
            </el-form-item>
            <el-button :disabled="btnDisabled" type="primary" icon="el-icon-search" @click="initData()">查詢</el-button>
        </el-form>
        <div class="chart-container">
            <div id="chart" class="chart" style="height:500px;width:100%" />
        </div>
    </div>
</template>

3.3 編寫JavaScript

引入js文件

    import echarts from 'echarts'
    import { getData } from '@/api/sta'

編寫圖表展示方法

    export default {
        data() {
            return {
                searchObj: {
                    type: '',
                    begin: '',
                    end: ''
                },
                btnDisabled: false,
                chart: null,
                title: '',
                xData: [],
                yData: []
            }
        },
        created() {
            
        },
        methods: {
            initData(){
                getData(this.searchObj).then(res=>{
                    this.yData = res.data.number
                    this.xData = res.data.date
                    this.showChart()
                })
            },
            // 設置圖標參數
            showChart() {
                // 基於准備好的dom,初始化echarts實例
                this.chart = echarts.init(document.getElementById('chart'))
                // console.log(this.chart)
                // 指定圖表的配置項和數據
                var option = {
                    // x軸是類目軸(離散數據),必須通過data設置類目數據
                    xAxis: {
                        type: 'category',
                        data: this.xData
                    },
                    // y軸是數據軸(連續數據)
                    yAxis: {
                        type: 'value'
                    },
                    // 系列列表。每個系列通過 type 決定自己的圖表類型
                    series: [{
                        // 系列中的數據內容數組
                        data: this.yData,
                        // 折線圖
                        type: 'line'
                    }]
                }
                this.chart.setOption(option)
            }
        }
    }

請求接口調用

//查詢統計數據
export function getData(searchObj) {
  return request({
    url: `/staservice/statistics-daily/showData/${searchObj.type}/${searchObj.begin}/${searchObj.end}`,
    method: 'get'
  })
}

3.4 編寫后台controller

    /**
     * 圖表顯示,返回兩部分數據,日期json數組,數量json數組
     */
    @GetMapping("showData/{type}/{begin}/{end}")
    public R showData(@PathVariable String type,
                      @PathVariable String begin,
                      @PathVariable String end){
        Map<String ,Object> map = statisticsDailyService.showData(type,begin,end);
        return R.ok().data(map);
    }

3.5 后台service實現類

@Override
    public Map<String, Object> showData(String type, String begin, String end) {
        QueryWrapper<StatisticsDaily> queryWrapper=new QueryWrapper<StatisticsDaily>();
        queryWrapper.between("date_calculated",begin,end);
        queryWrapper.select("date_calculated",type);
        List<StatisticsDaily> list = baseMapper.selectList(queryWrapper);
        List<String> date=new ArrayList<String>();//日期
        List<Integer> number=new ArrayList<Integer>();//數量
        list.forEach(i->{
            String s = i.getDateCalculated();
            date.add(s);
            //封裝對應數量
            switch (type){
                case "login_num":
                    number.add(i.getLoginNum());
                    break;
                case "register_num":
                    number.add(i.getRegisterNum());
                    break;
                case "video_view_num":
                    number.add(i.getVideoViewNum());
                    break;
                case "course_num":
                    number.add(i.getCourseNum());
                    break;
                default:
                    break;
            }
        });
        Map<String,Object> map=new HashMap<>();
        map.put("date",date);
        map.put("number",number);
        return map;
    }

3.6 頁面效果

可點擊按鈕進行查詢

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM