feat:영업파트너 고객관리 페이지 내부 새로고침 기능 추가
- 헤더에 새로고침 버튼 추가 - HTMX로 콘텐츠 영역만 새로고침 (페이지 전체 리로드 없음) - 컨트롤러에 refresh 메서드 및 getIndexData 공통 메서드 추가 - content.blade.php partial 분리 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -37,6 +37,48 @@ public function index(Request $request): View|Response
|
||||
return response('', 200)->header('HX-Redirect', route('sales.admin-prospects.index'));
|
||||
}
|
||||
|
||||
$data = $this->getIndexData($request);
|
||||
|
||||
return view('sales.admin-prospects.index', $data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 고객 상세 모달
|
||||
*/
|
||||
public function modalShow(int $id): View
|
||||
{
|
||||
$this->checkAdminAccess();
|
||||
|
||||
$prospect = TenantProspect::with(['registeredBy', 'tenant'])->findOrFail($id);
|
||||
|
||||
// 진행률
|
||||
$progress = SalesScenarioChecklist::getProspectProgress($prospect->id);
|
||||
$prospect->sales_progress = $progress['sales']['percentage'];
|
||||
$prospect->manager_progress = $progress['manager']['percentage'];
|
||||
|
||||
// management 정보
|
||||
$management = SalesTenantManagement::findOrCreateByProspect($prospect->id);
|
||||
|
||||
return view('sales.admin-prospects.partials.show-modal', compact('prospect', 'management', 'progress'));
|
||||
}
|
||||
|
||||
/**
|
||||
* 콘텐츠 새로고침 (HTMX)
|
||||
*/
|
||||
public function refresh(Request $request): View
|
||||
{
|
||||
$this->checkAdminAccess();
|
||||
|
||||
$data = $this->getIndexData($request);
|
||||
|
||||
return view('sales.admin-prospects.partials.content', $data);
|
||||
}
|
||||
|
||||
/**
|
||||
* index 데이터 조회 (공통)
|
||||
*/
|
||||
private function getIndexData(Request $request): array
|
||||
{
|
||||
// 영업 역할을 가진 사용자 목록 (영업파트너)
|
||||
$salesPartners = User::whereHas('userRoles', function ($q) {
|
||||
$q->whereHas('role', function ($rq) {
|
||||
@@ -48,7 +90,7 @@ public function index(Request $request): View|Response
|
||||
$filters = [
|
||||
'search' => $request->get('search'),
|
||||
'status' => $request->get('status'),
|
||||
'registered_by' => $request->get('registered_by'), // 특정 영업파트너 필터
|
||||
'registered_by' => $request->get('registered_by'),
|
||||
];
|
||||
|
||||
// 쿼리 빌드
|
||||
@@ -86,7 +128,6 @@ public function index(Request $request): View|Response
|
||||
// 진행률 100% 시 상태 자동 전환 체크
|
||||
if ($progress['sales']['percentage'] === 100 && $progress['manager']['percentage'] === 100) {
|
||||
SalesScenarioChecklist::checkAndConvertProspectStatus($prospect->id);
|
||||
// 상태가 변경되었을 수 있으므로 다시 로드
|
||||
$prospect->refresh();
|
||||
}
|
||||
|
||||
@@ -117,27 +158,7 @@ public function index(Request $request): View|Response
|
||||
];
|
||||
});
|
||||
|
||||
return view('sales.admin-prospects.index', compact('prospects', 'stats', 'salesPartners', 'partnerStats', 'filters'));
|
||||
}
|
||||
|
||||
/**
|
||||
* 고객 상세 모달
|
||||
*/
|
||||
public function modalShow(int $id): View
|
||||
{
|
||||
$this->checkAdminAccess();
|
||||
|
||||
$prospect = TenantProspect::with(['registeredBy', 'tenant'])->findOrFail($id);
|
||||
|
||||
// 진행률
|
||||
$progress = SalesScenarioChecklist::getProspectProgress($prospect->id);
|
||||
$prospect->sales_progress = $progress['sales']['percentage'];
|
||||
$prospect->manager_progress = $progress['manager']['percentage'];
|
||||
|
||||
// management 정보
|
||||
$management = SalesTenantManagement::findOrCreateByProspect($prospect->id);
|
||||
|
||||
return view('sales.admin-prospects.partials.show-modal', compact('prospect', 'management', 'progress'));
|
||||
return compact('prospects', 'stats', 'salesPartners', 'partnerStats', 'filters');
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user