diff --git a/app/Http/Controllers/Sales/SalesManagerController.php b/app/Http/Controllers/Sales/SalesManagerController.php index f1863166..38806bf4 100644 --- a/app/Http/Controllers/Sales/SalesManagerController.php +++ b/app/Http/Controllers/Sales/SalesManagerController.php @@ -117,6 +117,38 @@ public function show(int $id): View return view('sales.managers.show', compact('partner', 'level', 'children', 'delegationCandidates')); } + /** + * 상세 모달용 + */ + public function modalShow(int $id): View + { + $partner = User::with(['parent', 'children', 'userRoles.role', 'salesDocuments', 'approver']) + ->findOrFail($id); + + $level = $this->service->getPartnerLevel($partner); + + $children = User::where('parent_id', $partner->id) + ->with('userRoles.role') + ->get(); + + return view('sales.managers.partials.show-modal', compact('partner', 'level', 'children')); + } + + /** + * 수정 모달용 + */ + public function modalEdit(int $id): View + { + $partner = User::with(['userRoles.role', 'salesDocuments', 'parent'])->findOrFail($id); + $roles = $this->service->getSalesRoles(); + $currentRoleIds = $partner->userRoles->pluck('role_id')->toArray(); + $documentTypes = SalesManagerDocument::DOCUMENT_TYPES; + + return view('sales.managers.partials.edit-modal', compact( + 'partner', 'roles', 'currentRoleIds', 'documentTypes' + )); + } + /** * 수정 폼 */ diff --git a/resources/views/sales/managers/index.blade.php b/resources/views/sales/managers/index.blade.php index d07c117b..59534fd8 100644 --- a/resources/views/sales/managers/index.blade.php +++ b/resources/views/sales/managers/index.blade.php @@ -151,8 +151,8 @@ class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none foc {{ $partner->created_at->format('Y-m-d') }} - 상세 - 수정 + + @if($partner->isPendingApproval())
@@ -187,4 +187,123 @@ class="w-full px-4 py-2 border border-gray-300 rounded-lg focus:outline-none foc @endif + + + @endsection + +@push('scripts') + +@endpush diff --git a/resources/views/sales/managers/partials/edit-modal.blade.php b/resources/views/sales/managers/partials/edit-modal.blade.php new file mode 100644 index 00000000..57b5d29d --- /dev/null +++ b/resources/views/sales/managers/partials/edit-modal.blade.php @@ -0,0 +1,193 @@ +{{-- 영업파트너 수정 모달 내용 --}} +
+ +
+
+

영업파트너 수정

+

{{ $partner->name }} ({{ $partner->email }})

+
+ +
+ + + + @csrf + @method('PUT') + + +
+

기본 정보

+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+

역할 *

+
+ @foreach($roles as $role) + + @endforeach +
+
+ + + @if($partner->parent) +
+

추천인(유치자)

+
+ {{ $partner->parent->name }} ({{ $partner->parent->email }}) +
+

추천인은 변경할 수 없습니다.

+
+ @endif + + + @if($partner->salesDocuments->isNotEmpty()) +
+

기존 첨부 서류

+
+ @foreach($partner->salesDocuments as $document) +
+
+ {{ $document->document_type_label }} + {{ $document->original_name }} + {{ $document->formatted_size }} +
+ +
+ @endforeach +
+
+ @endif + + +
+

새 서류 추가

+ + +
+ + +
+ + +
+ +
+ + diff --git a/resources/views/sales/managers/partials/show-modal.blade.php b/resources/views/sales/managers/partials/show-modal.blade.php new file mode 100644 index 00000000..ccd3bc17 --- /dev/null +++ b/resources/views/sales/managers/partials/show-modal.blade.php @@ -0,0 +1,290 @@ +{{-- 영업파트너 상세 모달 내용 --}} +
+ +
+
+

{{ $partner->name }}

+

레벨 {{ $level }} 영업파트너

+
+ @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->approval_status_label }} + +
+
+ +
+ + + @if($partner->isPendingApproval()) +
+
+ + + +
+

승인 대기 중

+

첨부된 서류를 확인 후 승인 또는 반려해주세요.

+
+
+ @csrf + +
+ +
+ + +
+
+
+ @endif + + + @if($partner->isRejected() && $partner->rejection_reason) +
+
+ + + +
+

반려됨

+

{{ $partner->rejection_reason }}

+ @if($partner->approver) +

처리자: {{ $partner->approver->name }} ({{ $partner->approved_at->format('Y-m-d H:i') }})

+ @endif +
+
+
+ @endif + +
+ +
+

기본 정보

+
+
+
로그인 ID
+
{{ $partner->user_id ?? $partner->email }}
+
+
+
이름
+
{{ $partner->name }}
+
+
+
이메일
+
{{ $partner->email }}
+
+
+
전화번호
+
{{ $partner->phone ?? '-' }}
+
+
+
추천인(유치자)
+
+ @if($partner->parent) + {{ $partner->parent->name }} + @else + 최상위 + @endif +
+
+
+
등록일
+
{{ $partner->created_at->format('Y-m-d H:i') }}
+
+ @if($partner->isApproved() && $partner->approved_at) +
+
승인일
+
{{ $partner->approved_at->format('Y-m-d H:i') }}
+
+ @endif +
+
+ + +
+

활동 통계

+
+
+
{{ $children->count() }}
+
하위 파트너
+
+
+
{{ $partner->salesDocuments->count() }}
+
첨부 서류
+
+
+
+
+ + + @if($partner->isApproved()) +
+

역할 관리

+ @php + $currentRoles = $partner->userRoles->pluck('role.name')->toArray(); + $roleLabels = ['sales' => '영업', 'manager' => '매니저', 'recruiter' => '유치담당']; + $roleColors = [ + 'sales' => 'bg-blue-100 text-blue-800 border-blue-200', + 'manager' => 'bg-purple-100 text-purple-800 border-purple-200', + 'recruiter' => 'bg-green-100 text-green-800 border-green-200', + ]; + @endphp +
+ @forelse($currentRoles as $roleName) + @if(isset($roleLabels[$roleName])) +
+ {{ $roleLabels[$roleName] }} +
+ @csrf + + +
+
+ @endif + @empty + 역할이 없습니다 + @endforelse +
+
+ @foreach(['sales' => '영업', 'manager' => '매니저', 'recruiter' => '유치담당'] as $roleName => $label) + @if(!in_array($roleName, $currentRoles)) +
+ @csrf + + +
+ @endif + @endforeach +
+
+ @endif + + + @if($partner->salesDocuments->isNotEmpty()) +
+

첨부 서류

+
+ @foreach($partner->salesDocuments as $document) +
+
+ {{ $document->document_type_label }} + {{ $document->original_name }} +
+ 다운로드 +
+ @endforeach +
+
+ @endif + + + @if($children->isNotEmpty()) +
+

하위 파트너 ({{ $children->count() }}명)

+
+ @foreach($children->take(5) as $child) +
+
+ {{ $child->name }} + @foreach($child->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 +
+ + {{ $child->approval_status_label }} + +
+ @endforeach + @if($children->count() > 5) +

외 {{ $children->count() - 5 }}명...

+ @endif +
+
+ @endif + + +
+ + +
+
+ + diff --git a/routes/web.php b/routes/web.php index c794c006..5d4194f6 100644 --- a/routes/web.php +++ b/routes/web.php @@ -790,6 +790,8 @@ // 영업 담당자 관리 Route::resource('managers', \App\Http\Controllers\Sales\SalesManagerController::class); + Route::get('managers/{id}/modal-show', [\App\Http\Controllers\Sales\SalesManagerController::class, 'modalShow'])->name('managers.modal-show'); + Route::get('managers/{id}/modal-edit', [\App\Http\Controllers\Sales\SalesManagerController::class, 'modalEdit'])->name('managers.modal-edit'); Route::post('managers/{id}/approve', [\App\Http\Controllers\Sales\SalesManagerController::class, 'approve'])->name('managers.approve'); Route::post('managers/{id}/reject', [\App\Http\Controllers\Sales\SalesManagerController::class, 'reject'])->name('managers.reject'); Route::post('managers/{id}/delegate-role', [\App\Http\Controllers\Sales\SalesManagerController::class, 'delegateRole'])->name('managers.delegate-role');