FeedbackController.php 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. <?php
  2. namespace App\Admin\Controllers;
  3. use App\Admin\Models\Feedback;
  4. use App\Admin\Models\Tag;
  5. use Encore\Admin\Controllers\AdminController;
  6. use Encore\Admin\Form;
  7. use Encore\Admin\Grid;
  8. use Encore\Admin\Show;
  9. use App\Admin\Selectable\SelectFeedback;
  10. use App\Admin\Selectable\SeleteTag;
  11. use Illuminate\Support\Facades\Auth;
  12. use App\Admin\Actions\Post\StatusEdit;
  13. use App\Admin\Actions\Post\Msg;
  14. use App\Admin\Actions\Post\BatchStatus;
  15. use App\Admin\Actions\Post\BatchMsg;
  16. use Encore\Admin\Auth\Permission;
  17. // use Encore\Admin\Auth\Admin;
  18. class FeedbackController extends AdminController
  19. {
  20. /**
  21. * Title for current resource.
  22. *
  23. * @var string
  24. */
  25. protected $title = 'Feedback';
  26. /**
  27. * Make a grid builder.
  28. *
  29. * @return Grid
  30. */
  31. protected function grid()
  32. {
  33. $grid = new Grid(new Feedback());
  34. $grid->column('id', __('Id'))->sortable();
  35. $grid->column('content', __('问题内容'));
  36. $grid->column('handler', __('提交人'));
  37. $grid->column('mobile', __('用户电话'));
  38. $grid->column('create_time', __('提交时间'));
  39. $grid->tags('问题标签')->display(function ($tags) {
  40. $res = array_map(function ($tag) {
  41. return "<span class='label label-success'>{$tag['name']}</span>";
  42. }, $tags);
  43. return join(' ', $res);
  44. });
  45. $grid->actions(function ($actions) {
  46. // 去掉删除操作
  47. $actions->disableDelete();
  48. });
  49. // 去掉批量删除
  50. $grid->batchActions(function ($batch) {
  51. $batch->disableDelete();
  52. });
  53. if (!Auth::guard('admin')->user()->can('status-edit')) {
  54. // 去除所有操作
  55. $grid->disableActions();
  56. // 标签式状态
  57. // $grid->column('status')->label(['0' => 'warning', '1' => 'success']);
  58. $grid->status(trans('状态'))->display(function ($status) {
  59. if ($status == 0) {
  60. return "<span class='label bg-red'>未读</span>";
  61. } else if ($status == 1) {
  62. return "<span class='label bg-green'>已读</span>";
  63. }
  64. });
  65. $grid->column('msg', __('回复内容'));
  66. }else{
  67. // 开关式状态
  68. $states = [
  69. 'off' => ['value' => 0, 'text' => '未读', 'color' => 'primary'],
  70. 'on' => ['value' => 1, 'text' => '已读', 'color' => 'success'],
  71. ];
  72. $grid->column('status', __('状态'))->switch($states);
  73. // 可行内编辑回复内容
  74. $grid->column('msg', __('回复内容'))->editable('textarea');
  75. // 自定义操作 修改状态
  76. $grid->actions(function ($actions) {
  77. // 添加修改状态操作
  78. $actions->add(new StatusEdit);
  79. // 添加回复操作
  80. $actions->add(new Msg);
  81. });
  82. // 添加批量操作 修改状态
  83. $grid->batchActions(function ($batch) {
  84. $batch->add(new BatchStatus);
  85. });
  86. // $grid->tools(function (Grid\Tools $tools) {
  87. // $tools->append(new BatchStatus);
  88. // });
  89. // 添加批量操作 回复
  90. $grid->batchActions(function ($batch) {
  91. $batch->add(new BatchMsg);
  92. });
  93. // $grid->tools(function (Grid\Tools $tools) {
  94. // $tools->append(new BatchMsg);
  95. // });
  96. }
  97. return $grid;
  98. }
  99. /**
  100. * Make a show builder.
  101. * 显示标签、状态??
  102. * @param mixed $id
  103. * @return Show
  104. */
  105. protected function detail($id)
  106. {
  107. $show = new Show(Feedback::findOrFail($id));
  108. // $show->field('id', __('Id'));
  109. $show->field('content', __('问题内容'));
  110. $show->field('handler', __('提交人'));
  111. $show->field('mobile', __('用户电话'));
  112. $show->field('create_time', __('提交时间'));
  113. $show->tag('tags')->label();
  114. $show->field('status')->as(function ($status) {
  115. if ($status == 1) {
  116. return "<span class='label label-success'>已读</span>";
  117. } else {
  118. return "<span class='label label-false'>未读</span>";
  119. }
  120. });
  121. // $show->tags('tags')->label(function ($tags) {
  122. // $res = array_map(function ($tag) {
  123. // return "<span class='label label-success'>{$tag['name']}</span>";
  124. // }, $tags);
  125. // return join(' ', $res);
  126. // });
  127. // $show->field('tags', __('问题标签'));
  128. // $show->field('status', __('状态'))->using([0 => '未读', 1 => '已读'])->label();
  129. $show->field('msg', __('回复'));
  130. return $show;
  131. }
  132. /**
  133. * Make a form builder.
  134. *
  135. * @return Form
  136. */
  137. protected function form()
  138. {
  139. $form = new Form(new Feedback());
  140. // $form->text('tag', 'ceshi');
  141. // $tagForm = new Form(new Tag());
  142. // $grid->column('id', __('Id'));
  143. if ($form->isCreating()) {
  144. $user = Auth::guard('admin')->user(); //当前登录用户对象
  145. $form->text('content', __('问题内容'))->required();
  146. $form->hidden('handler', __('提交人'))->value($user->username);
  147. $form->text('num', __('车辆号/订单号'));
  148. $form->mobile('mobile', '用户电话')->required();
  149. $form->hidden('create_time', __('提交时间'))->value(date('Y-m-d H:i:s'));
  150. // 新增标签保存
  151. $form->tags('tags', __('问题标签'))->pluck('name', 'id')->options(Tag::all())->saving(function ($value) {
  152. foreach ($value as $key => $v) {
  153. // 判断是否为字符串型整数 否新增 数字但tag表无相关数据 新增
  154. if (!ctype_digit($v) || (ctype_digit($v) && !Tag::find($v))) {
  155. $value[$key] = Tag::insertGetId(['name' => $v]);
  156. }
  157. }
  158. return $value;
  159. });
  160. $form->hidden('status', __('状态'))->value(0);
  161. }
  162. if ($form->isEditing()) {
  163. $form->text('content', __('问题内容'))->readonly();
  164. $form->text('handler', __('提交人'))->readonly();
  165. $form->text('num', __('车辆号/订单号'))->readonly();
  166. $form->mobile('mobile', __('用户电话'))->readonly();
  167. $form->datetime('create_time', __('提交时间'))->readonly();
  168. // 新增标签保存
  169. $form->tags('tags', __('问题标签'))->pluck('name', 'id')->options(Tag::all())->saving(function ($value) {
  170. foreach ($value as $key => $v) {
  171. // 判断是否为字符串型整数 否新增 数字但tag表无相关数据 新增
  172. if (!ctype_digit($v) || (ctype_digit($v) && !Tag::find($v))) {
  173. $value[$key] = Tag::insertGetId(['name' => $v]);
  174. }
  175. }
  176. return $value;
  177. });
  178. $states = [
  179. 'on' => ['value' => 1, 'text' => '已读', 'color' => 'success'],
  180. 'off' => ['value' => 0, 'text' => '未读', 'color' => 'danger'],
  181. ];
  182. $form->switch('status', __('状态'))->states($states);
  183. $form->textarea('msg', __('回复内容'))->value(function ($value) {
  184. dd($value);
  185. if ($value) {
  186. $form->hidden('status', __('状态'))->value(1);
  187. }
  188. });
  189. }
  190. $form->tools(function (Form\Tools $tools) {
  191. // 去掉`列表`按钮
  192. // $tools->disableList();
  193. // 去掉`删除`按钮
  194. $tools->disableDelete();
  195. // 去掉`查看`按钮
  196. $tools->disableView();
  197. });
  198. $form->footer(function ($footer) {
  199. // 去掉`重置`按钮
  200. $footer->disableReset();
  201. // 去掉`提交`按钮
  202. // $footer->disableSubmit();
  203. // 去掉`查看`checkbox
  204. $footer->disableViewCheck();
  205. // 去掉`继续编辑`checkbox
  206. $footer->disableEditingCheck();
  207. // 去掉`继续创建`checkbox
  208. $footer->disableCreatingCheck();
  209. // 添加一个按钮, 参数可以是字符串, 或者实现了Renderable或Htmlable接口的对象实例
  210. // $footer->add('<a class="btn btn-sm btn-danger">标记为已读</a>');
  211. });
  212. return $form;
  213. }
  214. }