element-ui el-table 多列排序

Dear 丶 2022-10-15 12:59 161阅读 0赞

element-ui el-table 多列排序

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

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

最终实现效果:

20210525141205431.png

思路:

  • header-click 事件 结合 header-cell-class-name
    在点击表头的时候排序的列以及是升降序保存到一个数组对象里, 然后通过header-cell-class-name属性设置选中的样式

    <el-table

    1. :data="tableData.list"
    2. border
    3. size="mini"
    4. stripe
    5. :fit="false"
    6. :header-cell-class-name="handleHeaderClass"
    7. @header-click="handleHeaderCLick"
    8. @sort-change="handleTableSort"

    >
    <el-table-column

    1. v-for="(items, i) in dropCol"
    2. :key="`${tableColList[i].label}${dropCol[i].label}`"
    3. :prop="dropCol[i].label"
    4. :sortable="items.labelSupportSort === 1 ? 'custom' : false"
    5. :column-key="i.toString()"
    6. :sort-orders="['descending', 'ascending', null]"
    7. >


    data: {

    1. return {
    2. ordersList: [],
    3. }

    }
    // 设置列的排序为我们自定义的排序
    handleHeaderClass({ column }) {

    1. column.order = column.multiOrder

    }
    // 点击表头
    handleHeaderCLick(column) {

    1. if (column.sortable !== 'custom') {
    2. return
    3. }
    4. if (!column.multiOrder) {
    5. column.multiOrder = 'descending'
    6. } else if (column.multiOrder === 'descending') {
    7. column.multiOrder = 'ascending'
    8. } else {
    9. column.multiOrder = ''
    10. }
    11. this.handleOrderChange(column.property, column.multiOrder)

    }
    handleOrderChange (orderColumn, orderState) {

    1. let result = this.ordersList.find(e => e.orderColumn === orderColumn)
    2. if (result) {
    3. result.orderState = orderState
    4. } else {
    5. this.ordersList.push({
    6. orderColumn: orderColumn,
    7. orderState: orderState
    8. })
    9. }
    10. // 调接口查询,在传参的时候把ordersList进行处理成后端想要的格式
    11. this.getDataList()

    }
    // 上面缺点是只能通过点击表头切换排序状态,点击小三角排序不会触发,处理sort-change事件和点击表头一样
    // 列表排序
    handleTableSort({ column }) {

    1. // 有些列不需要排序,提前返回
    2. if (column.sortable !== 'custom') {
    3. return
    4. }
    5. if (!column.multiOrder) {
    6. column.multiOrder = 'descending'
    7. } else if (column.multiOrder === 'descending') {
    8. column.multiOrder = 'ascending'
    9. } else {
    10. column.multiOrder = ''
    11. }
    12. this.handleOrderChange(column.property, column.multiOrder)

    }

发表评论

表情:
评论列表 (有 0 条评论,161人围观)

还没有评论,来说两句吧...

相关阅读