element-ui el-table 多列排序

element-ui el-table 多列排序

需求:el-table 需要支持多列排序,后端排序。即就是在点击后重新发送请求,点击一列的排序,另一列的排序样式能够保留

问题: element table 排序默认是单列排序

最终实现效果:

效果

思路:

  • header-click 事件 结合 header-cell-class-name
    在点击表头的时候排序的列以及是升降序保存到一个数组对象里, 然后通过header-cell-class-name属性设置选中的样式
<el-table
    :data="tableData.list"
    border
    size="mini"
    stripe
    :fit="false"
    :header-cell-class-name="handleHeaderClass"
    @header-click="handleHeaderCLick"
    @sort-change="handleTableSort"
>
<el-table-column
    v-for="(items, i) in dropCol"
    :key="`${tableColList[i].label}${dropCol[i].label}`"
    :prop="dropCol[i].label"
    :sortable="items.labelSupportSort === 1 ? 'custom' : false"
    :column-key="i.toString()"
    :sort-orders="['descending', 'ascending', null]"
    >
<el-table-column>
</el-table>
data: {
    return {
       ordersList: [],
    }
}
// 设置列的排序为我们自定义的排序
handleHeaderClass({ column }) {
    column.order = column.multiOrder
}
// 点击表头
handleHeaderCLick(column) {
    if (column.sortable !== 'custom') {
        return
    }
    if (!column.multiOrder) {
        column.multiOrder = 'descending'
    } else if (column.multiOrder === 'descending') {
        column.multiOrder = 'ascending'
    } else {
        column.multiOrder = ''
    }
    this.handleOrderChange(column.property, column.multiOrder)
}
handleOrderChange (orderColumn, orderState) {
    let result = this.ordersList.find(e => e.orderColumn === orderColumn)
    if (result) {
        result.orderState = orderState
    } else {
        this.ordersList.push({
            orderColumn: orderColumn,
            orderState: orderState
        })
    }
    // 调接口查询,在传参的时候把ordersList进行处理成后端想要的格式
    this.getDataList()
}
// 上面缺点是只能通过点击表头切换排序状态,点击小三角排序不会触发,处理sort-change事件和点击表头一样
// 列表排序
handleTableSort({ column }) {
    // 有些列不需要排序,提前返回
    if (column.sortable !== 'custom') {
        return
    }
    if (!column.multiOrder) {
        column.multiOrder = 'descending'
    } else if (column.multiOrder === 'descending') {
        column.multiOrder = 'ascending'
    } else {
        column.multiOrder = ''
    }
    this.handleOrderChange(column.property, column.multiOrder)
}
  • 9
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值