From d6b3fa193ac18ee9f0c787efa7776ffda10c259e Mon Sep 17 00:00:00 2001 From: pro Date: Sat, 31 Jan 2026 11:44:36 +0900 Subject: [PATCH] =?UTF-8?q?feat:=EC=98=81=EC=97=85=ED=8C=8C=ED=8A=B8?= =?UTF-8?q?=EB=84=88=20=EC=8A=B9=EC=9D=B8=20=ED=8E=98=EC=9D=B4=EC=A7=80=20?= =?UTF-8?q?2=EB=B6=84=ED=95=A0=20=EB=A0=88=EC=9D=B4=EC=95=84=EC=9B=83=20?= =?UTF-8?q?=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 좌측: 승인 대기자 목록 (노란색 헤더) - 우측: 승인 완료 목록 (초록색 헤더, 최근 승인 순) - 각 패널에 건수 표시 및 독립적 페이지네이션 - 컴팩트한 테이블 디자인으로 더 많은 정보 표시 Co-Authored-By: Claude Opus 4.5 --- .../Sales/SalesManagerController.php | 20 +- .../views/sales/managers/approvals.blade.php | 327 +++++++++++------- 2 files changed, 218 insertions(+), 129 deletions(-) diff --git a/app/Http/Controllers/Sales/SalesManagerController.php b/app/Http/Controllers/Sales/SalesManagerController.php index 5eb0bc9f..91e354d8 100644 --- a/app/Http/Controllers/Sales/SalesManagerController.php +++ b/app/Http/Controllers/Sales/SalesManagerController.php @@ -347,15 +347,23 @@ public function approvals(Request $request): View|Response return response('', 200)->header('HX-Redirect', route('sales.managers.approvals')); } - $filters = [ - 'search' => $request->get('search'), - 'approval_status' => 'pending', // 승인 대기만 - ]; + $search = $request->get('search'); + + // 승인 대기자 목록 + $pendingPartners = $this->service->getSalesPartners([ + 'search' => $search, + 'approval_status' => 'pending', + ])->paginate(10, ['*'], 'pending_page'); + + // 승인된 파트너 목록 (최근 승인 순) + $approvedPartners = $this->service->getSalesPartners([ + 'search' => $search, + 'approval_status' => 'approved', + ])->reorder()->latest('approved_at')->paginate(10, ['*'], 'approved_page'); - $partners = $this->service->getSalesPartners($filters)->paginate(20); $stats = $this->service->getApprovalStats(); - return view('sales.managers.approvals', compact('partners', 'stats')); + return view('sales.managers.approvals', compact('pendingPartners', 'approvedPartners', 'stats')); } /** diff --git a/resources/views/sales/managers/approvals.blade.php b/resources/views/sales/managers/approvals.blade.php index d5a82c77..f1c87d91 100644 --- a/resources/views/sales/managers/approvals.blade.php +++ b/resources/views/sales/managers/approvals.blade.php @@ -5,7 +5,7 @@ @section('content')
-
+

영업파트너 승인

영업파트너 가입 신청을 검토하고 승인/반려합니다

@@ -13,137 +13,227 @@
-
-
-
승인 대기
-
{{ number_format($stats['pending']) }}명
+
+
+
승인 대기
+
{{ number_format($stats['pending']) }}명
-
-
오늘 승인
-
{{ number_format($stats['approved_today']) }}명
+
+
오늘 승인
+
{{ number_format($stats['approved_today']) }}명
-
-
오늘 반려
-
{{ number_format($stats['rejected_today']) }}명
+
+
오늘 반려
+
{{ number_format($stats['rejected_today']) }}명
-
+
+ class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 text-sm">
-
- -
-
- - - - - - - - - - - - - - @forelse($partners as $partner) - - - - - - - - - - @empty - - - - @endforelse - -
신청자아이디역할연락처추천인(유치자)신청일처리
-
{{ $partner->name }}
- @if($partner->email) -
{{ $partner->email }}
- @endif -
- {{ $partner->user_id ?? '-' }} - -
- @foreach($partner->userRoles as $userRole) - @php - $roleColor = match($userRole->role->name ?? '') { - 'sales' => 'bg-blue-100 text-blue-800', - 'manager' => 'bg-purple-100 text-purple-800', - 'recruiter' => 'bg-green-100 text-green-800', - default => 'bg-gray-100 text-gray-800', - }; - $roleLabel = match($userRole->role->name ?? '') { - 'sales' => '영업', - 'manager' => '매니저', - 'recruiter' => '유치담당', - default => $userRole->role->name ?? '-', - }; - @endphp - - {{ $roleLabel }} - - @endforeach -
-
- {{ $partner->phone ?? '-' }} - - @if($partner->parent) - {{ $partner->parent->name }} - @else - - - @endif - - {{ $partner->created_at->format('Y-m-d H:i') }} - -
- - - -
-
- 승인 대기 중인 영업파트너가 없습니다. -
+ +
+ +
+
+ + + + 승인 대기 + {{ $pendingPartners->total() }}명 +
+
+ + + + + + + + + + + @forelse($pendingPartners as $partner) + + + + + + + @empty + + + + @endforelse + +
신청자역할유치자처리
+
{{ $partner->name }}
+
{{ $partner->user_id ?? $partner->email }}
+
{{ $partner->created_at->format('m/d H:i') }}
+
+
+ @foreach($partner->userRoles as $userRole) + @php + $roleColor = match($userRole->role->name ?? '') { + 'sales' => 'bg-blue-100 text-blue-800', + 'manager' => 'bg-purple-100 text-purple-800', + 'recruiter' => 'bg-green-100 text-green-800', + default => 'bg-gray-100 text-gray-800', + }; + $roleLabel = match($userRole->role->name ?? '') { + 'sales' => '영업', + 'manager' => '매니저', + 'recruiter' => '유치담당', + default => $userRole->role->name ?? '-', + }; + @endphp + + {{ $roleLabel }} + + @endforeach +
+
+ @if($partner->parent) + {{ $partner->parent->name }} + @else + - + @endif + +
+ + + +
+
+ + + + 승인 대기 중인 파트너가 없습니다. +
+
+ @if($pendingPartners->hasPages()) +
+ {{ $pendingPartners->withQueryString()->links() }} +
+ @endif
- - @if($partners->hasPages()) -
- {{ $partners->withQueryString()->links() }} + +
+
+ + + + 승인 완료 + {{ $approvedPartners->total() }}명 +
+
+ + + + + + + + + + + + @forelse($approvedPartners as $partner) + + + + + + + + @empty + + + + @endforelse + +
파트너역할유치자승인일상세
+
{{ $partner->name }}
+
{{ $partner->user_id ?? $partner->email }}
+
+
+ @foreach($partner->userRoles as $userRole) + @php + $roleColor = match($userRole->role->name ?? '') { + 'sales' => 'bg-blue-100 text-blue-800', + 'manager' => 'bg-purple-100 text-purple-800', + 'recruiter' => 'bg-green-100 text-green-800', + default => 'bg-gray-100 text-gray-800', + }; + $roleLabel = match($userRole->role->name ?? '') { + 'sales' => '영업', + 'manager' => '매니저', + 'recruiter' => '유치담당', + default => $userRole->role->name ?? '-', + }; + @endphp + + {{ $roleLabel }} + + @endforeach +
+
+ @if($partner->parent) + {{ $partner->parent->name }} + @else + - + @endif + + @if($partner->approved_at) + {{ $partner->approved_at->format('m/d H:i') }} + @else + - + @endif + + +
+ + + + 승인된 파트너가 없습니다. +
+
+ @if($approvedPartners->hasPages()) +
+ {{ $approvedPartners->withQueryString()->links() }} +
+ @endif
- @endif
@@ -216,13 +306,8 @@ function approvePartner(id, name) { .then(data => { if (data.success) { showToast(data.message, 'success'); - // 테이블에서 해당 행 제거 - document.getElementById(`partner-row-${id}`)?.remove(); - // 테이블이 비었으면 새로고침 - const tbody = document.querySelector('tbody'); - if (tbody && tbody.children.length === 0) { - window.location.reload(); - } + // 페이지 새로고침으로 양쪽 테이블 업데이트 + window.location.reload(); } else { showToast(data.message || '승인 처리에 실패했습니다.', 'error'); } @@ -271,11 +356,7 @@ function submitReject(event) { if (data.success) { closeRejectModal(); showToast(data.message, 'success'); - document.getElementById(`partner-row-${id}`)?.remove(); - const tbody = document.querySelector('tbody'); - if (tbody && tbody.children.length === 0) { - window.location.reload(); - } + window.location.reload(); } else { showToast(data.message || '반려 처리에 실패했습니다.', 'error'); }