mirror of
https://gitee.com/ulthon/ulthon_admin.git
synced 2026-08-30 12:45:32 +08:00
- NginxAccessLog + NginxLogPosition Scheme 加 #[Component] 注解 - Scheme Table name 补 ul_ 前缀(curd 严格校验要求) - curd 生成 nginx 模块完整后台(controller/model/view/js) - Base/App 双层只读控制器(参照 TimerLogBase 范式) - AccessLogBase: add/edit/delete/modify 全部 error - LogPositionBase: 同上 - 视图改造: - access_log 裁剪到 8 列核心字段(time_local/method/uri/status/remote_addr/request_time/body_bytes_sent/http_user_agent) - status/request_time 自定义 badge 渲染 - toolbar 清空 + operat 仅保留详情(B 类只读页面) - log_position 全字段 + 只读化 - HTTP 验证:index 200 OK + add/edit/delete/modify 全部返回错误
229 lines
13 KiB
PHP
229 lines
13 KiB
PHP
<div class="layuimini-container detail-container">
|
||
<div class="layuimini-main">
|
||
<div class="layui-card detail-card">
|
||
<div class="layui-card-header detail-header">
|
||
<div class="layui-row">
|
||
<div class="layui-col-md9">
|
||
<h2 class="detail-title">#{$row.id} {$title}</h2>
|
||
<div class="detail-id">ID: {$row.id}</div>
|
||
</div>
|
||
<div class="layui-col-md3 text-right detail-actions">
|
||
<button class="layui-btn layui-btn-primary" layuimini-content-href="{$Request.param.backTagId}" data-back="1">返回</button>
|
||
<button class="layui-btn" onclick="location.href='{:url("edit", ["id" => $row.id])}'">编辑</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="layui-card-body detail-content">
|
||
<div class="layui-row layui-col-space12">
|
||
<!-- 左侧主体内容 -->
|
||
<div class="layui-col-md8 detail-main">
|
||
<div class="detail-field-group">
|
||
<div class="detail-field-item">
|
||
<div class="detail-field-label">来源日志文件路径</div>
|
||
<div class="detail-field-value">
|
||
{notempty name="row.file_path"}
|
||
{$row.file_path}
|
||
{else/}
|
||
<span class="layui-text-em">暂无数据</span>
|
||
{/notempty}
|
||
</div>
|
||
</div>
|
||
<div class="detail-field-item">
|
||
<div class="detail-field-label">客户端 IP(含 IPv6)</div>
|
||
<div class="detail-field-value">
|
||
{notempty name="row.remote_addr"}
|
||
{$row.remote_addr}
|
||
{else/}
|
||
<span class="layui-text-em">暂无数据</span>
|
||
{/notempty}
|
||
</div>
|
||
</div>
|
||
<div class="detail-field-item">
|
||
<div class="detail-field-label">HTTP 认证用户名</div>
|
||
<div class="detail-field-value">
|
||
{notempty name="row.remote_user"}
|
||
{$row.remote_user}
|
||
{else/}
|
||
<span class="layui-text-em">暂无数据</span>
|
||
{/notempty}
|
||
</div>
|
||
</div>
|
||
<div class="detail-field-item">
|
||
<div class="detail-field-label">请求时间戳(业务时区)</div>
|
||
<div class="detail-field-value">
|
||
{notempty name="row.time_local"}
|
||
{$row.time_local|date="Y-m-d H:i:s"}
|
||
{else/}
|
||
<span class="layui-text-em">暂无数据</span>
|
||
{/notempty}
|
||
</div>
|
||
</div>
|
||
<div class="detail-field-item">
|
||
<div class="detail-field-label">HTTP 方法</div>
|
||
<div class="detail-field-value">
|
||
{notempty name="row.method"}
|
||
{$row.method}
|
||
{else/}
|
||
<span class="layui-text-em">暂无数据</span>
|
||
{/notempty}
|
||
</div>
|
||
</div>
|
||
<div class="detail-field-item">
|
||
<div class="detail-field-label">请求 URI(超 255 截断)</div>
|
||
<div class="detail-field-value">
|
||
{notempty name="row.uri"}
|
||
{$row.uri}
|
||
{else/}
|
||
<span class="layui-text-em">暂无数据</span>
|
||
{/notempty}
|
||
</div>
|
||
</div>
|
||
<div class="detail-field-item">
|
||
<div class="detail-field-label">查询字符串</div>
|
||
<div class="detail-field-value">
|
||
{notempty name="row.query_string"}
|
||
{$row.query_string}
|
||
{else/}
|
||
<span class="layui-text-em">暂无数据</span>
|
||
{/notempty}
|
||
</div>
|
||
</div>
|
||
<div class="detail-field-item">
|
||
<div class="detail-field-label">HTTP 协议版本</div>
|
||
<div class="detail-field-value">
|
||
{notempty name="row.http_version"}
|
||
{$row.http_version}
|
||
{else/}
|
||
<span class="layui-text-em">暂无数据</span>
|
||
{/notempty}
|
||
</div>
|
||
</div>
|
||
<div class="detail-field-item">
|
||
<div class="detail-field-label">响应体字节数</div>
|
||
<div class="detail-field-value">
|
||
{notempty name="row.body_bytes_sent"}
|
||
{$row.body_bytes_sent}
|
||
{else/}
|
||
<span class="layui-text-em">暂无数据</span>
|
||
{/notempty}
|
||
</div>
|
||
</div>
|
||
<div class="detail-field-item">
|
||
<div class="detail-field-label">Referer</div>
|
||
<div class="detail-field-value">
|
||
{notempty name="row.http_referer"}
|
||
{$row.http_referer}
|
||
{else/}
|
||
<span class="layui-text-em">暂无数据</span>
|
||
{/notempty}
|
||
</div>
|
||
</div>
|
||
<div class="detail-field-item">
|
||
<div class="detail-field-label">User-Agent(超 500 截断)</div>
|
||
<div class="detail-field-value" style="white-space: pre-wrap;">
|
||
{notempty name="row.http_user_agent"}
|
||
{$row.http_user_agent|raw}
|
||
{else/}
|
||
<span class="layui-text-em">暂无内容</span>
|
||
{/notempty}
|
||
</div>
|
||
</div>
|
||
<div class="detail-field-item">
|
||
<div class="detail-field-label">nginx 请求总耗时</div>
|
||
<div class="detail-field-value">
|
||
{notempty name="row.request_time"}
|
||
{$row.request_time}
|
||
{else/}
|
||
<span class="layui-text-em">暂无数据</span>
|
||
{/notempty}
|
||
</div>
|
||
</div>
|
||
<div class="detail-field-item">
|
||
<div class="detail-field-label">upstream 响应时间</div>
|
||
<div class="detail-field-value">
|
||
{notempty name="row.upstream_response_time"}
|
||
{$row.upstream_response_time}
|
||
{else/}
|
||
<span class="layui-text-em">暂无数据</span>
|
||
{/notempty}
|
||
</div>
|
||
</div>
|
||
<div class="detail-field-item">
|
||
<div class="detail-field-label">总发送字节数(含 header)</div>
|
||
<div class="detail-field-value">
|
||
{notempty name="row.bytes_sent"}
|
||
{$row.bytes_sent}
|
||
{else/}
|
||
<span class="layui-text-em">暂无数据</span>
|
||
{/notempty}
|
||
</div>
|
||
</div>
|
||
<div class="detail-field-item">
|
||
<div class="detail-field-label">国家(GeoIP 预留)</div>
|
||
<div class="detail-field-value">
|
||
{notempty name="row.country"}
|
||
{$row.country}
|
||
{else/}
|
||
<span class="layui-text-em">暂无数据</span>
|
||
{/notempty}
|
||
</div>
|
||
</div>
|
||
<div class="detail-field-item">
|
||
<div class="detail-field-label">省份(GeoIP 预留)</div>
|
||
<div class="detail-field-value">
|
||
{notempty name="row.province"}
|
||
{$row.province}
|
||
{else/}
|
||
<span class="layui-text-em">暂无数据</span>
|
||
{/notempty}
|
||
</div>
|
||
</div>
|
||
<div class="detail-field-item">
|
||
<div class="detail-field-label">城市(GeoIP 预留)</div>
|
||
<div class="detail-field-value">
|
||
{notempty name="row.city"}
|
||
{$row.city}
|
||
{else/}
|
||
<span class="layui-text-em">暂无数据</span>
|
||
{/notempty}
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
<!-- 右侧基础信息 -->
|
||
<div class="layui-col-md4 detail-side">
|
||
<h3 class="detail-side-title">基础信息</h3>
|
||
<div class="detail-field-group">
|
||
<div class="detail-field-item">
|
||
<div class="detail-field-label">ID</div>
|
||
<div class="detail-field-value">{$row.id}</div>
|
||
</div>
|
||
<div class="detail-field-item">
|
||
<div class="detail-field-label">HTTP 状态码</div>
|
||
<div class="detail-field-value">
|
||
{notempty name="row.status"}
|
||
{$row.status}
|
||
{else/}
|
||
<span class="layui-text-em">暂无数据</span>
|
||
{/notempty}
|
||
</div>
|
||
</div>
|
||
<div class="detail-field-item">
|
||
<div class="detail-field-label">入库时间戳</div>
|
||
<div class="detail-field-value">
|
||
{notempty name="row.create_time"}
|
||
{$row.create_time|date="Y-m-d H:i:s"}
|
||
{else/}
|
||
<span class="layui-text-em">暂无数据</span>
|
||
{/notempty}
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div> |