WxVoterController.php 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. <?php
  2. namespace App\Admin\Controllers\Voter;
  3. use App\Admin\Actions\Grid\Voter\SimulateVoteAction;
  4. use App\Admin\Actions\Grid\Voter\VoterNoticeAction;
  5. use App\Admin\Repositories\Voter\WxVoter;
  6. use App\Models\Voter\WxVoterPlayer;
  7. use App\Wen\Utils\Settings;
  8. use Dcat\Admin\Actions\Action;
  9. use Dcat\Admin\Form;
  10. use Dcat\Admin\Grid;
  11. use Dcat\Admin\Show;
  12. use Dcat\Admin\Http\Controllers\AdminController;
  13. use Illuminate\Http\Request;
  14. class WxVoterController extends AdminController
  15. {
  16. public function voters(Request $request)
  17. {
  18. $q = $request->get('q');
  19. global $__MINI_GLOBAL_TENANT_ID__;
  20. if($__MINI_GLOBAL_TENANT_ID__ > 0){
  21. return \App\Models\Voter\WxVoter::where('tenant_id', $__MINI_GLOBAL_TENANT_ID__)->where('title', 'like', "%$q%")->where(function ($query) use ($q){
  22. $query->orWhere('id', (int)$q);
  23. })->paginate(null, ['id', 'title as text']);
  24. }
  25. return \App\Models\Voter\WxVoter::where('title', 'like', "%$q%")->orWhere('id', (int)$q)->paginate(null, ['id', 'title as text']);
  26. }
  27. /**
  28. * Make a grid builder.
  29. *
  30. * @return Grid
  31. */
  32. protected function grid()
  33. {
  34. return Grid::make(new WxVoter(), function (Grid $grid) {
  35. $grid->model()->orderBy('is_sticky', 'desc');
  36. $grid->model()->orderBy('id', 'desc');
  37. $grid->column('id')->sortable();
  38. $grid->column('owers', '头像')->display(function ($v) {
  39. return '<img src="' . ($this->ower['user_avatar'] ?? Settings::get('img_default', 'https://img.mini.minisns.cn/icons/dafault.png')) . '" style="border-radius:50px;width:30px;" />';
  40. })->width('50px');
  41. $grid->column('ower', '用户名称')->display(function ($v) {
  42. if($v && $v['user_name']){
  43. return '<a target="_blank" href="'.admin_url('users?id='.$v['id']).'">'.$v['user_name'].'</a>' ?? '用户已删除';
  44. }
  45. return '用户已删除';
  46. })->width('100px');
  47. // $grid->column('master_user_avatar');
  48. // $grid->column('master_user_name');
  49. // $grid->column('template_id');
  50. $grid->column('title');
  51. // $grid->column('notice');
  52. // $grid->column('content');
  53. $grid->column('banners')->display(function ($v){
  54. $str = '';
  55. if($v){
  56. foreach ($v as $img){
  57. $str .= '<a href="'.$img.'" target="_blank"><img src="'.$img.'" style="width: 177px; height: 95px;"/></a>';
  58. break;
  59. }
  60. }
  61. return $str;
  62. });
  63. $grid->column('player_count', '选手总数')->display(function ($v){
  64. return '<a target="_blank" href="'.admin_url('voter/player?voter_id='.$this->id).'">'.(WxVoterPlayer::where('voter_id', $this->id)->count()).'</a>';
  65. });
  66. // $grid->column('is_open_enter');
  67. // $grid->column('is_exposure');
  68. // $grid->column('is_open_vote_comment');
  69. // $grid->column('is_open_player_comment');
  70. // $grid->column('is_can_be_anonymous');
  71. // $grid->column('is_hide_rank');
  72. // $grid->column('is_hide_vote_record');
  73. // $grid->column('is_hide_player_count');
  74. // $grid->column('music_url');
  75. // $grid->column('music_name');
  76. // $grid->column('is_music_auto');
  77. // $grid->column('start_time');
  78. // $grid->column('end_time');
  79. // $grid->column('enter_start_time');
  80. // $grid->column('enter_end_time');
  81. // $grid->column('user_day_limit');
  82. // $grid->column('user_total_limit');
  83. // $grid->column('player_called');
  84. // $grid->column('unit_called');
  85. // $grid->column('main_background_image');
  86. // $grid->column('user_background_image');
  87. // $grid->column('background_color');
  88. // $grid->column('text_color');
  89. // $grid->column('main_color');
  90. // $grid->column('button_bg_color');
  91. // $grid->column('button_text_color');
  92. // $grid->column('text_navigation_bar_color');
  93. $grid->column('is_sticky')->switch();
  94. $grid->column('status')->switch();
  95. // $grid->column('created_at');
  96. $grid->column('updated_at')->sortable();
  97. $grid->filter(function (Grid\Filter $filter) {
  98. $filter->equal('id');
  99. });
  100. $grid->disableCreateButton();
  101. $grid->actions(function (Grid\Displayers\Actions $actions) {
  102. $actions->append((new SimulateVoteAction())->setKey($this->id));
  103. $actions->append((new VoterNoticeAction())->setKey($this->id));
  104. });
  105. });
  106. }
  107. /**
  108. * Make a show builder.
  109. *
  110. * @param mixed $id
  111. *
  112. * @return Show
  113. */
  114. protected function detail($id)
  115. {
  116. return Show::make($id, new WxVoter(), function (Show $show) {
  117. $show->field('id');
  118. $show->field('user_id');
  119. $show->field('master_user_avatar');
  120. $show->field('master_user_name');
  121. $show->field('template_id');
  122. $show->field('title');
  123. $show->field('notice');
  124. $show->field('content');
  125. $show->field('banners');
  126. $show->field('is_open_enter');
  127. $show->field('is_exposure');
  128. $show->field('is_open_vote_comment');
  129. $show->field('is_open_player_comment');
  130. $show->field('is_can_be_anonymous');
  131. $show->field('is_hide_rank');
  132. $show->field('is_hide_vote_record');
  133. $show->field('is_hide_player_count');
  134. $show->field('music_url');
  135. $show->field('music_name');
  136. $show->field('is_music_auto');
  137. $show->field('start_time');
  138. $show->field('end_time');
  139. $show->field('enter_start_time');
  140. $show->field('enter_end_time');
  141. $show->field('user_day_limit');
  142. $show->field('user_total_limit');
  143. $show->field('player_called');
  144. $show->field('unit_called');
  145. $show->field('main_background_image');
  146. $show->field('user_background_image');
  147. $show->field('background_color');
  148. $show->field('text_color');
  149. $show->field('main_color');
  150. $show->field('button_bg_color');
  151. $show->field('button_text_color');
  152. $show->field('text_navigation_bar_color');
  153. $show->field('is_sticky');
  154. $show->field('status');
  155. $show->field('created_at');
  156. $show->field('updated_at');
  157. });
  158. }
  159. /**
  160. * Make a form builder.
  161. *
  162. * @return Form
  163. */
  164. protected function form()
  165. {
  166. return Form::make(new WxVoter(), function (Form $form) {
  167. $form->display('id');
  168. $form->text('user_id');
  169. $form->image('master_user_avatar')->url('files/uploads')->uniqueName()->autoUpload();
  170. $form->text('master_user_name');
  171. $form->text('template_id');
  172. $form->text('title');
  173. $form->textarea('notice');
  174. if(__system_is_model_enable('laradocs', 'dcat-neditor')){
  175. $form->neditor('content');
  176. }else{
  177. $form->editor('content');
  178. }
  179. $form->multipleImage('banners')->url('files/uploads')->uniqueName()->autoUpload();
  180. $form->switch('is_open_enter')->default(true);
  181. $form->switch('is_exposure')->default(true);
  182. $form->switch('is_open_vote_comment')->default(true);
  183. $form->switch('is_open_player_comment')->default(true);
  184. $form->switch('is_can_be_anonymous');
  185. $form->switch('is_hide_rank');
  186. $form->switch('is_hide_vote_record');
  187. $form->switch('is_hide_player_count');
  188. $form->text('music_url');
  189. $form->text('music_name');
  190. $form->switch('is_music_auto');
  191. $form->datetime('start_time');
  192. $form->datetime('end_time');
  193. $form->datetime('enter_start_time');
  194. $form->datetime('enter_end_time');
  195. $form->text('user_day_limit')->help('每天限制次数与总字数限制只生效一个,优先总字数限制');
  196. $form->text('user_total_limit');
  197. $form->text('player_called');
  198. $form->text('unit_called');
  199. $form->image('main_background_image')->url('files/uploads')->uniqueName()->autoUpload();
  200. $form->image('user_background_image')->url('files/uploads')->uniqueName()->autoUpload();
  201. $form->color('background_color');
  202. $form->color('text_color');
  203. $form->color('main_color');
  204. $form->color('button_bg_color');
  205. $form->color('button_text_color');
  206. $form->color('text_navigation_bar_color')->default('#000000');
  207. $form->switch('is_sticky')->default(0);
  208. $form->switch('status')->default(1);
  209. $form->display('created_at');
  210. $form->display('updated_at');
  211. $form->deleting(function (Form $form){
  212. global $__MINI_GLOBAL_TENANT_ID__;
  213. if($__MINI_GLOBAL_TENANT_ID__ > 0){
  214. return $form->response()->error('权限不足,不可以删除其他分站对象');
  215. }
  216. });
  217. });
  218. }
  219. }