WechatMiniProgramController.php 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | saiadmin [ saiadmin快速开发框架 ]
  4. // +----------------------------------------------------------------------
  5. namespace plugin\saiadmin\app\controller\miniProgram;
  6. use plugin\saiadmin\app\logic\miniProgram\WechatMiniProgramLogic;
  7. use plugin\saiadmin\app\validate\miniProgram\WechatMiniProgramValidate;
  8. use plugin\saiadmin\basic\BaseController;
  9. use plugin\saiadmin\exception\ApiException;
  10. use plugin\saiadmin\service\Permission;
  11. use support\Request;
  12. use support\Response;
  13. /**
  14. * 微信小程序绑定控制器
  15. */
  16. class WechatMiniProgramController extends BaseController
  17. {
  18. private const LIST_FIELDS = [
  19. 'id',
  20. 'partner_nickname',
  21. 'partner_account',
  22. 'partner_name',
  23. 'mini_program_name',
  24. 'appid',
  25. 'create_time',
  26. 'update_time',
  27. ];
  28. public function __construct()
  29. {
  30. $this->logic = new WechatMiniProgramLogic();
  31. $this->validate = new WechatMiniProgramValidate();
  32. parent::__construct();
  33. }
  34. #[Permission('微信小程序列表', 'core:miniProgram:wechat:index')]
  35. public function index(Request $request): Response
  36. {
  37. $where = $request->more([
  38. ['mini_program_name', ''],
  39. ['appid', ''],
  40. ['partner_account', ''],
  41. ]);
  42. $query = $this->logic->search($where)->field(self::LIST_FIELDS);
  43. if (!$this->isSuperAdmin()) {
  44. $query->where('partner_id', '=', $this->adminId);
  45. }
  46. $data = $this->logic->getList($query);
  47. return $this->success($data);
  48. }
  49. #[Permission('微信小程序详情', 'core:miniProgram:wechat:read')]
  50. public function read(Request $request): Response
  51. {
  52. $id = (int) $request->input('id', 0);
  53. if ($id <= 0) {
  54. return $this->fail('参数错误');
  55. }
  56. return $this->success($this->readAccessibleRecord($id));
  57. }
  58. #[Permission('绑定微信小程序', 'core:miniProgram:wechat:save')]
  59. public function save(Request $request): Response
  60. {
  61. $data = $request->post();
  62. $this->validate('save', $data);
  63. $username = (string) ($this->adminInfo['username'] ?? '');
  64. $realname = (string) ($this->adminInfo['realname'] ?? '');
  65. $phone = (string) ($this->adminInfo['phone'] ?? '');
  66. $data['partner_id'] = $this->adminId;
  67. $data['partner_nickname'] = $realname !== '' ? $realname : $username;
  68. $data['partner_account'] = $phone !== '' ? $phone : $username;
  69. $data['partner_name'] = $realname !== '' ? $realname : $username;
  70. $id = $this->logic->add($data);
  71. return $id ? $this->success(['id' => $id], '绑定成功') : $this->fail('绑定失败');
  72. }
  73. #[Permission('编辑微信小程序', 'core:miniProgram:wechat:update')]
  74. public function update(Request $request): Response
  75. {
  76. $data = $request->post();
  77. $id = (int) ($data['id'] ?? 0);
  78. if ($id <= 0) {
  79. return $this->fail('参数错误');
  80. }
  81. $this->readAccessibleRecord($id);
  82. $this->validate('update', $data);
  83. $result = $this->logic->edit($id, $data);
  84. return $result !== false ? $this->success('修改成功') : $this->fail('修改失败');
  85. }
  86. #[Permission('删除微信小程序', 'core:miniProgram:wechat:destroy')]
  87. public function destroy(Request $request): Response
  88. {
  89. $ids = array_values(array_filter(array_map('intval', (array) $request->post('ids', []))));
  90. if ($ids === []) {
  91. return $this->fail('请选择要删除的数据');
  92. }
  93. foreach ($ids as $id) {
  94. $this->readAccessibleRecord($id);
  95. }
  96. return $this->logic->destroy($ids) ? $this->success('删除成功') : $this->fail('删除失败');
  97. }
  98. private function readAccessibleRecord(int $id): array
  99. {
  100. $model = $this->logic->read($id);
  101. $data = is_array($model) ? $model : $model->toArray();
  102. if (!$this->isSuperAdmin() && (int) ($data['partner_id'] ?? 0) !== $this->adminId) {
  103. throw new ApiException('无权访问该小程序配置');
  104. }
  105. return $data;
  106. }
  107. private function isSuperAdmin(): bool
  108. {
  109. return (int) ($this->adminInfo['is_super'] ?? 0) === 1;
  110. }
  111. }