fix:presentation 레이아웃 페이지 HTMX targetError 수정 (HX-Redirect 추가)

This commit is contained in:
pro
2026-01-21 20:52:45 +09:00
parent fd171453cf
commit 278940142b
2 changed files with 85 additions and 17 deletions

View File

@@ -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');
}
}

View File

@@ -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');
}