elementui中table组件合并行(看就懂)

做一个动态合并的table表格, 如下图

1.首先定义需要合并的字段及合并后的对象
data(){return {mergeFields: ['name', 'amount3'],mergeObj: {}}
}
2.分配合并项函数, data为数据源
        //获取合并序号getSpanArr(data = []) {this.mergeFields.forEach(key => {// 用来记录合并行的起始位置let count = 0// 记录每一列的合并信息this.mergeObj[key] = []data.forEach((item, index) => {// 第一行直接 push 一个 1if (!index) {this.mergeObj[key].push(1)return}// 判断当前行是否与上一行其值相等 // 如果相等在count记录的位置其值+1 // 表示当前行需要合并 并添加一个 0 占位if (item[key] === data[index - 1][key]) {this.mergeObj[key][count] += 1this.mergeObj[key].push(0)return}// 如果当前行和上一行其值不相等 记录当前位置count = index // 重新push一个1this.mergeObj[key].push(1) })})},//合并行objectSpanMethod({ row, column, rowIndex, columnIndex }) {if (!this.mergeFields.includes(column.property)) return// 判断其值是不是为0if (this.mergeObj[column.property][rowIndex]) {return [this.mergeObj[column.property][rowIndex], 1]}// 如果为0则为需要合并的行return [0, 0]},
3.数据内容改变时函数
        //改变百分比触发changeVal(val, row, idx) {//找到一级相同项let alikeList = this.tableData.filter(it => it.name == row.name)//汇总let allPercent = alikeList.reduce((acc, curr) => {return acc + curr.amount2}, 0)//改变每一项let list = JSON.parse(JSON.stringify(this.tableData))list.forEach(it => {if (it.name == row.name) {it.amount3 = allPercent}})//先分配需要合并项this.getSpanArr(list)this.$nextTick(() => {this.tableData = JSON.parse(JSON.stringify(list))})}
4.完整代码

<template><div class="wokeRate"><el-table :data="tableData" :span-method="objectSpanMethod" :border="true" size="small"><el-table-column v-for="item in fields" :key="item.key" :prop="item.key" :label="item.label":width="item.width"><template slot-scope="scope"><div class="it" v-if="item.type == 'text'">{{ scope.row[item.key] }}</div><div class="it" v-if="item.type == 'input'"><el-input-number size="mini" v-model="scope.row[item.key]" :placeholder="`请输入${item.label}`"@change="e => changeVal(e, scope.row, scope.$index)"></el-input-number></div></template></el-table-column></el-table></div>
</template><script>
export default {name: 'DfcvDtmsVueWokeRate',data() {return {mergeFields: ['name', 'amount3'],mergeObj: {},tableData: [{name: '维保',amount1: '维保',amount2: 0,amount3: 0}, {name: '等待样品',amount1: '等待样机',amount2: 0,amount3: 0}, {name: '等待样品',amount1: '等待样件',amount2: 0,amount3: 0},{name: '无任务',amount1: '无任务',amount2: 0,amount3: 0}],fields: [{label: '一级',key: 'name',type: 'text'},{label: '二级',key: 'amount1',type: 'text'},{label: '百分比(%)',key: 'amount2',type: 'input'},{label: '汇总(%)',key: 'amount3',type: 'text'}]}},mounted() {this.getSpanArr(this.tableData)},methods: {//获取合并序号getSpanArr(data = []) {this.mergeFields.forEach(key => {// 用来记录需要合并行的起始位置let count = 0// 记录每一列的合并信息this.mergeObj[key] = []data.forEach((item, index) => {// 第一行直接 push 一个 1if (!index) {this.mergeObj[key].push(1)return}// 判断当前行是否与上一行其值相等 // 如果相等在count记录的位置其值+1 // 表示当前行需要合并 并添加一个 0 占位if (item[key] === data[index - 1][key]) {this.mergeObj[key][count] += 1this.mergeObj[key].push(0)return}// 如果当前行和上一行其值不相等 记录当前位置count = index// 重新push一个 1this.mergeObj[key].push(1)})})},//合并行objectSpanMethod({ row, column, rowIndex, columnIndex }) {if (!this.mergeFields.includes(column.property)) return// 判断其值是不是为0if (this.mergeObj[column.property][rowIndex]) {return [this.mergeObj[column.property][rowIndex], 1]}// 如果为0则为需要合并的行return [0, 0]},//改变百分比触发changeVal(val, row, idx) {//找到一级相同项let alikeList = this.tableData.filter(it => it.name == row.name)//汇总let allPercent = alikeList.reduce((acc, curr) => {return acc + curr.amount2}, 0)//改变每一项let list = JSON.parse(JSON.stringify(this.tableData))list.forEach(it => {if (it.name == row.name) {it.amount3 = allPercent}})//先分配需要合并项this.getSpanArr(list)this.$nextTick(() => {this.tableData = JSON.parse(JSON.stringify(list))})}}
}
</script><style lang="scss" scoped>
.wokeRate {width: 100%;padding: 20px 0;.el-table {margin-top: 20px;}
}
</style>
elementPlus一样使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/39812.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么我感觉 C 语言在 Linux 下执行效率比 Windows 快得多?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「Linux的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;Windows的终端或者叫控制台…

时间12小时和24时转换方法

24小时时间转为12小时制 function convertTo12Hour(time24h){let [hours, minutes] time24h.split(:);let modifier 上午;if (parseInt(hours, 10) > 12) {modifier 下午;hours (parseInt(hours, 10) - 12).toString();}if (parseInt(hours, 10) 12) {modifier 下午;}…

新手入门:无服务器函数和FaaS简介

无服务器&#xff08;Serverless&#xff09;架构的价值在于其成本效益、弹性和扩展性、简化的开发和部署流程、高可用性和可靠性以及使开发者能够专注于业务逻辑。通过自动化资源调配和按需计费&#xff0c;无服务器架构能够降低成本并适应流量变化&#xff0c;同时简化开发流…

《昇思25天学习打卡营第01天|sun65535》

开始 昇思25天打卡训练营&#xff0c;让我第一次了解了华为昇思的平台&#xff0c;之前也有自己本地使用4060训练了一些“小模型”&#xff0c;但是都是比较皮毛的知识&#xff0c;只是根据教程去搭建。很少了解到具体的过程。昇思25天打卡训练营给了一个比较全面的训练课程。…

大数据基础知识【大数据导论】

各位大佬好 &#xff0c;这里是阿川的博客&#xff0c;祝您变得更强 个人主页&#xff1a;在线OJ的阿川 大佬的支持和鼓励&#xff0c;将是我成长路上最大的动力 阿川水平有限&#xff0c;如有错误&#xff0c;欢迎大佬指正 大数据基础知识前 必看 【大数据导论】—大数据序言…

Golang | Leetcode Golang题解之第206题反转链表

题目&#xff1a; 题解&#xff1a; func reverseList(head *ListNode) *ListNode {if head nil || head.Next nil {return head}newHead : reverseList(head.Next)head.Next.Next headhead.Next nilreturn newHead }

【1.1】动态规划求解不同的子序列

一、题目 给定一个字符串s和一个字符串t&#xff0c;计算在s的子序列中t出现的个数。 字符串的一个子序列是指&#xff0c;通过删除一些&#xff08;也可以不删除&#xff09;字符且不干扰剩余字符相对位置 所组成的新字符串。&#xff08;例如&#xff0c;"ACE"是…

6.2、函数的定义

代码 #include <iostream> using namespace std; #include <string>//函数定义//语法&#xff1a;//返回值类型 函数名(参数列表) {函数体语句 return表达式}//加法函数 int add(int num1, int num2) {int sum num1 num2;return sum; } int main() {cout <&l…

聊聊Redis持久化策略RDB

写在文章开头 为避免服务器宕机着情况导致redis内存数据库数据丢失&#xff0c;redis默认出通过rdb保证可靠性&#xff0c;本文将从源码的角度带读者了解rdb读写时机和写入流程。 Hi&#xff0c;我是 sharkChili &#xff0c;是个不断在硬核技术上作死的 java coder &#xff…

刷代码随想录有感(124):动态规划——最长公共子序列

题干&#xff1a; 代码&#xff1a; class Solution { public:int findLength(vector<int>& nums1, vector<int>& nums2) {vector<vector<int>>dp(nums1.size() 1, vector<int>(nums2.size() 1, 0));int res 0;for(int i 1; i <…

数据集采样策略对模型性能的影响问题

数据集采样策略对模型性能的影响问题&#xff0c;需要具体代码示例 随着机器学习和深度学习的快速发展&#xff0c;数据集的质量和规模对于模型性能的影响变得越来越重要。在实际应用中&#xff0c;我们往往面临着数据集规模过大、样本类别不平衡、样本噪声等问题。这时&#…

lnternet 发展史

一&#xff0c;lnternet 发展史 ARPA net &#xff08;上世纪50年代二战结束&#xff09; 无线 战场指挥通信协议落后 TCP/IP 包交换 WEB (70年代 ) 80年代 90年代 二&#xff0c;互联网的典型应用&#xff1a; 96年到2008年 第一代技术…

AJAX的概述 ,同步和异步的区别 ,AJAX 的交互模型和传统交互模型的区别

一. AJAX的概述 1.1 什么是ajax 同步&#xff1a; 异步&#xff1a; 1.AJAX Asynchronous JavaScript and XML&#xff08;异步的 JavaScript 和 XML&#xff09;。 ​ 说明&#xff1a;异步&#xff1a;就是不同步。例如我们向后台发送请求&#xff0c;同步的方式是后台必…

svn忽略上传文件node_modules文件

文章目录 1.点击svn项目右键-》选中svn的属性2. 点击 新建3. 点击其他4. 选择属性 svn:global-ignores5. 输入忽略文件 1.点击svn项目右键-》选中svn的属性 2. 点击 新建 3. 点击其他 4. 选择属性 svn:global-ignores 5. 输入忽略文件

四、【源码】Bean属性注入

源码地址&#xff1a;https://github.com/spring-projects/spring-framework 仓库地址&#xff1a;https://gitcode.net/qq_42665745/spring/-/tree/04-porperty-inject Bean属性注入 属性注入相关的类 1.PropertyValue&#xff1a;属性对象&#xff0c;name:value 2.Prope…

数据结构 —— 二叉树

1.树的概念及结构 1.1树的概念 树是一种非线性的数据结构&#xff0c;它有着多分支&#xff0c;层次性的特点。 由于其形态类似于自然界中倒过来的数&#xff0c;所以我们将这种数据结构称为“树形结构” 注意&#xff1a; 树形结构中&#xff0c;子树之间不能有交集&#x…

降重工具大揭秘:AI如何帮你轻松搞定论文重写?

已经天临五年了&#xff0c;大学生们还在为论文降重烦恼……手动降重确实是个难题&#xff0c;必须要先付点小经费去靠谱的网站查重&#xff0c;再对着红字标注去改&#xff0c;后面每一次的论文呢查重结果都像赌//博&#xff0c;谁也不知道明明是同一篇文章&#xff0c;第二次…

2024鲲鹏昇腾创新大赛集训营Ascend C算子学习笔记

异构计算架构&#xff08;CANN&#xff09; 对标英伟达的CUDA CuDNN的核心软件层&#xff0c;向上支持多种AI框架&#xff0c;向下服务AI处理器&#xff0c;发挥承上启下的关键作用&#xff0c;是提升昇腾AI处理器计算效率的关键平台。主要包括有各种引擎、编译器、执行器、算…

(番外篇)指针的一些相关习题讲解(速进,干货满满)(2)

前言&#xff1a; 小编感觉最近有点太堕落&#xff0c;于是我开始从事这篇文章的撰写&#xff0c;现在也是进入七月份了&#xff0c;我现在文章开头定一个小目标&#xff0c;我决定在七月份发布至少十篇文章&#xff0c;希望我可以说到做到&#xff08;我前面就口头欠了不少文章…

OpenSSL的一些使用案例

目录 一、介绍 二、基本使用 1、Shell &#xff08;1&#xff09;文件加解密 &#xff08;2&#xff09;生成密钥文件 2、API &#xff08;1&#xff09;md5sum &#xff08;2&#xff09;AES256加解密 一、介绍 本篇博客重点不是详细描述 OpenSSL 的用法&#xff0c;只…