首页 > 其他分享 >el-table 合并单元格

el-table 合并单元格

时间:2023-03-24 11:46:46浏览次数:39  
标签:el const spanArr index 单元格 spanData item table data

1.dom el-table添加方法

:span-method="objectSpanMethod"

2.data数据

//合并表格
columnArr: ['sheetCode', 'sheetName', 'sheetUnit', 'sheetAmout', 'sheetUnitPriceWithRax', 'sheetTotalPriceWithRax', 'sheetTotalPrice', 'relateStatus'],
spanData: []

3.实现方法

 1 getList () {
 2       this.loading = true;
 3       listData(this.queryParams).then(res => {
 4         const list = res
 5         //对数据分组,先根据第一列分组,在对每一组中的数据根据第二列分组,将分组后的数据在按顺序放到一个新的数组中
 6         let result = [];
 7         const xhGroupData = orderBy(map(groupBy(list, "indexNum"), (item, key) => {
 8           return {
 9             indexNum: key,
10             index: item[0].index,
11             value: item
12           };
13         }), 'index');
14         // console.log('111', xhGroupData)
15 
16         for (const data of xhGroupData) {
17           const gcxmGroupData = groupBy(data.value, 'projectName');
18           for (const gcxm in gcxmGroupData) {
19             const item = gcxmGroupData[gcxm];
20             result = [...result, ...item]
21           }
22         }
23         this.getSpanData(result);
24 
25         this.pdbListOfBiddingInfoList = result;
26         this.loading = false;
27       });
28     },
29     // 计算需要合并的单元格
30     getSpanData (data) {
31       if (!data || data.length === 0 || !this.columnArr || this.columnArr.length === 0) {
32         return;
33       }
34       this.spanData = [];
35       for (let i = 0; i < this.columnArr.length; i++) {
36         let contactDot = 0;
37         const spanArr = [];
38         data.forEach((item, index) => {
39           // console.log(item)
40           if (index === 0) {
41             spanArr.push(1);
42           } else {
43             const isMergeRow = this.isMerge(data[index - 1], item, i);
44             if (isMergeRow) {
45               spanArr[contactDot] += 1;
46               spanArr.push(0);
47             } else {
48               contactDot = index;
49               spanArr.push(1);
50             }
51           }
52         });
53         this.spanData.push(spanArr);
54       }
55 
56       // console.log(this.spanData)
57     },
58     // 是否合并
59     isMerge (prevItem, item, index) {
60       let ret = true;
61       for (let i = 0; i <= index; i++) {
62         const element = this.columnArr[i];
63         if (item[element] !== prevItem[element]) {
64           ret = false;
65           break;
66         }
67       }
68       return ret;
69     },
70     // 合并单元格
71     objectSpanMethod ({ row, column, rowIndex, columnIndex }) {
72       if (this.columnArr.includes(column.property)) {
73         const index = this.columnArr.findIndex((item) => { return item == column.property })
74         if (this.spanData[index]) {
75           if (this.spanData[index][rowIndex]) {
76             return {
77               rowspan: this.spanData[index][rowIndex],
78               colspan: 1,
79             };
80           } else {
81             return {
82               rowspan: 0,
83               colspan: 0,
84             };
85           }
86         }
87       }
88     },

 

标签:el,const,spanArr,index,单元格,spanData,item,table,data
From: https://www.cnblogs.com/wjian0916/p/17250983.html

相关文章

  • conda channel
    用conda安装软件的标准语法格式为:$condainstall-c<channel><software>其中-c这个参数很重要,通过它来指定软件下载的镜像位置。默认的condachannel是defaults,但......
  • shell sed命令
    命令介绍sed主要是用来将数据进行选取、替换、删除、新増的命令。我们看看命令的语法选项:-n:一般sed命令会把所有数据都输出到屏幕上。如果加入此选项,则只会把经过s......
  • Laravel 常用辅助函数
    阅读目录Laravel常用辅助函数辅助函数array_dot()辅助函数允许你将多维数组转换为使用点符号的一维数组array_get()函数使用点符号从多维数组中检索值public_path()返回......
  • Laravel 异常错误信息处理
    手动抛出错误try{ $num1=3; if($num1==3){ thrownew\Exception("自定义错误"); }}catch(\Exception$exception){ info($exception->getMessage());}日......
  • laravel-s实现高性能webSocket服务
    laravel-s实现高性能webSocket服务1安装基于LaravelS构建HTTP服务器2在Laravel中集成Swoole实现WebSocket服务器1修改配置文件2创建WebSocketService类3测......
  • C++ 标准库 sort() / stable_sort() / partial_sort() 对比
    C++STL标准库中提供了多个用于排序的Sort函数,常用的包括有sort()/stable_sort()/partial_sort(),具体的函数用法如下表所示:函数用法std::sort(first,last)......
  • what to write in cmakelists.txt to force build 64 bit exe
    Toforcea64-bitbuildinCMake,youcanaddthefollowinglinestoyourCMakeLists.txtfile:set(CMAKE_GENERATOR_PLATFORMx64)set(CMAKE_EXE_LINKER_FLAGS"${......
  • vite 如何使用 element-ui
    vue2vite如何使用element-ui项目版本如下{"dependencies":{"element-ui":"^2.15.13","vue":"^2.7.7"},"devDependencies":{"@vitejs/plu......
  • 详解 RHEL7.1 yum源配置与软件安装
    导读Yum(全称为YellowdogUpdater,Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可......
  • 最强分布式搜索引擎——ElasticSearch
    最强分布式搜索引擎——ElasticSearch本篇我们将会介绍到一种特殊的类似数据库存储机制的搜索引擎工具——ESelasticsearch是一款非常强大的开源搜索引擎,具备非常多强大......