From 9c2e5a7b0b180670ba146bc4820cae7fb69a581f Mon Sep 17 00:00:00 2001 From: u2nyakim Date: Wed, 27 Aug 2025 17:41:16 +0800 Subject: [PATCH] up. --- .../admin/system/MenuController.php | 2 +- .../admin/system/RequestRecordController.php | 34 ++- app/http/middleware/ContextMiddleware.php | 8 +- route/api.php | 1 + z_ele/src/api/system/request-record/index.ts | 30 +++ .../api/system/request-record/model/index.ts | 57 +++++ z_ele/src/utils/common.ts | 31 +++ .../components/request-record-detail.vue | 121 +++++++++++ .../components/request-record-search.vue | 65 ++++++ .../src/views/system/request-record/index.vue | 199 ++++++++++++++++++ 10 files changed, 534 insertions(+), 14 deletions(-) create mode 100644 z_ele/src/api/system/request-record/index.ts create mode 100644 z_ele/src/api/system/request-record/model/index.ts create mode 100644 z_ele/src/views/system/request-record/components/request-record-detail.vue create mode 100644 z_ele/src/views/system/request-record/components/request-record-search.vue create mode 100644 z_ele/src/views/system/request-record/index.vue diff --git a/app/controller/admin/system/MenuController.php b/app/controller/admin/system/MenuController.php index f4d6470..7dca221 100644 --- a/app/controller/admin/system/MenuController.php +++ b/app/controller/admin/system/MenuController.php @@ -58,7 +58,7 @@ class MenuController extends BaseController 'path' => $data['path'], 'component' => $data['component'], 'authority' => $data['authority'], - 'sortNumber' => $data['sortNumber'], + 'sort_number' => $data['sortNumber'], 'hide' => $data['hide'], 'meta' => $data['meta'], ]); diff --git a/app/controller/admin/system/RequestRecordController.php b/app/controller/admin/system/RequestRecordController.php index c182dc8..67e1817 100644 --- a/app/controller/admin/system/RequestRecordController.php +++ b/app/controller/admin/system/RequestRecordController.php @@ -5,7 +5,6 @@ namespace app\controller\admin\system; use app\BaseController; use app\entity\SysRequestRecord; use app\service\CurdService; -use think\db\exception\DbException; use think\response\Json; class RequestRecordController extends BaseController @@ -13,19 +12,32 @@ class RequestRecordController extends BaseController /** * 分页查询请求日志记录 * @return Json - * @throws DbException */ public function page(): Json { - $model = SysRequestRecord::withSearch(['createTime'], [ - 'createTime' => [ - $this->request->get('createTimeStart/s', ''), - $this->request->get('createTimeEnd/s', '') - ], - ]); - - $paginate = CurdService::getPaginate($this->request, $model); - + ini_set('memory_limit', '512M'); + try { + /* + * 这里有两个字段数据太大,提到详情里面做查询 + */ + $model = SysRequestRecord::withoutField('request_headers,response_data')->withSearch(['createTime'], [ + 'createTime' => [ + $this->request->get('createTimeStart/s', ''), + $this->request->get('createTimeEnd/s', '') + ], + ]); + $paginate = CurdService::getPaginate($this->request, $model); + } catch (\Exception $e) { + return $this->writeError($e->getMessage()); + } return $this->writeSuccess('ok', $paginate); } + + public function info(): Json + { + ini_set('memory_limit', '512M'); + $id = $this->request->get('id'); + $data = SysRequestRecord::find($id); + return $this->writeSuccess('ok', $data); + } } \ No newline at end of file diff --git a/app/http/middleware/ContextMiddleware.php b/app/http/middleware/ContextMiddleware.php index f21d337..52486d6 100644 --- a/app/http/middleware/ContextMiddleware.php +++ b/app/http/middleware/ContextMiddleware.php @@ -25,6 +25,10 @@ class ContextMiddleware extends middleware return $response; } + protected $noHttpLog = [ + 'GET@/adminapi/system/request-record' + ]; + /** * 结束 * @param Response $response @@ -36,8 +40,8 @@ class ContextMiddleware extends middleware $log = (array)$this->app->config->get('admin.httpLog'); $logOpen = $log['open'] ?? false; - - if (!$logOpen) { + $logOpen = false; + if (!$logOpen || in_array($request->method() . '@' . $request->pathinfo(),$this->noHttpLog)) { return; } $request_start_time = $request->time(true); diff --git a/route/api.php b/route/api.php index 3a699c7..fb179df 100644 --- a/route/api.php +++ b/route/api.php @@ -55,6 +55,7 @@ Route::group("adminapi", function () { Route::get('login-record/page', [LoginRecordController::class, "page"])->name("system.pageLoginRecords"); Route::get('operate-record/page', [OperateRecordController::class, "page"])->name("system.pageOperateRecords"); Route::get('request-record/page', [RequestRecordController::class, "page"])->name("system.pageRequestRecords"); + Route::get('request-record/info', [RequestRecordController::class, "info"])->name("system.pageRequestInfo"); /* * 缓存管理 */ diff --git a/z_ele/src/api/system/request-record/index.ts b/z_ele/src/api/system/request-record/index.ts new file mode 100644 index 0000000..5078e6d --- /dev/null +++ b/z_ele/src/api/system/request-record/index.ts @@ -0,0 +1,30 @@ +import request from '@/utils/request'; +import type { ApiResult, PageResult } from '@/api'; +import type { RequestRecord, RequestRecordParam } from './model'; + +/** + * 分页查询请求日志 + */ +export async function pageRequestRecords(params: RequestRecordParam) { + const res = await request.get>>( + '/system/request-record/page', + { params } + ); + if (res.data.code === 0) { + return res.data.data; + } + return Promise.reject(new Error(res.data.message)); +} +/** + * 获取请求日志详情 + */ +export async function getRequestRecordInfo(id: number) { + const res = await request.get>( + '/system/request-record/info?id=' + id + ); + if (res.data.code === 0) { + return res.data.data; + } + return Promise.reject(new Error(res.data.message)); +} + diff --git a/z_ele/src/api/system/request-record/model/index.ts b/z_ele/src/api/system/request-record/model/index.ts new file mode 100644 index 0000000..7924682 --- /dev/null +++ b/z_ele/src/api/system/request-record/model/index.ts @@ -0,0 +1,57 @@ +import { PageParam } from '@/api'; + +/** + * 操作日志 + */ +export interface RequestRecord { + /** 操作日志id */ + id?: number; + /** 用户id */ + userId?: number; + /** 操作模块 */ + module: string; + /** 操作功能 */ + description: string; + /** 请求地址 */ + url: string; + /** 请求方式 */ + requestMethod: string; + /** 调用方法 */ + method: string; + /** 请求参数 */ + params: string; + /** 返回结果 */ + result: string; + /** 异常信息 */ + error: string; + /** 消耗时间, 单位毫秒 */ + spendTime: number; + /** 操作系统 */ + os: string; + /** 设备名称 */ + device: string; + /** 浏览器类型 */ + browser: string; + /** ip地址 */ + ip: string; + /** 状态, 0成功, 1异常 */ + status: number; + /** 操作时间 */ + createTime: string; + /** 用户昵称 */ + nickname: string; + /** 用户账号 */ + username: string; +} + +/** + * 操作日志搜索条件 + */ +export interface RequestRecordParam extends PageParam { + /** contextId */ + contextId?: string; + /** 开始时间 */ + createTimeStart?: string; + /** 截至时间 */ + createTimeEnd?: string; +} diff --git a/z_ele/src/utils/common.ts b/z_ele/src/utils/common.ts index e64455c..d6187d8 100644 --- a/z_ele/src/utils/common.ts +++ b/z_ele/src/utils/common.ts @@ -219,3 +219,34 @@ export function doWithTransition( }; }); } + + +/** + * 将字节数转换为易读的存储单位(GB, MB, KB, B) + * @param bytes 字节数量 + * @param precision 可选参数,指定保留的小数位数(默认2位) + * @returns 格式化的字符串结果(如 '1.23GB', '500B') + */ +export function formatBytes(bytes: number, precision: number = 2): string { + // 定义单位常量 + const UNITS = ['B', 'KB', 'MB', 'GB']; + const UNIT_SCALE = 1024; + + // 处理无效输入 + if (isNaN(bytes) || !isFinite(bytes)) return '0B'; + if (bytes === 0) return '0B'; + + // 计算单位级别 + const level = Math.floor(Math.log(bytes) / Math.log(UNIT_SCALE)); + + // 获取转换后的值和对应单位 + const unit = UNITS[Math.min(level, UNITS.length - 1)]; + const value = bytes / Math.pow(UNIT_SCALE, level); + + // 智能处理小数部分: + // 1. 当结果为整数时省略小数部分 + // 2. 保留指定精度但去除末尾多余的0 + const formattedValue = value.toFixed(precision).replace(/(\.0+|0+)$/, ''); + + return `${formattedValue}${unit}`; +} diff --git a/z_ele/src/views/system/request-record/components/request-record-detail.vue b/z_ele/src/views/system/request-record/components/request-record-detail.vue new file mode 100644 index 0000000..caf51ce --- /dev/null +++ b/z_ele/src/views/system/request-record/components/request-record-detail.vue @@ -0,0 +1,121 @@ + + + + + + diff --git a/z_ele/src/views/system/request-record/components/request-record-search.vue b/z_ele/src/views/system/request-record/components/request-record-search.vue new file mode 100644 index 0000000..8af989b --- /dev/null +++ b/z_ele/src/views/system/request-record/components/request-record-search.vue @@ -0,0 +1,65 @@ + + + + diff --git a/z_ele/src/views/system/request-record/index.vue b/z_ele/src/views/system/request-record/index.vue new file mode 100644 index 0000000..ccc28c4 --- /dev/null +++ b/z_ele/src/views/system/request-record/index.vue @@ -0,0 +1,199 @@ + + +