el-table 表格懒加载的同时合并单元格

这篇具有很好参考价值的文章主要介绍了el-table 表格懒加载的同时合并单元格。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

el-table 表格懒加载的同时合并单元格,前端开发,elementui,element-ui,javascript,前端文章来源地址https://www.toymoban.com/news/detail-744373.html

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <!-- import CSS -->
    <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
</head>

<body>
    <div id="app">
        <div>
            <div class="preview app-container" ref="preview">
                <el-table :data="tableData" height="900" :header-cell-style="handerMethod" 
                    :span-method="objectSpanMethod" border fit highlight-current-row style="margin-top: 10px;"
                    row-key="id" lazy :load="load" :tree-props="{children:'children',hasChildren:'hasChildren'}"
                    @expand-change="expandChange">
                    <el-table-column prop='firstRisk' label='一级风险' align="center" type=""
                        :show-overflow-tooltip="true"></el-table-column>
                    <el-table-column prop='secRisk' label='二级风险' align="center" type=""
                        :show-overflow-tooltip="true"></el-table-column>
                    <el-table-column prop='' label='预警指标' align="center" :show-overflow-tooltip="true">
                        <el-table-column label="" prop='earlyWarning' align="center">
                        </el-table-column>
                    </el-table-column>
                    <el-table-column prop='description' label='期末' align="center"
                        :show-overflow-tooltip="true"></el-table-column>
                    <el-table-column prop='status' label='季度' align="center"
                        :show-overflow-tooltip="true"></el-table-column>
                    <el-table-column prop='status' label='同比增减率' align="center"
                        :show-overflow-tooltip="true"></el-table-column>
                    <el-table-column prop='status' label='备注' align="center"
                        :show-overflow-tooltip="true"></el-table-column>
                    <el-table-column prop='status' label='说明' align="center"
                        :show-overflow-tooltip="true"></el-table-column>
                    <el-table-column prop='ISstatus' label='是否为风险' align="center"
                        :show-overflow-tooltip="true"></el-table-column>
                    <el-table-column prop='status' label='环比增减率' align="center"
                        :show-overflow-tooltip="true"></el-table-column>
                </el-table>
            </div>
        </div>
    </div>
</body>
<!-- import Vue before Element -->
<script src="https://unpkg.com/vue@2/dist/vue.js"></script>
<!-- import JavaScript -->
<script src="https://unpkg.com/element-ui/lib/index.js"></script>
<script>
    new Vue({
        el: '#app',
        data: function () {
            return {
                tableData: [
                    {
                        id: 1,
                        firstRisk: "战略风险",
                        secRisk: "宏观经济风险",
                        earlyWarning: "国内外宏观经济",
                        type: "国内外宏观经济",
                        description: "-",
                        ISstatus: "是",
                        hasChildren: true,
                        children: [],
                        expandTrue: false,
                    },
                    {
                        id: 2,
                        firstRisk: "战略风险",
                        secRisk: "政策风险",
                        earlyWarning: "国家及行业",
                        type: "国家及行业",
                        description: "-",
                        ISstatus: "是",
                        hasChildren: true,
                        children: [], expandTrue: false,

                    },
                    {
                        id: 3,
                        firstRisk: "战略风险",
                        secRisk: "国际化经营风险",
                        earlyWarning:
                            "受关税政策影响的子企业数量(个)",
                        type: "受关税政策影响的子企业数量(个)",
                        description: "-",
                        ISstatus: "是",
                        hasChildren: true,
                        children: [], expandTrue: false,

                    },
                    {
                        id: 4,
                        firstRisk: "战略风险",
                        secRisk: "国际化经营风险",
                        earlyWarning: "境外中高风险地区境外资产总额1",
                        type: "金额(万元)",
                        description: "-",
                        ISstatus: "是",
                        hasChildren: true,
                        children: [], expandTrue: false,

                    },
                    {
                        id: 5,
                        firstRisk: "战略风险",
                        secRisk: "国际化经营风险",
                        earlyWarning: "境外中高风险地区境外资产总额2",
                        type: "占比总额比重",
                        description: "-",
                        ISstatus: "是",
                        hasChildren: true,
                        children: [], expandTrue: false,


                    },
                    {
                        id: 6,
                        firstRisk: "战略风险",
                        secRisk: "国际化经营风险",
                        earlyWarning: "项目逾期数量(个)",
                        type: "项目逾期数量(个)",
                        description: "-",
                        ISstatus: "是",
                        hasChildren: true,
                        children: [], expandTrue: false,

                    },
                    {
                        id: 7,
                        firstRisk: "战略风险",
                        secRisk: "国际化经营风险",
                        earlyWarning: "境外重大法律诉讼案件1",
                        type: "数量(个)",
                        description: "-",
                        ISstatus: "是",
                        hasChildren: true,
                        children: [], expandTrue: false,

                    },
                    {
                        id: 8,
                        firstRisk: "战略风险",
                        secRisk: "国际化经营风险",
                        earlyWarning: "境外重大法律诉讼案件2",
                        type: "涉案金额(万元)",
                        description: "-",
                        ISstatus: "是",
                        hasChildren: true,
                        children: [], expandTrue: false,

                    },

                    {
                        id: 9,
                        firstRisk: "战略风险",
                        secRisk: "科技创新风险",
                        earlyWarning: "科研投入1",
                        type: "金额(万元)",
                        description: "-",
                        ISstatus: "是",
                        hasChildren: true,
                        children: [], expandTrue: false,

                    },
                    {
                        id: 10,
                        firstRisk: "战略风险",
                        secRisk: "科技创新风险",
                        earlyWarning: "科研投入2",
                        type: "占总收入比重",
                        description: "-",
                        ISstatus: "是",
                        hasChildren: true,
                        children: [], expandTrue: false,

                    },
                ],
                oneNameArr: [],
                oneNamePos: 0,
                twoNameArr: [],
                twoNamePos: 0,
            }
        }
        , mounted() {
            this.merage();
        },
        methods: {
            expandChange(row, expand) {
                console.log('row,expand----------------------', row, expand)
                row.expandTrue = expand
                this.merage()
            },
            load(tree, treeNode, resolve) {
                let obj = {}
                if (tree.earlyWarning == '国内外宏观经济') {
                    obj = {
                        id: 11,
                        firstRisk: "战略风险",
                        secRisk: "宏观经济风险",
                        earlyWarning: "国内外宏观经济",
                        type: "国内外宏观经济",
                        description: "-",
                        ISstatus: "是",
                    }
                } else if (tree.earlyWarning == '国家及行业') {
                    obj =
                    {
                        id: 13,
                        firstRisk: "战略风险",
                        secRisk: "政策风险",
                        earlyWarning: "国家及行业",
                        type: "国家及行业",
                        description: "-",
                        ISstatus: "是",
                    }
                }
                else if (tree.earlyWarning == '受关税政策影响的子企业数量(个)') {
                    obj =
                    {
                        id: 14,
                        firstRisk: "战略风险",
                        secRisk: "国际化经营风险",
                        earlyWarning:
                            "受关税政策影响的子企业数量(个)",
                        type: "受关税政策影响的子企业数量(个)",
                        description: "-",
                        ISstatus: "是",
                    }
                } else if (tree.earlyWarning == '境外中高风险地区境外资产总额1') {
                    obj =
                    {
                        id: 15,
                        firstRisk: "战略风险",
                        secRisk: "国际化经营风险",
                        earlyWarning: "境外中高风险地区境外资产总额1",
                        type: "金额(万元)",
                        description: "-",
                        ISstatus: "是",
                    }
                } else if (tree.earlyWarning == '境外中高风险地区境外资产总额2') {
                    obj =
                    {
                        id: 16,
                        firstRisk: "战略风险",
                        secRisk: "国际化经营风险",
                        earlyWarning: "境外中高风险地区境外资产总额2",
                        type: "占比总额比重",
                        description: "-",
                        ISstatus: "是",
                    }
                } else if (tree.earlyWarning == '项目逾期数量(个)') {
                    obj =
                    {
                        id: 17,
                        firstRisk: "战略风险",
                        secRisk: "国际化经营风险",
                        earlyWarning: "项目逾期数量(个)",
                        type: "项目逾期数量(个)",
                        description: "-",
                        ISstatus: "是",
                    }
                } else if (tree.earlyWarning == '境外重大法律诉讼案件1') {
                    obj =
                    {
                        id: 18,
                        firstRisk: "战略风险",
                        secRisk: "国际化经营风险",
                        earlyWarning: "境外重大法律诉讼案件1",
                        type: "数量(个)",
                        description: "-",
                        ISstatus: "是",
                    }
                } else if (tree.earlyWarning == '境外重大法律诉讼案件2') {
                    obj =
                    {
                        id: 19,
                        firstRisk: "战略风险",
                        secRisk: "国际化经营风险",
                        earlyWarning: "境外重大法律诉讼案件2",
                        type: "涉案金额(万元)",
                        description: "-",
                        ISstatus: "是",
                    }
                } else if (tree.earlyWarning == '科研投入1') {
                    obj =
                    {
                        id: 20,
                        firstRisk: "战略风险",
                        secRisk: "科技创新风险",
                        earlyWarning: "科研投入1",
                        type: "金额(万元)",
                        description: "-",
                        ISstatus: "是",
                    }
                }
                let list = []
                if (Object.keys(obj).length > 0) {
                    list = [obj]
                } else {
                    list = []

                }
                tree.children = [...list]
                resolve([...list])
            },
            //隐藏表头
            handerMethod({ rowIndex }) {
                // background: 'rgb(242, 242, 242)';
                if (rowIndex === 1) {
                    //这里为了是将第二列的表头隐藏,就形成了合并表头的效果
                    return { display: "none" };
                } else {
                    return { background: "rgb(242, 242, 242)" };
                }
            },
			// tree-》list
            flatten(arr){
              let _this=this
              return [].concat(...arr.map(item =>{
                if(item.expandTrue && item.children&&item.children.length > 0){
                  let arr =[].concat(item,..._this.flatten(item.children))
                  delete item.children
                  return arr
                }
                return [].concat(item)
              }))
            },
            // 将tableData中的数据进行排序
            endtable(ids,list,tableData){
              let _this = this
              tableData.forEach((item)=>{
                let idIndex=ids.indexOf(item.id)
                delete item.indexxxx 
                if(idIndex >-1){
                  item.indexxxx = list[idIndex].indexxxx 
                }
                if(item.children&&item.children.length>0){
                  _this.endtable(ids,list,item.children)
                }
              })
            },
            merageInit() {
                this.oneNameArr = [];
                this.oneNamePos = 0;
                this.twoNameArr = [];
                this.twoNamePos = 0;
            },
            merage() {
                this.merageInit();
				let tableData1 =JSON.parse(JSON.stringify(this.tableData));
                // 将获取的数据进行平铺
                let list = this.flatten(tableData1);
                    
                // 将展示出的数据进行排序,字段是indexxxx ,用于合并单元格(反复合并单元格会出现异常,所以通过这种方式解决)
                let num = 0;
                for (let i = 0; i < list.length; i += 1) {
                  list[i].indexxxx = num;
                  num++;
                }
                // 将展示出的数据进行排序,字段是indexxxx 
                let ids = list.map((item)=>{return item.id})
                this.endtable(ids,list,this.tableData)
                
                console.log('list', list)
                let tableList = JSON.parse(JSON.stringify(list))

                for (let i = 0; i < tableList.length; i += 1) {
                    console.log('tableList', tableList)
                    if (i === 0) {
                        // 第一行必须存在
                        this.oneNameArr.push(1);
                        this.oneNamePos = 0;
                        this.twoNameArr.push(1);
                        this.twoNamePos = 0;
                    } else {
                        // 判断当前元素与上一个元素是否相同,eg:this.oneNamePos 是 this.oneNameArr序号
                        // 第一列
                        if (tableList[i].firstRisk === tableList[i - 1].firstRisk) {
                            this.oneNameArr[this.oneNamePos] += 1;
                            this.oneNameArr.push(0);
                        } else {
                            this.oneNameArr.push(1);
                            this.oneNamePos = i;
                        }
                        // 第二列
                        if (
                            tableList[i].secRisk === tableList[i - 1].secRisk &&
                            tableList[i].firstRisk === tableList[i - 1].firstRisk
                        ) {
                            this.twoNameArr[this.twoNamePos] += 1;
                            this.twoNameArr.push(0);
                        } else {
                            this.twoNameArr.push(1);
                            this.twoNamePos = i;
                        }
                    }
                }
                this.$ref.tableData.doLayout()
            },

            objectSpanMethod({ row, column, rowIndex, columnIndex }) {
                // if (columnIndex === 0) { // 用于设置要合并的列
                //   if (rowIndex % 2 === 0) { // 用于设置合并开始的行号
                //     return {
                //       rowspan: 2, // 合并的行数
                //       colspan: 1, // 合并的列数, 设置为0则直接不显示
                //     };
                //   }
                //   return {
                //     rowspan: 0,
                //     colspan: 0,
                //   };
                // }
                // this.tableData[i].children[j].indexxxx=pppp
                console.log("dsagvds", row, column, rowIndex, columnIndex);
                if (columnIndex === 0) {
                    // 第一列的合并方法
                    const row1 = this.oneNameArr[row.indexxxx];
                    const col1 = row1 > 0 ? 1 : 0; // 如果被合并了row = 0; 则他这个列需要取消
                    return {
                        rowspan: row1,
                        colspan: col1,
                    };
                } else if (columnIndex === 1) {
                    // 第二列的合并方法
                    const row2 = this.twoNameArr[row.indexxxx];
                    const col2 = row2 > 0 ? 1 : 0; // 如果被合并了row = 0; 则他这个列需要取消
                    return {
                        rowspan: row2,
                        colspan: col2,
                    };
                }
            },

        }
    })
</script>

</html>

到了这里,关于el-table 表格懒加载的同时合并单元格的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • el-table 合并单元格(合并行)

    1.  添加 :span-method=\\\"objectSpanMethod\\\"  2.  写objectSpanMethod 方法 其中,switch中 0和1 是根据下面这张图中的顺序来的,  完整代码如下:

    2024年02月11日
    浏览(40)
  • el-table 实现表、表格行、表格列合并

    最近写vue开发项目的时候,很多地方用到了Element组件中的Table 表格。经过一周的边学边做,我总结了以下三种有关表格的合并方法。 话不多说,先看效果图  代码如下: 表格结构如上,其中:header-cell-style对表头做了一些处理。  效果图如: 代码如下: 要进行表格合并,关

    2024年02月09日
    浏览(34)
  • el-table合并单元格

    el-tabel数据结构 此处为this.rolePermitItemList 合并后的样式: el-table-column 需要添加property字段,属性值同props,用来判断需要合并的字段

    2024年02月14日
    浏览(42)
  • el-table单元格合并思路

    el-table单元格合并的关键是el-table的 span-method 属性,本文将讲解一下我在单元格合并的思路,本人前端小白,可能有理解错误仅供参考,本文重点介绍思路,毕竟每个人需求不一样 注意:有时候不需要单元格合并,可以使用插槽 前提 单元格的合并必须得有数据,所以应该先

    2024年02月12日
    浏览(40)
  • el-table 怎么合并相同单元格

    问题背景 项目需求table表格中,相同的类型合并成一个单元格展示。 问题描述 el-table 并没有相关的语法直接合并,需要我们自己传入一个方法返回一个数组格式,来确定要合并行列。 解决问题 首先需要在 el-table 标签上绑定 :span-method=\\\"objectSpanMethod\\\" 再去 methods 中定义 object

    2024年02月16日
    浏览(46)
  • Element ui el-table 合并单元格

      el-table v-loading=\\\"loading\\\" :data=\\\"tableData\\\" style=\\\"width: 100%\\\" highlight-current-row :span-method=\\\"arraySpanMethod\\\"         el-table-column type=\\\"index\\\" label=\\\"序号\\\" /         el-table-column v-for=\\\"item in formThead\\\" :key=\\\"item.label\\\" :label=\\\"item.label\\\" :prop=\\\"item.prop\\\" :formatter=\\\"item.formatter\\\" :width=\\\"item.width || \\\'auto\\\'\\\" /        

    2024年02月02日
    浏览(36)
  • el-table实现纯前端导出(适用于el-table任意表格)

    2023.9.1今天我学习了如何使用el-table实现前端的导出功能,该方法的好处有无论你的el-table长什么样子,导出之后就是什么样子。 1.安装三个插件 npm install file-save npm install xlsx npm install xlsx-style 2.创建Export2Excel.js 3.按需引入 4.vue.config.js引入 效果: 扩展: 当我们会出现这样的表

    2024年02月10日
    浏览(48)
  • element ui修改el-table表格单元格边框颜色

    element-ui官网 第一步:设置除表头单元格边框样式 :cell-style=“{borderColor:‘#01e3ed’}” 第二步:设置表头单元格边框样式 :header-cell-style=“{borderColor:#01e3ed}” 第三步:单独给表格加样式 加个类名class=“exporttable” 第四步:功能实现 -点赞 + 收藏!你是最美的!

    2024年02月14日
    浏览(33)
  • element-ui中的el-table合并单元格

    在写项目的时候有时候会经常遇到把行和列合并起来的情况,因为有些数据是重复渲染的,不合并行列会使表格看起来非常的混乱,如下:  而我们想要的数据是下面这种情况,将重复的行进行合并,使表格看起来简单明了,如下:   1:html部分 所谓的合并行就是将多行相同

    2024年02月10日
    浏览(42)
  • El-table 懒加载表格中新增、删除遇到的问题

    我是用的版本是: 官方给的例子中只是一个单纯的展示,但实际需求中可能会有一些其他需求,比如新增、修改。 然后遇到了各种问题,因此记录一下。 :tree-props=\\\"{ children: \\\'children\\\', hasChildren: \\\'hasChildren\\\' }\\\" ,先说一下配置 从下图可以看到,懒加载方法只执行了一次。当你手

    2024年02月12日
    浏览(47)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包