海南旅游SAAS
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

127 lines
3.5 KiB

4 years ago
  1. <?php
  2. namespace App\AdminAgent\Controllers;
  3. use App\AdminAgent\Renderable\SelectUser;
  4. use App\AdminAgent\Repositories\Message;
  5. use App\Models\User;
  6. use Dcat\Admin\Admin;
  7. use Dcat\Admin\Form;
  8. use Dcat\Admin\Grid;
  9. use Dcat\Admin\Show;
  10. use Dcat\Admin\Http\Controllers\AdminController;
  11. class MessageController extends AdminController
  12. {
  13. /**
  14. * Make a grid builder.
  15. *
  16. * @return Grid
  17. */
  18. protected function grid()
  19. {
  20. return Grid::make(new Message(), function (Grid $grid) {
  21. $grid->model()->where('agent_id', Admin::user()->id);
  22. $grid->column('id')->sortable();
  23. $grid->column('user_id');
  24. $grid->column('title');
  25. $grid->column('is_read')->if(fn($v) => $this->user_id != 0)->bool()->else()->display('所有人接收');
  26. $grid->column('created_at');
  27. $grid->filter(function (Grid\Filter $filter) {
  28. $filter->panel();
  29. $filter->model()->where('agent_id', Admin::user()->id);
  30. $filter->equal('id');
  31. $filter->like('title');
  32. });
  33. });
  34. }
  35. /**
  36. * Make a show builder.
  37. *
  38. * @param mixed $id
  39. *
  40. * @return Show
  41. */
  42. protected function detail($id)
  43. {
  44. return Show::make($id, new Message(), function (Show $show) {
  45. //不允许查看非自己的数据
  46. if ($show->model()->agent_id != Admin::user()->id) {
  47. Admin::exit('数据不存在');
  48. }
  49. $show->field('id');
  50. $show->field('user_id');
  51. $show->field('title');
  52. $show->field('content')->unescape();
  53. $show->field('is_read')
  54. ->as(function () {
  55. if ($this->user_id) {
  56. return $this->is_read ? '已读' : '未读';
  57. }
  58. return '所有人接收';
  59. });
  60. $show->field('created_at');
  61. });
  62. }
  63. /**
  64. * Make a form builder.
  65. *
  66. * @return Form
  67. */
  68. protected function form()
  69. {
  70. return Form::make(new Message(), function (Form $form) {
  71. //不允许查看非自己的数据
  72. if ($form->isEditing() && $form->model()->agent_id != Admin::user()->id) {
  73. return $form->response()->error('数据不存在');
  74. }
  75. $form->display('id');
  76. $form->selectTable('user_id')
  77. ->from(new SelectUser())
  78. ->model(User::class, 'id', 'nickname')
  79. ->default(0)
  80. ->help('不选择则表示所有人都收到消息');
  81. $form->text('title')->required();
  82. $form->editor('content');
  83. if ($form->isCreating()) {
  84. $form->confirm('发布确认', '为了保证消费者利益,所有人接收的消息发布后禁止编辑,确定发布?');
  85. }
  86. })->saving(function (Form $form) {
  87. //不允许修改非自己的数据
  88. if ($form->isEditing() && $form->model()->agent_id != Admin::user()->id) {
  89. return $form->response()->error('数据不存在');
  90. }
  91. //消息已读后禁止编辑
  92. if ($form->isEditing()) {
  93. if ($form->model()->user_id == 0) {
  94. return $form->response()->error('为了保证消费者利益,所有人接收的消息禁止编辑');
  95. }
  96. if ($form->model()->is_read) {
  97. return $form->response()->error('消息已读,禁止修改');
  98. }
  99. }
  100. //特殊字段处理
  101. $form->hidden(['agent_id']);
  102. $form->agent_id = Admin::user()->id;
  103. $form->user_id = $form->user_id ?? 0;
  104. //不允许编辑的字段
  105. $form->ignore(['id', 'status', 'created_at', 'updated_at', 'deleted_at']);
  106. })->deleting(function (Form $form) {
  107. //不允许删除非自己的数据
  108. if ($form->model()[0]['agent_id'] != Admin::user()->id) {
  109. return $form->response()->error('数据不存在');
  110. }
  111. });
  112. }
  113. }