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

使用element-ui實現(xiàn)行合并過程

 更新時間:2022年08月01日 09:37:50   作者:小白變怪獸  
這篇文章主要介紹了使用element-ui實現(xiàn)行合并過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

element-ui實現(xiàn)行合并過程

目標(biāo)樣式:

首先先來看下我們拿到的返回數(shù)據(jù):

tableData: [
        {
          productType: "紡織品",
          price: 123,
          productName: '男裝上衣',
          amount: 20,
          operate_number: "20180831142020",
          price: "36.00",
          updateTime: "2018-08-31",
          operator: "小吳"
        },{
          productType: "紡織品",
          price: 123,
          productName: '男裝褲子',
          amount: 20,
          operate_number: "20180831142020",
          price: "36.00",
          updateTime: "2018-08-31",
          operator: "小吳"
        },{
          productType: "飲料",
          price: 123,
          productName: '康師傅冰紅茶',
          amount: 20,
          operate_number: "20180823142020",
          price: "36.00",
          updateTime: "2018-08-31",
          operator: "小吳"
        },{
          productType: "紡織品",
          price: 223,
          productName: '男裝褲子',
          amount: 10,
          operate_number: "20180821142020",
          price: "36.00",
          updateTime: "2018-08-31",
          operator: "小王"
        },{
          productType: "綢緞",
          price: 888,
          productName: '旗袍',
          amount: 200,
          operate_number: "20180821142020",
          price: "36.00",
          updateTime: "2018-08-31",
          operator: "小吳"
        },{
          productType: "綢緞",
          price: 123,
          productName: '席子',
          amount: 20,
          operate_number: "20180821142020",
          price: "36.00",
          updateTime: "2018-08-31",
          operator: "小吳"
        },
      ]

我們需要將返回的數(shù)據(jù)按照該字段(operate_number)進(jìn)行處理。—— 將相同operate_number的信息的索引進(jìn)行對應(yīng)存儲。

getOrderNumber() {
        let OrderObj = {}
        this.tableData.forEach((element, index) => {
            element.rowIndex = index
            if (OrderObj[element.operate_number]) {
              OrderObj[element.operate_number].push(index)
            } else {
              OrderObj[element.operate_number] = []
              OrderObj[element.operate_number].push(index)
            }
        })
        // 將數(shù)組長度大于1的值 存儲到this.OrderIndexArr(也就是需要合并的項)
        for (let k in OrderObj) {
          if (OrderObj[k].length > 1) {
            this.OrderIndexArr.push(OrderObj[k])
          }
        }
      },

然后根據(jù)我們頁面展示需要, 控制哪一些列上的數(shù)據(jù)是需要進(jìn)行展示的。

 // 合并單元格
      objectSpanMethod({row,column,rowIndex,columnIndex}) {
        if (columnIndex === 0 || columnIndex === 3 || columnIndex === 4) {
          for (let i = 0; i < this.OrderIndexArr.length; i++) {
            let element = this.OrderIndexArr[i]
            for (let j = 0; j < element.length; j++) {
              let item = element[j]
              if (rowIndex == item) {
                if (j == 0) {
                  return {
                    rowspan: element.length,
                    colspan: 1
                  }
                } else if (j != 0) {
                  return {
                    rowspan: 0,
                    colspan: 0
                  }
                }
              }
            }
          }
        }
      },

經(jīng)過上述操作之后我們就能成功的繪制出如圖所需要的效果了。##完整代碼后面附上##

存在問題

不過這樣的話會存在一個顯示問題。就是當(dāng)我們的鼠標(biāo)滑過的時候,顯示效果不佳,如下圖所示:

這里寫圖片描述

?

合并后的一行數(shù)據(jù),滑過的時候效果就不對了,接下來我們就來解決一下這個問題,讓效果能達(dá)到如下圖所示:

這里寫圖片描述?

關(guān)鍵詞##: cell-mouse-enter cell-mouse-leave cell-class-name

通過觸發(fā)鼠標(biāo)劃入,劃出的時候單元格的樣式:

// 單元格樣式
tableRowClassName({row,rowIndex}) {
        let arr = this.hoverOrderArr
        for (let i = 0; i < arr.length; i++) {
          if (rowIndex == arr[i]) {
            return 'hovered-row'
          }
        }
      },
// 鼠標(biāo)劃入,劃出效果
cellMouseEnter(row, column, cell, event) {
        this.rowIndex = row.rowIndex;
        this.hoverOrderArr = [];
        this.OrderIndexArr.forEach(element => {
            if (element.indexOf(this.rowIndex) >= 0) {
              this.hoverOrderArr = element
            }
        })
      },
cellMouseLeave(row, column, cell, event) {
        this.rowIndex = '-1'
        this.hoverOrderArr = [];
      }

附上完整代碼

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>element-ui實現(xiàn)合并單元格效果</title>
  <link  rel="external nofollow"  rel="stylesheet">
  <style>
    .el-table .hovered-row {
      background: #f5f7fa;
    }
  </style>
</head>
<body>
  <div id="app">
      <el-table ref="multipleTable" border :span-method="objectSpanMethod" :cell-class-name="tableRowClassName"
        @cell-mouse-leave="cellMouseLeave"  @cell-mouse-enter="cellMouseEnter" :data="tableData" style="width: 80%;margin:0 auto;">
        <el-table-column label="商品類別" align="center">
          <template slot-scope="scope" width="160">
              <div>{{scope.row.productType}}</div>
          </template>
        </el-table-column>
        <el-table-column label="商品價格" align="center">
          <template slot-scope="scope">
            <p>{{scope.row.price}}</p>
          </template>
        </el-table-column>
        <el-table-column label="商品名稱" width="180px" align="center">
          <template slot-scope="scope">
            <p>{{scope.row.productName}}</p>
          </template>
        </el-table-column>
        <el-table-column label="操作人員" align="center">
          <template slot-scope="scope">
            <p>{{scope.row.operator}}</p>
          </template>
        </el-table-column>
        <el-table-column prop="updateTime" label="更新時間" align="center">
        </el-table-column>
      </el-table>
  </div>
</body>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://unpkg.com/element-ui/lib/index.js"></script>
<script>
  new Vue({
    el: '#app',
    data: {
      tableData: [
        {
          productType: "紡織品",
          price: 123,
          productName: '男裝上衣',
          amount: 20,
          operate_number: "20180831142020",
          price: "36.00",
          updateTime: "2018-08-31",
          operator: "小吳"
        },{
          productType: "紡織品",
          price: 123,
          productName: '男裝褲子',
          amount: 20,
          operate_number: "20180831142020",
          price: "36.00",
          updateTime: "2018-08-31",
          operator: "小吳"
        },{
          productType: "飲料",
          price: 123,
          productName: '康師傅冰紅茶',
          amount: 20,
          operate_number: "20180823142020",
          price: "36.00",
          updateTime: "2018-08-31",
          operator: "小吳"
        },{
          productType: "紡織品",
          price: 223,
          productName: '男裝褲子',
          amount: 10,
          operate_number: "20180821142020",
          price: "36.00",
          updateTime: "2018-08-31",
          operator: "小王"
        },{
          productType: "綢緞",
          price: 888,
          productName: '旗袍',
          amount: 200,
          operate_number: "20180821142020",
          price: "36.00",
          updateTime: "2018-08-31",
          operator: "小吳"
        },{
          productType: "綢緞",
          price: 123,
          productName: '席子',
          amount: 20,
          operate_number: "20180821142020",
          price: "36.00",
          updateTime: "2018-08-31",
          operator: "小吳"
        },
      ],
      rowIndex: '-1',
      OrderIndexArr: [],
      hoverOrderArr: []
    },
    mounted() {
      this.getOrderNumber()
    },
    methods: {
      // 獲取相同編號的數(shù)組
      getOrderNumber() {
        let OrderObj = {}
        this.tableData.forEach((element, index) => {
            element.rowIndex = index
            if (OrderObj[element.operate_number]) {
              OrderObj[element.operate_number].push(index)
            } else {
              OrderObj[element.operate_number] = []
              OrderObj[element.operate_number].push(index)
            }
        })
        // 將數(shù)組長度大于1的值 存儲到this.OrderIndexArr(也就是需要合并的項)
        for (let k in OrderObj) {
          if (OrderObj[k].length > 1) {
            this.OrderIndexArr.push(OrderObj[k])
          }
        }
      },
      // 合并單元格
      objectSpanMethod({row,column,rowIndex,columnIndex}) {
        if (columnIndex === 0 || columnIndex === 3 || columnIndex === 4) {
          for (let i = 0; i < this.OrderIndexArr.length; i++) {
            let element = this.OrderIndexArr[i]
            for (let j = 0; j < element.length; j++) {
              let item = element[j]
              if (rowIndex == item) {
                if (j == 0) {
                  return {
                    rowspan: element.length,
                    colspan: 1
                  }
                } else if (j != 0) {
                  return {
                    rowspan: 0,
                    colspan: 0
                  }
                }
              }
            }
          }
        }
      },
      tableRowClassName({row,rowIndex}) {
        let arr = this.hoverOrderArr
        for (let i = 0; i < arr.length; i++) {
          if (rowIndex == arr[i]) {
            return 'hovered-row'
          }
        }
      },
      cellMouseEnter(row, column, cell, event) {
        this.rowIndex = row.rowIndex;
        this.hoverOrderArr = [];
        this.OrderIndexArr.forEach(element => {
            if (element.indexOf(this.rowIndex) >= 0) {
              this.hoverOrderArr = element
            }
        })
      },
      cellMouseLeave(row, column, cell, event) {
        this.rowIndex = '-1'
        this.hoverOrderArr = [];
      }
    }
  })
</script>
</html>

element-ui合并單元格行處理方法

在平時開發(fā)過程中經(jīng)常涉及到行、列單元格的合并,本文記錄LZ使用方式,只涉及到行的合并(場景較多),列也可同理而得

獲取合并規(guī)則

 /**
   * 合并單元格
   * @param tableData  table數(shù)據(jù) []
   * @param spans      待合并 property  
   * eg:[{key:'country'},{key:'year',rely:'country'}], rely表依賴,是否依賴前置列
   * @returns {{}}
   */
  getMergeSpan(tableData,spans){
    let rowMerge = {},obj = {}
    for(let i = 0;i<spans.length;i++){
      let property = spans[i].key
      let rely = spans[i].rely
      let total = 1 , start = 0
      tableData.forEach((item,index)=>{
        let nextRow = tableData[index+1] || {}
        let isComRely =  rely ? item[rely] === nextRow[rely] : true
        if(item[property] === nextRow[property] && isComRely){
          total ++
        }else{
          obj[start] = total
          start = index + 1
          total = 1
        }
      })
      rowMerge[property] = obj
      obj = {}
    }
    return rowMerge
  },

elemen-ui  span-method 合并方式

   /**
   * element-ui 合并方法
   * @param row 行 數(shù)據(jù)
   * @param column 列信息
   * @param rowIndex 行號
   * @param columnIndex 列號
   * @returns {(*|number)[]|number[]}
   */
  tableMergeMethod({ row, column, rowIndex, columnIndex }) {
    if(columnIndex === 0){  //tip: 列位置 須根據(jù)el-table-column獲取
      let total = this.tableMerge['country'][rowIndex]
      if(total){
        return [total,1]
      }else {
        return [0,0]
      }
    }
    if(columnIndex === 1){
      let total = this.tableMerge['year'][rowIndex] // tableMerge:通過getMergeSpan獲取的規(guī)則
      if(total){
        return [total,1]
      }else {
        return [0,0]
      }
    }
  },

eg:

this.tableMerge = getMergeSpan(this.tableData,[{key:'country'},{key:'year',rely:'country'}])

合并效果

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

相關(guān)文章

  • 基于vue-element組件實現(xiàn)音樂播放器功能

    基于vue-element組件實現(xiàn)音樂播放器功能

    這篇文章主要介紹了基于vue-element組件實現(xiàn)音樂播放器功能,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧
    2018-05-05
  • vue usePop彈窗控制器的實現(xiàn)

    vue usePop彈窗控制器的實現(xiàn)

    本文主要介紹了vue usePop彈窗控制器的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Vue中的ESLint配置方式

    Vue中的ESLint配置方式

    這篇文章主要介紹了Vue中的ESLint配置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 對vue中methods互相調(diào)用的方法詳解

    對vue中methods互相調(diào)用的方法詳解

    今天小編就為大家分享一篇對vue中methods互相調(diào)用的方法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • vue中引入路徑@的用法及說明

    vue中引入路徑@的用法及說明

    這篇文章主要介紹了vue中引入路徑@的用法及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Vue中Axios配置不同的baseURL,請求不同的域名接口方式

    Vue中Axios配置不同的baseURL,請求不同的域名接口方式

    這篇文章主要介紹了Vue中Axios配置不同的baseURL,請求不同的域名接口方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 在Vuex中Mutations修改狀態(tài)操作

    在Vuex中Mutations修改狀態(tài)操作

    這篇文章主要介紹了在Vuex中Mutations修改狀態(tài)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • 前端Vue中常用rules校驗規(guī)則詳解

    前端Vue中常用rules校驗規(guī)則詳解

    這篇文章主要介紹了前端Vue中常用rules校驗規(guī)則詳解,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-07-07
  • vant自定義引入iconfont圖標(biāo)及字體的方法步驟

    vant自定義引入iconfont圖標(biāo)及字體的方法步驟

    因為vantUI給的圖標(biāo)非常少,為了滿足自己的需求,就應(yīng)該找到一種方法來向vant添加自己自定義的圖標(biāo),對于自定義圖標(biāo)我第一時間想到的就是阿里的iconfont矢量圖庫,這篇文章主要給大家介紹了關(guān)于vant自定義引入iconfont圖標(biāo)及字體的方法步驟,需要的朋友可以參考下
    2023-09-09
  • vue基礎(chǔ)語法之插值表達(dá)式詳解

    vue基礎(chǔ)語法之插值表達(dá)式詳解

    這篇文章主要為大家詳細(xì)介紹了vue基礎(chǔ)語法之插值表達(dá)式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01

最新評論

长沙市| 石阡县| 樟树市| 桐柏县| 江都市| 木兰县| 景宁| 鄂州市| 屯留县| 高密市| 吉首市| 中山市| 盐津县| 宣汉县| 西乌| 景东| 平谷区| 绥滨县| 昌图县| 扶余县| 吉木乃县| 左云县| 孟州市| 吐鲁番市| 葵青区| 岑溪市| 旬邑县| 汝州市| 南涧| 佛山市| 乡宁县| 汕尾市| 金华市| 灵宝市| 涞源县| 萍乡市| 盐源县| 定西市| 延川县| 庆城县| 兰州市|