element-ui合并行实现


需求:

  客户料号以及销售订单号一致的数据只显示其中一个超PO数

实现的效果如下:

 

代码如下:

1.页面代码

  1. <el-row style="margin-left:-50px"> <el-col :sapn="24"> <el-form-item> <h4 style="font-size:14px;margin:0 0 10px 0;"> 成品报废明细表 </h4> <el-table :data="Finished_M_List" border size="mini" :span-method="objectSpanMethod" style="text-align:center" > <el-table-column prop="KUNNR" label="客户编号" width="100"></el-table-column> <el-table-column prop="VKBUR" label="营业部门" width="100"></el-table-column> <el-table-column prop="AUFNR" label="工单号" width="100"></el-table-column> <el-table-column prop="MENGE" label="超PO数" width="80" ></el-table-column> <el-table-column prop="ZCSMT" label="客户料号" width="100"></el-table-column> <el-table-column prop="VBELN" label="销售订单号" width="100"></el-table-column> <el-table-column prop="BDMNG" label="报废数量" width="80"></el-table-column> <el-table-column prop="KOSTL" label="责任部门" width="80"></el-table-column> <el-table-column prop="ZAMNT" label="报废金额" width="80"></el-table-column> <el-table-column prop="WAERS" label="币别" width="80"></el-table-column> <el-table-column prop="CHARG" label="批次" width="100"></el-table-column> </el-table> </el-form-item> </el-col> </el-row>

2.自定义处理数组的代码

 1 initFinished: function () {
 2 var _this = this;
 3 axios.get('/FinishedInventory_Sap/initFinished?WorkID=' + _this.viewModel.OID.value).then(function (res) {
 4 _this.FinishedList = res.data.Data;
 5 
 6 //复制源数据
 7 _this.Finished_M_List = JSON.parse(JSON.stringify(_this.FinishedList));
 8 
 9 //定义临时空数组,接收根据客户料号和销售订单号重新排序后的数组
10 let TemporaryList = [];
11 //遍历报废成品数组
12 for (let i = 0; i < _this.Finished_M_List.length; i++) {
13 //判断元素状态(初始状态为空,添加到临时数组后置1)
14 if (_this.Finished_M_List[i].STATE != 1) {
15 TemporaryList.push(_this.Finished_M_List[i])
16 _this.Finished_M_List[i].STATE = 1;
17 }
18 //从i+1个元素开始查找客户料号、销售订单号相同的元素
19 for (let j = i + 1; j < _this.Finished_M_List.length; j++) {
20 //已加入临时数组的元素不参与后续查找
21 if (_this.Finished_M_List[j].STATE != 1) {
22 if (_this.Finished_M_List[i].ZCSMT == _this.Finished_M_List[j].ZCSMT && _this.Finished_M_List[i].VBELN == _this.Finished_M_List[j].VBELN) {
23 TemporaryList.push(_this.Finished_M_List[j]);
24 _this.Finished_M_List[j].STATE = 1;
25 }
26 }
27 console.log(TemporaryList)
28 }
29 
30 }
31 _this.Finished_M_List = JSON.parse(JSON.stringify(TemporaryList))
32 _this.rowspan();
33 })
34 }

3.合并规则代码

 1 //设置合并规则
 2 rowspan() {
 3 // 在data里面定义
 4 this.spanArr = []
 5 // 在data里面定义
 6 this.position = 0
 7 console.log(this.Finished_M_List)
 8 this.Finished_M_List.forEach((item, index) => {
 9 if (index === 0) {
10 this.spanArr.push(1)
11 this.position = 0
12 // 设置序号
13 //item.sequence = index + 1;
14 
15 } else {
16 if (this.Finished_M_List[index].ZCSMT === this.Finished_M_List[index - 1].ZCSMT && this.Finished_M_List[index].VBELN === this.Finished_M_List[index - 1].VBELN) {
17 // 连续有几行项目名名称相同
18 this.spanArr[this.position] += 1
19 // 名称相同后往数组里面加一项0
20 this.spanArr.push(0)
21 
22 // 当项目名称相同时,设置当前序号和前一个相同
23 //this.Finished_M_List[index].sequence = this.Finished_M_List[index - 1].sequence
24 } else {
25 this.spanArr.push(1)
26 this.position = index
27 // 当项目名称不同时,将当前序号设置为前一个序号+1
28 //this.Finished_M_List[index].sequence = this.Finished_M_List[index - 1].sequence + 1
29 }
30 }
31 })
32 //console.log(this.spanArr)
33 }
34 
35 }

4.最后是定义objectSpanMethod方法

 1 objectSpanMethod({ row, column, rowIndex, columnIndex }) {
 2 //通过给table传入span - method方法可以实现合并行或列,方法的参数是一个对象,里面包含当前行row、当前列column、当前行号rowIndex、
 3 //当前列号columnIndex四个属性。该函数可以返回一个包含两个元素的数组,第一个元素代表rowspan,第二个元素代表colspan。
 4 //也可以返回一个键名为rowspan和colspan的对象。
 5 // 表格合并行
 6 // 序号列也进行合并(第一列)
 7 if (columnIndex === 3) {
 8 // this.spanArr这个数组里面存的是table里面连续的有几条数据相同
 9 // 例如:[1,1,2,0,2,0]
10 // 1 代表的没有连续的相同的
11 // 2 代表连续的两个相同
12 // 0 代表是和上一条内容相同
13 const _row = this.spanArr[rowIndex]
14 const _col = _row > 0 ? 1 : 0
15 return {
16 rowspan: _row,
17 colspan: _col
18 }
19 }
20 
21 }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM