diff --git a/.omc/sessions/037169c7-72ba-4843-8e9a-417ca1423715.json b/.omc/sessions/037169c7-72ba-4843-8e9a-417ca1423715.json new file mode 100644 index 00000000..319727ce --- /dev/null +++ b/.omc/sessions/037169c7-72ba-4843-8e9a-417ca1423715.json @@ -0,0 +1,8 @@ +{ + "session_id": "037169c7-72ba-4843-8e9a-417ca1423715", + "ended_at": "2026-03-26T08:24:13.261Z", + "reason": "other", + "agents_spawned": 0, + "agents_completed": 0, + "modes_used": [] +} \ No newline at end of file diff --git a/.omc/sessions/8145031e-d7ea-4aa3-94d7-ddaa69383b8a.json b/.omc/sessions/8145031e-d7ea-4aa3-94d7-ddaa69383b8a.json new file mode 100644 index 00000000..2d90700f --- /dev/null +++ b/.omc/sessions/8145031e-d7ea-4aa3-94d7-ddaa69383b8a.json @@ -0,0 +1,8 @@ +{ + "session_id": "8145031e-d7ea-4aa3-94d7-ddaa69383b8a", + "ended_at": "2026-03-26T09:35:10.082Z", + "reason": "other", + "agents_spawned": 0, + "agents_completed": 0, + "modes_used": [] +} \ No newline at end of file diff --git a/frontend/app/(main)/design/change-management/page.tsx b/frontend/app/(main)/COMPANY_7/design/change-management/page.tsx similarity index 100% rename from frontend/app/(main)/design/change-management/page.tsx rename to frontend/app/(main)/COMPANY_7/design/change-management/page.tsx diff --git a/frontend/app/(main)/design/design-request/page.tsx b/frontend/app/(main)/COMPANY_7/design/design-request/page.tsx similarity index 100% rename from frontend/app/(main)/design/design-request/page.tsx rename to frontend/app/(main)/COMPANY_7/design/design-request/page.tsx diff --git a/frontend/app/(main)/design/my-work/page.tsx b/frontend/app/(main)/COMPANY_7/design/my-work/page.tsx similarity index 100% rename from frontend/app/(main)/design/my-work/page.tsx rename to frontend/app/(main)/COMPANY_7/design/my-work/page.tsx diff --git a/frontend/app/(main)/design/project/page.tsx b/frontend/app/(main)/COMPANY_7/design/project/page.tsx similarity index 100% rename from frontend/app/(main)/design/project/page.tsx rename to frontend/app/(main)/COMPANY_7/design/project/page.tsx diff --git a/frontend/app/(main)/design/task-management/page.tsx b/frontend/app/(main)/COMPANY_7/design/task-management/page.tsx similarity index 100% rename from frontend/app/(main)/design/task-management/page.tsx rename to frontend/app/(main)/COMPANY_7/design/task-management/page.tsx diff --git a/frontend/app/(main)/equipment/info/page.tsx b/frontend/app/(main)/COMPANY_7/equipment/info/page.tsx similarity index 100% rename from frontend/app/(main)/equipment/info/page.tsx rename to frontend/app/(main)/COMPANY_7/equipment/info/page.tsx diff --git a/frontend/app/(main)/logistics/material-status/page.tsx b/frontend/app/(main)/COMPANY_7/logistics/material-status/page.tsx similarity index 100% rename from frontend/app/(main)/logistics/material-status/page.tsx rename to frontend/app/(main)/COMPANY_7/logistics/material-status/page.tsx diff --git a/frontend/app/(main)/logistics/outbound/page.tsx b/frontend/app/(main)/COMPANY_7/logistics/outbound/page.tsx similarity index 100% rename from frontend/app/(main)/logistics/outbound/page.tsx rename to frontend/app/(main)/COMPANY_7/logistics/outbound/page.tsx diff --git a/frontend/app/(main)/logistics/packaging/page.tsx b/frontend/app/(main)/COMPANY_7/logistics/packaging/page.tsx similarity index 100% rename from frontend/app/(main)/logistics/packaging/page.tsx rename to frontend/app/(main)/COMPANY_7/logistics/packaging/page.tsx diff --git a/frontend/app/(main)/logistics/receiving/page.tsx b/frontend/app/(main)/COMPANY_7/logistics/receiving/page.tsx similarity index 100% rename from frontend/app/(main)/logistics/receiving/page.tsx rename to frontend/app/(main)/COMPANY_7/logistics/receiving/page.tsx diff --git a/frontend/app/(main)/master-data/department/page.tsx b/frontend/app/(main)/COMPANY_7/master-data/department/page.tsx similarity index 100% rename from frontend/app/(main)/master-data/department/page.tsx rename to frontend/app/(main)/COMPANY_7/master-data/department/page.tsx diff --git a/frontend/app/(main)/master-data/item-info/page.tsx b/frontend/app/(main)/COMPANY_7/master-data/item-info/page.tsx similarity index 100% rename from frontend/app/(main)/master-data/item-info/page.tsx rename to frontend/app/(main)/COMPANY_7/master-data/item-info/page.tsx diff --git a/frontend/app/(main)/outsourcing/subcontractor-item/page.tsx b/frontend/app/(main)/COMPANY_7/outsourcing/subcontractor-item/page.tsx similarity index 100% rename from frontend/app/(main)/outsourcing/subcontractor-item/page.tsx rename to frontend/app/(main)/COMPANY_7/outsourcing/subcontractor-item/page.tsx diff --git a/frontend/app/(main)/outsourcing/subcontractor/page.tsx b/frontend/app/(main)/COMPANY_7/outsourcing/subcontractor/page.tsx similarity index 100% rename from frontend/app/(main)/outsourcing/subcontractor/page.tsx rename to frontend/app/(main)/COMPANY_7/outsourcing/subcontractor/page.tsx diff --git a/frontend/app/(main)/production/plan-management/page.tsx b/frontend/app/(main)/COMPANY_7/production/plan-management/page.tsx similarity index 100% rename from frontend/app/(main)/production/plan-management/page.tsx rename to frontend/app/(main)/COMPANY_7/production/plan-management/page.tsx diff --git a/frontend/app/(main)/production/process-info/ItemRoutingTab.tsx b/frontend/app/(main)/COMPANY_7/production/process-info/ItemRoutingTab.tsx similarity index 100% rename from frontend/app/(main)/production/process-info/ItemRoutingTab.tsx rename to frontend/app/(main)/COMPANY_7/production/process-info/ItemRoutingTab.tsx diff --git a/frontend/app/(main)/production/process-info/ProcessMasterTab.tsx b/frontend/app/(main)/COMPANY_7/production/process-info/ProcessMasterTab.tsx similarity index 100% rename from frontend/app/(main)/production/process-info/ProcessMasterTab.tsx rename to frontend/app/(main)/COMPANY_7/production/process-info/ProcessMasterTab.tsx diff --git a/frontend/app/(main)/production/process-info/ProcessWorkStandardTab.tsx b/frontend/app/(main)/COMPANY_7/production/process-info/ProcessWorkStandardTab.tsx similarity index 100% rename from frontend/app/(main)/production/process-info/ProcessWorkStandardTab.tsx rename to frontend/app/(main)/COMPANY_7/production/process-info/ProcessWorkStandardTab.tsx diff --git a/frontend/app/(main)/production/process-info/page.tsx b/frontend/app/(main)/COMPANY_7/production/process-info/page.tsx similarity index 100% rename from frontend/app/(main)/production/process-info/page.tsx rename to frontend/app/(main)/COMPANY_7/production/process-info/page.tsx diff --git a/frontend/app/(main)/production/work-instruction/WorkStandardEditModal.tsx b/frontend/app/(main)/COMPANY_7/production/work-instruction/WorkStandardEditModal.tsx similarity index 100% rename from frontend/app/(main)/production/work-instruction/WorkStandardEditModal.tsx rename to frontend/app/(main)/COMPANY_7/production/work-instruction/WorkStandardEditModal.tsx diff --git a/frontend/app/(main)/production/work-instruction/page.tsx b/frontend/app/(main)/COMPANY_7/production/work-instruction/page.tsx similarity index 100% rename from frontend/app/(main)/production/work-instruction/page.tsx rename to frontend/app/(main)/COMPANY_7/production/work-instruction/page.tsx diff --git a/frontend/app/(main)/sales/claim/page.tsx b/frontend/app/(main)/COMPANY_7/sales/claim/page.tsx similarity index 100% rename from frontend/app/(main)/sales/claim/page.tsx rename to frontend/app/(main)/COMPANY_7/sales/claim/page.tsx diff --git a/frontend/app/(main)/sales/customer/page.tsx b/frontend/app/(main)/COMPANY_7/sales/customer/page.tsx similarity index 100% rename from frontend/app/(main)/sales/customer/page.tsx rename to frontend/app/(main)/COMPANY_7/sales/customer/page.tsx diff --git a/frontend/app/(main)/sales/order/page.tsx b/frontend/app/(main)/COMPANY_7/sales/order/page.tsx similarity index 100% rename from frontend/app/(main)/sales/order/page.tsx rename to frontend/app/(main)/COMPANY_7/sales/order/page.tsx diff --git a/frontend/app/(main)/sales/sales-item/page.tsx b/frontend/app/(main)/COMPANY_7/sales/sales-item/page.tsx similarity index 100% rename from frontend/app/(main)/sales/sales-item/page.tsx rename to frontend/app/(main)/COMPANY_7/sales/sales-item/page.tsx diff --git a/frontend/app/(main)/sales/shipping-order/page.tsx b/frontend/app/(main)/COMPANY_7/sales/shipping-order/page.tsx similarity index 100% rename from frontend/app/(main)/sales/shipping-order/page.tsx rename to frontend/app/(main)/COMPANY_7/sales/shipping-order/page.tsx diff --git a/frontend/app/(main)/sales/shipping-plan/page.tsx b/frontend/app/(main)/COMPANY_7/sales/shipping-plan/page.tsx similarity index 100% rename from frontend/app/(main)/sales/shipping-plan/page.tsx rename to frontend/app/(main)/COMPANY_7/sales/shipping-plan/page.tsx diff --git a/frontend/components/layout/AdminPageRenderer.tsx b/frontend/components/layout/AdminPageRenderer.tsx index 94813685..1472dbce 100644 --- a/frontend/components/layout/AdminPageRenderer.tsx +++ b/frontend/components/layout/AdminPageRenderer.tsx @@ -5,6 +5,7 @@ import dynamic from "next/dynamic"; import { Loader2 } from "lucide-react"; import { ScreenViewPageWrapper } from "@/app/(main)/screens/[screenId]/page"; import { apiClient } from "@/lib/api/client"; +import { useAuth } from "@/hooks/useAuth"; const LoadingFallback = () => (
@@ -91,23 +92,9 @@ const ADMIN_PAGE_REGISTRY: Record> = { "/admin/automaticMng/batchmngList": dynamic(() => import("@/app/(main)/admin/automaticMng/batchmngList/page"), { ssr: false, loading: LoadingFallback }), "/admin/automaticMng/crawlingList": dynamic(() => import("@/app/(main)/admin/automaticMng/crawlingList/page"), { ssr: false, loading: LoadingFallback }), - // 설계 관리 (커스텀 페이지) - "/design/task-management": dynamic(() => import("@/app/(main)/design/task-management/page"), { ssr: false, loading: LoadingFallback }), - "/design/my-work": dynamic(() => import("@/app/(main)/design/my-work/page"), { ssr: false, loading: LoadingFallback }), - "/design/design-request": dynamic(() => import("@/app/(main)/design/design-request/page"), { ssr: false, loading: LoadingFallback }), + // 회사별 커스텀 페이지는 레지스트리에서 제거 — 회사코드 prefix로 자동 import 처리 + // (design, sales, production, logistics, equipment, outsourcing, master-data) - // 영업 관리 (커스텀 페이지) - "/sales/shipping-plan": dynamic(() => import("@/app/(main)/sales/shipping-plan/page"), { ssr: false, loading: LoadingFallback }), - "/sales/shipping-order": dynamic(() => import("@/app/(main)/sales/shipping-order/page"), { ssr: false, loading: LoadingFallback }), - - // 생산 관리 (커스텀 페이지) - "/production/work-instruction": dynamic(() => import("@/app/(main)/production/work-instruction/page"), { ssr: false, loading: LoadingFallback }), - - // 물류 관리 (커스텀 페이지) - "/logistics/material-status": dynamic(() => import("@/app/(main)/logistics/material-status/page"), { ssr: false, loading: LoadingFallback }), - - // 설계 관리 (커스텀 페이지) - "/design/change-management": dynamic(() => import("@/app/(main)/design/change-management/page"), { ssr: false, loading: LoadingFallback }), "/admin/automaticMng/exconList": dynamic(() => import("@/app/(main)/admin/automaticMng/exconList/page"), { ssr: false, loading: LoadingFallback }), "/admin/automaticMng/exCallConfList": dynamic(() => import("@/app/(main)/admin/automaticMng/exCallConfList/page"), { ssr: false, loading: LoadingFallback }), @@ -292,10 +279,34 @@ interface AdminPageRendererProps { url: string; } +// 회사별 커스텀 페이지 경로 prefix 목록 +// 이 prefix로 시작하는 URL은 회사코드 폴더에서 로드 +const COMPANY_PAGE_PREFIXES = [ + "/sales/", + "/master-data/", + "/production/", + "/equipment/", + "/logistics/", + "/outsourcing/", + "/design/", +]; + +function isCompanyPage(url: string): boolean { + return COMPANY_PAGE_PREFIXES.some((prefix) => url.startsWith(prefix)); +} + export function AdminPageRenderer({ url }: AdminPageRendererProps) { + const { user } = useAuth(); + const companyCode = user?.companyCode || user?.company_code; const cleanUrl = url.split("?")[0].split("#")[0].replace(/\/$/, ""); - console.log("[AdminPageRenderer] 렌더링:", { url, cleanUrl }); + // 회사별 커스텀 페이지: companyCode를 prefix로 붙여 경로 변환 + // 예: /sales/order → /COMPANY_7/sales/order + const resolvedUrl = (companyCode && isCompanyPage(cleanUrl)) + ? `/${companyCode}${cleanUrl}` + : cleanUrl; + + console.log("[AdminPageRenderer] 렌더링:", { url, cleanUrl, resolvedUrl, companyCode }); // 화면 할당: /screens/[id] const screensIdMatch = cleanUrl.match(/^\/screens\/(\d+)$/); @@ -318,7 +329,7 @@ export function AdminPageRenderer({ url }: AdminPageRendererProps) { return ; } - // URL 직접 입력: 레지스트리 매칭 + // URL 직접 입력: 레지스트리 매칭 (admin 페이지 등 공통 페이지) const PageComponent = useMemo(() => { return ADMIN_PAGE_REGISTRY[cleanUrl] || null; }, [cleanUrl]); @@ -340,6 +351,7 @@ export function AdminPageRenderer({ url }: AdminPageRendererProps) { } // 레지스트리/패턴에 없으면 DynamicAdminLoader가 자동 import 시도 - console.log("[AdminPageRenderer] → 자동 import 시도:", cleanUrl); - return ; + // 회사별 페이지는 resolvedUrl로 import (예: COMPANY_7/sales/order/page) + console.log("[AdminPageRenderer] → 자동 import 시도:", resolvedUrl); + return ; }