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"
相关推荐
重庆兔巴哥几秒前
如何检查Java环境变量是否配置成功?
java·开发语言
yue0082 分钟前
C#读取App.Config配置文件
开发语言·c#
hyl200128 分钟前
c++ SCIP求解整数规划模型
开发语言·c++
echome8888 分钟前
Python 装饰器详解:从入门到实战
开发语言·python
奇树谦8 分钟前
QMap 全面解析(Qt5 vs Qt6)
开发语言·qt
sqyno1sky9 分钟前
代码动态生成技术
开发语言·c++·算法
早點睡3909 分钟前
ReactNative项目OpenHarmony三方库集成实战:react-native-linear-gradient-text
javascript·react native·react.js
中科三方10 分钟前
域名管理常见问题:添加域名解析多久生效?为什么不能马上生效?
开发语言·php
廖圣平11 分钟前
Drogon 现代化C ++高性能框架
android·c语言·开发语言
2401_8535765014 分钟前
C++中的策略模式变体
开发语言·c++·算法