Merge remote-tracking branch 'origin/group2-log-loginlog'

# Conflicts:
#	src/main/java/cn/stylefeng/guns/modular/log/LogViewController.java
#	src/main/java/cn/stylefeng/guns/modular/log/LoginLogViewController.java
#	src/main/webapp/assets/modular/system/log/log.js
#	src/main/webapp/pages/modular/system/log/log_detail.html
pull/64/head
fengshuonan 2021-01-13 20:06:48 +08:00
commit ca192ef935
8 changed files with 217 additions and 206 deletions

View File

@ -108,6 +108,12 @@
<version>1.0.0</version> <version>1.0.0</version>
</dependency> </dependency>
<dependency>
<groupId>cn.stylefeng.roses</groupId>
<artifactId>message-spring-boot-starter</artifactId>
<version>1.0.0</version>
</dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId> <artifactId>spring-boot-starter-data-redis</artifactId>

View File

@ -6,36 +6,43 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
/** /**
* *
* *
* @author TSQ * @author chenjinlong
* @date 2021/1/5 14:44 * @date 2021/1/13 19:45
*/ */
@Controller @Controller
@Slf4j @Slf4j
@ApiResource(name = "操作日志管理相关的界面渲染") @ApiResource(name = "操作日志管理相关的界面渲染", path = "/view/log")
public class LogViewController { public class LogViewController {
/** private String PREFIX = "/modular/system/log";
*
*
* @author TSQ
* @date 2021/1/5 15:18
*/
@GetResource(name = "操作日志管理列表", path = "/view/log")
public String indexView() {
return "/modular/system/log/log.html";
}
/** /**
* *
* *
* @param
* @return
* @author TSQ * @author TSQ
* @date 2021/1/5 15:18 * @date 2021/1/5 15:18
*/ */
@GetResource(name = "日志详情页", path = "/view/logDetail") @GetResource(name = "操作日志管理列表", path = "")
public String indexView() {
return PREFIX + "/log.html";
}
/**
* -
*
* @param
* @return
* @author chenjinlong
* @date 2021/1/13 19:45
*/
@GetResource(name = "业务日志详情-视图", path = "detailView")
public String detailView() { public String detailView() {
return "/modular/system/log/log_detail.html"; return PREFIX + "/log_detail.html";
} }
} }

View File

@ -1,4 +1,4 @@
layui.use(['HttpRequest', 'treeTable', 'laydate', 'func' ,'form'], function () { layui.use(['HttpRequest', 'treeTable', 'laydate', 'func', 'form'], function () {
var $ = layui.$; var $ = layui.$;
var table = layui.table; var table = layui.table;
var HttpRequest = layui.HttpRequest; var HttpRequest = layui.HttpRequest;
@ -20,12 +20,12 @@ layui.use(['HttpRequest', 'treeTable', 'laydate', 'func' ,'form'], function () {
return [[ return [[
{type: 'numbers'}, {type: 'numbers'},
{field: 'logId', hide: true, sort: true, title: 'id'}, {field: 'logId', hide: true, sort: true, title: 'id'},
/*{field: 'logType', align: "center", sort: true, title: '日志类型'},*/
{field: 'logName', align: "center", sort: true, title: '日志名称'}, {field: 'logName', align: "center", sort: true, title: '日志名称'},
{field: 'createUser', align: "center", sort: true, title: '用户名称'}, {field: 'userId', align: "center", sort: true, title: '用户名称'},
{field: 'appName', align: "center", sort: true, title: '服务器名'}, {field: 'appName', align: "center", sort: true, title: '服务名称'},
{field: 'clientIp', align: "center", sort: true, title: 'IP'}, {field: 'requestUrl', align: "center", sort: true, title: '方法名'},
{field: 'requestUrl', align: "center", sort: true, title: '请求地址'}, {field: 'createTime', align: "center", sort: true, title: '时间'},
{field: 'createTime', align: "center", sort: true, title: '创建时间'},
{field: 'logContent', align: "center", sort: true, title: '具体消息'}, {field: 'logContent', align: "center", sort: true, title: '具体消息'},
{align: 'center', toolbar: '#tableBar', title: '操作', minWidth: 100} {align: 'center', toolbar: '#tableBar', title: '操作', minWidth: 100}
]]; ]];
@ -36,62 +36,69 @@ layui.use(['HttpRequest', 'treeTable', 'laydate', 'func' ,'form'], function () {
*/ */
Log.search = function () { Log.search = function () {
var queryData = {}; var queryData = {};
queryData['beginDateTime'] = $("#beginTime").val(); queryData['beginDate'] = $("#beginDate").val();
queryData['endDateTime'] = $("#endTime").val(); queryData['endDate'] = $("#endDate").val();
queryData['logName'] = $("#logName").val(); queryData['logName'] = $("#logName").val();
queryData['appName'] = $("#appName").val();
// queryData['logType'] = $("#logType").val(); // queryData['logType'] = $("#logType").val();
table.reload(Log.tableId, { table.reload(Log.tableId, {
where: queryData, page: {curr: 1} where: queryData, page: {curr: 1}
}); });
}; };
/** // 点击详情
* 导出excel按钮 Log.openDetailDlg = function (data) {
*/
// Log.exportExcel = function () {
// var checkRows = table.checkStatus(Log.tableId);
// if (checkRows.data.length === 0) {
// Feng.error("请选择要导出的数据");
// } else {
// table.exportFile(tableResult.config.id, checkRows.data, 'xls');
// }
// };
/**
* 日志详情
*/
Log.logDetail = function (data) {
func.open({ func.open({
height: 800, height: 800,
title: '查看日志详情', title: '日志详情',
content: Feng.ctxPath + '/view/logDetail?logId='+ data.logId, content: Feng.ctxPath + '/view/log/detailView?logId=' + data.logId,
tableId: Log.tableId tableId: Log.tableId
}); });
}; };
/**
* 导出excel按钮
*/
Log.exportExcel = function () {
var checkRows = table.checkStatus(Log.tableId);
if (checkRows.data.length === 0) {
Feng.error("请选择要导出的数据");
} else {
table.exportFile(tableResult.config.id, checkRows.data, 'xls');
}
};
/** /**
* 清空日志 * 清空日志
*/ */
Log.cleanLog = function (data) { Log.cleanLog = function () {
var deleteLog = function () { var queryData = {};
var dataList = layui.table.cache["logTable"]; queryData['beginDateTime'] = $("#beginDate").val();
var httpRequest = new HttpRequest(Feng.ctxPath + "/logManager/delete", 'post', function () { queryData['endDateTime'] = $("#endDate").val();
Feng.success("清空日志成功!"); queryData['appName'] = $("#appName").val();
if (queryData.beginDateTime == "" || queryData.endDateTime == "" || queryData.appName == "") {
Feng.error("请选择开始时间、结束时间和服务名称");
return false;
}
var operation = function () {
new HttpRequest(Feng.ctxPath + '/logManager/delete', 'post', function (data) {
Feng.success("删除日志成功!");
table.reload(Log.tableId); table.reload(Log.tableId);
}, function (data) { }, function (data) {
Feng.error("清空日志失败!" + data.responseJSON.message + "!"); Feng.error("删除日志失败!" + data.message + "!");
}); }).set(setData).start(true);
httpRequest.set("appName",dataList[0].appName);
httpRequest.set("beginDateTime",dataList[dataList.length-1].createTime);
httpRequest.set("endDateTime",dataList[0].createTime);
httpRequest.start(true);
}; };
Feng.confirm("是否删除?", deleteLog); Feng.confirm("是否删除日志?", operation);
}; };
// 渲染时间选择框 // 渲染时间选择框
laydate.render({ laydate.render({
elem: '#createTime' elem: '#beginDate'
});
//渲染时间选择框
laydate.render({
elem: '#endDate'
}); });
// 渲染表格 // 渲染表格
@ -111,18 +118,23 @@ layui.use(['HttpRequest', 'treeTable', 'laydate', 'func' ,'form'], function () {
Log.search(); Log.search();
}); });
//点击清空日志事件 // 清空按钮点击事件
$('#btnClean').click(function () { $('#btnClean').click(function () {
Log.cleanLog(); Log.cleanLog();
}); });
// 工具条点击事件 // 导出excel
$('#btnExp').click(function () {
Log.exportExcel();
});
//工具条点击事件
table.on('tool(' + Log.tableId + ')', function (obj) { table.on('tool(' + Log.tableId + ')', function (obj) {
var data = obj.data; var data = obj.data;
var layEvent = obj.event; var layEvent = obj.event;
if (layEvent === 'detail') { if (layEvent === 'detail') {
Log.logDetail(data); Log.openDetailDlg(data);
} }
}); });
}); });

View File

@ -0,0 +1,10 @@
layui.use(['form', 'HttpRequest'], function () {
var form = layui.form;
var HttpRequest = layui.HttpRequest;
//获取信息详情填充表单
var request = new HttpRequest(Feng.ctxPath + "/logManager/detail?logId=" + Feng.getUrlParam("logId"), 'get');
var result = request.start();
form.val('logForm', result.data);
});

View File

@ -1,7 +1,6 @@
layui.use(['layer', 'table', 'ax', 'laydate'], function () { layui.use(['layer', 'table', 'HttpRequest', 'laydate'], function () {
var $ = layui.$; var $ = layui.$;
var $ax = layui.ax; var HttpRequest = layui.HttpRequest;
var layer = layui.layer;
var table = layui.table; var table = layui.table;
var laydate = layui.laydate; var laydate = layui.laydate;
@ -18,12 +17,13 @@ layui.use(['layer', 'table', 'ax', 'laydate'], function () {
LoginLog.initColumn = function () { LoginLog.initColumn = function () {
return [[ return [[
{type: 'checkbox'}, {type: 'checkbox'},
{field: 'menuId', hide: true, sort: true, title: 'id'}, {field: 'menuId', hide: true, sort: true, title: 'id'},
{field: 'logName', align: "center", sort: true, title: '日志名称'}, {field: 'userId', align: "center", sort: true, title: '用户名'},
{field: 'userName', align: "center", sort: true, title: '用户名称'}, {field: 'llgName', align: "center", sort: true, title: '日志名称'},
{field: 'llgSucceed', align: "center", sort: true, title: '执行结果'},
{field: 'createTime', align: "center", sort: true, title: '时间'}, {field: 'createTime', align: "center", sort: true, title: '时间'},
{field: 'regularMessage', align: "center", sort: true, title: '具体消息'}, {field: 'llgMessage', align: "center", sort: true, title: '具体消息'},
{field: 'ipAddress', align: "center", sort: true, title: 'ip'} {field: 'llgIpAddress', align: "center", sort: true, title: 'IP'}
]]; ]];
}; };
@ -34,7 +34,9 @@ layui.use(['layer', 'table', 'ax', 'laydate'], function () {
var queryData = {}; var queryData = {};
queryData['beginTime'] = $("#beginTime").val(); queryData['beginTime'] = $("#beginTime").val();
queryData['endTime'] = $("#endTime").val(); queryData['endTime'] = $("#endTime").val();
queryData['logName'] = $("#logName").val(); queryData['llgName'] = $("#llgName").val();
console.log(queryData);
table.reload(LoginLog.tableId, { table.reload(LoginLog.tableId, {
where: queryData, page: {curr: 1} where: queryData, page: {curr: 1}
}); });
@ -54,15 +56,16 @@ layui.use(['layer', 'table', 'ax', 'laydate'], function () {
//清空日志 //清空日志
LoginLog.cleanLog = function () { LoginLog.cleanLog = function () {
Feng.confirm("是否清空所有日志?", function () { var operation = function () {
var ajax = new $ax(Feng.ctxPath + "/loginLog/delLoginLog", function (data) { new HttpRequest(Feng.ctxPath + '/loginLog/deleteAll', 'get', function (data) {
Feng.success("清空日志成功!"); Feng.success("清空日志成功!");
LoginLog.search(); table.reload(LoginLog.tableId);
}, function (data) { }, function (data) {
Feng.error("清空日志失败!"); Feng.error("清空日志失败!" + data.message + "!");
}); }).start();
ajax.start(); };
}); Feng.confirm("是否清空所有日志?", operation);
}; };
//渲染时间选择框 //渲染时间选择框
@ -78,11 +81,12 @@ layui.use(['layer', 'table', 'ax', 'laydate'], function () {
// 渲染表格 // 渲染表格
var tableResult = table.render({ var tableResult = table.render({
elem: '#' + LoginLog.tableId, elem: '#' + LoginLog.tableId,
url: Feng.ctxPath + '/loginLog/list', url: Feng.ctxPath + '/loginLog/page',
page: true, page: true,
height: "full-98", height: "full-98",
cellMinWidth: 100, cellMinWidth: 100,
cols: LoginLog.initColumn() cols: LoginLog.initColumn(),
parseData: Feng.parseData
}); });
// 搜索按钮点击事件 // 搜索按钮点击事件
@ -90,7 +94,7 @@ layui.use(['layer', 'table', 'ax', 'laydate'], function () {
LoginLog.search(); LoginLog.search();
}); });
// 搜索按钮点击事件 // 清空按钮点击事件
$('#btnClean').click(function () { $('#btnClean').click(function () {
LoginLog.cleanLog(); LoginLog.cleanLog();
}); });

View File

@ -12,25 +12,20 @@
<div class="layui-form toolbar"> <div class="layui-form toolbar">
<div class="layui-form-item"> <div class="layui-form-item">
<div class="layui-inline"> <div class="layui-inline">
<input id="beginTime" class="layui-input" type="text" placeholder="开始时间"/> <input id="beginDate" class="layui-input" type="text" placeholder="开始时间"/>
</div> </div>
<div class="layui-inline"> <div class="layui-inline">
<input id="endTime" class="layui-input" type="text" placeholder="结束时间"/> <input id="endDate" class="layui-input" type="text" placeholder="结束时间"/>
</div>
<div class="layui-inline">
<input id="appName" class="layui-input" type="text" placeholder="服务名称"/>
</div> </div>
<div class="layui-inline"> <div class="layui-inline">
<input id="logName" class="layui-input" type="text" placeholder="日志名称"/> <input id="logName" class="layui-input" type="text" placeholder="日志名称"/>
</div> </div>
<!-- <div class="layui-inline">
<select id="logType">
<option value="">类型</option>
<option value="0">全部</option>
<option value="1">业务日志</option>
<option value="2">异常日志</option>
</select>
</div>-->
<div class="layui-inline"> <div class="layui-inline">
<button id="btnSearch" class="layui-btn icon-btn"><i class="layui-icon">&#xe615;</i>搜索</button> <button id="btnSearch" class="layui-btn icon-btn"><i class="layui-icon">&#xe615;</i>搜索</button>
<button id="btnExp" class="layui-btn icon-btn"><i class="layui-icon">&#xe67d;</i>导出</button>
<button id="btnClean" class="layui-btn icon-btn layui-btn-danger"><i class="layui-icon">&#xe67d;</i>清空日志</button> <button id="btnClean" class="layui-btn icon-btn layui-btn-danger"><i class="layui-icon">&#xe67d;</i>清空日志</button>
</div> </div>
</div> </div>
@ -43,7 +38,7 @@
</div> </div>
<script type="text/html" id="tableBar"> <script type="text/html" id="tableBar">
<a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">查看详情</a> <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">详情</a>
</script> </script>
@} @}

View File

@ -1,125 +1,99 @@
@layout("/layout/_container.html",{js:["/assets/modular/system/log/log_deatil.js"]}){ @layout("/layout/_form.html",{js:["/assets/modular/system/log/log_detail.js"]}){
<div class="layui-body-header"> <form class="layui-form" id="organizationForm" lay-filter="logForm">
<span class="layui-body-header-title">日志详情</span> <div class="layui-fluid" style="padding-bottom: 75px;">
</div> <div class="layui-card">
<form class="layui-form" id="sysLogForm" lay-filter="sysLogForm"> <div class="layui-card-body">
<div class="layui-fluid"> <div class="layui-form-item layui-row">
<div class="layui-row layui-col-space15"> <input name="logId" type="hidden"/>
<div class="layui-col-sm12 layui-col-md12 layui-col-lg12">
<div class="layui-card">
<div class="layui-card-body">
<div class="layui-form-item layui-row">
<input name="logId" type="hidden" disabled readonly class="layui-input layui-disabled"/>
<div class="layui-inline layui-col-md12">
<label class="layui-form-label">日志名称</label>
<div class="layui-input-block">
<input name="logName" type="text" disabled readonly class="layui-input layui-disabled"/>
</div>
</div>
<div class="layui-inline layui-col-md12">
<label class="layui-form-label">具体内容</label>
<div class="layui-input-block">
<input name="logContent" type="text" disabled readonly class="layui-input layui-disabled"/>
</div>
</div>
<div class="layui-inline layui-col-md12">
<label class="layui-form-label">服务器名称</label>
<div class="layui-input-block">
<input name="appName" placeholder="资源名称" type="text" disabled readonly class="layui-input layui-disabled"/>
</div>
</div>
<div class="layui-inline layui-col-md12">
<label class="layui-form-label">请求地址</label>
<div class="layui-input-block">
<input name="requestUrl" type="text" disabled readonly class="layui-input layui-disabled"/>
</div>
</div>
<div class="layui-inline layui-col-md12">
<label class="layui-form-label">请求参数</label>
<div class="layui-input-block">
<input name="requestParams" type="text" disabled readonly class="layui-input layui-disabled"/>
</div>
</div>
<div class="layui-inline layui-col-md12">
<label class="layui-form-label">返回参数</label>
<div class="layui-input-block">
<input name="requestResult" type="text" disabled readonly class="layui-input layui-disabled"/>
</div>
</div>
<div class="layui-inline layui-col-md12">
<label class="layui-form-label">当前服务IP</label>
<div class="layui-input-block">
<input name="serverIp" type="text" disabled readonly class="layui-input layui-disabled"/>
</div>
</div>
<div class="layui-inline layui-col-md12">
<label class="layui-form-label">请求服务器IP</label>
<div class="layui-input-block">
<input name="clientIp" type="text" disabled readonly class="layui-input layui-disabled"/>
</div>
</div>
<div class="layui-inline layui-col-md12">
<label class="layui-form-label">用户ID</label>
<div class="layui-input-block">
<input name="userId" type="text" disabled readonly class="layui-input layui-disabled"/>
</div>
</div>
<div class="layui-inline layui-col-md12">
<label class="layui-form-label">请求Http方式</label>
<div class="layui-input-block">
<input name="httpMethod" type="text" disabled readonly class="layui-input layui-disabled"/>
</div>
</div>
<div class="layui-inline layui-col-md12">
<label class="layui-form-label">浏览器标识</label>
<div class="layui-input-block">
<input name="clientBrowser" type="text" disabled readonly class="layui-input layui-disabled"/>
</div>
</div>
<div class="layui-inline layui-col-md12">
<label class="layui-form-label">客户操作系统</label>
<div class="layui-input-block">
<input name="clientOs" type="text" disabled readonly class="layui-input layui-disabled"/>
</div>
</div>
<div class="layui-inline layui-col-md12">
<label class="layui-form-label">创建时间</label>
<div class="layui-input-block">
<input name="createTime" type="text" disabled readonly class="layui-input layui-disabled"/>
</div>
</div>
<div class="layui-inline layui-col-md12">
<label class="layui-form-label">创建人</label>
<div class="layui-input-block">
<input name="createUser" type="text" disabled readonly class="layui-input layui-disabled"/>
</div>
</div>
<div class="layui-inline layui-col-md6">
<label class="layui-form-label">服务名称</label>
<div class="layui-input-block">
<input id="appName" name="appName" placeholder="" type="text" class="layui-input"/>
</div> </div>
</div> </div>
<div class="layui-inline layui-col-md6">
<label class="layui-form-label">日志名称</label>
<div class="layui-input-block">
<input id="logName" name="logName" placeholder="" type="text" class="layui-input"/>
</div>
</div>
<div class="layui-inline layui-col-md6">
<label class="layui-form-label">日志内容</label>
<div class="layui-input-block">
<input id="logContent" name="logContent" placeholder="" type="text" class="layui-input"/>
</div>
</div>
<div class="layui-inline layui-col-md6">
<label class="layui-form-label">日志时间</label>
<div class="layui-input-block">
<input id="createTime" name="createTime" placeholder="" type="text" class="layui-input"/>
</div>
</div>
<div class="layui-inline layui-col-md6">
<label class="layui-form-label">请求地址</label>
<div class="layui-input-block">
<input id="requestUrl" name="requestUrl" placeholder="" type="text" class="layui-input"/>
</div>
</div>
<div class="layui-inline layui-col-md6">
<label class="layui-form-label">请求方式</label>
<div class="layui-input-block">
<input id="httpMethod" name="httpMethod" placeholder="" type="text" class="layui-input"/>
</div>
</div>
<div class="layui-inline layui-col-md12">
<label class="layui-form-label">请求参数</label>
<div class="layui-input-block">
<textarea id="requestParams" name="requestParams" placeholder="" class="layui-textarea"></textarea>
</div>
</div>
<div class="layui-inline layui-col-md12">
<label class="layui-form-label">返回结果</label>
<div class="layui-input-block">
<textarea id="requestResult" name="requestResult" placeholder="" class="layui-textarea"></textarea>
</div>
</div>
<div class="layui-inline layui-col-md6">
<label class="layui-form-label">服务IP</label>
<div class="layui-input-block">
<input id="serverIp" name="serverIp" placeholder="" type="text" class="layui-input"/>
</div>
</div>
<div class="layui-inline layui-col-md6">
<label class="layui-form-label">客户端IP</label>
<div class="layui-input-block">
<input id="clientIp" name="clientIp" placeholder="" type="text" class="layui-input"/>
</div>
</div>
<div class="layui-inline layui-col-md6">
<label class="layui-form-label">用户名称</label>
<div class="layui-input-block">
<input id="userId" name="userId" placeholder="" type="text" class="layui-input"/>
</div>
</div>
<div class="layui-inline layui-col-md6">
<label class="layui-form-label">浏览器</label>
<div class="layui-input-block">
<input id="clientBrowser" name="clientBrowser" placeholder="" type="text" class="layui-input"/>
</div>
</div>
<div class="layui-inline layui-col-md6">
<label class="layui-form-label">操作系统</label>
<div class="layui-input-block">
<input id="clientOs" name="clientOs" placeholder="" type="text" class="layui-input"/>
</div>
</div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="form-group-bottom text-center">
<button type="reset" class="layui-btn layui-btn-primary" ew-event="closeDialog">&emsp;关闭&emsp;</button>
</div>
</form> </form>
<div class="form-group-bottom text-center" style="z-index: 200">
<button type="reset" class="layui-btn layui-btn-primary" ew-event="closeDialog">&emsp;关闭&emsp;</button>
</div>
@} @}

View File

@ -18,7 +18,7 @@
<input id="endTime" class="layui-input" type="text" placeholder="结束时间"/> <input id="endTime" class="layui-input" type="text" placeholder="结束时间"/>
</div> </div>
<div class="layui-inline"> <div class="layui-inline">
<input id="logName" class="layui-input" type="text" placeholder="日志名称"/> <input id="llgName" class="layui-input" type="text" placeholder="日志名称"/>
</div> </div>
<div class="layui-inline"> <div class="layui-inline">
<button id="btnSearch" class="layui-btn icon-btn"><i class="layui-icon">&#xe615;</i>搜索</button> <button id="btnSearch" class="layui-btn icon-btn"><i class="layui-icon">&#xe615;</i>搜索</button>
@ -32,4 +32,7 @@
</div> </div>
</div> </div>
</div> </div>
<!--<script type="text/html" id="tableBar">-->
<!-- <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">详情</a>-->
<!--</script>-->
@} @}