简单封装前端图表v-charts

准备

安装v-charts依赖

npm i v-charts echarts -S

vue页面

可直接使用

<template>
  <div>
    <div style="display:flex;flex-direction:row;">
      <div class="title">{{ title }}</div>
    </div>
    <ve-line
      :extend="chartExtend"
      :height="height"
      :style="{'margin-top': title ? '' : '26px'}"
    />
  </div>
</template>

<script>
export default {
  props: {
    chartData: {
      type: Object,
      default: () => {}
    },
    height: {
      type: String,
      default: '300px'
    },
    chartExtends: {
      type: Object,
      default: () => {}
    },
    title: {
      type: String,
      default: ''
    },
    visualMap: {
      type: Object,
      default: () => {}
    },
    showTool: {
      type: Boolean,
      default: true
    }
  },
  data() {
    return {
      chartExtend: {
        series: [],
        legend: {
          data: this.chartData.title
        },
        grid: {
          left: 20,
          right: 20
        },
        toolbox: {
          show: this.showTool,
          feature: {
            magicType: {
              type: ['line', 'bar'],
              option: {
                line: {
                  type: 'line',
                  smooth: false
                }
              }
            },
            saveAsImage: {
              show: true,
              title: '保存'
            }
          }
        },
        visualMap: {
          orient: 'horizontal',
          left: '4%'
        },
        xAxis: {
          boundaryGap: false,
          type: 'category',
          data: this.chartData.row
        },
        yAxis: {
        }
      }
    }
  },
  watch: {
    chartData: {
      deep: true,
      immediate: true,
      handler(val) {
        console.log('chartData', val)
        const series = val.columns.map((item, index) => {
          return {
            type: 'line',
            data: item,
            name: val.title[index],
            color: val.color ? val.color[index] : '',
            smooth: false,
            animationDuration: 1000,
            animationEasing: 'quinticIn'
          }
        })
        this.chartExtend.series = series
      }
    },
    chartExtends(val) {
      this.chartExtend = { val, ...this.chartExtend }
    },
    visualMap: {
      immediate: true,
      deep: true,
      handler(val) {
        console.log(val)
        if (val) {
          this.chartExtend.visualMap = { ...this.chartExtend.visualMap, ...val, show: true }
          return
        }
        delete this.chartExtend.visualMap
      }
    }
  }
}
</script>

<style lang="scss" scoped>
    .title{
        width: 100%;
        font-size: 23px;
        font-weight: 600;
    }
</style>

组件api

  • chartData (Object)
    图表展示数据,属性有:
    columns:显示数据,必填
    row:x轴节点列表,必填
    title:数据名(系列名)
    color:数据颜色(系列颜色)
    例:
chartData: {
    title: ['订单', '销售'],
    color: ['#4e7b3f','#008771'],
    columns: [[12, 345, 79, 123, 75, 546, 451], [34, 51, 125, 75, 256, 456, 123]],
    row: ['02-01', '02-02', '02-03', '02-04', '02-05', '02-06', '20-07']
},
  • height (String)
    图表的高度,符合css样式规则
  • chartExtends
    图表设置
    具体到 echarts api 根据需求配置
  • title
    图表的标题,也可以去 chartExtends 配置原生标题
  • visualMap
    配置 visualMap 属性,主要功能是设置不同阶段的颜色
    具体到 echarts api 根据需求配置
  • showTool
    是否显示工具类,仅配置折线图,柱状图,保存为图片三个设置,如需更多或自定义工具,可以到 chartExtends 配置
    具体配置方法到 echarts api 查询

注意

图表使用都是 canvas 进行绘图展示,需要一个独立的容器进行展示,有层级覆盖等问题,不推荐层级控制。如只需要展示数据,可以在组件外边套一个

<div style="position: relative;z-index: -1;">

</div>

控制其层级,使用此方法将无法使用其工具类方法。

使用例子

<div style="display: flex;flex-direction: row;justify-content: space-around;">
  <div style="width:49%;">
    <charts :chart-data="chartData" title="订单统计" :visual-map="visualMap" />
  </div>
  <div style="width:49%">
    <charts :chart-data="chartData" title="销售统计" :data-select="false" />
  </div>
</div>
data() {
    return {
      chartData: {
        title: ['订单', '销售'],
        color: ['#4e7b3f','#008771'],
        columns: [[12, 345, 79, 123, 75, 546, 451], [34, 51, 125, 75, 256, 456, 123]],
        row: ['02-01', '02-02', '02-03', '02-04', '02-05', '02-06', '20-07']
      },
      visualMap: {
        pieces: [
          { lte: 100, color: '#000' },	// gt大于  lte小于  color设置颜色
          { gt: 100, lte: 200, color: '#444' },
          { gt: 200, lte: 300, color: '#222' },
          { gt: 300, lte: 400, color: '#666' },
          { gt: 400, lte: 500, color: '#888' },
          { gt: 500, lte: 600, color: '#aaa' }
        ],
        outOfRange: {
          color: '#409EFF'	// 范围之外的颜色(默认颜色)会覆盖掉配置好的颜色
        }
      }
  },

效果图

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340