diff --git a/app/Http/Controllers/Sales/SalesDashboardController.php b/app/Http/Controllers/Sales/SalesDashboardController.php index 53b523cd..f075ea39 100644 --- a/app/Http/Controllers/Sales/SalesDashboardController.php +++ b/app/Http/Controllers/Sales/SalesDashboardController.php @@ -251,10 +251,8 @@ private function getDashboardData(Request $request): array ->get() ->keyBy('tenant_id'); - // 내가 유치한 영업파트너 목록 (드롭다운용) - $allManagers = auth()->user()->children() - ->where('is_active', true) - ->get(['id', 'name', 'email']); + // 상담매니저 역할을 가진 모든 사용자 (드롭다운용) + $allManagers = $this->getAllManagerUsers(); // 내가 매니저로만 참여하는 건 (다른 사람이 등록, 내가 매니저) $managerOnlyProspects = $this->getManagerOnlyProspects($currentUserId); @@ -412,10 +410,8 @@ public function refreshTenantList(Request $request): View ->get() ->keyBy('tenant_id'); - // 내가 유치한 영업파트너 목록 (드롭다운용) - $allManagers = auth()->user()->children() - ->where('is_active', true) - ->get(['id', 'name', 'email']); + // 상담매니저 역할을 가진 모든 사용자 (드롭다운용) + $allManagers = $this->getAllManagerUsers(); return view('sales.dashboard.partials.tenant-list', compact( 'tenants', @@ -768,6 +764,55 @@ private function getCommissionData(): array return compact('commissionSummary', 'recentCommissions', 'partner'); } + /** + * 상담매니저 역할을 가진 모든 사용자 조회 + */ + private function getAllManagerUsers() + { + $tenantId = session('selected_tenant_id', 1); + + return User::whereHas('userRoles', function ($q) use ($tenantId) { + $q->where('tenant_id', $tenantId) + ->whereHas('role', function ($rq) { + $rq->where('name', 'manager'); + }); + }) + ->where('is_active', true) + ->where('id', '!=', auth()->id()) // 본인 제외 + ->get(['id', 'name', 'email']); + } + + /** + * 매니저 검색 API (AJAX) + */ + public function searchManagers(Request $request): JsonResponse + { + $query = $request->input('q', ''); + $tenantId = session('selected_tenant_id', 1); + + $managers = User::whereHas('userRoles', function ($q) use ($tenantId) { + $q->where('tenant_id', $tenantId) + ->whereHas('role', function ($rq) { + $rq->where('name', 'manager'); + }); + }) + ->where('is_active', true) + ->where('id', '!=', auth()->id()) + ->when($query, function ($q) use ($query) { + $q->where(function ($subQ) use ($query) { + $subQ->where('name', 'like', "%{$query}%") + ->orWhere('email', 'like', "%{$query}%"); + }); + }) + ->limit(10) + ->get(['id', 'name', 'email']); + + return response()->json([ + 'success' => true, + 'managers' => $managers, + ]); + } + /** * 영업파트너 가이드북 도움말 모달 */ diff --git a/resources/views/sales/dashboard/partials/manager-dropdown.blade.php b/resources/views/sales/dashboard/partials/manager-dropdown.blade.php index 6f4ba732..a3251dfb 100644 --- a/resources/views/sales/dashboard/partials/manager-dropdown.blade.php +++ b/resources/views/sales/dashboard/partials/manager-dropdown.blade.php @@ -1,4 +1,4 @@ -{{-- 매니저 드롭다운 컴포넌트 (테넌트 또는 가망고객용) --}} +{{-- 매니저 검색 컴포넌트 (테넌트 또는 가망고객용) --}} @once @endonce @@ -16,26 +16,65 @@ $assignedManager = $management?->manager; $isSelf = !$assignedManager || $assignedManager->id === auth()->id(); $managerName = $assignedManager?->name ?? '본인'; - $managersJson = $allManagers->map(fn($m) => ['id' => $m->id, 'name' => $m->name, 'email' => $m->email])->values()->toJson(); - $currentManagerJson = json_encode($assignedManager ? ['id' => $assignedManager->id, 'name' => $assignedManager->name, 'is_self' => $isSelf] : null); - - // API 엔드포인트 결정 - $apiEndpoint = $isProspect ? '/sales/prospects/' : '/sales/tenants/'; + $currentManagerJson = json_encode($assignedManager ? ['id' => $assignedManager->id, 'name' => $assignedManager->name, 'email' => $assignedManager->email ?? '', 'is_self' => $isSelf] : null); @endphp
- {{-- 본인 옵션 --}} - +
- {{-- 구분선 (다른 매니저가 있을 때만) --}} - - - {{-- 다른 매니저 목록 --}} - - {{-- 매니저가 없을 때 --}} - + + {{-- 검색 결과 --}} + + + {{-- 검색어가 있지만 결과 없음 --}} + + + {{-- 검색어 없을 때 안내 --}} + + diff --git a/routes/web.php b/routes/web.php index 7434b830..bdc08b41 100644 --- a/routes/web.php +++ b/routes/web.php @@ -977,6 +977,7 @@ // 매니저 목록 조회 (드롭다운용) Route::get('/managers/list', [\App\Http\Controllers\Sales\SalesDashboardController::class, 'getManagers'])->name('managers.list'); + Route::get('/managers/search', [\App\Http\Controllers\Sales\SalesDashboardController::class, 'searchManagers'])->name('managers.search'); // 상품관리 (HQ 전용) Route::prefix('products')->name('products.')->group(function () {