<template>
<div class="home">
<template>
<el-table :data="tableData" style="width: 100%" :span-method="arraySpanMethod">
<el-table-column v-for="(item,index) in columnList" :prop="item.prop" :label="item.label" align="center">
</el-table-column>
</el-table>
</template>
</div>
</template>
<script>
export default {
name: 'Home',
components: {},
data() {
return {
tableData: [
{ city: '蘇州', country: '玄武', gender: '男', name: '1' },
{ city: '南京', country: '江寧', gender: '男', name: '2' },
{ city: '南京', country: '江寧', gender: '女', name: '3' },
{ city: '南京', country: '江寧', gender: '男', name: '4' },
{ city: '南京', country: '鼓樓', gender: '男', name: '5' },
{ city: '南京', country: '鼓樓', gender: '男', name: '6' },
{ city: '南京', country: '秦淮', gender: '男', name: '7' },
{ city: '南京', country: '秦淮', gender: '女', name: '8' },
{ city: '南京', country: '建鄴', gender: '男', name: '9' },
{ city: '南京', country: '建鄴', gender: '男', name: '0' },
{ city: '鹽城', country: '建鄴', gender: '男', name: '2' },
{ city: '鹽城', country: '建鄴', gender: '女', name: '2' },
{ city: '徐州', country: '建鄴', gender: '女', name: '3' },
{ city: '連云港', country: '新浦', gender: '女', name: 'aaa' },
{ city: '連云港', country: '新浦', gender: '男', name: 'aaa' },
{ city: '連云港', country: '新浦', gender: '女', name: 'bbb' },
{ city: '連云港', country: '新浦', gender: '男', name: 'ccd' },
{ city: '連云港', country: '海州', gender: '男', name: 'eee' },
{ city: '連云港', country: '海州', gender: '男', name: 'ccc' },
{ city: '連云港', country: '連云', gender: '女', name: 'aaa' },
{ city: '連云港', country: '贛榆', gender: '男', name: 'aaa' },
{ city: '連云港', country: '贛榆', gender: '男', name: 'aaa' },
{ city: '連云港', country: '贛榆', gender: '女', name: 'aaa' },
],
columnList: [{
prop: 'city',
label: '城市'
}, {
prop: 'country',
label: '區(qū)縣'
}, {
prop: 'gender',
label: '性別'
}, {
prop: 'name',
label: '姓名'
}],
mergeKey: [0, 1, 2],
mergeObj: [],
margeStartLine: [],
n: 0
}
},
created() {
this.mergeObj = this.getMergeObj(this.tableData, 'city')
},
mounted() {
this.getMergeObj(this.tableData, 'city')
},
methods: {
getMergeObj(data, key, keyIndex) {
// startIndex, range
let curIndex = 0
let arr = []
let margeStartLine = []
for (let i = 0; i < data.length; i++) {
arr.push(0)
if (i == 0) {
curIndex = 0
margeStartLine.push(0)
} else {
let canMerge = false
let count = 0
for (let k = 0; k <= keyIndex; k++) {
let curKey = this.columnList[k].prop
if (data[i][curKey] == data[i - 1][curKey]) {
count++
}
}
if (count == keyIndex + 1) {
arr[curIndex] += 1
if (curIndex != margeStartLine[margeStartLine.length - 1]) {
margeStartLine.push(curIndex)
}
} else {
margeStartLine.push(i)
curIndex = i
}
}
}
return {
mergeArr: arr,
margeStartLine: margeStartLine
}
},
arraySpanMethod({ row, column, rowIndex, columnIndex }) {
for (let k = 0; k < this.mergeKey.length; k++) {
let key = this.columnList[this.mergeKey[k]]
if (columnIndex === this.mergeKey[k]) {
let key = this.columnList[columnIndex].prop
let obj = this.getMergeObj(this.tableData, key, columnIndex)
let mergeArr = obj.mergeArr
let margeStartLine = obj.margeStartLine
if (margeStartLine.indexOf(rowIndex) > -1) {
let index = margeStartLine[margeStartLine.indexOf(rowIndex)]
return {
rowspan: mergeArr[index] + 1,
colspan: 1
};
} else {
return {
rowspan: 0,
colspan: 0
};
}
}
}
if (this.mergeKey.indexOf(this.columnList[columnIndex].prop) > -1) {
let key = this.columnList[columnIndex].prop
// let { mergeObj, margeStartLine } = this.getMergeObj(this.tableData, key)
if (margeStartLine.indexOf(rowIndex) > -1) {
let index = margeStartLine[margeStartLine.indexOf(rowIndex)]
return {
rowspan: mergeObj[index] + 1,
colspan: 1
};
} else {
return {
rowspan: 0,
colspan: 0
};
}
}
}
}
}
</script>
element UI 表格的行合并方法
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 這個(gè)東西,用的element-ui,難點(diǎn)在于動(dòng)態(tài)地計(jì)算每一行的數(shù)據(jù),應(yīng)該合并的行數(shù)和列數(shù)。 前提條件:要求數(shù)據(jù)源必...
- 開發(fā)中頁(yè)面有表格的話,不可或缺的都會(huì)涉及一些別表格的合并操作。下面來說說我是如何來動(dòng)態(tài)合并表格的行或列的。 點(diǎn)擊查...
- 前提條件:要求數(shù)據(jù)源必須是有序的(如按id分類,即id相同的要挨在一起,不能亂排。) 然后,首先對(duì)數(shù)據(jù)源進(jìn)行一次遍...
- 類似這樣的需求我們vue中傳統(tǒng)的做法應(yīng)該是動(dòng)態(tài)添加class移除class,這里我們 用element表格中的 @...
- 每每讀完一本書,心中總是一團(tuán)亂,思緒紛繁,很難尋求出一條線索,能夠貫穿全書,也很難從中領(lǐng)悟出哲學(xué)道理和生活真諦,然...