feat: 优化日志显示

This commit is contained in:
augushong
2025-10-10 21:33:21 +08:00
parent dccccf94a0
commit 94f63133c3
2 changed files with 75 additions and 15 deletions

View File

@@ -1,5 +1,27 @@
<div class="layuimini-container"> <div class="layuimini-container">
<div class="layuimini-main"> <div class="layuimini-main">
<form class="layui-form" style="margin-bottom: 10px;">
<div class="layui-form-item">
<div class="layui-inline">
<label class="layui-form-label" style="width: auto; padding: 9px 10px;">排序方式</label>
<div class="layui-input-inline" style="width: 120px;">
<select id="order-select" lay-filter="order-select">
<option value="desc" selected>倒序</option>
<option value="asc">正序</option>
</select>
</div>
</div>
<div class="layui-inline">
<label class="layui-form-label" style="width: auto; padding: 9px 10px;">排序字段</label>
<div class="layui-input-inline" style="width: 180px;">
<select id="sort-select" lay-filter="sort-select">
<option value="uid" selected>按请求分组 (uid排序)</option>
<option value="id" >实时记录 (id排序)</option>
</select>
</div>
</div>
</div>
</form>
<div id="log-container" class="log-container"></div> <div id="log-container" class="log-container"></div>
</div> </div>
</div> </div>
@@ -12,7 +34,7 @@
padding: 15px; padding: 15px;
white-space: pre-wrap; white-space: pre-wrap;
word-wrap: break-word; word-wrap: break-word;
height: calc(100vh - 120px); height: calc(100vh - 170px);
overflow-y: auto; overflow-y: auto;
} }

View File

@@ -7,28 +7,35 @@ $(function () {
limit = 50, limit = 50,
noMoreData = false; noMoreData = false;
var $logContainer = $('#log-container'); var $logContainer = $('#log-container');
var order = 'desc', sortField = 'uid';
function loadLogs() { function loadLogs() {
if (noMoreData) { if (noMoreData) {
return; return;
} }
var sort = {};
sort[sortField] = order;
if(sortField = 'uid'){
sort['id'] = 'asc'
}
ua.request.get({ ua.request.get({
url: ua.url(init.indexUrl), url: ua.url(init.indexUrl),
data: { data: {
page: page, page: page,
limit: limit, limit: limit,
sort:{ sort: sort
id:'desc'
}
} }
}, function (res) { }, function (res) {
if (res.data && res.data.length > 0) { if (res.data && res.data.length > 0) {
var html = ''; var html = '';
var isFirstPage = (page === 1); var isFirstPage = (page === 1);
layui.each(res.data, function (index, item) { layui.each(res.data, function (index, item) {
html += '<span class="log-line log-level-' + item.level.toLowerCase() + '">'; html += '<span class="log-line log-level-' + item.level.toLowerCase() + '">';
html += '[' + item.uid + '] '; html += '[' + item.uid + '] ';
html += '[' + item.id + '] ';
html += '[' + item.create_time + '] '; html += '[' + item.create_time + '] ';
html += '[' + item.level.toUpperCase() + '] '; html += '[' + item.level.toUpperCase() + '] ';
html += item.content; html += item.content;
@@ -36,44 +43,75 @@ $(function () {
}); });
var oldScrollHeight = $logContainer[0].scrollHeight; var oldScrollHeight = $logContainer[0].scrollHeight;
$logContainer.prepend(html);
if (order === 'desc') {
$logContainer.prepend(html);
} else {
$logContainer.append(html);
}
var newScrollHeight = $logContainer[0].scrollHeight; var newScrollHeight = $logContainer[0].scrollHeight;
if (isFirstPage) { if (isFirstPage) {
// 首次加载,滚动到底部 // 首次加载,倒序滚动到底部,正序滚动到顶部
$logContainer.scrollTop(newScrollHeight); $logContainer.scrollTop(order === 'desc' ? newScrollHeight : 0);
} else { } else {
// 加载更多,保持滚动位置 // 加载更多,保持滚动位置
$logContainer.scrollTop(newScrollHeight - oldScrollHeight); if (order === 'desc') {
$logContainer.scrollTop(newScrollHeight - oldScrollHeight);
}
} }
page++; page++;
} else { } else {
noMoreData = true; noMoreData = true;
$logContainer.prepend('<div style="text-align:center;color:#888;padding-bottom:15px;">- The Beginning -</div>'); var endText = order === 'desc' ? '- The Beginning -' : '- The End -';
var endHtml = '<div style="text-align:center;color:#888;padding:15px 0;">' + endText + '</div>';
if (order === 'desc') {
$logContainer.prepend(endHtml);
} else {
$logContainer.append(endHtml);
}
} }
}, function () { }, function () {
// complete // complete
}); });
} }
function reloadLogs() {
page = 1;
noMoreData = false;
$logContainer.empty();
loadLogs();
}
// 初始加载 // 初始加载
loadLogs(); loadLogs();
// 监听滚动事件 // 监听滚动事件
$logContainer.on('scroll', function () { $logContainer.on('scroll', function () {
var $this = $(this); var $this = $(this);
// 滚动条到顶部时加载更多 // 滚动条到顶部时(倒序)或到底部时(正序)加载更多
if ($this.scrollTop() === 0) { if ((order === 'desc' && $this.scrollTop() === 0) ||
(order === 'asc' && $this.scrollTop() + $this.innerHeight() >= $this[0].scrollHeight - 1)) {
loadLogs(); loadLogs();
} }
}); });
// 监听排序方式选择
layui.form.on('select(order-select)', function (data) {
order = data.value;
reloadLogs();
});
// 监听排序字段选择
layui.form.on('select(sort-select)', function (data) {
sortField = data.value;
reloadLogs();
});
// 监听刷新按钮 // 监听刷新按钮
ua.listen.refresh(function () { ua.listen.refresh(function () {
page = 1; reloadLogs();
noMoreData = false;
$logContainer.empty();
loadLogs();
}); });
}); });