175 lines
7.4 KiB
PHP
175 lines
7.4 KiB
PHP
{include file="public/header" /}
|
|
<div class="layui-card">
|
|
<div class="layui-card-header">
|
|
<span class="layui-badge layui-bg-blue">操作日志</span>
|
|
</div>
|
|
<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">用户名</label>
|
|
<div class="layui-input-inline">
|
|
<input type="text" name="username" placeholder="请输入用户名" autocomplete="off" class="layui-input">
|
|
</div>
|
|
</div>
|
|
<div class="layui-inline">
|
|
<label class="layui-form-label">模块</label>
|
|
<div class="layui-input-inline">
|
|
<input type="text" name="module" placeholder="请输入模块" autocomplete="off" class="layui-input">
|
|
</div>
|
|
</div>
|
|
<div class="layui-inline">
|
|
<label class="layui-form-label">操作</label>
|
|
<div class="layui-input-inline">
|
|
<input type="text" name="operation" placeholder="请输入操作" autocomplete="off" class="layui-input">
|
|
</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="1">成功</option>
|
|
<option value="0">失败</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="layui-inline">
|
|
<label class="layui-form-label">时间范围</label>
|
|
<div class="layui-input-inline" style="width: 300px;">
|
|
<input type="text" name="time_range" class="layui-input" id="timeRange" placeholder="请选择时间范围">
|
|
</div>
|
|
</div>
|
|
<div class="layui-inline">
|
|
<button class="layui-btn" lay-submit lay-filter="searchForm">
|
|
<i class="layui-icon layui-icon-search"></i> 搜索
|
|
</button>
|
|
<button type="reset" class="layui-btn layui-btn-primary">重置</button>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
|
|
<table id="operationLogTable" lay-filter="operationLogTable"></table>
|
|
</div>
|
|
</div>
|
|
|
|
<script type="text/html" id="tableToolbar">
|
|
<div class="layui-btn-container">
|
|
<button class="layui-btn layui-btn-sm layui-btn-danger" lay-event="clearAll">
|
|
<i class="layui-icon layui-icon-delete"></i> 清空日志
|
|
</button>
|
|
</div>
|
|
</script>
|
|
|
|
<script type="text/html" id="tableBar">
|
|
<a class="layui-btn layui-btn-xs layui-btn-danger" lay-event="del">删除</a>
|
|
</script>
|
|
|
|
<script src="/static/layui/layui.js"></script>
|
|
<script>
|
|
layui.use(['table', 'form', 'laydate'], function(){
|
|
var table = layui.table;
|
|
var form = layui.form;
|
|
var laydate = layui.laydate;
|
|
|
|
// 初始化时间范围选择器
|
|
laydate.render({
|
|
elem: '#timeRange',
|
|
type: 'datetime',
|
|
range: true
|
|
});
|
|
|
|
// 初始化表格
|
|
table.render({
|
|
elem: '#operationLogTable',
|
|
url: '{:url("log/operation")}',
|
|
method: 'post',
|
|
toolbar: '#tableToolbar',
|
|
defaultToolbar: ['filter', 'exports', 'print'],
|
|
parseData: function(res) {
|
|
return {
|
|
"code": res.code === 0 ? 0 : 1,
|
|
"msg": res.msg,
|
|
"count": res.count,
|
|
"data": res.data
|
|
};
|
|
},
|
|
cols: [[
|
|
{field: 'id', title: 'ID', width: 80, sort: true},
|
|
{field: 'username', title: '用户名', width: 120},
|
|
{field: 'module', title: '模块', width: 120},
|
|
{field: 'operation', title: '操作', width: 120},
|
|
{field: 'request_method', title: '请求方法', width: 100},
|
|
{field: 'request_url', title: '请求URL', width: 200},
|
|
{field: 'request_params', title: '请求参数', width: 200},
|
|
{field: 'ip_address', title: 'IP地址', width: 130},
|
|
{field: 'status', title: '状态', width: 100, templet: function(d){
|
|
return d.status == 1 ?
|
|
'<span class="layui-badge layui-bg-green">成功</span>' :
|
|
'<span class="layui-badge layui-bg-red">失败</span>';
|
|
}},
|
|
{field: 'error_message', title: '错误信息', width: 150},
|
|
{field: 'operation_time', title: '操作时间', width: 180, sort: true},
|
|
{field: 'execution_time', title: '执行时间(ms)', width: 120, sort: true},
|
|
{title: '操作', toolbar: '#tableBar', width: 80, fixed: 'right'}
|
|
]],
|
|
page: true,
|
|
limit: 10,
|
|
limits: [10, 20, 50, 100]
|
|
});
|
|
|
|
// 监听搜索表单提交
|
|
form.on('submit(searchForm)', function(data){
|
|
var timeRange = data.field.time_range;
|
|
if(timeRange){
|
|
var times = timeRange.split(' - ');
|
|
data.field.start_time = times[0];
|
|
data.field.end_time = times[1];
|
|
}
|
|
delete data.field.time_range;
|
|
|
|
table.reload('operationLogTable', {
|
|
where: data.field,
|
|
page: {curr: 1}
|
|
});
|
|
return false;
|
|
});
|
|
|
|
// 监听工具条
|
|
table.on('tool(operationLogTable)', function(obj){
|
|
var data = obj.data;
|
|
if(obj.event === 'del'){
|
|
layer.confirm('确定删除这条日志吗?', function(index){
|
|
$.post('{:url("log/deleteOperation")}', {id: data.id}, function(res){
|
|
if(res.code === 0){
|
|
layer.msg(res.msg, {icon: 1});
|
|
obj.del();
|
|
}else{
|
|
layer.msg(res.msg, {icon: 2});
|
|
}
|
|
});
|
|
layer.close(index);
|
|
});
|
|
}
|
|
});
|
|
|
|
// 监听头工具栏事件
|
|
table.on('toolbar(operationLogTable)', function(obj){
|
|
if(obj.event === 'clearAll'){
|
|
layer.confirm('确定要清空所有操作日志吗?', function(index){
|
|
$.post('{:url("log/clearOperation")}', function(res){
|
|
if(res.code === 0){
|
|
layer.msg(res.msg, {icon: 1});
|
|
table.reload('operationLogTable');
|
|
}else{
|
|
layer.msg(res.msg, {icon: 2});
|
|
}
|
|
});
|
|
layer.close(index);
|
|
});
|
|
}
|
|
});
|
|
});
|
|
</script>
|
|
</body>
|
|
</html>
|