장바구니(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로 화면 목록 필터링 적용
별도 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 고정 토글로 단순화
분할 접수/재작업 카드 생성 시 체크리스트가 복사되지 않던 문제를 해결하고,
공정 흐름 모달과 카드 클릭 이벤트 격리 버그를 수정한다.
[체크리스트 자동 복사]
- 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가 아닌 카드는 작업상세 모달 열림 차단)
- 재작업 카드 포함 접수가능 탭에서 상세 진입 방지
분할 카드 접수량 오표시(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 에러 반환
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 조건 확장
pop-work-detail 컴포넌트에 그룹별 타이머 시스템과 터치 최적화 UI를 추가하고,
체크리스트 결과가 DB에 저장되지 않던 버그를 수정하여 안정화를 완료한다.
[그룹별 타이머]
- group-timer API 신규: start/pause/resume/complete 액션 (popProductionController)
- process_work_result에 group_started_at/paused_at/total_paused_time/completed_at 활용
- GroupTimerHeader UI: 순수 작업시간 + 경과시간 이중 표시
- 첫 그룹 "시작" 시 work_order_process.started_at 자동 기록 (공정 시작 자동 감지)
- 공정 완료 시 actual_work_time을 그룹 타이머 합산으로 백엔드 자동 계산
[터치 최적화 UI]
- 12개 영역 전면 스케일업: 버튼 h-11~h-12, 입력 h-11, 체크박스 h-6 w-6
- 사이드바 w-[180px], InfoBar text-sm, 최소 터치 영역 40~44px 확보
- 산업 현장 태블릿 터치 사용 최적화
[DB 저장 버그 수정]
- saveResultValue/handleQuantityRegister: execute-action task 형식 수정
(fixedValue + lookupMode:"manual" + manualItemField/manualPkColumn:"id")
- 원인: 백엔드가 __cart_row_key를 찾는데 프론트에서 id만 전송하여 lookup 실패
[디자이너 설정 확장]
- displayMode: list/step 전환 설정 추가
- PopWorkDetailConfig: 표시 모드 Select 드롭다운
- types.ts: PopWorkDetailConfig 인터페이스 displayMode 추가
- PopCardListV2Component: parentRow.__processFlow__ 전달 보강
테이블에 데이터가 0건일 때 JsonKeySelect가 plain Input으로 폴백되어
설계 단계에서 Select 박스가 표시되지 않는 문제를 수정한다.
[JsonKeySelect 개선]
- 항상 Combobox(Popover + Command) UI로 렌더링
- keys 있을 때: 기존과 동일한 자동완성 목록 + 검색
- keys 없을 때: "테이블에 데이터가 없습니다" 안내 + Enter로 직접 입력 확정
- 검색 결과 없을 때도 Enter로 자유 입력 가능
[updateSaveMapping 경합 조건 수정]
- onUpdateConfig 두 번 연속 호출 시 React batching으로 첫 번째 호출이
덮어쓰여지는 문제 수정
- syncAndUpdateSaveMappings에 extraPartial 파라미터 추가하여
한 번의 onUpdateConfig 호출로 병합
POP 화면 상단 네비게이션 바(POP 대시보드/PC 모드 전환)를 제거하고,
디자이너와 뷰어의 그리드 칸 수가 달라 컴포넌트 배치가 어긋나는 문제를 수정한다.
[헤더 제거]
- "POP 대시보드 | 화면이름 | PC 모드" 바 삭제 (pop-profile 컴포넌트로 대체)
- 미사용 import 정리 (LayoutGrid, Monitor, GAP_PRESETS, GRID_BREAKPOINTS)
[그리드 불일치 수정]
- 문제: 디자이너 태블릿 가로=1024px(38칸), 뷰어 window.innerWidth=1366px(52칸)
- 수정: 뷰어에서 모드별 기준 너비 고정 (tablet_landscape=1024, tablet_portrait=820,
mobile_landscape=600, mobile_portrait=375)
- rawWidth는 모드 감지 용도로만 사용, viewportWidth는 디자이너와 동일한 기준 너비
POP 디자이너 GRID-V6 + BLOCK DETAIL Phase 2~3 + 낙관적 잠금 기능을 main에 통합한다.
주요 병합 내용:
- GRID-V6 정사각형 블록 그리드 시스템 (842ac27d)
- POP 그리드 명칭 통일 + Dead Code 제거 (320100c4)
- BLOCK DETAIL Phase 2: 생산 공정 백엔드 API (create-work-processes, timer)
- BLOCK DETAIL Phase 3: pop-work-detail 컴포넌트 + 모달 캔버스 시스템
- 낙관적 잠금 + 소유자 기반 액션 제어 + 디자이너 설정 UI
- LOCK-OWNER 카드 비활성화 UI 보완
충돌 해결: 0건 (자동 병합 완료)
BLOCK DETAIL Phase 2~3 + 낙관적 잠금 기능을 ksh-v2-work에 통합한다.
주요 병합 내용:
- BLOCK DETAIL Phase 2: 생산 공정 관리 백엔드 API (create-work-processes, timer)
- BLOCK DETAIL Phase 3: pop-work-detail 컴포넌트 + 모달 캔버스 시스템
- 낙관적 잠금 + 소유자 기반 액션 제어 + 디자이너 설정 UI
- LOCK-OWNER 카드 비활성화 UI 누락분 반영
충돌 해결: 0건 (자동 병합 완료)
- Modified the production controller to replace the generic Request type with AuthenticatedRequest for better type safety and to ensure user authentication is handled correctly.
- This change enhances the security and clarity of the API endpoints related to production plan management, ensuring that user-specific data is accessed appropriately.
Made-with: Cursor
- Added production plan management routes and controller to handle various operations including order summary retrieval, stock shortage checks, and CRUD operations for production plans.
- Introduced service layer for production plan management, encapsulating business logic for handling production-related data.
- Created API client for production plan management, enabling frontend interaction with the new backend endpoints.
- Enhanced button actions to support API calls for production scheduling and management tasks.
These changes aim to improve the management of production plans, enhancing usability and functionality within the ERP system.
Made-with: Cursor
- Added support for ignoring PNG files in .gitignore to streamline file management.
- Deleted unused image files from the .playwright-mcp directory to reduce clutter and improve project organization.
- Enhanced column visibility handling in TableListComponent to include width adjustments and localStorage synchronization for better user experience.
Made-with: Cursor
- Introduced a comprehensive implementation guide for the production plan management screen, detailing the overall structure, table mappings, and V2 component capabilities.
- Included specific information on the main tables used, their columns, and how they relate to the screen's functionality.
- Provided an analysis of existing V2 components that can be utilized, along with those that require further development or customization.
- This guide aims to facilitate the development process and ensure adherence to established standards for screen implementation.
Made-with: Cursor
ksh-v2-work의 최신 변경사항을 동기화한다.
주요 병합 내용:
- GRID-V6 정사각형 블록 그리드 시스템 (842ac27d)
- POP 그리드 시스템 명칭 통일 + Dead Code 제거 (320100c4)
- 다수 PC 화면 config-panel 리팩토링 (jskim/mhkim/gbpark)
- V2 컴포넌트 config-panel 신규 18종
- 감사 로그 기능 강화
충돌 해결: 0건 (자동 병합 완료)
고정 칸 수(4/6/8/12) 기반의 V5 그리드를 24px 정사각형 블록 기반의
동적 칸 수 시스템으로 교체한다. 뷰포트 너비에 따라 블록 수가 자동
계산되며(375px=13칸, 1024px=38칸), 작은 화면에서는 행 그룹 리플로우
(CSS Flexbox wrap 원리)로 자동 재배치된다.
[그리드 코어]
- pop-layout.ts: BLOCK_SIZE=24, BLOCK_GAP=2, BLOCK_PADDING=8,
getBlockColumns() 동적 칸 수 계산, GRID_BREAKPOINTS V6 값
- gridUtils.ts: 행 그룹 리플로우(방식 F) - 같은 행 묶음 처리,
최소 2x2칸 터치 보장, 메인 컨텐츠 전체 너비 확장
- PopRenderer.tsx: repeat(N, 1fr) 블록 렌더링, 동적 칸 수
- PopCanvas.tsx: 뷰포트 프리셋 동적 칸 수, 블록 좌표 변환
[V5→V6 런타임 변환]
- convertV5LayoutToV6: DB 미수정, 로드 시 메모리 변환
12칸 좌표 → 38칸 블록 변환, V5 overrides 제거
- PopDesigner/page.tsx: 로드 지점에 변환 함수 삽입
[충돌 해결]
- ComponentEditorPanel: 높이 표시/모드 라벨 V6 수치
- PopCardListConfig: 카드 추천 threshold V6 기준
- PopDesigner: handleHideComponent 기본 모드 제한 해제
[기본 사이즈]
- 소형(2x2): 아이콘, 프로필, 스캐너
- 중형(8x4): 검색, 버튼, 텍스트
- 대형(19x6~10): 카드, 대시보드, 필드
DB 변경 0건, 백엔드 변경 0건, 컴포넌트 코드 변경 0건.
- Introduced a new document sync rule to ensure that related documentation is updated whenever components are added or modified, or when there are changes to the database structure.
- Specified the documents that must be updated, including the full-screen analysis and V2 component usage guide, along with detailed instructions on how to update them.
- This addition aims to enforce consistency and accuracy in documentation, facilitating better collaboration and adherence to development standards.
Made-with: Cursor
- Revised the full-screen analysis document to reflect the latest updates, including the purpose and core rules for screen development.
- Expanded the V2 component usage guide to include a comprehensive catalog of components, their configurations, and usage guidelines for LLM and chatbot applications.
- Added a summary of the system architecture and clarified the implementation methods for user business screens and admin menus.
- Enhanced the documentation to serve as a reference for AI agents and screen designers, ensuring adherence to the established guidelines.
These updates aim to improve clarity and usability for developers and designers working with the WACE ERP screen composition system.
Made-with: Cursor
- Added support for ignoring PNG files in .gitignore to streamline file management.
- Deleted unused image files from the .playwright-mcp directory to reduce clutter and improve project organization.
- Enhanced column visibility handling in TableListComponent to include width adjustments and localStorage synchronization for better user experience.
Made-with: Cursor
- Introduced `itemListMode` to the process work standard configuration, allowing users to select between displaying all items or only registered items.
- Added `screenCode` to automatically set the screen ID when in registered mode.
- Updated the `ProcessWorkStandardComponent` to handle the new configuration and adjust item fetching logic accordingly.
- Enhanced the `ProcessWorkStandardConfigPanel` to include a select input for item list mode, improving user experience and configurability.
These changes aim to enhance the flexibility and usability of the process work standard component.
Made-with: Cursor
- Updated the column width handling in various components to support percentage-based widths, improving layout flexibility.
- Adjusted input fields to enforce minimum and maximum width constraints, ensuring better user experience and preventing layout issues.
- Enhanced the SortableColumnRow and related components to dynamically display width units, allowing for clearer configuration options.
Made-with: Cursor
- Added new endpoints for managing registered items, including retrieval, registration, and batch registration.
- Enhanced the existing processWorkStandardController to support filtering and additional columns in item queries.
- Updated the processWorkStandardRoutes to include routes for registered items management.
- Introduced a new documentation file detailing the design and structure of the POP 작업진행 관리 system.
These changes aim to improve the management of registered items within the process work standard, enhancing usability and functionality.
Made-with: Cursor
- Replaced references to V2InputConfigPanel and V2SelectConfigPanel with V2FieldConfigPanel in the V2PropertiesPanel.
- This change ensures consistent configuration handling for both input and select components, improving maintainability and usability.
Made-with: Cursor
- Added Separator and Checkbox components to the V2InputConfigPanel for improved layout and functionality.
- This enhancement aims to provide better user interaction and organization within the input configuration settings.
Made-with: Cursor
- Removed unnecessary "peer" entries from various packages in package-lock.json to streamline dependency management and avoid potential conflicts.
- This cleanup helps maintain a cleaner and more efficient package structure.
Made-with: Cursor
- Replaced references to V2InputConfigPanel and V2SelectConfigPanel with V2FieldConfigPanel in the V2PropertiesPanel.
- This change ensures consistent configuration handling for both input and select components, improving maintainability and usability.
Made-with: Cursor
- Added Separator and Checkbox components to the V2InputConfigPanel for improved layout and functionality.
- This enhancement aims to provide better user interaction and organization within the input configuration settings.
Made-with: Cursor