vue使用echart示例

<template>
    <el-card shadow="never">
        <template #header>
            <div class="flex justify-between">
                <span class="text-sm">订单统计</span>
                <div>
                    <el-check-tag :checked="current == item.value" type="primary" @change="onChange(item.value)"
                        v-for="(item, index) in options" :key="index" class="m-1">
                        {{ item.text }}
                    </el-check-tag>
                </div>

            </div>
        </template>
        <!-- card body -->
        <div id="chart" style="width:100%;height:300px" ref="el"></div>
    </el-card>

</template>
<script setup>
import { ref, onMounted, onBeforeUnmount } from 'vue';
import * as echarts from 'echarts';
import { getStatistics3 } from '~/api';
//图形大小监测
import { useResizeObserver } from '@vueuse/core'
const current = ref("week")
const options = [
    { text: "近1个月", value: "month" },
    { text: "近1周", value: "week" },
    { text: "近24小时", value: "hour" }]


//图形生成
var myChart = null;

//获取数据
function getData() {

    let option = {
        xAxis: {
            type: 'category',
            data: []
        },
        yAxis: {
            type: 'value'
        },
        series: [
            {
                data: [],
                type: 'bar'
            }
        ]
    };
    // 加载loading
    myChart.showLoading();
    getStatistics3(current.value).then(res => {
        let x = res.x;
        let y = res.y;
        option.xAxis.data = x;
        option.series[0].data = y;
        myChart.setOption(option);
    }).finally(() => {
        // 消除loading
        myChart.hideLoading();
    }

    )
}
// 趋势数据切换
const onChange = (type) => {
    current.value = type;
    // 重新加载趋势图
    getData()
}
//图形大小监测
const el = ref(null)
useResizeObserver(el, (entries) => {
    //浏览器变换时,重新设置图形大小
    myChart.resize()

})

// 挂载时候获取数据
onMounted(() => {
    var chartDom = document.getElementById('chart');
    myChart = echarts.init(chartDom);
    //获取数据
    getData()

})

// 离开前消除图,防止趋势图白屏
onBeforeUnmount(() => {
    if (myChart) echarts.dispose();
})

</script>

 

posted on 2024-09-03 13:52  shisanjun  阅读(13)  评论(0编辑  收藏  举报

导航