自己封装vue echart组件 方便调用
<template>
<div>
<div ref="lineChart" :style="{ width: width, height: height }"></div>
</div>
</template>
<script>
import echarts from 'echarts'
import resize from './mixins/resize'
require('echarts/theme/macarons') // echarts theme
export default {
mixins: [resize],
props: {
className: {
type: String,
default: 'chart'
},
width: {
type: String,
default: '100%'
},
height: {
type: String,
default: '280px'
},
autoResize: {
type: Boolean,
default: true
},
chartData: {
type: Object,
required: false
}
},
watch: {
chartData: {
handler(val) {
this.resData = val;
this.$nextTick(function(){ //页面加载完成后执行
this.updateChartData();
})
},
immediate:true,
deep: true
}
},
data() {
// var resData = null;
const lincolors = ['#77c940', '#16afd4']
return {
myChart: null,
resData:null,
lincolors: ['#77c940', '#16afd4'] //色系条
}
},
created() {
/* var resData = {
ydata: [834.58, 1811.34, 3002.46, 4335.15, 5867, 7235.28, 7464.57],
xdata: ["2022-05", "2022-06", "2022-07", "2022-08", "2022-09"]
} */
},
mounted() {
},
methods: {
// 更新统计表数据
updateChartData() {
let xdata = this.resData.xAxis||this.resData.xdata;
let ydata = this.resData.series||this.resData.ydata;
let chartType=this.resData.chartType;
let colorList=this.resData.colorList;
console.log("********-------------------------********",xdata,ydata)
this.initChart('lineChart', xdata, ydata,chartType,colorList);
},
initChart(dom, xValue, yValue,chartType,colorList) {
if (this.myChart != null && this.myChart != "" && this.myChart != undefined) {
this.myChart.dispose();//销毁
}
// this.myChart = this.$echarts.init(this.$refs.lineChart);
this.myChart = this.$echarts.init(this.$refs.lineChart, 'macarons');
let seriesList=yValue.map(res=>{
let item={
name: res.name,
type: chartType || res.type || 'line',
// stack: 'Total',
areaStyle: {},
emphasis: {
focus: 'series'
},
data:res.data
}
return item;
})
let legendList=yValue.map(item=>item.name);
let options = {
legend: {
data: legendList,
show:true,
left :'left', //center right
// orient:'vertical'
// align:'right',
// type:'plain' //plain
},
color: colorList||this.lincolors,
// title: { text: '一般折线图', left: 'center' },
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross',
label: {
backgroundColor: '#6a7985'
}
}
},
toolbox: {
show: false
},
grid: {
left: '3%',
right: '4%',
top: '60px',
bottom: '8%',
containLabel: true
},
xAxis:
{
type: 'category',
boundaryGap: true,
data: xValue
},
yAxis: [
{
// name:'单位(万/KWh))',
type: 'value'
}
],
series: seriesList
/* series: [
{
name: 'Email',
type: 'line',
stack: 'Total',
areaStyle: {},
emphasis: {
focus: 'series'
},
data: [120, 132, 101, 134, 90, 230, 210]
},
{
label: {
color: '#000',
show: true,
position: 'top'
},
data: yValue,
type: 'line',
smooth: true,
symbol: 'circle', //折线点设置为实心点
symbolSize: 10, //折线点的大小
areaStyle: {}
}
] */
}
this.myChart.setOption(options);
}
}
}
</script>
<style>
</style>
父组件调用
<template>
<div class="app-container">
<el-container>
<el-aside class="asidebar" width="400px">
<treeMenu />
</el-aside>
<el-main>
<el-row class="mb20" :gutter="20">
<el-col :span="8">
<el-card class="box-card" style="text-align:center">
<epie2 class="Rel" name="20万元" count="40" title="能耗成本"></epie2>
</el-card>
</el-col>
<el-col :span="8">
<el-card class="box-card" style="text-align:center">
<epie2 class="Rel" name="8万度" count="80" title="设备总电量"></epie2>
</el-card>
</el-col>+
<el-col :span="8">
<el-card class="box-card" style="text-align:center">
<epie2 class="Rel" name="20万元" count="40" title="能耗成本"></epie2>
</el-card>
</el-col>
</el-row>
<el-row class="mb20">
<el-col :span="24">
<!-- <Histogram /> -->
<el-card class="box-card">
<lineChart width="100%" height="500px" :chartData="lineData" v-if="lineData"></lineChart>
</el-card>
</el-col>
</el-row>
<el-row class="mb20" :gutter="20">
<el-col :span="12">
<el-card class="box-card">
<div slot="header" class="clearfix">
<span>卡片名称</span>
<!-- <el-button style="float: right; padding: 3px 0" type="text">操作按钮</el-button> -->
</div>
<lineChart width="90%" height="300px" :chartData="lineData2" v-if="lineData2"></lineChart>
</el-card>
</el-col>
<el-col :span="12">
<el-card class="box-card">
<div slot="header" class="clearfix">
<span>卡片名称</span>
<!-- <el-button style="float: right; padding: 3px 0" type="text">操作按钮</el-button> -->
</div>
<lineChart width="90%" height="300px" :chartData="lineData2" v-if="lineData2"></lineChart>
</el-card>
</el-col>
</el-row>
</el-main>
</el-container>
</div>
</template>
<script>
import PanelGroup from './com/PanelGroup.vue'
import Histogram from './com/Histogram.vue'
import treeMenu from './com/deviceBar.vue'
import lineChart from './com/LineCommom.vue' //引用地址
import epie2 from './com/e-pie2.vue'
import { data } from "./tableJson";
export default {
components: {
lineChart,
treeMenu,
Histogram,
epie2
},
data() {
return {
tableData: data,
lineData: null,
lineData2: null
}
},
created() {
console.log(this.dataObject);
// this.lineData = {
// series: [
// [28, 67, 8, 24, 18, 26, 55,],
// [58, 18, 26, 55, 67, 8, 24],
// [83, 183, 246, 45, 57, 28, 47]
// ],
// xAxis: ["2022-05", "2022-06", "2022-07", "2022-08", "2022-09"]
// }
this.lineData = {
series: [
{
name: '总电量',
type: 'line',
data: [28, 6, 28, 6, 28, 566, 280]
},
{
name: '总电流',
type: 'bar',
data: [58, 48, 236, 25, 10, 68, 105]
},
{
name: '总电压',
type: 'scatter',
data: [122, 6, 190, 140, 108, 22, 26]
},
],
xAxis: ["2022-05", "2022-06", "2022-07", "2022-08", "2022-09", "2022-10"],
chartType: 'line',
// colorList:['#000',"#f90",'#ddd']
}
this.lineData2 = {
series: [
{
name: '总电量',
type: 'line',
data: [28, 6, 28]
},
{
name: '总电流',
type: 'bar',
data: [58, 68, 105]
},
{
name: '总电压',
type: 'scatter',
data: [122, 6, 190]
},
],
xAxis: ["2022-05", "2022-06", "2022-07"],
chartType: 'bar',
colorList: ['#000', "#f90", '#3782c9']
}
},
/*
{
name: 'Email'+res,
type: 'line', // line直线 bar柱状 scatter散点
stack: 'Total',
areaStyle: {},
emphasis: {
focus: 'series'
},
data:[28, 67, 8, 24, 18, 26, 55],
}
*/
methods: {
format(percentage) {
return `${percentage}台`;
}
}
}
</script>
<style lang="scss" scoped>
.el-main {
padding: 0;
}
.el-aside {
padding-top: 0;
}
.asidebar {
background-color: white;
}
.font0 {
font-size: 20px;
}
</style>
红色子部分为关键代码 可以通过配置完成各种echart图标设配

浙公网安备 33010602011771号