feat: V2 컴포넌트 설정 스키마 정비 및 화면 복제 기능 개선

- 레거시 컴포넌트를 제거하고, V2/V2 컴포넌트 전용 Zod 스키마와 기본값 레지스트리를 통합 관리합니다.
- V2 컴포넌트의 overrides 스키마를 정의하고, 관련된 설정 패널을 통합하였습니다.
- 화면 복제 기능을 개선하여 DB 구조 개편 후의 효율적인 화면 관리를 지원하며, 버튼의 `targetScreenId` 매핑 버그를 수정하였습니다.
- 프리뷰 모드에서 URL 파라미터의 company_code를 우선 사용하도록 변경하였습니다.
- UnifiedRepeater 및 UnifiedSelect 컴포넌트를 추가하여 다양한 데이터 관리 기능을 지원합니다.
This commit is contained in:
kjs
2026-01-29 14:45:04 +09:00
parent 3ab8c9b5a0
commit 924c95ab89
15 changed files with 3179 additions and 1023 deletions
+16 -16
View File
@@ -1,6 +1,6 @@
/**
* V2Repeater 컴포넌트 타입 정의
*
*
* 렌더링 모드:
* - inline: 현재 테이블 컬럼 직접 입력 (simple-repeater-table)
* - modal: 소스 테이블에서 검색/선택 후 복사 (modal-repeater-table)
@@ -17,24 +17,24 @@ export type ModalSize = "sm" | "md" | "lg" | "xl" | "full";
export type ColumnWidthOption = "auto" | "60px" | "80px" | "100px" | "120px" | "150px" | "200px" | "250px" | "300px";
// 자동 입력 타입
export type AutoFillType =
| "none" // 자동 입력 없음
| "currentDate" // 현재 날짜
| "currentDateTime"// 현재 날짜+시간
| "sequence" // 순번 (1, 2, 3...)
| "numbering" // 채번 규칙 (관리자가 등록한 규칙 선택)
| "fromMainForm" // 메인 폼에서 값 복사
| "fixed"; // 고정값
export type AutoFillType =
| "none" // 자동 입력 없음
| "currentDate" // 현재 날짜
| "currentDateTime" // 현재 날짜+시간
| "sequence" // 순번 (1, 2, 3...)
| "numbering" // 채번 규칙 (관리자가 등록한 규칙 선택)
| "fromMainForm" // 메인 폼에서 값 복사
| "fixed"; // 고정값
// 자동 입력 설정
export interface AutoFillConfig {
type: AutoFillType;
// fromMainForm 타입용
sourceField?: string; // 메인 폼에서 복사할 필드명
sourceField?: string; // 메인 폼에서 복사할 필드명
// fixed 타입용
fixedValue?: string | number | boolean;
// numbering 타입용 - 기존 채번 규칙 ID를 참조
numberingRuleId?: string; // 채번 규칙 ID (numbering_rules 테이블)
numberingRuleId?: string; // 채번 규칙 ID (numbering_rules 테이블)
selectedMenuObjid?: number; // 🆕 채번 규칙 선택을 위한 대상 메뉴 OBJID
}
@@ -45,7 +45,7 @@ export interface RepeaterColumnConfig {
width: ColumnWidthOption;
visible: boolean;
editable?: boolean; // 편집 가능 여부 (inline 모드)
hidden?: boolean; // 🆕 히든 처리 (화면에 안 보이지만 저장됨)
hidden?: boolean; // 🆕 히든 처리 (화면에 안 보이지만 저장됨)
isJoinColumn?: boolean;
sourceTable?: string;
// 🆕 소스 테이블 표시 컬럼 여부 (modal 모드에서 읽기 전용으로 표시)
@@ -77,11 +77,11 @@ export interface RepeaterModalConfig {
size: ModalSize;
title?: string; // 모달 제목
buttonText?: string; // 검색 버튼 텍스트
// 소스 테이블 표시 설정 (modal 모드)
sourceDisplayColumns?: ModalDisplayColumn[]; // 모달에 표시할 소스 테이블 컬럼 (라벨 포함)
searchFields?: string[]; // 검색에 사용할 필드
// 화면 기반 모달 (옵션)
screenId?: number;
titleTemplate?: {
@@ -106,13 +106,13 @@ export interface RepeaterFeatureOptions {
export interface RepeaterDataSource {
// inline 모드: 현재 테이블 설정은 필요 없음 (컬럼만 선택)
tableName?: string; // 데이터 테이블명 (레거시 호환)
// modal 모드: 소스 테이블 설정
sourceTable?: string; // 검색할 테이블 (엔티티 참조 테이블)
foreignKey?: string; // 현재 테이블의 FK 컬럼 (part_objid 등)
referenceKey?: string; // 소스 테이블의 PK 컬럼 (id 등)
displayColumn?: string; // 표시할 컬럼 (item_name 등)
// 추가 필터
filter?: {
column: string;