vue + elementUI
簡單高效的實現表頭和行列合併?幾個月前接過一個這樣的需求,如上圖,是說,表頭由後臺返回,而且要求單元格列合併,前段時間又接到同樣的需求。因而乎,在codepen
中寫了個demo
,codepen在線地址。javascript
接到這個需求的時候,跟後段肯定的數據格式是這樣的,單單一個包含表頭和單元格數據的對象,單元格每行的數據按表格列的key
值肯定。若是是須要表頭合併的,則按第二行的key
值,第一行的只有label
,看官網表頭第一行也是隻有label
的。vue
mergedData: {
data: [ // 單元格數據
{
"city":'深圳',
"area":'福田區',
'June-week1':'944',
'June-week2':'9.93%',
'June-week3':'91',
'June-week4':'942',
'July-week1':'6.93%',
'July-week2':'100',
'July-week3': '101'
}],
title: [ // 表頭
{
label:'City',
key:'city',
child:[]
},
{
label:'July', // 須要合併的表頭
key:'',
child:[
{
label:'week1',
key:'July-week1',
},{
label:'week2',
key:'July-week2',
},{
label:'week3',
key:'July-week3',
}
],
}]
}
複製代碼
而後, vue
模板合併表頭用的template
,具體請看demo,合併行使用objectSpanMethod
,去看官網的例子你會發現,它是經過判斷行列索引實現的,這裏咱們經過表頭的key
值實現。java
objectSpanMethod({row, column, rowIndex, columnIndex}) {
// 須要合併的列
let mergedkeys = ['city', 'area', 'June-week1', 'June-week3','July-week3']
let data = this.mergedData.data
let attr = column.property
if(mergedkeys.indexOf(attr) > -1) {
if(!rowIndex || (row[attr] !== data[rowIndex - 1][attr])) {
let cols = data.filter(item => item[attr] === row[attr])
return [cols.length, 1]
} else {
return [0, 0]
}
}
},
複製代碼
這裏主要就是根據須要合併列的key
值來肯定rowspan
得值,這樣確保了若是某些列數據不須要合併,不放入合併列數組便可。數組
以上講的只是行合併,列合併有須要的話可自行實現,若是項目中相似表格比較多的話你們也能夠進一步封裝下。總結來講就是,表格的行列合併也就那樣。oop
2020年輸出的第一篇文章,若是您以爲文章還行能夠點個贊,有其餘想法歡迎評論區交流。this