first commot

This commit is contained in:
2026-01-26 09:29:36 +08:00
commit dbb40c38c4
189 changed files with 20198 additions and 0 deletions
@@ -0,0 +1,256 @@
<?php
declare(strict_types=1);
namespace app\admin\controller\OperationLog;
use app\admin\BaseController;
use think\facade\Request;
use think\response\Json;
use app\model\OperationLog;
use app\model\AdminUser;
class OperationLogController extends BaseController
{
/**
* 获取操作日志列表
* @return Json
*/
public function getOperationLogs()
{
try {
$page = Request::param('page/d', 1);
$pageSize = Request::param('pageSize/d', 20);
$keyword = Request::param('keyword/s', '');
$module = Request::param('module/s', '');
$action = Request::param('action/s', '');
$status = Request::param('status/s', '');
$startTime = Request::param('startTime/s', '');
$endTime = Request::param('endTime/s', '');
$query = OperationLog::where('delete_time', null);
// 关键词搜索(用户姓名、URL
if ($keyword) {
$query->where(function ($q) use ($keyword) {
$q
->whereOr('user_name', 'like', "%{$keyword}%")
->whereOr('url', 'like', "%{$keyword}%");
});
}
// 模块筛选
if ($module) {
$query->where('module', $module);
}
// 操作动作筛选
if ($action) {
$query->where('action', $action);
}
// 状态筛选
if ($status !== '') {
$query->where('status', $status);
}
// 时间范围筛选
if ($startTime) {
$query->where('create_time', '>=', $startTime);
}
if ($endTime) {
$query->where('create_time', '<=', $endTime);
}
// 获取总数
$total = $query->count();
// 分页查询
$list = $query->order('id', 'desc')
->page($page, $pageSize)
->select()
->toArray();
// 获取所有唯一的 user_id
$userIds = array_unique(array_column($list, 'user_id'));
$userIds = array_filter($userIds); // 过滤掉0和null
// 批量查询用户信息
$users = [];
if (!empty($userIds)) {
$userList = AdminUser::whereIn('id', $userIds)
->where('delete_time', null)
->field('id, name')
->select()
->toArray();
// 转换为以 id 为键的数组,方便查找
foreach ($userList as $user) {
$users[$user['id']] = [
'name' => $user['name']
];
}
}
// 将用户信息合并到日志列表中
foreach ($list as &$item) {
if (isset($users[$item['user_id']])) {
$item['user_name'] = $users[$item['user_id']]['name'];
} else {
$item['user_name'] = $item['user_name'] ?? '';
}
}
unset($item); // 释放引用
return json([
'code' => 200,
'msg' => '获取成功',
'data' => [
'list' => $list,
'total' => $total,
'page' => $page,
'pageSize' => $pageSize
]
]);
} catch (\Exception $e) {
return json([
'code' => 500,
'msg' => '获取操作日志失败: ' . $e->getMessage()
]);
}
}
/**
* 获取操作日志详情
* @param int $id
* @return Json
*/
public function getOperationLogDetail(int $id)
{
try {
$log = OperationLog::where('id', $id)
->where('delete_time', null)
->find();
if (!$log) {
return json([
'code' => 404,
'msg' => '操作日志不存在'
]);
}
$logData = $log->toArray();
$this->logSuccess('操作日志', '查看操作日志详情', $logData);
return json([
'code' => 200,
'msg' => '获取成功',
'data' => $logData
]);
} catch (\Exception $e) {
$this->logFail('操作日志', '查看操作日志详情', $e->getMessage());
return json([
'code' => 500,
'msg' => '获取操作日志详情失败: ' . $e->getMessage()
]);
}
}
/**
* 删除操作日志
* @param int $id
* @return Json
*/
public function deleteOperationLog(int $id)
{
try {
$log = OperationLog::where('id', $id)
->where('delete_time', null)
->find();
if (!$log) {
return json([
'code' => 404,
'msg' => '操作日志不存在'
]);
}
// 软删除
$log->delete();
return json([
'code' => 200,
'msg' => '删除成功'
]);
} catch (\Exception $e) {
return json([
'code' => 500,
'msg' => '删除失败: ' . $e->getMessage()
]);
}
}
/**
* 批量删除操作日志
* @return Json
*/
public function batchDeleteOperationLogs()
{
try {
$ids = Request::param('ids/a', []);
if (empty($ids)) {
return json([
'code' => 400,
'msg' => '请选择要删除的操作日志'
]);
}
OperationLog::whereIn('id', $ids)
->where('delete_time', null)
->delete();
return json([
'code' => 200,
'msg' => '批量删除成功'
]);
} catch (\Exception $e) {
return json([
'code' => 500,
'msg' => '批量删除失败: ' . $e->getMessage()
]);
}
}
/**
* 获取操作统计信息(模块、动作等)
* @return Json
*/
public function getOperationStatistics()
{
try {
// 获取模块列表
$modules = OperationLog::where('delete_time', null)
->group('module')
->column('module');
// 获取动作列表
$actions = OperationLog::where('delete_time', null)
->group('action')
->column('action');
return json([
'code' => 200,
'msg' => '获取成功',
'data' => [
'modules' => $modules,
'actions' => $actions
]
]);
} catch (\Exception $e) {
return json([
'code' => 500,
'msg' => '获取统计信息失败: ' . $e->getMessage()
]);
}
}
}