AdminLogController.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. <?php
  2. namespace App\Admin\Controllers\System;
  3. use App\Models\System\AdminOperationLog;
  4. use Dcat\Admin\Grid;
  5. use Dcat\Admin\Http\JsonResponse;
  6. use Dcat\Admin\Layout\Content;
  7. use Dcat\Admin\Support\Helper;
  8. use Illuminate\Support\Arr;
  9. use Dcat\Admin\Widgets\Metrics\Card;
  10. class AdminLogController
  11. {
  12. public function index(Content $content)
  13. {
  14. return $content
  15. ->title('操作日志记录')
  16. ->description()
  17. ->body($this->grid());
  18. }
  19. protected function grid()
  20. {
  21. return new Grid(AdminOperationLog::with('user'), function (Grid $grid) {
  22. $grid->column('id', 'ID')->sortable();
  23. $grid->column('user', trans('admin.user'))
  24. ->display(function ($user) {
  25. if (! $user) {
  26. return;
  27. }
  28. $user = Helper::array($user);
  29. return $user['name'] ?? ($user['username'] ?? $user['id']);
  30. })
  31. ->link(function () {
  32. if ($this->user) {
  33. return admin_url('auth/users/'.$this->user['id']);
  34. }
  35. });
  36. $grid->column('method', trans('admin.method'))
  37. ->label(AdminOperationLog::$methodColors)
  38. ->filterByValue();
  39. $grid->column('path', trans('admin.uri'))->display(function ($v) {
  40. return "<code>$v</code>";
  41. })->filterByValue();
  42. $grid->column('ip', 'IP')->filterByValue();
  43. $grid->column('input')->display('查看') // 设置按钮名称
  44. ->expand(function ($v) {
  45. $input = json_decode($this->input ?? '[]', true);
  46. if (empty($input)) {
  47. return;
  48. }
  49. $input = Arr::except($input, ['_pjax', '_token', '_method', '_previous_']);
  50. if (empty($input)) {
  51. return;
  52. }
  53. $input = json_encode($input, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
  54. // 只填充内容,不需要标题
  55. $card = Card::make(view('admin/system/log', compact('input')));
  56. return $card;
  57. });
  58. $grid->column('created_at', trans('admin.created_at'));
  59. $grid->model()->orderBy('id', 'DESC');
  60. $grid->disableCreateButton();
  61. $grid->disableQuickEditButton();
  62. $grid->disableEditButton();
  63. $grid->disableViewButton();
  64. $grid->showColumnSelector();
  65. $grid->setActionClass(Grid\Displayers\Actions::class);
  66. $grid->filter(function (Grid\Filter $filter) {
  67. $userModel = config('admin.database.users_model');
  68. $filter->in('user_id', trans('admin.user'))
  69. ->multipleSelect($userModel::pluck('name', 'id'));
  70. $filter->equal('method', trans('admin.method'))
  71. ->select(
  72. array_combine(AdminOperationLog::$methods, AdminOperationLog::$methods)
  73. );
  74. $filter->like('path', trans('admin.uri'));
  75. $filter->equal('ip', 'IP');
  76. $filter->between('created_at')->datetime();
  77. });
  78. });
  79. }
  80. public function destroy($id)
  81. {
  82. $ids = explode(',', $id);
  83. AdminOperationLog::destroy(array_filter($ids));
  84. return JsonResponse::make()
  85. ->success(trans('admin.delete_succeeded'))
  86. ->refresh()
  87. ->send();
  88. }
  89. }