DistMessageController.php 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. <?php
  2. namespace App\Admin\Controllers;
  3. use App\Admin\Repositories\DistMessage;
  4. use Dcat\Admin\Form;
  5. use Dcat\Admin\Grid;
  6. use Dcat\Admin\Show;
  7. use Dcat\Admin\Http\Controllers\AdminController;
  8. use Dcat\Admin\Layout\Content;
  9. use Dcat\Admin\Admin;
  10. use App\Distributor\Repositories\DistAdminDistributor;
  11. class DistMessageController extends AdminController
  12. {
  13. public function title()
  14. {
  15. return admin_trans('admin.messages');
  16. }
  17. /**
  18. * page index
  19. */
  20. public function index(Content $content)
  21. {
  22. return $content
  23. ->header(admin_trans( 'admin.messages'))
  24. ->description(admin_trans('admin.all'))
  25. ->breadcrumb(['text'=>'list','url'=>''])
  26. ->body($this->grid());
  27. }
  28. /**
  29. * Make a grid builder.
  30. *
  31. * @return Grid
  32. */
  33. protected function grid()
  34. {
  35. return Grid::make(new DistMessage(), function (Grid $grid) {
  36. $grid->column('id')->sortable();
  37. $grid->column('title', admin_trans_field('message_title'));
  38. $grid->column('content');
  39. //$grid->column('sender_id');
  40. $grid->column('target_type')->display(function ($value) {
  41. if ($value === 'all') {
  42. return admin_trans_label('all_users');
  43. } elseif ($value === 'users') {
  44. return admin_trans_label('specified_users');
  45. }
  46. return $value;
  47. });
  48. //$grid->column('target_ids');
  49. $grid->column('created_at');
  50. $grid->column('updated_at')->sortable();
  51. $grid->filter(function (Grid\Filter $filter) {
  52. $filter->equal('id');
  53. });
  54. });
  55. }
  56. /**
  57. * Make a show builder.
  58. *
  59. * @param mixed $id
  60. *
  61. * @return Show
  62. */
  63. protected function detail($id)
  64. {
  65. return Show::make($id, new DistMessage(), function (Show $show) use ($id) {
  66. $show->field('id');
  67. $show->field('title');
  68. $show->field('content');
  69. //$show->field('sender_id');
  70. $show->field('target_type')->as(function ($value) {
  71. if ($value === 'all') {
  72. return admin_trans_label('all_users');
  73. } elseif ($value === 'users') {
  74. return admin_trans_label('specified_users');
  75. }
  76. return $value;
  77. });
  78. //$show->field('target_ids');
  79. // $show->field('target_ids');
  80. // 获取 target_ids 并显示对应的 company_name
  81. $message = DistMessage::find($id);
  82. $targetIds = json_decode($message->target_ids, true);
  83. if ($targetIds) {
  84. $companyNames = DistAdminDistributor::getCompanyNamesByIds($targetIds);
  85. $show->field('target_ids')->as(function () use ($companyNames) {
  86. return implode(', ', $companyNames);
  87. });
  88. } else {
  89. // $show->field('target_ids', 'Target IDs')->as('No specified users');
  90. }
  91. $show->field('created_at');
  92. $show->field('updated_at');
  93. });
  94. }
  95. /**
  96. * Make a form builder.
  97. *
  98. * @return Form
  99. */
  100. protected function form()
  101. {
  102. //插入JS
  103. Admin::script(
  104. <<<JS
  105. $(document).ready(function() {
  106. var targetType = $('select[name="target_type"]');
  107. var targetIds = $('div.form-group.row.form-field:has(select[name="target_ids[]"])');
  108. // 初始化时根据 target_type 的值显示或隐藏 target_ids
  109. toggleTargetIds(targetType.val());
  110. // 监听 target_type 的变化
  111. targetType.change(function() {
  112. toggleTargetIds($(this).val());
  113. });
  114. function toggleTargetIds(value) {
  115. // alert(value);
  116. if (value === 'users') {
  117. targetIds.show();
  118. } else {
  119. targetIds.hide();
  120. }
  121. }
  122. });
  123. JS
  124. );
  125. return Form::make(new DistMessage(), function (Form $form) {
  126. $form->display('id')->rules('required');;
  127. $form->text('title',admin_trans_field('message_title'))->rules('required');;
  128. $form->textarea('content')->rules('required');;
  129. // $form->text('sender_id')->rules('required');
  130. // 检查当前操作是创建还是编辑
  131. if ($form->isEditing()) {
  132. // 如果是编辑操作,设置 target_type 为只读
  133. $form->select('target_type')->options([
  134. 'all' => admin_trans_label('all_users'),
  135. 'users' => admin_trans_label('specified_users'),
  136. ])->rules('required')->readonly();
  137. } else {
  138. // 如果是创建操作,正常显示 target_type
  139. $form->select('target_type')->options([
  140. 'all' => admin_trans_label('all_users'),
  141. 'users' => admin_trans_label('specified_users'),
  142. ])->rules('required');
  143. }
  144. $form->multipleSelect('target_ids')
  145. ->options(DistAdminDistributor::tags_all())
  146. ->saving(function ($value) {
  147. return $value;
  148. //dd($value);
  149. // 转化成json字符串保存到数据库
  150. //return json_encode($value);
  151. });
  152. $form->display('created_at');
  153. $form->display('updated_at');
  154. $form->disableViewCheck();
  155. $form->disableCreatingCheck();
  156. $form->disableEditingCheck();
  157. });
  158. }
  159. }