getJsonData(); // 针对layui table自动分页请求参数,优先GET值. $queryPage = request()->has('page') ? request()->input('page', 1) : null; $queryPageSize = request()->has('page_size') ? request()->input('page_size', 10) : null; if (!is_null($queryPage)) { $inputData['page'] = $queryPage; } if (!is_null($queryPageSize)) { $inputData['page_size'] = $queryPageSize; } $rules = [ 'page' => 'nullable|integer', 'page_size' => 'nullable|integer', 'manager_uid' => 'nullable', 'username' => 'nullable', 'nick' => 'nullable', 'is_locked' => 'nullable|integer', 'role_id' => 'nullable|integer', 'email' => 'nullable|email', ]; $validator = $validatorFactory->make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } $orders = [ ['created_at', 'DESC'], ]; $pageSize = $inputData['page_size'] ?? CommonConstant::PAGE_SIZE; if ($pageSize > 500) { $pageSize = CommonConstant::PAGE_SIZE; } $page = format_page($inputData['page'] ?? 0); // 注意,单例分页一定要克隆一个(保证前面没用使用到paginate); $managers = $managerRepo->pushCriteria(new ManagerPagesCriteria($inputData))->pushCriteria(new OrderLimitCriteria($orders))->paginate($pageSize, ['*'], $page); return new ManagerPagesResponse($managers); } public function checkUsername() { $inputData = $this->getJsonData(); $rules = [ 'username' => 'unique:manager,username|required|max:16', ]; $message = [ 'username.unique' => '账号已存在!', 'username.required' => '用户名不能为空!', 'username.max' => '用户名不能大于16字节!' ]; $validator = Validator::make($inputData,$rules,$message); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } return json_fail('用户名可用!',200,[]); } /** * 详情 * @return mixed */ public function detail() { /** * @var Validator $validatorFactory */ $validatorFactory = app('validator'); /** * @var ManagerRepository $managerRepo */ $managerRepo = app(ManagerRepository::class); $inputData = $this->getJsonData(); $rules = [ 'manager_uid' => 'required|string', ]; $validator = $validatorFactory->make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } $manager = $managerRepo->pushCriteria(new CommonWithCriteria(['role']))->findBy('manager_uid', $inputData['manager_uid']); return new ManagerDetailResponse($manager); } /** * 添加. * @return mixed|CommonSuccessUidResponse */ public function add() { /** * @var Validator $validatorFactory */ $validatorFactory = app('validator'); /** * @var ManagerRepository $managerRepo */ $managerRepo = app(ManagerRepository::class); /** * @var PermissionRoleRepository $permissionRoleRepository */ $permissionRoleRepository = make(PermissionRoleRepository::class); $inputData = $this->getJsonData(); $rules = [ 'username' => 'required|min:2|max:60', 'nick' => 'required|max:60', 'role_id' => 'required|integer', 'password' => 'required|min:6|max:64', 'email' => 'nullable|max:120', 'otp_secret' => 'nullable|max:32', ]; $validator = $validatorFactory->make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } $username = strtolower(trim($inputData['username'])); if ($managerRepo->isExistsUsername($username)) { return json_fail('用户名已经存在'); } $roleId = intval($inputData['role_id']); $roleName = ''; $roleObj = $permissionRoleRepository->find($roleId); if (!empty($roleObj)) { $roleName = $roleObj->name; } $setarr = [ 'username' => $username, 'nick' => trim($inputData['nick']), 'role_id' => intval($roleId), 'role_name' => $roleName, 'otp_secret' => isset($inputData['otp_secret']) ? trim($inputData['otp_secret']) : GoogleAuthenticator::generateRandom(), ]; if (isset($inputData['email'])) { $email = trim($inputData['email']); } else { $email = ''; } $salt = random(6); $password = $managerRepo->generatePassword($inputData['password'], $salt); $setarr['salt'] = $salt; $setarr['password'] = $password; $setarr['email'] = $email; $result = $managerRepo->create($setarr); if (!$result) { return json_fail('创建失败'); } else { $logSubject = '添加一个管理员,账号:'. $username; $logSvalue = $result->manager_uid; $logDbData = [ 'after_items' => [ $result->toArray(), ], 'before_items' => [], ]; $this->log($logSubject, $logSvalue, $logDbData); return new CommonSuccessUidResponse($result->manager_uid); } } /** * 修改管理员. * @return mixed */ public function modify() { /** * @var Validator $validatorFactory */ $validatorFactory = app('validator'); /** * @var ManagerRepository $managerRepo */ $managerRepo = app(ManagerRepository::class); /** * @var PermissionRoleRepository $permissionRoleRepository */ $permissionRoleRepository = make(PermissionRoleRepository::class); $inputData = $this->getJsonData(); $rules = [ 'manager_uid' => 'required|string', 'nick' => 'required|max:60', 'role_id' => 'required|integer', 'password' => 'nullable|min:6|max:64', 'email' => 'nullable|max:120', ]; $validator = $validatorFactory->make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } $manager = $managerRepo->findBy('manager_uid', $inputData['manager_uid']); if (empty($manager)) { return json_fail(trans('common.err_resource_not_found')); } $oldManager = clone $manager; $manager->nick = $inputData['nick']; $manager->role_id = intval($inputData['role_id']); $roleName = ''; $roleObj = $permissionRoleRepository->find($manager->role_id); if (!empty($roleObj)) { $roleName = $roleObj->name; } $manager->role_name = $roleName; if (isset($inputData['email'])) { $email = trim($inputData['email']); $manager->email = $email; } else { $manager->email = ''; } if (!empty($inputData['password'])) { $salt = $manager->salt; if (empty($salt)) { $salt = random(6); } $password = $managerRepo->generatePassword($inputData['password'], $manager->salt); $manager->salt = $salt; $manager->password = $password; } $result = $manager->save(); if (!$result) { return json_fail('修改失败'); } else { $logSubject = '修改一个管理员,账号:'. $manager->username; $logSvalue = $manager->manager_uid; $logDbData = [ 'after_items' => [ $manager->toArray(), ], 'before_items' => [ $oldManager->toArray(), ], ]; $this->log($logSubject, $logSvalue, $logDbData); return new CommonSuccessUidResponse($manager->manager_uid); } } /** * 删除单个. * @return mixed */ public function delete() { /** * @var Validator $validatorFactory */ $validatorFactory = app('validator'); /** * @var ManagerRepository $managerRepo */ $managerRepo = app(ManagerRepository::class); $inputData = $this->getJsonData(); $rules = [ 'manager_uid' => 'required|string', ]; $validator = $validatorFactory->make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } $manager = $managerRepo->findBy('manager_uid', $inputData['manager_uid']); if ($manager->id === 1) { return json_fail('此用户不允许删除!'); } if (empty($manager)) { return json_fail(trans('common.err_resource_not_found')); } $oldManager = clone $manager; $result = $manager->delete(); if (!$result) { return json_fail('删除失败'); } else { $logSubject = '删除一个管理员,账号:'. $oldManager->username; $logSvalue = $oldManager->manager_uid; $logDbData = [ 'after_items' => [ ], 'before_items' => [ $oldManager->toArray(), ], ]; $this->log($logSubject, $logSvalue, $logDbData); return new CommonSuccessUidResponse($inputData['manager_uid']); } } /** * 批量操作. * @return mixed */ public function batch() { /** * @var Validator $validatorFactory */ $validatorFactory = app('validator'); /** * @var ManagerRepository $managerRepo */ $managerRepo = app(ManagerRepository::class); $inputData = $this->getJsonData(); $operateName = $inputData['operate_name'] ?? ''; switch ($operateName) { case 'delete': $itemPks = $inputData['item_pks'] ?? []; if (!empty($itemPks)) { $model = new ManagerModel(); $resultItems = $model->whereIn('manager_uid', $itemPks)->delete(); if ($resultItems) { $strPks = implode(',', $itemPks); $logSubject = '批量删除多个管理员'; $logSvalue = $strPks; $logDbData = [ 'after_items' => [ ], 'before_items' => [], ]; $this->log($logSubject, $logSvalue, $logDbData); } } $data = [ 'result' => 'success', 'pks' => $itemPks, ]; return json_success($data); break; default: break; } return json_fail('未知操作'); } /** * 我的详情. * @return mixed|ManagerDetailResponse */ public function detailMe() { $manager = $this->getCurrentManger(); if (empty($manager)) { return json_fail(trans('common.err_resource_not_found')); } return new ManagerDetailResponse($manager); } /** * 修改自己信息. * @return mixed|CommonSuccessUidResponse */ public function modifyMe() { /** * @var Validator $validatorFactory */ $validatorFactory = app('validator'); /** * @var ManagerRepository $managerRepo */ $managerRepo = app(ManagerRepository::class); $inputData = $this->getJsonData(); $rules = [ 'nick' => 'required|max:60', 'password' => 'nullable|min:6|max:64', 'email' => 'nullable|max:120', ]; $validator = $validatorFactory->make($inputData, $rules); if ($validator->fails()) { // 如果有错误(可能是多个信息),这里只取第一个错误信息返回. return json_fail($validator->errors()->first()); } $manager = $this->getCurrentManger(); if (empty($manager)) { return json_fail(trans('common.err_resource_not_found')); } $oldManager = clone $manager; $manager->nick = $inputData['nick']; if (isset($inputData['email'])) { $email = trim($inputData['email']); $manager->email = $email; } else { $manager->email = ''; } if (!empty($inputData['password'])) { $salt = $manager->salt; if (empty($salt)) { $salt = random(6); } $password = $managerRepo->generatePassword($inputData['password'], $manager->salt); $manager->salt = $salt; $manager->password = $password; } $result = $manager->save(); if (!$result) { return json_fail('修改失败'); } else { $logSubject = '修改自己管理员信息,账号:'. $manager->username; $logSvalue = $manager->manager_uid; $logDbData = [ 'after_items' => [ $manager->toArray(), ], 'before_items' => [ $oldManager->toArray(), ], ]; $this->log($logSubject, $logSvalue, $logDbData); return new CommonSuccessUidResponse($manager->manager_uid); } } }