where('username', 'like', "%{$username}%"); } if ($ip) { $query = $query->where('ip_address', 'like', "%{$ip}%"); } if ($status !== '') { $query = $query->where('login_status', $status); } if ($startTime) { $query = $query->where('login_time', '>=', $startTime); } if ($endTime) { $query = $query->where('login_time', '<=', $endTime); } $count = $query->count(); $list = $query->order('id desc') ->page($page, $limit) ->select(); return json([ 'code' => 0, 'msg' => '获取成功', 'count' => $count, 'data' => $list ]); } return View::fetch(); } /** * 操作日志列表 */ public function operation() { $params = input(); $page = $params['page'] ?? 1; $limit = $params['limit'] ?? 10; $query = Db::name('yz_logs_operation'); // 构建搜索条件 $searchFields = [ 'username' => ['field' => 'username', 'type' => 'like'], 'module' => ['field' => 'module', 'type' => 'like'], 'operation' => ['field' => 'operation', 'type' => 'like'], 'status' => ['field' => 'status', 'type' => '='], 'start_time' => ['field' => 'operation_time', 'type' => '>='], 'end_time' => ['field' => 'operation_time', 'type' => '<='] ]; foreach ($searchFields as $param => $config) { if (!empty($params[$param])) { $value = $params[$param]; if ($config['type'] === 'like') { $value = "%{$value}%"; } $query = $query->where($config['field'], $config['type'], $value); } } $count = $query->count(); $list = $query->order('id desc') ->page($page, $limit) ->select(); if (Request::isAjax()) { return json([ 'code' => 0, 'msg' => '获取成功', 'count' => $count, 'data' => $list ]); } return View::fetch(); } /** * 记录操作日志 * @param string $operation 操作名称 * @param int $status 状态 1成功 0失败 * @param string $error_message 错误信息 * @param string $module 模块名称 */ public static function record($operation, $status = 1, $error_message = '', $module = '') { $data = [ 'username' => Cookie::get('admin_name') ?: '未知用户', 'module' => $module ?: '系统管理', 'operation' => $operation, 'request_method' => Request::method(), 'request_url' => Request::url(true), 'request_params' => json_encode(Request::param(), JSON_UNESCAPED_UNICODE), 'ip_address' => Request::ip(), 'status' => $status, 'error_message' => $error_message, 'operation_time' => date('Y-m-d H:i:s'), 'execution_time' => 0 ]; Db::name('yz_logs_operation')->insert($data); } /** * 获取操作日志详情 */ public function getOperationDetail() { $id = input('id/d', 0); if (!$id) { return json(['code' => 1, 'msg' => '参数错误']); } $info = Db::name('yz_logs_operation') ->where('id', $id) ->find(); if (!$info) { return json(['code' => 1, 'msg' => '日志不存在']); } // 格式化请求参数 if (!empty($info['request_params'])) { $info['request_params'] = json_decode($info['request_params'], true); } return json(['code' => 0, 'msg' => '获取成功', 'data' => $info]); } }