基于VUE+elementUI表格的行合并

后端返回列表数据格式:

{
    "respCode":"0",
    "respMsg":"success!",
    "result":[
        {
            "riskIndexList":[
                {
                    "riskItemsName":"xxxxxxxxxxxxxx",
                    "riskItemsScore":10
                }
            ],
            "riskIndexName":"指标1"
        },
        {
            "riskIndexList":[
                {
                    "riskItemsName":"xxxxxxxxxxxxxx",
                    "riskItemsScore":78
                },
                {
                    "riskItemsName":"xxxxxxxxxxxxxx",
                    "riskItemsScore":24
                }
            ],
            "riskIndexName":"指标2"
        },
        {
            "riskIndexList":[
                {
                    "riskItemsName":"xxxxxxxxxxxxxx",
                    "riskItemsScore":61
                },
                {
                    "riskItemsName":"xxxxxxxxxxxxxx",
                    "riskItemsScore":88
                },
                {
                    "riskItemsName":"xxxxxxxxxxxxxx",
                    "riskItemsScore":5
                }
            ],
            "riskIndexName":"指标3"
        }
    ]
}

前端处理:

<template>
    <div>
        <el-table v-loading="loading" size="small" border :data="tableData" :span-method="lineSplicing">
            <el-table-column align="center" property="riskIndexName" label="风险评估指标"></el-table-column>
            <el-table-column align="center" property="riskItemsName" label="风险子项"></el-table-column>
            <el-table-column align="center" property="riskItemsScore" label="得分"></el-table-column>
        </el-table>
    </div>
</template>
<script>
import _$http from '@/model/http';
export default {
    data() {
        return {
            tableData: [],
            loading: false,
            arr: []
        }
    },
    mounted() {
        this.searchScoreCustomer();
    },
    methods: {
        // 行合并
        lineSplicing({ row, column, rowIndex, columnIndex }) {
            if (columnIndex === 0) {
                let obj = [0, 0];
                this.arr.some(e => {
                    if (rowIndex === e.row) {
                        obj = [e.rowLength, 1]
                    }
                })
                return obj;
            }
        },
        searchScoreCustomer() {
            this.loading = true;
            let arr = []; // 保存表格合并需要的数据
            let start = 0;
            let url = 'xxx';
            _$http._post(url, {})
            .then(res => {
                if (res.data.respCode === '00') {
                    this.loading = false;
                    let results = [];
                    if (res.data.result) {
                        res.data.result.forEach((e, i, data) => {
                            e.riskIndexList.forEach(child => {
                                child.riskIndexName = e.riskIndexName;
                            })
                            results.push(e.riskIndexList);
                            if (arr.length) {
                                // 第一次从第0行开始合并,第二次的开始位置是第一次的位置加上合并行数
                                start = arr[arr.length - 1].row + data[i - 1].riskIndexList.length
                            }
                            arr.push({
                                row: start, // 合并的起始行(从哪一行开始合并)
                                rowLength: e.riskIndexList.length // 每次需要合并几行
                            })
                        })
                        this.arr = arr;
                        results.forEach(item => {
                            item.forEach(e => {
                                this.tableData.push(e);
                            })
                        })
                    } else {
                        return;
                    }
                } else {
                    this.$message.error(res.data.respMsg);
                }
            })
            .catch(err => {
                this.loading = false;
                console.warn(err);
            })
        }
    }
}
</script>

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值