LogController.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. <?php
  2. namespace Dcat\Admin\Controllers;
  3. use Dcat\Admin\Grid;
  4. use Dcat\Admin\Layout\Content;
  5. use Dcat\Admin\Models\OperationLog as OperationLogModel;
  6. use Dcat\Admin\Models\Repositories\OperationLog;
  7. use Illuminate\Routing\Controller;
  8. use Illuminate\Support\Arr;
  9. class LogController extends Controller
  10. {
  11. public function index(Content $content)
  12. {
  13. return $content
  14. ->title(trans('admin.operation_log'))
  15. ->description(trans('admin.list'))
  16. ->body($this->grid());
  17. }
  18. protected function grid()
  19. {
  20. return new Grid(new OperationLog(), function (Grid $grid) {
  21. $grid->column('id', 'ID')->sortable();
  22. $grid->column('user', trans('admin.user'))
  23. ->get('name')
  24. ->link(function () {
  25. if ($this->user) {
  26. return admin_url('auth/users/'.$this->user['id']);
  27. }
  28. })
  29. ->responsive();
  30. $grid->column('method', trans('admin.method'))
  31. ->responsive()
  32. ->label(OperationLogModel::$methodColors)
  33. ->filterByValue();
  34. $grid->column('path', trans('admin.uri'))->responsive()->display(function ($v) {
  35. return "<code>$v</code>";
  36. })->filterByValue();
  37. $grid->column('ip', 'IP')->filterByValue()->responsive();
  38. $grid->column('input')->responsive()->display(function ($input) {
  39. $input = json_decode($input, true);
  40. if (empty($input)) {
  41. return;
  42. }
  43. $input = Arr::except($input, ['_pjax', '_token', '_method', '_previous_']);
  44. if (empty($input)) {
  45. return;
  46. }
  47. return '<pre class="dump">'.json_encode($input, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE).'</pre>';
  48. });
  49. $grid->column('created_at', trans('admin.created_at'))->responsive();
  50. $grid->model()->with('user')->orderBy('id', 'DESC');
  51. $grid->disableCreateButton();
  52. $grid->disableQuickEditButton();
  53. $grid->disableEditButton();
  54. $grid->disableViewButton();
  55. $grid->setActionClass(Grid\Displayers\Actions::class);
  56. $grid->filter(function (Grid\Filter $filter) {
  57. $userModel = config('admin.database.users_model');
  58. $filter->in('user_id', trans('admin.user'))
  59. ->multipleSelect($userModel::pluck('name', 'id'));
  60. $filter->equal('method', trans('admin.method'))
  61. ->select(
  62. array_combine(OperationLogModel::$methods, OperationLogModel::$methods)
  63. );
  64. $filter->like('path', trans('admin.uri'));
  65. $filter->equal('ip', 'IP');
  66. $filter->between('created_at')->datetime();
  67. });
  68. });
  69. }
  70. public function destroy($id)
  71. {
  72. $ids = explode(',', $id);
  73. if (OperationLogModel::destroy(array_filter($ids))) {
  74. $data = [
  75. 'status' => true,
  76. 'message' => trans('admin.delete_succeeded'),
  77. ];
  78. } else {
  79. $data = [
  80. 'status' => false,
  81. 'message' => trans('admin.delete_failed'),
  82. ];
  83. }
  84. return response()->json($data);
  85. }
  86. }