美文网首页
vue-element动态渲染表头(el-table-colum

vue-element动态渲染表头(el-table-colum

作者: 新篇章 | 来源:发表于2021-02-02 16:15 被阅读0次
    <div class="info-table-item">
      <el-table v-loading="loading" ref="infoTable" :data="growList" height="100%">
        // 产生滚动条fixed时间固定在最左侧
        <el-table-column label="时间" align="center" prop="time" fixed width="130" />
        <template v-for="(item, index) in tableHead">
          // v-for也可以写在el-table-column标签内,:key一定不要用index,否则会因为前后两次渲染的key值一样产生缓存报错,
          取不到值的现象,从而造成表格渲染错位。
          <!-- 一级表头 -->
          <el-table-column :key="item" :label="item" align="center">
            <!-- 二级表头 -->
            <el-table-column :label="tableQuery.moldName" align="center">
              <template slot-scope="scope">
                <span>{{ scope.row[item].number}}</span>
              </template>
            </el-table-column>
            <el-table-column label="增长率" align="center">
              <template slot-scope="scope">
                <!-- 根据正负切换颜色 -->
                <span :class="scope.row[item].rate >= 0 ? red : green">{{ scope.row[item].rate }}%</span>
              </template>
            </el-table-column>
          </el-table-column>
        </template>
      </el-table>
    </div>
    
    //js methods
    getListData() {
      this.loading = true;
      this.creatTime();
      quickContrast(this.searchQuery).then(response => {
        let dataList = [];
        this.status = false;
        const res = response.data;
        this.tableHead = Object.assign([], this.nameList);
        this.tableQuery = Object.assign({}, this.searchQuery);
        for (let i = 0; i < this.chartTime.length; i++) {
          dataList.push({ time: this.chartTime[i] });
          for (let j = 0; j < this.tableHead.length; j++) {
            let name = this.tableHead[j];
            dataList[i][name] = { number: 0, rate: '0.00' };
          }
        }
        for (let i = 0; i < res.length; i++) {
          for (let j = 0; j < dataList.length; j++) {
            if (res[i].ty === dataList[j].time) {
              let qty = this.convertUnit(Number(res[i].qty.toFixed(2)));
              let compare = res[i].compare;
              dataList[j][res[i].objName].number = qty;
              dataList[j][res[i].objName].rate = compare;
            }
          }
        }
        this.growList = dataList;
        // 时间固定最左侧重新渲染列表,不然会错位
        this.$nextTick(() => {
          this.$refs.infoTable.doLayout();
        });
        this.loading = false;
      });
    },
    

    需求:
    1、不同类型的表头来回切换需要动态v-for渲染表头,如([北京、上海、广州、深圳],[大众、丰田、日产、本田],[小型车、紧凑型、中型车、中大型]),表头内容全部由后端传递,每组内容不固定;
    2、一级表头下还需要嵌套两个二级表头(如销量、增长率);
    3、增长率正为红色,负为绿色;
    4、列表产生横向滚动条时,时间一列固定在最左侧。

    相关文章

      网友评论

          本文标题:vue-element动态渲染表头(el-table-colum

          本文链接:https://www.haomeiwen.com/subject/rhuytltx.html