layui分页sort只能当前页不能全局排序解决方案

                          layui分页sort只限制当前页解决

问题描述:
layui排序只能对当前点击当页的数据进行排序,后续页面的数据不涉及(也就导致了我们本来想要最大值或这最小值,大部分时候获取的都不准确)
解决这个问题需要前端和后端都改写代码

前端代码:
<table  class="layui-hide" id="instance_info" lay-filter="ins_info"></table>
注意lay-filter是ins_info
在JavaScript脚本中需要添加的是
  table.on('sort(ins_info)', function(obj){ //注:tool是工具条事件名,test是table原始容器的属性 lay-filter="对应的值"
  console.log(obj.field); //当前排序的字段名
  console.log(obj.type); //当前排序类型:desc(降序)、asc(升序)、null(空对象,默认排序)
  console.log(this); //当前排序的 th 对象
  table.reload('testReload', {
    initSort: obj //记录初始排序,如果不设的话,将无法标记表头的排序状态。 layui 2.1.1 新增参数
    ,where: { //请求参数(注意:这里面的参数可任意定义,并非下面固定的格式)
      field: obj.field //排序字段   在接口作为参数字段  field order
      ,order: obj.type //排序方式   在接口作为参数字段  field order
    }
  });
});

通过在Google浏览器点击我们的排序按钮可以看到得到变量已经输出来了
在这里插入图片描述在这里插入图片描述
通过network可以看到我们post的变量值,这位后端的获取提供了方法
前端到此为止已经结束了,接下来我们编写后端获取代码

@csrf_exempt
def InstanceDisplay(request):
    mydb = MySQLdb.MysqlHelper('192.168.56.104', 'dbadmin', 'dbadmin', 'jkdb', '3306')
    if request.method=='POST':
        id=request.POST.get('key[id]')
        ip = request.POST.get('key[ip]')
        insname = request.POST.get('key[insname]')
        ordername = request.POST.get('field')
        ordertype = request.POST.get('order')
        print(ordername,ordertype)
        id=id if  id else 'a.id'
        if ip and insname:
            sql="""SELECT a.id,a.ip,a.port,b.instance_name,
        CASE a.role WHEN 1 THEN '主' ELSE '从' END 'instance_status',
        CASE b.single_flag WHEN 1 THEN '集群' ELSE '单机' END 'cluster_status',b.create_time,b.apply_user,b.create_user
        FROM instanceinfo a,instancegroup b WHERE a.cluster=b.id and a.id={0} and a.ip='{1}' and b.instance_name like '%%{2}%%'""".format(id,ip,insname)
        elif ip and not insname:
            insname = 'b.instance_name'
            sql = """SELECT a.id,a.ip,a.port,b.instance_name,
                    CASE a.role WHEN 1 THEN '主' ELSE '从' END 'instance_status',
                    CASE b.single_flag WHEN 1 THEN '集群' ELSE '单机' END 'cluster_status',b.create_time,b.apply_user,b.create_user
                    FROM instanceinfo a,instancegroup b WHERE a.cluster=b.id and a.id={0} and a.ip='{1}' and b.instance_name={2}""" .format(id, ip, insname)
        elif not ip and  insname:
            ip =  'a.ip'
            sql = """SELECT a.id,a.ip,a.port,b.instance_name,
                           CASE a.role WHEN 1 THEN '主' ELSE '从' END 'instance_status',
                           CASE b.single_flag WHEN 1 THEN '集群' ELSE '单机' END 'cluster_status',b.create_time,b.apply_user,b.create_user
                           FROM instanceinfo a,instancegroup b WHERE a.cluster=b.id and a.id={0} and a.ip={1} and b.instance_name like '%%{2}%%'""".format(id, ip, insname)
        else:
            ip = ip if ip else 'a.ip'
            insname = insname if insname else 'b.instance_name'
            sql = """SELECT a.id,a.ip,a.port,b.instance_name,
                           CASE a.role WHEN 1 THEN '主' ELSE '从' END 'instance_status',
                           CASE b.single_flag WHEN 1 THEN '集群' ELSE '单机' END 'cluster_status',b.create_time,b.apply_user,b.create_user
                           FROM instanceinfo a,instancegroup b WHERE a.cluster=b.id and a.id={0} and a.ip={1} and b.instance_name={2}""".format(id, ip, insname)
        # print(sql)
        sql=sql+' order by {0} {1}'.format(ordername,ordertype) if   ordername and ordername else sql
        print(sql)
        column_list,res=mydb.get_all(sql)
        result=[dict(zip(column_list, i)) for i in res]
        context={
            'code':0,
            'msg':'' ,
            'count': len(result),
            'data':result
        }
        return HttpResponse(json.dumps(context,cls=DateEncoder,ensure_ascii=False))

    else:
        sql = """SELECT a.id,a.ip,a.port,b.instance_name,
                               CASE a.role WHEN 1 THEN '主' ELSE '从' END 'instance_status',
                               CASE b.single_flag WHEN 1 THEN '集群' ELSE '单机' END 'cluster_status',b.create_time,b.apply_user,b.create_user
                               FROM instanceinfo a,instancegroup b WHERE a.cluster=b.id"""
        # print(sql)
        column_list, res = mydb.get_all(sql)
        result = [dict(zip(column_list, i)) for i in res]
        context = {
            'code': 0,
            'msg': '',
            'count': len(result),
            'data': result
        }
        return HttpResponse(json.dumps(context, cls=DateEncoder, ensure_ascii=False))

需要注意的是上面对sql通过排序字段是否存在进行相应的拼接
sql=sql+’ order by {0} {1}'.format(ordername,ordertype) if ordername and ordername else sql
下面是排序的几个结果集合
未排序前
在这里插入图片描述

asc排序
在这里插入图片描述
desc排序
在这里插入图片描述
实现了我们想要的效果,layui目前只涉及到单列的排序,多列的排序需要修改源代码,通过数组的方式添加,有兴趣的同学可以尝试

  • 技术无止境
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值