Files
yunzer/app/admin/view/log/operation.php
T
2025-05-19 01:26:03 +08:00

173 lines
8.3 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 src="/static/layui/layui.js"></script>
<script>
layui.use(['table', 'form', 'laydate', 'layer'], function(){
var table = layui.table;
var form = layui.form;
var laydate = layui.laydate;
var layer = layui.layer;
// 初始化时间范围选择器
laydate.render({
elem: '#timeRange',
type: 'datetime',
range: true
});
// 初始化表格
table.render({
elem: '#operationLogTable',
url: '{:url("log/operation")}',
method: 'get',
defaultToolbar: ['filter', 'exports', 'print'],
parseData: function(res) {
return {
"code": 0,
"msg": res.msg || '获取成功',
"count": res.count || 0,
"data": res.data || []
};
},
cols: [[
{field: 'id', title: 'ID', width: 80, sort: true, align: 'center'},
{field: 'username', title: '操作人', width: 120, align: 'center'},
{field: 'module', title: '模块', width: 120, align: 'center'},
{field: 'operation', title: '操作', width: 150, align: 'center'},
{field: 'request_method', title: '请求方法', width: 100, align: 'center'},
{field: 'request_url', title: '请求地址', align: 'center'},
{field: 'ip_address', title: 'IP地址', width: 120, align: 'center'},
{field: 'status', title: '状态', width: 100, align: 'center', templet: function(d){
return d.status == 1 ? '<span class="layui-badge layui-bg-green">成功</span>' : '<span class="layui-badge layui-bg-red">失败</span>';
}},
{field: 'operation_time', title: '操作时间', width: 180, align: 'center'},
{field: 'execution_time', title: '执行时间(ms)', width: 120, align: 'center'},
{title: '操作', width: 120, toolbar: '#operationBar', fixed: 'right', align: 'center'}
]],
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 === 'detail'){
// 获取详情
$.ajax({
url: '{:url("log/getOperationDetail")}',
type: 'GET',
data: {id: data.id},
success: function(res){
if(res.code === 0){
var detail = res.data;
var content = '<div class="layui-card">' +
'<div class="layui-card-body">' +
'<table class="layui-table" lay-skin="nob">' +
'<colgroup><col width="100"><col></colgroup>' +
'<tbody>' +
'<tr><td>操作人:</td><td>' + detail.username + '</td></tr>' +
'<tr><td>模块:</td><td>' + detail.module + '</td></tr>' +
'<tr><td>操作:</td><td>' + detail.operation + '</td></tr>' +
'<tr><td>请求方法:</td><td>' + detail.request_method + '</td></tr>' +
'<tr><td>请求地址:</td><td>' + detail.request_url + '</td></tr>' +
'<tr><td>请求参数:</td><td><pre>' + JSON.stringify(detail.request_params, null, 2) + '</pre></td></tr>' +
'<tr><td>IP地址:</td><td>' + detail.ip_address + '</td></tr>' +
'<tr><td>状态:</td><td>' + (detail.status == 1 ? '成功' : '失败') + '</td></tr>' +
'<tr><td>错误信息:</td><td>' + (detail.error_message || '无') + '</td></tr>' +
'<tr><td>操作时间:</td><td>' + detail.operation_time + '</td></tr>' +
'<tr><td>执行时间:</td><td>' + detail.execution_time + 'ms</td></tr>' +
'</tbody></table></div></div>';
layer.open({
type: 1,
title: '操作日志详情',
area: ['800px', '600px'],
content: content
});
} else {
layer.msg(res.msg);
}
}
});
}
});
});
</script>
<!-- 表格工具栏模板 -->
<script type="text/html" id="operationBar">
<a class="layui-btn layui-btn-xs" lay-event="detail">详情</a>
</script>
</body>
</html>