feat(WEB): 자재/출고/생산/품질/단가 기능 대폭 개선 및 신규 페이지 추가

자재관리:
- 입고관리 재고조정 다이얼로그 신규 추가, 상세/목록 기능 확장
- 재고현황 컴포넌트 리팩토링

출고관리:
- 출하관리 생성/수정/목록/상세 개선
- 차량배차관리 상세/수정/목록 기능 보강

생산관리:
- 작업지시서 WIP 생산 모달 신규 추가
- 벤딩WIP/슬랫조인트바 검사 콘텐츠 신규 추가
- 작업자화면 기능 대폭 확장 (카드/목록 개선)
- 검사성적서 모달 개선

품질관리:
- 실적보고서 관리 페이지 신규 추가
- 검사관리 문서/타입/목데이터 개선

단가관리:
- 단가배포 페이지 및 컴포넌트 신규 추가
- 단가표 관리 페이지 및 컴포넌트 신규 추가

공통:
- 권한 시스템 추가 개선 (PermissionContext, usePermission, PermissionGuard)
- 메뉴 폴링 훅 개선, 레이아웃 수정
- 모바일 줌/패닝 CSS 수정
- locale 유틸 추가

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
유병철
2026-02-04 12:46:19 +09:00
parent 17c16028b1
commit c1b63b850a
70 changed files with 6832 additions and 384 deletions

View File

@@ -46,6 +46,7 @@ import CommandMenuSearch, { type CommandMenuSearchRef } from '@/components/layou
import { useTheme } from '@/contexts/ThemeContext';
import { useAuth } from '@/contexts/AuthContext';
import { deserializeMenuItems } from '@/lib/utils/menuTransform';
import { stripLocalePrefix } from '@/lib/utils/locale';
import { useMenuPolling } from '@/hooks/useMenuPolling';
import {
Select,
@@ -415,7 +416,7 @@ export default function AuthenticatedLayout({ children }: AuthenticatedLayoutPro
if (!pathname || menuItems.length === 0) return;
// 경로 정규화 (로케일 제거)
const normalizedPath = pathname.replace(/^\/(ko|en|ja)/, '');
const normalizedPath = stripLocalePrefix(pathname);
// 메뉴 탐색 함수: 메인 메뉴와 서브메뉴 모두 탐색
// 경로 매칭: 정확히 일치하거나 하위 경로인 경우만 매칭
@@ -668,7 +669,7 @@ export default function AuthenticatedLayout({ children }: AuthenticatedLayoutPro
// 모바일 레이아웃
if (isMobile) {
return (
<div className="flex flex-col bg-background min-h-screen" style={{ height: 'var(--app-height)' }}>
<div className="flex flex-col bg-background min-h-screen">
{/* 모바일 헤더 - sam-design 스타일 */}
<header className="clean-glass sticky top-0 z-40 px-1.5 py-1.5 m-1.5 min-[320px]:px-2 min-[320px]:py-2 min-[320px]:m-2 sm:px-4 sm:py-4 sm:m-3 rounded-2xl clean-shadow">
<div className="flex items-center justify-between">
@@ -942,7 +943,7 @@ export default function AuthenticatedLayout({ children }: AuthenticatedLayoutPro
</header>
{/* 모바일 콘텐츠 */}
<main className="flex-1 overflow-y-auto px-3 overscroll-contain" style={{ WebkitOverflowScrolling: 'touch', touchAction: 'pan-y pinch-zoom' }}>
<main className="flex-1 px-3">
{children}
</main>