UserFeedbackController.php 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. <?php
  2. namespace plugin\saiadmin\app\controller\user;
  3. use plugin\saiadmin\app\logic\user\UserFeedbackLogic;
  4. use plugin\saiadmin\app\validate\user\UserFeedbackValidate;
  5. use plugin\saiadmin\basic\BaseController;
  6. use plugin\saiadmin\service\Permission;
  7. use support\Request;
  8. use support\Response;
  9. /** 用户反馈管理控制器。 */
  10. class UserFeedbackController extends BaseController
  11. {
  12. public function __construct()
  13. {
  14. $this->logic = new UserFeedbackLogic();
  15. $this->validate = new UserFeedbackValidate();
  16. parent::__construct();
  17. }
  18. #[Permission('用户反馈列表', 'core:user:feedback:index')]
  19. public function index(Request $request): Response
  20. {
  21. return $this->success($this->logic->indexList($this->filters($request)));
  22. }
  23. #[Permission('用户反馈详情', 'core:user:feedback:read')]
  24. public function read(Request $request): Response
  25. {
  26. return $this->success($this->logic->readFeedback((int) $request->input('id', 0)));
  27. }
  28. #[Permission('更新用户反馈状态', 'core:user:feedback:update')]
  29. public function update(Request $request): Response
  30. {
  31. $data = $this->body($request);
  32. $this->validate('status', $data);
  33. $this->logic->updateStatus($data, (int) $this->adminId, $this->operatorName());
  34. return $this->success('处理状态已更新');
  35. }
  36. #[Permission('回复用户反馈', 'core:user:feedback:reply')]
  37. public function reply(Request $request): Response
  38. {
  39. $data = $this->body($request);
  40. $this->validate('reply', $data);
  41. return $this->success(
  42. $this->logic->reply($data, (int) $this->adminId, $this->operatorName()),
  43. '回复成功'
  44. );
  45. }
  46. #[Permission('导出用户反馈', 'core:user:feedback:export')]
  47. public function export(Request $request): Response
  48. {
  49. return $this->logic->export($this->filters($request));
  50. }
  51. private function filters(Request $request): array
  52. {
  53. return $request->more([
  54. ['status', ''], ['type', ''], ['device_type', ''], ['phone', ''],
  55. ['merchant', ''], ['device_sn', ''], ['content', ''],
  56. ['start_date', ''], ['end_date', ''],
  57. ]);
  58. }
  59. private function body(Request $request): array
  60. {
  61. $data = $request->post();
  62. if ($data === []) {
  63. $json = json_decode($request->rawBody(), true);
  64. return is_array($json) ? $json : [];
  65. }
  66. return $data;
  67. }
  68. private function operatorName(): string
  69. {
  70. return (string) (($this->adminInfo['realname'] ?? '') ?: ($this->adminInfo['username'] ?? $this->adminName));
  71. }
  72. }