最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue element table表格相同名稱列合并方式

 更新時間:2022年10月19日 08:47:49   作者:發(fā)根強(qiáng)勁  
這篇文章主要介紹了vue element table表格相同名稱列合并方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

element table表格相同名稱列合并

<template>
  <div>
    <el-table show-summary :summary-method="getSummaries" :span-method="objectSpanMethod" :data="tableData" row-key="id" ref="tableDom" border>
      <el-table-column label="序號" width="55" align="center">
        <template slot-scope="scope">{{ scope.$index + 1 }}</template>
      </el-table-column>
      <el-table-column prop="name" label="分類" align="center"></el-table-column>
      <el-table-column prop="num1" label="數(shù)量1" align="center"></el-table-column>
      <el-table-column prop="num2" label="數(shù)量2" align="center"></el-table-column>
      <el-table-column prop="num3" label="數(shù)量3" align="center"></el-table-column>
      <el-table-column prop="type" label="類型" align="center"></el-table-column>
      <el-table-column prop="num4" label="數(shù)量4" align="center"></el-table-column>
      <el-table-column prop="num5" label="數(shù)量5" align="center"></el-table-column>
    </el-table>
  </div>
</template>
<script>
export default {
  name: '',
  components: {},
  props: {},
  data() {
    return {
      tableData: [{
        name: '名稱1',
        num1: '2',
        num2: '3',
        num3: '4',
        num4: '連續(xù)',
        num5: '6',
        num6: '7',
      }, {
        name: '名稱2',
        num1: '2',
        num2: '3',
        num3: '4',
        num4: '連續(xù)',
        num5: '6',
        num6: '7',
      }, {
        name: '名稱2',
        num1: '2',
        num2: '3',
        num3: '4',
        num4: '連續(xù)',
        num5: '6',
        num6: '7',
      }, {
        name: '名稱3',
        num1: '2',
        num2: '3',
        num3: '4',
        num4: '連續(xù)',
        num5: '6',
        num6: '7',
      }, {
        name: '名稱4',
        num1: '2',
        num2: '3',
        num3: '4',
        num4: '連續(xù)',
        num5: '6',
        num6: '7',
      }, {
        name: '名稱4',
        num1: '2',
        num2: '3',
        num3: '4',
        num4: '連續(xù)',
        num5: '6',
        num6: '7',
      }]
    }
  },
  filters: {},
  computed: {},
  watch: {},
  created() {},
  mounted() {},
  beforeDestroy() {},
  methods: {
    // 合計
    getSummaries (param) {
      const { columns, data } = param
      const sums = []
      columns.forEach((column, index) => {
        if (index === 0) {
          sums[index] = '合計'
        } else if (index === 2 || index === 7) {
          const values = data.map(item => Number(item[column.property]))
        if (!values.every(value => isNaN(value))) {
          sums[index] = values.reduce((prev, curr) => {
            const value = Number(curr)
            if (!isNaN(value)) {
              return prev + curr
            } else {
              return prev
            }
          }, 0)
        } else {
          sums[index] = ''
        }
        } else {
          sums[index] = ''
        }
      })
      return sums
    },
    // table合并列
    objectSpanMethod({ row, column, rowIndex, columnIndex }) {
      let data = this.tableData; //拿到當(dāng)前table中數(shù)據(jù)
      let cellValue = row[column.property]; //當(dāng)前位置的值
      let noSortArr = ['num1', 'num2', 'num3', 'num4', 'num5', 'num6']; //不需要合并的字段(不進(jìn)行合并行的prop)
      if (cellValue && !noSortArr.includes(column.property)) {
        let prevRow = data[rowIndex - 1]; //獲取到上一條數(shù)據(jù)
        let nextRow = data[rowIndex + 1]; //下一條數(shù)據(jù)
        if (prevRow && prevRow[column.property] === cellValue) { //當(dāng)有上一條數(shù)據(jù),并且和當(dāng)前值相等時
          return { rowspan: 0, colspan: 0 };
        } else {
          let countRowspan = 1;
          while (nextRow && nextRow[column.property] === cellValue) { //當(dāng)有下一條數(shù)據(jù)并且和當(dāng)前值相等時,獲取新的下一條
            nextRow = data[++countRowspan + rowIndex];
          }
          if (countRowspan > 1) {
            return { rowspan: countRowspan, colspan: 1 };
          }
        }
      }
    },
  }
}
</script>
<style scoped lang="less">
</style>
  

對table表格相同內(nèi)容行的合并

在vue開發(fā)中會有對表格的操作,有時因為需要遍歷的情況不同,對于數(shù)據(jù)相同行處理時,使用element的table不太好實現(xiàn),還是使用html的table標(biāo)簽!

而此時,對于相同數(shù)據(jù)行,使用rowspan進(jìn)行合并則無法更好的遍歷數(shù)據(jù),比如我們要實現(xiàn)這樣的表格

 數(shù)據(jù)格式一看,使用遍歷的話會更好實現(xiàn),這個時候表格是這樣的

 這個時候可以使用方法獲取相同內(nèi)容行,對其進(jìn)行處理,方法如下

 mergeTable() {  //table表合并相同內(nèi)容的行
      var tab = document.getElementById("subtable");
      var maxCol = 3, val, count, start;
      // var ys = "";
      for (var col = maxCol - 1; col >= 0 ; col--) {
        count = 1;
        val = "";
        for (var i = 0; i < tab.rows.length; i++) {
          if (val == tab.rows[i].cells[col].innerHTML) {
            count++;
          } else {
          if (count > 1) {
            //合并 
            start = i - count;
            tab.rows[start].cells[col].rowSpan = count;
            for (var j = start + 1; j < i; j++) { // 
                tab.rows[j].cells[col].style.display = "none";
                tab.rows[j].removeChild(tab.rows[j].cells[col]);
            }
            count = 1;
            }
            val = tab.rows[i].cells[col].innerHTML;
          }
        }
 
          if (count > 1) { //合并,最后幾行相同的情況下 
            start = i - count;
            tab.rows[start].cells[col].rowSpan = count;
            for (var j = start + 1; j < i; j++) {
              tab.rows[j].removeChild(tab.rows[j].cells[col]);
            }
          }
      }
    }

然后在生命周期函數(shù)這調(diào)用該方法即可實現(xiàn)對相同內(nèi)容行的合并操作!

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue2?element?實現(xiàn)表格點(diǎn)擊詳情返回時保留查詢參數(shù)的示例代碼

    vue2?element?實現(xiàn)表格點(diǎn)擊詳情返回時保留查詢參數(shù)的示例代碼

    這篇文章主要介紹了vue2?element?實現(xiàn)表格點(diǎn)擊詳情返回時保留查詢參數(shù)的示例代碼,本文通過圖文示例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • vue 使用class創(chuàng)建和清除水印的示例代碼

    vue 使用class創(chuàng)建和清除水印的示例代碼

    這篇文章主要介紹了vue 使用class創(chuàng)建和清除水印的示例代碼,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下
    2020-12-12
  • Vue數(shù)據(jù)更新視圖未更新的幾種解決方案

    Vue數(shù)據(jù)更新視圖未更新的幾種解決方案

    本文主要介紹在vue項目中,遇到數(shù)據(jù)更新但視圖不更新的情況時,無法使用watch監(jiān)聽、無法使用this.$set方法,同時使用this.$forceUpdate()無效時,所使用的解決方案,需要的朋友可以參考下
    2024-02-02
  • 基于vue中對鼠標(biāo)劃過事件的處理方式詳解

    基于vue中對鼠標(biāo)劃過事件的處理方式詳解

    今天小編就為大家分享一篇基于vue中對鼠標(biāo)劃過事件的處理方式詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • Vue3進(jìn)行樣式Scoped和Global的設(shè)置方法

    Vue3進(jìn)行樣式Scoped和Global的設(shè)置方法

    在 Vue 3 中,組件化開發(fā)成為了我們提升前端開發(fā)效率的利器,其中,樣式的管理也是一個至關(guān)重要的部分,在 Vue 中,我們會經(jīng)常使用兩種樣式作用域:Scoped 樣式和 Global 樣式,本文將通過示例代碼來介紹Vue3如何進(jìn)行樣式Scoped和Global的設(shè)置,需要的朋友可以參考下
    2025-01-01
  • vue自定義全局共用函數(shù)詳解

    vue自定義全局共用函數(shù)詳解

    今天小編就為大家分享一篇vue自定義全局共用函數(shù)詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • vue子組件如何使用父組件傳過來的值

    vue子組件如何使用父組件傳過來的值

    這篇文章主要介紹了vue子組件如何使用父組件傳過來的值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • vue+eslint+vscode配置教程

    vue+eslint+vscode配置教程

    這篇文章主要介紹了vue+eslint+vscode配置教程,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • vue移動端模態(tài)框(可傳參)的實現(xiàn)

    vue移動端模態(tài)框(可傳參)的實現(xiàn)

    這篇文章主要介紹了vue移動端模態(tài)框(可傳參)的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • vue 根據(jù)選擇條件顯示指定參數(shù)的例子

    vue 根據(jù)選擇條件顯示指定參數(shù)的例子

    今天小編就為大家分享一篇vue 根據(jù)選擇條件顯示指定參數(shù)的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11

最新評論

河北区| 夏津县| 樟树市| 临颍县| 山丹县| 安顺市| 宜宾县| 聂拉木县| 南昌县| 岳西县| 东丽区| 凤阳县| 增城市| 当涂县| 呼和浩特市| 鲜城| 沙坪坝区| 中方县| 延长县| 买车| 萍乡市| 德惠市| 鄂伦春自治旗| 大宁县| 孝义市| 金秀| 广元市| 松滋市| 微博| 石渠县| 什邡市| 宜章县| 湘潭市| 佛山市| 昌图县| 焉耆| 察哈| 灵宝市| 山西省| 平武县| 东乌珠穆沁旗|