diff --git a/app/Http/Controllers/AdminUserController.php b/app/Http/Controllers/AdminUserController.php new file mode 100644 index 0000000..beeee37 --- /dev/null +++ b/app/Http/Controllers/AdminUserController.php @@ -0,0 +1,85 @@ +all())->where('id', '>', 1); + $list = $query->simplePaginate(Paginator::resolvePerPage('per_page', 20, 50)) ; + return $this->json(AdminUserResource::collection($list)); + } + + public function store(AdminUserRequest $request) + { + $baseIds = $request->input('base_ids', []); + try{ + DB::beginTransaction(); + //添加基地信息 + $user = AdminUser::create($request->input()); + //添加基地农作物 + $user->bases()->sync($baseIds); + DB::commit(); + }catch(\Throwable $th){ + DB::rollBack(); + report($th); + return $this->error('添加失败,请稍后再试'); + } + return $this->success('添加成功'); + } + + public function show(AdminUser $adminUser){ + return $this->json(AdminUserResource::make($adminUser)); + } + + public function update(AdminUser $adminUser, AdminUserRequest $request) + { + $baseIds = $request->input('base_ids', []); + try{ + DB::beginTransaction(); + //添加基地信息 + $adminUser->update($request->input()); + //添加基地农作物 + $adminUser->crops()->sync($baseIds); + DB::commit(); + }catch(\Throwable $th){ + DB::rollBack(); + report($th); + return $this->error('修改失败,请稍后再试'); + } + return $this->success('修改成功!'); + } + + public function destroy(AdminUser $adminUser){ + try{ + DB::beginTransaction(); + $adminUser->crops()->sync([]); + $adminUser->delete(); + DB::commit(); + }catch(\Throwable $th){ + DB::rollBack(); + report($th); + return $this->error('删除失败,请稍后再试'); + } + return $this->success('删除成功!'); + } + + /** + * 启用/禁用 + * + * @param AdminUser $adminUser + * @return void + */ + public function endable(AdminUser $adminUser){ + + } + +} diff --git a/app/Http/Requestes/AdminUserRequest.php b/app/Http/Requestes/AdminUserRequest.php new file mode 100644 index 0000000..8dc1c88 --- /dev/null +++ b/app/Http/Requestes/AdminUserRequest.php @@ -0,0 +1,54 @@ + 'required|alpha_num|max:100', + 'password' => 'required|string|min:6|max:32', + 'name' => 'required|string|max:100', + 'avatar' => 'nullable|string', + 'department' => 'nullable|string', + 'phone' => 'nullable|string', + 'status' => 'required|integer|min:0', + 'base_ids' => 'nullable|array', + ]; + } + + public function messages() + { + $messages = [ + 'username.required' => '请填写登录用户名', + 'username.alpha_num' => '用户名只能由字母和数字组成', + 'username.max' => '用户名最长100位', + 'password.required' => '请填写登录密码', + 'password.string'=> '请正确填写密码', + 'password.min' => '密码长度不能低于6位', + 'password.max' => '密码长度不能超过32位', + 'name.required' => '请填写名称', + 'name.string' =>'请正确填写名称', + 'name.max' => '名称长度不能超过100位', + 'status' => '请选择用户状态', + ]; + + return $messages; + } + + protected function failedValidation(Validator $validator) + { + $error = $validator->errors()->all(); + throw new HttpResponseException(response()->json(['data' => [], 'code' => 400, 'message' => $error[0]])); + } +} diff --git a/app/Http/Requestes/AgriculturalBaseRequest.php b/app/Http/Requestes/AgriculturalBaseRequest.php index 9404ecb..6502613 100644 --- a/app/Http/Requestes/AgriculturalBaseRequest.php +++ b/app/Http/Requestes/AgriculturalBaseRequest.php @@ -17,14 +17,14 @@ class AgriculturalBaseRequest extends FormRequest { return [ 'name' => 'required|string|max:100', - 'description' => 'string', + 'description' => 'nullable|string', 'person' => 'required|string|max:100', 'crops_ids'=> 'required|array|min:1', 'areas' => 'required|regex:/^\d+(\.\d{1,2})?$/', 'workforce' => 'required|integer|min:0', - 'address' => 'string', - 'address_lat' => 'regex:/^\d+(\.\d{1,10})?$/', - 'address_lng' => 'regex:/^\d+(\.\d{1,10})?$/', + 'address' => 'nullable|string', + 'address_lat' => 'nullable|regex:/^\d+(\.\d{1,10})?$/', + 'address_lng' => 'nullable|regex:/^\d+(\.\d{1,10})?$/', ]; } diff --git a/app/Http/Resources/AdminUserResource.php b/app/Http/Resources/AdminUserResource.php new file mode 100644 index 0000000..6341f33 --- /dev/null +++ b/app/Http/Resources/AdminUserResource.php @@ -0,0 +1,29 @@ + $this->id, + 'name' => $this->name, + 'avatar'=> $this->avatar, + 'department' => $this->department, + 'phone' => $this->phone, + 'status' => $this->status, + 'is_enable'=> $this->is_enable, + 'bases' => AgriculturalBaseResource::collection($this->whenload('bases')), + ]; + } +} diff --git a/app/ModelFilters/AdminUserFilter.php b/app/ModelFilters/AdminUserFilter.php new file mode 100644 index 0000000..0881751 --- /dev/null +++ b/app/ModelFilters/AdminUserFilter.php @@ -0,0 +1,11 @@ +belongsToMany(AgriculturalBase::class, 'admin_user_bases', 'user_id', 'base_id'); + } } diff --git a/app/Models/AdminUserBase.php b/app/Models/AdminUserBase.php new file mode 100644 index 0000000..3115bfc --- /dev/null +++ b/app/Models/AdminUserBase.php @@ -0,0 +1,11 @@ +id(); + $table->unsignedBigInteger('user_id'); + $table->unsignedBigInteger('base_id'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('admin_user_bases'); + } +}; diff --git a/routes/api.php b/routes/api.php index 9876385..a2143f4 100644 --- a/routes/api.php +++ b/routes/api.php @@ -23,9 +23,13 @@ Route::group(['middleware' => 'auth:sanctum'], function () { //全市基础数据 Route::get('citydata-statistics', [CityDataController::class, 'statistics']); - + //基地数据 Route::apiResource('agricultural-basic', AgriculturalBaseController::class); + + /** 系统管理 **/ + Route::apiResource('admin-users', AdminUserController::class); + Route::prefix('users')->group(function () { Route::put('reset-password', [UserController::class, 'resetPwd']); Route::delete('logout', [UserController::class, 'logout']);