input('page', 1); $perPage = $request->input('per_page', 10); $admin = Admin::with('roles')->paginate($perPage, ['*'], 'page', $page); return Util::success($admin); } // 获取用户角色列表 public function roles(Request $request, $id) { $admin = Admin::with('roles')->findOrFail($id); $allRoles = Role::all(); $res = [ 'admin' => $admin, 'all_roles' => $allRoles, 'assigned_roles' => $admin->roles->pluck('id')->toArray() ]; return Util::success($res); } // 更新用户角色 public function updateRoles(Request $request, $id) { // $request->validate([ // 'roles' => 'required|array', // 'roles.*' => 'exists:roles,id' // ]); // 验证规则 $rules = [ 'roles' => 'required|array', 'roles.*' => 'exists:roles,id' ]; // 自定义错误消息(可选) $messages = [ 'roles.required' => '角色不能为空', 'roles.exists' => '角色id不存在', ]; // 执行验证 $validator = Validator::make($request->all(), $rules, $messages); $admin = Admin::findOrFail($id); $res = $admin->roles()->sync($request->input('roles')); return Util::success($res,'角色更新成功'); } // 创建管理员 public function create(Request $request) { $rules = [ 'username' => ['required', 'string', 'min:5', 'regex:/^[a-zA-Z0-9\-\_\.]+$/'], 'password' => 'required|string|min:6', 'nickname' => 'required|string', 'email' => 'nullable|email', 'status' => 'in:0,1' ]; $messages = [ 'username.required' => '账号不能为空', 'username.min' => '账号长度不能少于5位', 'username.regex' => '账号只能包含字母、数字、下划线、连字符和点号', 'password.required' => '密码不能为空', 'password.min' => '密码长度不能少于6位', 'nickname.required' => '姓名不能为空', 'email.email' => '邮箱格式不正确', 'status.in' => '状态值不正确' ]; $validator = Validator::make($request->all(), $rules, $messages); if ($validator->fails()) { return Util::fail('',$validator->errors()->first()); } // 检查用户名是否已存在 if (Admin::where('username', $request->input('username'))->exists()) { return Util::fail('','账号已存在'); } // 检查邮箱是否已存在 if ($request->input('email') && Admin::where('email', $request->input('email'))->exists()) { return Util::fail('','邮箱已存在'); } $admin = new Admin(); $admin->username = $request->input('username'); $admin->password = password_hash($request->input('password'), PASSWORD_DEFAULT); $admin->nickname = $request->input('nickname'); $admin->email = $request->input('email', null); $admin->status = $request->input('status', 1); $admin->save(); if ($request->input('roles')) { $res = $admin->roles()->sync($request->input('roles')); } return Util::success($admin, '管理员创建成功'); } // 修改管理员信息 public function update(Request $request, $id) { $admin = Admin::findOrFail($id); $rules = [ 'password' => ['string', 'min:6', 'regex:/^[a-zA-Z0-9\-\_\.]+$/'], 'nickname' => 'string', 'email' => 'email', 'status' => 'in:0,1', 'old_password' => 'required_with:password|string', 'avatar' => 'string', 'mobile' => 'string' ]; $messages = [ 'password.min' => '密码长度不能少于6位', 'password.regex' => '密码只能包含字母、数字、下划线、连字符和点号', 'email.email' => '邮箱格式不正确', 'status.in' => '状态值不正确', 'old_password.required_with' => '请提供旧密码', 'old_password.string' => '旧密码格式不正确' ]; $validator = Validator::make($request->all(), $rules, $messages); if ($validator->fails()) { return Util::fail('',$validator->errors()->first()); } // 检查邮箱是否已存在(排除当前管理员) if ($request->input('email') && Admin::where('email', $request->input('email'))->where('id', '!=', $id)->exists()) { return Util::fail('','邮箱已存在'); } // 准备要更新的数据 $updateData = $request->only(['nickname', 'email', 'status', 'avatar', 'mobile']); // 如果修改密码,验证旧密码 if ($request->input('password')) { if (!$request->input('old_password')) { return Util::fail('','请提供旧密码'); } if (!password_verify($request->input('old_password'), $admin->password)) { return Util::fail('','旧密码不正确'); } $updateData['password'] = password_hash($request->input('password'), PASSWORD_DEFAULT); } // 只填充前端传递的字段 $admin->fill($updateData); $admin->save(); return Util::success($admin, '管理员信息更新成功'); } // 禁用/启用管理员 public function toggleStatus(Request $request, $id) { $admin = Admin::findOrFail($id); $admin->status = $admin->status == 1 ? 0 : 1; $admin->save(); $statusText = $admin->status == 1 ? '启用' : '禁用'; return Util::success($admin, "管理员{$statusText}成功"); } // 重置管理员密码 public function resetPassword(Request $request, $id) { $rules = [ 'new_password' => 'required|string|min:6', // 'confirm_password' => 'required|string|same:new_password' ]; $messages = [ 'new_password.required' => '新密码不能为空', 'new_password.min' => '新密码长度不能少于6位', // 'confirm_password.required' => '确认密码不能为空', // 'confirm_password.same' => '两次输入的密码不一致' ]; $validator = Validator::make($request->all(), $rules, $messages); if ($validator->fails()) { return Util::fail('',$validator->errors()->first()); } $admin = Admin::findOrFail($id); $admin->password = password_hash($request->input('new_password'), PASSWORD_DEFAULT); $admin->save(); return Util::success(null, '密码重置成功'); } }