feat(WEB): API 인프라 리팩토링, CEO 대시보드 현황판 개선 및 문서 시스템 강화

- API: fetch-wrapper/proxy/refresh-token 리팩토링, authenticated-fetch 신규 추가
- CEO 대시보드: EnhancedSections 현황판 기능 개선, dashboard transformers/types 확장
- 문서 시스템: ApprovalLine/DocumentHeader/DocumentToolbar/DocumentViewer 개선
- 작업지시서: 검사보고서/작업일지 문서 컴포넌트 개선 (벤딩/스크린/슬랫)
- 레이아웃: Sidebar/AuthenticatedLayout 수정
- 작업자화면: WorkerScreen 수정

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
유병철
2026-01-30 14:16:17 +09:00
parent a486977b80
commit 3ef9570f3b
27 changed files with 554 additions and 451 deletions

View File

@@ -1,4 +1,4 @@
import { ChevronRight, Circle } from 'lucide-react';
import { ChevronRight, ChevronsDownUp, ChevronsUpDown, Circle } from 'lucide-react';
import type { MenuItem } from '@/store/menuStore';
import { useEffect, useRef } from 'react';
@@ -10,6 +10,7 @@ interface SidebarProps {
isMobile: boolean;
onMenuClick: (menuId: string, path: string) => void;
onToggleSubmenu: (menuId: string) => void;
onToggleAll?: () => void;
onCloseMobileSidebar?: () => void;
}
@@ -245,6 +246,7 @@ export default function Sidebar({
isMobile,
onMenuClick,
onToggleSubmenu,
onToggleAll,
onCloseMobileSidebar,
}: SidebarProps) {
// 활성 메뉴 자동 스크롤을 위한 ref
@@ -274,8 +276,27 @@ export default function Sidebar({
sidebarCollapsed ? 'px-2 py-2' : 'px-3 py-4 md:px-4 md:py-4'
}`}
>
{/* 전체 열기/닫기 토글 버튼 - 사이드바 펼침 상태에서만 표시 */}
{!sidebarCollapsed && onToggleAll && (
<button
onClick={onToggleAll}
className="w-full flex items-center space-x-2 px-3 py-2 rounded-lg text-xs text-muted-foreground hover:bg-accent hover:text-foreground transition-all duration-200"
>
{expandedMenus.length > 0 ? (
<>
<ChevronsDownUp className="h-3.5 w-3.5 flex-shrink-0" />
<span> </span>
</>
) : (
<>
<ChevronsUpDown className="h-3.5 w-3.5 flex-shrink-0" />
<span> </span>
</>
)}
</button>
)}
<div className={`transition-all duration-300 ${
sidebarCollapsed ? 'space-y-1 mt-2' : 'space-y-1.5 mt-3'
sidebarCollapsed ? 'space-y-1 mt-2' : 'space-y-1.5 mt-1'
}`}>
{menuItems.map((item) => (
<MenuItemComponent