ResizeObserver로 실제 컨테이너 픽셀 크기를 감지하여
숫자·라벨·단위 폰트 크기를 동적으로 계산한다.
기존 고정 @container Tailwind 브레이크포인트 방식 대체.
- 숫자: 컨테이너 높이의 42~62% (표시 요소 수에 따라 조정)
- 너비 기준 35% 캡으로 가로로 매우 넓은 셀도 적절히 제한
- 라벨: 높이의 13%, 단위: 숫자의 40%, 추세: 높이의 9%
- valueFontSize(xs/sm/base/lg/xl)는 전체 배율로 계속 동작
- ItemStyleConfig에 valueFontSize 옵션 추가 (xs/sm/base/lg/xl)
- KpiCard: valueFontSize에 따라 숫자/단위/라벨 크기 일괄 조정
- 단위 표시: kpiConfig.unit 우선, item.unit fallback 지원 (레거시 호환)
- DashboardItem 타입에 unit, subLabel 최상위 필드 추가 (기존 데이터 호환)
- 4479 화면 config 업데이트: valueFontSize=xl, kpiConfig.unit 설정
- types.ts: PlcDataConfig 인터페이스 추가, ResultSectionConfig에 plcConfig 필드 추가
- PopWorkDetailConfig.tsx: PLC 데이터 설정 패널 구현
- 외부 DB 연결 선택 -> 테이블 -> 컬럼 순차 선택
- 디바이스/태그 유니크값 자동 조회
- 표시 설정 (라벨, 단위, 갱신주기, 표시방식)
- 매핑 저장 설정 (대상 테이블/컬럼, 모드)
- PopWorkDetailComponent.tsx: PLC 데이터 런타임 표시 구현
- 외부 DB에서 값 주기적 폴링
- 큰 숫자/게이지 표시 + PLC 자동 배지
- 수동 입력 fallback 제공
- 매핑 저장 ON 시 값 변경 시 대상 테이블에 저장
POP 프로필 팝오버에 "앱 모드" 메뉴를 추가한다.
Fullscreen API로 브라우저를 전체화면 전환하여 앱처럼 사용 가능.
- showAppMode 설정 옵션 추가 (기본 활성화)
- 풀스크린 진입: document.documentElement.requestFullscreen()
- 풀스크린 해제: document.exitFullscreen()
- 상태에 따라 아이콘/텍스트 전환 (Maximize2/Minimize2, 앱 모드/앱 모드 해제)
- fullscreenchange 이벤트 리스너로 상태 동기화
- 디자이너 설정 패널에 "앱 모드 (풀스크린)" 토글 추가
리서치 반영 UX 구조 대폭 변경:
- 좌측 사이드바(220px) → 상단 탭 바(48px)로 전환 (작업 전|작업 중|작업 후|실적)
- 탭마다 진행률 표시 (예: "작업 전 2/5")
- 고정 헤더: 진한 배경(#263238) + 흰색 텍스트로 작업 정보 표시
- KPI 카드 상시 표시: 접수량/작업완료/잔여/불량 (40px bold, 색상 구분)
- 고정 풋터 액션바: 일시정지(황)/불량등록(적)/작업완료(녹) 3버튼
- 작업완료 2단계 확인 (클릭 → "정말 완료?" 확인)
- 배경색 #F5F5F5 (공장 조명 눈부심 방지)
- 체크리스트 행: 좌측 상태 바 (완료=녹, 필수=적, 기본=회)
- ChecklistRowItem 래퍼로 행 전체 터치 영역 + 시각 피드백
- DESIGN 토큰 확장: tab, footer, header, kpi, bg 추가
- COLORS 확장: kpiInput, kpiComplete, kpiRemaining, kpiDefect 추가
- step 모드와 list 모드 모두 탭 구조 안에서 정상 동작
cart_items.row_data에서 코드값(partner_id)을 추출한 후
참조 테이블(customer_mng)에서 표시값(customer_name)을 조회하는
json_extract_lookup 기능을 추가한다.
화면 4579(출고 확정)에서 거래처명이 표시되지 않는 문제를 해결한다.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
출고(판매/기타/외주) 전용 카드 리스트 컴포넌트를 신규 생성한다.
- 세로형 카드 레이아웃: 헤더 + 스탯 그리드 + 수량 입력 + 담기/취소
- ISA-101 산업 현장 디자인 토큰 (56px 버튼, 36px 숫자)
- useCartSync 훅 연동, 이벤트 버스 filter/collect/save 지원
- 디자이너 설정 패널 3탭 (데이터/카드/장바구니)
- React key prop fallback 패턴 적용 (sf.id || idx)
- PopComponentType, ComponentPalette, PopRenderer 레지스트리 등록
- @playwright/test devDependency 추가
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
검색어 입력 시 activeFilterTab(초성/알파벳) 필터가 동시 적용되어
검색 결과가 현재 탭 내로 제한되던 문제를 수정한다.
searchText가 있으면 필터 탭을 무시하고 전체 데이터에서 검색한다.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
POP MES 전용 카드 + 디자인 감사 + 장바구니 분리 + 체크리스트/실적 관리 기능을 main에 통합한다.
주요 병합 내용:
- mes-process-card 전용 카드 + batch_done 워크플로우 + 실적 관리 강화
- MES 불량 처분 체계(disposition 3종) + 공정 흐름 스트립 필/칩 UI 개편
- MES 다중작업자 분할접수 4대 연쇄 버그 근본 해결
- MES 체크리스트 자동 복사 + 구조적 버그 3건 수정
- MES 카드 산업용 태블릿 UI 리디자인 (10인치 터치 최적화)
- MES 상태 탭 카드 내장 + pop-search 레거시 정리 + 하위 테이블 자동 판단
- pop-card-list-v2 설정 패널 MES 간소화 + 내 작업 표시 3모드
- BLOCK DETAIL Phase 4: 그룹별 타이머, 터치 최적화 UI, DB 저장 버그 수정
- POP 디자인 감사 + WYSIWYG 정렬 + MES/장바구니 분리
- POP 장바구니 입고 워크플로우 수정 및 접근성/UX 개선
- POP 뷰어 헤더 제거 + 디자이너-뷰어 그리드 칸 수 불일치 수정
- PopFieldConfig JsonKeySelect 개선
충돌 해결: 1건 (.gitignore - 양쪽 추가 항목 통합)
장바구니(cart) 기반 구매입고 흐름에서 버튼 동작, 검색 접근성,
필터 안내 메시지 기능을 수정하여 실제 운영 시나리오에서의
안정성을 확보한다.
[pop-button 장바구니 모드 판단 수정]
- isCartMode: v1 preset뿐 아니라 v2 tasks에 cart-save가 포함된
경우에도 장바구니 모드로 인식하도록 개선
- resolvedCartScreenId: v2 tasks의 cartScreenId도 참조
- 장바구니 모드 분기를 v2 tasks 처리보다 먼저 실행하여
cart-save 버튼이 정상 동작하도록 순서 변경
[pop-search 아이콘 카드 접근성]
- IconView의 div 카드에 role="button", tabIndex={0},
onKeyDown(Enter/Space) 추가
- 브라우저 자동화 및 키보드 사용자가 아이콘 카드를
인터랙티브 요소로 인식 가능
[필터 필수 안내 메시지 기능]
- pop-card-list(장바구니 목록): requireFilter, requireFilterMessage
설정 추가, 필터 미선택 시 커스텀 안내 문구 표시
- pop-card-list-v2(MES 공정흐름): hideUntilFilteredMessage
설정 추가, 기존 필터 전 숨김에 커스텀 문구 지원
- 양쪽 설정 패널에 안내 문구 입력 UI 추가
[원본 화면 선택 Combobox 전환]
- PopCardListConfig 장바구니 모드의 원본 화면 선택을
Select에서 검색 가능한 Combobox로 변경
- 로그인 계정의 companyCode로 화면 목록 필터링 적용
- V2WebView 컴포넌트: iframe 기반 외부 웹 임베딩
- SSO 연동: 현재 로그인 JWT를 sso_token 파라미터로 자동 전달
- /api/system/raw-token: 범용 JWT 토큰 조회 API
- V2WebViewConfigPanel: URL, SSO, sandbox 등 설정 UI + 개발자 가이드
Made-with: Cursor
- Implemented a new API endpoint for retrieving BOM materials based on item codes, enhancing the ability to manage and view component materials.
- Added necessary SQL queries to fetch BOM details, ensuring that the data is filtered by company code for multi-tenancy support.
- Updated frontend components to integrate BOM materials fetching, allowing for better visibility and management of materials in the process workflow.
These changes aim to streamline the management of BOM materials, facilitating better tracking and organization within the application.
별도 pop-status-bar 컴포넌트 배치/연결 없이 카드 상단에
MES 고정 상태 탭(전체/대기/접수가능/진행/완료)을 내장한다.
[내장 상태 탭 UI]
- MES_STATUS_TABS 상수: waiting/acceptable/in_progress/completed 고정
- 카드 그리드 상단에 pill 형태 탭 렌더링
- 상태별 카운트 + "전체"는 클론 제외 originalCount 표시
- showStatusTabs && hasProcessFlow 조건부 표시
[자체 카운트/필터]
- statusCounts useMemo: filteredRows 기준 VIRTUAL_SUB_STATUS 집계
- statusFilteredRows useMemo: 선택 탭으로 내부 필터
- displayCards/hasMoreCards/totalPages가 statusFilteredRows 기준으로 동작
- 탭 전환 시 currentPage=1 리셋
[외부 status-bar 하위 호환]
- effectiveExternalFilters: showStatusTabs일 때 _source="status-bar"
필터 무시 (내장 탭으로 대체, 충돌 방지)
- all_rows 이벤트 발행 유지 (기존 pop-status-bar 연결 안 깨짐)
- rowsForStatusCount: showStatusTabs일 때 filteredRows 직접 반환
[설정 패널]
- 고급 설정에 "상태 탭 내장" Switch 토글 추가
- showStatusTabs?: boolean 타입 추가 (기본 false)
MES 고정 구조에 맞게 검색/연결/필터 컴포넌트를 간소화하고,
하위 테이블 필터를 수동 설정에서 자동 판단으로 전환한다.
[pop-search 레거시 정리]
- LegacySearchInputType, StatusChipConfig, StatusChipStyle,
SelectDataSource 등 미사용 타입 제거
- status-chip, multi-select, combo 입력 타입 제거
(DB 호환: normalizeInputType에서 text로 정규화)
- 설정 패널에서 status-chip 관련 UI/안내문 제거
- SEARCH_INPUT_TYPE_LABELS 간소화 (7종 -> 5종)
[하위 테이블 자동 판단]
- PopCardListV2Component: subTableKeys useMemo 추가
(processFlow rawData 키셋에서 하위 테이블 컬럼 자동 추출)
- isSubTableColumn useCallback: filterConfig.isSubTable 하위 호환 +
subTableKeys 기반 자동 판단으로 메인/하위 필터 분류
- ConnectionEditor: "하위 테이블 기준으로 필터" 체크박스 UI 제거,
isSubTable 상태 및 setIsSubTable 전부 제거
- 컬럼 선택 드롭다운: 메인+하위 테이블 컬럼 통합 표시
- 기존 연결 배지 "하위 테이블" -> "자동 판단"으로 변경
[초기값 프로필 세팅]
- PopSearchConfig.initialValueSource 타입 추가
({ type: "user_profile", column: string })
- PopSearchComponent: useAuth + useEffect로 사용자 프로필 값
자동 필터 발행 (userId, deptCode, positionCode 등)
- 설정 패널: "초기값 자동 세팅" Select 드롭다운 추가
(사용 안 함 / 사용자ID / 부서코드 / 직급 등 7개 옵션)
MES 고정 구조에 맞게 설정 패널을 간소화하고, 작업상세 내장 모달과
작업자 기반 카드 필터링 기능을 추가한다.
[설정 패널 간소화]
- 3탭(데이터/디자인/동작) -> 2탭(정보/동작)으로 축소
- "정보" 탭: 데이터 소스, 카드 구성, 클릭 동작을 읽기 전용 요약으로 표시
- "동작" 탭: cardClickAction 선택(none/modal-open/built-in-work-detail)
+ 내 작업 표시 + 고급 설정(필터 전 숨김, 기본 표시 수) 유지
- PopWorkDetailConfigPanel을 카드 설정에서 분리
(작업상세 컴포넌트 자체 설정 패널에서 관리)
[Core Binding 내장 모달]
- cardClickAction="built-in-work-detail" 시 내부 Dialog로
PopWorkDetail 직접 렌더링, parentRow를 prop으로 전달
- LazyPopWorkDetail dynamic import로 성능 최적화
- in_progress 상태 카드만 상세 모달 열림
[카드 열 수 선택]
- 정보 탭 상단에 1열/2열/3열/4열 버튼 UI 추가
- gridColumns 설정 즉시 반영
[내 작업 표시 3모드]
- 전체 보기: 모든 카드 동등 표시
- 우선 표시: 내 카드 상단 + 다른 카드 비활성화(기존 동작)
- 내 작업만: worker 컬럼 기준 내 카드만 표시, 나머지 숨김
- ownerFilterMode("priority"|"only") 타입 추가, 컬럼 선택 드롭다운
제거하고 worker 고정 토글로 단순화
- Modified the logic in the V2Repeater component to determine required fields based on the isNullable property, enhancing validation accuracy.
- Updated the RepeaterTable component to visually indicate required fields with an asterisk, improving user awareness during data entry.
These changes aim to enhance data validation and user experience by ensuring that required fields are clearly marked and accurately validated.
분할 접수/재작업 카드 생성 시 체크리스트가 복사되지 않던 문제를 해결하고,
공정 흐름 모달과 카드 클릭 이벤트 격리 버그를 수정한다.
[체크리스트 자동 복사]
- copyChecklistToSplit 공통 헬퍼 함수 추출
(createWorkProcesses/acceptProcess/saveResult 3곳에서 통합 사용)
- routing_detail_id 존재 시: process_work_item 템플릿에서 복사
- routing_detail_id 부재 시: 마스터 process_work_result에서 구조만 복사
[ChecklistItem 렌더링 수정]
- 레거시 detail_type(inspect_numeric/inspect_ox 등)을 정규화하여
detail_type=inspect + input_type 자동 파싱으로 InspectRouter 라우팅
- info 타입 렌더러 추가
[공정 흐름 모달 이벤트 격리]
- Dialog 래퍼에 onClick/onPointerDown stopPropagation 추가
(모달 닫기 시 부모 카드 onClick 전파 차단)
[카드 클릭 진행 탭 제한]
- handleCardSelect에 VIRTUAL_SUB_STATUS 코드 가드 추가
(in_progress가 아닌 카드는 작업상세 모달 열림 차단)
- 재작업 카드 포함 접수가능 탭에서 상세 진입 방지
- Removed the check for record mode in the FileUploadComponent, streamlining the file loading process.
- Updated the dependency array in the useEffect hook to exclude isRecordMode, ensuring cleaner and more efficient component behavior.
These changes aim to enhance the clarity and maintainability of the FileUploadComponent, improving overall functionality.
- Added mes-architecture-guide.md to .gitignore to prevent unnecessary tracking.
- Enhanced NodeFlowExecutionService to merge context data for WHERE clause, improving query accuracy.
- Updated logging to include values in SQL query logs for better debugging.
- Removed redundant event dispatches in V2Repeater to streamline save operations.
- Adjusted DynamicComponentRenderer to conditionally refresh keys based on component type.
- Improved FileUploadComponent to clear localStorage only for modal components, preventing unintended resets in non-modal contexts.
These changes aim to enhance the overall functionality and maintainability of the application, ensuring better data handling and user experience.
- Added planDate support in batch save operations for shipping plans, allowing for more accurate scheduling.
- Updated the ShippingPlanEditorComponent to handle planDate and splitKey for better management of shipping plans.
- Enhanced validation logic to ensure that the total planned quantity does not exceed available stock during the editing process.
- Introduced functionality to add and remove split rows dynamically, improving user experience in managing shipping plans.
These changes aim to provide a more robust and flexible shipping plan management experience, facilitating better tracking and scheduling of shipping operations.
- Added shipping plan routes and controller to handle aggregate and batch save operations.
- Introduced a new shipping plan editor component for bulk registration of shipping plans based on selected orders.
- Enhanced API client functions for fetching aggregated shipping plan data and saving plans in bulk.
- Updated the registry to include the new shipping plan editor component, improving the overall shipping management workflow.
These changes aim to streamline the shipping plan process, allowing for efficient management and registration of shipping plans in the application.
분할 카드 접수량 오표시(800), 모달 접수량 0, 실적등록 미반영,
접수취소 실패의 근본 원인을 분석하고 4건의 수정을 적용한다.
근본 원인: acceptProcess에서 마스터를 in_progress로 변경 ->
프론트 isCurrent가 코팅(acceptable)을 잡음 -> 분할 카드 미생성
-> 마스터ID로 API 호출하여 모든 후속 동작이 실패하는 연쇄 구조.
[Fix A] acceptProcess: 마스터 상태를 in_progress로 변경하는 로직 제거
- 마스터는 항상 acceptable 유지, completed로만 전환
[Fix B] buildProcessSteps: isCurrent 결정 시 활성 분할 행 우선
- in_progress 등 비완료 분할이 있는 공정을 최우선 선택
- 분할 카드(__splitProcessId)가 정상 생성되도록 보장
[Fix C] applySubFilterAndDuplicate: 분할 카드 데이터 보호
- __splitProcessId가 있는 카드의 __process_* 필드를
마스터 SUM 집계값으로 덮어쓰지 않음
[Fix D] saveResult: 마스터 행 직접 실적등록 차단
- 분할 행이 존재하는 마스터에 실적 등록 시 400 에러 반환
- Updated ButtonPrimaryComponent to automatically inject source_table and source_id for better data tracking.
- Implemented logic to conditionally include source tracking information based on the presence of sourceTableName and row.id.
- This enhancement aims to improve data integrity and traceability during data mapping processes, facilitating better integration of source information in the application.
- Updated ButtonPrimaryComponent to utilize entity join metadata for improved data mapping.
- Introduced getEntityJoinColumns method in TableListComponent to retrieve entity join column metadata.
- Enhanced applyMappingRules function to support optional entity join columns, allowing for more flexible data resolution.
- Added utility functions to build join alias maps and resolve values from entity joins, improving data handling capabilities.
These enhancements aim to provide a more robust and dynamic data mapping experience, facilitating better integration of entity relationships in the application.
MES 카드를 CSS Grid 다중 셀 방식에서 Flexbox 기반 단일 전용 카드(mes-process-card)로
전환하고, batch_done 상태를 도입하여 부분 확정 후 추가접수 워크플로우를 구현한다.
[mes-process-card 전용 카드]
- CardCellType "mes-process-card" 신규: 상태별 좌측 보더+배경, 공정 흐름 스트립, 클릭 모달
- MesAcceptableMetrics / MesInProgressMetrics / MesCompletedMetrics 서브 컴포넌트
- 워크플로우 기반 activeBtn 결정 로직 (상태+잔여량 조합으로 버튼 1개만 표시)
- 하드코딩 취소 버튼 제거, DB 설정 "접수취소" 라벨 인터셉트로 통합
[batch_done 워크플로우]
- confirmResult API: 부분 확정 시 status = 'batch_done' (진행 탭 숨김 + 접수가능 탭 유지)
- acceptProcess API: batch_done -> in_progress 복귀 (추가접수)
- 카드 복제 로직에 batch_done 포함 (잔여량 있으면 접수가능 탭에 클론 카드)
- status 매핑에 batch_done 추가 (semantic: active)
[실적 관리 강화]
- PopWorkDetailComponent: 실적 입력 UI 전면 구현 (차수별 등록, 누적 실적, 이력 표시)
- 모든 실적 저장 시 process_completed 이벤트 발행 (카드 리스트 즉시 갱신)
- 전량접수+전량생산 시 자동 완료 (status=completed, result_status=confirmed)
[버그 수정]
- 서브 필터 변경 시 __process_* 필드 미갱신 -> processFields 재주입
- cancelAccept SQL inconsistent types -> boolean 파라미터 분리
- 접수취소 라벨 매핑 누락 -> taskPreset 조건 확장
- Introduced a new TableCombobox component for selecting tables, improving user experience by allowing table searches and selections.
- Added a ColumnCombobox component to facilitate column selection based on the chosen table, enhancing the configurability of the process work standard settings.
- Updated the V2ProcessWorkStandardConfigPanel to utilize the new combobox components, streamlining the configuration process for item tables and columns.
- Removed the deprecated mcp.json file and updated .gitignore to reflect recent changes.
These enhancements aim to improve the usability and flexibility of the configuration panel, making it easier for users to manage their process work standards.