AdminController.php 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  1. <?php
  2. namespace App\Http\Controllers\Admin\Base;
  3. use App\Http\Controllers\Controller;
  4. use App\Repositories\Enums\Base\AdminTypeEnum;
  5. use App\Repositories\Models\Base\Admin;
  6. use App\Repositories\Models\Base\User;
  7. use App\Services\Base\AdminService;
  8. use Illuminate\Http\Request;
  9. /**
  10. * 管理员管理
  11. */
  12. class AdminController extends Controller
  13. {
  14. /**
  15. * @var AdminService
  16. */
  17. private $adminService;
  18. /**
  19. * AdminController constructor.
  20. *
  21. * @param AdminService $adminService
  22. */
  23. public function __construct(AdminService $adminService)
  24. {
  25. parent::__construct();
  26. // $this->middleware('checkUserPermission');
  27. $this->adminService = $adminService;
  28. }
  29. /**
  30. * 列表
  31. * @param Request $request
  32. *
  33. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  34. * @throws \Prettus\Repository\Exceptions\RepositoryException
  35. */
  36. public function index(Request $request)
  37. {
  38. $admins = $this->adminService->handleList($request);
  39. return $this->response->success($admins);
  40. }
  41. /**
  42. * 创建
  43. * @param Request $request
  44. *
  45. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  46. * @throws \Prettus\Validator\Exceptions\ValidatorException
  47. */
  48. public function store(Request $request)
  49. {
  50. $data = $this->validateData($request, [
  51. 'username' => [
  52. 'required',
  53. 'alpha_dash',
  54. function ($attribute, $value, $fail) use ($request) {
  55. if (Admin::checkUsernameIsUnique($value, $request->get('id'))) {
  56. $fail('账号 已存在');
  57. }
  58. },
  59. ],
  60. 'name' => 'required',
  61. 'mobile' => 'required|mobile',
  62. 'email' => 'nullable|sometimes|email',
  63. 'sex' => 'required|in:0,1,2',
  64. 'password' => 'required|confirmed|password_level',
  65. 'department_id' => 'required|integer',
  66. // 'job_id' => 'required|integer',
  67. // 'shop_id' => 'required|integer|numeric',
  68. 'role_ids' => 'required|array',
  69. // 'is_view_user_info' => 'required|integer',
  70. // 'role_id' => 'required|integer',
  71. 'status' => 'required|integer',
  72. 'extra_fields' => 'nullable|sometimes|array',
  73. ], [
  74. 'username' => '用户名',
  75. 'name' => '姓名',
  76. 'user_no' => '工号',
  77. 'mobile' => '手机号',
  78. 'email' => '邮箱',
  79. 'sex' => '性别',
  80. 'password' => '密码',
  81. 'department_id' => '部门',
  82. 'job_id' => '岗位',
  83. 'shop_id' => '门店id',
  84. 'role_ids' => '角色',
  85. 'company_id' => '归属公司',
  86. 'is_view_user_info' => '是否可以查看用户隐私数据',
  87. 'status' => '状态',
  88. 'extra_fields' => '额外字段',
  89. ]);
  90. $data['type'] = AdminTypeEnum::ADMIN;
  91. if (!in_array(AdminTypeEnum::ADMIN, $data['role_ids'])) {
  92. $data['type'] = AdminTypeEnum::USER;
  93. }
  94. $admin = $this->adminService->handleStore($data);
  95. return $this->response->created($admin, '创建成功');
  96. }
  97. /**
  98. * 详情
  99. * @param int $id
  100. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  101. */
  102. public function show(Request $request)
  103. {
  104. $this->validate($request, ['id' => 'required|integer']);
  105. $admin = $this->adminService->handleProfile($request->get('id'));
  106. return $this->response->success($admin);
  107. }
  108. /**
  109. * 修改
  110. * @param Request $request
  111. *
  112. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  113. * @throws \Prettus\Validator\Exceptions\ValidatorException
  114. */
  115. public function update(Request $request)
  116. {
  117. $data = $this->validateData($request, [
  118. 'username' => [
  119. 'required',
  120. 'alpha_dash',
  121. function ($attribute, $value, $fail) use ($request) {
  122. if (Admin::checkUsernameIsUnique($value, $request->get('id'))) {
  123. $fail('账号 已存在');
  124. }
  125. },
  126. ],
  127. 'name' => 'required',
  128. 'mobile' => 'required|mobile',
  129. 'email' => 'nullable|sometimes|email',
  130. 'sex' => 'required|in:0,1,2',
  131. 'department_id' => 'required|integer',
  132. // 'job_id' => 'required|integer',
  133. // 'shop_id' => 'nullable|sometimes',
  134. // 'shop_id' => 'required|integer',
  135. 'role_ids' => 'required|array',
  136. // 'is_view_user_info' => 'required|integer',
  137. // 'company_id' => 'required|integer',
  138. 'status' => 'required|integer',
  139. 'id' => 'required|integer',
  140. 'extra_fields' => 'nullable|sometimes|array',
  141. ], [
  142. 'username' => '用户名',
  143. 'name' => '姓名',
  144. 'mobile' => '手机号',
  145. 'email' => '邮箱',
  146. 'sex' => '性别',
  147. 'department_id' => '部门',
  148. 'shop_id' => '门店id',
  149. 'job_id' => '岗位',
  150. 'role_ids' => '角色',
  151. 'company_id' => '归属公司',
  152. 'is_view_user_info' => '是否可以查看用户隐私数据',
  153. 'status' => '状态',
  154. 'extra_fields' => '额外字段',
  155. ]);
  156. $data['type'] = AdminTypeEnum::ADMIN;
  157. if (!in_array(AdminTypeEnum::ADMIN, $data['role_ids'])) {
  158. $data['type'] = AdminTypeEnum::USER;
  159. }
  160. $admin = $this->adminService->handleUpdate($data);
  161. return $this->response->success($admin, '更新成功');
  162. }
  163. /**
  164. * 删除
  165. * @param int $id
  166. */
  167. public function destroy(Request $request)
  168. {
  169. $this->validate($request, ['id' => 'required|integer']);
  170. $re = $this->adminService->handleDelete($request->get('id'));
  171. if ($re) {
  172. return $this->response->ok('删除成功');
  173. }
  174. return $this->response->fail('删除失败');
  175. }
  176. /**
  177. * 批量删除
  178. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  179. */
  180. public function batchDelete(Request $request)
  181. {
  182. $this->validate($request, ['ids' => 'required|array']);
  183. $re = $this->adminService->handleBatchDelete($request->get('ids'));
  184. if ($re) {
  185. return $this->response->ok('删除成功');
  186. }
  187. return $this->response->fail('删除失败');
  188. }
  189. /**
  190. * 重置密码
  191. * @param Request $request
  192. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  193. * @throws \Illuminate\Validation\ValidationException
  194. * @throws \Prettus\Validator\Exceptions\ValidatorException
  195. */
  196. public function resetPassword(Request $request)
  197. {
  198. $this->validate($request, ['id' => 'required|integer', 'password' => 'required|min:6'], [], [
  199. 'password' => '密码',
  200. ]);
  201. $this->adminService->handleResetPassword($request);
  202. return $this->response->ok('重置成功');
  203. }
  204. /**
  205. * 管理员选项
  206. * @must
  207. * @param Request $request
  208. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  209. * @throws \Prettus\Repository\Exceptions\RepositoryException
  210. */
  211. public function selectOptions(Request $request)
  212. {
  213. $admins = $this->adminService->handleSelectOptions($request);
  214. return $this->response->success($admins);
  215. }
  216. /**
  217. * 批量修改状态
  218. * @param Request $request
  219. * @return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource
  220. * @throws \Illuminate\Validation\ValidationException
  221. */
  222. public function batchUpdateStatus(Request $request)
  223. {
  224. $data = $this->validateData($request, [
  225. 'ids' => 'required|array',
  226. 'status' => 'required|integer',
  227. 'remark' => 'nullable'
  228. ], [
  229. 'ids' => 'ids',
  230. 'status' => '状态',
  231. 'remark' => '备注'
  232. ]);
  233. Admin::query()->whereIn('id', $data['ids'])->update([
  234. 'status' => $data['status'],
  235. 'remark' => $data['remark'],
  236. ]);
  237. return $this->response->ok('操作成功');
  238. }
  239. }