<template>
  <div>
      <table class="help-table">
        <tr v-for="(itemTr, indexTr) in tableData" :key="indexTr">
          <td
            :colspan="itemTd.colspan"
            :rowspan="itemTd.rowspan"
            v-for="(itemTd, indexTd) in itemTr"
            :key="indexTd"
          >
            {{ itemTd.name }}
          </td>
        </tr>
      </table>
  </div>
</template>
<script>
export default {
  data() {
    return {
      tableData: [
            ["周一","周一","周一","周三"],
            ["语文","数学","英语","体育"],
            ["语文","英语","数学","体育"]
        ],
    };
  },
  created() {
        //单元格行和列合并
        this.tableData = this.colspanData(this.tableData);
    },
  computed: {},
  watch: {

  },
  methods: {

    //合并行和列
    colspanData(data) {
      //合并行
      let colspanData = [];
      for (let i = 0; i < data.length; i++) {
        let rowsArray = [];
        second: for (let j = 0; j < data[i].length; j++) {
          let obj = {
            name: data[i][j],
            colspan: 1, //列
            rowspan: 1, //行
          };
          if (rowsArray.length > 0) {
            for (let k = 0; k < rowsArray.length; k++) {
              if (data[i][j] === rowsArray[k].name) {
                rowsArray[k].colspan++;
                continue second;
              }
            }
          }
          rowsArray.push(obj);
        }
        colspanData.push(rowsArray);
      }
      //合并列
      return this.rowspanData(colspanData);
    },

    //合并列
    rowspanData(data) {
      for (let i = data.length; i > 0; i--) {
        if (data[i - 2]) {
          if (data[i - 1].length === data[i - 2].length) {
            for (let j = data[i - 1].length; j > 0; j--) {
              if (typeof data[i - 1][j - 1].name != "number") {
                if (data[i - 1][j - 1].name === data[i - 2][j - 1].name) {
                  //如果与上一个元素相同,上一个元素的rowspan+当前的rowspan值
                  data[i - 2][j - 1].rowspan += data[i - 1][j - 1].rowspan;
                  //如果与上一个元素相同,删除当前元素
                  data[i - 1].splice(j - 1, 1);
                }
              }
            }
          }
        }
      }
      return data;
    },
  },
};
</script>
<style lang="scss" scoped>
.help-table {
  width: 100%;
  border: 1px solid #ddd;
  background: #f6f6f6;
  line-height: 2em;
  border-collapse: collapse;
  padding: 0;
  th,
  td {
    text-align: center;
    border-right: 1px solid #ddd;
  }
  td {
    border-top: 1px solid #ddd;
  }
  th.end,
  td.end {
    border-right: 0;
  }
  .selectable {
    background: #fff;
  }
}
.description {
  padding: 10px 0;
}
</style>

 

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐