AdminUser.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. <?php
  2. namespace App\Http\Controllers\Manager;
  3. use App\Http\Requests\Manager\AdminUser as Request;
  4. use App\Models\Manager\AdminUser as Model;
  5. use App\Models\Manager\AuthGroupAccess;
  6. use App\Models\Manager\AuthGroup;
  7. /**
  8. * 系统用户
  9. * @author 唐远望
  10. * @version 1.0
  11. * @date 2025-12-02
  12. *
  13. */
  14. class AdminUser extends Manager
  15. {
  16. /**
  17. * 列表页
  18. *
  19. * */
  20. public function get_list(Model $Model, AuthGroupAccess $AuthGroupAccess)
  21. {
  22. // 接收参数
  23. $phone = request('phone', '');
  24. $username = request('username', '');
  25. $status = request('status');
  26. $limit = request('limit', config('page_num', 10));
  27. // 查询数据
  28. $map = [];
  29. // 组合条件
  30. if ($phone) $map[] = ['phone', '=', $phone];
  31. if ($username) $map[] = ['username', '=', $username];
  32. if (!is_null($status)) $map[] = ['status', '=', $status];
  33. // 查询系统用户
  34. $Paginator = $Model->query()->where($map)->orderByDesc('uid')->paginate($limit, ['uid', 'username', 'phone', 'status', 'insert_time', 'update_time']);
  35. // 循环处理
  36. foreach ($Paginator as $key => $value) {
  37. // 切成字符串
  38. $value['group'] = $AuthGroupAccess->getGroupByUid($value['uid']);
  39. // 重组
  40. $Paginator[$key] = $value;
  41. }
  42. // 获取数据
  43. $data['total'] = $Paginator->total();
  44. $data['current_page'] = $Paginator->currentPage();
  45. $data['per_page'] = (int)$Paginator->perPage();
  46. $data['last_page'] = $Paginator->lastPage();
  47. $data['data'] = $Paginator->items();
  48. // 告知结果
  49. return json_send(['code' => 'success', 'msg' => '获取成功', 'data' => $data]);
  50. }
  51. /**
  52. * 添加
  53. * @author 唐远望
  54. * @version 1.0
  55. * @date 2025-12-02
  56. * */
  57. public function add(Request $request, Model $Model, AuthGroupAccess $AuthGroupAccess, AuthGroup $AuthGroup)
  58. {
  59. if (request()->isMethod('post')) {
  60. // 验证参数
  61. $request->scene('add')->validate();
  62. // 接收数据
  63. $data['username'] = request('username', '');
  64. $data['phone'] = request('phone', '');
  65. $data['password'] = request('password', '');
  66. $data['password'] = md5($data['password']);
  67. $groups = (array) request('groups', []);
  68. //校验手机号码是否存在
  69. $phone_exist = $Model->query()->where('phone', $data['phone'])->first();
  70. if ($phone_exist) {
  71. return json_send(['code' => 'error', 'msg' => '手机号码已存在']);
  72. }
  73. // 写入数据表
  74. $uid = $Model->add($data);
  75. // 如果操作失败
  76. if (!$uid) return json_send(['code' => 'error', 'msg' => '新增失败']);
  77. // 权限组
  78. $access = [];
  79. // 循环数据
  80. foreach ($groups as $group_id) {
  81. // 追加数据
  82. $access[] = ['group_id' => $group_id, 'user_uid' => $uid];
  83. }
  84. // 写入用户权限组
  85. $result = $AuthGroupAccess->query()->insert($access);
  86. // 如果操作失败
  87. if (!$result) {
  88. // 告知错误
  89. return json_send(['code' => 'error', 'msg' => '权限分配失败']);
  90. }
  91. }
  92. // 查询用户组
  93. $group = $AuthGroup->query()->where(['status' => 0])->select(['id', 'name'])->get()->toArray();
  94. // 错误告知
  95. if (!$group) json_send(['code' => 'error', 'msg' => '请先添加用户组']);
  96. // 告知结果
  97. return json_send(['code' => 'success', 'msg' => '新增成功', 'data' => ['group' => $group]]);
  98. }
  99. /**
  100. * 查看
  101. * @author 唐远望
  102. * @version 1.0
  103. * @date 2025-12-02
  104. * */
  105. public function get_detail(Request $request, Model $Model)
  106. {
  107. // 验证参数
  108. $request->scene('get_detail')->validate();
  109. // 接收参数
  110. $id = request('uid', 0);
  111. // 查询数据
  112. $oldData = $Model->getOne($id);
  113. // 未查询到对应的数据
  114. if (!$oldData) return json_send(['code' => 'error', 'msg' => '未查询到对应的数据']);
  115. // 隐私规范,删除密码
  116. unset($oldData['password']);
  117. // 结果
  118. return json_send(['code' => 'success', 'msg' => '获取成功', 'data' => $oldData]);
  119. }
  120. /**
  121. * 编辑
  122. * @author 唐远望
  123. * @version 1.0
  124. * @date 2025-12-02
  125. * */
  126. public function edit(Request $request, Model $Model, AuthGroupAccess $AuthGroupAccess, AuthGroup $AuthGroup)
  127. {
  128. // 接收参数
  129. $id = request('uid', 0);
  130. // 如果账号是超管
  131. if (is_super($id, 'manager')) {
  132. // 当前登录的账号不是超管
  133. if (!is_super(request('access_token.uid', 0), 'manager')) return json_send(['code' => 'error', 'msg' => '您没有权限修改该超管账号的信息']);
  134. }
  135. // 查询数据
  136. $oldData = $Model->getOne($id);
  137. // 未查询到对应的数据
  138. if (!$oldData) return json_send(['code' => 'error', 'msg' => '未查询到对应的数据']);
  139. if (request()->isMethod('post')) {
  140. // 验证参数
  141. $request->scene('edit')->validate();
  142. // 接收数据
  143. $data['username'] = request('username', '');
  144. $data['phone'] = request('phone', '');
  145. $password = request('password', '');
  146. if ($password) $data['password'] = md5($password);
  147. $groups = (array) request('groups', []);
  148. //校验手机号码是否存在
  149. $phone_exist = $Model->query()->where('phone', $data['phone'])->where('uid', '!=', $id)->first();
  150. if ($phone_exist) {
  151. return json_send(['code' => 'error', 'msg' => '手机号码已存在']);
  152. }
  153. // 写入数据表
  154. $uid = $Model->edit($id, $data);
  155. // 如果操作失败
  156. if (!$uid) return json_send(['code' => 'error', 'msg' => '编辑失败']);
  157. // 清空权限组
  158. $AuthGroupAccess->query()->where([['admin_uid', '=', $id]])->delete();
  159. // 权限组
  160. $access = [];
  161. // 循环数据
  162. foreach ($groups as $group_id) {
  163. // 追加数据
  164. $access[] = ['group_id' => $group_id, 'admin_uid' => $id];
  165. }
  166. // 写入用户权限组
  167. $result = $AuthGroupAccess->query()->insert($access);
  168. // 如果操作失败
  169. if (!$result) {
  170. // 告知错误
  171. return json_send(['code' => 'error', 'msg' => '权限分配失败']);
  172. }
  173. }
  174. // 查询用户的用户组
  175. $oldData['group'] = $AuthGroupAccess->query()->where([['group_id', '=', $id]])->pluck('group_id')->toArray();
  176. // 查询用户组
  177. $group = $AuthGroup->query()->where(['status' => 0])->select(['id', 'name'])->get()->toArray();
  178. // 错误告知
  179. if (!$group) json_send(['code' => 'error', 'msg' => '请先添加用户组']);
  180. // 告知结果
  181. return json_send(['code' => 'success', 'msg' => '编辑成功', 'data' => ['group' => $group, 'oldData' => $oldData]]);
  182. }
  183. /**
  184. * 修改状态
  185. * @author 唐远望
  186. * @version 1.0
  187. * @date 2025-12-02
  188. * */
  189. public function set_status(Request $request, Model $Model)
  190. {
  191. // 验证参数
  192. $request->scene('set_status')->validate();
  193. // 设置状态
  194. $id = request('uid', 0);
  195. $status = request('status', 0);
  196. // 如果账号是超管
  197. if (is_super($id, 'manager')) {
  198. // 当前登录的账号不是超管
  199. if (!is_super(request('access_token.uid', 0), 'manager')) return json_send(['code' => 'error', 'msg' => '您没有权限修改该超管账号的状态']);
  200. }
  201. // 查询用户
  202. $oldData = $Model->getOne($id);
  203. // 如果用户不存在
  204. if (!$oldData) return json_send(['code' => 'error', 'msg' => '用户不存在']);
  205. // 执行修改
  206. $result = $Model->edit($id, ['status' => $status]);
  207. // 提示新增失败
  208. if (!$result) return json_send(['code' => 'error', 'msg' => '设置失败']);
  209. // 告知结果
  210. return json_send(['code' => 'success', 'msg' => '设置成功', 'data' => ['uid' => $id]]);
  211. }
  212. /**
  213. * 修改密码
  214. * @author 唐远望
  215. * @version 1.0
  216. * @date 2025-12-02
  217. */
  218. public function alter_password(Request $request, Model $Model)
  219. {
  220. // 验证参数
  221. $request->scene('alter_password')->validate();
  222. // 获取参数
  223. $uid = request('access_token.uid', 0);
  224. $oldpass = request('oldpass', '');
  225. $password = request('password', '');
  226. // 查询用户
  227. $oldData = $Model->getOne($uid);
  228. // 如果用户不存在
  229. if (!$oldData) return json_send(['code' => 'error', 'msg' => '用户不存在']);
  230. // 比对密码
  231. if (md5($oldpass) != $oldData['password']) return json_send(['code' => 'error', 'msg' => '原密码有误,请核对密码']);
  232. // 执行修改
  233. $result = $Model->edit($uid, ['password' => md5($password)]);
  234. // 提示新增失败
  235. if (!$result) return json_send(['code' => 'error', 'msg' => '修改失败']);
  236. // 退出登录
  237. $Model->LoginOut($uid, 'manager');
  238. // 告知结果
  239. return json_send(['code' => 'success', 'msg' => '修改成功', 'data' => ['uid' => $uid]]);
  240. }
  241. }