LogController.php 3.5 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->id('ID')->sortable();
  22. $grid->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->method(trans('admin.method'))
  31. ->responsive()
  32. ->label(OperationLogModel::$methodColors)
  33. ->filterByValue();
  34. $grid->path(trans('admin.uri'))->responsive()->display(function ($v) {
  35. return "<code>$v</code>";
  36. })->filterByValue();
  37. $grid->ip('IP')->filterByValue()->responsive();
  38. $grid->input->responsive()->display(function ($input) {
  39. $input = json_decode($input, true);
  40. $input = Arr::except($input, ['_pjax', '_token', '_method', '_previous_']);
  41. if (empty($input)) {
  42. return '';
  43. }
  44. return '<pre class="dump">'.json_encode($input, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE).'</pre>';
  45. });
  46. $grid->created_at(trans('admin.created_at'))->responsive();
  47. $grid->model()->with('user')->orderBy('id', 'DESC');
  48. $grid->disableCreateButton();
  49. $grid->disableQuickEditButton();
  50. $grid->disableEditButton();
  51. $grid->disableViewButton();
  52. $grid->setActionClass(Grid\Displayers\Actions::class);
  53. $grid->filter(function (Grid\Filter $filter) {
  54. $filter->equal('user_id', trans('admin.user'))
  55. ->selectResource('auth/users')
  56. ->options(function ($v) {
  57. if (! $v) {
  58. return $v;
  59. }
  60. $userModel = config('admin.database.users_model');
  61. return $userModel::find((array) $v)->pluck('name', 'id');
  62. });
  63. $filter->equal('method', trans('admin.method'))
  64. ->select(
  65. array_combine(OperationLogModel::$methods, OperationLogModel::$methods)
  66. );
  67. $filter->like('path', trans('admin.uri'));
  68. $filter->equal('ip', 'IP');
  69. $filter->between('created_at')->datetime();
  70. });
  71. });
  72. }
  73. public function destroy($id)
  74. {
  75. $ids = explode(',', $id);
  76. if (OperationLogModel::destroy(array_filter($ids))) {
  77. $data = [
  78. 'status' => true,
  79. 'message' => trans('admin.delete_succeeded'),
  80. ];
  81. } else {
  82. $data = [
  83. 'status' => false,
  84. 'message' => trans('admin.delete_failed'),
  85. ];
  86. }
  87. return response()->json($data);
  88. }
  89. }