177 lines
5.2 KiB
PHP
177 lines
5.2 KiB
PHP
<?php
|
|
/**
|
|
* 商业使用授权协议
|
|
*
|
|
* Copyright (c) 2025 [云泽网]. 保留所有权利.
|
|
*
|
|
* 本软件仅供评估使用。任何商业用途必须获得书面授权许可。
|
|
* 未经授权商业使用本软件属于侵权行为,将承担法律责任。
|
|
*
|
|
* 授权购买请联系: 357099073@qq.com
|
|
* 官方网站: https://www.yunzer.cn
|
|
*
|
|
* 评估用户须知:
|
|
* 1. 禁止移除版权声明
|
|
* 2. 禁止用于生产环境
|
|
* 3. 禁止转售或分发
|
|
*/
|
|
|
|
namespace app\admin\controller;
|
|
|
|
use app\admin\controller\Base;
|
|
use think\facade\Db;
|
|
use think\facade\Request;
|
|
use think\facade\View;
|
|
use think\facade\Cookie;
|
|
use app\admin\model\Log\LogsLogin;
|
|
use app\admin\model\Log\LogsOperation;
|
|
|
|
class LogController extends Base
|
|
{
|
|
/**
|
|
* 登录日志列表
|
|
*/
|
|
public function login()
|
|
{
|
|
if (Request::isPost()) {
|
|
$page = input('post.page', 1);
|
|
$limit = input('post.limit', 10);
|
|
$username = input('post.username');
|
|
$ip = input('post.ip');
|
|
$status = input('post.status');
|
|
$startTime = input('post.start_time');
|
|
$endTime = input('post.end_time');
|
|
|
|
// 搜索条件
|
|
if ($username) {
|
|
$query = LogsLogin::where('username', 'like', "%{$username}%");
|
|
}
|
|
if ($ip) {
|
|
$query = LogsLogin::where('ip_address', 'like', "%{$ip}%");
|
|
}
|
|
if ($status !== '') {
|
|
$query = LogsLogin::where('login_status', $status);
|
|
}
|
|
if ($startTime) {
|
|
$query = LogsLogin::where('login_time', '>=', $startTime);
|
|
}
|
|
if ($endTime) {
|
|
$query = LogsLogin::where('login_time', '<=', $endTime);
|
|
}
|
|
|
|
$count = LogsLogin::count();
|
|
$list = LogsLogin::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;
|
|
|
|
// 构建搜索条件
|
|
$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' => '<=']
|
|
];
|
|
|
|
$query = LogsOperation::where('1=1');
|
|
|
|
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 = LogsOperation::where('1=1')->count();
|
|
$list = LogsOperation::where('1=1')
|
|
->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
|
|
];
|
|
|
|
LogsOperation::insert($data);
|
|
}
|
|
|
|
/**
|
|
* 获取操作日志详情
|
|
*/
|
|
public function getOperationDetail()
|
|
{
|
|
$id = input('id/d', 0);
|
|
if (!$id) {
|
|
return json(['code' => 1, 'msg' => '参数错误']);
|
|
}
|
|
|
|
$info = LogsOperation::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]);
|
|
}
|
|
}
|