当前位置: 首页 > article >正文

Layui数据表格开启前端排序切换功能实现Demo

备注

  1. 分页一般情况下必须得增加排序条件,不然排序可能会出现问题

  2. 采用的前端框架是Layui、后端是SpringBoot、Mybatis、数据库是PostgreSQL

  3. pgsql排序需注意null值

    – 表示null排在有值行的前面
    select * from tbl order by id nulls first;
    – 表示null排在有值行的后面
    select * from tbl order by id nulls last;

Layui表格根据对应字段进行切换排序

Layui数据表格官网地址

主要是通过针对Layui表格table的cols列表渲染中的sort属性,以及表格监听sort事件进行实现,后端根据前台传递过来的排序属性和排列方式进行动态切换数据表格的排序方式。

参考官方文档

1. 表格sort事件

Layui表格排序事件

表格列表选项渲染

表格cols选项渲染

代码实战

1、前端页面代码渲染
HTML
  <table class="layui-hide" id="table" lay-filter="table"></table>
js
//获取本服务对应地址
let domainName = window.location.origin;
layui.use(['form', 'table', 'util', 'upload', 'laydate','xmSelect'], function (
     //表格渲染
     Common.layTablePageRender({
            elem: '#table',
            url: "/guide/core/list",
            page: true,
            limit: 10,
            tableId: 'tableId',
            height: "full-255",
            toolbar: '#toolBar',
            autoSort: false,
            cols: [[
                {type: 'checkbox', fixed: 'left'},
                {field: 'name', align: 'center', title: '标题', minWidth: 250},
                //sort开启上线时间日期渲染
                {field: 'declareTime', align: 'center', title: '上线日期', minWidth: 100,sort:true},
                {field: 'createBy', align: 'center', title: '创建人', minWidth: 100},
                {
                    field: 'recentOperate',
                    align: 'center',
                    title: '最近一次操作',
                    minWidth: 100,
                    templet: function (row) {
                        if (row.updateBy) {
                            return `${row.updateBy}于${row.updateTime}修改`;
                        }
                        return '';
                    }
                }
            ]]
        })
       
        //监听表格排序事件
        table.on('sort(table)', function (obj) { //注:tool 是工具条事件名,test 是 table 原始容器的属性 lay-filter="对应的值"
           // obj为表格排序数据
          console.log(obj.field); // 当前排序的字段名
		  console.log(obj.type); // 当前排序类型:desc(降序)、asc(升序)、null(空对象,默认排序)
		  console.log(this); // 当前排序的 th 对象
 
		  // 尽管我们的 table 自带排序功能,但并没有请求服务端。
		  // 有些时候,你可能需要根据当前排序的字段,重新向后端发送请求,从而实现服务端排序,如:
           let field = {};
           field.sortType = obj.type;
           field.sortField = obj.field == 'declareTime' ? 'declare_time' : obj.field;
           
           table.reload('tableId', {
                page:{
                    curr:1
                },
                where: field
            })
        });
          
));
//封装的layui表格渲染方法,针对的是若依框架的分页数据渲染方式
Common.layTablePageRender= function ({elem,url,page,toolbar,limit,tableId,height,cols,where}){
    if (!page) page = true
    if (!limit) limit = 10
    layui.table.render({
        elem: elem,
        url: domainName + url,
        headers: {"Authorization": 'Bearer ' + localStorage.getItem("access_token")},
        request: {
            pageName: 'pageNum' //页码的参数名称,默认:page
            , limitName: 'pageSize' //每页数据量的参数名,默认:limit
        },
        toolbar:toolbar,
        page: page,
        limit: limit,
        id: tableId,
        height,
        cols: cols
        , parseData: function (res) { //res 即为原始返回的数据
            if (res.code == messageState.success) {
                return {
                    "code": 0, //解析接口状态 0-正确码
                    "msg": res.msg, //解析提示文本
                    "count": res.total, //解析数据长度
                    "data": res.rows //解析数据列表
                };
            } else if (res.code == messageState.fail) {
                myLayer.Alert('加载失败!');
                return false;
            } else {
                myLayer.Alert(res.msg, function () {
                    messageState.timeoutToLogin();
                });
                return false;
            }
        },where:where
    });
}
后台代码
//controller
 	   /**
     * 查询指南列表
     */
    @PreAuthorize("@ss.hasPermi('guide:core:list')")
    @ApiOperation("查询列表")
    @GetMapping("/list")
    public TableDataInfo list(Integer pageNum,Integer pageSize,String sortField,String sortType) {
        //开启分页
        PageHelper.startPage(pageNum, pageSize);
        List<BackGuideCoreDetailVo> list = guideCoreService.selectList(sortField,sortType);
        return getDataTable(list);
    }
    //service
    List<BackGuideCoreDetailVo> selectList(sortField,sortType);
    //service实现类
     @Override
    public List<BackGuideCoreDetailVo> selectList(sortField,sortType) {
        List<BackGuideCoreDetailVo> list = guideCoreMapper.selectList(sortField,sortType);
        return list;
    }
    //mapper接口
    List<BackGuideCoreDetailVo> selectList(@Param("sortField") String sortField, @Param("sortType") String sortType);    	
xml
   <select id="selectList" resultMap="BackGuideCoreDetailVo">
		select *
        from com_user a 
 		-- 存在需要排序的字段
        <if test="sortField!='' and sortField != null">
            order by a.${sortField} ${sortType}
        </if>
        -- 默认排序
        <if test="sortField == null">
            order by a.update_time desc nulls last,create_time desc
        </if>
    </select>

http://www.kler.cn/a/450977.html

相关文章:

  • 【MySQL】7.0 入门学习(七)——MySQL基本指令:帮助、清除输入、查询等
  • Springboot + vue3 实现大文件上传方案:秒传、断点续传、分片上传、前端异步上传
  • 62.基于SpringBoot + Vue实现的前后端分离-驾校预约学习系统(项目+论文)
  • Git远程仓库的多人协作
  • 计算机网络B重修班-期末复习
  • pytest自动化测试数据驱动yaml/excel/csv/json
  • 项目里用到了哪些设计模式是怎么使用的?
  • 【HarmonyOS】HarmonyOS和React Native混合开发 (一)之环境安装
  • 电脑使用CDR时弹出错误“计算机丢失mfc140u.dll”是什么原因?“计算机丢失mfc140u.dll”要怎么解决?
  • 安卓蓝牙扫描流程
  • 苍穹外卖项目Day02代码结构深度解析
  • 【数据库原理】数据增删改查,DML、单表查询、多表连接查询
  • Windbg常用命令
  • 如何在 Ubuntu 上安装 Minecraft 服务器 [Java 和 Bedrock]
  • 前端在WebSocket中加入Token
  • React基础知识(总结回顾一)
  • WebSSH:基于Go实现的高效Web SSH客户端指南
  • ReentrantLock底层原理、源码解析
  • 共享无人系统,从出行到生活全面覆盖
  • python环境中阻止相关库的自动更新
  • 迁移学习 详解及应用示例
  • 36 Opencv SURF 关键点检测
  • Nexa AI发布OmniAudio-2.6B:一款快速的音频语言模型,专为边缘部署设计
  • 【记录——解除网课自动暂停】的“魔法“
  • IntelliJ IDEA中设置激活的profile
  • Centos下的OpenSSH服务器和客户端