getMembers($request,$projectId); } public function publicSearch(Request $request,string $projectId) { return $this->getMembers($request,$projectId); } protected function getMembers(Request $request,string $projectId) { $project = Project::query()->findOrFail($projectId); // 假设你想根据用户的 name 字段进行筛选 $name = $request->get('name'); $project->load(['teamMembers.user' => function ($query) use ($name) { if ($name) { $query->where('name', 'like', "%{$name}%"); } }]); $teamMembers=$project->teamMembers->filter(function ($teamMember) { return $teamMember->user !== null; }); $newId=1; foreach ($teamMembers as $teamMember) { $teamMember->display_id = (string)$newId++; } return TeamMemberResource::collection($teamMembers); } /** * Remove the specified resource from storage. */ public function destroy(string $id) { $teamMember = TeamMember::query()->findOrFail($id); if($teamMember->user_id==$teamMember->created_by){ return $this->badRequest('Not allowed to delete project creator'); } if ($teamMember->project?->company_id != Auth::user()->company_id) { return $this->forbidden('No permission to delete'); } $teamMember->delete(); return $this->noContent(); } public function manageMembers(Request $request, string $projectId) { foreach ($request->all() as $item) { if (! isset($item['user_id'])) { continue; } $user = User::query()->findOrFail($item['user_id']); if ($user->company_id != Auth::user()->company_id) { return $this->badRequest("User {$user['name']} does not belong to the current company"); } } DB::transaction(function () use ($request, $projectId) { $project = Project::query()->findOrFail($projectId); $project->teamMembers()->delete(); foreach ($request->all() as $item) { $teamMember = TeamMember::query()->where([ 'project_id' => $project->id, 'user_id' => $item['user_id'], ])->first(); if ($teamMember) { $teamMember->fill([ 'role' => $item['role'] ?? "", 'limited' => data_get($item, "limited", 1) == 1 ? 1 : 0, ]); $teamMember->save(); continue; } TeamMember::query()->create([ 'project_id' => $project->id, 'user_id' => $item['user_id'], 'role' => $item['role'] ?? "", 'limited' => data_get($item, "limited", 1) == 1 ? 1 : 0, 'join_at' => Carbon::now()->toDateString(), 'created_by' => Auth::id(), ]); } }); return $this->created(); } }