diff --git a/app/Http/Controllers/Lab/ManagementController.php b/app/Http/Controllers/Lab/ManagementController.php index 54d80448..3cf9c463 100644 --- a/app/Http/Controllers/Lab/ManagementController.php +++ b/app/Http/Controllers/Lab/ManagementController.php @@ -6,6 +6,8 @@ use App\Services\SalesScenarioService; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; +use Illuminate\Http\Response; +use Illuminate\View\View; /** * R&D Labs > M. 관리 메뉴 컨트롤러 @@ -16,57 +18,96 @@ public function __construct( private SalesScenarioService $salesScenarioService ) {} - // 바로빌 테넌트 관리 - public function barobillTenant() + /** + * Presentation 레이아웃 페이지를 위한 HX-Redirect 처리 + * (presentation 레이아웃은 #main-content가 없어서 HTMX swap 불가) + */ + private function handlePresentationPage(Request $request, string $routeName): ?Response { + if ($request->header('HX-Request')) { + return response('', 200)->header('HX-Redirect', route($routeName)); + } + return null; + } + + // 바로빌 테넌트 관리 + public function barobillTenant(Request $request): View|Response + { + if ($redirect = $this->handlePresentationPage($request, 'lab.management.barobill-tenant')) { + return $redirect; + } return view('lab.management.barobill-tenant'); } // 전자세금계산서 전략 - public function taxInvoiceStrategy() + public function taxInvoiceStrategy(Request $request): View|Response { + if ($redirect = $this->handlePresentationPage($request, 'lab.management.tax-invoice-strategy')) { + return $redirect; + } return view('lab.management.tax-invoice-strategy'); } // 전자세금계산서 - public function taxInvoice() + public function taxInvoice(Request $request): View|Response { + if ($redirect = $this->handlePresentationPage($request, 'lab.management.tax-invoice')) { + return $redirect; + } return view('lab.management.tax-invoice'); } // 사업자등록번호 진위 확인 - public function businessVerify() + public function businessVerify(Request $request): View|Response { + if ($redirect = $this->handlePresentationPage($request, 'lab.management.business-verify')) { + return $redirect; + } return view('lab.management.business-verify'); } // 영업관리 & 매니저 미팅관리 - public function salesMeeting() + public function salesMeeting(Request $request): View|Response { + if ($redirect = $this->handlePresentationPage($request, 'lab.management.sales-meeting')) { + return $redirect; + } return view('lab.management.sales-meeting'); } // 카드 세무항목 매칭 전략 - public function cardTaxMatching() + public function cardTaxMatching(Request $request): View|Response { + if ($redirect = $this->handlePresentationPage($request, 'lab.management.card-tax-matching')) { + return $redirect; + } return view('lab.management.card-tax-matching'); } // 한국 카드사 API 보고서 - public function cardApiReport() + public function cardApiReport(Request $request): View|Response { + if ($redirect = $this->handlePresentationPage($request, 'lab.management.card-api-report')) { + return $redirect; + } return view('lab.management.card-api-report'); } // 카드 사용내역 수집 후 매칭 - public function cardUsageMatching() + public function cardUsageMatching(Request $request): View|Response { + if ($redirect = $this->handlePresentationPage($request, 'lab.management.card-usage-matching')) { + return $redirect; + } return view('lab.management.card-usage-matching'); } // 계좌입출금 내역 조회 API - public function accountApi() + public function accountApi(Request $request): View|Response { + if ($redirect = $this->handlePresentationPage($request, 'lab.management.account-api')) { + return $redirect; + } return view('lab.management.account-api'); } @@ -132,8 +173,11 @@ public function salesScenarioToggle(Request $request): JsonResponse } // 매니저 시나리오 - public function managerScenario() + public function managerScenario(Request $request): View|Response { + if ($redirect = $this->handlePresentationPage($request, 'lab.management.manager-scenario')) { + return $redirect; + } return view('lab.management.manager-scenario'); } } diff --git a/app/Http/Controllers/Lab/StrategyController.php b/app/Http/Controllers/Lab/StrategyController.php index 1bb9ac5f..5de5e79f 100644 --- a/app/Http/Controllers/Lab/StrategyController.php +++ b/app/Http/Controllers/Lab/StrategyController.php @@ -3,6 +3,9 @@ namespace App\Http\Controllers\Lab; use App\Http\Controllers\Controller; +use Illuminate\Http\Request; +use Illuminate\Http\Response; +use Illuminate\View\View; /** * R&D Labs > S. 전략 메뉴 컨트롤러 @@ -10,6 +13,18 @@ */ class StrategyController extends Controller { + /** + * Presentation 레이아웃 페이지를 위한 HX-Redirect 처리 + * (presentation 레이아웃은 #main-content가 없어서 HTMX swap 불가) + */ + private function handlePresentationPage(Request $request, string $routeName): ?Response + { + if ($request->header('HX-Request')) { + return response('', 200)->header('HX-Redirect', route($routeName)); + } + return null; + } + /** * 세무 전략 (장기적 세무전략 프레젠테이션) */ @@ -35,18 +50,24 @@ public function debt() } /** - * 스테이블코인 보고서 + * 스테이블코인 보고서 (presentation layout) */ - public function stablecoin() + public function stablecoin(Request $request): View|Response { + if ($redirect = $this->handlePresentationPage($request, 'lab.strategy.stablecoin')) { + return $redirect; + } return view('lab.strategy.stablecoin'); } /** - * MRP 해외사례 + * MRP 해외사례 (presentation layout) */ - public function mrpOverseas() + public function mrpOverseas(Request $request): View|Response { + if ($redirect = $this->handlePresentationPage($request, 'lab.strategy.mrp-overseas')) { + return $redirect; + } return view('lab.strategy.mrp-overseas'); } @@ -115,10 +136,13 @@ public function confluenceVsNotion() } /** - * 차세대 QA 솔루션 + * 차세대 QA 솔루션 (presentation layout) */ - public function qaSolution() + public function qaSolution(Request $request): View|Response { + if ($redirect = $this->handlePresentationPage($request, 'lab.strategy.qa-solution')) { + return $redirect; + } return view('lab.strategy.qa-solution'); }