DistMessageController.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  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. /**
  14. * page index
  15. */
  16. public function index(Content $content)
  17. {
  18. return $content
  19. ->header('列表')
  20. ->description('全部')
  21. ->breadcrumb(['text'=>'列表','url'=>''])
  22. ->body($this->grid());
  23. }
  24. /**
  25. * Make a grid builder.
  26. *
  27. * @return Grid
  28. */
  29. protected function grid()
  30. {
  31. return Grid::make(new DistMessage(), function (Grid $grid) {
  32. $grid->column('id')->sortable();
  33. $grid->column('title', 'message Title');
  34. $grid->column('content');
  35. $grid->column('sender_id');
  36. $grid->column('target_type');
  37. //$grid->column('target_ids');
  38. $grid->column('created_at');
  39. $grid->column('updated_at')->sortable();
  40. $grid->filter(function (Grid\Filter $filter) {
  41. $filter->equal('id');
  42. });
  43. });
  44. }
  45. /**
  46. * Make a show builder.
  47. *
  48. * @param mixed $id
  49. *
  50. * @return Show
  51. */
  52. protected function detail($id)
  53. {
  54. return Show::make($id, new DistMessage(), function (Show $show) use ($id) {
  55. $show->field('id');
  56. $show->field('title');
  57. $show->field('content');
  58. $show->field('sender_id');
  59. $show->field('target_type');
  60. //$show->field('target_ids');
  61. // $show->field('target_ids');
  62. // 获取 target_ids 并显示对应的 company_name
  63. $message = DistMessage::find($id);
  64. $targetIds = json_decode($message->target_ids, true);
  65. if ($targetIds) {
  66. $companyNames = DistAdminDistributor::getCompanyNamesByIds($targetIds);
  67. $show->field('target_ids')->as(function () use ($companyNames) {
  68. return implode(', ', $companyNames);
  69. });
  70. } else {
  71. // $show->field('target_ids', 'Target IDs')->as('No specified users');
  72. }
  73. $show->field('created_at');
  74. $show->field('updated_at');
  75. });
  76. }
  77. /**
  78. * Make a form builder.
  79. *
  80. * @return Form
  81. */
  82. protected function form()
  83. {
  84. //插入JS
  85. Admin::script(
  86. <<<JS
  87. $(document).ready(function() {
  88. var targetType = $('select[name="target_type"]');
  89. var targetIds = $('div.form-group.row.form-field:has(select[name="target_ids[]"])');
  90. // 初始化时根据 target_type 的值显示或隐藏 target_ids
  91. toggleTargetIds(targetType.val());
  92. // 监听 target_type 的变化
  93. targetType.change(function() {
  94. toggleTargetIds($(this).val());
  95. });
  96. function toggleTargetIds(value) {
  97. // alert(value);
  98. if (value === 'users') {
  99. targetIds.show();
  100. } else {
  101. targetIds.hide();
  102. }
  103. }
  104. });
  105. JS
  106. );
  107. return Form::make(new DistMessage(), function (Form $form) {
  108. $form->display('id')->rules('required');;
  109. $form->text('title')->rules('required');;
  110. $form->textarea('content')->rules('required');;
  111. // $form->text('sender_id')->rules('required');
  112. // 检查当前操作是创建还是编辑
  113. if ($form->isEditing()) {
  114. // 如果是编辑操作,设置 target_type 为只读
  115. $form->select('target_type')->options([
  116. 'all' => 'all Users',
  117. 'users' => 'specified Users',
  118. ])->rules('required')->readonly();
  119. } else {
  120. // 如果是创建操作,正常显示 target_type
  121. $form->select('target_type')->options([
  122. 'all' => 'all Users',
  123. 'users' => 'specified Users',
  124. ])->rules('required');
  125. }
  126. $form->multipleSelect('target_ids')
  127. ->options(DistAdminDistributor::tags_all())
  128. ->saving(function ($value) {
  129. // 转化成json字符串保存到数据库
  130. return json_encode($value);
  131. });
  132. $form->display('created_at');
  133. $form->display('updated_at');
  134. });
  135. }
  136. }