vue2+Echart 实现柱状图和折线图组合样式

示例图:

实现代码:

BarLineChart.vue

javascript 复制代码
<!-- 库存周转率 -->
<template>
  <div :class="className" :style="{height:height,width:width}"/>
</template>

<script >
import * as echarts from 'echarts'
require('echarts/theme/macarons') // echarts theme
import resize from './mixins/resize'
import {graphic} from "echarts/lib/export";
export default {
  mixins: [resize],
  props: {
    className: {
      type: String,
      default: 'chart'
    },
    width: {
      type: String,
      default: '98%'
    },
    height: {
      type: String,
      default: '300px'
    },
    autoResize: {
      type: Boolean,
      default: true
    },
    Data: {
      type: Object,
      required: true
    }
  },
  data() {
    return {
      chart: null,
      percentage:0,
    }
  },
  created() {
    this.getPercentage();
  },
  mounted() {

    this.$nextTick(() => {
      this.initChart();
    })
  },
  beforeDestroy() {
    if (!this.chart) {

      return
    }
    this.chart.dispose()
    this.chart = null
  },
  methods: {
    getPercentage(){
      this.percentage=this.Data.outBound.map((outBound,index)=>{
          const inventory=this.Data.inventory[index];
          return(outBound/inventory*100).toFixed(2);
    })},
    initChart(){
      console.log("新添加数据", this.Data)

      this.chart = echarts.init(this.$el, 'macarons')
      this.setOptions(this.Data)
    },
    setOptions(){
      this.chart.setOption({
        tooltip: {
          trigger: "axis",
          backgroundColor: "rgba(0,0,0,.6)",
          borderColor: "rgba(147, 235, 248, .8)",
          textStyle: {
            color: "#FFF",
          },
          axisPointer: {
            type: 'cross'
          },
          padding: [5, 10],

        },
        legend: {
          data: ["出库量", "库存量","周转率"],
          textStyle: {
            color: "#B4B4B4",
          },
          // top: "0",
          bottom:"0",
        },
        grid: {
          left: "50px",
          right: "40px",
          bottom: "50px",
          top: "10px",
        },
        xAxis: {
          data: this.Data.dateData.map(n=>n.substr(-5)),
          axisLine: {
            lineStyle: {
              color: "#B4B4B4",
            },
          },
          axisTick: {
            show: false,
          },
        },
        yAxis: [
          {
            splitLine: { show: false },
            axisLine: {
              lineStyle: {
                color: "#B4B4B4",
              },
            },

            axisLabel: {
              formatter: "{value}",
            },
          },
          {
            splitLine: { show: false },
            axisLine: {
              lineStyle: {
                color: "#B4B4B4",
              },
            },
            axisLabel: {
              formatter: "{value}% ",
            },
          },
        ],
        series: [
          {
            name: "出库量",
            type: "bar",
            barWidth: 10,
            itemStyle: {
              borderRadius: 5,

              color: new graphic.LinearGradient(0, 0, 0, 1, [
                { offset: 0, color: "#956FD4" },
                { offset: 1, color: "#3EACE5" }
              ]),
            },
            data: this.Data.outBound,
          },
          {
            name: "库存量",
            type: "bar",
            barGap: "-100%",
            barWidth: 10,
            itemStyle: {
              borderRadius: 5,
              color: new graphic.LinearGradient(0, 0, 0, 1, [
                { offset: 0, color: "rgba(156,107,211,0.8)" },
                { offset: 0.2, color: "rgba(156,107,211,0.5)" },
                { offset: 1, color: "rgba(156,107,211,0.2)" },
              ]),
            },
            z: -12,
            data: this.Data.inventory,

          },
          {
            name: "周转率",
            type: "line",
            smooth: true,
            showAllSymbol: true,
            symbol: "emptyCircle",
            symbolSize: 8,
            yAxisIndex: 1,
            itemStyle: {
              color: "#F02FC2",
            },
            data: this.percentage,
          },
        ],
      })
    }

  },
}



</script>


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

数据参考:

父页面:index.vue调用BarLineChart.vue

html 复制代码
<el-col :xs="24" :sm="24" :lg="8">
        <div class="chart-wrapper">
          <bar-line-chart :data="lineChartData" v-if="!isLoading1"/>
        </div>
      </el-col>

注意引用

复制代码
import BarLineChart from "./dashboard/BarLineChart"
相关推荐
nbsaas-boot1 小时前
Java 正则表达式白皮书:语法详解、工程实践与常用表达式库
开发语言·python·mysql
chao_7891 小时前
二分查找篇——搜索旋转排序数组【LeetCode】两次二分查找
开发语言·数据结构·python·算法·leetcode
一斤代码1 小时前
vue3 下载图片(标签内容可转图)
前端·javascript·vue
风无雨1 小时前
GO 启动 简单服务
开发语言·后端·golang
斯普信专业组1 小时前
Go语言包管理完全指南:从基础到最佳实践
开发语言·后端·golang
3Katrina2 小时前
深入理解 useLayoutEffect:解决 UI "闪烁"问题的利器
前端·javascript·面试
coderlin_3 小时前
BI布局拖拽 (1) 深入react-gird-layout源码
android·javascript·react.js
我是苏苏3 小时前
C#基础:Winform桌面开发中窗体之间的数据传递
开发语言·c#
伍哥的传说3 小时前
React 实现五子棋人机对战小游戏
前端·javascript·react.js·前端框架·node.js·ecmascript·js
我在北京coding3 小时前
element el-table渲染二维对象数组
前端·javascript·vue.js