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"
相关推荐
lntu_ling2 小时前
Python-基于Haversine公式计算两点距离
开发语言·python·gis算法
ShineWinsu7 小时前
对于C++:继承的解析—上
开发语言·数据结构·c++·算法·面试·笔试·继承
小付同学呀8 小时前
C语言学习(五)——输入/输出
c语言·开发语言·学习
梦幻精灵_cq8 小时前
学C之路:不可或缺的main()主函数框架(Learn-C 1st)
c语言·开发语言
消失的旧时光-19438 小时前
C++ 多线程与并发系统取向(二)—— 资源保护:std::mutex 与 RAII(类比 Java synchronized)
java·开发语言·c++·并发
福大大架构师每日一题9 小时前
go-zero v1.10.0发布!全面支持Go 1.23、MCP SDK迁移、性能与稳定性双提升
开发语言·后端·golang
五阿哥永琪10 小时前
1. 为什么java不能用is开头来做布尔值的参数名,会出现反序列化异常。
java·开发语言
逻极10 小时前
pytest 入门指南:Python 测试框架从零到一(2025 实战版)
开发语言·python·pytest
你的冰西瓜11 小时前
C++ STL算法——排序和相关操作
开发语言·c++·算法·stl
海边的Kurisu11 小时前
Mybatis-Plus | 只做增强不做改变——为简化开发而生
java·开发语言·mybatis