GamesController.php 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. <?php
  2. namespace App\Admin\Controllers;
  3. use App\Admin\Actions\Games\GameLookers;
  4. use App\Admin\Actions\Games\GameMembers;
  5. use App\Admin\Actions\Games\GameScores;
  6. use App\Admin\Actions\Teams\TeamFeeds;
  7. use App\Admin\Actions\Teams\TeamPhotos;
  8. use App\Models\ChatTeam;
  9. use App\Models\Course;
  10. use App\Models\Game;
  11. use App\Models\GameType;
  12. use App\Models\GameUser;
  13. use App\Models\User;
  14. use Dcat\Admin\Form;
  15. use Dcat\Admin\Grid;
  16. use Dcat\Admin\Http\Controllers\AdminController;
  17. use Dcat\Admin\Show;
  18. use Dcat\Admin\Widgets\Modal;
  19. use App\Services\TencentImGroupService;
  20. use Illuminate\Support\Facades\DB;
  21. use Illuminate\Support\Facades\Log;
  22. class GamesController extends AdminController
  23. {
  24. /**
  25. * Make a grid builder.
  26. *
  27. * @return Grid
  28. */
  29. protected function grid()
  30. {
  31. $grid = new Grid(new Game());
  32. $grid->model()->with(['game_types', 'creator_s:id,name,avatar', 'course:id,name'])->orderByDesc('id');
  33. $grid->column('id')->sortable();
  34. $grid->column('img')->image('', 50);
  35. $grid->column('name');
  36. $grid->column('creator')->display(function ($res) {
  37. if($this->creator_s){
  38. $str = "";
  39. $str .= "<div style='margin-right:10px;display: flex;align-items: center'>";
  40. $str .= '<img data-action="preview-img" src="' . $this->creator_s->avatar . '" style="max-height:50px;cursor:pointer;margin-right:5px;" class="img img-thumbnail">';
  41. $str .= '<div>';
  42. $str .= '<p style="margin-bottom: 2px">ID:' . $this->creator_s->id . '</p>';
  43. $str .= '<p>' . trans('user.fields.name') . ':' . $this->creator_s->name . '</p>';
  44. $str .= "</div>";
  45. $str .= "</div>";
  46. return $str;
  47. }
  48. });
  49. $grid->column('game_types.name', trans('games.fields.game_type_id'));
  50. $grid->column('scale');
  51. $grid->column('members')->display(function ($res) {
  52. $form = GameMembers::make()->payload(['id' => $this->id]);
  53. return Modal::make()
  54. ->lg()
  55. ->title(trans('games.fields.Players'))
  56. ->body($form)
  57. ->button('<i class="feather icon-align-right"></i> ' . $res);
  58. });
  59. $grid->column('course.name', trans('games.fields.course_id'));
  60. $grid->column('forbid_look')->switch();
  61. $grid->column('forbid_join')->switch();
  62. $grid->column('lookers');
  63. $grid->column('begin_time')->display(function ($res) {
  64. return date('m-d H:i', strtotime($res));
  65. });
  66. $grid->column('end_time')->display(function ($res) {
  67. if(!empty($res)){
  68. return date('m-d H:i', strtotime($res));
  69. }else{
  70. return '';
  71. }
  72. });
  73. $grid->column('created_at')->display(function ($res) {
  74. return date('Y-m-d H:i', strtotime($res));
  75. });
  76. $grid->actions(function (Grid\Displayers\Actions $actions) {
  77. $actions->append(new GameScores('game'));
  78. });
  79. $grid->disableActions();
  80. $grid->disableCreateButton();
  81. $grid->disableRowSelector();
  82. $grid->filter(function (Grid\Filter $filter) {
  83. $filter->panel();
  84. $filter->equal('id')->width(3);
  85. $filter->like('name')->width(3);
  86. $types = GameType::query()->pluck('name','id');
  87. $filter->equal('game_type_id')->select($types)->width(3);
  88. $courses = Course::query()->whereNull('deleted_at')->pluck('name','id');
  89. $filter->equal('course_id')->select($courses)->width(3);
  90. });
  91. return $grid;
  92. }
  93. /**
  94. * Make a show builder.
  95. *
  96. * @param mixed $id
  97. *
  98. * @return Show
  99. */
  100. protected function detail($id)
  101. {
  102. return Show::make($id, new Game(), function (Show $show) {
  103. $show->field('id');
  104. $show->field('name');
  105. $show->field('begin_time');
  106. $show->field('end_time');
  107. $show->field('scale');
  108. $show->field('game_type_id');
  109. $show->field('creator');
  110. $show->field('forbid_look');
  111. $show->field('forbid_join');
  112. $show->field('img')->image('', 200);
  113. $show->field('lookers');
  114. $show->field('members');
  115. $show->field('course_id');
  116. $show->field('created_at');
  117. $show->field('updated_at');
  118. });
  119. }
  120. /**
  121. * Make a form builder.
  122. *
  123. * @return Form
  124. */
  125. protected function form()
  126. {
  127. return Form::make(new Game(), function (Form $form) {
  128. $form->display('id');
  129. $form->text('name')->required();
  130. $form->datetime('begin_time')->required();
  131. $form->number('scale')
  132. ->attribute('min', 2)
  133. ->attribute('max', 50)
  134. ->required();
  135. $game_types = GameType::query()->get()->toArray();
  136. $types = array();
  137. foreach ($game_types as $key => $val) {
  138. $types[$val['id']] = $val['name'] . '(' . $val['scale'] . ')';
  139. }
  140. $form->select('game_type_id')->options($types);
  141. $form->switch('forbid_look')->default(0);
  142. $form->switch('forbid_join')->default(0);
  143. $form->image('img')->saveFullUrl()->autoUpload();
  144. $form->number('lookers')
  145. ->attribute('min', 0);
  146. $form->number('members')
  147. ->attribute('min', 0)->default(10);
  148. $course = Course::query()->get();
  149. $course_arr = array();
  150. foreach ($course as $v) {
  151. $course_arr[$v['id']] = $v['name'];
  152. }
  153. $form->select('course_id')->options($course_arr)->required();
  154. if($form->isCreating()){
  155. $users = User::query()->where('status', 1)->get();
  156. $users_arr = array();
  157. foreach ($users as $v) {
  158. $users_arr[$v['id']] = $v['name'];
  159. }
  160. $form->select('creator')->options($users_arr);
  161. $form->saved(function (Form $form) {
  162. $gameId = $form->getKey();
  163. $gameUser = new GameUser();
  164. $gameUser->game_id = $gameId;
  165. $gameUser->user_id = $form->creator;
  166. $gameUser->level = 4;
  167. $gameUser->type = 1;
  168. $gameUser->status = 1;
  169. $gameUser->save();
  170. //创建群聊
  171. $user = User::query()->where('id', $form->creator)->first();
  172. $groupService = new TencentImGroupService();
  173. $data = array();
  174. $data['member_list'] [] = $user;
  175. $data['Owner_Account'] = $user->tencent_im_user_id;
  176. $data['group_name'] = $form->name;
  177. $data['avatar'] = $form->img;
  178. $groupResult = $groupService->createGroup($data);
  179. Log::info($user);
  180. Log::info($groupResult);
  181. if ($groupResult['ActionStatus'] == 'OK' && $groupResult['ErrorCode'] == 0) {
  182. DB::table('games')->where('id', $gameId)->update(['GroupId'=>$groupResult['GroupId']]);
  183. }
  184. $chatTeam = new ChatTeam();
  185. $chatTeam->user_id = $user->id;
  186. $chatTeam->Owner_Account = $user->tencent_im_user_id;
  187. $chatTeam->group_name = $form->name;
  188. $chatTeam->GroupId = $groupResult['GroupId'];
  189. $chatTeam->FaceUrl = $form->img;
  190. $chatTeam->MaxMemberCount = 20;
  191. $chatTeam->ApplyJoinOption = 'FreeAccess';
  192. $chatTeam->save();
  193. });
  194. }
  195. $form->footer(function ($footer) {
  196. // 去掉`查看`checkbox
  197. $footer->disableViewCheck();
  198. // 去掉`继续编辑`checkbox
  199. $footer->disableEditingCheck();
  200. // 去掉`继续创建`checkbox
  201. $footer->disableCreatingCheck();
  202. });
  203. });
  204. }
  205. }