UserController.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. <?php
  2. namespace Tests\Controllers;
  3. use App\Http\Controllers\Controller;
  4. use Encore\Admin\Controllers\ModelForm;
  5. use Encore\Admin\Facades\Admin;
  6. use Encore\Admin\Form;
  7. use Encore\Admin\Grid;
  8. use Encore\Admin\Layout\Content;
  9. use Tests\Models\Tag;
  10. use Tests\Models\User;
  11. class UserController extends Controller
  12. {
  13. use ModelForm;
  14. /**
  15. * Index interface.
  16. *
  17. * @return Content
  18. */
  19. public function index()
  20. {
  21. return Admin::content(function (Content $content) {
  22. $content->header('All users');
  23. $content->description('description');
  24. $content->body($this->grid());
  25. });
  26. }
  27. /**
  28. * Edit interface.
  29. *
  30. * @param $id
  31. *
  32. * @return Content
  33. */
  34. public function edit($id)
  35. {
  36. return Admin::content(function (Content $content) use ($id) {
  37. $content->header('Edit user');
  38. $content->description('description');
  39. $content->body($this->form()->edit($id));
  40. });
  41. }
  42. /**
  43. * Create interface.
  44. *
  45. * @return Content
  46. */
  47. public function create()
  48. {
  49. return Admin::content(function (Content $content) {
  50. $content->header('Create user');
  51. $content->body($this->form());
  52. });
  53. }
  54. /**
  55. * Make a grid builder.
  56. *
  57. * @return Grid
  58. */
  59. protected function grid()
  60. {
  61. return Admin::grid(User::class, function (Grid $grid) {
  62. $grid->id('ID')->sortable();
  63. $grid->username();
  64. $grid->email();
  65. $grid->mobile();
  66. $grid->full_name();
  67. $grid->avatar()->display(function ($avatar) {
  68. return "<img src='{$avatar}' />";
  69. });
  70. $grid->profile()->postcode('Post code');
  71. $grid->profile()->address();
  72. $grid->position('Position');
  73. $grid->profile()->color();
  74. $grid->profile()->start_at('开始时间');
  75. $grid->profile()->end_at('结束时间');
  76. $grid->column('column1_not_in_table')->display(function () {
  77. return 'full name:'.$this->full_name;
  78. });
  79. $grid->column('column2_not_in_table')->display(function () {
  80. return $this->email.'#'.$this->profile['color'];
  81. });
  82. $grid->tags()->display(function ($tags) {
  83. $tags = collect($tags)->map(function ($tag) {
  84. return "<code>{$tag['name']}</code>";
  85. })->toArray();
  86. return implode('', $tags);
  87. });
  88. $grid->created_at();
  89. $grid->updated_at();
  90. $grid->filter(function ($filter) {
  91. $filter->like('username');
  92. $filter->like('email');
  93. $filter->like('profile.postcode');
  94. $filter->between('profile.start_at')->datetime();
  95. $filter->between('profile.end_at')->datetime();
  96. });
  97. $grid->actions(function ($actions) {
  98. if ($actions->getKey() % 2 == 0) {
  99. $actions->append('<a href="/" class="btn btn-xs btn-danger">detail</a>');
  100. }
  101. });
  102. });
  103. }
  104. /**
  105. * Make a form builder.
  106. *
  107. * @return Form
  108. */
  109. protected function form()
  110. {
  111. Form::extend('map', Form\Field\Map::class);
  112. Form::extend('editor', Form\Field\Editor::class);
  113. return Admin::form(User::class, function (Form $form) {
  114. $form->disableDeletion();
  115. $form->display('id', 'ID');
  116. $form->text('username');
  117. $form->email('email')->rules('required');
  118. $form->mobile('mobile');
  119. $form->image('avatar')->help('上传头像', 'fa-image');
  120. $form->ignore(['password_confirmation']);
  121. $form->password('password')->rules('confirmed');
  122. $form->password('password_confirmation');
  123. $form->divide();
  124. $form->text('profile.first_name');
  125. $form->text('profile.last_name');
  126. $form->text('profile.postcode')->help('Please input your postcode');
  127. $form->textarea('profile.address')->rows(15);
  128. $form->map('profile.latitude', 'profile.longitude', 'Position');
  129. $form->color('profile.color');
  130. $form->datetime('profile.start_at');
  131. $form->datetime('profile.end_at');
  132. $form->multipleSelect('tags', 'Tags')->options(Tag::all()->pluck('name', 'id')); //->rules('max:10|min:3');
  133. $form->display('created_at', 'Created At');
  134. $form->display('updated_at', 'Updated At');
  135. $form->html('<a html-field>html...</a>');
  136. });
  137. }
  138. }