You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

204 lines
4.4 KiB
Vue

<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";
export default {
mixins: [resize],
props: {
className: {
type: String,
default: "chart",
},
width: {
type: String,
default: "100%",
},
height: {
type: String,
default: "300px",
},
autoResize: {
type: Boolean,
default: true,
},
chartData: {
type: Object,
// required: true,
default: {},
},
},
data() {
return {
chart: null,
};
},
watch: {
chartData: {
deep: true,
handler(newValue, oldValue) {
this.chart.dispose();
this.chartData = newValue;
this.initChart(); //值发生改变则渲染一次echarts
},
},
},
mounted() {
// debugger
this.$nextTick(() => {
this.initChart();
});
},
beforeDestroy() {
if (!this.chart) {
return;
}
this.chart.dispose();
this.chart = null;
},
methods: {
initChart() {
this.chart = echarts.init(this.$el, "macarons");
this.setOptions(this.chartData);
},
setOptions({ seriesNames, xAxisDatas, seriesDatas } = {}) {
var fontColor = "#30eee9";
var yDatas = [];
var xAxisDatas = [];
if (this.chartData) {
xAxisDatas = this.chartData.xAxisDatas;
yDatas = this.chartData.yDatas;
}
let max = Math.max(...yDatas);
this.chart.setOption({
grid: {
left: "5%",
right: "5%",
top: "10%",
bottom: "0%",
containLabel: true,
},
tooltip: {
show: true,
trigger: "item",
},
legend: {
show: true,
x: "center",
y: "35",
icon: "stack",
itemWidth: 10,
itemHeight: 10,
textStyle: {
color: "#1bb4f6",
},
data: ["已采纳", "已发布", "浏览量"],
},
xAxis: [
{
type: "category",
boundaryGap: false,
axisLabel: {
color: fontColor,
},
axisLine: {
show: true,
lineStyle: {
color: "#397cbc",
},
},
axisTick: {
show: false,
},
splitLine: {
show: false,
lineStyle: {
color: "#195384",
},
},
data: xAxisDatas,
},
],
yAxis: [
{
type: "value",
name: "数量(箱)",
min: 0,
max: max + 100,
axisLabel: {
formatter: "{value}",
textStyle: {
color: "#2ad1d2",
},
},
axisLine: {
lineStyle: {
color: "#27b4c2",
},
},
axisTick: {
show: false,
},
splitLine: {
show: false,
lineStyle: {
color: "#11366e",
},
},
},
],
series: [
{
name: "产量",
type: "line",
symbol: "circle",
symbolSize: 8,
smooth: false,
itemStyle: {
normal: {
color: "#0092f6",
lineStyle: {
color: "#0092f6",
width: 1,
},
areaStyle: {
//color: '#94C9EC'
color: new echarts.graphic.LinearGradient(0, 1, 0, 0, [
{
offset: 0,
color: "rgba(7,44,90,0.3)",
},
{
offset: 1,
color: "rgba(0,146,246,0.9)",
},
]),
},
label: {
show: true,
position: "top",
},
},
},
markPoint: {
itemStyle: {
normal: {
color: "red",
},
},
},
data: yDatas,
// data:[]
},
],
});
},
},
};
</script>