需求效果图示例
实际完成效果图
*逻辑实现
==table表格为二次封装的子组件
==触发tab 标签 表格内容的顺序更改 如图
==在table表格中 根据 scope.index动态设置元素的id ,便于指定单元格的echarts初始化;
==在单元格中触发一个方法,传入当前的scope.row数据或者指定其他数据,并且传入 scope.$index 以及一个字符串便于识别当前是哪条数据的charts
====表格渲染时触发绘图方法,传入对应数据
<el-table-column
:label="tableTitle=='sale'?'每日收藏趋势':'每日销量趋势'"
align="center"
v-if="dateType != '1'"
>
<template slot-scope="scope">
<div v-if="tableTitle=='sale'">
{{ drawEcharts(scope.row, scope.$index, 'fav', calcShelfTime(scope.row.real_created_time, '0')) }}
<div :id="`tiger-fav-trend-index` + scope.$index" class="tiger-trend-charts"></div>
</div>
<div v-else>
{{ drawEcharts(scope.row, scope.$index, 'sale', calcShelfTime(scope.row.real_created_time, '0')) }}
<div :id="`tiger-sale-trend-index` + scope.$index" class="tiger-trend-charts" />
</div>
</template>
</el-table-column>
===绘制echarts的方法(数据仅为示例,实际开发根据传进来的scope.row数据 || 或者别的data)注意此处初始化echarts对象时采用VUE的this.$nextTick方法,以防获取不到未渲染的节点元素。
drawEcharts() {
//绘制趋势echarts
let xdata = [];
let seriesData = null;
// 比较上架天数以及当前选取的区间 取最小值截取
let minRange = parseInt(this.dateType) - parseInt(arguments[3]) >= 0 ? arguments[3] : this.dateType;
for (const key in this.trendData) {
if (this.trendData.hasOwnProperty(key) && key == arguments[0]['id']) {
xdata = this.trendData[key]['dates'].slice(Number('-' + minRange));
seriesData = args =>
({
sale: this.trendData[key]['values_sale'].slice(Number('-' + minRange))
}[args] || this.trendData[key]['values_favorite'].slice(Number('-' + minRange)));
}
}
let option = {
tooltip: {
padding: [3],
trigger: 'axis',
// confine: true,
formatter: '{b}<br>{c}',
position: [20, -5]
},
grid: {
top: 'center'
// containLabel: true
},
xAxis: {
show: false,
type: 'category',
boundaryGap: false,
data: xdata
},
yAxis: {
show: false,
type: 'value'
},
series: [
{
name: '每日销量趋势',
type: 'line',
data: seriesData(arguments[2])
}
]
};
let chartId = 'tiger-' + arguments[2] + '-trend-index' + arguments[1];
this.$nextTick(() => {
let myChart = this.echarts.init(document.getElementById(chartId), 'macarons');
myChart.setOption(option);
myChart.resize();
});
},
AND 不要忘记设置echarts的高度,否则一辈子也出不来图形(示例,根据实施开发调整)
&-frame {
display: flex;
flex-flow: column nowrap;
justify-content: space-between;
.price-bar {
color: red !important;
}
.tiger-trend-charts {
height: 60px;
min-width: 100px;
}
}