vue实现echart图

news/2025/4/1 19:15:04/文章来源:https://www.cnblogs.com/fger/p/18795945

vue实现echart图

<template>
  <div class="analytics-container">

    <el-row class="form-row" justify="center" align="middle">
      <el-col :span="12">
        <el-form label-width="100px">
          <!-- 第一行:创建时间,选择开始和结束时间 -->
          <el-form-item label="创建时间" class="item">
            <el-row>
              <el-col :span="11">
                <el-date-picker v-model="searchOption.startTime" type="datetime" placeholder="开始时间" style="width: 100%"></el-date-picker>
              </el-col>
              <el-col :span="2" style="text-align: center;">~</el-col>
              <el-col :span="11">
                <el-date-picker v-model="searchOption.endTime" type="datetime" placeholder="结束时间" style="width: 100%"></el-date-picker>
              </el-col>
            </el-row>
          </el-form-item>

          <!-- 第二行:客户端编号 -->
          <el-form-item label="客户端编号" class="item">
            <el-input v-model="searchOption.clientId" placeholder="请输入客户端编号" />
          </el-form-item>

          <!-- Checkbox Group -->
          <el-form-item label="" class="item">
            <el-checkbox-group v-model="checkedList">
              <el-checkbox v-for="(item,index) in checkboxList" v-bind:key="index" :label="item.value">{{ item.label }}</el-checkbox>
            </el-checkbox-group>
          </el-form-item>

          <!-- 提交按钮和关闭按钮 -->
          <el-form-item>
            <el-button type="primary" ref="baseChartBox" @click="onConfirm">确认</el-button>
          </el-form-item>

        </el-form>
      </el-col>
    </el-row>

    <el-row>
      <template v-for="(item, index) in checkboxList">
        <el-col :span="12" v-bind:key="index">
          <div v-show="loadedCharts.includes(item.value)" style="width: 500px; height: 400px;" :ref="'echartRef_' + item.value">{{item.label}}</div>
        </el-col>
      </template>
    </el-row>

  </div>

</template>

<script>

import echarts from 'echarts'

export default {
  name: 'complaintAnalytics',
  data() {
    return {
      index: 0,
      searchOption: {
        startTime: undefined,
        endTime: undefined,
        clientId: undefined
      },
      checkboxList: [
        { label: '抱怨等级柱状图', value: 'a' },
        { label: 'KO抱怨细分柱状图', value: 'b' },
        { label: '管理抱怨细分柱状图', value: 'c' },
        { label: '一般抱怨细分柱状图', value: 'd' },
        { label: '户别投诉饼图', value: 'e' },
      ],
      checkedList: [],   // 选中的列表
      loadedCharts: [],  // 需要加载的Echart图
    }
  },
  methods: {
    onConfirm() {
      this.loadedCharts = this.checkedList.sort();
      this.loadedCharts.forEach((item) => {
        this.initChart(item);
      });
    },

    // 初始化图表
    initChart(item) {
      var echartRef = this.$refs[`echartRef_${item}`][0];
      var chart = echarts.init(echartRef);

      var options = null;
      if (item == "e") {
        options = this.binChartOption(item);
      }
      else {
        options = this.BinAndLineChartOptions(item);
      }
      chart.setOption(options);
    },

    // 获取图表的配置项
    BinAndLineChartOptions(item) {
      var option = {
        title: {
          text: '成绩展示',
          left: 'center',
          textStyle: {
            color: '#333',  // 文本颜色
            fontSize: 16,   // 字号
            fontFamily: 'Arial',  // 字体系列
            fontWeight: 'bold',  // 加粗
          },
        },
        tooltip: {
          trigger: 'axis',
          axisPointer: {
            type: 'cross',
            crossStyle: {
              color: '#999'
            }
          }
        },
        toolbox: {
          feature: {
            dataView: { show: true, readOnly: false },
            magicType: { show: true, type: ['line'] },
            restore: { show: true },
            saveAsImage: { show: true }
          }
        },
        // 图例配置
        legend: {
          data: ['件数', '占比'],
          left: 'center',
          bottom: 0,    //具体像素值或百分比
        },
        xAxis: [
          {
            type: 'category',
            data: ['重大投诉', 'KO抱怨', '一般抱怨', '管理抱怨', '再发抱怨', '反馈'],
            axisPointer: {
              type: 'shadow'
            }
          }
        ],
        yAxis: [
          {
            type: 'value',
            name: '件数',
            min: 0,
            max: 25,
            interval: 5,
            axisLabel: {
              formatter: '{value}'
            }
          },
          {
            type: 'value',
            name: '占比',
            min: 0,
            max: 100,
            interval: 20,
            axisLabel: {
              formatter: '{value} %'
            }
          }
        ],
        series: [
          {
            name: '件数',
            type: 'bar',
            tooltip: {
              valueFormatter: function (value) {
                return value;
              }
            }, itemStyle: {
              color: '#00008B', // 设置颜色1
            },
            data: [
              2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3
            ]
          },
          {
            name: '占比',
            type: 'line',
            yAxisIndex: 1,
            tooltip: {
              valueFormatter: function (value) {
                return value + ' %';
              }
            }, itemStyle: {
              normal: {
                color: '#FFA500',  //圈圈的颜色
                lineStyle: {
                  color: '#FFA500'  //线的颜色
                }
              }
            },
            data: [2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0, 16.5, 12.0, 6.2]
          }
        ]
      };
      return option;
    },

    binChartOption(item) {
      var option = {
        title: {
          text: '各商品销量占比',
          subtext: 'A商场情况分析',
          left: 'center'
        },
        tooltip: {
          trigger: 'item',
          formatter: '{a} <br/>{b} : {c} ({d}%)'
        },
        legend: {
          top: 'bottom',
          data: ['A商品', 'B商品', 'C商品', 'D商品', 'E商品']
        },
        series: [
          {
            name: '所售商品',
            type: 'pie',
            data: [
              { value: 343, name: 'A商品' },
              { value: 250, name: 'B商品' },
              { value: 509, name: 'C商品' },
              { value: 108, name: 'D商品' },
              { value: 948, name: 'E商品' }
            ],
          }
        ]
      };
      return option;
    },
  }
}
</script>

<style lang="scss" scoped>
</style>

效果如下

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/906692.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用IDEA从头创建一个jdbc项目修改数据库数据(mysql+navicat)

0. 参考文档[1] https://blog.csdn.net/PIKapikaaaa/article/details/124113065 [2] https://blog.csdn.net/qq_36816794/article/details/141621264 JDBC是java访问数据库的基石,JDO, Hibernate等只是更好的封装了JDBC。 1、创建项目 IDEA新建一个空项目或者空module 选中 ma…

使用 vxe-table 来实现左边是树,右边是表格联动功能

使用 vxe-table 来实现左边是树,右边是表格联动功能,当需要实现左右两侧联动时,表格 vxe-grid 配合分割模板 vxe-split 就很容易实现了 查看官网:https://vxetable.cn gitbub:https://github.com/x-extends/vxe-table gitee:https://gitee.com/x-extends/vxe-table 预览代…

day:31 pymysql(1)

一、pymysql下载 1、dos下安装: pip3 install pymysql 或pip install pymysql2、在pycharm中下载二、pymysql连接 (1)数据安装好,能连接(2)连接数据库1、连接方式:pymysql.Connection 或者pymysql.connect 2、包含内容 a.host 主机:填写IP地址 b.user 数据库用…

004 - 创建Runners , 就是创建编译node节点服务器

点击Admin:点击CICD 里面的Runner, 这里的CICD和我之前创建的CICD group没有任何关系. 点击 New instance runner 选择linux服务器, 然后点击 How do i install Gitlab Runner, 需要在node节点安装gitlab-runner 工具,让node节点连接到gitlab 服务器 , 然后就可以被gitlab的…

P1223 排队接水

方法1:冒泡排序方法2:sort

Web3.0时代,DAO如何颠覆传统项目管理?2025年组织治理的范式革命

当全球Web3市场规模突破800亿美元,传统项目管理正遭遇前所未有的范式挑战。麦肯锡研究显示,采用去中心化自治组织(DAO)模式的项目,其决策效率比传统架构提升300%,资源浪费减少75%。这场由区块链技术驱动的管理革命,正在重构项目治理的核心逻辑。一、DAO项目治理的三大底…

一文读懂2024!2025往“这”瞧 |《2024 IT行业项目管理调查报告》发布!

在科技一日千里的当下,IT行业始终站在时代前沿,不断推动着社会的发展与进步。 项目管理作为IT行业稳健前行的关键保障,其重要性不言而喻。 为深入洞察IT行业项目管理态势,给从业者提供权威、实用的参考依据,禅道于2024年年底开展了IT行业项目管理调查。 经过严密的数据收集…