layui多个数据表格共存一个页面处理

时间:2024-03-17 07:54:31

layui多个数据表格共存一个页面处理

今天在做后台时,遇到一个棘手的问题,就是layui的数据表格如果两个表格在一个页面,每个表格有一个搜索查询的筛选条件,那么每个搜索结果对应的只能刷新一个数据表格。如下图,当搜索药品的时候只刷新左表,当搜索器材的时候只刷新右表。
layui多个数据表格共存一个页面处理
通过上网查询资料和看layui的开发文档,最终实现效果,实现过程如下:
我的表格渲染方式采用的是方法级渲染。

1、html代码

<div class="layui-fluid yk-jiezhenc" style="width: 36%;">
    <div class="layui-col-md12">
        <div class="layui-card">
            <div class="layui-card-body">
                <form class="layui-form layui-form-pane" action="">
                    <div class="layui-form-item">
                        <div class="layui-inline">
                            <label class="layui-form-label" style="width: 65px;padding: 5px 10px;">药品</label>
                            <div class="layui-input-block" style="margin-left: 65px;">
                                <input type="text" id="drugname" class="layui-input" placeholder="请输入药品名">
                            </div>
                        </div>
                        <div class="layui-inline">
                            <button class="layui-btn layui-btn-sm layui-btn-normal" lay-submit="search" id="searchdrug" lay-filter="searcha"><i class="layui-icon layui-icon-search"></i>搜索</button>
                        </div>
                    </div>
                </form>
            </div>
        </div>
    </div>
    <div class="layui-col-md12">
        <div class="layui-card">
            <div class="layui-card-body">
                <table class="layui-hide" id="Lista" lay-filter="Lista" lay-data="{id: 'Lista'}"></table>
                <script type="text/html" id="acta">
                    <input type="submit" class="layui-btn layui-btn-xs layui-btn-normal" "tianjia('{{d.id}}','{{d.pname}}','{{d.price}}')" value="添加">
                </script>
            </div>
        </div>
    </div>
</div>
<div class="layui-fluid yk-jiezhenc" style="width: 28%;">
    <div class="layui-col-md12">
        <div class="layui-card">
            <div class="layui-card-body">
                <form class="layui-form layui-form-pane" action="">
                    <div class="layui-form-item">
                        <div class="layui-inline">
                            <label class="layui-form-label" style="width: 65px;padding: 5px 10px;">器材</label>
                            <div class="layui-input-block" style="margin-left: 65px;">
                                <input type="text"  id="qicainame" class="layui-input" placeholder="请输入器材名">
                            </div>
                        </div>
                        <div class="layui-inline">
                            <button class="layui-btn layui-btn-sm layui-btn-normal" lay-submit="search" id="searchdrugs" lay-filter="searchb"><i class="layui-icon layui-icon-search"></i>搜索</button>
                        </div>
                    </div>
                </form>
            </div>
        </div>
    </div>
    <div class="layui-col-md12">
        <div class="layui-card">
            <div class="layui-card-body">
                <table class="layui-hide" id="Listb" lay-filter="Listb" lay-data="{id: 'Listb'}"></table>
                <script type="text/html" id="actb">
                    <input type="submit" class="layui-btn layui-btn-xs layui-btn-normal" "tianjia('{{d.id}}','{{d.pname}}','{{d.price}}')" value="添加">
                </script>
            </div>
        </div>
    </div>
</div>

2、jq代码

<script src="js/layuiList.js"></script>
<script>
layui.use('table', function(){
	var table = layui.table;
	table.render({
	  elem: '#Lista'
	  ,url: 'drug_listjz' //数据接口
	  ,page: true //开启分页
	  ,cols: [[ //表头
	      {field: 'pname', title: '药品名称'},
          {field: 'unit', title: '单位',width:'13%'},
          {field: 'price', title: '单价/元',width:'16%'},
          {field: 'snumber', title: '库存',width:'13%'},
          {field: 'right', title: '操作',align:'center',toolbar:'#acta',width:'15%'},
	  ]]
	});
	layList.search('searcha',function(where){
        table.reload('Lista', {
			  where: { //设定异步数据接口的额外参数,任意设
			    pname: $("#drugname").val().trim(),
			  }
			  ,page: {
			    curr: 1 //重新从第 1 页开始
			  }
		});
    });

	table.render({
	  elem: '#Listb'
	  ,url: 'drug_listjz' //数据接口
	  ,page: true //开启分页
	  ,cols: [[ //表头
	      {field: 'pname', title: '器材名称'},
          {field: 'unit', title: '单位',width:'17%'},
          {field: 'price', title: '单价/元',width:'22%'},
          {field: 'right', title: '操作',align:'center',toolbar:'#actb',width:'17%'},
	  ]]
	});
	layList.search('searchb',function(where){
        table.reload('Listb', {
			  where: { //设定异步数据接口的额外参数,任意设
			    pname: $("#qicainame").val().trim(),
			  }
			  ,page: {
			    curr: 1 //重新从第 1 页开始
			  }
		});
    });
});
</script>

3、数据表格重载方式

以下是官方文档给的不同的渲染方式对应的不同的重载方式。
注意:这里的表格重载是指对表格重新进行渲染,包括数据请求和基础参数的读取
示例1:自动化渲染的重载
【HTML】

<table class="layui-table" lay-data="{id: 'idTest'}"> …… </table>

【JS】

table.reload('idTest', {
  url: '/api/table/search'
  ,where: {} //设定异步数据接口的额外参数
  //,height: 300
});

示例2:方法级渲染的重载

//所获得的 tableIns 即为当前容器的实例
var tableIns = table.render({
  elem: '#id'
  ,cols: [] //设置表头
  ,url: '/api/data' //设置异步接口
  ,id: 'idTest'
}); 
 
//这里以搜索为例
tableIns.reload({
  where: { //设定异步数据接口的额外参数,任意设
    aaaaaa: 'xxx'
    ,bbb: 'yyy'
    //…
  }
  ,page: {
    curr: 1 //重新从第 1 页开始
  }
});
//上述方法等价于
table.reload('idTest', {
  where: { //设定异步数据接口的额外参数,任意设
    aaaaaa: 'xxx'
    ,bbb: 'yyy'
    //…
  }
  ,page: {
    curr: 1 //重新从第 1 页开始
  }
});