记一次bootstrap-table多重排序的实践

背景

由于最近工作在写前端,增加了对列进行排序的需求,去官网学习了bootstrap-table的Multiple Sort,贴上链接Bootstrap Table Examples

这里不得不吐槽一下官网,放出来demo,不贴源码。。。

实现步骤

单列排序

1.先引入jquery和bootstrap-table的插件,

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css">

<script src="https://cdn.jsdelivr.net/npm/jquery/dist/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap-table-zh-CN.min.js}" ></script>

2.在渲染table时,增加这三个属性

$('#table').bootstrapTable({       
        pagination: true,
        sidePagination: "server",
        sortable:true
        ...
        // 也可以把sortable:true加在单独需要排序的列上,
        columns: [{
            field: "id",
            title: "编号",
            width: "60",
            sortable:true
        }
});

此处需注意,虽然sidePagination标识在服务器端分页或客户端分页,但若不加该属性,排序无法生效。

多重排序

1.本次需求还涉及到多重排序,需要引入插件

<script th:src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap-table-multiple-sort.js}"></script>

2.增加属性

$('#table').bootstrapTable({        
        pagination: true,
        sidePagination: "server",        
        url: ...,
        queryParams: function (params) {
            // 此处对排序字段和方式做处理,因为默认的是多个排序字段会分开传入给后台,我需要把多个字段和多个方式同时传入            
            if(null != params.multiSort && undefined != params.multiSort){
                params.sort = params.multiSort.map(item => {
                    return item.sortName;
                }).join(',');
                params.order = params.multiSort.map(item => {
                    return item.sortOrder;
                }).join(',');
                params.multiSort = null;
            }
            return params;
        },
        sortable: true, // 是否启用排序
        showMultiSort: true, // 多列排序
        ....
});

sort:id,name,age

order:asc,desc,asc

 后台设计

// 接口
    @PostMapping("/test")
        public List<Map> test(PageParam pageParam,
                          @RequestParam(value = "sort",required = false) String sort,
                          @RequestParam(value = "order",required = false) String order) {
        // TODO
    }

//service
    @Override
    public Map getSortMap(String sort, String order) {
        log.info("开始创建排序Map,sort:{},order:{}",sort,order);
        Map<String,String> sortMap = new HashMap();
        String[] keys = sort.split(",");
        String[] values = order.split(",");
        for (int i = 0; i < keys.length; i++) {
            sortMap.put(keys[i],values[i]);
        }
        log.info("完成创建排序Map");
        return sortMap;
    }

//mapper
    select  *  from test
        <where>            
            <choose>
                <when test="sortInfo!=null and sortInfo !=''">
                    order by ${sortInfo}
                </when>
                <otherwise>
                    order by id desc
                </otherwise>
            </choose>
        </where>

附上官网效果

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
回答: 在Bootstrap-Table中,可以使用sortName和sortOrder属性来实现表格的排序功能。当sortName属性设置为"sort",sortOrder属性设置为"desc"时,会生成一个order by子句,按照sort字段降序排列。例如,当使用以下代码初始化表格时: ``` $(function() { var options = { url: prefix + "/list", sortName: "sort", sortOrder: "desc", }; $.table.init(options); }); ``` 生成的sql语句为: ``` SELECT * FROM xxx order by sort desc LIMIT ? ``` 如果需要多个字段排序,可以在sortName属性中使用逗号分隔多个字段,并在sortOrder属性中留空。例如: ``` $(function() { var options = { url: prefix + "/list", sortName: "sort desc,id asc", sortOrder: "", }; $.table.init(options); }); ``` 生成的sql语句为: ``` SELECT * FROM xxx order by sort desc,id asc LIMIT ? ``` 需要注意的是,sortName属性中的字段名会被转换为下划线命名格式(驼峰命名转下划线),例如orderNum会被转换为order_num。所以在sortName属性中应该使用转换后的字段名。参考\[2\] #### 引用[.reference_title] - *1* *2* *3* [【若依(ruoyi)】Bootstrap-Table表格排序](https://blog.csdn.net/sayyy/article/details/122616970)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值