layUI-table动态表格表头

功能简述

该组件支持表头动态展示\支持layui table模块配置的一切参数\支持删除列等操作\动态表格分页参数

组件实现原理简介

底层table组件基于layui 设计,动态配置一切参数

在项目中引用

只需要引入js文件 然后调用暴露出的入口方法即可

引入文件
调用示例

customTable.js文件内容

layui.define(["jquery", "table", "layer","laypage"], function (exports) {
	var $ = layui.jquery;
	var table = layui.table;
	var layer = layui.layer;
	var laypage = layui.laypage;
	/**
    ************ tableConfig为table配置项其参数说明如下
    * elem  table的id   必传
    * url  table请求地址
    * height table的高度   默认为400
    * data  直接赋值数据
    * cols 设置表头。没有则按数据返回自动生成
    ************ otherConfig 为其他配置项
    * filter   table lay-filter的值  必传
    *isdelcol   是否删除列
	* isEdit  开始layui自带单元格编辑功能
    *  trBar  行工具栏id
	*  ctx  请求地址项目名字
	*  page 分页功能
    ************ ajax配置   分all(数据请求) header(表头请求) edit(表格实时编辑)delCol(删除列)
    * url  table请求地址 填写此处表示表头根据数据返回
    * ajaxData  ajax请求参数
    * type ajax请求类型
    * resData  请求返回的数据
    * isKeyValue  参数是否为键值对
    */
	var customTable = {
		tableExp: null, //表格实例
		resData: null, //返回所有数据
		tableData: [], //table展示数据
		headerData: [], //表头数据
		initData: {}, //初始化配置参数
		init: function (tableConfig, otherConfig, ajaxConfig) {
			customTable.initData = {
				tableConfig: tableConfig,
				otherConfig: otherConfig,
				ajaxConfig: ajaxConfig,
			};
			if (ajaxConfig.all.url) {
				customTable.ajaxReq(ajaxConfig.all);
				tableConfig.data = customTable.tableData;
				tableConfig.limit = 999999999;
				if (otherConfig.page && otherConfig.page.elem){
					otherConfig.page.count = customTable.resData.count;
					customTable.page(otherConfig.page);
				}
			}

			if (!tableConfig.cols) {
				customTable.tableHeadAjax(ajaxConfig.header);
				layui.each(customTable.headerData, function (i, t) {
					t.minWidth = t.title.split("").length * 14 + 62;
					t.title = '<span title="' + t.title + '">' + t.title + '</span>' + (t.candelete == 'true' ? '<i class="layui-icon layui-icon-close delLie" style="color: red;display: none"' +
						' attr-fieldId="' + t.field + '"></i>' : '');
				});

			}
			if (otherConfig.trBar){
				customTable.headerData.push({
					fixed: 'right',title: '操作', width: 150, align: 'center', toolbar: otherConfig.trBar
				});
			}
			tableConfig.cols = [customTable.headerData];
			tableConfig.done = function () {
				if ($('.layui-table-main .layui-none').length > 0){
					$('.layui-table-main .layui-none').text('暂无数据,请点击上传按钮上传文件');
				}
				if (otherConfig.isdelcol) {
					$("tr th").mouseover(function () {
						$(this).find(".delLie").show();
					}).mouseout(function () {
						$(this).find(".delLie").hide();
					});
					$('th .delLie').click(function () {
						let field = $(this).attr('attr-fieldId');
						ajaxConfig.delCol.ajaxData.columnName = field;
						$.ajax({
							url: ajaxConfig.delCol.url ,
							type: 'post',
							dataType: "json",
							contentType: 'application/json',
							data: JSON.stringify(ajaxConfig.delCol.ajaxData),
							success: function (result) {
								if (result.code == 0) {
									customTable.headerData[customTable.headerData.length - 1] = {
										fixed: 'right',title: '操作', width: 150, align: 'center', toolbar: otherConfig.trBar
									};
									for (var i = 0;i < customTable.headerData.length;i++){
										if (field == customTable.headerData[i].field){
											customTable.headerData.splice(i,1);
											break;
										}
									}
									table.reload(otherConfig.filter,{
										cols: [customTable.headerData]
									});
								} else {
									layer.alert(result.msg);
								}
							}
						});
					});
				}
			};
			customTable.tableExp = table.render(tableConfig);
			if (otherConfig.isEdit) {
				customTable.editAjax(ajaxConfig.edit,otherConfig.filter);
			}
			return customTable.tableExp;
		},
		//请求所有数据
		ajaxReq(ajaxConfig,isreload) {
			$.ajax({
				url: ajaxConfig.url,
				type: ajaxConfig.type ? ajaxConfig.type : "get",
				dataType: "json",
				async: false,
				data: ajaxConfig.ajaxData ? ajaxConfig.ajaxData : null,
				success: function (result) {
					if (result.code == 0) {
						customTable.resData = result;
						customTable.tableData = result.data;
						if (isreload && customTable.tableExp){
							table.reload(customTable.initData.otherConfig.filter,{
								data: result.data
							});
						}
					} else {
						layer.alert(result.msg);
					}
				},
			});
		},
		// 请求表头
		tableHeadAjax(ajaxConfig) {
			$.ajax({
				url: ajaxConfig.url,
				type: ajaxConfig.type ? ajaxConfig.type : "get",
				dataType: "json",
				async: false,
				data: ajaxConfig.ajaxData ? ajaxConfig.ajaxData : null,
				success: function (result) {
					if (result.code === 0) {
						customTable.headerData = result.data;
					}
				},
			});
		},
		//编辑行接口
		editAjax(ajaxConfig,filter) {
			table.on('edit(' + filter + ')', function (obj) {
				ajaxConfig.ajaxData.id = obj.data.id;
				ajaxConfig.ajaxData.columnNameArr = [obj.field];
				ajaxConfig.ajaxData.columnValueArr = [obj.value];
				var paramObject = ajaxConfig.ajaxData;
				if (!ajaxConfig.isKeyValue) {
					paramObject = JSON.stringify(paramObject);
				}
				$.ajax({
					url: ajaxConfig.url,
					type: ajaxConfig.type ? ajaxConfig.type : "post",
					dataType: "json",
					contentType: 'application/json',
					data: paramObject ? paramObject : null,
					success: function (result) {
						if (result.code !== 0) {
							layer.alert(result.msg);
						}
					},
				});
			});
			$(document).on("focus",".layui-table-edit",function(){$(this).attr("maxlength","50");});
		},
		page: function (config) {
			laypage.render({
				elem: config.elem
				,count: config.count
				,limit: 15
				,layout: [ 'prev', 'page', 'next', 'limit', 'count','refresh', 'skip']
				,limits: [15, 30, 40, 50,100]
				,jump: function(obj, first){
					customTable.initData.ajaxConfig.all.ajaxData.page = obj.curr;
					customTable.initData.ajaxConfig.all.ajaxData.limit = obj.limit;
					customTable.ajaxReq(customTable.initData.ajaxConfig.all,'1');
					//首次不执行
					if (!first){
						//do something
					}
				}
			});
		}
	};

	//输出 mymod 接口
	exports("customTable", customTable);
});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
layui-table 中添加表头筛选的方法如下: 1.设置表头筛选的数据 可以通过设置`toolbar`属性来设置表头的筛选数据,例如: ```javascript var tableIns = table.render({ elem: '#test' ,url:'/demo/table/user/' ,toolbar: '#toolbarDemo' //开启头部工具栏,并为其绑定左侧模板 ,cols: [[ {type: 'checkbox', fixed: 'left'} ,{field:'id', title:'ID', width:80, sort: true} ,{field:'username', title:'用户名', width:120} ,{field:'email', title:'邮箱', width:150} ,{field:'sign', title:'签名'} ,{field:'sex', title:'性别', width:80} ,{field:'city', title:'城市', width:100} ,{field:'experience', title:'积分', width:80, sort: true} ,{field:'logins', title:'登入次数', width:100, sort: true} ,{field:'status', title:'状态', width:100, sort: true} ,{field:'ip', title:'IP', width:120} ,{field:'create_time', title:'创建时间', width:150, sort: true} ,{fixed: 'right', title:'操作', toolbar: '#barDemo', width:150} ]] ,page: true }); ``` 在上面的代码中,`toolbar`属性绑定了一个左侧模板(即下面代码中的`#toolbarDemo`),在该模板中可以设置表头的筛选数据,例如: ```html <script type="text/html" id="toolbarDemo"> <div class="layui-btn-container"> <button class="layui-btn layui-btn-sm" lay-event="add">添加</button> <button class="layui-btn layui-btn-sm" lay-event="delete">删除</button> </div> <div class="layui-inline"> <label class="layui-form-label">城市</label> <div class="layui-input-inline"> <select name="city"> <option value="">全部</option> <option value="0">北京</option> <option value="1">上海</option> <option value="2">广州</option> <option value="3">深圳</option> <option value="4">杭州</option> </select> </div> </div> <div class="layui-inline"> <label class="layui-form-label">状态</label> <div class="layui-input-inline"> <select name="status"> <option value="">全部</option> <option value="0">正常</option> <option value="1">禁用</option> </select> </div> </div> </script> ``` 在上面的代码中,我们设置了两个下拉框,分别用于筛选城市和状态。 2.监听表头筛选事件并重新加载表格数据 在表头筛选数据改变时,我们需要监听表头的`lay-filter`属性,并重新加载表格数据。在下面的示例中,我们监听了两个下拉框的`select`事件,并重新加载了表格数据: ```javascript //监听表头筛选数据改变事件 table.on('toolbar(test)', function(obj){ var city = $('select[name="city"]').val(); var status = $('select[name="status"]').val(); table.reload('test', { where: { //设定异步数据接口的额外参数,任意设 city: city, status: status } ,page: { curr: 1 //重新从第 1 页开始 } }); }); ``` 在上面的代码中,我们通过`$('select[name="city"]').val()`和`$('select[name="status"]').val()`获取了两个下拉框的值,并重新加载了表格数据。其中,`table.reload()`方法中的`test`参数表示表格的ID,可以根据实际情况进行修改。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值