refactor: unify bag and admin layout routing

This commit is contained in:
taekyoungc
2026-04-08 00:18:01 +09:00
parent 5b0c3fac97
commit 89f80edc5d
15 changed files with 832 additions and 354 deletions

View File

@@ -0,0 +1,41 @@
<?php
declare(strict_types=1);
namespace App\Controllers\Admin;
use App\Controllers\BaseController;
/**
* 구 관리자 업무 URL(admin/…) → 메인 사이트 업무 URL(bag/…) 영구 이전.
* POST 폼은 307로 메서드·본문 유지를 시도하고, GET 은 301.
*/
class WorkMovedToBag extends BaseController
{
public function toBag(string $prefix, string $rest = ''): \CodeIgniter\HTTP\RedirectResponse
{
$rest = trim($rest, '/');
if ($prefix === 'packaging-units') {
$path = 'packaging-units/manage';
if ($rest !== '') {
$path .= '/' . $rest;
}
} else {
$path = $prefix;
if ($rest !== '') {
$path .= '/' . $rest;
}
}
$target = site_url('bag/' . $path);
$query = $this->request->getUri()->getQuery();
if ($query !== '') {
$target .= '?' . $query;
}
$code = $this->request->getMethod() === 'post' ? 307 : 301;
return redirect()->to($target)->setStatusCode($code);
}
}

View File

@@ -42,4 +42,31 @@ abstract class BaseController extends Controller
// Preload any models, libraries, etc, here.
// $this->session = service('session');
}
/**
* /admin/* 또는 /bag/* 업무 화면 공통: 요청이 bag 이면 메인 사이트 레이아웃, 아니면 관리자 레이아웃.
*
* @param array<string, mixed> $contentData
*/
protected function renderWorkPage(string $title, string $contentView, array $contentData = []): string
{
$content = view($contentView, $contentData);
$uri = service('request')->getUri();
$seg1 = $uri->getSegment(1);
$seg2 = $uri->getSegment(2);
// 지정판매소 관리는 관리자 전용 기능으로, /bag 경로여도 관리자 레이아웃을 유지한다.
$forceAdminLayoutOnBag = ($seg1 === 'bag' && $seg2 === 'designated-shops');
if ($seg1 === 'bag' && ! $forceAdminLayoutOnBag) {
return view('bag/layout/main', [
'title' => $title,
'content' => $content,
]);
}
return view('admin/layout', [
'title' => $title,
'content' => $content,
]);
}
}

View File

@@ -16,11 +16,16 @@ class Home extends BaseController
}
/**
* 로그인 후 원래 메인 화면 (admin 유사 레이아웃 + site 메뉴 호버 드롭다운)
* 로그인 후 메인 — site 메뉴 레이아웃 + 종합·그래프(blend) 본문
*/
public function dashboard()
{
return view('bag/daily_inventory');
return view('bag/layout/main', [
'title' => '업무 현황 · 종합·그래프',
'content' => view('bag/dashboard_blend_inner', [
'lgLabel' => $this->resolveLgLabel(),
]),
]);
}
/**
@@ -62,13 +67,11 @@ class Home extends BaseController
}
/**
* dense(표·KPI) + charts(Chart.js) 혼합. URL: /dashboard/blend
* /dashboard 와 동일 본문(호환 URL)
*/
public function dashboardBlend()
{
return view('bag/lg_dashboard_blend', [
'lgLabel' => $this->resolveLgLabel(),
]);
return $this->dashboard();
}
/**
@@ -114,4 +117,5 @@ class Home extends BaseController
return '북구 (데모)';
}
}