Commit Graph

519 Commits

Author SHA1 Message Date
dohyeons ace80be8e1 N-Level 계층 구조 및 공간 종속성 시스템 구현 2025-11-25 13:55:00 +09:00
dohyeons 6fe708505a Merge branch 'main' of http://39.117.244.52:3000/kjs/ERP-node into common/feat/dashboard-map 2025-11-25 09:53:36 +09:00
SeongHyun Kim d10e00c044 fix: 수주관리 수정 저장 시 조인 컬럼 필터링 추가
- entityJoinApi 조회 데이터의 조인 컬럼(material_label 등) 필터링
- dynamicFormService.ts: 병합 모드에서 columnInfo 기반 유효 컬럼만 저장
- sales_order_mng 테이블에 존재하지 않는 컬럼 INSERT 방지
- column does not exist PostgreSQL 에러 해결

영향: 수주관리 그룹 편집 저장 정상 동작
2025-11-24 16:01:29 +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
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 3355ff4563 fix: menu_objid=0 공통 카테고리 값 스킵 문제 해결
문제:
- menu_objid = 0인 공통 카테고리 값들이 19개 스킵됨
- '⏭️  매핑할 메뉴가 없음: menu_objid=0' 로그 반복

원인:
- 삼항 연산자로 0을 할당했으나, 이후 if (newMenuObjid === undefined) 체크에서
- 0이 falsy 값이 아닌데도 undefined와 비교하여 통과하지 못함
- 실제로는 newMenuObjid가 0일 때도 continue되어 스킵됨

해결:
- menu_objid = 0일 경우를 명시적으로 처리
- 0인 경우 바로 0을 할당하고 continue 없이 진행
- 0이 아닌 경우만 menuIdMap에서 찾고, undefined 체크

변경 전:
const newMenuObjid = value.menu_objid === 0 ? 0 : menuIdMap.get(value.menu_objid);
if (newMenuObjid === undefined) continue; // 0도 여기서 걸림!

변경 후:
if (value.menu_objid === 0) {
  newMenuObjid = 0; // 공통 설정은 그대로 0
} else {
  newMenuObjid = menuIdMap.get(value.menu_objid);
  if (newMenuObjid === undefined) continue; // 진짜 undefined만 스킵
}

영향:
- 공통 카테고리 값 19개 정상 복사
- customer_mng, item_info의 division, status, currency_code 등 정상 동작
2025-11-21 16:10:55 +09:00
kjs be48d30d8f fix: 공통 카테고리 설정(menu_objid=0) 복사 누락 문제 해결
문제:
- menu_objid = 0인 공통 카테고리 값들이 복사되지 않음
- 원본 34개 중 15개만 복사됨 (19개 누락)
- customer_mng, item_info 등의 공통 카테고리 값들이 프론트엔드에서 안 보임

원인:
- collectCategorySettings: menu_objid로만 WHERE 필터링
- copyCategorySettings: menuIdMap.get()이 0을 찾지 못함

해결:
1. collectCategorySettings 함수:
   - WHERE menu_objid = ANY($1) OR menu_objid = 0
   - 공통 카테고리 설정도 함께 수집

2. copyCategorySettings 함수:
   - menu_objid = 0일 경우 그대로 0으로 유지
   - if (newMenuObjid === undefined) 체크로 안전성 강화

영향:
- 공통 카테고리 값(division, status, currency_code 등) 정상 복사
- 모든 화면에서 카테고리 값 정상 표시

테스트:
- 원본 34개 → 복사본 34개 (100% 복사)
- customer_mng.division, item_info.division 등 정상 동작
2025-11-21 16:04:04 +09:00
kjs 42435193cf fix: 덮어쓰기 시 외래키 제약조건 위반 문제 해결
문제:
- 기존 메뉴 삭제 시 numbering_rules.fk_numbering_rules_menu 외래키 제약조건 위반
- category_column_mapping.fk_mapping_menu 외래키 제약조건도 위반 가능

원인:
- 채번 규칙과 카테고리 설정이 menu_objid를 참조하는데, 메뉴를 먼저 삭제하려고 함

해결:
deleteExistingCopy 함수의 삭제 순서 변경:
1. 화면 레이아웃
2. 화면-메뉴 할당
3. 화면 정의
4. 메뉴 권한
5. 채번 규칙 파트 (추가)
6. 채번 규칙 (추가)
7. 테이블 컬럼 카테고리 값 (추가)
8. 카테고리 컬럼 매핑 (추가)
9. 메뉴 (역순)

관련 파일:
- backend-node/src/services/menuCopyService.ts

테스트:
- 메뉴 덮어쓰기 재복사 시 외래키 제약조건 위반 없이 정상 동작
2025-11-21 15:59:55 +09:00
kjs 10526da1ac feat: 카테고리 설정 덮어쓰기 모드로 변경
기존 동작:
- 카테고리 컬럼 매핑: 중복 시 스킵
- 카테고리 값: 중복 시 스킵
- 결과: 일부 값만 복사되어 불완전

새로운 동작 (덮어쓰기):
- 카테고리 컬럼 매핑: 기존 것 삭제 후 재생성
- 카테고리 값: 테이블+컬럼 단위로 기존 것 전체 삭제 후 재생성
- 부모-자식 관계는 유지 (depth 순으로 정렬 후 복사)

장점:
1. 메뉴 재복사 시 항상 최신 카테고리 설정으로 덮어씀
2. 누락된 값 없이 완전한 복사 보장
3. 테스트 시 기존 데이터 정리 불필요

주의사항:
- 기존 카테고리 값이 다른 데이터에서 참조되는 경우 외래키 제약조건 위반 가능
- 실무에서는 사용자 선택 옵션(덮어쓰기/병합)을 추가하는 것이 안전

관련 파일:
- backend-node/src/services/menuCopyService.ts

테스트:
- COMPANY_11로 재복사 시 모든 카테고리 값 정상 복사됨
2025-11-21 15:58:00 +09:00
dohyeons dd913d3ecf 3d에서 테이블 가져올 때 테이블, 컬럼 코멘트 같이 가져오기 2025-11-21 15:44:52 +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 14802f507f feat: 카테고리 설정 및 채번 규칙 복사 기능 추가
새로운 기능:
1. 카테고리 컬럼 매핑(category_column_mapping) 복사
2. 테이블 컬럼 카테고리 값(table_column_category_values) 복사
3. 채번 규칙(numbering_rules) 복사
4. 채번 규칙 파트(numbering_rule_parts) 복사

중복 처리:
- 모든 항목: 스킵(Skip) 정책 적용
- 이미 존재하는 데이터는 덮어쓰지 않고 건너뜀
- 카테고리 값: 부모-자식 관계 유지를 위해 기존 ID 매핑 저장

채번 규칙 특징:
- 구조(파트)는 그대로 복사
- 순번(current_sequence)은 1부터 초기화
- rule_id는 타임스탬프 기반으로 새로 생성 (항상 고유)

복사 프로세스:
- [7단계] 카테고리 설정 복사
- [8단계] 채번 규칙 복사

결과 로그:
- 컬럼 매핑, 카테고리 값, 규칙, 파트 개수 표시
- 스킵된 항목 개수도 함께 표시

이제 메뉴 복사 시 카테고리와 채번 규칙도 함께 복사되어
복사한 회사에서 바로 업무를 시작할 수 있습니다.

관련 파일:
- backend-node/src/services/menuCopyService.ts
2025-11-21 15:27:54 +09:00
kjs 3be98234a8 fix: conditional-container sections 경로 수정
문제:
- extractReferencedScreens()에서 props.sections를 체크
- 실제 데이터 구조는 props.componentConfig.sections
- 결과: conditional-container 안의 화면들이 수집되지 않음
- 예: 화면 205의 sections에 있는 202, 208 누락

해결:
- props.sections → props.componentConfig.sections
- conditional-container 안의 모든 화면 정상 수집
- 재귀 복사 로직은 이미 완벽하게 작동 중

참고:
- 모달 안의 모달(재귀 참조)은 이미 정상 작동
- 예: 157 → 253 → 254 (3단계 재귀) 

관련 파일:
- backend-node/src/services/menuCopyService.ts
2025-11-21 15:17:38 +09:00
kjs 9b7416b6f8 fix: source_menu_objid 저장 문제 해결 - BigInt 타입 비교 수정
문제:
- PostgreSQL BIGINT 타입이 JavaScript에서 문자열로 반환됨
- menu.objid === rootMenuObjid 비교가 항상 false (타입 불일치)
- 결과: source_menu_objid가 NULL로 저장되어 덮어쓰기 기능 작동 안 함

해결:
- String() 변환 후 비교: String(menu.objid) === String(rootMenuObjid)
- 타입에 관계없이 값 비교 가능
- source_menu_objid 정상 저장되어 덮어쓰기 기능 작동

검증:
- 로그: '📌 source_menu_objid 저장: 1762407678882 (원본 최상위 메뉴)'
- DB: menu_info.source_menu_objid = 1762407678882 

관련 파일:
- backend-node/src/services/menuCopyService.ts
2025-11-21 14:58:57 +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 147f910c88 refactor(order): 백엔드 데이터 구조 개선, 미사용 UI 제거
백엔드:
- order_mng_master + order_mng_sub LEFT JOIN 조회
- json_agg로 품목 배열화 (items: OrderItem[])
- 타입 정의 추가 (order.ts)

프론트엔드:
- 미사용 그룹화 UI 컴포넌트 삭제
- 평면 테이블 형태 유지 (기존 UI 그대로)

Modified:
- backend-node/src/controllers/orderController.ts
2025-11-21 12:17:29 +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 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 ef08c3fd7a 타입에러 수정 2025-11-21 03:50:45 +09:00
dohyeons 96401634b2 타입 정의 삭제 2025-11-21 03:45:51 +09:00
dohyeons fda7614d48 빌드에러해결 2025-11-21 03:40:41 +09:00
dohyeons 0450390b2a 배치 대략적인 완료 2025-11-21 02:25:25 +09:00
kjs 3219015a39 fix: 채번규칙 메뉴별 격리 문제 해결
문제: 영업관리 메뉴에서 생성한 채번규칙이 기준정보 메뉴에도 표시됨

원인:
- scope_type='table' 규칙을 조회할 때 menu_objid 필터링 없이 모든 규칙을 포함
- 'OR scope_type = 'table'' 조건이 다른 메뉴의 규칙도 반환

수정:
- scope_type='table' 규칙도 menu_objid로 필터링하도록 변경
- 'OR (scope_type = 'table' AND menu_objid = ANY(cd /Users/kimjuseok/ERP-node && git commit -m "fix: 채번규칙 메뉴별 격리 문제 해결

문제: 영업관리 메뉴에서 생성한 채번규칙이 기준정보 메뉴에도 표시됨

원인:
- scope_type='table' 규칙을 조회할 때 menu_objid 필터링 없이 모든 규칙을 포함
- 'OR scope_type = 'table'' 조건이 다른 메뉴의 규칙도 반환

수정:
- scope_type='table' 규칙도 menu_objid로 필터링하도록 변경
- 'OR (scope_type = 'table' AND menu_objid = ANY($1))' 조건으로 메뉴별 격리
- menu_objid IS NULL인 기존 규칙은 하위 호환성을 위해 유지

영향:
- 각 메뉴에서 생성한 채번규칙은 해당 메뉴(및 형제 메뉴)에서만 표시
- global 규칙은 여전히 모든 메뉴에서 표시
- 기존 데이터는 영향 없음 (menu_objid NULL 조건 유지)"))' 조건으로 메뉴별 격리
- menu_objid IS NULL인 기존 규칙은 하위 호환성을 위해 유지

영향:
- 각 메뉴에서 생성한 채번규칙은 해당 메뉴(및 형제 메뉴)에서만 표시
- global 규칙은 여전히 모든 메뉴에서 표시
- 기존 데이터는 영향 없음 (menu_objid NULL 조건 유지)
2025-11-20 18:05:49 +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
kjs e3b78309fa 우측 패널 일괄삭제 기능 2025-11-20 11:58:43 +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
dohyeons 33350a4d46 feat: Digital Twin Editor 테이블 매핑 UI 및 백엔드 API 구현 2025-11-20 10:15:58 +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
kjs b74cb94191 화면 복사기능 수정 2025-11-19 10:03:38 +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 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
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
SeongHyun Kim 91f502c14b Merge branch 'ksh' 2025-11-17 13:37:33 +09:00
SeongHyun Kim e9c64f65c8 카테고리 값 삭제 로직 개선
- 소프트 삭제(is_active=false)에서 하드 삭제(DELETE)로 변경
- 하위 카테고리 체크 시 is_active 조건 제거하여 정확성 향상
- 불필요한 updated_at, updated_by 파라미터 제거
2025-11-17 13:36:46 +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 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
dohyeons b3e217c1de 빌드 에러 해결 2025-11-13 18:09:54 +09:00
dohyeons 50410475c0 배포 오류 해결 2025-11-13 18:06:11 +09:00
kjs 296ee3e825 테이블 데이터 필터링 기능 및 textarea컴포넌트 자동 매핑 삭제 2025-11-13 17:06:41 +09:00