错误展示

正确展示

如果使用上次博客写的element 动态合并表格那么会出现上述图片情况,所以对其进行完善实现下图(正确展示)情况

处理函数

mergeTableRow(data, merge) {
if (!merge || merge.length === 0) {
return data;
}
merge.forEach((m) => {
const mList = {};
let spliceLocation = merge.indexOf(m)
data = data.map((v, index) => {
const rowVal = v[m];
if (mList[rowVal] && mList[rowVal].newIndex === index) {
// flag为true的时候代表当前值的前者与上一个值相等
/*
只有当当前merge之前的所有merge的值的当前index等于index-1 才允许当前merge合并
*/
let flag = false;
let mergeSolve = merge.slice(0,spliceLocation);
mergeSolve.slice(0,spliceLocation).forEach(mergeItem=>{
if(data[index][mergeItem] == data[index-1][mergeItem]){
flag = true
}
})
if( m == merge[0] ){
flag = true;
}
if(flag){
mList[rowVal]["num"]++;
mList[rowVal]["newIndex"]++;
data[mList[rowVal]["index"]][m + "-span"].rowspan++;
v[m + "-span"] = {
rowspan: 0,
colspan: 0,
};
}else{
mList[rowVal] = {
num: 1,
index: index,
newIndex: index + 1,
};
v[m + "-span"] = {
rowspan: 1,
colspan: 1,
};
}
} else {
mList[rowVal] = {
num: 1,
index: index,
newIndex: index + 1,
};
v[m + "-span"] = {
rowspan: 1,
colspan: 1,
};
}
return v;
});
});
return data;
},

数据处理

let dataSolve = this.mergeTableRow(res.data.data, ["feature", "state"]);

elementUI表格配置项

objectSpanMethod({ row, column, rowIndex, columnIndex }) {
const span = column["property"] + "-span";
if (row[span]) {
return row[span];
}
},

实际案例

<!DOCTYPE html>
<html lang="en"> <head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<div id="app">
<el-table style="width:840px" :data="historyData" :span-method="objectSpanMethod" :border="true">
<el-table-column prop="feature" label="Feature" align="center" width="140">
</el-table-column>
<el-table-column prop="state" label="状态" align="center" width="140">
</el-table-column>
<el-table-column prop="type" label="任务类型" align="center" width="140">
</el-table-column>
<el-table-column prop="owner" label="负责人" align="center" width="140">
</el-table-column>
</el-table>
</div> <body>
<script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script>
<!-- 引入样式 -->
<link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
<!-- 引入组件库 -->
<script src="https://unpkg.com/element-ui/lib/index.js"></script>
<script>
new Vue({
el: '#app',
data: function () {
return {
historyData: [],
}
},
mounted() {
let dataArr = [
{
"feature": "Change",
"state": "已完成",
"type": "机翼",
"owner": "小王",
"week10Plan": "1.0",
"week10Book": "1.0",
"week11Plan": "0.0",
"week11Book": "0.0",
"week12Plan": "0.0",
"week12Book": "0.0"
},
{
"feature": "Change",
"state": "已完成",
"type": "尾部",
"owner": "小王",
"week10Plan": "1.0",
"week10Book": "1.0",
"week11Plan": "0.0",
"week11Book": "0.0",
"week12Plan": "0.0",
"week12Book": "0.0"
},
{
"feature": "Perfor",
"state": "已完成",
"type": "头部",
"owner": "小王",
"week10Plan": "1.0",
"week10Book": "1.0",
"week11Plan": "0.0",
"week11Book": "0.0",
"week12Plan": "0.0",
"week12Book": "0.0"
},
{
"feature": "Power",
"state": "未完成",
"type": "翅膀",
"owner": "小王",
"week10Plan": "0.0",
"week10Book": "0.0",
"week11Plan": "1.0",
"week11Book": "0.0",
"week12Plan": "5.0",
"week12Book": "5.0"
},
{
"feature": "Touch",
"state": "已完成",
"type": "机舱仪器",
"owner": "小王",
"week10Plan": "1.0",
"week10Book": "1.0",
"week11Plan": "0.0",
"week11Book": "0.0",
"week12Plan": "0.0",
"week12Book": "0.0"
}
]
let dataSolve = this.mergeTableRow(dataArr, ["feature", "state"]);
this.historyData = dataSolve;
},
methods: {
// 合并表格
mergeTableRow(data, merge) {
if (!merge || merge.length === 0) {
return data;
}
merge.forEach((m) => {
const mList = {};
let spliceLocation = merge.indexOf(m)
data = data.map((v, index) => {
const rowVal = v[m];
if (mList[rowVal] && mList[rowVal].newIndex === index) {
// flag为true的时候代表当前值的前者与上一个值相等
/*
只有当当前merge之前的所有merge的值的当前index等于index-1 才允许当前merge合并
*/
let flag = false;
let mergeSolve = merge.slice(0, spliceLocation);
mergeSolve.slice(0, spliceLocation).forEach(mergeItem => {
if (data[index][mergeItem] == data[index - 1][mergeItem]) {
flag = true
}
})
if (m == merge[0]) {
flag = true;
}
if (flag) {
mList[rowVal]["num"]++;
mList[rowVal]["newIndex"]++;
data[mList[rowVal]["index"]][m + "-span"].rowspan++;
v[m + "-span"] = {
rowspan: 0,
colspan: 0,
};
} else {
mList[rowVal] = {
num: 1,
index: index,
newIndex: index + 1,
};
v[m + "-span"] = {
rowspan: 1,
colspan: 1,
};
}
} else {
mList[rowVal] = {
num: 1,
index: index,
newIndex: index + 1,
};
v[m + "-span"] = {
rowspan: 1,
colspan: 1,
};
}
return v;
});
});
return data;
},
objectSpanMethod({ row, column, rowIndex, columnIndex }) {
const span = column["property"] + "-span";
if (row[span]) {
return row[span];
}
},
}
})
</script>
</body>
</html>

element 动态合并表格---进阶版的更多相关文章

  1. element 动态合并表格

    前言 element 官方的例子太简单了,不满足实际的需求 数据肯定是动态的,合并的行数,列数都是动态的,该如何知道每一行的合并数呢 需求 动态合并表格,数据来源于数据库 正文 一开始,我的数据源是单 ...

  2. jquery动态合并表格行

    利用<td rowspan = "num"/>;原理来实现,其中num为要合并的行数. <!DOCTYPE html> <html> <h ...

  3. arcgis api for javascript 学习(七) 调用发布地图信息,并将地图属性信息输出到Excel表格---进阶版

    我们在arcgis api for javascript 学习(三)已经学习到了关于调用地图信息进行属性输出的问题,不过通过代码我们实现后会发现还是有一些小瑕疵的,比如我们只能单个数据属性的输出,如果 ...

  4. javascript动态合并表格相同的单元格

    <!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Conten ...

  5. 实操记录之-----Ant Design of Vue 增强版动态合并单元格,自动根据数据进行合并,可自定义横纵向合并

    前几天搞了个简易版的动态合并单元格 但是需求有变化,就只能稍微改改了~~ 欢迎路过的各位大佬指出我代码的问题~~~~ 另: 代码执行效率不是很高,如果需要大量渲染更多数据建议可以直接使用原生 < ...

  6. JS动态生成表格后 合并单元格

    JS动态生成表格后 合并单元格 最近做项目碰到表格中的单元格合并的问题,需求是这样的,首先发ajax请求 请求回来后的数据 动态生成表格数据,但是生成后如果编号或者(根据其他的内容)有相同时,要合并单 ...

  7. NG-ZORRO + angular-cli11 表格横纵向单元格合并,按需设置背景色,解决动态合并单元格动态colspan情况下,nzLeft固定列失效问题,也适用VUE,REACT

    NG-ZORRO + angular-cli11 实现表格横纵向单元格合并,按需设置背景色,并解决动态合并单元格动态colspan情况下,nzLeft固定列失效问题 HTML代码 <!-- 1. ...

  8. Bootstrap-table实现动态合并相同行(表格同名合并)

    写在前面: 有时候表格的需求就是奇奇怪怪的,最近要做的表格需要实现当紧挨着的记录的某一列的行元素内容相同,就将其合并.要是不是相同的就不合并.如果表格数据的顺序不需要被改变,这个样子是可以很简单就完成 ...

  9. vue+element创建动态的form表单.以及动态生成表格的行和列

    动态创建form表单,网上有插件 (form-create) 不过我不知道它怎么用,没有使用成功,如果你使用成功了,欢迎下方留言. 最后我使用了笨方法,针对各个表单写好通用的组件,然后根据type用v ...

  10. element ui的表格列设置fixed后做动态表格出现表格错乱

    最近使用element-UI时,使用table做动态表格,当操作列使用fixed时,动态切换表格列设置设置时就会出现错乱,情况如下: 解决方法: 把el-table-column上的key设成一个随机 ...

随机推荐

  1. 学习真DDD的最佳路径

    本文书接上回<DDD是软件工程的第一性原理?>,关注公众号(老肖想当外语大佬)获取信息: 最新文章更新: DDD框架源码(.NET.Java双平台): 加群畅聊,建模分析.技术实现交流: ...

  2. Python 字符串格式化输出

    数字 n: int = 1000000000 print(f'{n:_}') # 1_000_000_000 print(f'{n:,}') # 1,000,000,000 对齐 var: str = ...

  3. Chrome扩展插件的开发--获取网页Cookies

    Chrome扩展插件的开发--获取网页Cookies Chrome浏览器在浏览器类应用软件中一直居于榜首,很多人选择Chrome浏览器不仅仅是因为它的稳定,还有它丰富的可拓展性.那么有没有想自己开发一 ...

  4. C#/.NET/.NET Core技术前沿周刊 | 第 3 期(2024年8.26-8.31)

    前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录.追踪C#/.NET/.NET Core领域.生态的每周最新.最实用.最有价值的技术文章.社区动态.优质项目和学习资源等. ...

  5. Ansible 知识

    Ref: guru99.com/ansible-tutorial.html https://www.digitalocean.com/community/tutorials/how-to-use-an ...

  6. 人形动画常见IK的处理

    Unity中常见人形动画IK的处理方式 本文将尝试仅使用Untiy内置的Animator来解决常见的几种运动所需的IK.也会给出核心功能的代码实现. 效果一览:b站视频 Unity中人形角色的IK I ...

  7. CSS – Icon

    前言 Icon 并不容易搞. 市场有许多平台支持 Icon, 有些收费有些免费. 有些 icon 很丰富, 有些很缺失. 尤其是在做网站的时候寻找 icon 是一个挺累的事情. 这篇就来聊聊 icon ...

  8. 【学习笔记】数位DP

    数位DP 适用条件 此类题目一般要求在\([l,r]\)区间内满足条件的数的个数,答案一般与数的大小无关,而与数各位的组成有关.题目中给出的数的范围一般较大,往往在\(10^9\)以上因此无法暴力枚举 ...

  9. 东方通TongWeb7部署SuperMap iServer War包

    一.软件版本 操作系统: CentOS 7.5.1804 JDK:1.8_201 东方通:TongWeb7.0.4.2 SuperMap iServer:10.2 二.东方通TongWeb7部署流程 ...

  10. 三,MyBatis-Plus 的各种查询的“超详细说明”,比如(等值查询,范围查询,模糊查询...)

    三,MyBatis-Plus 的各种查询的"超详细说明",比如(等值查询,范围查询,模糊查询...) @ 目录 三,MyBatis-Plus 的各种查询的"超详细说明&q ...