vue2+elementUI表格实现实现多列动态合并

这篇具有很好参考价值的文章主要介绍了vue2+elementUI表格实现实现多列动态合并。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

vue2+elementUI表格实现实现多列动态合并,elementui,前端,javascript文章来源地址https://www.toymoban.com/news/detail-525020.html

<template>
    <el-table :data="tableData" border max-height="800" :span-method="objectSpanMethod">
        <el-table-column type="index" width="50">
        </el-table-column>
        <el-table-column prop="id" label="id" width="150"></el-table-column>
        <el-table-column prop="cloudTypeName" label="资质证书编号" width="200"></el-table-column>
        <el-table-column prop="accName" label="资质名称" width="250"></el-table-column>
        <el-table-column prop="crashAmount" label="发证日期" width="130"></el-table-column>
        <el-table-column prop="creditAmount" label="	发证有效期" width="130"></el-table-column>
        <el-table-column prop="availaleAmount" label="	发证机关" width="178"></el-table-column>

    </el-table>
</template>
  
<script>
export default {
    name: 'demo',
    data() {
        return {
            tableData: [
                {
                    id: 1,
                    cloudTypeName: "阿里云",
                    accName: "glodon_gm1",
                    crashAmount: 0.1,
                    creditAmount: 240000.0,
                    availaleAmount: 83548.66,
                },
                {
                    id: 2,
                    cloudTypeName: "阿里云",
                    accName: "glodon_gm1",
                    crashAmount: 0.0,
                    creditAmount: 150000.0,
                    availaleAmount: 83548.66,
                },
                {
                    id: 3,
                    cloudTypeName: "阿里云",
                    accName: "glodon_gm1",
                    crashAmount: 0.0,
                    creditAmount: 150000.0,
                    availaleAmount: 53045.89,
                },
                {
                    id: 4,
                    cloudTypeName: "阿里云",
                    accName: "glodon_gm4",
                    crashAmount: 0.0,
                    creditAmount: 1351000.0,
                    availaleAmount: 1244354.9,
                },
                {
                    id: 5,
                    cloudTypeName: "阿里云",
                    accName: "glodon_gm4",
                    crashAmount: 0.0,
                    creditAmount: 0.0,
                    availaleAmount: -5033739.0,
                },
                {
                    id: 5,
                    cloudTypeName: "阿里云",
                    accName: "glodon_gm5",
                    crashAmount: 0.0,
                    creditAmount: 0.0,
                    availaleAmount: -5033739.0,
                },
                {
                    id: 5,
                    cloudTypeName: "阿里云",
                    accName: "glodon_gm5",
                    crashAmount: 0.0,
                    creditAmount: 0.0,
                    availaleAmount: -5033739.0,
                },
            ],
            // 那个字段写在前面就以哪个为开始,
            needMergeArr: ["cloudTypeName","accName", "crashAmount", "creditAmount"],

            rowMergeArrs: [],
        }
    },
    mounted() {
        this.rowMergeArrs = this.rowMergeHandle(this.needMergeArr, this.tableData);
        console.log('数据', this.rowMergeArrs)
    },
    methods: {
        rowMergeHandle(arr, data) {
            if (!Array.isArray(arr) && !arr.length) return false;
            if (!Array.isArray(data) && !data.length) return false;
            let needMerge = {};
            arr.forEach((i, idx) => {
                needMerge[i] = {
                    rowArr: [],
                    rowMergeNum: 0,
                };
                if (idx == 0) {
                    data.forEach((item, index) => {
                        // 表格首个数据单独处理
                        if (index === 0) {
                            needMerge[i].rowArr.push(1);
                            needMerge[i].rowMergeNum = 0;
                        } else {
                            if (item[i] === data[index - 1][i]) {
                                needMerge[i].rowArr[needMerge[i].rowMergeNum] += 1;
                                needMerge[i].rowArr.push(0);
                            } else {
                                needMerge[i].rowArr.push(1);
                                needMerge[i].rowMergeNum = index;
                            }
                        }
                    });
                } else {
                    let firstRowArr = needMerge[arr[0]].rowArr;
                    let firstRowArrDeal = [];
                    firstRowArr.forEach((item, index) => {
                        if (item > 0) {
                            firstRowArrDeal.push(index);
                        }
                    });
                    data.forEach((item, index) => {
                        let sign = false;
                        if (firstRowArrDeal.indexOf(index) > 0) {
                            needMerge[i].rowMergeNum = index;
                            sign = true;
                        }
                        // 表格首个数据单独处理
                        if (index === 0) {
                            needMerge[i].rowArr.push(1);
                            needMerge[i].rowMergeNum = 0;
                        } else {
                            if (item[i] === data[index - 1][i]) {
                                if (sign) {
                                    needMerge[i].rowArr.push(1);
                                } else {
                                    needMerge[i].rowArr[needMerge[i].rowMergeNum] += 1;
                                    needMerge[i].rowArr.push(0);
                                }
                            } else {
                                needMerge[i].rowArr.push(1);
                                needMerge[i].rowMergeNum = index;
                            }
                        }
                    });
                }
            });
            return needMerge;
        },
        objectSpanMethod({ row, column, rowIndex, columnIndex }) {
            for (let res in this.needMergeArr) {
                if (this.needMergeArr[res] == column.property) {
                    return this.mergeAction(column.property, rowIndex, columnIndex);
                }
            }
        },
        mergeAction(val, rowIndex) {
            let _row = this.rowMergeArrs[val].rowArr[rowIndex];
            let _col = _row > 0 ? 1 : 0;
            return [_row, _col];
        },
    }
}
</script>
<style scoped></style>
  

到了这里,关于vue2+elementUI表格实现实现多列动态合并的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue2:elementUI中Form 表单在特定情况下做动态rules添加删除

    先看需求: (不想看的直接拉到最后)  【需求说明】 6、如状态为上架时,库存为必填,下架状态时,库存为可填,前面无星号 实现方法:使用this.$set()和this.$delete() 上代码: 由于设计商业隐私,代码只上传一部分:   表单data中原来的rules: 不添加上下架状态的rules 在

    2023年04月08日
    浏览(30)
  • Vue + ElementUI 实现可编辑表格及校验

    完整代码见文末 使用两个表单分别用于实现修改和新增处理。 通过一个 editIndex 变量判断是否是编辑状态来决定是否展示输入框,当点击指定行的修改后进行设置即可: 通过隐藏表头实现新增表格和修改表格的合并,同时表格数据只有 addRow : 当无数据时只展示新增行: 通

    2024年02月14日
    浏览(28)
  • Vue+ElementUI技巧分享:结合Sortablejs实现表格行拖拽

    在很多动态网页应用中,用户界面的交互性是提高用户体验的关键。在 Vue.js 中,结合 Element UI 和 sortablejs ,我们可以轻松实现表格的行拖拽功能。本文将演示如何在 Vue 项目中使用这些工具,并在拖拽后将数据更新到后端服务系统。 确保你的项目中已经安装了 Element UI 和

    2024年02月04日
    浏览(49)
  • ElementUI之动态树+数据表格+分页->动态树,动态表格

    动态树 动态表格 1.动态树 2.动态表格  

    2024年02月07日
    浏览(37)
  • Node+MySQL+Vue2.0+elementUI实现的博客管理系统(一)

    前端部分: Vue项目的入口文件main.js: 路由文件router.js 登录页面: 项目主页: left:

    2024年02月16日
    浏览(35)
  • vue2 Elementui 树形组件怎么实现多选并获取选中节点的node对象

    一.前言 树形组件是我们经常用到的组件,主要场景就是:公司后台管理的部门管理,做文章目录等。 二.常用的几种方法及说明 1.node-click:节点被点击时的回调 共三个参数,依次为:传递给  data  属性的数组中该节点所对应的对象、 节点对应的 Node 、节点组件本身。 2.c

    2024年02月16日
    浏览(36)
  • Vue elementui 实现表格selection的默认勾选,翻页记录勾选状态

    需求:当弹出一个列表页数据,对其进行筛选选择。 主要使用 toggleRowSelection 代码如下: 上面代码实现了数据刷新后勾选已经选择的数据,但是当新选择数据后翻页,新选择的数据无法保存记录。 row-key :行数据的 Key,用来优化 Table 的渲染;在使用 reserve-selection 功能与显示

    2024年02月11日
    浏览(46)
  • Vue2+ElementUI的el-table实现新增数据行与删除的功能

    TableIndex.vue 如下 新增 按钮添加数据行 删除 按钮提示是否继续删除

    2024年04月23日
    浏览(32)
  • Vue+EleMentUI实现el-table-colum表格select下拉框可编辑

    在进行采购入库的过程中,有必要对表格中的一行进行快速编辑保存,节省时间,提高工作效率!,而不是每次编辑都要弹窗才可编辑 源码:https://gitee.com/charlinchenlin/store-pos 控制是否显示select下拉框 如果showInput的值与当前的inboundId相同,则显示下拉选项,否则显示数据信息

    2024年02月01日
    浏览(74)
  • vue2&Element-ui实现表格单元格合并

    由于项目需要实现单元格合并目前只是单页没有做分页处理先上效果图 看下数据结构 Element table提供的api arraySpanMethod columnIndex=0表示从第一列开始 rowIndex表示需要操作的行数 同济医院加上合计有12行从0开始=11 判断条件是rowIndex余12===0 我们打印一下 或者改成 表示从0开始到1

    2024年02月12日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包