UserActivityDataController.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. <?php
  2. namespace App\Module\Activity\AdminControllers;
  3. use App\Module\Activity\Models\ActivityConfig;
  4. use App\Module\Activity\Repositorys\UserActivityDataRepository;
  5. use Dcat\Admin\Form;
  6. use Dcat\Admin\Grid;
  7. use Dcat\Admin\Show;
  8. use Dcat\Admin\Http\Controllers\AdminController;
  9. /**
  10. * 用户活动数据控制器
  11. */
  12. class UserActivityDataController extends AdminController
  13. {
  14. /**
  15. * 标题
  16. *
  17. * @return string
  18. */
  19. protected function title()
  20. {
  21. return '用户活动数据';
  22. }
  23. /**
  24. * 创建表格
  25. *
  26. * @return Grid
  27. */
  28. protected function grid()
  29. {
  30. return Grid::make(new UserActivityDataRepository(), function (Grid $grid) {
  31. $grid->column('id', 'ID')->sortable();
  32. $grid->column('user_id', '用户ID');
  33. $grid->column('activity_id', '活动')->display(function ($activityId) {
  34. $activity = ActivityConfig::find($activityId);
  35. return $activity ? $activity->name : "未知活动({$activityId})";
  36. });
  37. $grid->column('progress', '进度');
  38. $grid->column('last_update', '最后更新时间')->sortable();
  39. $grid->column('created_at', '创建时间');
  40. $grid->column('updated_at', '更新时间');
  41. $grid->filter(function (Grid\Filter $filter) {
  42. $filter->equal('id', 'ID');
  43. $filter->equal('user_id', '用户ID');
  44. $filter->equal('activity_id', '活动')->select(
  45. ActivityConfig::pluck('name', 'id')
  46. );
  47. $filter->between('last_update', '最后更新时间')->datetime();
  48. });
  49. // 禁用创建按钮
  50. $grid->disableCreateButton();
  51. });
  52. }
  53. /**
  54. * 创建详情页
  55. *
  56. * @param mixed $id
  57. * @return Show
  58. */
  59. protected function detail($id)
  60. {
  61. return Show::make($id, new UserActivityDataRepository(), function (Show $show) {
  62. $show->field('id', 'ID');
  63. $show->field('user_id', '用户ID');
  64. $show->field('activity_id', '活动')->as(function ($activityId) {
  65. $activity = ActivityConfig::find($activityId);
  66. return $activity ? $activity->name : "未知活动({$activityId})";
  67. });
  68. $show->field('progress', '进度');
  69. $show->field('progress_data', '进度数据')->json();
  70. $show->field('last_update', '最后更新时间');
  71. $show->field('created_at', '创建时间');
  72. $show->field('updated_at', '更新时间');
  73. // 显示参与记录
  74. $show->divider();
  75. $show->field('参与记录')->as(function () {
  76. $participation = \App\Module\Activity\Models\ActivityParticipation::where('user_id', $this->user_id)
  77. ->where('activity_id', $this->activity_id)
  78. ->first();
  79. if (!$participation) {
  80. return '无参与记录';
  81. }
  82. $html = '<div class="table-responsive"><table class="table table-bordered">';
  83. $html .= '<tr><th>ID</th><td>' . $participation->id . '</td></tr>';
  84. $html .= '<tr><th>参与时间</th><td>' . $participation->participate_time . '</td></tr>';
  85. $html .= '<tr><th>完成状态</th><td>' . \App\Module\Activity\Enums\PARTICIPATION_STATUS::getName($participation->completion_status) . '</td></tr>';
  86. $html .= '<tr><th>完成时间</th><td>' . ($participation->completion_time ?: '未完成') . '</td></tr>';
  87. $html .= '<tr><th>奖励状态</th><td>' . \App\Module\Activity\Enums\REWARD_STATUS::getName($participation->reward_status) . '</td></tr>';
  88. $html .= '</table></div>';
  89. return $html;
  90. })->unescape();
  91. });
  92. }
  93. /**
  94. * 创建表单
  95. *
  96. * @return Form
  97. */
  98. protected function form()
  99. {
  100. return Form::make(new UserActivityDataRepository(), function (Form $form) {
  101. $form->display('id', 'ID');
  102. $form->display('user_id', '用户ID');
  103. $form->display('activity_id', '活动ID');
  104. $form->number('progress', '进度')->min(0);
  105. $form->textarea('progress_data', '进度数据')->help('JSON格式');
  106. $form->display('last_update', '最后更新时间');
  107. $form->display('created_at', '创建时间');
  108. $form->display('updated_at', '更新时间');
  109. });
  110. }
  111. }