You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
147 lines
5.4 KiB
147 lines
5.4 KiB
<?php
|
|
|
|
namespace App\Admin\Controllers;
|
|
|
|
use Encore\Admin\Auth\Database\Administrator;
|
|
use Encore\Admin\Auth\Database\OperationLog;
|
|
use Encore\Admin\Controllers\AuthController as BaseAuthController;
|
|
use Encore\Admin\Grid;
|
|
use Encore\Admin\Layout\Content;
|
|
use Encore\Admin\Widgets\Box;
|
|
use Encore\Admin\Widgets\InfoBox;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Validator;
|
|
|
|
class AdminController extends BaseAuthController
|
|
{
|
|
/**
|
|
* 显示管理员列表页面
|
|
*
|
|
* @param Content $content 内容区域
|
|
* @return Content 返回构建好的内容
|
|
*/
|
|
public function index(Content $content)
|
|
{
|
|
return $content
|
|
->header(trans('admin.administrator')) // 设置页面标题
|
|
->description(trans('admin.list')) // 设置页面描述
|
|
->body($this->adminGrid()->render()); // 渲染管理员网格
|
|
}
|
|
|
|
/**
|
|
* 创建管理员网格
|
|
*
|
|
* @return Grid 返回管理员网格实例
|
|
*/
|
|
protected function adminGrid()
|
|
{
|
|
// 获取用户模型
|
|
$userModel = config('admin.database.users_model');
|
|
|
|
// 创建新的网格实例
|
|
$grid = new Grid(new $userModel());
|
|
|
|
// 定义网格的列
|
|
$grid->column('id', 'ID')->sortable(); // ID 列,支持排序
|
|
$grid->column('username', trans('admin.username')); // 用户名列
|
|
$grid->column('name', trans('admin.name')); // 姓名列
|
|
$grid->column('login_ip', '登录ip'); // 登录 IP 列
|
|
$grid->roles(trans('admin.roles'))->pluck('name')->label(); // 角色列,显示角色名称
|
|
$grid->column('created_at', trans('admin.created_at')); // 创建时间列
|
|
$grid->column('updated_at', trans('admin.updated_at')); // 更新时间列
|
|
|
|
// 自定义操作按钮
|
|
$grid->actions(function (Grid\Displayers\DropdownActions $actions) {
|
|
// 禁用 ID 为 1 的管理员的删除操作
|
|
if ($actions->getKey() == 1) {
|
|
$actions->disableDelete();
|
|
}
|
|
});
|
|
|
|
// 自定义工具栏
|
|
$grid->tools(function (Grid\Tools $tools) {
|
|
$tools->batch(function (Grid\Tools\BatchActions $actions) {
|
|
// 禁用批量删除操作
|
|
$actions->disableDelete();
|
|
});
|
|
});
|
|
|
|
return $grid; // 返回创建的网格
|
|
}
|
|
|
|
/**
|
|
* 显示操作日志页面
|
|
*
|
|
* @param Content $content 内容区域
|
|
* @return Content 返回构建好的内容
|
|
*/
|
|
public function indexLogs(Content $content)
|
|
{
|
|
return $content
|
|
->header(trans('admin.operation_log')) // 设置页面标题
|
|
->description(trans('admin.list')) // 设置页面描述
|
|
->body($this->logGrid()); // 渲染操作日志网格
|
|
}
|
|
|
|
/**
|
|
* 创建操作日志网格
|
|
*
|
|
* @return Grid 返回操作日志网格实例
|
|
*/
|
|
protected function logGrid()
|
|
{
|
|
// 创建新的操作日志网格实例
|
|
$grid = new Grid(new OperationLog());
|
|
|
|
// 按照 ID 降序排列
|
|
$grid->model()->orderBy('id', 'DESC');
|
|
|
|
// 定义网格的列
|
|
$grid->column('id', 'ID')->sortable(); // ID 列,支持排序
|
|
$grid->column('user.name', '用户'); // 用户列,显示用户名
|
|
$grid->column('method', '方法')->display(function ($method) {
|
|
// 根据方法类型设置颜色
|
|
$color = array_get(OperationLog::$methodColors, $method, 'grey');
|
|
return "<span class=\"badge bg-$color\">$method</span>"; // 返回带颜色的标签
|
|
});
|
|
$grid->column('path', '路径')->label('info'); // 路径列
|
|
$grid->column('ip', '地址')->label('primary'); // IP 地址列
|
|
$grid->column('description', '描述')->limit(20)->modal(function ($model) {
|
|
// 描述列,点击可弹出详细信息
|
|
return new Box('详情', $model->description ?: ' ');
|
|
});
|
|
$grid->column('input', '输入数据')->limit(20)->expand(function ($model) {
|
|
// 输入数据列,点击可展开显示详细信息
|
|
$input = json_decode($model->input, true);
|
|
$input = array_except($input, ['_pjax', '_token', '_method', '_previous_']);
|
|
$codes = empty($input) ?
|
|
'<code>{}</code>' :
|
|
'<pre>' . json_encode($input, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE) . '</pre>';
|
|
return new Box('详情', $codes); // 返回输入数据的详细信息
|
|
});
|
|
|
|
$grid->column('created_at', trans('admin.created_at')); // 创建时间列
|
|
|
|
// 自定义操作按钮
|
|
$grid->actions(function (Grid\Displayers\Actions $actions) {
|
|
$actions->disableEdit(); // 禁用编辑操作
|
|
$actions->disableView(); // 禁用查看操作
|
|
});
|
|
|
|
$grid->disableCreateButton(); // 禁用创建按钮
|
|
|
|
// 自定义过滤器
|
|
$grid->filter(function (Grid\Filter $filter) {
|
|
$userModel = config('admin.database.users_model');
|
|
|
|
// 添加过滤选项
|
|
$filter->equal('user_id', 'User')->select($userModel::all()->pluck('name', 'id')); // 按用户过滤
|
|
$filter->equal('method')->select(array_combine(OperationLog::$methods, OperationLog::$methods)); // 按方法过滤
|
|
$filter->like('path'); // 按路径过滤
|
|
$filter->equal('ip'); // 按 IP 过滤
|
|
});
|
|
|
|
return $grid; // 返回创建的操作日志网格
|
|
}
|
|
}
|