首先感谢@东本三月
代码参考出自[https://www.jianshu.com/p/08cd97ebbc43]
html页面代码
<div class="layui-fluid">
<div class="layui-card">
<div class="layui-card-body">
<table class="layui-table" id="tableAdminlog" lay-filter="tableAdminlog"></table>
</div>
</div>
</div>
<!-- 表格操作列 -->
<script type="text/html" id="tablelinebar">
<a class="layui-btn layui-btn-xs layui-bg-blue" lay-event="view">查看</a>
<a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
</script>
<!-- 表格工具栏-->
<script type="text/html" id="tabletoolbar">
<div class="layui-btn-container">
<button class="layui-btn layui-btn-sm layui-bg-red" lay-event="del">删除</button>
</div>
</script>
<!-- 表单弹窗 -->
<script type="text/html" id="modelView">
<div id="modelViewDiv" class="layui-card-body">
<table class="layui-table" lay-even lay-skin="nob" style="word-break: break-all;
word-wrap: break-word;
border-collapse: collapse;">
<thead>
<tr>
<th width="100">标题</th>
<th>内容</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td>{{ d.id }}</td>
</tr>
<tr>
<td>admin_id</td>
<td>{{ d.admin_id }}</td>
</tr>
<tr>
<td>用户名</td>
<td>{{ d.username }}</td>
</tr>
<tr>
<td>url</td>
<td>{{ d.url }}</td>
</tr>
<tr>
<td>标题</td>
<td>{{ d.title }}</td>
</tr>
<tr>
<td>内容</td>
<td>{{ d.content }}</td>
</tr>
<tr>
<td>ip</td>
<td>{{ d.ip }}</td>
</tr>
<tr>
<td>useragent</td>
<td>{{ d.useragent }}</td>
</tr>
<tr>
<td>createtime</td>
<td>{{ d.createtime }}</td>
</tr>
</tbody>
</table>
<div class="layui-form-item text-right">
<button class="layui-btn layui-btn-primary" type="button" ew-event="closePageDialog">关闭</button>
</div>
</div>
</script>
<!-- js部分 -->
<script>
layui.use(['layer','laytpl', 'dtable', 'admin'], function () {
var $ = layui.jquery;
var layer = layui.layer;
var dtable = layui.dtable;
var laytpl = layui.laytpl;
//表头
var cols= [[
{type: 'checkbox', fixed: 'left'},
{field: 'id', title: 'ID',width:75,align:'center'},
{field: 'username', title: '账号',width:120},
{field: 'title', title: '标题'},
{field: 'url', title: '访问地址'},
{field: 'ip', title: 'IP',width:140},
{field: 'createtime', title: '时间',width:175},
{align: 'center', toolbar: '#tablelinebar', title: '操作', width: 150}
]];
// 渲染表格
insTb = {
table:null,
//表格初始化
init: function () {
//设置表格渲染的参数
dtable.set_table_data('{:url("")}', cols, "#tabletoolbar");
//进行表格渲染
var data = {
elem:'#tableAdminlog'
, id:'tableAdminlog'
, defaultToolbar: ['filter']
};
insTb.table = dtable.table_render(data);
//激活监听事件
insTb.listen();
},
listen:function() {
//表格行单击事件
dtable.listen_click(function (e) {
});
//表格行双击事件
dtable.listen_double(function (obj) {
var data = obj.data;
showDetailModel(data);
});
//表格行工具栏事件
dtable.listen_line(function (obj) {
var data = obj.data;
var layEvent = obj.event;
if (layEvent === 'view') { // 查看
showDetailModel(data);
} else if (layEvent === 'del') { // 删除
doDel(data.id);
}
});
//表格头部工具栏事件
dtable.listen_toolbar(function (obj) {
var checkStatus = dtable.checkStatus();
switch(obj.event){
case 'del':
var id = dtable.getMany();
console.log(id);
if (id != null) {
doDel(id);
}
break;
}
})
}
};
insTb.init();
// 删除
function doDel(Ids) {
layer.confirm('确定要删除吗?', {
skin: 'layui-layer-admin',
shade: .1
}, function (i) {
layer.close(i);
layer.load(2);
$.post('{:url("del")}', {
ids: Ids
}, function (res) {
layer.closeAll('loading');
if (res.code) {
layer.msg(res.msg, {icon: 1});
insTb.table.reload();
} else {
layer.msg(res.msg, {icon: 2});
}
}, 'json');
});
}
// 显示表单弹窗
function showDetailModel(mData) {
var shtml='';
laytpl($('#modelView').html()).render(mData,function (html) {
shtml=html
});
parent.layui.admin.open({
type: 1,
title: (mData ? '查看' : '添加') + '日志',
shadeClose:true,
content: shtml,
area: ['700px'],
success: function (layero, dIndex) {
$(layero).children('.layui-layer-content').css('overflow', 'visible');
}
});
}
});
</script>
dtable.js代码
/**
* 表单扩展模块
*/
layui.define(['table'], function (exports) {
var $ = layui.jquery;
var table = layui.table;
var layer = layui.layer;
//日期格式化
Date.prototype.format = function (format) {
var args = {
"M+": this.getMonth() + 1,
"d+": this.getDate(),
"h+": this.getHours(),
"m+": this.getMinutes(),
"s+": this.getSeconds(),
"q+": Math.floor((this.getMonth() + 3) / 3), //quarter
"S": this.getMilliseconds()
};
if (/(y+)/.test(format)) format = format.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var i in args) {
var n = args[i];
if (new RegExp("(" + i + ")").test(format)) format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? n : ("00" + n).substr(("" + n).length));
}
return format;
};
//form的封装参数数组转为参数字面量
paraArrayToLiteral = function (para) {
var literal={};
for(var i=0;i<para.length;i++){
literal[para[i].name]=para[i].value
}
return literal;
};
//将字面量封装成参数字符串
LiteralToString = function (literal) {
var index=0;
var res="";
for(var key in literal){
if(index==0){
res=res+"?";
}else{
res=res+"&";
}
res=res+key+"="+literal[key];
index++;
}
return res;
};
//将字面量数组封装成参数字符串
ArrayLiteralToString = function (array) {
var index=0;
var res="";
for(var i=0;i<array.length;i++){
var literal=array[i];
for(var key in literal){
if(index==0){
res=res+"?";
}else{
res=res+"&";
}
res=res+key+"="+literal[key];
index++;
}
}
return res;
};
//将数组封装成参数字符串
ArrayToString = function (paraName,array) {
var res="";
for(var i=0;i<array.length;i++){
if(i==0){
res=res+"?";
}else{
res=res+"&";
}
res=res+paraName+"="+array[i];
}
return res;
};
//获取字面量数组的第一个id项
paraGetOneId = function (para) {
if(para.length==0){
return null;
}else{
var temp=para[0];
return temp.id;
}
};
//获取字面量数组的id项
paraGetId = function (para) {
var ids=[];
if(para.length==0){
return null;
}
for(var i=0;i<para.length;i++){
ids.push(para[i].id)
}
return ids;
};
asString = function (str) {
if (str.length == 0) {
return null;
}
return str.join(',');
};
isEmpty = function (str){
if(str==null){
return true;
}
str=str+"";
return str.replace(/\s/g,"")==""
};
/*
* 参考示例:
* https://www.layui.com/doc/modules/table.html
* 封装了layui_table的一些常用功能
* */
var Dtable = {
//表格渲染结束后的表格对象
tableins: null,
//用于创建表格的参数
table_param: {
elem: '#table_id'
//容器唯一 id.id 是对表格的数据操作方法上是必要的传递条件
, id: "table_id"
//数据接口
// ,url: '${request.contextPath}/user/query'
//接口http请求类型
, method: 'get'
//默认每页数据条数
, limit: 15
, limits:[15,30,50,100]
//开启分页
, page: true
//开启表格头部工具栏区域
// ,toolbar:"#toolbarDemo"
//默认工具
, defaultToolbar: ['filter', 'exports', 'print']
//其他请求参数
, where: {}
//定义请求时相关分页参数
, request: {
//页码的参数名称,默认:page
pageName: 'page'
//每页数据量的参数名,默认:limit
, limitName: 'limit'
}
//对分页返回数据进行转换
, parseData: function (res) {
return {
//解析接口状态
"code": res.code,
//解析提示文本
"msg": res.msg,
//解析数据长度
"count": res.total,
//解析数据列表
"data": res.data
};
}
// ,cols: [[ //表头
// {field: 'id', title: 'id', sort: true,type:'checkbox', fixed: 'left'}
// ,{field: 'id', title: 'ID'}
// ,{field: 'username', title: '用户名'}
// ,{field: 'password', title: '密码'}
// ,{field: 'sex', title: '性别'}
// ,{field: 'email', title: '邮箱'}
// ,{field: 'phone', title: '手机号'}
// ,{field: 'remark', title: '备注'}
// ]]
},
//设置表格渲染的核心参数 url和表头信息,表格头部工具栏区域(script的id)
set_table_data: function (url, cols, toolbar) {
Dtable.table_param.toolbar = toolbar;
Dtable.table_param.url = url;
Dtable.table_param.cols = cols
},
//设置表格渲染的核心参数 url,限制条件,表头信息,表格头部工具栏区域(script的id)
set_table_data_where: function (url,where, cols, toolbar) {
Dtable.table_param.toolbar = toolbar;
Dtable.table_param.where=where;
Dtable.table_param.url = url;
Dtable.table_param.cols = cols
},
//更新表格的参数
update_table_param:function(para){
if(para!=null){
for(var key in para){
Dtable.table_param[key]=para[key];
}
}
},
//表格渲染
table_render: function (para) {
//更新参数
Dtable.update_table_param(para);
Dtable.tableins = table.render(Dtable.table_param);
return Dtable.tableins;
},
//表格搜索 参数:搜索参数
search: function (search_param) {
var curr_page=1;
// 将搜索的页码设置为当前表格的页码
// curr_page=$(".layui-laypage-em").next().html();
var search_param = {
where: search_param,
page: {
curr: curr_page
}
};
table.reload(Dtable.table_param.id, search_param)
},
//监听头部工具栏
listen_toolbar:function(callback) {
table.on('toolbar('+Dtable.table_param.id+')', function(obj){
typeof callback === 'function' && callback(obj);
});
},
//监听行工具栏点击
listen_line:function(callback) {
table.on('tool('+Dtable.table_param.id+')', function (obj) {
typeof callback === 'function' && callback(obj);
});
},
//设置点击表格行,进行选中
listen_click: function (callback,type=false) {
var mt = Dtable.table_param.id;
//设置单击勾选
table.on('row('+Dtable.table_param.id+')', function(obj){
var checkCell=obj.tr.find(".layui-form-checkbox");
if(type == true){
if(obj.tr.hasClass('layui-table-click')){
obj.tr.removeClass('layui-table-click');
checkCell.removeClass('layui-form-checked');
table.cache[mt][obj.tr[0].rowIndex]['LAY_CHECKED'] = false;
}else {
obj.tr.addClass('layui-table-click');
checkCell.addClass('layui-form-checked');
table.cache[mt][obj.tr[0].rowIndex]['LAY_CHECKED'] = true;
}
}
typeof callback === 'function' && callback(obj);
});
},
listen_double: function (callback) {
table.on('rowDouble('+Dtable.table_param.id+')', function(obj){
typeof callback === 'function' && callback(obj);
});
},
checkStatus:function() {
var checkStatus = table.checkStatus(Dtable.table_param.id);
return checkStatus;
},
//获取当前选中行的数据
getData: function () {
//获取选中行对象
var checkStatus = table.checkStatus(Dtable.table_param.id);
//获取数据
return checkStatus.data;
},
//要求选中一条数据,且返回id
getOne: function () {
var table_data = Dtable.getData();
if (table_data == null) {
layer.msg("无法获取选中数据", {icon: 2});
return null;
}
if (table_data.length != 1) {
if (table_data.length == 0) {
layer.msg("至少要选中一条数据", {icon: 2});
} else {
layer.msg("只能选择一条数据", {icon: 2});
}
return null;
}
var one_id = paraGetOneId(table_data);
if (one_id == null) {
layer.msg("无法获取选中行id", {icon: 2});
return null;
}
return one_id;
},
//要求选中多条数据,且返回id
getMany: function (type = false) {
var table_data = Dtable.getData();
if (table_data == null) {
layer.msg("无法获取选中数据", {icon: 2});
return null;
}
if (table_data.length < 1) {
layer.msg("至少要选中一条数据", {icon: 2});
return null;
}
var many_id = paraGetId(table_data);
if (many_id == null) {
layer.msg("无法获取选中行id", {icon: 2});
return null;
}
if (type) return many_id;
return many_id.join(',');
},
//在表头,以指定格式进行时间转换
date_format: function (date, format) {
if(format==null){
format="yyyy-MM-dd hh:mm:ss";
}
if (date != null) {
return new Date(date).format(format)
}
return "";
}
};
Dtable.LiteralToString =LiteralToString;
Dtable.paraArrayToLiteral =paraArrayToLiteral;
Dtable.ArrayLiteralToString =ArrayLiteralToString;
Dtable.ArrayToString =ArrayToString;
Dtable.paraGetOneId =paraGetOneId;
Dtable.paraGetId =paraGetId;
Dtable.asString =asString;
exports('dtable', Dtable);
});