示例图:
实现代码:
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"