目录

Element-Plus-表格后端排序

Element Plus 表格后端排序

element 表格后端排序(element和element plus通用)

问题

element排序采用官方给出的方案,按部就班后的产生的问题是:给出的排序有三种状态, descendingascendingnull 但是我只需要前面两种,目前的效果如下: https://i-blog.csdnimg.cn/blog_migrate/ff725c0df6af41d2b892451219079fff.gif#pic_center

解决方法

使用两个变量分别保存上一次为null时的prop和 保存之前的排序状态,实现效果: https://i-blog.csdnimg.cn/blog_migrate/cedc31f52c2a2fbecd6b7eb6ba92f4cd.gif#pic_center

代码:

html:

 <el-table
          :data="dataObj.dataList"
          ref="multipleTable"
          slot="empty"
          :height="tableHeight"
          @sort-change="colChange"
          :sort-orders="['ascending', 'descending']"
          :default-sort="{prop: 'id', order: 'descending'}"
          :cell-class-name="rowClass"
      >

js(vue3的写法)

  const dataObj = reactive({
      searchObj: {
        id: '',
        planName: '',
        createUser: '',
        status: undefined,
        orderBy: 'id',
        orderType: 'desc',
      },
      dataList: [],
      searchPage: {
        pageSize: 10,
        pageNum: 1,
      },
      prevProp: 'id', // 保存上一次为null时的prop
      saveSort: 'descending',  // 保存之前的排序状态
    })
	// 排序
    const colChange = ({column, prop, order}) => {
      if (order && dataObj.prevProp !== prop) {
        dataObj.prevProp = prop
      }
      if (!order) {
        order = dataObj.saveSort === 'descending' ? 'ascending' : 'descending'
        that.$refs.multipleTable.sort(dataObj.prevProp, order)
        prop = dataObj.prevProp
      }
      dataObj.saveSort = order
      dataObj.searchObj.orderBy = prop
      dataObj.searchObj.orderType = dataObj.saveSort === 'descending' ? 'desc' : 'asc'
      if (column) getDataList() // 获取数据的方法
    }
    // 重置
    const resetData = () => {
      dataObj.searchPage.pageSize = 10
      dataObj.searchPage.pageNum = 1
      dataObj.searchObj = {}
      that.$refs.multipleTable.sort('id', 'descending')
    }