使用iviewui的renderHeader实现多个列同时排序

        sortParams: {}, // 存储排序状态 { columnKey: 'asc'/'desc' }
        columns: [
            {
                title: '姓名',
                key: 'name',
                sortNumber:1,
                renderHeader: (h, { column }) => {
                    //console.log('this.app',this.app)
                    if (this.app){
                        return this.app.renderSorterHeader(h, column);
                    }
                }
            },
            {
                title: '年龄',
                key: 'age',
                sortNumber:0,
                renderHeader: (h, { column }) => {
                    //console.log('this.app',this.app)
                    if (this.app){
                        return this.app.renderSorterHeader(h, column);
                    }
                }
            },
            // 其他列...
        ],
        renderSorterHeader(h, column) {
            console.log('this.sortParams',this.sortParams,'column',column)
            let currentOrder ;
            if ( this.sortParams[column.sortNumber]){
                currentOrder = this.sortParams[column.sortNumber].currentOrder;
            }
            return h('div', {
                class: '',
            }, [
                h('span', {},[column.title]),
                h('span', {
                    class: 'ivu-table-sort',
                }, [
                    h('i', {
                        class: {
                            'ivu-icon': true,
                            'ivu-icon-md-arrow-dropup': true,
                            'on': currentOrder === 'asc'
                        },
                        on: {
                            click: () => this.handleSort(column,'asc')
                        }
                    }),
                    h('i', {
                        class: {
                            'ivu-icon': true,
                            'ivu-icon-md-arrow-dropdown': true,
                            'on': currentOrder === 'desc'
                        },
                        on: {
                            click: () => this.handleSort(column,'desc')
                        }
                    })
                ])
            ]);
        },

        handleSort(column,order) {
            let col = {
                'ordertext':column.key+" "+column.order+(column.order=='desc'?' nulls last':' nulls first'),
                'currentOrder':order,
                'column':column,
            }
            if ( this.sortParams[column.sortNumber]){
                const currentOrder = this.sortParams[column.sortNumber].currentOrder;
                if (currentOrder===order){
                    this.$delete(this.sortParams, column.sortNumber);
                }else {
                    this.$set(this.sortParams, column.sortNumber, col);
                }

                console.log('currentOrder',currentOrder)
            }else {
                this.$set(this.sortParams, column.sortNumber, col);
            }
            // 获取对象的所有键
            const keys = Object.keys(this.sortParams);
            // 对键进行排序
            keys.sort((a, b) => a - b);

            for (let i = 0; i < keys.length; i++) {
                const key = keys[i];
                const value = this.this[key];
                console.log(`键: ${key}, 值: `,value);
            }
        }

效果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个便士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值