【elementUI系列三】el-table多列排序(后端排序)、重置后清除排序

系列文章目录


前言

业务需求el-table 需要支持多列排序,后端排序。即就是在点击后重新发送请求,点击一列的排序,另一列的排序样式能够保留,但是el-table默认是单列(一个字段)排序。点击一列排序,另一列排序自动消失

一、解决方案

想要支持多列排序,首先要定义一个数组,用于存放所有排序的字段及其顺序,
设置列sortable=“custom”,结合sort-change事件header-cell-class-name属性,在点击排序箭头时进行排序操作

二、使用步骤

1.el-table添加属性和事件

代码如下:

<el-table
      ref="opn_table"
      :data="tableData"
      :loading="table_loading"
      row-key="id"
      :header-cell-class-name="handleHeaderClass"
      @sort-change="sortChange"
      >
      <el-table-column
        prop="firstSubmitTime"
        label="提交时间"
        sortable="custom"
        align="center"
        width="150">
        <template slot-scope="scope">
          <span>{{
            scope.row.firstSubmitTime
              ? formatDates(scope.row.firstSubmitTime)
              : ''
          }}</span>
        </template>
      </el-table-column>
      <el-table-column
        prop="auditTime"
        label="审核时间"
        sortable="custom"
        align="center"
        >
      </el-table-column>
</el-table>

2.添加数组,存储排序数据

代码如下:

<script>
  export default {
    data() {
      return {
        tableData: [],
        ordersList: [],

      }
    },
    methods: {
      // 排序
      sortChange({ column, prop, order }) {
        console.log(column, prop, order);
        // 有些列不需要排序,提前返回
        if (column.sortable !== 'custom') {
          return;
        }
        column.multiOrder = order;
        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进行处理成后端想要的格式
        console.log('this.ordersList : 排序列', this.ordersList);
        this.getData();
      },
      // 设置列的排序为我们自定义的排序
      handleHeaderClass({ column }) {
        column.order = column.multiOrder;
      },
    }
  }
</script>

 3.查询和重置清除排序选项和ordersList

代码如下:

/**
       * @description:清除排序
       */
      resetOrder() {
        this.$refs.opn_table.clearSort();
        let columns = this.$refs.opn_table.columns;
        columns.forEach((column) => {
          if (column.sortable == 'custom') {
            column.order = undefined;
            column.multiOrder = undefined;
          }
        });
        this.ordersList = [];
      },

总结

多列排序后,点击刷新,调用官方提供的clearSort(),清除不了最后点击的字段对应的高亮,需要借助'custom'属性值实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值