layui实现自带table表格组件分页功能(ajax异步),含条件查询

layui实现自带的table组件分页功能,异步加载,表格渲染,含条件查询。


一:引入layUI的相关资源

<link rel="stylesheet" href="${ctxPath}/vendor/layui/css/layui.css">
<script src="${ctxPath}/vender/layui/layui.js" charset="utf-8"></script>

二:html页面代码

搜索表单:

<div class="layui-row">
	<form class="layui-form layui-col-md12 we-search">
		项目搜索:
		<div class="layui-inline">
			<input type="text" name="projectName" id="projectName" placeholder="项目名称" autocomplete="off" class="layui-input">
		</div>
		<div class="layui-input-inline">
			<select name="businessOperatorId" id="businessOperatorId" lay-verify="" lay-search>
				<option value="">业务员</option>
			</select>
		</div>
		<div class="layui-input-inline">
			<select name="mftRepresentativeId" id="mftRepresentativeId" lay-verify="" lay-search>
				<option value="">厂家代表</option>
			</select>
		</div>
		<div class="layui-input-inline">
			<select name="channelId" id="channelId" lay-search>
				<option value="">渠道</option>
			</select>
		</div>
        <div class="layui-input-inline">
            <select name="customerId" id="customerId" lay-search>
                <option value="">客户</option>
            </select>
        </div>
        <div class="layui-input-inline">
            <select name="projectPhase" id="projectPhase" lay-search>
                <option value="">项目阶段</option>
            </select>
        </div>
        <div class="layui-input-inline">
            <select name="goodsCondition" id="goodsCondition" lay-search>
                <option value="">货物情况</option>
            </select>
        </div>
        <div class="layui-input-inline">
            <select name="implementCondition" id="implementCondition" lay-search>
                <option value="">实施情况</option>
            </select>
        </div>
        <div class="layui-input-inline">
            <select name="payCondition" id="payCondition" lay-search>
                <option value="">收款情况</option>
            </select>
        </div>

		<div class="layui-inline">
			<input class="layui-input" placeholder="开项时间" name="startTime" id="startTime">
		</div>
		<div class="layui-inline">
			<input class="layui-input" placeholder="结项时间" name="endTime" id="endTime">
		</div>
		<button class="layui-btn" lay-submit="" lay-filter="sreach"><i class="layui-icon">&#xe615;</i></button>
	</form>
</div>

【注】以上搜索表单中select具体下拉选项的数据为Ajax异步加载,代码就不贴了。

数据表格:

<table class="layui-hide" id="projectList" lay-filter="projectList"></table>

三:后台接收分页参数以及查询条件,获取并返回数据

主要注意下:
page: 前台分页插件传入的当前页数,
limit: 前台分页插件传入的每页个数,
projectInfo :接收前台传入的查询条件的实体
jsonResult :后台返回的相关数据的响应实体

@ResponseBody
    @RequestMapping("/project/list")
    public JsonResult list(@RequestParam("page") Integer page, @RequestParam("limit") Integer size, ProjectInfoEntity projectInfo){

        JsonResult jsonResult = projectService.getProjectList(page,size,projectInfo);
        return jsonResult;
    }

后台响应类必须包含code与count字段,因为前台layui会自动获取

自定义后台数据响应实体 JsonResult

package com.bhy702.jfkj.common.util;

/**
 * JSON结果响应
 *
 */
@Data
public class JsonResult {

    private static final String SUCCESS = "成功";
    private static final String ERROR = "失败";
    
    /**
     * 响应状态code,因为前台layui默认0为响应成功,所以此处默认为0
     */
    private Integer code = 0;

    /**
     * 数据总条数
     */
    private Long count = 0L;

 	/**
     * 返回是否成功
     */
    private Boolean result = false;
    
    /**
     * 返回提示信息
     */
    private String msg = "";

    /**
     * 返回数据信息
     */
    private Object data;

    private JsonResult() {
    }

    /**
     * 成功的响应
     * 
     * @return
     */
    public static JsonResult success() {
        return result(true, SUCCESS, null,null);
    }

    public static JsonResult success(String msg) {
        return result(true, msg, null,null);
    }

    public static JsonResult success(Object data) {
        return result(true, SUCCESS, data,null);
    }
    public static JsonResult success(Object data,Long count) {
        return result(true, SUCCESS, data,count);
    }


    public static JsonResult success(String msg, Object data) {
        return result(true, msg, data,null);
    }

    public static JsonResult success(String msg, Object data,Long count) {
        return result(true, msg, data,count);
    }

    /**
     * 失败的响应
     * 
     * @return
     */
    public static JsonResult error() {
        return result(false, ERROR, null,null);
    }

    public static JsonResult error(String msg) {
        return result(false, msg, null,null);
    }

    public static JsonResult error(Object data) {
        return result(false, ERROR, data,null);
    }

    public static JsonResult error(Object data,Long count) {
        return result(false, ERROR, data,count);
    }

    public static JsonResult error(String msg, Object data) {
        return result(false, msg, data,null);
    }

    public static JsonResult error(String msg, Object data,Long count) {
        return result(false, msg, data,count);
    }

    public static JsonResult result(Boolean result, String msg, Object data,Long count) {
        JsonResult jsonResult = new JsonResult();
        jsonResult.setResult(result);
        jsonResult.setMsg(msg);
        jsonResult.setData(data);
        jsonResult.setCount(count);
        return jsonResult;
    }
}

四:渲染table表格数据

主要注意下:
elem: ‘#projectList’: projectList为表格id,
page: true: 设置表格分页,
url: ‘/project/list’ :数据请求url
fixed: true:固定列
done : function(res, curr, count){…}:数据加载成功后的回调函数

var tableIns = table.render({
		elem: '#projectList',
		cellMinWidth: 150,
		url: '/project/list',
		cols: [
			[{
				// type: 'checkbox',fixed: 'left'
                checkbox: true, fixed: true
			}, {
				field: 'id',title: 'ID',align:'center',width:50,fixed: true
			}, {
				field: 'name',title: '项目名称',align:'center',fixed: true
			}, {
				field: 'businessOperatorStr',title: '经办人',align:'center',fixed: true
			}, {
				field: 'mftRepresentativeStr',title: '厂家代表',align:'center',fixed: true
			}, {
				field: 'channelStr',title: '渠道',align:'center',fixed: true
			}, {
				field: 'customerStr',title: '客户',align:'center',fixed: true
			}, {
                field: 'projectPhaseStr',title: '项目阶段',align:'center',fixed: true
			}, {
				field: 'amount',title: '金额',align:'center'
			}, {
				field: 'businessSource',title: '商机来源',align:'center'
			}, {
			   field: 'mainProduct',title: '主要产品',align:'center'
			}, {
			   field: 'productLineStr',title: '产品线',align:'center'
			}, {
			   field: 'goodsConditionStr',title: '货物情况',align:'center'
			}, {
			   field: 'implementConditionStr',title: '实施情况',align:'center'
			}, {
                field: 'payAmount',title: '已付金额',align:'center'
            }, {
			   field: 'payConditionStr',title: '收款情况',align:'center'
			}, {
			   field: 'startTime',title: '开项时间',align:'center'
           }, {
			   field: 'endTime',title: '结项时间',align:'center'
           }, {
			   field: 'remark',title: '备注',align:'center'
			}, {
			   field: 'operate',title: '操作',toolbar: '#operateTpl',fixed: 'right',unresize: true
			}]
		],
		id: 'testReload',
		// skin: 'row', //表格风格
		even: true, //隔行背景
		event: true,
		page: true,
        done : function(res, curr, count){
            $('#totalProjectNumber').text("共有数据:"+count+" 条");
            table_data=res.data;
            layer.closeAll('loading');
            // layer.close(layer.index); //它获取的始终是最新弹出的某个层,值是由layer内部动态递增计算的
            // layer.close(index);    //返回数据关闭loading
        }
	});

五:监听搜索表单的提交事件,并重新渲染table表格数据

主要注意下:
sreach: 为搜索按钮对应的事件过滤器,lay-filter=“sreach”,
where 中的数据对应搜索表单,为搜索的条件,后台使用这些条件进行筛选数据返回

form.on('submit(sreach)', function(data){

    	layer.load();
        tableIns.reload({
			url:"/project/list",
			page: {
                curr: 1 //重新从第 1 页开始
            },
			where:{
				name:data.field.projectName,
                businessOperatorId:data.field.businessOperatorId,
				mftRepresentativeId:data.field.mftRepresentativeId,
				channelId:data.field.channelId,
                customerId:data.field.customerId,
                projectPhase:data.field.projectPhase,
                goodsCondition:data.field.goodsCondition,
                implementCondition:data.field.implementCondition,
                payCondition:data.field.payCondition,
                startTime:data.field.startTime,
                endTime:data.field.endTime
			}
        });

        return false; //阻止表单跳转。如果需要表单跳转,去掉这段即可。
    });

六:效果展示

在这里插入图片描述


欢迎访问本文的个人博客链接: https://br-bai.github.io/2019/06/10/layui实现数据表格table分页功能(ajax异步),含条件查询

  • 4
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
### 回答1: 好的,我可以为您提供一些相关的参考资料。 首先,您需要在前端页面中引入Layui和jQuery库,以及Layui分页插件。代码如下: ```html <!-- 引入jQuery库 --> <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script> <!-- 引入Layui库 --> <link rel="stylesheet" href="https://cdn.bootcss.com/layui/2.5.6/css/layui.min.css"> <script src="https://cdn.bootcss.com/layui/2.5.6/layui.min.js"></script> <!-- 分页插件 --> <script type="text/javascript"> layui.use(['laypage'], function(){ var laypage = layui.laypage; //执行一个laypage实例 laypage.render({ elem: 'demo' //注意,这里的 test1 是 ID,不用加 # 号 ,count: 50 //数据总数,从服务端得到 ,limit: 10 //每页显示的条数 ,jump: function(obj, first){ //首次不执行 if(!first){ //do something } } }); }); </script> ``` 然后,在后端使用ThinkPHP框架进行数据查询,返回分页数据。代码如下: ```php public function index() { //获取分页参数 $page = input('get.page', 1, 'intval'); $limit = input('get.limit', 10, 'intval'); //查询数据总数 $total = Db::name('user')->count(); //查询分页数据 $list = Db::name('user') ->limit(($page - 1) * $limit, $limit) ->select(); //返回JSON数据 return json([ 'code' => 0, 'msg' => '', 'count' => $total, 'data' => $list, ]); } ``` 最后,在前端页面中使用jQuery的ajax请求获取后端返回的分页数据,并动态渲染表格。代码如下: ```javascript //分页请求 function page(page, limit) { $.ajax({ url: '/index.php/index/index', type: 'get', data: { page: page, limit: limit, }, dataType: 'json', success: function (res) { var html = ''; layui.each(res.data, function (index, item) { html += '<tr>'; html += '<td>' + item.id + '</td>'; html += '<td>' + item.username + '</td>'; html += '<td>' + item.email + '</td>'; html += '</tr>'; }); $('#data').html(html); layui.laypage.render({ elem: 'page', count: res.count, limit: limit, curr: page, jump: function (obj, first) { if (!first) { page(obj.curr, limit); } } }); } }); } //初始化分页 page(1, 10); ``` 以上就是一个基于Layui和ThinkPHP的分页实现示例,希望能对您有所帮助。 ### 回答2: layui php ajax分页是指使用layui框架结合php和ajax技术来实现分页效果。而layui框架是一款前端UI框架,提供了丰富的UI组件和简洁的API接口,方便开发人员构建美观的前端页面。 要实现layui php ajax分页,首先需要在PHP中编写查询数据的代码,然后使用ajax发送请求获取数据。在前端页面,使用layui表格组件(非动态表格)显示数据。下面是具体的实现步骤: 1. 在PHP中编写查询数据的代码,将查询到的数据进行分页处理。可以使用SQL语句中的LIMIT关键字来实现分页,也可以使用PHP的数组分页函数进行处理。 2. 编写前端页面的HTML结构,引入layui的相关文件。 3. 在前端页面中使用layui表格组件来显示数据。可以使用表格组件的render方法来渲染表格,并且设置分页参数。 4. 使用ajax发送请求获取数据。可以使用layuitable模块提供的on和reload方法来实现数据异步加载和刷新。 5. 在ajax请求返回数据后,调用layui表格组件的reload方法重新渲染表格,并将获取到的数据显示出来。 通过以上步骤,就可以实现layui php ajax分页的效果。在thinkphp5.1中实现分页的方法与上述步骤类似,只需要根据thinkphp5.1的语法进行相应的调整即可。例如,使用thinkphp5.1的分页类来处理数据分页,并使用thinkphp5.1提供的模板引擎来渲染前端页面。 总结来说,layui php ajax分页可以通过结合layui框架、php和ajax技术来实现,以提供用户友好的分页效果,带来良好的用户体验。而在thinkphp5.1中实现分页则需要根据thinkphp5.1的语法进行相应的调整。 ### 回答3: Layui是一个轻量级的前端UI框架,结合PHP和Ajax可以实现分页功能。以下是在Layui和ThinkPHP5.1框架中实现非动态表格分页的方法: 首先,确保已经引入Layui和ThinkPHP5.1的相关文件。 然后,创建一个PHP文件,命名为index.php。在该文件中,引入Layui相关的样式和脚本文件,以及ThinkPHP5.1的相关文件。 接下来,在index.php文件中创建一个div容器,用于显示分页数据。并在里面编写一个table表格,用于展示数据。 在PHP文件中,编写控制器代码,用于处理分页请求和数据的获取。在控制器代码中,通过Ajax请求后台接口,获取到分页数据,并将数据返回到前端。 在前端代码中,编写JavaScript代码,绑定Layui分页组件。在分页组件中,调用控制器的接口,请求分页数据,并将数据展示在table表格中。 最后,在控制器中,编写方法用于处理分页请求。在该方法中,使用ThinkPHP5.1的分页功能,根据当前页数和每页显示的数据量,从数据库中获取到对应的数据,并将数据返回给前端。 需要注意的是,分页实现还需要根据具体的业务逻辑进行相应的调整和修改。以上只是一个大致的思路和步骤,具体实现还需要根据具体的需求进行相应的修改。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值