Commit Graph

1152 Commits

Author SHA1 Message Date
kjs e05af3c6f9 렉 구조등록 컴포넌트 2025-12-08 15:15:44 +09:00
SeongHyun Kim 0c57609ee9 feat(UniversalFormModal): 연동 필드 그룹 기능 추가
- LinkedFieldGroup, LinkedFieldMapping 타입 정의

- 소스 테이블 데이터 캐싱 및 드롭다운 렌더링

- 선택 시 여러 컬럼에 자동 값 매핑 처리

- 설정 패널에 연동 필드 그룹 관리 UI 추가

- 일반 섹션/반복 섹션 모두 지원
2025-12-08 15:13:33 +09:00
leeheejin 8ec5c987de restapi 도 경로보기 가능, 출발지목적지 동시에 같은거 못하게, 자물쇠걸면 컬럼 수정 못함 tablelistcomponent 2025-12-08 10:23:54 +09:00
leeheejin c39794d1a7 Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into lhj
; Please enter a commit message to explain why this merge is necessary,
; especially if it merges an updated upstream into a topic branch.
;
; Lines starting with ';' will be ignored, and an empty message aborts
; the commit.
2025-12-05 18:30:44 +09:00
kjs cbe5cb4607 토큰 자동 갱신 기능 추가 및 에러 처리 개선 2025-12-05 17:46:22 +09:00
leeheejin 65227c5e03 자물쇠 누르면 컬럼 값 변경 안됩니다. 2025-12-05 17:42:35 +09:00
kjs 47552bc35c 집계함수 제어 수정 2025-12-05 17:28:44 +09:00
leeheejin 417d77729d 일단 월요일에 상의해야해서 여기에다만 커밋 2025-12-05 16:44:58 +09:00
kjs e713f55442 Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into feature/screen-management 2025-12-05 15:22:28 +09:00
SeongHyun Kim 7a185ca1ed Merge ksh branch up to commit 5d3b3ea7 (날짜 필드 ISO 형식 변환 수정) 2025-12-05 15:18:04 +09:00
kjs 1c329b5e0c 화면 분할 패널 자동으로 데이터 넘기는 기능 설정 가능하게 변경 2025-12-05 14:08:07 +09:00
dohyeons 1a77a5b28a Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into common/feat/dashboard-map 2025-12-05 14:01:17 +09:00
leeheejin d2bd623d9a 공차/운행 ~ 운행알림까지 걸린 거리, 시간 기록하기 2025-12-05 11:59:11 +09:00
kjs 662956edd4 엔티티 카테고리 타입 컬럼 배지 표시기능 2025-12-05 11:04:42 +09:00
leeheejin ccf8bd3284 버튼활성화비활성화 2025-12-05 11:03:15 +09:00
kjs 9e956999c5 모달 크기 고정 2025-12-05 10:46:10 +09:00
SeongHyun Kim 5d3b3ea76e fix(modal-repeater-table): 날짜 필드 ISO 형식 변환으로 표시 오류 수정
- RepeaterTable에서 DB 조회된 ISO 형식 날짜를 yyyy-mm-dd로 변환
- formatDateValue 함수 추가: ISO 문자열, Date 객체, 기존 형식 모두 처리
- 수주일(order_date), 납기일(item_due_date) 등 날짜 필드 정상 표시
2025-12-05 10:13:59 +09:00
dohyeons 58ca340699 Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into common/feat/dashboard-map 2025-12-04 19:48:34 +09:00
SeongHyun Kim 5c12b9fa83 Merge origin/main into ksh - resolve split-panel-layout2 conflicts 2025-12-04 19:19:58 +09:00
SeongHyun Kim c1400081c6 fix(modal-repeater-table): 품목 추가 시 UI 즉시 반영되지 않는 버그 수정
- value 상수를 localValue useState로 변경하여 내부 상태 관리
- useEffect로 외부 값(formData, propValue) 변경 시 동기화
- handleChange에서 setLocalValue 호출하여 즉각적인 UI 업데이트
- RepeaterTable, ItemSelectionModal 등 모든 참조를 localValue로 변경
2025-12-04 19:17:32 +09:00
SeongHyun Kim 0e4ecef336 feat(universal-form-modal): 필수 필드 검증 및 섹션 레이아웃 열 수 설정 기능 추가
- validateRequiredFields 함수 추가로 필수 필드 미입력 시 저장 차단
- 섹션별 열 수 설정 (1열/2열/3열/4열) 및 gridSpan 자동 계산
- 버튼 이벤트 버블링 방지 (type=button, preventDefault, stopPropagation)
- onChange 콜백 렌더링 사이클 분리 (setTimeout)
- 다중 행 저장 시 빈 객체 건너뛰기 로직 추가
2025-12-04 19:17:28 +09:00
SeongHyun Kim 6c751eb489 feat(universal-form-modal): 범용 폼 모달 컴포넌트 신규 개발
- 섹션 기반 폼 레이아웃 지원 (접힘/펼침, 그리드 컬럼)
- 반복 섹션 지원 (겸직 등 동일 필드 그룹 여러 개 추가)
- 채번규칙 연동 (모달 열릴 때 또는 저장 시점 자동 생성)
- 다중 행 저장 지원 (공통 필드 + 개별 필드 조합)
- Select 옵션 동적 로드 (정적/테이블/공통코드)
- 스크린 디자이너 설정 패널 구현
2025-12-04 19:13:58 +09:00
kjs bc66f3bba1 거래처 에러수정 2025-12-04 18:26:35 +09:00
dohyeons ef3b85f343 배치 UPSERT 기능 및 고정값 매핑 버그 수정 2025-12-04 17:26:29 +09:00
kjs 93d9937343 자동완성 검색 입력 컴포넌트 다중 컬럼 표시 기능추가 2025-12-04 16:02:00 +09:00
SeongHyun Kim dfc83f6114 feat(split-panel-layout2): 테이블 모드, 수정/삭제, 복수 버튼 기능 추가
- 표시 모드 추가 (card/table)
- 카드 모드 라벨 표시 옵션 (이름 행/정보 행 가로 배치)
- 체크박스 선택 기능 (전체/개별 선택)
- 개별 수정/삭제 핸들러 구현 (openEditModal, DELETE API)
- 복수 액션 버튼 배열 지원 (add, edit, bulk-delete, custom)
- 설정 패널에 표시 라벨 입력 필드 추가
- 기본키 컬럼 설정 옵션 추가
2025-12-04 14:32:04 +09:00
kjs 2cddb42255 엔티티 표시기능 개선 2025-12-04 14:30:52 +09:00
kjs 127f4dc783 숫자컬럼 천단위 구분자 설정 추가 2025-12-04 13:37:17 +09:00
kjs 3ab32820e9 next.js 버전 15.4.8 2025-12-04 10:39:07 +09:00
SeongHyun Kim 669717f656 feat(split-panel-layout2): 복수 검색 컬럼 지원 기능 추가
- SearchColumnConfig 타입 추가 (types.ts)
- 좌측/우측 패널 모두 여러 검색 컬럼 설정 가능
- ConfigPanel에 검색 컬럼 추가/삭제 UI 구현
- 검색 시 OR 조건으로 여러 컬럼 동시 검색
- 기존 searchColumn 단일 설정과 하위 호환성 유지
2025-12-03 18:53:03 +09:00
SeongHyun Kim 52ad67d44a feat: SplitPanelLayout2 마스터-디테일 컴포넌트 구현
좌측 패널(마스터)-우측 패널(디테일) 분할 레이아웃 컴포넌트 추가
EditModal에 isCreateMode 플래그 추가하여 INSERT/UPDATE 분기 처리
dataFilter 기반 정확한 조인 필터링 구현
좌측 패널 선택 데이터를 모달로 자동 전달하는 dataTransferFields 설정 지원
ConfigPanel에서 테이블, 컬럼, 조인 설정 가능
2025-12-03 18:53:03 +09:00
SeongHyun Kim ca3d6bf8fb fix(split-panel-layout): 좌측 패널 표시 컬럼 설정이 반영되지 않던 문제 수정
- leftPanel.columns 설정을 우선 적용하도록 로직 변경
- 조인 키(leftColumn) 대신 사용자 설정 컬럼이 표시되도록 수정
- 컬럼 라벨 변환 로직 개선
2025-12-03 18:53:03 +09:00
kjs e8be871d69 Merge branch 'main' into feature/screen-management 2025-12-03 18:48:41 +09:00
SeongHyun Kim de8b643277 Merge remote-tracking branch 'origin/main' into ksh 2025-12-03 18:48:37 +09:00
kjs cb0bbd1ff3 카드디스플레이 검색필터 구현 2025-12-03 18:48:23 +09:00
SeongHyun Kim 294c61e0e3 feat(split-panel-layout2): 복수 검색 컬럼 지원 기능 추가
- SearchColumnConfig 타입 추가 (types.ts)
- 좌측/우측 패널 모두 여러 검색 컬럼 설정 가능
- ConfigPanel에 검색 컬럼 추가/삭제 UI 구현
- 검색 시 OR 조건으로 여러 컬럼 동시 검색
- 기존 searchColumn 단일 설정과 하위 호환성 유지
2025-12-03 18:43:01 +09:00
dohyeons 6a0ff5582f Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into common/feat/dashboard-map 2025-12-03 17:46:01 +09:00
SeongHyun Kim 700623aa78 feat: SplitPanelLayout2 마스터-디테일 컴포넌트 구현
좌측 패널(마스터)-우측 패널(디테일) 분할 레이아웃 컴포넌트 추가
EditModal에 isCreateMode 플래그 추가하여 INSERT/UPDATE 분기 처리
dataFilter 기반 정확한 조인 필터링 구현
좌측 패널 선택 데이터를 모달로 자동 전달하는 dataTransferFields 설정 지원
ConfigPanel에서 테이블, 컬럼, 조인 설정 가능
2025-12-03 17:45:22 +09:00
kjs 4e29f92268 테이블 타입관리 ui개선 2025-12-03 16:39:47 +09:00
kjs eb5ea411c9 화면 일괄삭제기능 2025-12-03 16:02:09 +09:00
SeongHyun Kim 760f9b2d67 fix(split-panel-layout): 좌측 패널 표시 컬럼 설정이 반영되지 않던 문제 수정
- leftPanel.columns 설정을 우선 적용하도록 로직 변경
- 조인 키(leftColumn) 대신 사용자 설정 컬럼이 표시되도록 수정
- 컬럼 라벨 변환 로직 개선
2025-12-03 15:17:43 +09:00
kjs e83fbed71c 셀렉트 박스 카테고리 다른값 들어가는 오류 수정 2025-12-03 10:09:31 +09:00
kjs 7713d4073c Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into feature/screen-management 2025-12-02 18:07:24 +09:00
kjs 3b875f20b1 화면간 데이터 전달기능 구현 2025-12-02 18:03:52 +09:00
SeongHyun Kim ae7b21147b feat(repeat-screen-modal): 집계 저장 및 채번 규칙 값 저장 기능 추가
- RepeatScreenModal 집계 결과를 연관 테이블에 저장하는 기능 추가
- ButtonPrimary 저장 시 채번 규칙 값(shipment_plan_no) 함께 저장
- _repeatScreenModal_* 데이터 감지 시 메인 테이블 중복 저장 방지
- 기존 행 수정 모드(_isEditing) 지원
- AggregationSaveConfig 타입 및 ConfigPanel UI 추가
2025-12-02 17:44:24 +09:00
SeongHyun Kim 10d81cb9bc feat(repeat-screen-modal): 테이블 행 편집 모드 제어 기능 구현
- DB 로드 데이터에 _isEditing: false 명시적 설정
- handleEditExternalRow: 수정 모드 전환 함수 추가
- handleCancelEditExternalRow: 수정 취소 및 원본 복원 함수 추가
- renderTableCell: isRowEditable 파라미터 추가로 행 수준 편집 제어
- UPDATE API 요청 형식 { originalData, updatedData }로 수정
- 테이블 작업 컬럼에 수정/수정취소/삭제/복원 버튼 그룹화
2025-12-02 15:23:25 +09:00
SeongHyun Kim b286bc3c63 feat(repeat-screen-modal): 테이블 삭제 기능 DB 연동 (소프트 삭제)
- 삭제 버튼 클릭 시 _isDeleted 플래그 설정 (소프트 삭제)
- 삭제된 행 시각적 표시 (취소선, 투명도)
- 삭제 취소(복원) 기능 추가
- 저장 버튼 클릭 시 DELETE API 호출하여 DB 반영
- 삭제된 행 집계 계산에서 제외
- axios DELETE 요청 시 body 전달 방식 수정
2025-12-02 14:50:00 +09:00
SeongHyun Kim bc34cded95 merge: origin/main을 ksh로 머지 (UnifiedPropertiesPanel 충돌 해결) 2025-12-02 14:10:33 +09:00
SeongHyun Kim 4787a8b177 feat(repeat-screen-modal): 테이블 영역 독립 저장 기능 구현
- TableCrudConfig에 allowSave, saveButtonLabel 속성 추가
- CRUD 설정 패널에 저장 스위치 추가
- saveTableAreaData 함수: editable 컬럼 + 조인키만 필터링하여 저장
- 날짜 필드 ISO 8601 -> YYYY-MM-DD 형식 변환
- 백엔드: company_code 자동 주입 로직 추가
- tableManagementService에 hasColumn 메서드 추가
2025-12-02 14:02:47 +09:00
leeheejin 2c447fd325 restapi도 가능하게 구현 2025-12-02 13:20:49 +09:00
leeheejin 0789eb2e20 Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into lhj 2025-12-02 09:53:18 +09:00
leeheejin 8c83db596d 공차관련수정사항들 2025-12-02 09:53:08 +09:00
dohyeons cd47f569e2 feat: 공차중계 운전자 차량/프로필 관리 기능 구현 2025-12-01 19:03:43 +09:00
SeongHyun Kim 2f78c83ef6 feat(repeat-screen-modal): 외부 테이블 조인, 필터링, CRUD 및 실시간 집계 기능 추가
- 외부 테이블 데이터 소스 설정 (TableDataSourceConfig) 추가
- 다중 테이블 조인 지원 (AdditionalJoinConfig)
- 테이블 필터링 (equals/notEquals) 지원
- 테이블 CRUD (행 추가/수정/삭제) 기능 추가
- 데이터 변경 시 집계 실시간 재계산 (recalculateAggregationsWithExternalData)
- 시각적 수식 빌더 (FormulaBuilder) 컴포넌트 추가
- 테이블 컬럼 순서 변경 기능 추가
- 백엔드: 배열 파라미터 IN 절 변환 로직 추가
2025-12-01 18:50:26 +09:00
dohyeons 9c3f1d26ad 차량관리(기초데이터) 구현 2025-12-01 18:41:02 +09:00
kjs 44c76d80b7 Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into feature/screen-management 2025-12-01 18:39:20 +09:00
kjs fb16e224f0 카드 컴포넌트 중간커밋 2025-12-01 18:39:01 +09:00
SeongHyun Kim fb068284db Merge branch 'ksh' 2025-12-01 18:36:06 +09:00
SeongHyun Kim 0281d3722e revert: SelectBasicComponent.tsx 이전 상태로 복원 2025-12-01 18:35:55 +09:00
leeheejin 7242f08224 공차 등록, 연속추적 기능 2025-12-01 17:04:59 +09:00
leeheejin fbeb3ec2c9 버튼 과정이 조금 복잡하지만 위도경도 연속추적기능도 넣음 2025-12-01 16:49:02 +09:00
leeheejin 7263c9c3ff Merge origin/main into lhj - resolve buttonActions.ts conflict 2025-12-01 15:44:19 +09:00
leeheejin 6545410d49 공차등록 기능 구현 2025-12-01 15:42:40 +09:00
leeheejin 8d2ec8e737 공차등록성공 2025-12-01 15:23:07 +09:00
kjs 1823415a5b Merge branch 'main' into feature/screen-management 2025-12-01 15:22:07 +09:00
kjs da6ac92391 데이터 수정이 안되는 문제 해결 2025-12-01 15:21:03 +09:00
leeheejin be2550885a Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into lhj
; Please enter a commit message to explain why this merge is necessary,
; especially if it merges an updated upstream into a topic branch.
;
; Lines starting with ';' will be ignored, and an empty message aborts
; the commit.
2025-12-01 14:45:51 +09:00
leeheejin fd7a1bbf53 출발지도착지 선택 가능하고 교환버튼 작동하게 2025-12-01 12:27:24 +09:00
dohyeons 848d111975 Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into common/feat/dashboard-map 2025-12-01 11:50:42 +09:00
kjs 93b92960e7 테이블 상단 여백 제거 2025-12-01 11:20:06 +09:00
dohyeons ad0a84f2c3 feat: 대시보드 목록에 생성자 컬럼 추가 2025-12-01 11:07:35 +09:00
leeheejin d7ee63a857 출발지 목적지 선택 2025-12-01 11:07:16 +09:00
kjs a3d3db5437 검색필터 다중선택 기능 2025-12-01 10:36:57 +09:00
leeheejin c657d6f7a0 출발지 도착지 2025-12-01 10:32:12 +09:00
SeongHyun Kim 9e6fa67215 fix: 셀렉트 드롭다운이 다른 컴포넌트에 가려지는 문제 해결
- React Portal 적용하여 드롭다운을 document.body에 렌더링
- Stacking Context 탈출로 z-index 충돌 문제 해결
- 모든 셀렉트 타입(code, autocomplete, dropdown, multiselect)에 적용
2025-12-01 10:29:14 +09:00
kjs 142fb15dc0 Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into feature/screen-management 2025-12-01 10:21:34 +09:00
kjs e4b1f7e4d8 데이터 표시 오류 수정 2025-12-01 10:19:20 +09:00
dohyeons 1462700c83 Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into common/feat/dashboard-map 2025-12-01 10:15:10 +09:00
kjs 1503dd87bb 화면 분할패널 수정모드 수정 2025-12-01 10:09:19 +09:00
SeongHyun Kim 893cd428a0 fix: 셀렉트 드롭다운이 다른 컴포넌트에 가려지는 문제 해결
- React Portal 적용하여 드롭다운을 document.body에 렌더링
- Stacking Context 탈출로 z-index 충돌 문제 해결
- 모든 셀렉트 타입(code, autocomplete, dropdown, multiselect)에 적용
2025-12-01 10:01:10 +09:00
leeheejin 9f97a16d6a Merge origin/main and resolve conflicts - add geolocation/update_field actions 2025-11-28 18:45:41 +09:00
kjs bd4e3e507d Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into feature/screen-management 2025-11-28 18:38:18 +09:00
kjs 627c5a5173 화면 분할 패널 수정모드 기능 2025-11-28 18:35:34 +09:00
leeheejin 67e6a8008d 버튼 액션중 위치정보 가져오기, 필드값 변경 추가 2025-11-28 18:35:07 +09:00
SeongHyun Kim 07e0b22309 Merge remote-tracking branch 'origin/main' into ksh 2025-11-28 16:03:10 +09:00
SeongHyun Kim 36ab484029 feat(repeat-screen-modal): 자유 레이아웃 구현 및 데이터 전달 버그 수정
- contentRows 기반 자유 레이아웃 지원 (header/aggregation/table/fields 타입)
- aggregationFields, tableColumns 직접 참조하도록 렌더링 로직 수정
- groupByField 없어도 grouping.enabled면 그룹핑 모드로 처리
- buttonActions에서 selectedRowsData를 모달 이벤트로 전달
- ScreenModal에서 selectedData를 groupedData props로 컴포넌트에 전달
- types.ts에 CardContentRowConfig, AggregationDisplayConfig 인터페이스 추가
2025-11-28 16:02:29 +09:00
kjs c78ba865b6 카테고리 설정 안풀리는 오류 수정 2025-11-28 15:15:35 +09:00
kjs f15846fd10 화면 분할 패널 기능 2025-11-28 14:56:11 +09:00
leeheejin 552beabdc0 null로 저장되게 성공시킴 2025-11-28 14:45:04 +09:00
leeheejin 652617fe37 주석처리완 2025-11-28 11:52:23 +09:00
SeongHyun Kim c94b9da813 feat: 신규 컴포넌트 2종 추가 (SimpleRepeaterTable, RepeatScreenModal) 및 속성 패널 스크롤 개선
- SimpleRepeaterTable: 검색/추가 없이 데이터 표시 및 편집, 자동 계산 지원
- RepeatScreenModal: 그룹핑 기반 카드 레이아웃, 집계 기능, 테이블 모드 지원
- UnifiedPropertiesPanel: overflow-x-auto 추가로 가로 스크롤 활성화
2025-11-28 11:48:46 +09:00
dohyeons 39d327fb45 외부 REST API 연결 확장 2025-11-28 11:35:36 +09:00
leeheejin 8dcffa8927 메일관련된거 커밋 2025-11-28 11:34:48 +09:00
dohyeons b70ed8aaff Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into common/feat/dashboard-map 2025-11-28 10:47:55 +09:00
dohyeons f3c5c90d7b 외부 REST API 커넥션 POST/Body + DB 토큰 테스트 지원 2025-11-27 16:42:48 +09:00
kjs 30dac204c0 메뉴복사 기능수정(카테고리,코드값 제거) 2025-11-27 14:53:51 +09:00
kjs 51c49f7a3d 화면 분할패널 커밋 2025-11-27 12:54:57 +09:00
SeongHyun Kim 244c597ac9 refactor(admin): 테이블 타입 관리 Entity 조인 UI 레이아웃 개선
- Flexbox에서 Grid 레이아웃으로 변경 (160px 200px 250px 1fr)
- "상세 설정" 컬럼 제거하고 4개 컬럼 구조로 단순화
- Entity 조인 설정(참조/조인/표시 컬럼)을 입력 타입 컬럼 내 세로 배치
- Select 박스 너비를 192px (w-48)로 통일
- UI 겹침 현상 해결 및 순차적 설정 흐름 개선
2025-11-27 12:22:39 +09:00
kjs 454f79caec Merge branch 'feature/screen-management' of http://39.117.244.52:3000/kjs/ERP-node into feature/screen-management 2025-11-27 12:08:33 +09:00
kjs fb9de05b00 화면 분할패널 중간커밋 2025-11-27 12:08:32 +09:00
dohyeons 707328e765 REST API→DB 토큰 배치 및 auth_tokens 저장 구현 2025-11-27 11:32:19 +09:00
SeongHyun Kim a1117092aa feat: 수주일(order_date) 일괄 적용 기능 구현
- OrderItemRepeaterTable에 order_date 컬럼 추가
- ModalRepeaterTableComponent에 수주일 일괄 적용 로직 구현
- 원본 newData 참조로 납기일 로직과 독립적으로 작동
- 모든 행이 비어있는 초기 상태에서 첫 선택 시 자동 적용
- isOrderDateApplied 플래그로 1회만 실행 보장
2025-11-27 10:33:54 +09:00
SeongHyun Kim c7d47a6634 feat: 채번 규칙 자동/수동 모드 전환 기능 구현
- 사용자 수정 감지 시 자동으로 수동 모드 전환
- 원본 자동 생성 값 추적으로 모드 전환 기준 설정
- 수동 모드 시 채번 규칙 ID 제거하여 재할당 방지
- 원본 값 복구 시 자동 모드로 재전환 및 메타데이터 복구
2025-11-27 09:43:05 +09:00
SeongHyun Kim a9577a8f9a fix: 수주 등록 시 사용자가 수정한 수주번호 덮어쓰기 문제 해결
- 저장 시점에 채번 규칙 강제 재할당 로직 제거
- TextInputComponent에서 생성된 값을 사용자가 수정하면 그대로 유지
- allocateNumberingCode API 불필요한 호출 제거
- 사용자 입력 값 보존 및 순번 불필요 증가 방지
2025-11-26 18:24:15 +09:00
SeongHyun Kim b3e1e620da Merge remote-tracking branch 'origin/main' into ksh 2025-11-26 17:23:18 +09:00
SeongHyun Kim 13af9a62e8 fix: 수주관리 납기일 DATE 형식 저장 및 설정 패널 오류 수정
- 프론트엔드: EditModal 날짜 정규화 함수 추가 (YYYY-MM-DD)
- 백엔드: convertValueForPostgreSQL에서 DATE 타입 문자열 유지
- 백엔드: 날짜 변환 로직에서 YYYY-MM-DD 문자열 변환 제거
- 프론트엔드: ModalRepeaterTableConfigPanel prop 이름 통일 (onChange)
- OrderItemRepeaterTable 필드명 수정 (delivery_date → item_due_date)

closes #납기일-TIMESTAMP-저장-이슈 #설정패널-prop-오류
2025-11-26 17:22:39 +09:00
kjs 6ef4ff8e9b Merge branch 'main' into feature/screen-management 2025-11-26 16:10:06 +09:00
kjs e8c02fef5e 미리보기 기능 수정 2025-11-26 14:58:18 +09:00
kjs 13fe9c97fe 오류 수정 2025-11-26 14:44:49 +09:00
SeongHyun Kim 17659a0e59 Merge branch 'ksh' 2025-11-26 11:04:04 +09:00
SeongHyun Kim e4be76fe8d fix: 수주 등록 시 재질 컬럼 저장 오류 수정
- ModalRepeaterTableComponent의 저장 필터링 로직 개선
- columnMappings에 정의된 필드는 sourceColumns에 있어도 저장
- mappedFields 우선순위로 필터링 순서 변경
- 조인 전용 컬럼과 복사 저장 컬럼 구분 가능
2025-11-26 11:02:31 +09:00
SeongHyun Kim c387221043 feat: 품목 납기일 일괄 적용 기능 추가
- ModalRepeaterTableComponent에 납기일 자동 일괄 적용 로직 구현
- 첫 납기일 선택 시 빈 행에 자동으로 동일 날짜 적용
- isDeliveryDateApplied 플래그로 중복 실행 방지
- ScreenModal 환경에서 onFormDataChange 경로 지원
2025-11-26 10:07:38 +09:00
kjs 611fe9f788 선택박스 설정 2025-11-26 09:32:55 +09:00
kjs ea88cfd043 feat: 날짜 기간 검색 기능 구현
- ModernDatePicker: 로컬 상태 관리로 즉시 검색 방지
  - tempValue 상태 추가하여 확인 버튼 클릭 시에만 검색 실행
  - 빠른 선택 버튼 추가 (오늘, 이번주, 이번달, 최근 7일, 최근 30일)

- TableSearchWidget: ModernDatePicker 통합
  - 기본 HTML input[type=date]를 ModernDatePicker로 교체
  - 날짜 범위 객체 {from, to}를 파이프 구분 문자열로 변환
  - 백엔드 재시작 없이 작동하도록 임시 포맷팅 적용

- tableManagementService: 날짜 범위 검색 로직 개선
  - getColumnWebTypeInfo: web_type이 null이면 input_type 폴백
  - buildDateRangeCondition: VARCHAR 타입 날짜 컬럼 지원
  - 날짜 컬럼을 ::date로 캐스팅하여 타입 호환성 확보
  - 파이프 구분 문자열 파싱 지원 (YYYY-MM-DD|YYYY-MM-DD)

- 디버깅 로깅 추가
  - 컬럼 타입 정보 조회 결과 로깅
  - 날짜 범위 검색 조건 생성 과정 추적
2025-11-25 17:48:23 +09:00
SeongHyun Kim 8fdf57bedd chore: 과도한 콘솔 로그 정리
- ModalRepeaterTableComponent: 반복 렌더링 로그 제거
- TableListComponent: 렌더링 조건 체크 IIFE 단순화
- ConditionalContainerComponent: 디버깅 로그 삭제
- DynamicComponentRenderer: value 설정 로그 제거
- resizable-dialog: userStyle 상세 로그 정리
- page.tsx: 반복 데이터 탐색 로그 삭제

에러 핸들링 및 주요 분기점 로그만 보존
2025-11-25 16:56:50 +09:00
kjs ef0af26147 Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into feature/screen-management 2025-11-25 16:05:56 +09:00
kjs a1819e749c fix: 탭 컴포넌트 menuObjid 전달, 카테고리 필터 복원, 설정 초기화 문제 해결
주요 수정사항:

1. 탭 컴포넌트 내 자식 화면에 menuObjid와 tableName 전달
   - TabsWidget에 menuObjid prop 추가
   - InteractiveScreenViewerDynamic를 통해 자식 화면에 전달
   - 채번 규칙 생성 시 올바른 메뉴 스코프 및 테이블명 적용

2. 백엔드: 화면 레이아웃 API에 tableName 추가
   - screenManagementService.getLayout()에서 테이블명 반환
   - LayoutData 타입에 tableName 필드 추가
   - 채번 규칙 생성 시 tableName 검증 강화

3. 카테고리 필터링 기능 복원
   - DataFilterConfigPanel에 menuObjid 전달
   - getCategoryValues API 사용으로 메뉴 스코프 적용
   - 새로고침 후 카테고리 값 자동 재로드
   - SplitPanelLayoutConfigPanel에 menuObjid 전달

4. 선택항목 상세입력 설정 패널 포커스 문제 해결
   - 로컬 입력 상태 추가로 실시간 속성 편집 패턴 적용
   - 텍스트 및 라벨 입력 시 포커스 유지

5. 테이블 리스트 설정 초기화 문제 해결
   - handleChange 함수에서 기존 config와 병합하여 전달
   - 다른 속성 손실 방지 (columns, dataFilter 등)

버그 수정:
- 채번 규칙 생성 시 빈 문자열 대신 null 전달
- 필터 설정 변경 시 컬럼 설정 초기화 방지
- 카테고리 컬럼 선택 시 셀렉트박스 표시
2025-11-25 15:55:05 +09:00
SeongHyun Kim 6317ae7b0b Merge remote-tracking branch 'origin/main' into ksh 2025-11-25 15:26:29 +09:00
SeongHyun Kim 2b8a3945a1 fix: Section Paper 선택 영역과 컨텐츠 영역 정렬 문제 해결
- RealtimePreview: border → outline 전환, getHeight() 함수 추가
- SectionPaperComponent: width/height 100%, overflow-auto, min-h 제거
- 모든 높이에서 선택 영역 = 컨텐츠 영역 정확히 일치
2025-11-25 15:22:50 +09:00
dohyeons d6b9372e1f Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into common/feat/dashboard-map 2025-11-25 14:58:39 +09:00
dohyeons 080188b419 외부 DB 연결 설정 및 쿼리 처리 로직 보완 2025-11-25 14:57:48 +09:00
SeongHyun Kim e456b4bb69 Merge remote-tracking branch 'origin/main' into ksh 2025-11-25 14:26:57 +09:00
SeongHyun Kim 5609e32daf feat: 수주관리 품목 CRUD 및 공통 필드 자동 복사 구현
- 품목 추가 시 공통 필드(거래처, 담당자, 메모) 자동 복사
- ModalRepeaterTable onChange 시 groupData 반영
- 백엔드 타입 캐스팅으로 PostgreSQL 에러 해결
- 타입 정규화로 불필요한 UPDATE 방지
- 수정 모달에서 거래처/수주번호 읽기 전용 처리
2025-11-25 14:23:54 +09:00
dohyeons ace80be8e1 N-Level 계층 구조 및 공간 종속성 시스템 구현 2025-11-25 13:55:00 +09:00
SeongHyun Kim aca39f23d2 Merge branch 'ksh' 2025-11-25 13:15:13 +09:00
SeongHyun Kim a9f57add62 feat: 수주관리 품목 추가/수정/삭제 기능 구현
- EditModal의 handleSave가 button-primary까지 전달되도록 수정
- ConditionalContainer/ConditionalSectionViewer에 onSave prop 추가
- DynamicComponentRenderer와 InteractiveScreenViewerDynamic에 onSave 전달 로직 추가
- ButtonActionExecutor에서 context.onSave 콜백 우선 실행 로직 구현
- 신규 품목 추가 시 groupByColumns 값 자동 포함 처리

기능:
- 품목 추가: order_no 자동 설정
- 품목 수정: 변경 필드만 부분 업데이트
- 품목 삭제: originalGroupData 비교 후 제거
2025-11-25 12:07:14 +09:00
kjs 5e2392c417 탭 컴포넌트 구현 2025-11-25 10:06:56 +09:00
kjs a46a2a664f Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into feature/screen-management 2025-11-25 09:34:59 +09:00
kjs 3f60f9ca3e fix(flow): 제어 실행 시 writer와 company_code 자동 입력 기능 추가
🐛 문제:
- 제어(플로우) 실행으로 데이터 INSERT 시 writer, company_code 컬럼이 비어있는 문제
- 플로우 실행 API에 인증이 없어 사용자 정보를 사용할 수 없었음

 해결:
1. 플로우 실행 API에 authenticateToken 미들웨어 추가
2. 사용자 정보(userId, userName, companyCode)를 contextData에 포함
3. INSERT 노드 실행 시 writer와 company_code 자동 추가
   - 필드 매핑에 없는 경우에만 자동 추가
   - writer: 현재 로그인한 사용자 ID
   - company_code: 현재 사용자의 회사 코드
   - 최고 관리자(companyCode = '*')는 제외

4. 플로우 제어 자동 감지 개선
   - flowConfig가 있으면 controlMode 없이도 플로우 모드로 인식
   - 데이터 미선택 시 명확한 오류 메시지 표시

🎯 영향:
- 입고처리, 출고처리 등 제어 기반 데이터 생성 시 멀티테넌시 보장
- 데이터 추적성 향상 (누가 생성했는지 자동 기록)

📝 수정 파일:
- frontend/lib/utils/buttonActions.ts
- backend-node/src/routes/dataflow/node-flows.ts
- backend-node/src/services/nodeFlowExecutionService.ts
2025-11-25 09:33:36 +09:00
kjs 00501f359c 탭기능 중간커밋 2025-11-24 17:24:47 +09:00
SeongHyun Kim 1139cea838 feat(table-list): 컬럼 너비 자동 조정 및 정렬 상태 저장 기능 추가
- 데이터 내용 기반 컬럼 너비 자동 계산 (상위 50개 샘플링)
- 사용자가 조정한 컬럼 너비를 localStorage에 저장/복원
- 정렬 상태(컬럼, 방향)를 localStorage에 저장/복원
- 사용자별, 테이블별 독립적인 설정 관리

변경:
- TableListComponent.tsx: calculateOptimalColumnWidth 추가, 정렬 상태 저장/복원 로직 추가
- README.md: 새로운 기능 문서화

저장 키:
- table_column_widths_{테이블}_{사용자}: 컬럼 너비
- table_sort_state_{테이블}_{사용자}: 정렬 상태

Fixes: 수주관리 화면에서 컬럼 너비 수동 조정 번거로움, 정렬 설정 미유지 문제
2025-11-24 16:54:31 +09:00
SeongHyun Kim 2f3d5f993a fix: 수주관리 수정 저장 시 조인 컬럼 필터링 추가
- entityJoinApi 조회 데이터의 조인 컬럼(material_label 등) 필터링
- dynamicFormService.ts: 병합 모드에서 columnInfo 기반 유효 컬럼만 저장
- sales_order_mng 테이블에 존재하지 않는 컬럼 INSERT 방지
- "column does not exist" PostgreSQL 에러 해결

영향: 수주관리 그룹 편집 저장 정상 동작
2025-11-24 15:38:41 +09:00
SeongHyun Kim 3e414b8530 feat: 수주관리 그룹 편집 기능 구현
- 같은 수주번호(order_no)를 가진 품목 일괄 수정 기능 추가
- groupByColumns 개념 도입 및 EditModal 그룹 데이터 처리 로직 구현
- ConditionalSectionViewer에서 DynamicComponentRenderer 사용으로 groupedData 전달 경로 확보
- ModalRepeaterTable onChange 에러 수정 및 sourceColumns 필터링 추가
- 조인된 컬럼 제외 로직 추가로 DB 저장 오류 해결
2025-11-24 15:24:31 +09:00
SeongHyun Kim 55204dd38c Merge remote-tracking branch 'origin/main' into ksh 2025-11-21 17:01:23 +09:00
SeongHyun Kim 58427fb8e0 style(ui): 배경색 통일 및 스크롤 최적화
- autocomplete-search-input: !bg-background 강제 적용
- section-paper: 배경색 진하게(bg-muted/40), 기본 테두리 활성화, overflow-visible
- modal-repeater-table: tbody 흰색 배경, 스크롤 높이 제한(240px), 헤더 고정
- autocomplete 드롭다운: z-index 100으로 상향

배경색 통일로 일관된 디자인, 스크롤로 공간 효율 개선
2025-11-21 17:00:25 +09:00
kjs 73cd23aee8 Merge branch 'main' into feature/screen-management 2025-11-21 16:24:21 +09:00
kjs c1e5a2a5f1 fix: Select Basic 다중선택 높이 적용 및 menu_objid=0 타입 처리
1. Select Basic 다중선택 컴포넌트 높이 문제 해결
   - 외부 wrapper에 height: 100% 추가
   - 내부 div에 인라인 스타일로 height: 100% 명시
   - items-center 추가하여 태그 세로 가운데 정렬
   - Tailwind h-full 클래스 제거로 스타일 충돌 방지

2. 메뉴 복사 시 menu_objid=0 공통 카테고리 타입 처리
   - menu_objid가 숫자 0, 문자열 '0' 모두 처리
   - == 0 타입 강제 변환으로 모든 경우 감지
   - 카테고리 컬럼 매핑, 카테고리 값 모두 적용
   - 공통 카테고리 19개 정상 복사 가능
2025-11-21 16:23:37 +09:00
kjs 8b3593c8fb feat: 메뉴 복사 시 화면명 일괄 변환 기능 추가
새로운 기능:
- 화면명에서 특정 텍스트 제거 (예: '탑씰' 제거)
- 화면명에 접두사 추가 (예: '한신' 추가)
- 변환 로직: 제거 → 접두사 추가 순서로 적용

백엔드:
- menuCopyService.copyMenu()에 screenNameConfig 파라미터 추가
- copyScreens()에서 화면명 변환 로직 적용
- 정규식으로 전역 치환 (new RegExp(text, 'g'))

프론트엔드:
- MenuCopyDialog에 화면명 일괄 변경 UI 추가
- Checkbox로 기능 활성화/비활성화
- 2개 Input: removeText, addPrefix
- API 호출 시 screenNameConfig 전달

사용 예시:
1. '탑씰 회사정보' → '회사정보' (제거만)
2. '회사정보' → '한신 회사정보' (접두사만)
3. '탑씰 회사정보' → '한신 회사정보' (제거 + 접두사)

관련 파일:
- backend-node/src/services/menuCopyService.ts
- backend-node/src/controllers/adminController.ts
- frontend/lib/api/menu.ts
- frontend/components/admin/MenuCopyDialog.tsx
2025-11-21 15:38:59 +09:00
kjs c70998fa4f feat: 메뉴 복사 기능 - 2단계 복사 방식으로 화면 참조 매핑 문제 해결
- 문제: 화면 복사 시 참조되는 화면이 아직 복사되지 않아 screenIdMap에 매핑 정보가 없었음
- 해결: 2단계 복사 방식 도입
  1단계: 모든 screen_definitions 먼저 복사하여 screenIdMap 완성
  2단계: screen_layouts 복사하면서 완성된 screenIdMap으로 참조 업데이트
- 결과: targetScreenId가 올바르게 새 회사의 화면 ID로 매핑됨 (예: 149 → 517)
- 추가: 화면 수집 시 문자열 타입 ID도 올바르게 파싱하도록 개선
- 추가: 참조 화면 발견 및 업데이트 로그 추가

관련 파일:
- backend-node/src/services/menuCopyService.ts
- db/migrations/1003_add_source_menu_objid_to_menu_info.sql
- db/scripts/cleanup_company_11_*.sql
2025-11-21 14:37:09 +09:00
SeongHyun Kim da0a82a0ec Merge remote-tracking branch 'origin/main' into ksh 2025-11-21 12:23:15 +09:00
SeongHyun Kim 1a171d450c fix: Repeater 동일 테이블 저장 시 이중 INSERT 문제 해결
문제:
- targetTable이 메인 테이블과 동일할 때 헤더 단독 저장 + Repeater 병합 저장으로 2번 INSERT 발생
- 같은 수주번호로 헤더만 있는 레코드와 전체 데이터 레코드가 중복 생성됨

해결:
- Repeater를 병합/분리 모드로 분류하는 로직 추가
- 병합 모드: 헤더+품목을 통합하여 품목당 1개 레코드로 저장
- 분리 모드: 헤더와 품목을 별도 테이블에 저장
- 헤더 단독 INSERT 제거로 중복 방지

영향:
- 단일 테이블 구조에서 품목별 레코드 생성 방식으로 변경
- 확장/축소 UI를 통한 품목별 조회 지원
2025-11-21 10:52:51 +09:00
dohyeons 3d32929c0b 대시보드 에러 해결 2025-11-21 10:29:47 +09:00
SeongHyun Kim fa426625cc feat: modal-repeater-table 배열 데이터 저장 기능 구현
- 백엔드: 배열 객체 형식 Repeater 데이터 처리 로직 추가
- 백엔드: Repeater 저장 시 company_code 자동 주입
- 백엔드: 부모 테이블 데이터 자동 병합 (targetTable = tableName)
- 프론트엔드: beforeFormSave 이벤트로 formData 주입
- 프론트엔드: _targetTable 메타데이터 전달
- 프론트엔드: ComponentRendererProps 상속 및 Renderer 단순화

멀티테넌시 및 부모-자식 관계 자동 처리로
복잡한 배열 데이터 저장 안정성 확보
2025-11-21 10:12:29 +09:00
kjs bb49073bf7 feat: 테이블 리스트에서 카테고리 다중 값 배지 표시 지원
문제:
- 테이블에서 'CATEGORY_218152,CATEGORY_205381' 같은 다중 값이
- 배지로 표시되지 않고 코드값 그대로 보임

원인:
- formatCellValue의 카테고리 렌더링이 단일 값만 처리
- 콤마로 구분된 다중 값 파싱 로직 없음

해결:
1. 콤마 구분자 감지 및 값 배열로 분리
2. 단일 값: 기존 로직 유지 (단일 배지)
3. 다중 값: flex-wrap gap-1로 여러 배지 렌더링
4. 각 배지는 매핑된 라벨과 색상 사용

결과:
 다중선택 저장된 데이터가 테이블에서 여러 배지로 표시됨
 각 배지에 올바른 색상과 라벨 적용
 단일 값도 기존처럼 정상 작동
2025-11-21 10:03:26 +09:00
kjs f4d27f51a3 fix: 카테고리 값 매핑을 올바른 속성명으로 수정
문제:
- value: undefined, label: undefined
- 잘못된 속성명 사용 (categoryValue, categoryLabel)

원인:
- API 응답 실제 구조:
  - valueCode: 'CATEGORY_154396'
  - valueLabel: '대기'

해결:
- v.categoryValue → v.valueCode
- v.categoryLabel → v.valueLabel

이제 다중선택 카테고리 select가 완벽히 작동합니다:
 다중선택 모드 활성화
 카테고리 옵션 로딩
 라벨 정상 표시
 콤마 구분자로 저장
2025-11-21 09:40:24 +09:00
kjs 114a807d79 debug: 카테고리 API 응답 원본 데이터 구조 확인
문제:
- value: undefined, label: undefined로 나옴
- v.categoryValue, v.categoryLabel이 존재하지 않음

디버깅:
- API 응답의 첫 번째 항목 전체 출력
- 객체의 모든 키 목록 출력
- 여러 가능한 속성명 시도:
  - category_value / categoryValue / value
  - category_label / categoryLabel / label

다음 단계:
- 콘솔에서 원본 데이터 구조 확인
- 실제 속성명에 맞게 매핑 수정
2025-11-21 09:39:09 +09:00
kjs 4928c54985 Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into feature/screen-management 2025-11-21 09:29:23 +09:00
dohyeons 205d062f4a 수정.. 2025-11-21 03:33:49 +09:00
dohyeons 0450390b2a 배치 대략적인 완료 2025-11-21 02:25:25 +09:00
kjs fc16f27640 feat: select-basic에 카테고리(category) 타입 옵션 로딩 추가
문제:
- select-basic이 webType='category'일 때 옵션이 안 보임
- CATEGORY_218152 같은 코드값만 표시됨
- 체크박스는 보이지만 라벨이 비어있음

원인:
- select-basic은 useCodeOptions만 사용 (code 타입용)
- category 타입은 getCategoryValues API 필요

해결:
1. categoryOptions 상태 추가
2. webType === 'category'일 때 getCategoryValues 호출
3. getAllOptions에 categoryOptions 포함
4. 로딩 상태에 isLoadingCategories 추가

디버깅:
- 카테고리 로딩 시작/완료 로그
- API 응답 로그
- 최종 allOptions 로그 추가

다음 단계:
- 콘솔에서 categoryOptions가 제대로 로드되는지 확인
2025-11-20 18:35:48 +09:00
kjs dd568b7235 fix: select-basic 카테고리 조건 로직 수정
문제:
- 이전 커밋에서 로직을 반대로 작성
- componentType !== 'select-basic'로 했지만
- componentType === 'select-basic'일 때 건너뛰어야 함

수정:
- componentType === 'select-basic'이면 통과 (아무것도 안 함)
- 그 외 카테고리는 CategorySelectComponent 사용

로직:
if (category && componentType === 'select-basic') {
  // 통과 - ComponentRegistry로 진행
} else if (category) {
  // CategorySelectComponent 사용
}
2025-11-20 18:31:50 +09:00
kjs 87fbf5b858 fix: select-basic 컴포넌트가 CategorySelectComponent에 가로채지는 문제 해결
문제:
- componentType이 'select-basic'이지만 webType이 'category'일 때
- DynamicComponentRenderer가 무조건 CategorySelectComponent 사용
- select-basic의 multiple 설정이 무시됨

원인:
- 152줄에서 webType === 'category' 조건만 체크
- componentType을 확인하지 않아 select-basic도 가로챔

해결:
- componentType !== 'select-basic' 조건 추가
- select-basic은 카테고리 조건을 건너뛰고 ComponentRegistry로 진행
- 다중선택 등 select-basic의 고급 기능 사용 가능

변경사항:
- DynamicComponentRenderer.tsx 152줄
- 카테고리 조건에 componentType 체크 추가
2025-11-20 18:31:24 +09:00
kjs 9b65c1cbff debug: DynamicComponentRenderer에서 select-basic 조회 로그 추가
문제:
- SelectBasicComponent 렌더링 로그가 전혀 안 보임
- select-basic이 ComponentRegistry에 등록되었는지 확인 필요

디버깅:
- componentType이 'select-basic'일 때 조회 결과 로그
- found: true/false로 등록 여부 확인
- componentConfig 값도 함께 출력

예상 결과:
- found: false면 등록 실패
- found: true면 다른 문제 (렌더링 과정에서 문제)
2025-11-20 18:29:29 +09:00
kjs f765ac4a47 debug: SelectBasicComponent 렌더링 확인용 로그 추가
문제:
- 다중선택 설정했지만 UI에 반영 안됨
- 디버깅 로그가 콘솔에 전혀 안 보임

원인 추정:
- SelectBasicComponent가 아예 렌더링 안되고 있을 가능성
- 또는 다른 select 컴포넌트가 대신 렌더링될 가능성

테스트:
- 최상단에 눈에 띄는 로그 (🚨🚨🚨) 추가
- componentId, componentType, columnName, multiple 값 출력
- 이 로그가 안 보이면 다른 컴포넌트가 렌더링되는 것
2025-11-20 18:26:19 +09:00
kjs f6c96d168b debug: select-basic 다중선택 디버깅 로그 강화
더 명확한 로그 출력:
- 단계별로 구분된 로그
- 각 props 출처별로 명확히 표시
- 최종 isMultiple 값 강조
- 활성화/비활성화 상태 명확히 표시

사용자는 브라우저 콘솔에서 다음을 확인:
1. '🔍 [SelectBasicComponent] ========== 다중선택 디버깅 ==========' 로그 찾기
2. '최종 isMultiple 값' 확인
3. 각 props 출처의 multiple 값 확인
4. / 상태 메시지 확인
2025-11-20 18:23:29 +09:00
kjs 6ea9001a50 fix: select-basic 다중선택 옵션이 실제 화면에 반영되지 않는 문제 해결
문제:
- 설정 패널에서 '다중 선택' 체크했지만 실제 화면에서 작동하지 않음
- componentConfig.multiple이 저장되었지만 컴포넌트에서 인식 못함

원인:
- DynamicComponentRenderer에서 componentConfig를 spread하여 props로 전달
- 하지만 config.multiple만 체크하고 props.multiple를 체크하지 않음

해결:
- isMultiple 변수 추가: props.multiple > config.multiple 우선순위
- 모든 다중선택 로직에서 isMultiple 사용하도록 수정
- 디버깅 로그 추가하여 각 값의 출처 확인

변경사항:
- isMultiple = props.multiple ?? config.multiple ?? false
- 초기화, 업데이트, 렌더링 로직에 isMultiple 적용
- 상세 디버깅 로그로 문제 추적 가능
2025-11-20 18:21:09 +09:00
kjs c57e0218fe feat: select-basic 컴포넌트에 다중선택 기능 추가
기능:
- 설정 패널에 '다중 선택' 체크박스 추가
- multiple 옵션 활성화 시 다중선택 UI 렌더링
- 선택된 항목을 태그 형식으로 표시
- 각 태그에 X 버튼으로 개별 제거 가능
- 드롭다운에 체크박스 표시
- 콤마(,) 구분자로 값 저장/파싱

수정사항:
- SelectBasicConfigPanel: 다중 선택 체크박스 추가
- SelectBasicConfigPanel: config 병합 방식으로 변경 (다른 속성 보호)
- SelectBasicComponent: 초기값 콤마 구분자로 파싱
- SelectBasicComponent: 외부 value 변경 시 다중선택 배열 동기화
- SelectBasicComponent: 다중선택 UI 렌더링 로직 추가

사용법:
1. 설정 패널에서 '다중 선택' 체크
2. 드롭다운에서 여러 항목 선택
3. 선택된 항목이 태그로 표시되며 X로 제거 가능
4. 저장 시 '값1,값2,값3' 형식으로 저장
2025-11-20 18:17:08 +09:00
kjs 62463e1ca8 fix: 분할 패널 라벨 표시 설정 초기 렌더링 버그 수정
- displayMode가 undefined일 때 기본값 'list' 처리 누락
- 조건문을 (config.rightPanel?.displayMode || 'list') === 'list'로 변경
- 이제 처음 들어갔을 때부터 라벨 표시 설정 UI가 보임

문제: LIST 모드가 기본값인데 초기에는 설정 UI가 안 보이고 테이블 모드로 변경 후 다시 LIST로 바꿔야 보임
원인: undefined === 'list'가 false가 되어 조건문이 작동하지 않음
해결: 기본값 처리 추가
2025-11-20 18:00:30 +09:00
kjs 6e5e3a04f3 fix: 기존 필드의 자동 채우기 테이블 컬럼 초기 로드 추가
- 초기 렌더링 시 기존 필드들의 autoFillFromTable이 설정되어 있으면 컬럼 자동 로드
- useEffect로 localFields 초기화 시점에 모든 필드 순회하며 컬럼 로드
- 사용자가 저장된 설정을 열었을 때 즉시 컬럼 목록 표시

문제: 품목정보 테이블을 선택했지만 컬럼이 표시되지 않음
원인: 기존에 설정된 autoFillFromTable에 대한 컬럼이 초기 로드되지 않음
해결: 초기화 useEffect 추가로 기존 설정 복원
2025-11-20 17:52:40 +09:00
SeongHyun Kim 95b5e3dc7a fix(autocomplete-search-input): 필드 매핑 저장 문제 해결
- types.ts에 targetTable 필드 추가하여 config에 저장되도록 수정
- ConfigPanel에서 targetTable을 localConfig로 관리하여 설정 유지
- Renderer 단순화 (TextInput 패턴 적용)
- Component에서 직접 isInteractive 체크 및 필드 매핑 처리
- ComponentRendererProps 상속으로 필수 props 타입 안정성 확보

문제:
- ConfigPanel 설정이 초기화되는 문제
- 필드 매핑 데이터가 DB에 저장되지 않는 문제

해결:
- 정상 작동하는 TextInput 컴포넌트 패턴 분석 및 적용
- Renderer는 props만 전달, Component가 저장 로직 처리
2025-11-20 17:47:56 +09:00
kjs 86eb9f0425 feat: 자동 채우기 테이블 선택 드롭다운 및 동적 컬럼 로드 추가
- 추가 입력 필드에서 자동 채우기 테이블을 드롭다운으로 선택 가능
- 텍스트 입력 대신 allTables에서 선택하는 방식으로 개선
- 테이블 선택 시 해당 테이블의 컬럼을 자동으로 로드
- autoFillTableColumns 상태로 필드별 테이블 컬럼 관리
- 선택한 테이블에 따라 컬럼 드롭다운이 동적으로 변경됨

사용자 경험 개선:
- 테이블명을 직접 입력하는 대신 목록에서 선택
- 선택한 테이블의 컬럼만 표시되어 혼란 방지
- 원본 테이블(기본) 또는 다른 테이블 선택 가능
2025-11-20 17:44:33 +09:00
kjs 6e92d1855a fix: SelectedItemsDetailInput 설정 패널에서 컬럼 자동 로드 추가
- 원본 테이블(sourceTable) 변경 시 컬럼 자동 로드
- 대상 테이블(targetTable) 변경 시 컬럼 자동 로드
- props로 받은 컬럼은 백업으로 사용하고, 내부에서 로드한 컬럼 우선 사용
- tableManagementApi.getColumnList() 사용하여 동적 로드

이제 원본/대상 테이블 선택 시 해당 테이블의 컬럼 목록이 자동으로 나타남
2025-11-20 17:37:51 +09:00
kjs c51cd7bc87 fix: 컴포넌트 설정 패널 config 병합 및 props 전달 개선
- TableListConfigPanel: handleNestedChange에서 전체 config 병합 로직 추가
- TableListComponent: checkbox.enabled 및 position 기본값 처리 (undefined시 기본값 사용)
- SelectedItemsDetailInputConfigPanel: handleChange에서 전체 config 병합 로직 추가
- SelectedItemsDetailInputConfigPanel: 원본 데이터 테이블 선택 disabled 조건 제거
- UnifiedPropertiesPanel: allTables 로드 및 ConfigPanel에 전달 추가

문제:
1. table-list 컴포넌트 체크박스 설정 변경 시 다른 설정 초기화
2. selected-items-detail-input 설정 변경 시 컴포넌트 이름 등 다른 속성 손실
3. 원본 데이터 테이블 선택이 비활성화되어 있음

해결:
- 모든 설정 패널에서 부분 업데이트 시 기존 config와 병합하도록 수정
- checkbox 관련 기본값 처리로 기존 컴포넌트 호환성 보장
- allTables를 별도로 로드하여 전체 테이블 목록 제공
2025-11-20 17:31:42 +09:00
kjs e2cc09b2d6 feat: 검색 필터 위젯 화면별 독립 설정 및 고정 모드 추가
- 검색 필터 설정을 화면별로 독립적으로 저장하도록 개선 (screenId 포함)
- FilterPanel, TableSearchWidget, TableListComponent에 화면 ID 기반 localStorage 키 적용
- 동적 모드(사용자 설정)와 고정 모드(디자이너 설정) 2가지 필터 방식 추가
- 고정 모드에서 컬럼 드롭다운 선택 기능 구현
- 컬럼 선택 시 라벨 및 필터 타입 자동 설정
- ConfigPanel 표시 문제 해결 (type='component' 지원)
- UnifiedPropertiesPanel에서 독립 컴포넌트 ConfigPanel 조회 개선

주요 변경:
- 같은 테이블을 사용하는 다른 화면에서 필터 설정이 독립적으로 관리됨
- 고정 모드에서는 설정 버튼이 숨겨지고 지정된 필터만 표시
- 테이블 정보가 있으면 컬럼을 드롭다운으로 선택 가능
- inputType에 따라 filterType 자동 추론 (number, date, select, text)
2025-11-20 16:21:18 +09:00
kjs 45ac397417 수주등록 저장기능 2025-11-20 15:30:00 +09:00
kjs b46559ba78 Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into feature/screen-management 2025-11-20 15:12:32 +09:00
kjs 86313c5e89 fix: SelectedItemsDetailInput 수정 모드에서 null 레코드 삽입 방지
- buttonActions.ts: formData가 배열인 경우 일반 저장 건너뜀
- SelectedItemsDetailInput이 UPSERT를 완료한 후 일반 저장이 실행되어 null 레코드가 삽입되던 문제 해결
- ScreenModal에서 그룹 레코드를 배열로 전달하는 경우 감지하여 처리
- skipDefaultSave 플래그가 제대로 작동하지 않던 문제 근본 해결
2025-11-20 15:07:26 +09:00
dohyeons 461338618e Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into common/feat/dashboard-map 2025-11-20 14:02:34 +09:00
SeongHyun Kim 30cece9bec Merge branch 'ksh' 2025-11-20 13:49:08 +09:00
SeongHyun Kim 68f79db6ed feat(autocomplete-search-input): 필드 자동 매핑 및 저장 위치 선택 기능 추가
- 필드 자동 매핑 기능 구현
  * FieldMapping 타입 추가 (sourceField → targetField)
  * applyFieldMappings() 함수로 선택 시 자동 입력
  * 여러 필드를 한 번에 자동으로 채움 (거래처 선택 → 주소/전화 자동 입력)

- 값 필드 저장 위치 선택 기능 추가
  * ValueFieldStorage 타입 추가 (targetTable, targetColumn)
  * 기본값(화면 연결 테이블) 또는 명시적 테이블/컬럼 지정 가능
  * 중간 테이블, 이력 테이블 등 다중 테이블 저장 지원

- UI/UX 개선
  * 모든 선택 필드를 Combobox 스타일로 통일
  * 각 필드 아래 간략한 사용 설명 추가
  * 저장 위치 동작 미리보기 박스 추가

- 문서 작성
  * 사용_가이드.md 신규 작성 (실전 예제 3개 포함)
  * 빠른 시작 가이드, FAQ, 체크리스트 제공
2025-11-20 13:47:21 +09:00
kjs 640351d812 refactor: SelectedItemsDetailInput 하드코딩 제거
- 중복 표시 제거: 품번/품명 하드코딩 삭제 (displayColumns로 이미 표시 중)
- 동적 텍스트: '입력된 품번' → '입력된 항목'으로 일반화
- 이제 어떤 필드 조합이든 동적으로 작동
2025-11-20 12:21:48 +09:00
kjs 348c040e20 refactor: SplitPanelLayout 하드코딩 제거 및 그룹 삭제 기능 구현
- 하드코딩 제거: 필드명 패턴을 동적으로 처리
- 민감한 필드(id, password, token, company_code)만 제외하고 모두 표시
- 그룹 삭제 기능: 중복 제거 활성화 시 관련된 모든 레코드 삭제
- URL 파라미터 초기화: 모달 닫을 때 자동으로 초기화
- 백엔드: deleteGroupRecords API 추가
- 프론트엔드: dataApi.deleteGroupRecords 클라이언트 추가
2025-11-20 12:19:27 +09:00
kjs e3b78309fa 우측 패널 일괄삭제 기능 2025-11-20 11:58:43 +09:00
kjs c3f58feef7 Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into feature/screen-management 2025-11-20 10:27:38 +09:00
kjs 34cd7ba9e3 feat: 수정 모드 UPSERT 기능 구현
- SelectedItemsDetailInput 컴포넌트 수정 모드 지원
- 그룹화된 데이터 UPSERT API 추가 (/api/data/upsert-grouped)
- 부모 키 기준으로 기존 레코드 조회 후 INSERT/UPDATE/DELETE
- 각 레코드의 모든 필드 조합을 고유 키로 사용
- created_date 보존 (UPDATE 시)
- 수정 모드에서 groupByColumns 기준으로 관련 레코드 조회
- 날짜 타입 ISO 형식 자동 감지 및 포맷팅 (YYYY.MM.DD)

주요 변경사항:
- backend: dataService.upsertGroupedRecords() 메서드 구현
- backend: dataRoutes POST /api/data/upsert-grouped 엔드포인트 추가
- frontend: ScreenModal에서 groupByColumns 파라미터 전달
- frontend: SelectedItemsDetailInput 수정 모드 로직 추가
- frontend: 날짜 필드 타임존 제거 및 포맷팅 개선
2025-11-20 10:23:54 +09:00
SeongHyun Kim 6d0acdd1ec fix: ModalRepeaterTable reference 매핑 처리 순서 및 API 파라미터 수정
문제:
- reference 매핑 시 조인 조건의 소스 필드 값이 undefined
- API 호출 시 filters 파라미터를 백엔드가 인식 못함

해결:
- 컬럼 처리를 2단계로 분리 (source/manual → reference)
- API 파라미터 변경 (filters→search, limit/offset→size/page)
- 응답 경로 수정 (data.data → data.data.data)

결과:
- 외부 테이블 참조 매핑 정상 작동
- 품목 선택 시 customer_item_mapping에서 단가 자동 조회 성공
2025-11-20 10:16:49 +09:00
dohyeons 33350a4d46 feat: Digital Twin Editor 테이블 매핑 UI 및 백엔드 API 구현 2025-11-20 10:15:58 +09:00
SeongHyun Kim d5d267e63a feat(modal-repeater-table): 컬럼 매핑 및 계산 규칙 UI 대폭 개선
새로운 기능
- 컬럼별 독립적인 소스 테이블 선택 기능
- SourceColumnSelector, ReferenceColumnSelector 컴포넌트 추가
- 계산 규칙 자동 동기화 로직 (cleanupInitialConfig)

UI/UX 개선
- 컬럼 설정 UI를 세로 레이아웃으로 재구성 (h-10 통일)
- 매핑 타입별 색상 구분 (파란색/보라색/초록색)
- 계산 규칙 섹션 재디자인 (안내 박스, 번호 배지, 빈 상태)
- 현재 설정 시각화 (코드 스타일 표시)

버그 수정
- 계산 규칙 삭제 시 컬럼이 수정 불가능 상태로 남는 문제 해결
- 결과 필드 변경 시 이전 필드의 calculated 속성 제거
- 초기 로드 시 계산 규칙과 컬럼 속성 동기화

개선 사항
- 모든 입력 필드의 높이와 텍스트 크기 일관성 확보
- 섹션별 명확한 제목과 설명 추가
- 접근성 향상 (ARIA 레이블, 포커스 스타일)
2025-11-19 17:09:12 +09:00
kjs d4895c363c refactor: 디버깅 로그 제거 및 코드 정리
변경사항:
- handleBatchSave의 모든 console.log 제거
- 핵심 로직만 유지 (데이터 매핑, 조합 생성, 저장)
- 코드 가독성 향상

제거된 로그:
- modalDataStore 데이터 확인 로그
- parentDataMapping 설정 로그
- 품목/그룹 처리 로그
- 조합 생성/병합 로그
- 데이터 소스 상세 로그
- 저장 요청/결과 로그

유지된 기능:
- Zustand modalDataStore에서 부모 데이터 가져오기
- 무한 깊이 모달 지원
- 완전히 설정 기반 parentDataMapping
- 카티션 곱 조합 생성
- 하드코딩 없는 동적 매핑
2025-11-19 13:57:54 +09:00
kjs 762ab8e684 fix: Zustand modalDataStore에서 부모 데이터 가져오기
문제:
- modalDataStore가 window 전역 변수가 아닌 Zustand store임
- window.__modalDataRegistry로 접근 시도했으나 빈 객체 반환
- 거래처 데이터를 찾을 수 없어 customer_code 매핑 실패

해결:
- useModalDataStore.getState().dataRegistry로 Zustand store 직접 접근
- ModalDataItem[] 배열에서 originalData 추출
- 각 테이블별 데이터를 modalDataStore 객체로 변환
- 거래처(customer_mng), 품목(item_info) 데이터 모두 접근 가능

기술적 변경:
- dynamic import로 Zustand store 로드
- ModalDataItem 구조 이해 및 originalData 추출
- 에러 핸들링 (store 로드 실패 시)
- 상세한 디버깅 로그 (테이블별 데이터 count)
2025-11-19 13:51:24 +09:00
kjs 97b5cd7a5b fix: 다단계 모달 환경에서 부모 데이터 매핑 수정
문제:
- 메인 화면(거래처 선택) → 첫 번째 모달(품목 선택) → 두 번째 모달(상세 입력)
- selectedRowsData는 바로 이전 화면 데이터만 제공하여 2단계 이전 데이터 접근 불가
- customer_id가 NULL로 저장됨

해결:
- modalDataStore의 전역 레지스트리에서 모든 누적 데이터 접근
- sourceTable에 따라 적절한 데이터 소스 자동 선택
- 거래처 데이터(customer_mng)를 modalDataStore에서 직접 가져옴

기술적 변경:
- ButtonPrimaryComponent: allComponents에서 componentConfigs 수집 및 전달
- ButtonActionContext: componentConfigs 속성 추가
- handleBatchSave: modalDataStore에서 테이블별 데이터 조회
- parentDataMapping 로직: sourceTable 기반 데이터 소스 자동 감지
- 디버깅 로그 강화 (modalDataStore 키, 데이터 소스 추적)
2025-11-19 13:48:44 +09:00
kjs f4e4ee13e2 feat: 부모 데이터 매핑 기능 구현 (선택항목 상세입력 컴포넌트)
- 여러 테이블(거래처, 품목 등)에서 데이터를 가져와 자동 매핑 가능
- 각 매핑마다 소스 테이블, 원본 필드, 저장 필드를 독립적으로 설정
- 검색 가능한 Combobox로 테이블 및 컬럼 선택 UX 개선
- 소스 테이블 선택 시 해당 테이블의 컬럼 자동 로드
- 라벨, 컬럼명, 데이터 타입으로 검색 가능
- 세로 레이아웃으로 가독성 향상

기술적 변경사항:
- ParentDataMapping 인터페이스 추가 (sourceTable, sourceField, targetField)
- buttonActions.ts의 handleBatchSave에서 소스 테이블 기반 데이터 소스 자동 판단
- tableManagementApi.getColumnList() 사용하여 테이블 컬럼 동적 로드
- Command + Popover 조합으로 검색 가능한 Select 구현
- 각 매핑별 독립적인 컬럼 상태 관리 (mappingSourceColumns)
2025-11-19 13:22:49 +09:00
SeongHyun Kim 8eccdd0b4c fix: 수주등록 항목추가 시 정보출력 가능하게 수정
문제:
- 조건부 컨테이너 내부의 modal-repeater-table 컴포넌트가 데이터 업데이트 불가
- ConditionalSectionViewer가 RealtimePreview에 formData/onFormDataChange 미전달

해결:
- ConditionalSectionViewer.tsx: RealtimePreview에 formData, onFormDataChange props 추가
- DynamicComponentRenderer.tsx: 디버깅 로그 정리
- ScreenModal.tsx: 디버깅 로그 정리

영향:
- 수주 등록 화면 품목 추가 기능 정상 작동
- 조건부 컨테이너 내부 모든 폼 컴포넌트 데이터 바인딩 정상화

Refs: #수주관리 #modal-repeater-table #ConditionalContainer
2025-11-19 11:48:00 +09:00
kjs b74cb94191 화면 복사기능 수정 2025-11-19 10:03:38 +09:00
SeongHyun Kim 0bedd8bc0b fix: Dialog 모달 내부 input 필드 텍스트 입력 불가 문제 해결
- ResizableDialog 콘텐츠 영역에 pointer-events 및 z-index 설정 추가
- TextInputComponent를 제어 컴포넌트에서 비제어 컴포넌트로 변경 (value → defaultValue)
- ItemSelectionModal 및 TextInputComponent 디버그 로그 제거

수정 파일:
- frontend/components/ui/resizable-dialog.tsx
- frontend/lib/registry/components/text-input/TextInputComponent.tsx
- frontend/lib/registry/components/modal-repeater-table/ItemSelectionModal.tsx
2025-11-18 18:40:25 +09:00
SeongHyun Kim 9c8ec879d9 Merge branch 'ksh' 2025-11-18 16:20:38 +09:00
SeongHyun Kim b844953fe0 fix: ItemSelectionModal 선택 로직 및 디버깅 개선
- uniqueField 값이 undefined일 때 객체 참조 비교로 폴백
- 멀티셀렉트 모드에서 선택/해제 로직 안정화
- 체크박스 클릭 이벤트 전파 개선
- 유효한 컬럼만 렌더링하도록 필터링 추가
- 디버깅을 위한 콘솔 로그 추가
- 선택된 항목의 uniqueField 값 표시
2025-11-18 16:19:56 +09:00
kjs 5f026e88ab Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into feature/screen-management 2025-11-18 16:15:57 +09:00
kjs e1a5befdf7 feat: 기간별 단가 설정 기능 구현 - 자동 계산 시스템
- 선택항목 상세입력 컴포넌트 확장
  - 실시간 가격 계산 기능 추가 (할인율/할인금액, 반올림 방식)
  - 카테고리 값 기반 연산 매핑 시스템
  - 3단계 드릴다운 방식 설정 UI (메뉴 → 카테고리 → 값 매핑)

- 설정 가능한 계산 로직
  - autoCalculation 설정으로 계산 필드명 동적 지정
  - valueMapping으로 카테고리 코드와 연산 타입 매핑
  - 할인 방식: none/rate/amount
  - 반올림 방식: none/round/floor/ceil
  - 반올림 단위: 1/10/100/1000

- UI 개선
  - 입력 필드 가로 배치 (반응형 Grid)
  - 카테고리 타입 필드 옵션 로딩 개선
  - 계산 결과 필드 자동 표시 및 읽기 전용 처리
  - 날짜 입력 필드 네이티브 피커 지원

- API 연동
  - 2레벨 메뉴 목록 조회
  - 메뉴별 카테고리 컬럼 조회
  - 카테고리별 값 목록 조회

- 문서화
  - 기간별 단가 설정 가이드 작성
2025-11-18 16:12:47 +09:00
SeongHyun Kim 108af2a68b feat: Section Card/Paper 레이아웃 컴포넌트 추가 및 설정 패널 통합
새로운 그룹화 레이아웃 컴포넌트 2종 추가:
- Section Card: 제목+테두리 기반 명확한 섹션 구분
- Section Paper: 배경색 기반 미니멀한 섹션 구분

주요 변경사항:
- 새 컴포넌트 등록 (각 4개 파일: Component, ConfigPanel, Renderer, index)
- UnifiedPropertiesPanel에 인라인 설정 UI 추가 (280줄)
- DetailSettingsPanel ConfigPanel 인터페이스 통일화 (config → componentConfig)
- getComponentConfigPanel에 동적 import 매핑 추가
- 기존 컴포넌트 타입 정리 (autocomplete, entity-search, modal-repeater)

특징:
- shadcn/ui 기반 일관된 디자인 시스템 준수
- 중첩 박스 금지 원칙 적용
- 반응형 지원 (모바일 우선)
- collapsible 기능 지원 (Section Card)
2025-11-18 11:28:22 +09:00
kjs 967b76591b 플레이스홀더 변경 2025-11-18 11:08:05 +09:00
kjs 4cd27639e6 fix: Collapsible 레이아웃 구조 수정
- CardContent 내부에서 CollapsibleContent가 제대로 렌더링되도록 구조 수정
- mb-2, mt-2로 간격 조정
- 오른쪽으로 밀려나는 문제 해결
2025-11-18 10:30:04 +09:00
kjs 7bb26e0e30 fix: Collapsible 변수 참조 오류 수정
- isGroupExpanded 변수를 올바르게 사용하도록 수정
- 불필요한 주석 제거
- map 함수에 return 문 추가
2025-11-18 10:28:07 +09:00
kjs def94c41f4 refactor: 설정 패널 UI 개선 - Collapsible로 정리
- 필드 그룹을 Collapsible로 변경하여 펼침/접힘 가능
- 항목 표시 설정도 Collapsible로 분리하여 깔끔하게 정리
- 그룹 제목에 displayItems 개수 표시
- 기본적으로 그룹은 펼쳐진 상태, 표시 설정은 접힌 상태
- ChevronDown/ChevronRight 아이콘으로 펼침 상태 표시
- 복잡한 설정을 단계적으로 볼 수 있어 가독성 대폭 향상
2025-11-18 10:25:28 +09:00
kjs eef1451c5a fix: 항목 표시 설정을 그룹별로 분리
- FieldGroup에 displayItems 추가 (그룹별 독립적인 표시 설정)
- SelectedItemsDetailInputConfig에서 전역 displayItems 제거
- renderDisplayItems에 groupId 파라미터 추가하여 그룹별 설정 사용
- 설정 패널에서 그룹별로 displayItems 관리
- 각 그룹마다 다른 표시 형식 가능 (예: 거래처 정보 vs 단가 정보)
- 그룹의 필드만 선택 가능하도록 필터링
2025-11-18 10:21:36 +09:00
kjs e234f88577 feat: 항목 표시 설정 기능 추가 (기본값, 빈 값 처리 포함)
- DisplayItem 타입 추가 (icon, field, text, badge)
- 필드별 표시 형식 지원 (text, currency, number, date, badge)
- 빈 값 처리 옵션 추가 (hide, default, blank)
- 기본값 설정 기능 추가
- 스타일 옵션 추가 (굵게, 밑줄, 기울임, 색상)
- renderDisplayItems 헬퍼 함수로 유연한 표시 렌더링
- SelectedItemsDetailInputConfigPanel에 항목 표시 설정 UI 추가
- displayItems가 없으면 기존 방식(모든 필드 나열)으로 폴백
2025-11-18 10:14:31 +09:00
kjs cddce40f35 fix: 첫 글자 입력 시 포커스 유지 문제 해결
- handleAddGroupEntry: + 추가 버튼 클릭 시 미리 빈 entry를 배열에 추가
- handleFieldChange: 기존 entry 업데이트만 수행 (새로운 entry 추가 로직 제거)
- 이제 첫 글자 입력 시에도 배열 길이가 변하지 않아 포커스가 유지됨
2025-11-18 10:02:27 +09:00
kjs 3d74b9deb2 fix: 선택항목 상세입력 컴포넌트 입력 시 포커스 유지 개선
- 입력 중 onFormDataChange 호출 제거하여 불필요한 리렌더링 방지
- 저장 버튼 클릭 시에만 데이터 전달하도록 변경 (beforeFormSave 이벤트)
- handleSave에서 beforeFormSave 이벤트 발생 및 100ms 대기
- 원본 데이터 표시 버그 수정 (modalData 중첩 구조 처리)
- fieldGroups 구조 감지 로직 수정 (details → fieldGroups)

이제 사용자가 타이핑할 때 포커스가 유지됩니다.
2025-11-18 10:00:56 +09:00
kjs e9268b3f00 feat: 선택항목 상세입력 컴포넌트 그룹별 독립 입력 구조로 개선
- 데이터 구조 변경: ItemData.details → ItemData.fieldGroups (그룹별 관리)
- 각 필드 그룹마다 독립적으로 여러 항목 추가/수정/삭제 가능
- renderFieldsByGroup: 그룹별 입력 항목 목록 + 편집 + 추가 버튼 구현
- renderGridLayout/renderCardLayout: 품목별 그룹 카드 표시로 단순화
- handleFieldChange: groupId 파라미터 추가 (itemId, groupId, entryId, fieldName, value)
- handleAddGroupEntry, handleRemoveGroupEntry, handleEditGroupEntry 핸들러 추가
- buttonActions handleBatchSave: fieldGroups 구조 처리하도록 수정
- 원본 데이터 표시 버그 수정: modalData의 중첩 구조 처리

사용 예:
- 품목 1
  - 그룹 1 (거래처 정보): 3개 항목 입력 가능
  - 그룹 2 (단가 정보): 5개 항목 입력 가능
- 각 항목 클릭 → 수정 가능
- 저장 시 모든 입력 항목이 개별 레코드로 저장됨
2025-11-18 09:56:49 +09:00
SeongHyun Kim b09bd64083 Merge branch 'main' into ksh 2025-11-17 17:12:03 +09:00
SeongHyun Kim 23cd677413 fix: 컴포넌트 등록 및 entity-search 검증 개선
- 컴포넌트 등록을 useEffect → 즉시 실행으로 변경 (3개 컴포넌트)
- entity-search-input tableName 검증 추가 (FE/BE)
- DynamicComponentRenderer에서 componentConfig props 전달 수정
- EntitySearchModal key prop 경고 해결
- 불필요한 ScreenDesigner 렌더링 코드 제거

Fixes: 컴포넌트 미등록 에러, tableName undefined 500 에러, React key 경고
2025-11-17 16:48:42 +09:00
SeongHyun Kim aee4e86036 entity-search-input tableName 유효성 검증 추가 및 에러 메시지 개선 2025-11-17 16:18:38 +09:00
kjs 9d68268910 Merge branch 'feature/screen-management' of http://39.117.244.52:3000/kjs/ERP-node into feature/screen-management 2025-11-17 15:59:43 +09:00
kjs 289677a971 fix: SelectedItemsDetailInput Select 빈 값 에러 수정 및 inputType 디버깅 로그 추가
- Select 컴포넌트에서 빈 문자열 value를 가진 SelectItem 제거
- category/code 타입 필드의 옵션 로딩 디버깅 로그 추가
- 빈 값 필터링으로 'SelectItem must not have empty value' 에러 해결
- codeCategory 자동 감지 로직 디버깅 강화
2025-11-17 15:59:25 +09:00
kjs d218fd7a1a Merge branch 'main' into feature/screen-management 2025-11-17 15:25:26 +09:00
kjs bc557c4074 상세입력 컴포넌트 테이블 선택 기능 추가 2025-11-17 15:25:08 +09:00
SeongHyun Kim 12000ca059 feat: 카테고리 삭제 시 실제 데이터 사용 여부 확인 및 차단 기능
- 카테고리 값/컬럼이 실제 데이터에서 사용 중이면 삭제 차단
- 사용 중인 데이터 개수 및 메뉴 목록 표시
- 물리적 삭제 방식으로 변경
- 상세 에러 메시지 팝업 추가
2025-11-17 14:22:50 +09:00
kjs a783317820 컴포넌트 렌더링 오류 수정 2025-11-17 13:31:09 +09:00
kjs d1d76bbea8 Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into feature/screen-management 2025-11-17 13:08:16 +09:00
kjs a6e6a14fd1 선택항목 상게입력 컴포넌트 구현 2025-11-17 12:23:45 +09:00
kjs 2c099feea0 조건부 컨테이너 2025-11-17 10:09:02 +09:00
SeongHyun Kim 660f81edbc fix: table-list 컴포넌트 크기 조절 및 동기화 문제 해결
- 기본 너비 120px → 1000px 변경
- 선택 영역과 컴포넌트 영역 크기 동기화
- 편집 패널에서 너비/높이 조절 시 즉시 반영되도록 개선
2025-11-17 10:01:09 +09:00
kjs d1ce14de7a Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into feature/screen-management 2025-11-17 09:32:12 +09:00
kjs dd77ddc141 fix: 조건부 컨테이너에서 화면이 렌더링되지 않는 문제 수정
- InteractiveScreenViewer는 screenId가 아닌 component, allComponents를 받음
- screenApi.getLayout()과 getScreen()으로 화면 데이터 로드
- 로드된 컴포넌트들을 InteractiveScreenViewer로 렌더링
- 화면 로딩 상태 추가
- screenInfo 전달하여 테이블 컨텍스트 제공
2025-11-14 18:20:52 +09:00
kjs 2ec6e3e920 fix: Select 컴포넌트 빈 문자열 값 오류 수정
- Radix UI Select는 빈 문자열 value를 허용하지 않음
- "선택 안 함" 옵션의 값을 "" → "none"으로 변경
- onValueChange에서 "none" 체크하여 screenId를 null로 설정
2025-11-14 18:13:28 +09:00
kjs 7d1ecf718b fix: 조건부 컨테이너 API 임포트 경로 수정
- screenManagementApi → screenApi로 변경
- @/lib/api/screenManagement → @/lib/api/screen
- screenApi.getScreens() 사용하여 화면 목록 조회
- ScreenDefinition 타입에 맞게 필드명 수정 (id → screenId)
2025-11-14 18:00:56 +09:00
kjs f5756e184f feat: 조건부 컨테이너를 화면 선택 방식으로 개선
- ConditionalSection 타입 변경 (components[] → screenId, screenName)
  * 각 조건마다 컴포넌트를 직접 배치하는 대신 기존 화면을 선택
  * 복잡한 입력 폼도 화면 재사용으로 간단히 구성

- ConditionalSectionDropZone을 ConditionalSectionViewer로 교체
  * 드롭존 대신 InteractiveScreenViewer 사용
  * 선택된 화면을 조건별로 렌더링
  * 디자인 모드에서 화면 미선택 시 안내 메시지 표시

- ConfigPanel에서 화면 선택 드롭다운 구현
  * screenManagementApi.getScreenList()로 화면 목록 로드
  * 각 섹션마다 화면 선택 Select 컴포넌트
  * 선택된 화면의 ID와 이름 자동 저장 및 표시
  * 로딩 상태 표시

- 기본 설정 업데이트
  * defaultConfig에서 components 제거, screenId 추가
  * 모든 섹션 기본값을 screenId: null로 설정

- README 문서 개선
  * 화면 선택 방식으로 사용법 업데이트
  * 사용 사례에 화면 ID 예시 추가
  * 구조 다이어그램 수정 (드롭존 → 화면 표시)
  * 디자인/실행 모드 설명 업데이트

장점:
- 기존 화면 재사용으로 생산성 향상
- 복잡한 입력 폼도 간단히 조건부 표시
- 화면 수정 시 자동 반영
- 유지보수 용이
2025-11-14 17:40:07 +09:00
SeongHyun Kim 4fa57d67d6 거래처별 품목정보 검색바 및 카테고박스 추가 2025-11-14 16:49:49 +09:00
SeongHyun Kim 361cb56a1d 거래처관리-품목등록 화면 컴포넌트 제작 2025-11-14 16:30:38 +09:00
kjs e6949bdd67 fix: 수주등록 모달 및 품목 검색 UI 개선
- 품목 검색 모달에서 컬럼명 대신 라벨명 표시
  * ItemSelectionModal에 columnLabels prop 추가
  * ModalRepeaterTableComponent에서 columns 설정의 라벨 매핑 생성
  * 테이블 헤더에 한글 라벨 표시 (품번, 품명, 규격, 재질 등)

- 이미 추가된 품목은 검색 결과에서 완전 제외
  * filteredResults로 중복 항목 필터링
  * 회색 표시 대신 목록에서 아예 제거
  * 사용자 친화적인 안내 메시지 추가

- 수주등록 버튼 크기 및 렌더링 수정
  * 기본 크기를 200x40에서 120x40으로 변경 (다른 버튼과 통일)
  * h-full w-full 클래스 적용하여 컨테이너 크기에 맞게 렌더링
  * style prop의 width/height 제거하여 Tailwind 클래스 우선순위 문제 해결

- 수주등록 모달에 판매 유형 및 무역 정보 추가
  * 국내/해외 판매 선택 기능
  * 해외 판매 시 무역 정보 섹션 표시 (인코텀즈, 결제조건, 통화 등)
  * 거래처 정보 확장 (담당자, 납품처, 납품장소)

- 품목 반복 테이블 컬럼 조정
  * 품목번호를 품번으로 변경
  * 비고 컬럼 제거
  * 규격, 재질 컬럼 추가
  * 납품일을 납기일로 변경
2025-11-14 16:19:27 +09:00
kjs 64e6fd1920 feat: 수주등록 모달 및 범용 컴포넌트 개발
- 범용 컴포넌트 3종 개발 및 레지스트리 등록:
  * AutocompleteSearchInput: 자동완성 검색 입력 컴포넌트
  * EntitySearchInput: 엔티티 검색 모달 컴포넌트
  * ModalRepeaterTable: 모달 기반 반복 테이블 컴포넌트

- 수주등록 전용 컴포넌트:
  * OrderCustomerSearch: 거래처 검색 (AutocompleteSearchInput 래퍼)
  * OrderItemRepeaterTable: 품목 관리 (ModalRepeaterTable 래퍼)
  * OrderRegistrationModal: 수주등록 메인 모달

- 백엔드 API:
  * Entity 검색 API (멀티테넌시 지원)
  * 수주 등록 API (자동 채번)

- 화면 편집기 통합:
  * 컴포넌트 레지스트리에 등록
  * ConfigPanel을 통한 설정 기능
  * 드래그앤드롭으로 배치 가능

- 개발 문서:
  * 수주등록_화면_개발_계획서.md (상세 설계 문서)
2025-11-14 14:43:53 +09:00
kjs 075869c89c fix: 분할 패널 카테고리 API 엔드포인트 경로 수정
- 잘못된 API 경로 수정
  - 이전: /api/table-type/category-values/{tableName}/{columnName}
  - 수정: /api/table-categories/{tableName}/{columnName}/values
- 백엔드 라우트와 일치하도록 변경 (app.ts에서 /api/table-categories로 마운트됨)
- 좌측/우측 패널 카테고리 매핑 로드 API 호출 경로 수정
2025-11-13 17:55:10 +09:00
kjs 702b506665 feat: 분할 패널 테이블에서 카테고리 값을 라벨로 표시하는 기능 추가
- 좌측/우측 패널 테이블의 카테고리 타입 컬럼 매핑 로드
- formatCellValue 함수 추가하여 카테고리 코드를 라벨+배지로 변환
- 좌측 패널 테이블 렌더링 부분(그룹화/일반)에 formatCellValue 적용
- 우측 패널 테이블 렌더링 부분에 formatCellValue 적용
- Badge 컴포넌트 import 및 카테고리별 색상 표시

변경 사항:
- 카테고리 매핑 상태 추가 (leftCategoryMappings, rightCategoryMappings)
- API 클라이언트 import 추가
- 카테고리 값 조회 API 호출 useEffect 2개 추가
- 셀 값 포맷팅 함수 formatCellValue 추가
- 모든 테이블 td 렌더링에서 String(value) → formatCellValue() 적용
2025-11-13 17:52:33 +09:00
kjs 2a52f25c10 feat: 모달 저장 후 부모 화면 테이블 자동 새로고침 기능 추가
- ScreenModal에 onRefresh 콜백 추가하여 refreshTable 이벤트 발송
- InteractiveScreenViewerDynamic에 onRefresh, onFlowRefresh prop 추가 및 하위 컴포넌트로 전달
- TableListComponent에 refreshTable 이벤트 리스너 추가
- SplitPanelLayoutComponent에 refreshTable 이벤트 리스너 추가하여 좌/우측 패널 모두 새로고침
- 모달에서 데이터 저장 시 부모 화면의 모든 테이블 컴포넌트가 자동으로 새로고침되도록 개선

변경된 파일:
- frontend/components/common/ScreenModal.tsx
- frontend/components/screen/InteractiveScreenViewerDynamic.tsx
- frontend/lib/registry/components/table-list/TableListComponent.tsx
- frontend/lib/registry/components/split-panel-layout/SplitPanelLayoutComponent.tsx
2025-11-13 17:42:20 +09:00
kjs 296ee3e825 테이블 데이터 필터링 기능 및 textarea컴포넌트 자동 매핑 삭제 2025-11-13 17:06:41 +09:00
kjs a828f54663 feat: 카테고리 배지 없음 옵션 추가
- 카테고리 색상 설정 시 '배지 없음' 옵션 추가
- color='none'일 때 배지 대신 일반 텍스트로 표시
- CategoryValueEditDialog, CategoryValueAddDialog에 배지 없음 버튼 추가
- InteractiveDataTable, TableListComponent에서 배지 없음 처리
- CategoryValueManager에서 배지 없음 표시 추가
- 기본 색상을 배지 없음으로 변경
2025-11-13 15:24:31 +09:00
kjs f73f788b0a fix: 카테고리 컬럼 중복 데이터 문제 해결
- table_column_category_values JOIN 시 회사 데이터만 사용하도록 수정
- 공통 데이터(company_code='*') 사용 금지
- is_active=true 필터 추가로 활성화된 카테고리만 조회
- entityJoinService.ts의 buildJoinQuery 및 buildCountQuery 수정
- 품목 정보 테이블 등에서 발생하던 2배 중복 문제 해결
2025-11-13 15:16:36 +09:00
kjs 36bff64145 feat: 카테고리 컬럼 메뉴별 매핑 기능 구현
- category_column_mapping 테이블 생성 (마이그레이션 054)
- 테이블 타입 관리에서 2레벨 메뉴 선택 기능 추가
- 카테고리 컬럼 조회 시 현재 메뉴 및 상위 메뉴 매핑 자동 조회
- 캐시 무효화 로직 개선
- 메뉴별 카테고리 설정 저장 및 불러오기 기능 구현
2025-11-13 14:41:24 +09:00
kjs 3ddca95af5 feat: 메뉴 관리에서 화면 할당 해제 기능 추가
## 문제점
- URL 직접 입력 모드에서 빈 값으로 저장 시 menu_url은 비워지지만
- screen_code는 기존 값이 남아있어 화면 할당이 해제되지 않음

## 해결방법

### 백엔드 (adminController.ts)
- updateMenu: menu_url이 비어있으면 screen_code도 null로 자동 설정
- 로직: menuUrl ? screenCode : null

### 프론트엔드 (MenuFormModal.tsx, menu.ts)
- 화면 선택 시 screenCode도 함께 formData에 저장
- URL 타입 변경 시 screenCode 초기화
- MenuFormData 인터페이스에 screenCode 필드 추가

## 동작 방식
1. 화면 할당: menuUrl + screenCode 함께 저장
2. URL 직접 입력: menuUrl만 저장, screenCode는 undefined
3. 빈 값 저장: menuUrl = null, screenCode = null (자동)

이제 메뉴에서 화면 할당을 완전히 해제할 수 있습니다.
2025-11-13 12:22:33 +09:00
kjs 4e0d5239c6 커밋 2025-11-13 12:17:28 +09:00
kjs 658211b9d1 feat: 화면 복사 기능 개선 및 버튼 모달 설정 수정
## 주요 변경사항

### 1. 화면 복사 기능 강화
- 최고 관리자가 다른 회사로 화면 복사 가능하도록 개선
- 메인 화면과 연결된 모달 화면 자동 감지 및 일괄 복사
- 복사 시 버튼의 targetScreenId 자동 업데이트
- 일괄 이름 변경 기능 추가 (복사본 텍스트 제거)
- 중복 화면명 체크 기능 추가

#### 백엔드 (screenManagementService.ts)
- generateMultipleScreenCodes: 여러 화면 코드 일괄 생성 (Advisory Lock 사용)
- detectLinkedModalScreens: edit 액션도 모달로 감지하도록 개선
- checkDuplicateScreenName: 중복 화면명 체크 API 추가
- copyScreenWithModals: 메인+모달 일괄 복사 및 버튼 업데이트
- updateButtonTargetScreenIds: 복사된 모달로 버튼 targetScreenId 업데이트
- updated_date 컬럼 제거 (screen_layouts 테이블에 존재하지 않음)

#### 프론트엔드 (CopyScreenModal.tsx)
- 회사 선택 UI 추가 (최고 관리자 전용)
- 연결된 모달 화면 자동 감지 및 표시
- 일괄 이름 변경 기능 (텍스트 제거/추가)
- 실시간 미리보기
- 중복 화면명 체크

### 2. 버튼 설정 모달 화면 선택 개선
- 편집 중인 화면의 company_code 기준으로 화면 목록 조회
- 최고 관리자가 다른 회사 화면 편집 시 해당 회사의 모달 화면만 표시
- targetScreenId 문자열/숫자 타입 불일치 수정

#### 백엔드 (screenManagementController.ts)
- getScreens API에 companyCode 쿼리 파라미터 추가
- 최고 관리자는 다른 회사의 화면 목록 조회 가능

#### 프론트엔드
- ButtonConfigPanel: currentScreenCompanyCode props 추가
- DetailSettingsPanel: currentScreenCompanyCode 전달
- UnifiedPropertiesPanel: currentScreenCompanyCode 전달
- ScreenDesigner: selectedScreen.companyCode 전달
- targetScreenId 비교 시 parseInt 처리 (문자열→숫자)

### 3. 카테고리 메뉴별 컬럼 분리 기능
- 메뉴별로 카테고리 컬럼을 독립적으로 관리
- 카테고리 컬럼 추가/삭제 시 메뉴 스코프 적용

## 수정된 파일
- backend-node/src/services/screenManagementService.ts
- backend-node/src/controllers/screenManagementController.ts
- backend-node/src/routes/screenManagementRoutes.ts
- frontend/components/screen/CopyScreenModal.tsx
- frontend/components/screen/config-panels/ButtonConfigPanel.tsx
- frontend/components/screen/panels/DetailSettingsPanel.tsx
- frontend/components/screen/panels/UnifiedPropertiesPanel.tsx
- frontend/components/screen/ScreenDesigner.tsx
- frontend/lib/api/screen.ts
2025-11-13 12:17:10 +09:00
kjs b77fffbad7 리포트 모달문제 수정 2025-11-12 18:51:20 +09:00
kjs 77faba7e77 fix: 분할 패널 필터링 수정 및 디버깅 로그 제거
문제:
- 분할 패널에서 필터 입력 시 검색이 제대로 작동하지 않음
- 백엔드가 {value: '전자', operator: 'contains'} 형태를 처리하지 못함

원인:
- buildAdvancedSearchCondition이 필터 객체의 value 속성을 추출하지 않음
- 객체를 직접 문자열로 변환하여 '[object Object]'로 검색됨

해결:
1. tableManagementService.buildAdvancedSearchCondition 수정:
   - {value, operator} 형태의 필터 객체 감지
   - actualValue 추출 및 operator 처리
   - 모든 웹타입 케이스에 actualValue 전달

2. 프론트엔드 디버깅 로그 제거:
   - SplitPanelLayoutComponent의 console.log 제거
   - 필터, 컬럼 가시성, API 호출 로그 정리

테스트 필요:
- 분할 패널에서 필터 입력 → 정상 검색 확인
- 텍스트, 날짜, 숫자, 코드 타입 필터 동작 확인
2025-11-12 16:39:50 +09:00
kjs 7b84a81a96 fix: 분할 패널 컬럼 순서 변경 및 필터링 개선
문제:
1. ColumnVisibilityPanel에서 순서 변경 후 onColumnOrderChange가 호출되지 않음
2. 필터 입력 시 데이터가 제대로 필터링되지 않음
3. useAuth 훅 import 경로 오류 (@/hooks/use-auth → @/hooks/useAuth)

해결:
1. ColumnVisibilityPanel.handleApply()에 onColumnOrderChange 호출 추가
2. 필터 변경 감지 및 데이터 로드 로직 디버깅 로그 추가
3. useAuth import 경로 수정

테스트:
- 거래처관리 화면에서 컬럼 순서 변경 → 실시간 반영 
- 페이지 새로고침 → 순서 유지 (localStorage) 
- 필터 입력 → 필터 변경 감지 (추가 디버깅 필요)
2025-11-12 16:33:08 +09:00
kjs 579c4b7387 feat: 분할 패널 좌측 테이블에 검색/필터/그룹/컬럼가시성 기능 추가
문제:
- 분할 패널에서 검색 컴포넌트의 필터/그룹/컬럼 설정이 동작하지 않음
- 테이블 리스트 컴포넌트에 있던 로직이 분할 패널에는 없었음

해결:
1. 필터 처리:
   - leftFilters를 searchValues 형식으로 변환
   - API 호출 시 필터 조건 전달
   - 필터 변경 시 데이터 자동 재로드

2. 컬럼 가시성:
   - visibleLeftColumns useMemo 추가
   - leftColumnVisibility를 적용하여 표시할 컬럼 필터링
   - 렌더링 시 가시성 처리된 컬럼만 표시

3. 그룹화:
   - groupedLeftData useMemo 추가
   - leftGrouping 배열로 데이터를 그룹화
   - 그룹별 헤더와 카운트 표시

4. 테이블 등록:
   - columns 속성을 올바르게 참조 (displayColumns → columns)
   - 객체/문자열 타입 모두 처리
   - 화면 설정에 맞게 테이블 등록

테스트:
- 거래처 관리 화면에서 검색 컴포넌트 버튼 활성화
- 필터 설정 → 데이터 필터링 동작
- 그룹 설정 → 데이터 그룹화 동작
- 테이블 옵션 → 컬럼 가시성/순서 변경 동작
2025-11-12 16:13:26 +09:00
kjs 2dcf2c4c8e fix: 분할 패널 좌측 테이블 등록 시 displayColumns만 사용하도록 수정
문제:
- displayColumns가 비어있을 때 전체 컬럼을 보여주는 오류
- 화면에 설정된 컬럼만 표시되어야 함

해결:
- displayColumns가 비어있으면 테이블을 등록하지 않음
- displayColumns에 설정된 컬럼만 검색 컴포넌트에 등록
- 화면 관리에서 설정한 컬럼 구성을 정확히 반영

테스트:
- 거래처 관리 화면에서 좌측 테이블의 displayColumns(14개) 정상 표시
- 테이블 옵션/필터 설정/그룹 설정 버튼 정상 작동
- 우측 테이블은 검색 컴포넌트에서 제외
2025-11-12 16:05:45 +09:00
kjs 9cf9b87068 refactor: 분할 패널에서 좌측 테이블만 검색 컴포넌트 등록하도록 변경
변경 사유:
- 분할 패널은 마스터-디테일 구조로 좌측(마스터)만 독립적으로 검색 가능
- 우측(디테일)은 좌측 선택 항목에 종속되므로 별도 검색 불필요

변경 내용:
- 우측 테이블 registerTable 호출 제거 (주석 처리)
- TableSearchWidget에서 좌측 테이블만 선택 가능
- 우측 테이블 관련 상태(rightFilters, rightGrouping 등)는 내부 로직용으로 유지

효과:
- 분할 패널 사용 시 좌측 마스터 테이블만 검색 설정 가능
- 우측 디테일 테이블은 좌측 선택에 따라 자동 필터링
- 검색 컴포넌트 UI가 더 직관적으로 개선
2025-11-12 15:54:48 +09:00
kjs c40d8ea1ba fix: 분할 패널 우측 테이블 설정에서 화면에 표시되는 컬럼만 보이도록 수정
문제:
- 분할 패널의 테이블 옵션/검색필터 설정/그룹 설정에서 모든 컬럼이 표시됨
- 우측 패널에서 rightTableColumns (전체 컬럼) 사용하여 등록

해결:
- componentConfig.rightPanel?.columns (화면 표시 컬럼)만 등록하도록 수정
- 좌측 패널과 동일한 방식으로 displayColumns 사용
- 의존성 배열도 rightTableColumns → rightPanel.columns로 수정

변경 사항:
- rightTableColumns 대신 displayColumns 사용
- 컬럼 매핑 로직 개선 (col.columnName || col.name || col)
- 화면에 실제 표시되는 컬럼만 설정 UI에 노출
2025-11-12 15:49:52 +09:00
kjs e06f21f63f refactor: 테이블 리스트 컴포넌트에서 검색 필터 UI 제거
- 테이블 상단 헤더 UI 전체 제거 (AdvancedSearchFilters 영역)
- 테이블 옵션, 필터 설정, 그룹 설정 버튼 제거
- 전체 개수 표시 제거
- 검색 필터 로직은 모두 유지 (상태, 함수, localStorage)
- 해당 기능은 TableSearchWidget 컴포넌트에서 제공 예정

변경 사유:
- 검색 필터 기능을 독립적인 TableSearchWidget으로 분리
- 테이블 컴포넌트와 검색 필터 UI의 관심사 분리
- 재사용 가능한 검색 필터 컴포넌트 구조로 개선
2025-11-12 15:45:21 +09:00
kjs 54724fc578 fix: 그룹 설정 기능 수정 및 카테고리 값 표시 개선
- TableListComponent: grouping 상태 변경 시 groupByColumns 자동 업데이트
- 그룹화 시 카테고리/엔티티/코드 타입 컬럼은 _name 필드 사용
- 그룹 키 생성 시 실제 이름 표시 (코드 대신)

예시:
- 이전: 상태:CATEGORY_159712 > 품번:SLI-2025-0001
- 이후: 상태:완제품 > 품번:SLI-2025-0001
2025-11-12 15:25:21 +09:00
kjs 4cdc72e360 로그 제거 2025-11-12 15:12:12 +09:00
kjs a883187889 feat: TableSearchWidget 높이 자동 조정 및 컴포넌트 재배치 기능 구현
- TableSearchWidgetHeightContext 추가: 위젯 높이 변화 관리
- TableSearchWidget: ResizeObserver로 높이 변화 감지 및 localStorage 저장
- 실제 화면(/screens/[screenId]/page.tsx)에서만 동작 (디자이너 제외)
- TableSearchWidget 아래 컴포넌트들의 Y 위치를 높이 차이만큼 자동 조정
- 화면 로딩 시 저장된 높이 복원 및 컴포넌트 위치 재조정

주요 변경사항:
1. 필터가 여러 줄로 wrap될 때 높이 자동 증가
2. 높이가 늘어난 만큼 아래 컴포넌트들이 자동으로 아래로 이동
3. 새로고침 후에도 설정 유지 (localStorage)
4. 화면 디자이너에서는 기존대로 동작 (영향 없음)

기술 구현:
- Context API로 위젯 높이 전역 관리
- ResizeObserver로 실시간 높이 감지
- localStorage로 사용자별 높이 설정 영구 저장
- 컴포넌트 렌더링 시 동적 Y 위치 계산
2025-11-12 14:54:49 +09:00
kjs 6d1743c524 feat: 테이블 검색 필터 개선 - 필터 너비 설정 및 자동 wrap 기능
- FilterPanel: 필터별 너비(width) 설정 기능 추가 (50-500px)
- TableSearchWidget: 필터가 여러 줄로 자동 wrap되도록 flex-wrap 적용
- TableSearchWidget: 필터 너비 설정을 localStorage에 저장/복원
- InteractiveScreenViewerDynamic: TableSearchWidget의 높이를 auto로 설정하여 콘텐츠에 맞게 자동 조정
- globals.css: 입력 필드 포커스 시 검정 테두리 제거 (combobox, input)

주요 변경사항:
1. 필터 설정에서 각 필터의 표시 너비를 개별 설정 가능
2. 필터가 많을 때 자동으로 여러 줄로 배치 (overflow 방지)
3. 설정된 필터 너비가 새로고침 후에도 유지됨
4. TableSearchWidget 높이가 콘텐츠에 맞게 자동 조정

TODO: TableSearchWidget 높이 변화 시 아래 컴포넌트 자동 재배치 기능 구현 예정
2025-11-12 14:50:06 +09:00
kjs 5c205753e2 feat: 테이블 검색 필터 UI 개선 및 실시간 검색 구현
- 모든 필터 입력창 높이 통일 (h-9, 36px)
- 실시간 검색: 입력 시 즉시 필터 적용 (검색 버튼 제거)
- 초기화 버튼 추가: 모든 필터값을 한번에 리셋
- filters → searchValues 자동 변환 로직 추가
- select 필터: 선택된 값의 라벨 저장하여 데이터 없을 때도 표시 유지
- select 옵션 초기 로드 후 계속 유지 (dataCount 변경 시에도 유지)

주요 개선사항:
1. Input, Select, Date 등 모든 필터의 높이가 동일하게 표시
2. 사용자가 값을 입력하면 바로 테이블이 필터링됨
3. 초기화 버튼으로 간편하게 모든 필터 제거 가능
4. 필터링 결과가 0건이어도 select 박스의 선택값이 유지됨

알려진 제한사항:
- 카테고리/엔티티 필터는 현재 테이블 데이터 기반으로만 옵션 표시
  (전체 정의된 카테고리 값이 아닌, 실제 데이터에 있는 값만 표시)
2025-11-12 14:16:16 +09:00
kjs 71fd3f5ee7 fix: 필터 select 옵션에서 카테고리/엔티티 라벨이 올바르게 표시되도록 수정
- 백엔드: entityJoinService에서 _label 필드를 SELECT에 추가
- 백엔드: tableManagementService에 멀티테넌시 필터링 추가 (company_code)
- 백엔드: categorizeJoins에서 table_column_category_values를 명시적으로 dbJoins로 분류
- 백엔드: executeCachedLookup와 getTableData에 companyCode 파라미터 추가
- 프론트엔드: getColumnUniqueValues가 백엔드 조인 결과의 _name 필드를 사용하도록 수정
- 프론트엔드: TableSearchWidget에서 select 옵션 로드 로직 개선

이제 필터 select 박스에서 코드 대신 실제 이름(라벨)이 표시됩니다.
예: CATEGORY_148700 → 정상, topseal_admin → 탑씰 관리자 계정
2025-11-12 14:02:58 +09:00
kjs 58870237b6 feat: 선택(select) 타입 필터 동적 옵션 로드 기능 추가
- TableRegistration에 getColumnUniqueValues 콜백 함수 추가
- TableListComponent에서 현재 데이터의 고유 값 추출 함수 구현
- TableSearchWidget에서 select 타입 필터의 옵션을 자동으로 로드
- 테이블 데이터가 변경되면 필터 옵션도 자동 업데이트
- 데이터 건수 표시 기능도 함께 수정 (등록 순서 문제 해결)
2025-11-12 12:06:58 +09:00
kjs 33ba13b070 fix: 테이블 컬럼 설정 개선
- 체크박스 컬럼 위치 보존 (드래그 순서 변경 시 맨 오른쪽으로 이동하는 문제 해결)
- 사용자별 컬럼 설정 localStorage 저장 및 불러오기 기능 추가
- useAuth 훅으로 userId 가져오기
- 초기 로드 시 저장된 설정 자동 복원
2025-11-12 11:15:44 +09:00
kjs 73049c4162 fix: 테이블 검색 필터 위젯 - 테이블 등록 및 선택 기능 수정
- TableListComponent: tableConfig.columns 기반 테이블 등록
- TableSearchWidget: 불필요한 로그 제거
- TableOptionsContext: 등록/해제 로그 제거
- TableListComponent 일부 카테고리 로그 제거 (진행중)
2025-11-12 10:58:21 +09:00
kjs c6941bc41f feat: 테이블 검색 필터 위젯 구현 완료
- TableOptionsContext 기반 테이블 자동 감지 시스템 구현
- 독립 위젯으로 드래그앤드롭 배치 가능
- 3가지 기능: 컬럼 가시성, 필터 설정, 그룹 설정
- FlowWidget, TableList, SplitPanel 등 모든 테이블 컴포넌트 지원
- 유틸리티 카테고리에 등록 (1920×80px)
- 위젯 크기 제어 가이드 룰 파일에 추가
2025-11-12 10:48:24 +09:00
kjs fef2f4a132 fix: 화면 편집기에서 버튼 스타일 실시간 반영 문제 해결
**문제:**
- 화면 편집기에서 버튼의 스타일(색상, 폰트 등)을 변경해도 실시간으로 반영되지 않음
- 저장 후 실제 화면에서는 정상적으로 보임

**원인:**
- ButtonPrimaryComponent에서 isInteractive 모드일 때만 component.style을 적용
- 디자인 모드(isDesignMode)에서는 사용자 정의 스타일이 무시됨

**해결:**
- buttonElementStyle에 component.style을 항상 적용하도록 수정
- width/height는 레이아웃 충돌 방지를 위해 제외 유지
- 디자인 모드와 인터랙티브 모드 모두에서 스타일 실시간 반영

**영향:**
- 화면 편집기에서 버튼 스타일 변경 시 즉시 미리보기 가능
- 저장하지 않아도 시각적 피드백 제공
2025-11-11 18:27:27 +09:00
kjs 35ec16084f feat: 채번 규칙 및 코드 메뉴별 격리 구현
**주요 변경사항:**

1. **메뉴 스코프 변경 (getSiblingMenuObjids)**
   - 기존: 형제 메뉴 + 모든 형제의 자식 메뉴 포함
   - 변경: 자신 + 자신의 자식 메뉴만 포함
   - 결과: 각 2레벨 메뉴가 완전히 독립적으로 격리됨

2. **채번 규칙 메뉴 선택 상태 유지**
   - useState 초기값 함수에서 저장된 selectedMenuObjid 복원
   - 속성창 닫았다 열어도 선택한 메뉴와 채번 규칙 유지
   - config.autoGeneration.selectedMenuObjid에 저장

3. **로그 정리**
   - 프론트엔드: 디버깅 로그 제거
   - 백엔드: info 레벨 로그를 debug 레벨로 변경
   - 운영 환경에서 불필요한 로그 출력 최소화

**영향:**
- 영업관리 메뉴: 영업관리의 채번 규칙/코드만 조회
- 기준정보 메뉴: 기준정보의 채번 규칙/코드만 조회
- 각 메뉴 그룹이 독립적으로 데이터 관리 가능
2025-11-11 18:24:24 +09:00
kjs 6534d03ecd feat: 화면 편집기에서 메뉴 기반 데이터 스코프 적용
- 백엔드: screenManagementService에 getMenuByScreen 함수 추가
- 백엔드: GET /api/screen-management/screens/:id/menu 엔드포인트 추가
- 프론트엔드: screenApi.getScreenMenu() 함수 추가
- ScreenDesigner: 화면 로드 시 menu_objid 자동 조회
- ScreenDesigner: menuObjid를 RealtimePreview와 UnifiedPropertiesPanel에 전달
- UnifiedPropertiesPanel: menuObjid를 DynamicComponentConfigPanel에 전달

이로써 화면 편집기에서 코드/카테고리/채번규칙이 해당 화면이 할당된 메뉴 기준으로 필터링됨
2025-11-11 16:28:17 +09:00
kjs 32d4575fb5 feat: 코드 컴포넌트에 메뉴 스코프 적용
- useCodeOptions 훅에 menuObjid 파라미터 추가
- commonCodeApi.codes.getList에 menuObjid 전달
- SelectBasicComponent에서 menuObjid 받아서 useCodeOptions로 전달
- InteractiveScreenViewer에서 DynamicWebTypeRenderer로 menuObjid 전달
- 화면 페이지에서 RealtimePreview로 menuObjid 전달

이제 코드 위젯도 카테고리처럼 형제 메뉴별로 격리됩니다.
2025-11-11 15:25:07 +09:00
kjs 668b45d4ea feat: 채번규칙 메뉴 스코프 전환 완료
 주요 변경사항:
- 백엔드: menuService.ts 추가 (형제 메뉴 조회 유틸리티)
- 백엔드: numberingRuleService.getAvailableRulesForMenu() 메뉴 스코프 적용
- 백엔드: tableCategoryValueService 메뉴 스코프 준비 (menuObjid 파라미터 추가)
- 프론트엔드: TextInputConfigPanel에 부모 메뉴 선택 UI 추가
- 프론트엔드: 메뉴별 채번규칙 필터링 (형제 메뉴 공유)

🔧 기술 세부사항:
- getSiblingMenuObjids(): 같은 부모를 가진 형제 메뉴 OBJID 조회
- 채번규칙 우선순위: menu (형제) > table > global
- 사용자 메뉴(menu_type='1') 레벨 2만 부모 메뉴로 선택 가능

📝 다음 단계:
- 카테고리 컴포넌트도 메뉴 스코프로 전환 예정
2025-11-11 14:32:00 +09:00
kjs 532c80a86b 분할패널 테이블 리스트 구현 2025-11-11 11:37:26 +09:00
kjs bab960b50e feat: 엑셀 다운로드 파일명을 메뉴 이름으로 변경
- 메뉴 클릭 시 localStorage에 메뉴 이름 저장 (useMenu, AppLayout)
- 엑셀 다운로드 시 localStorage의 메뉴 이름을 파일명으로 사용
- 백엔드 카테고리 컬럼 조회 쿼리 파라미터 버그 수정
- API 호출 시 불필요한 autoFilter 파라미터 제거

파일명 형식: {메뉴이름}_{날짜}.xlsx
예시: 품목등록테스트_2025-11-11.xlsx
2025-11-11 10:29:47 +09:00
kjs c5b065ac81 리스트 스크롤 제거 2025-11-10 18:38:56 +09:00
kjs 59fa54b812 style: 테이블 리스트 폰트 및 여백 조정
- 데이터 행에 font-normal 적용하여 bold 제거
- 헤더는 font-bold 유지
- 데이터 행 상하 여백 축소 (py-2 → py-1.5)
- 행 고정 높이 제거하여 컨텐츠에 따라 자동 조정

변경된 파일:
- frontend/lib/registry/components/table-list/TableListComponent.tsx
2025-11-10 18:24:51 +09:00
kjs 2722ebb218 feat: 테이블 리스트 날짜 형식을 yyyy-mm-dd로 변경
- inputType이 date/datetime인 컬럼 yyyy-mm-dd 형식으로 표시
- format이 'date'인 경우도 동일한 형식 적용
- 생성일, 수정일 등 날짜 컬럼 가독성 개선

변경된 파일:
- frontend/lib/registry/components/table-list/TableListComponent.tsx
2025-11-10 18:15:06 +09:00
kjs dad7e9edab feat: 엑셀 다운로드 기능 개선
- 화면 편집기 컬럼 설정 기반 다운로드 (visible 컬럼만)
- 필터 조건 적용 (필터링된 데이터만 다운로드)
- 한글 라벨명 표시 (column_labels 테이블 조회)
- Entity 조인 값 표시 (writer → writer_name 등)
- 카테고리 타입 라벨 변환 (코드 → 라벨)
- 멀티테넌시 보안 강화 (autoFilter: true)
- 디버깅 로그 정리

변경된 파일:
- frontend/lib/utils/buttonActions.ts
- frontend/lib/registry/components/table-list/TableListComponent.tsx

관련 이슈: #엑셀다운로드개선
2025-11-10 18:12:09 +09:00
kjs 49f779e0e4 feat: writer 컬럼 자동 user_name 변환 완료
- writer 컬럼이 있는 테이블에서 자동으로 user_name 표시
- 백엔드: entityJoinService에서 writer 컬럼 감지 및 user_info 조인
- 프론트엔드: entityJoinApi 항상 사용 및 writer_name 자동 표시
- 디버깅 로그 제거
2025-11-10 16:38:16 +09:00
kjs 605fbc4383 debug: writer 컬럼 조인 디버깅 로그 추가
- 프론트엔드: formatCellValue에서 writer 컬럼 데이터 로깅
- 백엔드: writer 조인 설정 및 검증 상세 로깅
- 목적: writer_name이 빈값으로 표시되는 문제 원인 파악
2025-11-10 16:36:54 +09:00
kjs 2e0ccaac16 fix: 모든 테이블 데이터 조회 시 entityJoinApi 사용하도록 수정
- 문제: writer 컬럼이 user_name으로 변환되지 않음
- 원인: entityJoinColumns가 없을 때 tableTypeApi 사용 (entity 조인 미지원)
- 해결: 항상 entityJoinApi.getTableDataWithJoins 사용
- 영향:
  - writer 컬럼이 있는 모든 테이블에서 자동으로 writer_name 조인
  - 기존 additionalJoinColumns도 정상 작동
  - 백엔드의 자동 writer 조인 기능 활성화
2025-11-10 16:33:15 +09:00
kjs ccbb6924c8 feat: writer 컬럼 자동 user_name 변환 기능 추가
- 문제: 테이블 리스트에서 writer 컬럼이 user_id로 표시됨
- 해결:
  1. 백엔드: entityJoinService에서 writer 컬럼 자동 감지
  2. writer 컬럼 발견 시 user_info 테이블과 자동 조인
  3. writer_name 별칭으로 user_name 반환
  4. 프론트엔드: writer 컬럼일 때 writer_name 우선 표시
- 영향:
  - writer 컬럼이 있는 모든 테이블에서 자동으로 작성자명 표시
  - 기존 entity 조인 설정과 충돌 없이 작동
  - column_labels 설정 불필요
2025-11-10 16:32:00 +09:00
kjs 99468ca250 fix: 속성 패널에서 너비/높이 직접 입력 시 격자 스냅 제거
- 문제: 속성 패널에서 너비/높이 입력 시 격자 시스템이 자동으로 값을 변경
- 원인: updateComponentProperty에서 size.width/height 변경 시 무조건 격자 스냅 적용
- 해결: 직접 입력 시에는 격자 스냅을 적용하지 않도록 로직 주석 처리
- 영향:
  - 속성 패널에서 원하는 크기로 자유롭게 설정 가능
  - 드래그/리사이즈 시에는 별도 로직에서 격자 스냅 처리
- 디버깅 로그 제거
2025-11-10 15:49:48 +09:00
kjs cdf9c0e562 fix: 화면 편집기에서 버튼 컴포넌트 선택 가능하도록 수정
- 문제: 버튼 컴포넌트 클릭 시 버튼 동작이 실행되어 선택되지 않음
- 해결:
  1. ButtonPrimaryComponent에서 디자인 모드일 때 <button> 대신 <div>로 렌더링
  2. ScreenDesigner의 ScreenPreviewProvider에서 isPreviewMode를 false로 설정
  3. 디자인 모드에서는 버튼 액션이 실행되지 않고 onClick만 전달되도록 수정
- 영향: button-primary 타입 버튼이 화면 편집기에서 정상적으로 선택 가능
2025-11-10 15:36:18 +09:00
kjs 3f32996014 fix: 날짜 입력 필드 높이 반응형 개선
- 드래그 드롭으로 배치되는 인풋 필드 기본 높이 30px로 변경
- 날짜 입력 컴포넌트의 모든 외부 div에 h-full 추가
- 모든 input 요소에 min-h-full 추가하여 부모 높이를 제대로 따르도록 수정
- daterange, year 타입도 동일하게 적용
2025-11-10 14:33:15 +09:00
kjs 15f21a1142 revert: e27845a 커밋의 변경사항 되돌림 - 화면 레이아웃 문제 수정 2025-11-10 14:21:29 +09:00
kjs ce3ba22c54 Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into feature/screen-management 2025-11-10 12:00:08 +09:00
dohyeons 68c3db5213 feat: 분할 패널 레이아웃 멀티테넌시 및 자동 필터링 기능 추가
- 데이터 조회 API에 회사별 자동 필터링 기능 추가
  - GET /api/data/:tableName에 company_code 필터 자동 적용
  - GET /api/data/join에 우측 테이블 회사별 필터링 추가
  - 최고 관리자(company_code = '*')는 전체 데이터 조회 가능

- 분할 패널 레이아웃 우측 추가 시 조인 컬럼 자동 입력
  - 좌측에서 선택한 항목의 조인 키 값을 우측 추가 모달에 자동 설정
  - 자동 설정된 필드는 읽기 전용으로 표시 (disabled + 안내 문구)
  - 사용자는 나머지 필드만 입력하면 됨

- 데이터 서비스 개선
  - getJoinedData 함수에 companyCode 파라미터 추가
  - checkColumnExists 함수를 public으로 변경하여 재사용성 향상
  - 조인 쿼리에 DISTINCT 추가로 중복 데이터 방지
  - 복합키 테이블의 레코드 삭제 지원

- 레코드 생성 시 멀티테넌시 자동 처리
  - company_code와 company_name 자동 추가
  - 테이블 컬럼 존재 여부 체크 후 자동 설정

- 분할 패널 설정 UI 개선
  - 좌측 패널 표시 컬럼 선택 UI 추가
  - 추가 폼에 표시할 컬럼 선택 기능 추가
  - Primary Key 정보 자동 조회 및 표시
2025-11-10 11:56:39 +09:00
kjs 94846e92ef Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into feature/screen-management 2025-11-10 09:36:05 +09:00
dohyeons 68577a09f9 우측 패널 항목 삭제 기능 구현 2025-11-07 18:20:24 +09:00
kjs e27845a82f feat: 테이블 탭 드래그앤드롭 개선 및 AI-개발자 협업 규칙 수립
주요 변경사항:
- 드래그앤드롭 컬럼의 라벨 숨김 및 placeholder로 라벨명 표시
- 기본 높이 30px로 변경
- 5개 시스템 컬럼(id, created_date, updated_date, writer, company_code) 숨김
- AI-개발자 협업 작업 수칙 문서 작성 및 .cursorrules에 통합

파일 변경:
- frontend/components/screen/ScreenDesigner.tsx
  * getDefaultHeight(): 기본 높이를 30px로 변경
  * handleDrop(): labelDisplay false, placeholder 추가
- frontend/components/screen/panels/TablesPanel.tsx
  * hiddenColumns Set으로 시스템 컬럼 필터링
- .cursor/rules/ai-developer-collaboration-rules.mdc (신규)
  * 확인 우선, 한 번에 하나, 철저한 마무리 원칙
  * 데이터베이스 검증, 코드 수정, 테스트, 커뮤니케이션 규칙
- .cursorrules
  * 필수 확인 규칙 섹션 추가
  * 모든 작업 시작/완료 시 협업 규칙 확인 강제화
2025-11-07 17:12:01 +09:00
dohyeons 3009d1eecc 삭제버튼 수정버튼 토글 삭제 2025-11-07 16:09:58 +09:00
dohyeons afea879920 수정/삭제 기능 구현 2025-11-07 16:02:01 +09:00
dohyeons 672aba8404 계층 구조 트리 뷰 2025-11-07 15:21:44 +09:00
kjs 4294fbf608 feat: 채번 규칙 테이블 기반 자동 필터링 구현
- 채번 규칙 scope_type을 table로 단순화
- 화면의 테이블명을 자동으로 감지하여 채번 규칙 필터링
- TextInputConfigPanel에 screenTableName prop 추가
- getAvailableNumberingRulesForScreen API로 테이블 기반 조회
- NumberingRuleDesigner에서 자동으로 테이블명 설정
- webTypeConfigConverter 유틸리티 추가 (기존 화면 호환성)
- AutoGenerationConfig 타입 개선 (enabled, options.numberingRuleId)
- 채번 규칙 선택 UI에서 ID 제거, 설명 추가
- 불필요한 console.log 제거

Backend:
- numberingRuleService: 테이블 기반 필터링 로직 구현
- numberingRuleController: available-for-screen 엔드포인트 수정

Frontend:
- TextInputConfigPanel: 테이블명 기반 채번 규칙 로드
- NumberingRuleDesigner: 적용 범위 UI 제거, 테이블명 자동 설정
- ScreenDesigner: webTypeConfig → autoGeneration 변환 로직 통합
- DetailSettingsPanel: autoGeneration 속성 매핑 개선
2025-11-07 14:27:07 +09:00
dohyeons efaa267d78 분할 패널에서 부서 추가 기능 구현 2025-11-07 14:22:23 +09:00
dohyeons 7835898a09 우측 패널 조절 가능하도록 수정 2025-11-07 12:00:46 +09:00
dohyeons 25740c499d 좌측 패널에 매핑한 컬럼 나오도록 구현 2025-11-07 11:51:44 +09:00
kjs 5b79bfb19d 화면 컴포넌트 위치문제 수정 2025-11-07 11:36:58 +09:00
kjs fb201cc799 회사별 테이블 데이터 격리 2025-11-06 18:35:05 +09:00
kjs 0e4cf7b641 쿼리 에러 수정 2025-11-06 18:10:21 +09:00
kjs a2637f4dbb Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into feature/screen-management 2025-11-06 17:33:29 +09:00
leeheejin ead3433f3e 기능추가 2025-11-06 17:32:29 +09:00
leeheejin b3cd771b99 버튼 수정과 그룹드롭다운, 품목복사기능, 연속입력기능추가 2025-11-06 17:32:24 +09:00
kjs f2500865a6 격자 저장문제 수정 2025-11-06 17:01:13 +09:00
kjs 786576bb76 커밋 2025-11-06 14:46:15 +09:00
kjs 832e80cd7f 배지 표시 수정 2025-11-06 14:18:36 +09:00
kjs 4affe623a5 fix: 카테고리 매핑 로딩 타이밍 개선
- loading 의존성 제거 (불필요한 재로드 방지)
- columnMeta 길이 변화로 매핑 로드 트리거
- 매핑 로드 전후 상태 디버깅 로그 추가
- categoryMappings 빈 객체 문제 해결
2025-11-06 12:43:01 +09:00
kjs f53a818f2f fix: 카테고리 매핑 변경 시 강제 리렌더링 추가
- categoryMappingsKey 상태 추가로 매핑 변경 감지
- 매핑 업데이트 시 key 증가로 tbody 리렌더링 강제
- 간헐적으로 배지가 표시되지 않던 타이밍 이슈 해결
- 카테고리 배지 렌더링 디버깅 로그 추가
2025-11-06 12:39:56 +09:00
kjs 85e1b532fa fix: 캐시에서 inputType 누락 문제 해결
- 캐시된 데이터 사용 시 inputType이 설정되지 않던 문제 수정
- cached.inputTypes를 올바르게 매핑하여 meta에 포함
- webType 체크 제거, inputType만 사용하도록 변경
- 화면 전환 후 캐시 사용 시에도 카테고리 타입 정상 인식
2025-11-06 12:28:39 +09:00
kjs 4cd08c3900 fix: webType도 체크하여 카테고리 컬럼 감지
- inputType과 webType 모두 'category'인 경우 처리
- columnMeta에 inputType이 없어도 webType으로 감지 가능
- material 컬럼 등 webType만 있는 경우도 정상 동작
2025-11-06 12:27:22 +09:00
kjs 70dc24f7a1 fix: columnMeta 로딩 완료 후 카테고리 매핑 로드
- columnMeta가 비어있을 때 로딩 대기 로그 출력
- columnMeta 준비 완료 후에만 카테고리 매핑 시도
- 카테고리 컬럼 없음 로그에 디버깅 정보 추가
- 화면 전환 시 columnMeta → 카테고리 매핑 순서 보장
2025-11-06 12:26:07 +09:00
kjs cd961a2162 fix: 화면 복귀 시 카테고리 매핑 갱신 보장
- loading 상태를 의존성으로 변경
- 데이터 로드 완료 시점(loading: false)에 매핑 갱신
- 화면 전환 후 복귀 시에도 최신 카테고리 데이터 반영
- 로딩 중에는 매핑 로드하지 않도록 가드 추가
2025-11-06 12:24:12 +09:00
kjs 95b341df79 fix: 데이터 변경 시 카테고리 매핑 자동 갱신
- useEffect 의존성을 refreshTrigger에서 data.length로 변경
- 데이터가 추가/삭제/변경될 때마다 자동으로 매핑 갱신
- 화면 전환 후 데이터 로드 완료 시점에 매핑도 함께 갱신
2025-11-06 12:22:24 +09:00
kjs 49935189b6 fix: 화면 전환 후 카테고리 매핑 갱신 문제 해결
- useEffect 의존성 배열에 refreshTrigger 추가
- 데이터 새로고침 시 카테고리 매핑도 자동 갱신
- 매핑 로드 시작/종료 로그 추가하여 디버깅 용이성 향상
2025-11-06 12:20:58 +09:00
kjs 939a8696c8 feat: TableListComponent에서 카테고리 값을 배지로 표시
- categoryMappings 타입을 색상 포함하도록 수정
- 카테고리 값 로드 시 color 필드 포함
- formatValue에서 카테고리를 Badge 컴포넌트로 렌더링
- 매핑 없을 시에도 기본 slate 색상의 배지로 표시
- 디버깅 로그 추가
2025-11-06 12:18:43 +09:00
leeheejin 3f890cdbfa Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into lhj
; Conflicts:
;	frontend/components/admin/CreateTableModal.tsx
;	frontend/components/screen/CopyScreenModal.tsx
;	frontend/components/screen/MenuAssignmentModal.tsx
;	frontend/components/screen/ScreenList.tsx
;	frontend/components/screen/widgets/FlowWidget.tsx
;	frontend/lib/registry/components/table-list/TableListComponent.tsx
2025-11-06 12:14:07 +09:00
leeheejin 0839f7f603 리사이징, 체크박스,엔터치면 다음 칸으로 이동, 표수정, 컬럼에서 이미지 넣는거 등등 2025-11-06 12:11:49 +09:00
kjs e25f8893b0 Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into feature/screen-management 2025-11-06 11:58:09 +09:00
kjs ff2a069b79 fix: 테이블 리스트 불필요한 스크롤 및 하단 공간 문제 해결
문제:
- 고정 높이 (h-[400px] sm:h-[500px])로 인해 데이터가 적어도 큰 공간 차지
- 하단에 빈 공간이 남는데도 스크롤이 생기는 비효율적인 UX
- overflow-y-scroll이 항상 스크롤바를 표시함

해결:
- 고정 높이 제거 → flex-1 (부모의 남은 공간 차지)
- overflow-y-scroll → overflow-y-auto (필요할 때만 스크롤)
- 데이터 양에 따라 자동으로 높이 조정

개선 사항:
 데이터가 적을 때: 불필요한 공간 없이 컴팩트하게 표시
 데이터가 많을 때: 자동으로 스크롤 생성
 반응형 레이아웃에 자연스럽게 적응
 스크롤바가 필요할 때만 표시되어 깔끔한 UI
2025-11-06 11:53:59 +09:00
kjs 310f43e1bd fix: 테이블 그룹 헤더 스크롤 시 배경 비침 현상 수정
문제:
- 그룹 헤더의 bg-muted/50 (반투명 배경)으로 인해 스크롤 시 뒤 내용이 비쳐 보임
- sticky 위치에서 가독성 저하

해결:
- bg-muted/50 → bg-muted (불투명 배경)
- hover 효과도 hover:bg-muted → hover:bg-muted/80으로 조정
- 스크롤 시 깔끔한 가림 효과 제공

개선 사항:
- sticky 그룹 헤더의 완전한 배경 덮기
- 스크롤 시 가독성 향상
- shadcn 가이드라인 준수 (단색 배경)
2025-11-06 11:52:43 +09:00
kjs 4f02f0bad1 refactor: TableList 컴포넌트 그라데이션 제거 (shadcn 가이드라인 준수)
- 테이블 헤더의 그라데이션 제거 (bg-gradient-to-b from-muted/50 to-muted → bg-muted)
- CardModeRenderer 빈 상태 아이콘의 그라데이션 제거
- 하드코딩된 slate 색상을 shadcn 토큰으로 변경 (bg-muted, text-muted-foreground)
- 일관된 단색 배경으로 심플하고 깔끔한 디자인 유지

shadcn/ui 가이드라인:
- 테이블 헤더는 단색 bg-muted 사용
- 색상 토큰 사용으로 다크모드 자동 대응
- 불필요한 그라데이션 제거
2025-11-06 11:51:11 +09:00
kjs 2b2c096a99 refactor: ButtonPrimaryComponent를 shadcn 가이드라인에 맞게 수정
- 그라데이션 배경 제거하고 단색 배경 적용
- 동적 색상 기반 그림자 제거하고 표준 shadcn 그림자 적용
- hover:opacity-90 효과 추가 (부드러운 어두워짐)
- active:scale-95 효과 추가 (클릭 피드백)
- transition-colors duration-150으로 빠른 색상 전환 적용
- disabled 상태를 단색 회색으로 개선

shadcn/ui 가이드라인 준수:
- 심플하고 깔끔한 단색 디자인
- 일관된 인터랙션 패턴
- 표준화된 그림자 및 전환 효과
2025-11-06 11:49:24 +09:00
kjs 44def0979c fix: 화면 편집기 높이 입력 필드 1px 단위 조절 가능하도록 수정
- 문제: 높이 입력 시 10 단위로만 입력 가능 (예: 1080 입력 불가)
- 원인: 격자 스냅 로직이 onChange마다 높이를 10/20 단위로 강제 반올림
- 해결:
  1. 모든 number input 필드에 step="1" 추가
  2. ScreenDesigner.tsx의 격자 스냅 로직 수정 (높이 스냅 제거)
  3. UnifiedPropertiesPanel.tsx에 로컬 상태 추가하여 입력 중 스냅 방지
  4. onBlur/Enter 시에만 실제 값 업데이트

수정 파일:
- frontend/components/screen/ScreenDesigner.tsx
- frontend/components/screen/panels/UnifiedPropertiesPanel.tsx
- frontend/components/screen/panels/PropertiesPanel.tsx
- frontend/components/screen/panels/ResolutionPanel.tsx
- frontend/components/screen/panels/RowSettingsPanel.tsx
- frontend/components/screen/panels/webtype-configs/NumberTypeConfigPanel.tsx
- frontend/components/screen/panels/webtype-configs/TextTypeConfigPanel.tsx
2025-11-06 10:37:20 +09:00
kjs cf9e81a216 테이블에 카테고리 값 보이기 2025-11-05 18:28:43 +09:00
kjs bc029d1df8 카테고리 구현 2025-11-05 18:08:51 +09:00
dohyeons e65f97b3fe Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into feat/dashboard 2025-11-05 16:41:40 +09:00
kjs f3bed0d713 Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into feature/screen-management 2025-11-05 16:38:30 +09:00
leeheejin 0b676098a5 버튼 문제 수정 및 여러가지 2025-11-05 16:36:32 +09:00
dohyeons 8b03f3a495 분할 패널 높이 조정 수정 2025-11-05 16:18:00 +09:00
dohyeons df779ac04c 대표 이미지 저장 기능 구현 2025-11-05 15:50:29 +09:00
dohyeons 9429033e2c Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into feat/dashboard 2025-11-05 15:39:11 +09:00
dohyeons 8489ff03c2 파일 업로드 구조 개선 2025-11-05 15:39:02 +09:00
kjs 573a300a4a 카테고리 기능 구현 2025-11-05 15:23:57 +09:00
leeheejin c6b2a30651 Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into lhj
; Please enter a commit message to explain why this merge is necessary,
; especially if it merges an updated upstream into a topic branch.
;
; Lines starting with ';' will be ignored, and an empty message aborts
; the commit.
2025-11-05 13:10:25 +09:00
leeheejin b4cc844675 엑셀 다운로드 문제 해결 2025-11-05 10:23:00 +09:00
hjlee 6c713a11d8 Merge pull request '행 이동 화면 할당한 상황에서도 가능하게, 코드병합 버튼액션에 추가' (#183) from lhj into main
Reviewed-on: http://39.117.244.52:3000/kjs/ERP-node/pulls/183
2025-11-04 18:34:43 +09:00
leeheejin 82ff18e388 행 이동 화면 할당한 상황에서도 가능하게, 코드병합 버튼액션에 추가 2025-11-04 18:31:26 +09:00
dohyeons 63b6e89435 디버깅용 console.log 삭제 2025-11-04 18:02:20 +09:00
dohyeons acaa3414d2 파일 업로드 회사별로 보이도록 수정 2025-11-04 17:57:28 +09:00
kjs f4fd1184cd 테이블 리스트 간격설정 2025-11-04 17:48:22 +09:00
kjs 10c7c9a0b1 컴포넌트 높이 조절기능 2025-11-04 17:44:10 +09:00
kjs 198f678b68 채번 자동생성기능 2025-11-04 17:35:02 +09:00
dohyeons 958aeb2d53 파일 업로드 쪽 수정 2025-11-04 17:32:46 +09:00
dohyeons 36ea8115cb Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into feat/dashboard 2025-11-04 16:27:01 +09:00
dohyeons 01e03dedbf 파일 업로드 컴포넌트 높이 조절 수정 2025-11-04 16:26:53 +09:00
kjs 6901baab8e feat(screen-designer): 그리드 컬럼 시스템 개선 및 컴포넌트 너비 렌더링 수정
주요 변경사항:
- 격자 설정을 편집 탭에서 항상 표시 (해상도 설정 하단)
- 그리드 컬럼 수 동적 조정 가능 (1-24)
- 컴포넌트 생성 시 현재 그리드 컬럼 수 기반 자동 계산
- 컴포넌트 너비가 설정한 컬럼 수대로 정확히 표시되도록 수정

수정된 파일:
- ScreenDesigner: 컴포넌트 드롭 시 gridColumns와 style.width 동적 계산
- UnifiedPropertiesPanel: 격자 설정 UI 통합, 차지 컬럼 수 설정 시 width 자동 계산
- RealtimePreviewDynamic: getWidth 우선순위 수정, DOM 크기 디버깅 로그 추가
- 8개 컴포넌트: componentStyle.width를 항상 100%로 고정
  * ButtonPrimaryComponent
  * TextInputComponent
  * NumberInputComponent
  * TextareaBasicComponent
  * DateInputComponent
  * TableListComponent
  * CardDisplayComponent

문제 해결:
- 컴포넌트 내부에서 component.style.width를 재사용하여 이중 축소 발생
- 해결: 부모 컨테이너(RealtimePreviewDynamic)가 width 제어, 컴포넌트는 항상 100%
- 결과: 파란 테두리와 내부 콘텐츠가 동일한 크기로 정확히 표시
2025-11-04 16:17:19 +09:00
dohyeons 7b0bbc91c8 분할 패널 너비 조절 안되는거 개선 2025-11-04 15:32:49 +09:00
kjs 9f131a80ab Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into feature/screen-management 2025-11-04 15:16:48 +09:00
dohyeons 39080dff59 autofill 기능 구현 2025-11-04 14:33:39 +09:00
kjs 7cf455083d 채번 컴포넌트 생성 2025-11-04 13:58:21 +09:00
kjs d64ca5a8c0 버튼 수정 2025-11-04 11:41:20 +09:00
dohyeons 4dde008c6d Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into feat/dashboard 2025-11-04 09:44:09 +09:00
leeheejin 7425c37094 엑셀 다운로드, 업로드, 사진촬영(바코드 스캔기능) 추가 2025-11-04 09:41:58 +09:00
dohyeons 6b53cb414c 삭제를 alert에서 modal로 변경 2025-11-03 17:28:12 +09:00
dohyeons 257912ea92 부서 read 기능 구현 2025-11-03 16:31:03 +09:00
leeheejin 94e5a5de0b 회사코드 입력, 작성자 입력가능하게 수정완료 2025-11-03 16:26:32 +09:00
dohyeons d7164531ef Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into feat/dashboard 2025-11-03 14:43:53 +09:00
kjs 9a3d65d8d0 fix: TableListComponent 코드 변환 파라미터 순서 수정
문제:
- optimizedConvertCode(value, meta.codeCategory) 
- 함수 정의: optimizedConvertCode(categoryCode, codeValue)
- 파라미터 순서가 반대로 전달되어 카테고리 값이 표시됨

해결:
- optimizedConvertCode(meta.codeCategory, value) 
- 올바른 순서: (카테고리, 코드값)
- 이제 코드명이 정상적으로 표시됨

변경:
- 파라미터 순서 수정
- 주석 추가로 재발 방지
2025-11-03 14:41:12 +09:00
kjs a3f945f5df fix: TableListComponent 코드 변환 로직 재추가 및 개선
요구사항:
- DB에 저장된 코드 값(예: '001') → 코드명(예: '활성')으로 표시

구현:
- inputType === 'code'이고 codeCategory가 있을 때 변환 수행
- optimizedConvertCode를 통해 코드 값 → 코드명 변환
- 변환 성공 시 코드명 반환
- 변환 실패 시 원본 코드 값 반환
- try-catch로 에러 핸들링 추가
- 디버깅을 위한 에러 로그 추가

변경:
- 코드 변환 로직 복원
- 에러 처리 강화
- 변환 실패 시 원본 값 표시로 안전장치
2025-11-03 14:39:43 +09:00
kjs 6a329506a8 fix: TableListComponent 코드 변환 로직 완전 제거
문제:
- inputType이 'code'인 컬럼에서 코드 변환이 실행되어
- 실제 저장된 값 대신 코드 카테고리 값이 표시됨
- 사용자가 원하는 것은 원본 값 그대로 표시

해결:
- 코드 변환 로직 완전 제거
- inputType에 관계없이 원본 값 그대로 표시
- 숫자/날짜 등 기본 포맷팅만 유지

변경:
- optimizedConvertCode 호출 제거
- inputType === 'code' 조건 제거
- 원본 데이터 표시로 단순화
2025-11-03 14:38:27 +09:00
kjs e732ed2891 fix: TableListComponent 코드 변환 조건 수정
문제:
- webType과 codeCategory가 있기만 하면 무조건 코드 변환 시도
- 코드 타입이 아닌 컬럼도 코드 카테고리 값으로 변환되는 오류

해결:
- webType === 'code'일 때만 코드 변환 수행
- 다른 webType(text, number 등)은 코드 변환 건너뛰기

변경:
- meta?.webType && meta?.codeCategory
  → meta?.webType === 'code' && meta?.codeCategory
2025-11-03 14:36:15 +09:00
dohyeons fd7fc754f4 회사 관리 - 등록 페이지 수정 2025-11-03 14:31:21 +09:00
kjs ac40f0227e refactor: TableListComponent와 FlowWidget 상단 헤더 제거
- TableListComponent: showHeader 조건부 렌더링 제거
  - 타이틀 표시 영역 삭제
  - 공간 절약을 위해 헤더 완전 제거

- FlowWidget: 플로우 제목 및 설명 영역 제거
  - flowData.name 표시 영역 삭제
  - flowData.description 표시 영역 삭제
  - 더 많은 데이터 표시 공간 확보

UI 개선:
- 불필요한 헤더 제거로 컨텐츠 영역 확대
- 더 많은 데이터를 한 화면에 표시 가능
2025-11-03 14:23:53 +09:00
kjs b607ef0aa0 feat: TableListComponent에 그룹핑 기능 구현
- 다중 컬럼 선택으로 계층적 그룹화 지원
- 그룹 설정 다이얼로그 추가
- 그룹별 데이터 펼치기/접기 기능
- 그룹 헤더에 항목 개수 표시
- localStorage에 그룹 설정 저장/복원
- 그룹 해제 버튼 추가
- 그룹 표시 배지 UI

주요 기능:
- 사용자가 원하는 컬럼(들)을 선택하여 그룹화
- 그룹 키: '통화:KRW > 단위:EA' 형식으로 표시
- 그룹 헤더 클릭으로 펼치기/접기
- 그룹 없을 때는 기존 렌더링 방식 유지
2025-11-03 14:08:26 +09:00
kjs 8248c8dc96 fix: TableListComponent에 toast import 추가
- sonner의 toast 함수 import 추가
- 필터 설정 저장 시 알림 기능 정상 작동
2025-11-03 14:00:45 +09:00
kjs c7db82a8a5 fix: TableListComponent filterSettingKey 중복 정의 제거
- 중복된 filterSettingKey 변수 정의 중 하나 제거
- 빌드 에러 해결
2025-11-03 14:00:06 +09:00
kjs 297870a24c feat: TableListComponent에 FlowWidget과 동일한 필터 설정 UI 구현
- 전체 선택/해제 기능 추가
- 선택된 컬럼 개수 표시 추가
- 필터 설정 localStorage 저장/로드 기능
- 체크된 항목만 실제 검색 필터로 표시
- 저장 시 Toast 알림 추가
- FlowWidget과 완전히 동일한 UI/UX 적용
2025-11-03 13:59:12 +09:00
kjs e0e7bc387e fix: TableListComponent 필터 설정 다이얼로그 스타일 개선
🎨 UI 개선
- 필터 설정 다이얼로그 스타일을 플로우 위젯과 동일하게 변경
- hover:bg-gray-50으로 호버 효과 추가
- rounded-lg, p-3, space-x-3으로 간격 및 패딩 개선
- space-y-2, py-4로 리스트 아이템 간격 조정

🐛 버그 수정
- 필터 목록에 key prop 추가 (React 경고 해결)
- Label 컴포넌트 대신 label 태그 사용 (불필요한 import 제거)

📝 변경 사항
- 플로우 위젯과 동일한 체크박스 리스트 스타일 적용
- 더 명확하고 클릭하기 쉬운 UI로 개선

 결과
- 필터 설정 다이얼로그가 플로우 위젯과 일관된 스타일로 표시됨
2025-11-03 13:53:50 +09:00
kjs 714511c3cf fix: 텍스트 줄바꿈 문제 방지 - 모든 셀에 whitespace-nowrap 적용
- 테이블 헤더와 데이터 셀 모두에 whitespace-nowrap 적용
- 모바일에서도 텍스트가 2줄로 깨지지 않음
- overflow-hidden + text-ellipsis로 긴 텍스트 처리
- TableListComponent와 InteractiveDataTable 모두 적용

이제 화면을 줄여도 텍스트가 항상 1줄로 유지됨
2025-11-03 13:34:02 +09:00
kjs 40efb391ea feat: 리스트 헤더 스타일 개선 - 그라데이션 배경, 굵은 테두리, 호버 효과 추가 2025-11-03 13:33:13 +09:00
kjs f9bd7bbcb3 fix: 컬럼 리사이즈 시 정렬이 트리거되는 문제 해결
문제:
- 컬럼 너비를 조절할 때 자동으로 정렬이 실행됨
- 리사이즈 핸들 클릭이 헤더의 onClick 이벤트를 트리거

해결:
- isResizing useRef 플래그 추가
- 리사이즈 시작 시 플래그를 true로 설정
- 헤더 onClick에서 isResizing.current 체크
- 리사이즈 중이면 정렬 실행 안함
- mouseup 후 100ms 지연으로 플래그 해제

적용:
- TableListComponent
- InteractiveDataTable

이제 컬럼 리사이즈가 정렬을 방해하지 않음
2025-11-03 13:30:44 +09:00
kjs 516bcafb2c feat: 테이블 정렬 개선 - 헤더 가운데, 숫자 우측 정렬
- 모든 테이블 헤더를 가운데 정렬 (text-center)
- 숫자 타입(number, decimal) 데이터를 우측 정렬
- TableListComponent: inputType 기반 숫자 판단
- InteractiveDataTable: widgetType 기반 숫자 판단
- 체크박스는 기존대로 가운데 정렬 유지
- 일반 텍스트는 좌측 정렬 유지

더 읽기 쉬운 테이블 레이아웃 완성
2025-11-03 13:25:57 +09:00
kjs 5376d7198d fix: 체크박스 컬럼 패딩 제거 및 중앙 정렬
- 체크박스 컬럼에서 px 패딩 제거 (px-0)
- 체크박스 컬럼 중앙 정렬 (textAlign: center)
- 일반 컬럼은 기존 패딩 유지
- 체크박스와 다른 컬럼의 시각적 구분 명확화
- 불필요한 공간 제거로 깔끔한 UI
2025-11-03 12:28:30 +09:00
kjs 6aa25fa852 fix: TableListComponent 체크박스 컬럼 48px 고정
- 체크박스 컬럼(__checkbox__)을 48px 고정 너비로 설정
- width, minWidth, maxWidth 모두 48px 적용
- 체크박스 컬럼에서 리사이즈 핸들 제거
- 초기 너비 측정 시 체크박스 컬럼 제외
- 테이블 헤더와 본문 셀 모두 적용
- InteractiveDataTable과 일관된 체크박스 컬럼 스타일
2025-11-03 12:24:28 +09:00
kjs 3332c87293 fix: 컬럼 리사이즈 무한 리렌더링 및 원위치 복귀 문제 해결
- ref callback에서 state 업데이트 제거
- useEffect + setTimeout으로 초기 너비 측정 (한 번만)
- hasInitializedWidths useRef로 중복 측정 방지
- columnRefs useRef로 DOM 직접 참조
- 드래그 중 리렌더링 없이 DOM만 직접 조작
- 부드럽고 정확한 리사이즈 구현 완료
2025-11-03 12:18:50 +09:00
kjs 511884f323 fix: 컬럼 초기 너비 이하로 줄어들지 않는 문제 해결
 해결 방법:
- 백분율 defaultWidth 제거, 초기값은 undefined로 설정
- ref callback에서 첫 렌더링 시 실제 offsetWidth 측정
- 측정한 실제 너비를 columnWidths state에 저장
- 이후 드래그로 80px까지 줄일 수 있음

 적용 파일:
- TableListComponent.tsx (실제 화면)
- InteractiveDataTable.tsx (디자인 모드)

 기술적 개선:
- table-layout: fixed + 동적 초기 너비 측정
- DOM 직접 조작으로 부드러운 리사이즈
- 최소 80px 보장 (Math.max)
2025-11-03 12:13:56 +09:00
kjs 3ada095e43 fix: 컬럼 리사이즈 최소 너비 80px 적용 및 디버그 로그 제거
- CSS minWidth 제거 (table-layout: fixed와 충돌)
- JavaScript에서 Math.max(80, width)로 최소 너비 보장
- 드래그 중과 마우스 업 시 모두 80px 최소값 적용
- 모든 디버그 로그 제거
- 깔끔하고 부드러운 리사이즈 완성
2025-11-03 12:06:57 +09:00
kjs c8540b170e fix: table-layout fixed로 컬럼 리사이즈 활성화
- tableLayout: 'fixed' 추가로 컬럼 너비가 DOM 스타일로 제어 가능하도록 설정
- table-layout: auto(기본값)에서는 브라우저가 자동으로 너비를 재조정하여 무시됨
- fixed 모드에서는 설정한 너비가 정확하게 적용됨
2025-11-03 12:01:47 +09:00
kjs 97ce6d3691 fix: useRef로 컬럼 리사이즈 성능 근본 해결
- columnRefs로 DOM 요소 직접 참조
- 드래그 중에는 DOM 스타일만 변경 (리렌더링 없음)
- 드래그 완료 시에만 state 업데이트
- 불필요한 컴포넌트 재초기화 완전 제거
- 부드러운 리사이즈 경험 제공
2025-11-03 11:57:01 +09:00
kjs 48cacf0409 perf: requestAnimationFrame으로 리사이즈 성능 최적화
- 드래그 중 과도한 리렌더링 방지
- requestAnimationFrame으로 throttling 적용
- 초당 60프레임으로 제한하여 부드러운 리사이즈
- cancelAnimationFrame으로 중복 업데이트 방지
2025-11-03 11:55:45 +09:00
kjs 9f501aa839 debug: 리사이즈 핸들 이벤트 디버그 로그 추가
- 마우스다운, 드래그, 마우스업 이벤트 로그
- 시작 너비, 이동 거리, 새 너비 출력
- 이벤트가 제대로 발생하는지 확인용
2025-11-03 11:54:34 +09:00
kjs 4a5c21a3ba fix: 리사이즈 핸들 클릭 영역 개선
- 핸들 너비를 1px에서 2px로 증가
- z-index: 20 추가로 다른 요소 위에 표시
- padding과 negative margin으로 클릭 영역 확대 (좌우 4px씩)
- onClick에 stopPropagation 추가하여 정렬 클릭 방지
- 더 쉽게 클릭하고 드래그할 수 있도록 개선
2025-11-03 11:51:48 +09:00
kjs 787bfd363f feat: TableListComponent 컬럼 너비 드래그 조절 기능 추가
- 실제 화면에서 사용되는 TableListComponent에도 리사이즈 기능 추가
- InteractiveDataTable과 동일한 리사이즈 핸들 구현
- columnWidths 상태로 각 컬럼 너비 관리
- 드래그 중 텍스트 선택 방지 및 이벤트 전파 차단
- 최소 너비 80px 보장
2025-11-03 10:54:23 +09:00
kjs dcf07fdd5e chore: TableListComponent 디버그 로그 제거
- 숫자 포맷팅 확인 완료
- column_labels 테이블 조회로 정확한 input_type 가져오기 검증 완료
2025-11-03 10:45:16 +09:00
kjs 8a77e6d33c fix: getColumnInputTypes가 column_labels 테이블 조회하도록 수정
- 기존: table_type_columns 테이블 조회 (잘못된 테이블)
- 수정: column_labels 테이블 조회 (올바른 테이블)
- 이제 테이블 관리에서 설정한 input_type이 정확하게 반영됨
2025-11-03 10:32:08 +09:00
kjs 1c571ee3c3 feat: 테이블 관리의 입력 타입 기반 자동 숫자 포맷팅
- TableListComponent: table_type_columns의 input_type 정보를 가져와서 숫자 포맷팅
- getColumnInputTypes API 추가로 컬럼별 입력 타입 조회
- columnMeta에 inputType 포함하여 formatCellValue에서 사용
- 테이블 관리에서 설정한 입력 타입(number/decimal)에 따라 자동으로 천 단위 콤마 표시
- 근본적인 해결: 컬럼명 기반이 아닌 실제 설정값 기반 포맷팅
2025-11-03 10:14:32 +09:00
kjs 68aafb3732 debug: TableListComponent formatCellValue 디버그 로그 추가
- 각 컬럼의 inputType, format, value 확인용
- 숫자 포맷팅이 안 되는 원인 파악
2025-11-03 10:10:22 +09:00
kjs 7b676a6aff fix: TableListComponent에서 숫자 타입 컬럼 천 단위 콤마 표시
- inputType이 number 또는 decimal인 컬럼에 천 단위 콤마 자동 적용
- 문자열로 저장된 숫자도 parseFloat 후 포맷팅 처리
- format 속성보다 inputType을 우선 체크하도록 수정
2025-11-03 10:09:33 +09:00
kjs 8e9daf5b22 feat: 수정 모달 자동 닫기 및 테이블 새로고침 기능 구현
- EditModal: 저장 완료 후 자동으로 닫히고 부모 테이블 새로고침
- buttonActions.ts: 저장 성공 후 closeEditModal 이벤트 발생
- InteractiveScreenViewerDynamic: onSave prop 추가하여 EditModal 연동
- InteractiveDataTable: EditModal 열 때 onSave 콜백으로 loadData 전달
- 두 가지 시나리오 모두 지원:
  1. InteractiveScreenViewerDynamic 버튼의 onSave 호출
  2. DynamicComponentRenderer 버튼의 buttonActions.ts 처리
2025-11-03 09:58:04 +09:00
kjs 5c2e147784 feat: 테이블 복제 기능 구현 (최고 관리자 전용)
 새로운 기능
- 테이블 타입 관리에 테이블 복제 기능 추가
- 기존 테이블의 설정과 컬럼 정보를 복사하여 새 테이블 생성
- 최고 관리자만 사용 가능 (company_code = '*' AND userType = 'SUPER_ADMIN')
- 테이블 1개 선택 시에만 복제 버튼 활성화

🎨 UI 개선
- 테이블 목록에 '테이블 복제' 버튼 추가 (Copy 아이콘)
- CreateTableModal을 복제 모드로 재사용
- 복제 모드 시 제목/설명/버튼 텍스트 동적 변경
- 원본 테이블 정보 자동 로드

🔧 기술적 개선
- CreateTableModal에 mode/sourceTableName props 추가
- 복제 모드 감지 및 데이터 자동 로드 로직 구현
- API 타입 정의 수정 (ColumnListData 인터페이스 추가)
- 백엔드 응답 구조와 프론트엔드 타입 일치화

🐛 버그 수정
- API 응답 구조 불일치 문제 해결
- ColumnListResponse 타입 수정 (배열 → 객체)
- 데이터 파싱 로직 수정 (data.columns 접근)
- 디버그 로그 추가로 문제 추적 개선

📝 변경된 파일
- frontend/app/(main)/admin/tableMng/page.tsx
- frontend/components/admin/CreateTableModal.tsx
- frontend/lib/api/tableManagement.ts
- frontend/types/ddl.ts
- 테이블_복제_기능_구현_계획서.md (신규)

 테스트 완료
- 최고 관리자 권한 체크
- 테이블 정보 로드
- 컬럼 정보 복제
- 새 테이블명 입력 및 검증
- 테이블 생성 및 목록 갱신
2025-10-31 17:58:49 +09:00
kjs e42675616b fix: 제어관리 저장 및 실행 문제 수정
- frontend: screen.ts에 saveScreenLayout 함수 추가 (ScreenDesigner_new.tsx가 호출하던 누락된 함수)
- frontend: ScreenDesigner_new.tsx 저장 시 디버깅 로그 추가
- backend: screenManagementService.ts에 dataflowConfig 저장 확인 로그 추가

문제 원인:
- ScreenDesigner_new.tsx가 호출하던 screenApi.saveScreenLayout 함수가 정의되지 않음
- 이로 인해 레이아웃 저장이 실패했을 가능성

해결:
- saveScreenLayout 함수를 추가하여 정상적인 레이아웃 저장 가능
- 디버깅 로그를 통해 실제로 selectedDiagramId가 저장되는지 확인 가능
2025-10-31 17:21:47 +09:00
kjs 3d6ce26f9d feat: 테이블 리스트 컴포넌트 제목 편집 기능 추가
- TableListConfigPanel에 테이블 제목 입력 필드 추가
- 제목 표시 우선순위: 사용자 입력 제목 → 테이블 라벨명 → 테이블명
- 사용자가 제목을 비워두면 자동으로 테이블 라벨명 또는 테이블명 표시
- 화면 편집기에서 테이블 제목을 자유롭게 수정 가능
2025-10-31 11:10:09 +09:00
kjs 0bb314f8e5 feat: 화면 관리 및 대시보드 뷰어 레이아웃 전체 너비 활용 개선
- 화면 관리 페이지에서 position.x === 0인 컴포넌트가 100% 너비로 표시되도록 수정
- 대시보드 뷰어에서 부모 컨테이너의 maxWidth 제한 제거하여 화면 전체 너비 활용
- AppLayout의 main 영역에 16px 내부 패딩 적용
- RealtimePreview 및 RealtimePreviewDynamic 컴포넌트에서 좌측 정렬 컴포넌트 너비 자동 조정
- 모바일 환경에서 화면 스케일링 비활성화 (반응형만 작동)
- table-mobile-fixed CSS 클래스 추가로 모바일 테이블 레이아웃 개선
- useResponsive 훅 추가로 반응형 감지 기능 구현
2025-10-31 10:41:45 +09:00
kjs 148155e6fe feat: 관리자 테이블 스타일 개선 및 탭 컴포넌트 디자인 수정
- 외부 커넥션 관리 테이블 표준화 (DB 연결, REST API 연결)
- 모든 관리자 테이블의 그림자 제거 (테이블 타입 관리 왼쪽 카드 제외)
- 테이블 타입 관리 왼쪽 카드 호버 효과 강화 (shadow-lg, bg-muted/20)
- 탭 컴포넌트 배경색 밝게 조정 (bg-muted/30)
- 탭 트리거 테두리 제거
2025-10-30 17:55:55 +09:00
kjs 21af6c5c17 테이블 헤더 및 행 배경색 통일
- 모든 테이블 헤더의 회색 배경 제거 (bg-muted/50 → bg-background)
- 모든 테이블 행의 홀수 행 회색 배경 제거 (모든 행을 흰색 배경으로 통일)
- 호버 시에만 회색 배경이 나타나도록 통일
- TableListComponent, SingleTableWithSticky, 모든 관리자 테이블 컴포넌트에 적용
- 테이블 구조 표준화 문서 업데이트
2025-10-30 15:49:23 +09:00
kjs 4010273d67 feat: 테이블 테두리 및 라운드 제거, 검색 필터 제목 제거
- 모든 테이블 컴포넌트의 외곽 테두리(border) 제거
- 테이블 컨테이너의 라운드(rounded-lg) 제거
- 테이블 행 구분선(border-b)은 유지하여 데이터 구분
- FlowWidget과 TableListComponent에 동일한 스타일 적용
- 검색 필터 영역의 회색 배경(bg-muted/30) 제거
- 검색 필터 제목 제거
- AdvancedSearchFilters 컴포넌트의 '검색 필터' 제목 제거
2025-10-30 15:39:39 +09:00
kjs 556354219a 스타일 수정중 2025-10-30 12:03:50 +09:00
kjs 244f04a199 등록자랑 회사코드 자동으로 들어가도록 수정 2025-10-29 16:06:01 +09:00
kjs 0dab71edfe Merge branch 'main' into feature/screen-management 2025-10-29 11:26:18 +09:00
kjs efdef36cda 모달창 올리기 2025-10-29 11:26:00 +09:00
kjs eeae338cd4 패널 정리중 2025-10-28 18:41:45 +09:00
leeheejin 81458549af 테스트 위젯 원본 승격 전 세이브 2025-10-28 17:40:48 +09:00
kjs 743ae6dbf1 패널 정리 중간 커밋 2025-10-28 17:33:03 +09:00
kjs 775fbf8903 화면 바로 들어가지게 함 2025-10-28 15:39:22 +09:00
leeheejin d5e72ce901 Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into lhj
; Please enter a commit message to explain why this merge is necessary,
; especially if it merges an updated upstream into a topic branch.
;
; Lines starting with ';' will be ignored, and an empty message aborts
; the commit.
2025-10-28 10:08:40 +09:00
kjs 25f6217433 회사별 메뉴 분리 및 권한 관리 2025-10-28 10:07:07 +09:00
leeheejin b09a7c8398 Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into lhj
; Please enter a commit message to explain why this merge is necessary,
; especially if it merges an updated upstream into a topic branch.
;
; Lines starting with ';' will be ignored, and an empty message aborts
; the commit.
2025-10-28 09:49:19 +09:00
leeheejin 5b394473f4 restapi 여러개 띄우는거 작업 가능하게 하는거 진행중 2025-10-27 18:33:15 +09:00
kjs 821336d40d 최고관리자가 부여한 권한에 따라 메뉴 보여주기 2025-10-27 18:27:32 +09:00
kjs 29c49d7f07 각 회사별 데이터 분리 2025-10-27 16:40:59 +09:00
kjs a3bfcdf2d8 이력테이블 기준 컬럼 설정 기능 2025-10-27 11:41:30 +09:00
kjs 5fdefffd26 로그시스템 개선 2025-10-27 11:11:08 +09:00
kjs a9d85b780b 플로우 각 단계별 컬럼 설정기능 2025-10-27 09:49:13 +09:00
kjs addff4769b api요청정보 수정 2025-10-24 16:39:54 +09:00
kjs ff4646d816 Merge branch 'main' into feature/screen-management 2025-10-24 15:40:35 +09:00
kjs 7d6281d289 플로우 페이지네이션 안보임 2025-10-24 15:40:08 +09:00
kjs 8d1f0e7098 제어관리 개선판 2025-10-24 14:11:12 +09:00
kjs dc17988466 Merge branch 'feature/screen-management' of http://39.117.244.52:3000/kjs/ERP-node into feature/screen-management 2025-10-24 10:37:03 +09:00
kjs d22369a050 버튼 자동정렬기능 구현 2025-10-24 10:37:02 +09:00
dohyeons 759665978b 절대 경로로 수정 2025-10-24 09:52:51 +09:00
dohyeons 5f4d78640b 동적 URL 감지 함수를 추가 2025-10-24 09:37:12 +09:00
kjs f84c06a7a7 Merge branch 'main' into feature/screen-management 2025-10-23 18:23:19 +09:00
kjs d9088816a7 플로우 단계별 버튼 표시 설정 2025-10-23 18:23:01 +09:00
dohyeons 9c10ddedc1 api수정 2025-10-23 18:11:44 +09:00
dohyeons ce07ca3c00 프로덕션 환경 수정 2025-10-23 18:03:11 +09:00
kjs c228ddb498 삭제버튼 동작 2025-10-23 17:55:04 +09:00
kjs b402602b69 Merge branch 'feature/screen-management' of http://39.117.244.52:3000/kjs/ERP-node into feature/screen-management 2025-10-23 17:26:17 +09:00
kjs f9c6ef70db 플로우 위젯 컴포넌트와 버튼의 연동 2025-10-23 17:26:14 +09:00
kjs 5203d0fa50 Merge branch 'main' into feature/screen-management 2025-10-23 17:01:54 +09:00
kjs 8c89b9cf86 테이블 리스트 수정 2025-10-23 16:50:41 +09:00
hjlee b3afd923c9 Merge pull request 'lhj' (#137) from lhj into main
Reviewed-on: http://39.117.244.52:3000/kjs/ERP-node/pulls/137
2025-10-23 15:17:14 +09:00
kjs 70d2c96c80 컴포넌트 잘림현상 수정 2025-10-23 15:06:00 +09:00
kjs b104cd94f2 텍스트 설정 초기화 되는 오류 수정 2025-10-23 13:24:37 +09:00
leeheejin 331261bc80 날씨 2025-10-23 13:17:21 +09:00
kjs 23f7b89cc5 Merge branch 'feature/screen-management' of http://39.117.244.52:3000/kjs/ERP-node into feature/screen-management 2025-10-23 13:15:53 +09:00
kjs 4996dd5562 버튼 액션 안되는 버그 수정 2025-10-23 13:15:52 +09:00
leeheejin 753c170839 Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into lhj
; Please enter a commit message to explain why this merge is necessary,
; especially if it merges an updated upstream into a topic branch.
;
; Lines starting with ';' will be ignored, and an empty message aborts
; the commit.
2025-10-23 12:31:27 +09:00
leeheejin 8ec54b4e7d 날씨 진행 중 세이브 2025-10-23 12:31:14 +09:00
kjs 184adffdcb Merge branch 'main' into feature/screen-management 2025-10-23 11:31:48 +09:00
kjs 0c3ce4d3eb text타입 라벨 표시문제 수정 2025-10-23 09:56:38 +09:00
kjs 2dd96f5a74 화면관리ui수정 2025-10-22 17:19:47 +09:00
leeheejin 13f4d07577 메일관리 2025-10-22 17:07:38 +09:00
leeheejin 479b0ba3ed ui 고치기 전 세이브 2025-10-22 16:06:04 +09:00
dohyeons b62f2ffc10 api관리 구현(대시보드쪽) 2025-10-22 09:45:47 +09:00
leeheejin 9cb705dba8 Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into lhj
; Please enter a commit message to explain why this merge is necessary,
; especially if it merges an updated upstream into a topic branch.
;
; Lines starting with ';' will be ignored, and an empty message aborts
; the commit.
2025-10-21 17:33:07 +09:00
leeheejin 10d112bd69 버튼 문제 해결 2025-10-21 17:32:54 +09:00
dohyeons 74d287daa9 테이블 변경 이력 로그 시스템 구현 2025-10-21 15:08:41 +09:00
kjs cc84e604b1 인풋 오류 수정 2025-10-21 14:41:56 +09:00
kjs 74ebb565e6 플로우 로그기능 수정 2025-10-21 14:21:29 +09:00
dohyeons 090cba09f1 rest api 관리 구현 2025-10-21 10:59:15 +09:00
kjs 1f12df2f79 플로우 외부db연결 2025-10-20 17:50:27 +09:00
kjs 7d8abc0449 플로우 분기처리 구현 2025-10-20 15:53:00 +09:00
kjs de9491aa29 Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into feature/screen-management 2025-10-20 10:56:23 +09:00
kjs f9c171c513 플로우 구현 2025-10-20 10:55:33 +09:00
dohyeons 8932f61298 Phase 1-4 완료 2025-10-20 09:53:31 +09:00
kjs 52c7391cf5 Merge branch 'main' into feature/screen-management 2025-10-17 17:15:47 +09:00
kjs 2e916678fa ui개선 2025-10-17 16:21:08 +09:00
kjs 2a8081a253 반응형 및 테이블 리스트 컴포넌트 오류 수정 2025-10-17 15:31:23 +09:00
dohyeons 184d687f0f 일단 야드관리 3d 드래그앤 드랍까지 2025-10-17 15:26:21 +09:00
kjs 92e7cef2bc 버튼 컬럼수 조정 2025-10-17 09:32:46 +09:00
kjs 29a2a18d69 Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into feature/screen-management 2025-10-16 18:19:21 +09:00
kjs d7a845ad9f 반응형 레이아웃 기능 구현 2025-10-16 18:16:57 +09:00
kjs a0dde51109 분할 패널 및 반복 필드 그룹 컴포넌트 2025-10-16 15:05:24 +09:00
dohyeons 9168844fab Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into feature/dashboard 2025-10-16 10:56:34 +09:00
dohyeons 9e1a7c53e1 settings 저장 2025-10-16 10:27:43 +09:00
kjs 716cfcb2cf 화면정보 수정 및 미리보기 기능 2025-10-15 18:31:40 +09:00
kjs c42853f261 Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into feature/screen-management 2025-10-15 17:32:22 +09:00
kjs 0c3462a646 Merge branch 'feature/screen-management' of http://39.117.244.52:3000/kjs/ERP-node into feature/screen-management 2025-10-15 17:29:30 +09:00
kjs 7686158a01 분할레이아웃 2025-10-15 17:25:38 +09:00
leeheejin 0b5b140625 대시보드 위젯 렌더링 수정 및 외부 API 키 통합
- DashboardViewer에 ListSummaryWidget 연결
- list 위젯이 실제 DB 데이터 표시하도록 수정
- ITS_API_KEY (국토교통부 교통사고 API) 추가
- KMA_API_KEY (기상청 특보 API) 재적용
- dashboard.ts API URL 수정 (/api로 통일)
2025-10-15 17:02:06 +09:00
dohyeons d4949983fb Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into feature/dashboard 2025-10-15 16:30:52 +09:00
leeheejin 39ddf59275 범용적으로 만든것들이랑 ui 수정 2025-10-15 16:16:27 +09:00
dohyeons eff3b45dc9 기간 필터링 추가 2025-10-15 15:05:20 +09:00
kjs 4c05b25fd8 Merge branch 'main' into feature/screen-management 2025-10-15 13:33:26 +09:00
kjs 3d242c1c8e 화면관리 ui개선 및 파일업로드 설정 2025-10-15 13:30:11 +09:00
leeheejin 36aec28708 차량위치 위젯 기존꺼 분할 완료 2025-10-15 10:29:15 +09:00
kjs a7de47e7ea 세부설정 2025-10-14 17:40:51 +09:00
kjs a2c3737f7a 세부타입설정 2025-10-14 16:45:30 +09:00
kjs 55f52ed1b5 컬럼 세부 타입 설정 2025-10-14 11:48:04 +09:00
kjs dadd49b98f 화면관리 수정 2025-10-13 19:18:01 +09:00
kjs 2754be3250 Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into feature/screen-management 2025-10-13 19:17:44 +09:00
dohyeons 55d8d5432e Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into feature/report 2025-10-13 19:16:23 +09:00
dohyeons 28d460fecd 리포트 관리 되돌리기 2025-10-13 19:15:52 +09:00
leeheejin 75865e2283 Merge branch 'main' into lhj 2025-10-13 18:43:21 +09:00
leeheejin 87bec6760a Merge conflict 해결 - 로컬 변경사항 유지 (날씨 API) 2025-10-13 18:39:37 +09:00
kjs 289e396406 Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into feature/screen-management 2025-10-13 18:38:24 +09:00
dohyeons a53940cff9 gridUtils 되돌리기 2025-10-13 18:37:18 +09:00
kjs 216e19e25d Merge branch 'feature/screen-management' of http://39.117.244.52:3000/kjs/ERP-node into feature/screen-management 2025-10-13 18:28:05 +09:00
kjs e8123932ba 화면관리 12컬럼 중간 커밋 2025-10-13 18:28:03 +09:00
kjs c99936cef0 Merge branch 'main' into feature/screen-management 2025-10-13 17:48:44 +09:00
leeheejin 51dea84bc5 Merge branch 'lhj' 2025-10-13 15:19:59 +09:00
leeheejin 95c98cbda3 메일관리 기능 구현 완료 2025-10-13 15:17:34 +09:00
dohyeons 32024a6d70 레포트관리에 그리드 시스템 1차 적용(2차적인 개선 필요) 2025-10-13 15:08:31 +09:00
kjs 6e41fdf039 메뉴관리 추가 안되는 버그 수정 2025-10-13 15:01:37 +09:00
kjs 8046c2a2e0 되돌리기 기능 추가 2025-10-13 13:28:20 +09:00
dohyeons 7828b5e073 Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into feature/report 2025-10-13 09:44:09 +09:00
kjs 1760703150 Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into feature/screen-management 2025-10-08 09:45:59 +09:00
leeheejin b4c5be1f17 메일관리 콘솔로그 주석처리 세이브 2025-10-02 18:22:58 +09:00
dohyeons 57c4e8317d Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into feature/report 2025-10-02 18:01:14 +09:00
dohyeons c076cd0b14 또 수정 2025-10-02 17:28:52 +09:00
dohyeons 0455b1ee43 수정 2025-10-02 17:22:25 +09:00
dohyeons af75b91371 Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node 2025-10-02 17:14:18 +09:00
dohyeons 29b6143bca 하드코등 주소 수정 2025-10-02 17:14:08 +09:00
kjs 37e018b33c 외부 db노드 설정 2025-10-02 16:43:40 +09:00
kjs 0743786f9b feat: 노드 기반 데이터 플로우 시스템 구현
- 노드 에디터 UI 구현 (React Flow 기반)
  - TableSource, DataTransform, INSERT, UPDATE, DELETE, UPSERT 노드
  - 드래그앤드롭 노드 추가 및 연결
  - 속성 패널을 통한 노드 설정
  - 실시간 필드 라벨 표시 (column_labels 테이블 연동)

- 데이터 변환 노드 (DataTransform) 기능
  - EXPLODE: 구분자로 1개 행 → 여러 행 확장
  - UPPERCASE, LOWERCASE, TRIM, CONCAT, SPLIT, REPLACE 등 12가지 변환 타입
  - In-place 변환 지원 (타겟 필드 생략 시 소스 필드 덮어쓰기)
  - 변환된 필드가 하위 액션 노드에 자동 전달

- 노드 플로우 실행 엔진
  - 위상 정렬을 통한 노드 실행 순서 결정
  - 레벨별 병렬 실행 (Promise.allSettled)
  - 부분 실패 허용 (한 노드 실패 시 연결된 하위 노드만 스킵)
  - 트랜잭션 기반 안전한 데이터 처리

- UPSERT 액션 로직 구현
  - DB 제약 조건 없이 SELECT → UPDATE or INSERT 방식
  - 복합 충돌 키 지원 (예: sales_no + product_name)
  - 파라미터 인덱스 정확한 매핑

- 데이터 소스 자동 감지
  - 테이블 선택 데이터 (selectedRowsData) 자동 주입
  - 폼 입력 데이터 (formData) 자동 주입
  - TableSource 노드가 외부 데이터 우선 사용

- 버튼 컴포넌트 통합
  - 기존 관계 실행 + 새 노드 플로우 실행 하이브리드 지원
  - 노드 플로우 선택 UI 추가
  - API 클라이언트 통합 (Axios)

- 개발 문서 작성
  - 노드 기반 제어 시스템 개선 계획
  - 노드 연결 규칙 설계
  - 노드 실행 엔진 설계
  - 노드 구조 개선안
  - 버튼 통합 분석
2025-10-02 16:22:29 +09:00
leeheejin bf58e0c878 메일관리 기능 구현 2025-10-02 15:46:23 +09:00
dohyeons a219878288 Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into feature/report 2025-10-02 15:41:01 +09:00
leeheejin 3fa410cbe4 ui 수정 및 시현할 기능 업데이트 2025-10-02 14:34:15 +09:00
leeheejin 2c0dca08b4 console.log 주석 처리 - 개발환경 정리
- menu, company, screenMng, i18n, tableMng 모듈 console 주석 처리
- 총 55개 파일 수정
- 빌드 에러 수정 완료
- 백엔드 서버 정상 작동 확인

관련 파일:
- frontend/components/admin/MenuManagement.tsx
- frontend/components/admin/MenuFormModal.tsx
- frontend/components/admin/ScreenAssignmentTab.tsx
- frontend/components/admin/CompanyTable.tsx
- frontend/components/admin/MultiLang.tsx
- frontend/app/(main)/admin/tableMng/page.tsx
- 기타 screen 관련 컴포넌트 49개 파일
2025-10-01 18:17:30 +09:00
leeheejin 4202a5b310 Merge branch 'main' into lhj - 충돌 해결 2025-10-01 18:01:20 +09:00
kjs b84f35d514 테이블 리스트 오류수정 2025-10-01 17:18:48 +09:00
leeheejin 6d1fe625e4 메일관리 시스템 구현 완료 2025-10-01 17:01:31 +09:00
dohyeons d83264181c 이미지 & 구분선 구현 2025-10-01 16:53:35 +09:00
leeheejin 0209be8fd6 메일 관리 작업 저장용 커밋 2025-10-01 16:15:53 +09:00
kjs d22e83d234 fix: UPDATE 액션 formData 기본 포함 및 로깅 추가
UPDATE 액션 실행 시:
- formData를 기본으로 복사하여 기본키 포함
- 상세 로깅으로 디버깅 지원
- 백엔드 동적 기본키 조회 구현
2025-10-01 15:51:13 +09:00
dohyeons 771dc8cf56 Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into feature/report 2025-10-01 15:36:56 +09:00
kjs cb1a6ad672 feat: 버튼 저장 후 제어 자동 실행 기능 추가
문제:
- 버튼에 제어를 연결했지만 실행되지 않음
- ButtonActionExecutor가 제어 실행 로직이 없었음

수정:
1. buttonActions.ts:
   - executeAfterSaveControl() 메서드 추가
   - handleSave()에서 저장 성공 후 제어 실행
   - dataflowTiming='after'일 때만 실행
   - ImprovedButtonActionExecutor 통해 관계 기반 제어 실행

2. ButtonActionConfig 타입 확장:
   - dataflowTiming 필드 추가

3. ButtonActionContext 타입 확장:
   - buttonId, userId, companyCode 필드 추가

4. Import 추가:
   - ExtendedControlContext 타입 import

동작 흐름:
save 버튼 클릭
→ handleSave() 실행
→ 데이터 저장 (INSERT/UPDATE)
→  저장 성공
→ executeAfterSaveControl() 자동 호출
→ ImprovedButtonActionExecutor로 관계 실행
→ 연결된 제어 액션들 순차 실행

결과:
-  저장 후 연결된 제어 자동 실행
-  제어 실패 시 에러 처리
-  기존 기능 영향 없음
2025-10-01 15:31:31 +09:00