Element 的 el-table 表格實(shí)現(xiàn)單元格合并功能
Element 的 el-table 表格實(shí)現(xiàn)單元格合并

html 部分
<template>
<div class="index-wapper">
<el-table :data="tableData" :span-method="objectSpanMethod" border>
<el-table-column v-for="(item, index) in tableHeader" :key="index" :prop="item.prop" :label="item.label"
:fixed="item.fixed" align="center"></el-table-column>
</el-table>
</div>
</template>js 部分
<script>
export default {
name: "index-page",
components: {},
props: {},
data() {
return {
tableHeader: [
{
prop: "country",
label: "城市",
fixed: true,
},
{
prop: "title",
label: "地區(qū)",
fixed: true,
},
{
prop: "data1",
label: "1",
fixed: false,
},
{
prop: "data2",
label: "2",
fixed: false,
},
{
prop: "data3",
label: "3",
fixed: false,
},
{
prop: "data4",
label: "4",
fixed: false,
},
{
prop: "data5",
label: "5",
fixed: false,
},
],
tableData: [
{
id: 1,
country: "杭州",
title: "濱江",
data1: 0,
data2: 1,
data3: 0,
data4: 1,
data5: 0,
},
{
id: 2,
country: "杭州",
title: "西湖",
data1: 0,
data2: 0,
data3: 0,
data4: 0,
data5: 0,
},
{
id: 3,
country: "杭州",
title: "余杭",
data1: 0,
data2: 1,
data3: 0,
data4: 1,
data5: 1,
},
{
id: 4,
country: "長(zhǎng)沙",
title: "岳麓",
data1: 0,
data2: 0,
data3: 0,
data4: 0,
data5: 1,
},
{
id: 5,
country: "長(zhǎng)沙",
title: "開(kāi)福",
data1: 1,
data2: 1,
data3: 0,
data4: 1,
data5: 0,
},
],
spanArr: [],
};
},
mounted() {
this.getSpanArr();
},
methods: {
/**
* 合并處理
*/
getSpanArr() {
const hLen = this.tableHeader.length;
// i表示行,j表示列
for (let i = 0; i < this.tableData.length; i++) {
if (i === 0) {
for (let j = 0; j < hLen; j++) {
this.spanArr[i * hLen + j] = {
rowspan: 1,
colspan: 1,
};
}
} else {
// 當(dāng)前和上一次的一樣,合并所有列的相同數(shù)據(jù)單元格
for (let j = 0; j < hLen; j++) {
// 指定合并哪些列
if (this.tableHeader[j].prop === "country") {
// 哪些不合并,country不一樣的,不合并
if (
this.tableData[i]["country"] !==
this.tableData[i - 1]["country"]
) {
this.spanArr[i * hLen + j] = {
rowspan: 1,
colspan: 1,
};
} else if (
this.tableData[i][this.tableHeader[j].prop] ===
this.tableData[i - 1][this.tableHeader[j].prop]
) {
let beforeItem = this.spanArr[(i - 1) * hLen + j];
this.spanArr[i * hLen + j] = {
rowspan: 1 + beforeItem.rowspan, // 合并幾列
colspan: 1, // 合并幾行
};
beforeItem.rowspan = 0;
beforeItem.colspan = 0;
} else {
this.spanArr[i * hLen + j] = {
rowspan: 1,
colspan: 1,
};
}
}
}
}
}
// 對(duì)數(shù)據(jù)進(jìn)行倒序
let stack = [];
for (let i = 0; i < hLen; i++) {
for (let j = 0; j < this.tableData.length; j++) {
const spanItem = this.spanArr[j * hLen + i];
if (spanItem) {
if (spanItem.rowspan === 0) {
stack.push(spanItem);
}
if (j !== 0 && spanItem.rowspan !== 0) {
stack.push(spanItem);
while (stack.length > 0) {
let pop = stack.pop();
let len = stack.length;
this.spanArr[(j - len) * hLen + i] = pop;
}
}
}
}
}
},
/**
* 表合并規(guī)則
*/
objectSpanMethod({ rowIndex, columnIndex }) {
return this.spanArr[rowIndex * this.tableHeader.length + columnIndex];
},
},
watch: {},
};
</script>到此這篇關(guān)于Element 的 el-table 表格實(shí)現(xiàn)單元格合并的文章就介紹到這了,更多相關(guān)Element el-table 單元格合并內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue.js移動(dòng)端左滑刪除組件的實(shí)現(xiàn)代碼
本篇文章主要介紹了Vue.js移動(dòng)端左滑刪除組件的實(shí)現(xiàn)代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09
Vue3動(dòng)態(tài)使用KeepAlive組件的實(shí)現(xiàn)步驟
在 Vue 3 項(xiàng)目中,我們有時(shí)需要根據(jù)路由的 meta 信息來(lái)動(dòng)態(tài)決定是否使用 KeepAlive 組件,以控制組件的緩存行為,所以本文給大家介紹了Vue3動(dòng)態(tài)使用KeepAlive組件的實(shí)現(xiàn)步驟,通過(guò)代碼示例講解的非常詳細(xì),需要的朋友可以參考下2024-11-11
vue項(xiàng)目前端微信JSAPI與外部H5支付相關(guān)實(shí)現(xiàn)過(guò)程及常見(jiàn)問(wèn)題
這篇文章主要介紹了vue項(xiàng)目前端微信JSAPI與外部H5支付相關(guān)實(shí)現(xiàn)過(guò)程及常見(jiàn)問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
強(qiáng)制Vue重新渲染組件的5種方法小結(jié)
在開(kāi)發(fā)Vue.js應(yīng)用程序時(shí),有時(shí)我們需要強(qiáng)制重新渲染組件以確保數(shù)據(jù)和視圖同步,下面就來(lái)介紹一下強(qiáng)制Vue重新渲染組件的5種方法,感興趣的可以了解一下2025-06-06
前端vue按1920*1080設(shè)計(jì)圖的頁(yè)面適配屏幕縮放并適配4K屏詳解
最近在做一個(gè)數(shù)據(jù)可視化的項(xiàng)目,整個(gè)項(xiàng)目全是大屏展示,期間也是遇到很多問(wèn)題,最令人頭疼的就是大屏的適配,下面這篇文章主要給大家介紹了前端vue按1920*1080設(shè)計(jì)圖的頁(yè)面適配屏幕縮放并適配4K屏的相關(guān)資料,需要的朋友可以參考下2022-11-11
vue或react項(xiàng)目生產(chǎn)環(huán)境去掉console.log的操作
這篇文章主要介紹了vue或react項(xiàng)目生產(chǎn)環(huán)境去掉console.log的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09

