VUE + elementui-table组件 在table-cell单元格中绘制微型echarts图

需求效果图示例
在这里插入图片描述

实际完成效果图
在这里插入图片描述
*逻辑实现
==table表格为二次封装的子组件
==触发tab 标签 表格内容的顺序更改 如图
==在table表格中 根据 scope.index动态设置元素的id ,便于指定单元格的echarts初始化;
==在单元格中触发一个方法,传入当前的scope.row数据或者指定其他数据,并且传入 scope.$index 以及一个字符串便于识别当前是哪条数据的charts

触发tab 标签  表格内容的顺序更
触发tab 标签  表格内容的顺序更

====表格渲染时触发绘图方法,传入对应数据

   <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;
    }
  }
  • 8
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值