IT评测·应用市场-qidao123.com

标题: Layui数据表格开启前端排序切换功能实现Demo [打印本页]

作者: 盛世宏图    时间: 2024-11-22 21:32
标题: Layui数据表格开启前端排序切换功能实现Demo
备注

  1. -- 表示null排在有值行的前面  
  2. select * from tbl order by id nulls first;  
  3. -- 表示null排在有值行的后面  
  4. select * from tbl order by id nulls last;  
复制代码
Layui表格根据对应字段举行切换排序

Layui数据表格官网地址
重要是通过针对Layui表格table的cols列表渲染中的sort属性,以及表格监听sort事件举行实现,后端根据前台通报过来的排序属性和分列方式举行动态切换数据表格的排序方式。
参考官方文档

1. 表格sort事件


表格列表选项渲染


代码实战

1、前端页面代码渲染

HTML

  1.   <table class="layui-hide" id="table" lay-filter="table"></table>
复制代码
js

  1. //获取本服务对应地址
  2. let domainName = window.location.origin;
  3. layui.use(['form', 'table', 'util', 'upload', 'laydate','xmSelect'], function (
  4.      //表格渲染
  5.      Common.layTablePageRender({
  6.             elem: '#table',
  7.             url: "/guide/core/list",
  8.             page: true,
  9.             limit: 10,
  10.             tableId: 'tableId',
  11.             height: "full-255",
  12.             toolbar: '#toolBar',
  13.             autoSort: false,
  14.             cols: [[
  15.                 {type: 'checkbox', fixed: 'left'},
  16.                 {field: 'name', align: 'center', title: '标题', minWidth: 250},
  17.                 //sort开启上线时间日期渲染
  18.                 {field: 'declareTime', align: 'center', title: '上线日期', minWidth: 100,sort:true},
  19.                 {field: 'createBy', align: 'center', title: '创建人', minWidth: 100},
  20.                 {
  21.                     field: 'recentOperate',
  22.                     align: 'center',
  23.                     title: '最近一次操作',
  24.                     minWidth: 100,
  25.                     templet: function (row) {
  26.                         if (row.updateBy) {
  27.                             return `${row.updateBy}于${row.updateTime}修改`;
  28.                         }
  29.                         return '';
  30.                     }
  31.                 }
  32.             ]]
  33.         })
  34.       
  35.         //监听表格排序事件
  36.         table.on('sort(table)', function (obj) { //注:tool 是工具条事件名,test 是 table 原始容器的属性 lay-filter="对应的值"
  37.            // obj为表格排序数据
  38.           console.log(obj.field); // 当前排序的字段名
  39.                   console.log(obj.type); // 当前排序类型:desc(降序)、asc(升序)、null(空对象,默认排序)
  40.                   console.log(this); // 当前排序的 th 对象
  41.                   // 尽管我们的 table 自带排序功能,但并没有请求服务端。
  42.                   // 有些时候,你可能需要根据当前排序的字段,重新向后端发送请求,从而实现服务端排序,如:
  43.            let field = {};
  44.            field.sortType = obj.type;
  45.            field.sortField = obj.field == 'declareTime' ? 'declare_time' : obj.field;
  46.            
  47.            table.reload('tableId', {
  48.                 page:{
  49.                     curr:1
  50.                 },
  51.                 where: field
  52.             })
  53.         });
  54.          
  55. ));
  56. //封装的layui表格渲染方法,针对的是若依框架的分页数据渲染方式
  57. Common.layTablePageRender= function ({elem,url,page,toolbar,limit,tableId,height,cols,where}){
  58.     if (!page) page = true
  59.     if (!limit) limit = 10
  60.     layui.table.render({
  61.         elem: elem,
  62.         url: domainName + url,
  63.         headers: {"Authorization": 'Bearer ' + localStorage.getItem("access_token")},
  64.         request: {
  65.             pageName: 'pageNum' //页码的参数名称,默认:page
  66.             , limitName: 'pageSize' //每页数据量的参数名,默认:limit
  67.         },
  68.         toolbar:toolbar,
  69.         page: page,
  70.         limit: limit,
  71.         id: tableId,
  72.         height,
  73.         cols: cols
  74.         , parseData: function (res) { //res 即为原始返回的数据
  75.             if (res.code == messageState.success) {
  76.                 return {
  77.                     "code": 0, //解析接口状态 0-正确码
  78.                     "msg": res.msg, //解析提示文本
  79.                     "count": res.total, //解析数据长度
  80.                     "data": res.rows //解析数据列表
  81.                 };
  82.             } else if (res.code == messageState.fail) {
  83.                 myLayer.Alert('加载失败!');
  84.                 return false;
  85.             } else {
  86.                 myLayer.Alert(res.msg, function () {
  87.                     messageState.timeoutToLogin();
  88.                 });
  89.                 return false;
  90.             }
  91.         },where:where
  92.     });
  93. }
复制代码
后台代码

  1. //controller
  2.            /**
  3.      * 查询指南列表
  4.      */
  5.     @PreAuthorize("@ss.hasPermi('guide:core:list')")
  6.     @ApiOperation("查询列表")
  7.     @GetMapping("/list")
  8.     public TableDataInfo list(Integer pageNum,Integer pageSize,String sortField,String sortType) {
  9.         //开启分页
  10.         PageHelper.startPage(pageNum, pageSize);
  11.         List<BackGuideCoreDetailVo> list = guideCoreService.selectList(sortField,sortType);
  12.         return getDataTable(list);
  13.     }
  14.     //service
  15.     List<BackGuideCoreDetailVo> selectList(sortField,sortType);
  16.     //service实现类
  17.      @Override
  18.     public List<BackGuideCoreDetailVo> selectList(sortField,sortType) {
  19.         List<BackGuideCoreDetailVo> list = guideCoreMapper.selectList(sortField,sortType);
  20.         return list;
  21.     }
  22.     //mapper接口
  23.     List<BackGuideCoreDetailVo> selectList(@Param("sortField") String sortField, @Param("sortType") String sortType);           
复制代码
xml

  1.    <select id="selectList" resultMap="BackGuideCoreDetailVo">
  2.                 select *
  3.         from com_user a
  4.                 -- 存在需要排序的字段
  5.         <if test="sortField!='' and sortField != null">
  6.             order by a.${sortField} ${sortType}
  7.         </if>
  8.         -- 默认排序
  9.         <if test="sortField == null">
  10.             order by a.update_time desc nulls last,create_time desc
  11.         </if>
  12.     </select>
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4