eharts

发布时间 2023-04-12 08:39:50作者: 青&&风

第一章使用、echarts

<template>
  <button @click="updateDate">更换数据</button>
  <div class='home' ref="home">
    home
  </div>
</template>
name:'home'

<script setup>
import * as echarts from 'echarts'
import { onMounted, ref, reactive } from 'vue'
let mycart = null
let home = ref(null)
let myDate = reactive([
  { id: '1', name: '鞋子', xl: 22, kc: 77 },
  { id: '2', name: '绵衣', xl: 33, kc: 33 },
  { id: '3', name: '高跟鞋', xl: 44, kc: 44 },
  { id: '4', name: '袜子', xl: 66, kc: 56 },
  { id: '5', name: '牛仔裤', xl: 99, kc: 89 }
])
let updateDate = () => {
  // 注意:setOptions 可以重复调用,前面数据可以覆盖后面的数据
  mycart.setOption({
    xAxis: {
      data: myDate.map(r => r.name)
    },
    // 系列分类
    series: [
      {
        // 系类名称
        name: '销量',
        // 类型
        type: 'bar',
        // 系列数据
        data: myDate.map(r => r.xl)
      },
      {
        name: '库存',
        type: 'bar',
        data: myDate.map(r => r.kc)
      }
    ]
  })
}

// 绘制图表方法
const initEcharts = () => {
  mycart = echarts.init(home.value)
  mycart.setOption({
    // 标题配置
    title: {
      // 主标题文本
      text: '商品销量排名',
      // 主标题的超链接
      link: 'https://baidu.com',
      // 指定主标题的打开窗口方式
      target: 'blank',
      // 主标题文本样式
      textStyle: {
        color: 'red'
      },
      // 副标题文本
      subtext: '2022年最新数据',
      // 副标题文本样式
      subtextStyle: {
        color: 'green'
      },
      // 边框样式
      borderWidth: 1,
      borderColor: '#369',
      padding: [5, 10],
      borderRadius: 5,
      // 指控标题的位置
      right: '40%',
      top: '5%'
    },
    // 鼠标放到图标上显示数据的提示框
    tooltip: {
      show: true,
      // 触发类型 item 表示在指定的项中触发
      trigger: 'axis',
      // 触发事件的方式
      triggerOn: 'click',
      // 自定义提示框
      formatter: (r) => {
        const total = r.map(r => r.value).reduce((r, s) => r + s, 0)
        return `
          <div>
            <h4>${r[0].axisValue}</h4>
              <div>${r[0].marker} 
              <span>${r[0].seriesName}:${r[0].value}</span>
              </div>
              <div>${r[1].marker} 
              <span>${r[1].seriesName}:${r[1].value}</span>
              </div>
              <div>
                ${r[0].marker}
                <span>总计:${total}</span>
              </div>
          </div>
         `
      }
    },
    // x坐标系
    xAxis: {
      // 坐标轴类型 默认是 category
      type: 'category',
      // 坐标轴数据
      data: ['衬衫', '羊毛衫', '雪纺衫', '裤子', '高跟鞋', '袜子']
    },
    // y轴坐标系
    yAxis: {
      // 数值轴
      type: 'value'
      // 数值轴的数据来源于系列的数据
    },
    // 系列分类
    series: [
      {
        // 系类名称
        name: '销量',
        // 类型
        type: 'bar',
        // 系列数据
        data: [5, 20, 36, 40, 10, 20]
      },
      {
        name: '库存',
        type: 'bar',
        data: [4, 22, 40, 18, 23, 30]
      }
    ],
    // 图标绘制区域
    grid: {
      show: true,
      borderWidth: 1,
      borderColor: 'red',
      // 控制图标在容器中的位置
      left: '10%',
      right: '10%',
      top: '20%',
      bottom: '5%',
      // 计算方位是否包含lable 默认是false
      containLabel: true,
      // 设置阴影
      showCursor: 'red',
      shadowBlur: 10
    },
    // 图例组件
    legend: {
      borderWidth: 1,
      borderColor: '#ccc',
      padding: 10,
      // 图列的布局
      left: '1%',
      top: '50%',
      // 图列的布局方向
      orient: 'vertical',
      icon: 'triangle'
    },
    // 工具栏
    toolbox: {
      // 各个工具配置项
      feature: {
        // 保存为图片
        saveAsImage: {},
        // 动态切换类型
        magicType: {
          // 这里设置的是折线图,柱状图,堆叠图
          type: ['line', 'bar', 'stack']
        },
        // 数据区域缩放
        dataZoom: {},
        // 数据视图工具
        dataView: {}
      }
    }
  })
}

onMounted(() => {
  initEcharts()
  // 注册窗口大小改变事件
  window.addEventListener('resize', () => {
    // 监听到窗口大小在发生改变时echarts也跟着发生改变自适应
    mycart.resize()
  })
})
</script>
<style scoped lang='scss'>
.home {
  width: 95%;
  height: 600px;
  border: 1px solid #ccc;
}
</style>