本文介绍: 后台一次返回全部数据需要对所有数据进行排序


场景

后台一次性返回全部数据,需要前端对所有数据进行分页排序

在这里插入图片描述


思路

使用elementui自定义排序 规则,将 sortable 设置custom ,同时在 Table监听 sortchange 事件,在事件回调可以获取当前排序字段名排序顺序,从而对所有数据进行排序再对表格数据进行分页计算

代码

<el-table
        :data="currentPageData"
        :header-cell-style="{background:'#eef1f6',height: '48px'}"
        @sort-change="sortChange"
        border
        style="width: 100%;">
        
       /* 需要排序的列 */ 
      <el-table-column
          prop="report_type"
          label="取值"
          sortable="custom"
          width="200">
      </el-table-column>
	
	  /* 需要排序的列 */ 	
      <el-table-column
          prop="report_type_desc"
          label="中文映射"
          sortable="custom"
          width="200">
      </el-table-column&gt;

      <el-table-column
          prop="remark"
          label="备注"&gt;
      </el-table-column>

      <el-table-column
          label="操作"
          width="250">
        <template slot-scope="scope">
          <el-button type="primary" size="mini" @click="edit(scope.row)">修改</el-button>
          <el-button type="success" size="mini" @click="copy(scope.row,scope.$index)">复制</el-button>
          <el-button type="danger" size="mini" @click="del(scope.row)">删除</el-button>
        </template>
      </el-table-column>
    </el-table>
	// 排序
    sortChange({ prop, order }){
      this.allData.sort(this.compare(prop, order));
    },

	/**
     * 排序比较
     * @param {string} propertyName 排序的属性名
     * @param {string} sort ascending(升序)/descending(降序)
     * @return {function}
     */
    compare(propertyName, sort) {
    	// 判断是否数字
        function isNumberV(val) {
            var regPos = /^d+(.d+)?$/; //非负浮点数
            var regNeg = /^(-(([0-9]+.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*.[0-9]+)|([0-9]*[1-9][0-9]*)))$/; //负浮点数
            if (regPos.test(val) || regNeg.test(val)) {
                return true;
            } else {
                return false;
            }
        }
        
        return function (obj1, obj2) {
            let value1 = obj1[propertyName];
            let value2 = obj2[propertyName];
            // 数字类型比较
            if(isNumberV(value1) || isNumberV(value2)){
                if (sort === "ascending") {
                    return value1 - value2;
                } else {
                    return value2 - value1;
                }
            }
            // 布尔值比较利用减法-转化truefalse
            // true => 1   false ⇒ 0
            // true-false => 1  false-true => -1
            // 下面方法是按照先falsetrue顺序排序,如果想先truefalse,调整value1-value2 和  value2 - value1的顺序即可
            else if(_.isBoolean(value1) &amp;&amp; _.isBoolean(value2)){
                if (sort === "ascending") {
                    return value1 - value2;
                } else {
                    return value2 - value1;
                }
            }
            // 字符比较使用localeCompare()
            else {
                const res = value1.localeCompare(value2, "zh");
                return sort === "ascending" ? res : -res;
            }
        };
    }

总结

如上封装compare 方法适合用于任何数据的排序。

原文地址:https://blog.csdn.net/qq_38374286/article/details/127635860

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_42090.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注