docs: add document sync rule for component and DB changes
- Introduced a new document sync rule to ensure that related documentation is updated whenever components are added or modified, or when there are changes to the database structure. - Specified the documents that must be updated, including the full-screen analysis and V2 component usage guide, along with detailed instructions on how to update them. - This addition aims to enforce consistency and accuracy in documentation, facilitating better collaboration and adherence to development standards. Made-with: Cursor
This commit is contained in:
parent
7a65ab0f85
commit
a2040a228a
|
|
@ -0,0 +1,38 @@
|
|||
---
|
||||
description: 컴포넌트 추가/수정 또는 DB 구조 변경 시 관련 문서를 항상 최신화하도록 강제하는 규칙
|
||||
globs:
|
||||
- "frontend/lib/registry/components/**/*.tsx"
|
||||
- "frontend/components/v2/**/*.tsx"
|
||||
- "db/migrations/**/*.sql"
|
||||
- "backend-node/src/types/ddl.ts"
|
||||
---
|
||||
|
||||
# 컴포넌트 및 DB 구조 변경 시 문서 동기화 규칙
|
||||
|
||||
## 🚨 핵심 원칙 (절대 준수)
|
||||
|
||||
새로운 V2 컴포넌트를 생성하거나 기존 컴포넌트의 설정(overrides)을 변경할 때, 또는 DB 테이블 구조나 화면 생성 파이프라인이 변경될 때는 **반드시** 아래 두 문서를 함께 업데이트해야 합니다.
|
||||
|
||||
1. `docs/screen-implementation-guide/01_reference_guides/full-screen-analysis.md` (전체 레퍼런스)
|
||||
2. `docs/screen-implementation-guide/01_reference_guides/v2-component-usage-guide.md` (실행 가이드)
|
||||
|
||||
## 📌 업데이트 대상 및 방법
|
||||
|
||||
### 1. V2 컴포넌트 신규 추가 또는 속성(Props/Overrides) 변경 시
|
||||
- **`full-screen-analysis.md`**: `3. 컴포넌트 전체 설정 레퍼런스` 섹션에 해당 컴포넌트의 모든 설정값(타입, 기본값, 설명)을 표 형태로 추가/수정하세요.
|
||||
- **`v2-component-usage-guide.md`**:
|
||||
- `7. Step 6: screen_layouts_v2 INSERT`의 컴포넌트 url 매핑표에 추가하세요.
|
||||
- `16. 컴포넌트 빠른 참조표`에 추가하세요.
|
||||
- 필요한 경우 `8. 패턴별 layout_data 완전 예시`에 새로운 패턴을 추가하세요.
|
||||
|
||||
### 2. DB 테이블 구조 또는 화면 생성 로직 변경 시
|
||||
- **`full-screen-analysis.md`**: `2. DB 테이블 스키마` 섹션의 테이블 구조(컬럼, 타입, 설명)를 최신화하세요.
|
||||
- **`v2-component-usage-guide.md`**:
|
||||
- `Step 1` ~ `Step 7`의 SQL 템플릿이 변경된 구조와 일치하는지 확인하고 수정하세요.
|
||||
- 특히 `INSERT` 문의 컬럼 목록과 `VALUES` 형식이 정확한지 검증하세요.
|
||||
|
||||
## ⚠️ AI 에이전트 행동 지침
|
||||
|
||||
1. 사용자가 컴포넌트 코드를 수정해달라고 요청하면, 수정 완료 후 **"관련 가이드 문서도 업데이트할까요?"** 라고 반드시 물어보세요.
|
||||
2. 사용자가 DB 마이그레이션 스크립트를 작성해달라고 하거나 핵심 시스템 테이블을 건드리면, 가이드 문서의 SQL 템플릿도 수정해야 하는지 확인하세요.
|
||||
3. 가이드 문서 업데이트 시 JSON 예제 안에 `//` 같은 주석을 넣지 않도록 주의하세요 (DB 파싱 에러 방지).
|
||||
|
|
@ -1,485 +0,0 @@
|
|||
# WACE ERP 화면 구성 시스템 전체 분석
|
||||
|
||||
> **최종 업데이트**: 2026-03-13
|
||||
> **용도**: LLM 챗봇 / AI 에이전트가 화면 개발 요청을 받았을 때 참조하는 시스템 구조 레퍼런스
|
||||
> **핵심 규칙**: 사용자 업무 화면은 React 코드(.tsx)로 직접 만들지 않는다. DB 등록(screen_definitions + screen_layouts_v2 + menu_info)으로 구현한다.
|
||||
|
||||
---
|
||||
|
||||
## 1. 시스템 아키텍처 요약
|
||||
|
||||
### 1.1 화면 렌더링 파이프라인
|
||||
|
||||
```
|
||||
[DB] screen_definitions (화면 정의)
|
||||
+ screen_layouts_v2 (레이아웃 JSON)
|
||||
+ menu_info (메뉴 등록)
|
||||
│
|
||||
▼
|
||||
[Backend API] GET /api/screens/:screenId
|
||||
│
|
||||
▼
|
||||
[Frontend] /screens/[screenId]/page.tsx
|
||||
│
|
||||
▼
|
||||
[Converter] layoutV2Converter.ts → V2 JSON을 Legacy 포맷으로 변환
|
||||
│
|
||||
▼
|
||||
[Renderer] ResponsiveGridRenderer → RealtimePreview → DynamicComponentRenderer
|
||||
│
|
||||
▼
|
||||
[Registry] ComponentRegistry.getComponent(componentType) → 실제 React 컴포넌트 렌더링
|
||||
```
|
||||
|
||||
### 1.2 화면 유형 분류
|
||||
|
||||
| 구분 | 구현 방식 | 코드 위치 | 예시 |
|
||||
|------|----------|----------|------|
|
||||
| **사용자 업무 화면** | DB 등록 (SQL INSERT) | screen_definitions + screen_layouts_v2 | 수주관리, 품목정보, BOM관리 |
|
||||
| **관리자 메뉴** | React 코드 직접 작성 | frontend/app/(main)/admin/*/page.tsx | 사용자관리, 권한관리, 시스템설정 |
|
||||
|
||||
**절대 규칙**: 사용자 업무 화면(생산, 영업, 구매, 물류, 품질 등)은 React 하드코딩 금지. 반드시 DB 등록 방식으로 구현.
|
||||
|
||||
---
|
||||
|
||||
## 2. V2 컴포넌트 전체 목록 (32개)
|
||||
|
||||
> 모든 컴포넌트는 `v2-` 접두사를 사용한다. 접두사 없는 컴포넌트는 레거시이므로 사용 금지.
|
||||
|
||||
### 2.1 입력 컴포넌트 (9개)
|
||||
|
||||
| ID | 용도 | 핵심 설정 |
|
||||
|----|------|----------|
|
||||
| `v2-input` | 텍스트, 숫자, 비밀번호, textarea, 슬라이더, 컬러, 버튼 | inputType, format(email/tel/url/currency/biz_no), required, readonly, maxLength |
|
||||
| `v2-select` | 드롭다운, 콤보박스, 라디오, 체크박스, 태그, 토글, 스왑 | mode, source(static/code/db/api/entity/category/distinct/select), searchable, multiple, cascading |
|
||||
| `v2-date` | 날짜, 시간, 날짜시간, 날짜범위, 월, 연도 | dateType(date/time/datetime), format, range, minDate, maxDate |
|
||||
| `v2-file-upload` | 파일/이미지 업로드, 다중 업로드 | accept, maxSize, multiple |
|
||||
| `v2-media` | 이미지, 비디오, 오디오 표시 | mediaType |
|
||||
| `v2-location-swap-selector` | 출발지/도착지 선택 및 교환 | - |
|
||||
| `v2-rack-structure` | 창고 랙 위치 일괄 생성 | columns, rows |
|
||||
| `v2-process-work-standard` | 품목별 공정 작업기준 관리 (Pre/In/Post-Work) | - |
|
||||
| `v2-item-routing` | 품목별 라우팅 버전 및 공정 순서 관리 (3단계 계층) | - |
|
||||
|
||||
### 2.2 표시/데이터 컴포넌트 (10개)
|
||||
|
||||
| ID | 용도 | 핵심 설정 |
|
||||
|----|------|----------|
|
||||
| `v2-table-list` | 데이터 테이블 (조회/편집, 페이지네이션, 정렬, 필터) | selectedTable, columns, pagination, displayMode(table/card), checkbox, linkedFilters |
|
||||
| `v2-table-grouped` | 그룹화 테이블 (접기/펼치기, 그룹별 집계) | groupConfig(groupByColumn, summary), v2-table-list 기반 확장 |
|
||||
| `v2-table-search-widget` | 테이블 검색/필터/그룹 바 | autoSelectFirstTable, showTableSelector |
|
||||
| `v2-pivot-grid` | 다차원 피벗 분석 (행/열/데이터/필터 영역) | fields(area, summaryType, groupInterval), dataSource |
|
||||
| `v2-text-display` | 라벨, 제목, 설명 텍스트 표시 | fontSize, fontWeight, color, textAlign |
|
||||
| `v2-card-display` | 테이블 데이터를 카드 형태로 표시 | cardsPerRow, columnMapping(title/subtitle/image/status), cardStyle |
|
||||
| `v2-aggregation-widget` | 합계, 평균, 개수, 최대, 최소 집계 카드 | items, filters, layout |
|
||||
| `v2-status-count` | 상태별 건수 카드 표시 | statusField, countField |
|
||||
| `v2-numbering-rule` | 자동 코드/번호 채번 (접두사+날짜+순번) | rule, prefix, format |
|
||||
| `v2-category-manager` | 트리 기반 카테고리 관리 (3단계 계층) | - |
|
||||
|
||||
### 2.3 레이아웃 컴포넌트 (8개)
|
||||
|
||||
| ID | 용도 | 핵심 설정 |
|
||||
|----|------|----------|
|
||||
| `v2-split-panel-layout` | 마스터-디테일 좌우 분할 | splitRatio, leftPanel(displayMode/tableName), rightPanel(relation/foreignKey), additionalTabs |
|
||||
| `v2-tabs-widget` | 탭 전환, 탭 내 컴포넌트 배치 | tabs(id/label/components), defaultTab, orientation |
|
||||
| `v2-section-card` | 제목+테두리가 있는 그룹화 컨테이너 | title, collapsible |
|
||||
| `v2-section-paper` | 배경색 기반 미니멀 그룹화 컨테이너 | backgroundColor, padding |
|
||||
| `v2-divider-line` | 영역 구분선 | orientation, thickness |
|
||||
| `v2-split-line` | 캔버스 좌우 분할용 드래그 가능 세로선 | - |
|
||||
| `v2-repeat-container` | 데이터 수만큼 내부 컴포넌트 반복 렌더링 | dataSourceType, layout, gridColumns |
|
||||
| `v2-repeater` | 인라인/모달/버튼 모드 반복 데이터 관리 | mode(inline/modal/button) |
|
||||
|
||||
### 2.4 특수/비즈니스 컴포넌트 (5개)
|
||||
|
||||
| ID | 용도 | 핵심 설정 |
|
||||
|----|------|----------|
|
||||
| `v2-button-primary` | 저장/삭제/조회 등 액션 버튼 | text, actionType, variant, webTypeConfig.dataflowConfig |
|
||||
| `v2-timeline-scheduler` | 간트차트형 일정/계획 시각화 (드래그/리사이즈) | selectedTable, resourceTable, fieldMapping, zoomLevel, editable |
|
||||
| `v2-approval-step` | 결재 단계 스테퍼 시각화 | - |
|
||||
| `v2-bom-tree` | BOM 계층 트리 표시 (정전개/역전개) | - |
|
||||
| `v2-bom-item-editor` | BOM 하위품목 트리 편집 | - |
|
||||
|
||||
---
|
||||
|
||||
## 3. 화면 UI 패턴 분류 (7가지)
|
||||
|
||||
> AI가 화면 개발 요청을 받았을 때, 아래 패턴 중 해당하는 것을 선택하여 구현한다.
|
||||
|
||||
### 패턴 A: 기본 마스터 (검색 + 테이블)
|
||||
|
||||
**적용 비율**: 약 50% (가장 흔함)
|
||||
**적용 화면**: 코드관리, 부서정보, 창고정보, 검사기준, 불량관리, 공급업체관리 등
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────┐
|
||||
│ v2-table-search-widget │
|
||||
│ [검색필드1] [검색필드2] [조회] [엑셀] │
|
||||
├─────────────────────────────────────────────────┤
|
||||
│ v2-table-list │
|
||||
│ 제목 [신규] [삭제] │
|
||||
│ ─────────────────────────────────────────────── │
|
||||
│ □ | 코드 | 이름 | 상태 | 등록일 │
|
||||
└─────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
**필수 컴포넌트**: `v2-table-search-widget` (1개) + `v2-table-list` (1개)
|
||||
|
||||
### 패턴 B: 마스터-디테일 (좌우 분할)
|
||||
|
||||
**적용 비율**: 약 25%
|
||||
**적용 화면**: 공정관리, 수주관리, 견적관리, 품목라우팅 등
|
||||
|
||||
```
|
||||
┌──────────────────┬──────────────────────────────┐
|
||||
│ 마스터 테이블 │ 디테일 테이블/폼 │
|
||||
│ (좌측 패널) │ (우측 패널) │
|
||||
│ □ A001 항목1 │ [상세 정보 테이블] │
|
||||
│ □ A002 항목2 ← │ │
|
||||
└──────────────────┴──────────────────────────────┘
|
||||
v2-split-panel-layout
|
||||
```
|
||||
|
||||
**필수 컴포넌트**: `v2-split-panel-layout` (1개)
|
||||
|
||||
### 패턴 C: 마스터-디테일 + 탭
|
||||
|
||||
**적용 비율**: 약 10%
|
||||
**적용 화면**: 거래처관리, 설비정보, 품목정보 등
|
||||
|
||||
```
|
||||
┌──────────────────┬──────────────────────────────┐
|
||||
│ 마스터 테이블 │ [기본] [이력] [첨부] │
|
||||
│ │ ┌────────────────────────┐ │
|
||||
│ □ A001 거래처1 │ │ 탭별 컨텐츠 │ │
|
||||
│ □ A002 거래처2 ← │ └────────────────────────┘ │
|
||||
└──────────────────┴──────────────────────────────┘
|
||||
```
|
||||
|
||||
**필수 컴포넌트**: `v2-split-panel-layout` (1개, rightPanel에 additionalTabs 설정)
|
||||
|
||||
### 패턴 D: 카드 뷰
|
||||
|
||||
**적용 비율**: 약 5%
|
||||
**적용 화면**: 설비정보, 대시보드, 상품 카탈로그 등
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────┐
|
||||
│ v2-table-search-widget │
|
||||
├─────────────────────────────────────────────────┤
|
||||
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
|
||||
│ │ [이미지]│ │ [이미지]│ │ [이미지]│ │
|
||||
│ │ 제목 │ │ 제목 │ │ 제목 │ │
|
||||
│ │ 설명 │ │ 설명 │ │ 설명 │ │
|
||||
│ └─────────┘ └─────────┘ └─────────┘ │
|
||||
│ v2-card-display │
|
||||
└─────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
**필수 컴포넌트**: `v2-card-display` (1개) + `v2-table-search-widget` (선택)
|
||||
|
||||
### 패턴 E: 피벗 분석
|
||||
|
||||
**적용 비율**: 약 3%
|
||||
**적용 화면**: 매출분석, 재고현황, 생산실적 분석 등
|
||||
|
||||
**필수 컴포넌트**: `v2-pivot-grid` (1개)
|
||||
|
||||
### 패턴 F: 그룹화 테이블
|
||||
|
||||
**적용 비율**: 약 5%
|
||||
**적용 화면**: 품목정보(카테고리별), 입출고관리(구분별), 작업지시(공정별) 등
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────┐
|
||||
│ [전체 펼치기] [전체 접기] │
|
||||
├─────────────────────────────────────────────────┤
|
||||
│ ▼ □ 그룹A 수량: 150 3건 │
|
||||
│ ├─ □ 항목1 50개 │
|
||||
│ ├─ □ 항목2 50개 │
|
||||
│ └─ □ 항목3 50개 │
|
||||
│ ► □ 그룹B 수량: 200 2건 │
|
||||
└─────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
**필수 컴포넌트**: `v2-table-grouped` (1개)
|
||||
|
||||
### 패턴 G: 타임라인/간트차트
|
||||
|
||||
**적용 비율**: 약 2%
|
||||
**적용 화면**: 생산계획관리, 설비가동현황 등
|
||||
|
||||
```
|
||||
┌────────────┬─────────────────────────────────────┐
|
||||
│ │ 15(수) │ 16(목) │ 17(금) │ 18(토) │
|
||||
├────────────┼─────────────────────────────────────┤
|
||||
│ 설비A │ ████████████████ │
|
||||
│ 설비B │ █████████████████████ │
|
||||
│ 설비C │ ████████████████ │
|
||||
└────────────┴─────────────────────────────────────┘
|
||||
```
|
||||
|
||||
**필수 컴포넌트**: `v2-timeline-scheduler` (1개)
|
||||
|
||||
---
|
||||
|
||||
## 4. 패턴 판단 의사결정 트리
|
||||
|
||||
> AI가 화면 요청을 받았을 때 이 트리를 따라 패턴을 결정한다.
|
||||
|
||||
```
|
||||
Q1. 시간축 기반 일정/간트차트가 필요한가?
|
||||
├─ YES → 패턴 G (타임라인)
|
||||
└─ NO ↓
|
||||
|
||||
Q2. 다차원 집계/피벗 분석이 필요한가?
|
||||
├─ YES → 패턴 E (피벗)
|
||||
└─ NO ↓
|
||||
|
||||
Q3. 데이터를 그룹별로 묶어서 접기/펼치기가 필요한가?
|
||||
├─ YES → 패턴 F (그룹화 테이블)
|
||||
└─ NO ↓
|
||||
|
||||
Q4. 이미지+정보를 카드 형태로 표시하는가?
|
||||
├─ YES → 패턴 D (카드 뷰)
|
||||
└─ NO ↓
|
||||
|
||||
Q5. 마스터 테이블 선택 시 연관 디테일이 필요한가?
|
||||
├─ YES → Q5-1. 디테일에 탭이 필요한가?
|
||||
│ ├─ YES → 패턴 C (마스터-디테일+탭)
|
||||
│ └─ NO → 패턴 B (마스터-디테일)
|
||||
└─ NO → 패턴 A (기본 마스터)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. 화면 구현 불가능/제한 사항
|
||||
|
||||
### 5.1 현재 불가능 (별도 React 개발 필요)
|
||||
|
||||
| 기능 | 상태 | 대안 |
|
||||
|------|------|------|
|
||||
| 칸반 보드 (드래그앤드롭) | 미지원 | 별도 React 컴포넌트 |
|
||||
| 모바일 네이티브 앱 스타일 | 미지원 | 별도 개발 |
|
||||
| 복잡한 차트 (line, bar, pie) | 미지원 | 외부 라이브러리 연동 |
|
||||
|
||||
### 5.2 이전에 불가능했으나 현재 지원되는 기능
|
||||
|
||||
| 기능 | 지원 컴포넌트 | 추가 시점 |
|
||||
|------|-------------|----------|
|
||||
| 그룹화 테이블 | `v2-table-grouped` | 2026-01 |
|
||||
| 타임라인/간트차트 | `v2-timeline-scheduler` | 2026-01 |
|
||||
| BOM 트리 (정전개/역전개) | `v2-bom-tree` | 2026-02 |
|
||||
| BOM 하위품목 편집 | `v2-bom-item-editor` | 2026-02 |
|
||||
| 결재 스테퍼 | `v2-approval-step` | 2026-02 |
|
||||
|
||||
### 5.3 권장하지 않는 조합
|
||||
|
||||
| 조합 | 이유 |
|
||||
|------|------|
|
||||
| 3단계 이상 중첩 분할 | 화면 복잡도 증가, 성능 저하 |
|
||||
| 탭 안에 탭 | 사용성 저하 |
|
||||
| 한 화면에 3개 이상 테이블 | 데이터 로딩 성능 |
|
||||
| 피벗 + 상세 테이블 동시 | 데이터 과부하 |
|
||||
|
||||
---
|
||||
|
||||
## 6. 화면별 구현 현황 (메뉴 분류)
|
||||
|
||||
### 6.1 기준정보
|
||||
|
||||
| 화면명 | 패턴 | 구현 가능 | 비고 |
|
||||
|--------|------|----------|------|
|
||||
| 회사정보 | A | 완전 지원 | |
|
||||
| 부서정보 | A | 완전 지원 | |
|
||||
| 품목정보 | F 또는 A | 완전 지원 | 카테고리별 그룹화 시 F |
|
||||
| BOM관리 | B + v2-bom-tree | 완전 지원 | v2-bom-tree로 트리 구현 |
|
||||
| 공정정보관리 | B | 완전 지원 | |
|
||||
| 공정작업기준 | A | 완전 지원 | v2-process-work-standard 활용 가능 |
|
||||
| 품목라우팅 | B | 완전 지원 | v2-item-routing 활용 가능 |
|
||||
|
||||
### 6.2 영업관리
|
||||
|
||||
| 화면명 | 패턴 | 구현 가능 | 비고 |
|
||||
|--------|------|----------|------|
|
||||
| 수주관리 | B | 완전 지원 | |
|
||||
| 견적관리 | B | 완전 지원 | |
|
||||
| 거래처관리 | C | 완전 지원 | 탭(기본/이력/첨부) |
|
||||
| 판매품목정보 | A | 완전 지원 | |
|
||||
| 출하계획관리 | A | 완전 지원 | |
|
||||
|
||||
### 6.3 생산관리
|
||||
|
||||
| 화면명 | 패턴 | 구현 가능 | 비고 |
|
||||
|--------|------|----------|------|
|
||||
| 생산계획관리 | G | 완전 지원 | v2-timeline-scheduler |
|
||||
| 생산관리 | A | 완전 지원 | |
|
||||
| 생산실적관리 | A | 완전 지원 | |
|
||||
| 작업지시 | F | 완전 지원 | 공정별 그룹화 |
|
||||
| 공정관리 | B | 완전 지원 | |
|
||||
|
||||
### 6.4 구매관리
|
||||
|
||||
| 화면명 | 패턴 | 구현 가능 | 비고 |
|
||||
|--------|------|----------|------|
|
||||
| 발주관리 | A | 완전 지원 | |
|
||||
| 공급업체관리 | A | 완전 지원 | |
|
||||
| 구매입고 | A | 완전 지원 | |
|
||||
|
||||
### 6.5 설비관리
|
||||
|
||||
| 화면명 | 패턴 | 구현 가능 | 비고 |
|
||||
|--------|------|----------|------|
|
||||
| 설비정보 | C 또는 D | 완전 지원 | 카드뷰 또는 탭 |
|
||||
|
||||
### 6.6 물류관리
|
||||
|
||||
| 화면명 | 패턴 | 구현 가능 | 비고 |
|
||||
|--------|------|----------|------|
|
||||
| 창고정보관리 | A | 완전 지원 | |
|
||||
| 입출고관리 | F | 완전 지원 | 구분별 그룹화 |
|
||||
| 재고현황 | A 또는 E | 완전 지원 | 피벗 분석도 가능 |
|
||||
|
||||
### 6.7 품질관리
|
||||
|
||||
| 화면명 | 패턴 | 구현 가능 | 비고 |
|
||||
|--------|------|----------|------|
|
||||
| 검사기준 | A | 완전 지원 | |
|
||||
| 검사정보관리 | C | 완전 지원 | 탭(수입검사/공정검사/출하검사) |
|
||||
| 검사장비관리 | A | 완전 지원 | |
|
||||
| 불량관리 | A | 완전 지원 | |
|
||||
| 클레임관리 | A | 완전 지원 | |
|
||||
|
||||
---
|
||||
|
||||
## 7. 컴포넌트 커버리지 요약
|
||||
|
||||
| 항목 | 수치 |
|
||||
|------|------|
|
||||
| 전체 분석 대상 화면 | 26개 |
|
||||
| V2 컴포넌트로 구현 가능 | **26개 (100%)** |
|
||||
| 등록된 V2 컴포넌트 수 | 32개 |
|
||||
| 화면 UI 패턴 수 | 7가지 (A~G) |
|
||||
|
||||
**이전 대비 변경 사항**:
|
||||
- BOM 트리 지원 추가 (v2-bom-tree) → BOM관리 완전 지원
|
||||
- 그룹화 테이블 지원 추가 (v2-table-grouped) → 품목정보, 입출고 등 완전 지원
|
||||
- 타임라인 지원 추가 (v2-timeline-scheduler) → 생산계획관리 완전 지원
|
||||
- 결재 스테퍼 추가 (v2-approval-step) → 결재 프로세스 시각화 가능
|
||||
- 전체 커버리지: 65% → **100%** 달성
|
||||
|
||||
---
|
||||
|
||||
## 8. UI vs 비즈니스 로직 분리 구조
|
||||
|
||||
```
|
||||
┌───────────────────────────────┬───────────────────────────────────┐
|
||||
│ UI 레이아웃 │ 제어관리 (비즈니스 로직) │
|
||||
│ screen_layouts_v2 (JSON) │ dataflow_diagrams (JSONB) │
|
||||
├───────────────────────────────┼───────────────────────────────────┤
|
||||
│ - 컴포넌트 배치/크기/위치 │ - 버튼 클릭 시 액션 (INSERT 등) │
|
||||
│ - 검색 필드 구성 │ - 조건부 실행 │
|
||||
│ - 테이블 컬럼 표시/숨김 │ - 다중 행 일괄 처리 │
|
||||
│ - 카드/탭/분할 레이아웃 │ - 테이블 간 데이터 이동 │
|
||||
│ - 페이지네이션/정렬 설정 │ - 외부 시스템 호출 │
|
||||
└───────────────────────────────┴───────────────────────────────────┘
|
||||
```
|
||||
|
||||
**핵심**: V2 컴포넌트는 UI만 담당한다. 버튼 클릭 시 INSERT/UPDATE/DELETE 같은 비즈니스 로직은 `dataflow_diagrams` 테이블에서 별도 설정한다.
|
||||
|
||||
### 비즈니스 로직 실행 흐름
|
||||
|
||||
```
|
||||
v2-button-primary 클릭
|
||||
→ webTypeConfig.dataflowConfig 확인
|
||||
→ ImprovedButtonActionExecutor 실행
|
||||
1. Before 제어 실행 (조건 체크)
|
||||
2. Main 액션 실행 (save/delete/update)
|
||||
3. After 제어 실행 (후처리)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 9. 화면 개발 순서 (AI 에이전트용)
|
||||
|
||||
```
|
||||
Step 1: DB 테이블 생성
|
||||
└─ 모든 컬럼 VARCHAR(500), 기본 5개 컬럼 필수 (id, created_date, updated_date, writer, company_code)
|
||||
└─ table_labels, table_type_columns, column_labels 메타데이터 등록
|
||||
|
||||
Step 2: screen_definitions INSERT
|
||||
└─ screen_code = '{company_code}_{순번}'
|
||||
└─ table_name = 메인 테이블명
|
||||
|
||||
Step 3: screen_layouts_v2 INSERT
|
||||
└─ layout_data = V2 레이아웃 JSON (version: "2.0", components 배열)
|
||||
└─ 패턴(A~G)에 맞는 컴포넌트 배치
|
||||
|
||||
Step 4: dataflow_diagrams INSERT (비즈니스 로직이 필요한 경우)
|
||||
└─ 버튼별 액션 정의 (INSERT/UPDATE/DELETE)
|
||||
└─ 조건, 필드 매핑 설정
|
||||
|
||||
Step 5: menu_info INSERT
|
||||
└─ menu_url = '/screen/{screen_code}'
|
||||
└─ 적절한 parent_id로 메뉴 트리에 배치
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 10. DB 테이블 구조 레퍼런스
|
||||
|
||||
### screen_definitions
|
||||
|
||||
| 컬럼 | 타입 | 설명 |
|
||||
|------|------|------|
|
||||
| screen_id | integer PK (시퀀스) | 화면 고유 ID |
|
||||
| screen_name | varchar(100) | 화면명 |
|
||||
| screen_code | varchar(50) UNIQUE | 화면 코드 (`{company_code}_{순번}`) |
|
||||
| table_name | varchar(100) | 기본 테이블명 |
|
||||
| company_code | varchar(50) | 회사 코드 |
|
||||
| description | text | 설명 |
|
||||
| is_active | char(1) | Y/N/D |
|
||||
|
||||
### screen_layouts_v2
|
||||
|
||||
| 컬럼 | 타입 | 설명 |
|
||||
|------|------|------|
|
||||
| layout_id | integer PK | 레이아웃 ID |
|
||||
| screen_id | integer FK | 화면 ID |
|
||||
| company_code | varchar(20) | 회사 코드 |
|
||||
| layer_id | integer | 레이어 ID (1=기본) |
|
||||
| layout_data | jsonb | 전체 레이아웃 JSON |
|
||||
|
||||
### layout_data JSON 구조
|
||||
|
||||
```json
|
||||
{
|
||||
"version": "2.0",
|
||||
"components": [
|
||||
{
|
||||
"id": "comp_xxx",
|
||||
"url": "@/lib/registry/components/v2-table-list",
|
||||
"position": { "x": 0, "y": 150, "z": 1 },
|
||||
"size": { "width": 1920, "height": 600 },
|
||||
"displayOrder": 0,
|
||||
"overrides": {
|
||||
"label": "품목 목록",
|
||||
"tableName": "item_info",
|
||||
"columns": [
|
||||
{ "columnName": "item_code", "displayName": "품목코드", "visible": true }
|
||||
],
|
||||
"pagination": { "enabled": true, "pageSize": 20 }
|
||||
}
|
||||
}
|
||||
],
|
||||
"gridSettings": { "columns": 12, "gap": 16, "padding": 16 },
|
||||
"screenResolution": { "width": 1920, "height": 1080 }
|
||||
}
|
||||
```
|
||||
|
||||
### menu_info (주요 컬럼)
|
||||
|
||||
| 컬럼 | 설명 |
|
||||
|------|------|
|
||||
| objid / menu_id | 메뉴 PK |
|
||||
| screen_id | 연결된 화면 ID |
|
||||
| menu_url | 메뉴 URL (`/screen/{screen_code}`) |
|
||||
| company_code | 회사 코드 |
|
||||
|
|
@ -1,846 +0,0 @@
|
|||
# V2 컴포넌트 사용 가이드 (LLM/챗봇용)
|
||||
|
||||
> **최종 업데이트**: 2026-03-13
|
||||
> **용도**: LLM 챗봇이 화면 개발 요청을 받았을 때, 어떤 컴포넌트를 어떤 설정으로 사용해야 하는지 판단하는 레퍼런스
|
||||
> **버전**: 2.0.0
|
||||
> **대상**: AI 에이전트, 챗봇, 화면 설계자
|
||||
|
||||
---
|
||||
|
||||
## 0. 핵심 규칙 (반드시 준수)
|
||||
|
||||
1. **사용자 업무 화면은 React 코드로 직접 만들지 않는다** → DB에 `screen_definitions` + `screen_layouts_v2` + `menu_info` INSERT로 구현
|
||||
2. **모든 컴포넌트는 `v2-` 접두사** → `v2-` 없는 레거시 컴포넌트 사용 금지
|
||||
3. **UI와 로직 분리** → UI는 `screen_layouts_v2`, 비즈니스 로직은 `dataflow_diagrams`
|
||||
4. **멀티테넌시 필수** → 모든 테이블에 `company_code` 컬럼, 모든 쿼리에 `company_code` 필터링
|
||||
|
||||
---
|
||||
|
||||
## 1. 컴포넌트 전체 카탈로그 (32개)
|
||||
|
||||
### 1.1 입력 컴포넌트
|
||||
|
||||
#### v2-input
|
||||
|
||||
텍스트, 숫자, 비밀번호, textarea 등 모든 단일 값 입력을 처리하는 통합 입력 컴포넌트.
|
||||
|
||||
| 설정 | 타입 | 설명 | 값 |
|
||||
|------|------|------|----|
|
||||
| inputType | string | 입력 유형 | `text`, `number`, `password`, `slider`, `color`, `button`, `textarea` |
|
||||
| format | string | 포맷 검증 | `email`, `tel`, `url`, `currency`, `biz_no` |
|
||||
| required | boolean | 필수 여부 | true/false |
|
||||
| readonly | boolean | 읽기 전용 | true/false |
|
||||
| maxLength | number | 최대 길이 | 숫자 |
|
||||
| min / max | number | 숫자 범위 | 숫자 (inputType=number일 때) |
|
||||
| step | number | 증감 단위 | 숫자 (inputType=number/slider일 때) |
|
||||
| tableName | string | 바인딩 테이블 | DB 테이블명 |
|
||||
| columnName | string | 바인딩 컬럼 | DB 컬럼명 |
|
||||
|
||||
#### v2-select
|
||||
|
||||
드롭다운, 콤보박스, 라디오, 체크박스, 태그 등 선택형 입력 통합 컴포넌트.
|
||||
|
||||
| 설정 | 타입 | 설명 | 값 |
|
||||
|------|------|------|----|
|
||||
| mode | string | 선택 모드 | `dropdown`, `combobox`, `radio`, `check`, `tag`, `tagbox`, `toggle`, `swap` |
|
||||
| source | string | 데이터 소스 | `static`, `code`, `db`, `api`, `entity`, `category`, `distinct`, `select` |
|
||||
| searchable | boolean | 검색 가능 | true/false (mode=combobox일 때 기본 true) |
|
||||
| multiple | boolean | 다중 선택 | true/false |
|
||||
| cascading | object | 연쇄 선택 | 상위 select 값에 따라 하위 옵션 변경 |
|
||||
|
||||
**source 설명**:
|
||||
- `static`: 고정 옵션 목록 (options 배열 직접 지정)
|
||||
- `code`: code_info 테이블의 공통 코드
|
||||
- `db`: 특정 테이블의 컬럼 값
|
||||
- `entity`: 엔티티 조인 (다른 테이블 참조)
|
||||
- `category`: v2-category-manager의 카테고리
|
||||
- `distinct`: 테이블 컬럼의 DISTINCT 값
|
||||
|
||||
#### v2-date
|
||||
|
||||
날짜, 시간, 날짜시간, 날짜범위, 월, 연도 입력.
|
||||
|
||||
| 설정 | 타입 | 설명 | 값 |
|
||||
|------|------|------|----|
|
||||
| dateType | string | 날짜 유형 | `date`, `time`, `datetime`, `month`, `year` |
|
||||
| format | string | 표시 형식 | `YYYY-MM-DD`, `HH:mm`, `YYYY-MM-DD HH:mm` 등 |
|
||||
| range | boolean | 범위 선택 | true/false (시작~종료 날짜) |
|
||||
| minDate / maxDate | string | 선택 가능 범위 | ISO 8601 날짜 |
|
||||
| showToday | boolean | 오늘 버튼 | true/false |
|
||||
|
||||
#### v2-file-upload
|
||||
|
||||
파일/이미지 업로드. 다중 업로드, 미리보기 지원.
|
||||
|
||||
#### v2-media
|
||||
|
||||
이미지, 비디오, 오디오 등 미디어 표시/재생.
|
||||
|
||||
#### v2-location-swap-selector
|
||||
|
||||
출발지/도착지 선택 및 교환 (물류 화면용).
|
||||
|
||||
#### v2-rack-structure
|
||||
|
||||
창고 랙 위치 일괄 생성 (열 범위, 단 수 설정).
|
||||
|
||||
#### v2-process-work-standard
|
||||
|
||||
품목별 공정 작업기준(Pre-Work/In-Work/Post-Work) 관리. 라우팅과 연동.
|
||||
|
||||
#### v2-item-routing
|
||||
|
||||
품목별 라우팅 버전 및 공정 순서 관리 (3단계 계층: 품목 → 라우팅 버전 → 공정).
|
||||
|
||||
---
|
||||
|
||||
### 1.2 표시/데이터 컴포넌트
|
||||
|
||||
#### v2-table-list
|
||||
|
||||
가장 핵심 컴포넌트. DB 테이블 데이터를 조회/편집하는 테이블.
|
||||
|
||||
| 설정 | 타입 | 설명 | 값 |
|
||||
|------|------|------|----|
|
||||
| selectedTable | string | **필수**. DB 테이블명 | 예: `"item_info"` |
|
||||
| columns | array | 표시할 컬럼 설정 | `[{ columnName, displayName, visible, sortable, width, editable }]` |
|
||||
| pagination | object | 페이지네이션 | `{ enabled: true, pageSize: 20, showSizeSelector: true }` |
|
||||
| displayMode | string | 표시 모드 | `"table"` (기본) 또는 `"card"` |
|
||||
| checkbox | object | 체크박스 | `{ enabled: true, multiple: true, position: "left", selectAll: true }` |
|
||||
| horizontalScroll | object | 가로 스크롤 | `{ enabled: true, maxVisibleColumns: 8 }` |
|
||||
| linkedFilters | array | 다른 컴포넌트와 연동 필터 | - |
|
||||
| excludeFilter | object | 제외 필터 | - |
|
||||
| autoLoad | boolean | 자동 데이터 로드 | true/false |
|
||||
| stickyHeader | boolean | 헤더 고정 | true/false |
|
||||
| toolbar | object | 툴바 (신규/삭제/엑셀 등) | - |
|
||||
| tableStyle | object | 테이블 스타일 | `{ compact: true, striped: true }` |
|
||||
|
||||
**columns 배열 항목**:
|
||||
|
||||
```json
|
||||
{
|
||||
"columnName": "item_code",
|
||||
"displayName": "품목코드",
|
||||
"visible": true,
|
||||
"sortable": true,
|
||||
"width": 120,
|
||||
"editable": false,
|
||||
"inputType": "text",
|
||||
"format": null,
|
||||
"align": "left"
|
||||
}
|
||||
```
|
||||
|
||||
#### v2-table-grouped
|
||||
|
||||
v2-table-list 기반 확장. 특정 컬럼 기준으로 데이터를 그룹화하여 접기/펼치기 기능 제공.
|
||||
|
||||
| 설정 | 타입 | 설명 | 값 |
|
||||
|------|------|------|----|
|
||||
| selectedTable | string | **필수**. DB 테이블명 | - |
|
||||
| groupConfig | object | **필수**. 그룹화 설정 | 아래 참조 |
|
||||
| columns | array | 컬럼 설정 (v2-table-list와 동일) | - |
|
||||
| showCheckbox | boolean | 체크박스 표시 | true/false |
|
||||
|
||||
**groupConfig 구조**:
|
||||
|
||||
```json
|
||||
{
|
||||
"groupByColumn": "category",
|
||||
"groupLabelFormat": "{category_name} ({category_code})",
|
||||
"summary": {
|
||||
"sumColumns": ["quantity", "amount"],
|
||||
"showCount": true
|
||||
},
|
||||
"defaultExpanded": true,
|
||||
"nestedGroup": null
|
||||
}
|
||||
```
|
||||
|
||||
#### v2-table-search-widget
|
||||
|
||||
테이블 상단에 배치하는 검색/필터 바. 대상 테이블의 컬럼을 자동 감지하여 검색 필드 생성.
|
||||
|
||||
| 설정 | 타입 | 설명 | 값 |
|
||||
|------|------|------|----|
|
||||
| autoSelectFirstTable | boolean | 첫 번째 테이블 자동 선택 | true/false |
|
||||
| showTableSelector | boolean | 테이블 선택기 표시 | true/false |
|
||||
| title | string | 검색 바 제목 | - |
|
||||
|
||||
#### v2-pivot-grid
|
||||
|
||||
다차원 피벗 테이블. 행/열/데이터/필터 영역으로 데이터 분석.
|
||||
|
||||
| 설정 | 타입 | 설명 | 값 |
|
||||
|------|------|------|----|
|
||||
| fields | array | **필수**. 필드 정의 | 아래 참조 |
|
||||
| dataSource | object | 데이터 소스 | `{ type: "table"/"api"/"static", joinConfigs, filterConditions }` |
|
||||
|
||||
**fields 배열 항목**:
|
||||
|
||||
```json
|
||||
{
|
||||
"dataField": "region",
|
||||
"area": "row",
|
||||
"caption": "지역"
|
||||
}
|
||||
```
|
||||
|
||||
area 값: `"row"`, `"column"`, `"data"`, `"filter"`
|
||||
summaryType (area=data일 때): `"sum"`, `"avg"`, `"count"`, `"min"`, `"max"`, `"countDistinct"`
|
||||
groupInterval (날짜 필드): `"year"`, `"quarter"`, `"month"`, `"week"`, `"day"`
|
||||
|
||||
#### v2-text-display
|
||||
|
||||
라벨, 제목, 설명 텍스트 표시.
|
||||
|
||||
| 설정 | 타입 | 설명 |
|
||||
|------|------|------|
|
||||
| fontSize | string | 폰트 크기 |
|
||||
| fontWeight | string | 폰트 두께 |
|
||||
| color | string | 텍스트 색상 |
|
||||
| textAlign | string | 정렬 |
|
||||
|
||||
#### v2-card-display
|
||||
|
||||
테이블 데이터를 카드 형태로 표시.
|
||||
|
||||
| 설정 | 타입 | 설명 | 값 |
|
||||
|------|------|------|----|
|
||||
| dataSource | string | 데이터 소스 | `"table"`, `"static"`, `"api"` |
|
||||
| cardsPerRow | number | 행당 카드 수 | 1~6 |
|
||||
| columnMapping | object | 필드 매핑 | `{ title, subtitle, description, image, status }` |
|
||||
| cardStyle | object | 카드 스타일 | `{ imagePosition, imageSize }` |
|
||||
|
||||
#### v2-aggregation-widget
|
||||
|
||||
합계, 평균, 개수, 최대, 최소 등 집계 카드 표시.
|
||||
|
||||
| 설정 | 타입 | 설명 |
|
||||
|------|------|------|
|
||||
| items | array | 집계 항목 배열 (테이블, 컬럼, 집계함수) |
|
||||
| filters | array | 필터 조건 |
|
||||
| layout | string | 레이아웃 (horizontal/vertical) |
|
||||
|
||||
#### v2-status-count
|
||||
|
||||
상태별 건수를 카드 형태로 표시. 대시보드/현황 화면에 적합.
|
||||
|
||||
#### v2-numbering-rule
|
||||
|
||||
자동 코드/번호 채번. 접두사 + 날짜 + 순번 조합.
|
||||
|
||||
| 설정 | 타입 | 설명 |
|
||||
|------|------|------|
|
||||
| rule | string | 채번 규칙 |
|
||||
| prefix | string | 접두사 |
|
||||
| format | string | 포맷 |
|
||||
|
||||
#### v2-category-manager
|
||||
|
||||
트리 기반 카테고리 관리 (3단계 계층). 카테고리 생성/수정/삭제/이동.
|
||||
|
||||
---
|
||||
|
||||
### 1.3 레이아웃 컴포넌트
|
||||
|
||||
#### v2-split-panel-layout
|
||||
|
||||
**가장 복잡하고 중요한 컴포넌트**. 마스터-디테일 좌우 분할 레이아웃.
|
||||
|
||||
| 설정 | 타입 | 설명 | 값 |
|
||||
|------|------|------|----|
|
||||
| splitRatio | number | 좌측 비율 (0-100) | 기본 30 |
|
||||
| resizable | boolean | 리사이즈 가능 | true/false |
|
||||
| minLeftWidth | number | 좌측 최소 너비 | 기본 200 |
|
||||
| minRightWidth | number | 우측 최소 너비 | 기본 300 |
|
||||
| syncSelection | boolean | 선택 동기화 | true/false |
|
||||
| autoLoad | boolean | 자동 로드 | true/false |
|
||||
|
||||
**leftPanel / rightPanel 구조**:
|
||||
|
||||
```json
|
||||
{
|
||||
"leftPanel": {
|
||||
"displayMode": "table",
|
||||
"tableName": "master_table",
|
||||
"columns": [],
|
||||
"showSearch": true,
|
||||
"showAdd": true,
|
||||
"showEdit": true,
|
||||
"showDelete": true,
|
||||
"addButton": {
|
||||
"enabled": true,
|
||||
"mode": "auto",
|
||||
"modalScreenId": ""
|
||||
},
|
||||
"editButton": {
|
||||
"enabled": true,
|
||||
"mode": "auto",
|
||||
"modalScreenId": ""
|
||||
},
|
||||
"deleteButton": {
|
||||
"enabled": true,
|
||||
"buttonLabel": "삭제",
|
||||
"confirmMessage": "삭제하시겠습니까?"
|
||||
},
|
||||
"addModalColumns": [],
|
||||
"additionalTabs": [],
|
||||
"dataFilter": {}
|
||||
},
|
||||
"rightPanel": {
|
||||
"displayMode": "table",
|
||||
"tableName": "detail_table",
|
||||
"relation": {
|
||||
"type": "detail",
|
||||
"foreignKey": "master_id",
|
||||
"leftColumn": "id",
|
||||
"rightColumn": "master_id",
|
||||
"keys": []
|
||||
},
|
||||
"addButton": { "enabled": true },
|
||||
"editButton": { "enabled": true },
|
||||
"deleteButton": { "enabled": true },
|
||||
"additionalTabs": []
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**displayMode 종류**:
|
||||
- `"list"`: 리스트 형태 (제목, 부제목)
|
||||
- `"table"`: 테이블 형태 (컬럼, 행)
|
||||
- `"custom"`: 자유 배치 (components 배열로 내부 컴포넌트 배치)
|
||||
|
||||
**relation.type 종류**:
|
||||
- `"join"`: 두 테이블 JOIN
|
||||
- `"detail"`: 마스터 PK → 디테일 FK 관계
|
||||
- `"custom"`: 커스텀 관계 (leftColumn, rightColumn 직접 지정)
|
||||
|
||||
**additionalTabs** (우측 패널에 멀티 탭 배치):
|
||||
|
||||
```json
|
||||
{
|
||||
"additionalTabs": [
|
||||
{
|
||||
"id": "tab1",
|
||||
"label": "기본정보",
|
||||
"tableName": "detail_basic",
|
||||
"relation": { "type": "detail", "foreignKey": "master_id" }
|
||||
},
|
||||
{
|
||||
"id": "tab2",
|
||||
"label": "이력",
|
||||
"tableName": "detail_history",
|
||||
"relation": { "type": "detail", "foreignKey": "master_id" }
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
#### v2-tabs-widget
|
||||
|
||||
탭 전환 레이아웃. 탭 내부에 컴포넌트를 배치할 수 있음.
|
||||
|
||||
| 설정 | 타입 | 설명 | 값 |
|
||||
|------|------|------|----|
|
||||
| tabs | array | **필수**. 탭 배열 | `[{ id, label, order, disabled, components }]` |
|
||||
| defaultTab | string | 기본 활성 탭 ID | - |
|
||||
| orientation | string | 탭 방향 | `"horizontal"`, `"vertical"` |
|
||||
| persistSelection | boolean | 선택 유지 | true/false |
|
||||
|
||||
**tabs 항목 구조**:
|
||||
|
||||
```json
|
||||
{
|
||||
"id": "tab-basic",
|
||||
"label": "기본정보",
|
||||
"order": 0,
|
||||
"disabled": false,
|
||||
"components": [
|
||||
{
|
||||
"id": "tbl-basic",
|
||||
"componentType": "v2-table-list",
|
||||
"label": "기본정보",
|
||||
"position": { "x": 0, "y": 0 },
|
||||
"size": { "width": 800, "height": 400 },
|
||||
"componentConfig": { "selectedTable": "basic_info" }
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
#### v2-section-card
|
||||
|
||||
제목+테두리가 있는 그룹화 컨테이너. 폼 필드를 묶을 때 사용.
|
||||
|
||||
| 설정 | 타입 | 설명 |
|
||||
|------|------|------|
|
||||
| title | string | 섹션 제목 |
|
||||
| collapsible | boolean | 접기/펼치기 가능 |
|
||||
| padding | string | 내부 여백 |
|
||||
|
||||
#### v2-section-paper
|
||||
|
||||
배경색 기반 미니멀 그룹화 컨테이너.
|
||||
|
||||
#### v2-divider-line
|
||||
|
||||
영역 구분선 (가로/세로).
|
||||
|
||||
#### v2-split-line
|
||||
|
||||
캔버스 화면에서 좌우 영역을 분할하는 드래그 가능한 세로선. 디자이너 모드에서 사용.
|
||||
|
||||
#### v2-repeat-container
|
||||
|
||||
데이터 수만큼 내부 컴포넌트를 반복 렌더링.
|
||||
|
||||
| 설정 | 타입 | 설명 | 값 |
|
||||
|------|------|------|----|
|
||||
| dataSourceType | string | 데이터 소스 | `"table"`, `"api"`, `"static"` |
|
||||
| layout | string | 레이아웃 | `"vertical"`, `"horizontal"`, `"grid"` |
|
||||
| gridColumns | number | 그리드 열 수 | 1~12 |
|
||||
|
||||
#### v2-repeater
|
||||
|
||||
인라인/모달/버튼 모드로 반복 데이터를 관리하는 컴포넌트. 주문 상세, 항목 리스트 등.
|
||||
|
||||
| 설정 | 타입 | 설명 | 값 |
|
||||
|------|------|------|----|
|
||||
| mode | string | 동작 모드 | `"inline"` (인라인 편집), `"modal"` (모달 팝업), `"button"` (버튼 트리거) |
|
||||
|
||||
---
|
||||
|
||||
### 1.4 특수/비즈니스 컴포넌트
|
||||
|
||||
#### v2-button-primary
|
||||
|
||||
저장, 삭제, 조회 등 액션 버튼. 제어관리(dataflow)와 연결 가능.
|
||||
|
||||
| 설정 | 타입 | 설명 | 값 |
|
||||
|------|------|------|----|
|
||||
| text | string | 버튼 텍스트 | 예: `"저장"`, `"삭제"` |
|
||||
| actionType | string | 액션 유형 | `"save"`, `"delete"`, `"search"`, `"custom"` |
|
||||
| variant | string | 스타일 | `"default"`, `"outline"`, `"destructive"`, `"ghost"` |
|
||||
|
||||
**제어관리 연결** (webTypeConfig.dataflowConfig):
|
||||
|
||||
```json
|
||||
{
|
||||
"webTypeConfig": {
|
||||
"enableDataflowControl": true,
|
||||
"dataflowConfig": {
|
||||
"controlMode": "relationship",
|
||||
"relationshipConfig": {
|
||||
"relationshipId": "rel_001",
|
||||
"relationshipName": "수주확정",
|
||||
"executionTiming": "after"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
executionTiming 값:
|
||||
- `"before"`: 메인 액션 전에 제어 실행 (조건 체크용)
|
||||
- `"after"`: 메인 액션 후에 제어 실행 (후처리용)
|
||||
- `"replace"`: 메인 액션 대신 제어만 실행
|
||||
|
||||
#### v2-timeline-scheduler
|
||||
|
||||
간트차트형 일정/계획 시각화. 드래그/리사이즈로 일정 변경 가능.
|
||||
|
||||
| 설정 | 타입 | 설명 | 값 |
|
||||
|------|------|------|----|
|
||||
| selectedTable | string | 스케줄 테이블명 | - |
|
||||
| resourceTable | string | 리소스 테이블명 (설비/작업자) | - |
|
||||
| fieldMapping | object | 필드 매핑 | `{ id, resourceId, title, startDate, endDate, status, progress }` |
|
||||
| resourceFieldMapping | object | 리소스 필드 매핑 | `{ id, name, group }` |
|
||||
| defaultZoomLevel | string | 초기 줌 | `"day"`, `"week"`, `"month"` |
|
||||
| editable | boolean | 편집 가능 | true/false |
|
||||
| allowDrag | boolean | 드래그 이동 허용 | true/false |
|
||||
| allowResize | boolean | 리사이즈 허용 | true/false |
|
||||
|
||||
#### v2-approval-step
|
||||
|
||||
결재 단계 스테퍼 시각화. 결재 프로세스의 진행 상태를 단계별로 표시.
|
||||
|
||||
#### v2-bom-tree
|
||||
|
||||
BOM(Bill of Materials) 계층 트리 표시. 정전개(상위→하위)/역전개(하위→상위) 전환 가능.
|
||||
|
||||
#### v2-bom-item-editor
|
||||
|
||||
BOM 하위품목 트리 편집. 하위 부품 추가/수정/삭제/수량 변경 등.
|
||||
|
||||
---
|
||||
|
||||
## 2. 화면 패턴별 상세 구현 가이드
|
||||
|
||||
### 2.1 패턴 A: 기본 마스터 (검색 + 테이블)
|
||||
|
||||
**적용 조건**: 단일 테이블 CRUD. 마스터-디테일 관계 없음.
|
||||
|
||||
**layout_data 예시**:
|
||||
|
||||
```json
|
||||
{
|
||||
"version": "2.0",
|
||||
"components": [
|
||||
{
|
||||
"id": "search_widget",
|
||||
"url": "@/lib/registry/components/v2-table-search-widget",
|
||||
"position": { "x": 0, "y": 0, "z": 1 },
|
||||
"size": { "width": 1920, "height": 100 },
|
||||
"displayOrder": 0,
|
||||
"overrides": {
|
||||
"label": "검색",
|
||||
"autoSelectFirstTable": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "table_list",
|
||||
"url": "@/lib/registry/components/v2-table-list",
|
||||
"position": { "x": 0, "y": 120, "z": 1 },
|
||||
"size": { "width": 1920, "height": 700 },
|
||||
"displayOrder": 1,
|
||||
"overrides": {
|
||||
"label": "품목 목록",
|
||||
"tableName": "item_info",
|
||||
"columns": [
|
||||
{ "columnName": "item_code", "displayName": "품목코드", "visible": true, "sortable": true, "width": 120 },
|
||||
{ "columnName": "item_name", "displayName": "품목명", "visible": true, "sortable": true, "width": 200 },
|
||||
{ "columnName": "item_type", "displayName": "품목유형", "visible": true, "width": 100 },
|
||||
{ "columnName": "unit", "displayName": "단위", "visible": true, "width": 80 }
|
||||
],
|
||||
"pagination": { "enabled": true, "pageSize": 20 },
|
||||
"checkbox": { "enabled": true, "multiple": true }
|
||||
}
|
||||
}
|
||||
],
|
||||
"gridSettings": { "columns": 12, "gap": 16, "padding": 16 },
|
||||
"screenResolution": { "width": 1920, "height": 1080 }
|
||||
}
|
||||
```
|
||||
|
||||
### 2.2 패턴 B: 마스터-디테일 (좌우 분할)
|
||||
|
||||
**적용 조건**: 마스터 테이블 선택 시 연관 디테일 테이블 표시. 두 테이블 간 FK 관계 존재.
|
||||
|
||||
**layout_data 예시**:
|
||||
|
||||
```json
|
||||
{
|
||||
"version": "2.0",
|
||||
"components": [
|
||||
{
|
||||
"id": "split_panel",
|
||||
"url": "@/lib/registry/components/v2-split-panel-layout",
|
||||
"position": { "x": 0, "y": 0, "z": 1 },
|
||||
"size": { "width": 1920, "height": 800 },
|
||||
"displayOrder": 0,
|
||||
"overrides": {
|
||||
"label": "수주관리",
|
||||
"splitRatio": 35,
|
||||
"resizable": true,
|
||||
"leftPanel": {
|
||||
"displayMode": "table",
|
||||
"tableName": "order_master",
|
||||
"columns": [
|
||||
{ "columnName": "order_no", "displayName": "수주번호", "visible": true, "width": 120 },
|
||||
{ "columnName": "customer_name", "displayName": "거래처", "visible": true, "width": 150 },
|
||||
{ "columnName": "order_date", "displayName": "수주일자", "visible": true, "width": 100 },
|
||||
{ "columnName": "status", "displayName": "상태", "visible": true, "width": 80 }
|
||||
],
|
||||
"showSearch": true,
|
||||
"showAdd": true,
|
||||
"showDelete": true,
|
||||
"addButton": { "enabled": true, "mode": "auto" },
|
||||
"deleteButton": { "enabled": true, "confirmMessage": "삭제하시겠습니까?" }
|
||||
},
|
||||
"rightPanel": {
|
||||
"displayMode": "table",
|
||||
"tableName": "order_detail",
|
||||
"relation": {
|
||||
"type": "detail",
|
||||
"foreignKey": "order_master_id",
|
||||
"leftColumn": "id",
|
||||
"rightColumn": "order_master_id"
|
||||
},
|
||||
"columns": [
|
||||
{ "columnName": "item_code", "displayName": "품목코드", "visible": true, "width": 120 },
|
||||
{ "columnName": "item_name", "displayName": "품목명", "visible": true, "width": 150 },
|
||||
{ "columnName": "quantity", "displayName": "수량", "visible": true, "width": 80, "editable": true },
|
||||
{ "columnName": "unit_price", "displayName": "단가", "visible": true, "width": 100, "editable": true }
|
||||
],
|
||||
"addButton": { "enabled": true },
|
||||
"deleteButton": { "enabled": true }
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"gridSettings": { "columns": 12, "gap": 16, "padding": 16 },
|
||||
"screenResolution": { "width": 1920, "height": 1080 }
|
||||
}
|
||||
```
|
||||
|
||||
### 2.3 패턴 C: 마스터-디테일 + 탭
|
||||
|
||||
**적용 조건**: 마스터-디테일에서 우측에 여러 종류의 상세 정보를 탭으로 분리.
|
||||
|
||||
**차이점**: rightPanel에 `additionalTabs` 배열 추가.
|
||||
|
||||
```json
|
||||
{
|
||||
"rightPanel": {
|
||||
"displayMode": "table",
|
||||
"tableName": "customer_basic",
|
||||
"relation": {
|
||||
"type": "detail",
|
||||
"foreignKey": "customer_id"
|
||||
},
|
||||
"additionalTabs": [
|
||||
{
|
||||
"id": "tab-basic",
|
||||
"label": "기본정보",
|
||||
"tableName": "customer_basic",
|
||||
"relation": { "type": "detail", "foreignKey": "customer_id" }
|
||||
},
|
||||
{
|
||||
"id": "tab-history",
|
||||
"label": "거래이력",
|
||||
"tableName": "customer_history",
|
||||
"relation": { "type": "detail", "foreignKey": "customer_id" }
|
||||
},
|
||||
{
|
||||
"id": "tab-files",
|
||||
"label": "첨부파일",
|
||||
"tableName": "customer_files",
|
||||
"relation": { "type": "detail", "foreignKey": "customer_id" }
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. 제어관리 (비즈니스 로직) 설정
|
||||
|
||||
### 3.1 개요
|
||||
|
||||
V2 컴포넌트는 **UI만 담당**한다. 버튼 클릭 시 실행되는 비즈니스 로직(INSERT/UPDATE/DELETE, 조건 체크, 외부 호출 등)은 `dataflow_diagrams` 테이블에서 별도 설정한다.
|
||||
|
||||
### 3.2 설정 위치
|
||||
|
||||
| 구분 | 저장 위치 | 용도 |
|
||||
|------|----------|------|
|
||||
| 버튼-제어 연결 | `screen_layouts_v2` → 컴포넌트 `webTypeConfig.dataflowConfig` | 어떤 버튼이 어떤 제어를 실행하는지 |
|
||||
| 제어 정의 | `dataflow_diagrams` → `control`, `plan` JSONB | 조건, 액션, 필드 매핑 |
|
||||
| 노드 플로우 | `node_flows` → `flow_data` JSONB | 복잡한 다단계 플로우 |
|
||||
|
||||
### 3.3 실행 흐름
|
||||
|
||||
```
|
||||
[버튼 클릭] v2-button-primary
|
||||
│
|
||||
▼
|
||||
[설정 확인] webTypeConfig.dataflowConfig
|
||||
│
|
||||
├─ controlMode: "relationship" → dataflow_diagrams 실행
|
||||
├─ controlMode: "flow" → node_flows 실행
|
||||
└─ controlMode: "none" → 기본 액션만 실행
|
||||
│
|
||||
▼
|
||||
[실행기] ImprovedButtonActionExecutor
|
||||
│
|
||||
├─ 1. Before 제어 (executionTiming = "before")
|
||||
│ └─ 조건 체크 → 실패 시 중단
|
||||
│
|
||||
├─ 2. Main 액션 (executionTiming ≠ "replace"일 때)
|
||||
│ └─ save / delete / update 실행
|
||||
│
|
||||
└─ 3. After 제어 (executionTiming = "after")
|
||||
└─ 후처리 (이력 저장, 상태 변경, 외부 호출 등)
|
||||
```
|
||||
|
||||
### 3.4 dataflow_diagrams 설정 예시
|
||||
|
||||
**시나리오**: 수주 목록에서 [확정] 버튼 클릭 → 상태를 '확정'으로 변경 + 이력 테이블에 기록
|
||||
|
||||
```json
|
||||
{
|
||||
"control": [
|
||||
{
|
||||
"conditions": [
|
||||
{ "field": "status", "operator": "=", "value": "대기", "dataType": "string" }
|
||||
],
|
||||
"triggerType": "update"
|
||||
}
|
||||
],
|
||||
"plan": [
|
||||
{
|
||||
"actions": [
|
||||
{
|
||||
"actionType": "update",
|
||||
"targetTable": "order_master",
|
||||
"conditions": [
|
||||
{ "field": "status", "operator": "=", "value": "대기" }
|
||||
],
|
||||
"fieldMappings": [
|
||||
{ "targetField": "status", "defaultValue": "확정" }
|
||||
]
|
||||
},
|
||||
{
|
||||
"actionType": "insert",
|
||||
"targetTable": "order_history",
|
||||
"fieldMappings": [
|
||||
{ "sourceField": "order_no", "targetField": "order_no" },
|
||||
{ "sourceField": "customer_name", "targetField": "customer_name" },
|
||||
{ "targetField": "action", "defaultValue": "확정" }
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. 화면 개발 체크리스트 (AI 에이전트용)
|
||||
|
||||
화면 개발 요청을 받았을 때 이 순서대로 확인한다.
|
||||
|
||||
### Step 1: 요구사항 분석
|
||||
|
||||
```
|
||||
□ 어떤 테이블을 사용하는가? (메인 테이블, 디테일 테이블)
|
||||
□ 테이블 간 관계는? (FK, 1:N, M:N)
|
||||
□ 어떤 패턴인가? (A~G 중 선택, 의사결정 트리 참조)
|
||||
□ 어떤 버튼이 필요한가? (저장, 삭제, 확정 등)
|
||||
□ 비즈니스 로직이 있는가? (상태 변경, 이력 기록, 외부 호출 등)
|
||||
```
|
||||
|
||||
### Step 2: DB 테이블 생성
|
||||
|
||||
```
|
||||
□ 모든 컬럼 VARCHAR(500)
|
||||
□ 기본 5개 컬럼 포함 (id, created_date, updated_date, writer, company_code)
|
||||
□ table_labels, table_type_columns, column_labels 메타데이터 등록
|
||||
□ company_code 인덱스 생성
|
||||
```
|
||||
|
||||
### Step 3: screen_definitions INSERT
|
||||
|
||||
```sql
|
||||
INSERT INTO screen_definitions (screen_name, screen_code, table_name, company_code, is_active)
|
||||
VALUES ('화면명', '{company_code}_순번', '메인_테이블', '{company_code}', 'Y');
|
||||
```
|
||||
|
||||
### Step 4: screen_layouts_v2 INSERT
|
||||
|
||||
```sql
|
||||
INSERT INTO screen_layouts_v2 (screen_id, company_code, layer_id, layout_data)
|
||||
VALUES ({screen_id}, '{company_code}', 1, '{패턴별 JSON}');
|
||||
```
|
||||
|
||||
### Step 5: dataflow_diagrams INSERT (비즈니스 로직 필요 시)
|
||||
|
||||
```
|
||||
□ 버튼별 액션 정의
|
||||
□ 조건 설정 (어떤 상태일 때만 실행)
|
||||
□ 필드 매핑 (소스→타겟)
|
||||
□ 실행 타이밍 (before/after/replace)
|
||||
```
|
||||
|
||||
### Step 6: menu_info INSERT
|
||||
|
||||
```sql
|
||||
INSERT INTO menu_info (screen_id, menu_url, company_code, ...)
|
||||
VALUES ({screen_id}, '/screen/{screen_code}', '{company_code}', ...);
|
||||
```
|
||||
|
||||
### Step 7: 멀티테넌시 검증
|
||||
|
||||
```
|
||||
□ 테이블에 company_code 컬럼 존재
|
||||
□ 모든 SELECT에 company_code 필터링
|
||||
□ INSERT에 company_code 포함
|
||||
□ UPDATE/DELETE WHERE절에 company_code 포함
|
||||
□ JOIN에 company_code 매칭
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. 자주 묻는 질문 (FAQ)
|
||||
|
||||
### Q: v2-table-list와 v2-table-grouped 중 어떤 걸 써야 하나?
|
||||
|
||||
**A**: 데이터를 특정 컬럼 기준으로 묶어서 접기/펼치기가 필요하면 `v2-table-grouped`, 아니면 `v2-table-list`. 예를 들어 "카테고리별 품목 목록"은 `v2-table-grouped`, "품목 전체 목록"은 `v2-table-list`.
|
||||
|
||||
### Q: 마스터-디테일에서 탭을 사용하고 싶은데?
|
||||
|
||||
**A**: `v2-split-panel-layout`의 rightPanel에 `additionalTabs` 배열을 설정한다. 별도의 `v2-tabs-widget`을 배치할 필요 없다.
|
||||
|
||||
### Q: BOM 화면은 어떻게 만드나?
|
||||
|
||||
**A**: `v2-split-panel-layout`의 좌측에 `v2-bom-tree` (또는 `v2-table-list`), 우측에 `v2-bom-item-editor`를 배치한다. 트리 컴포넌트가 자체적으로 정전개/역전개를 지원한다.
|
||||
|
||||
### Q: 버튼 클릭 시 특정 로직을 실행하고 싶은데?
|
||||
|
||||
**A**: `v2-button-primary`의 `webTypeConfig.dataflowConfig`에 제어관리를 연결한다. `dataflow_diagrams` 테이블에 실행할 액션(INSERT/UPDATE/DELETE)과 조건을 정의한다.
|
||||
|
||||
### Q: 검색 기능은 어떻게 추가하나?
|
||||
|
||||
**A**: `v2-table-search-widget`을 `v2-table-list` 위에 배치한다. `autoSelectFirstTable: true`로 설정하면 자동으로 화면의 첫 번째 테이블과 연동된다.
|
||||
|
||||
### Q: 파일 업로드는?
|
||||
|
||||
**A**: `v2-file-upload` 컴포넌트를 사용한다. 폼 내 배치하여 파일/이미지 업로드를 처리한다.
|
||||
|
||||
### Q: 결재 프로세스를 표시하고 싶은데?
|
||||
|
||||
**A**: `v2-approval-step` 컴포넌트를 사용한다. 결재 단계를 스테퍼 형태로 시각화한다.
|
||||
|
||||
### Q: 인라인 편집이 가능한가?
|
||||
|
||||
**A**: `v2-table-list`의 columns에서 `editable: true`로 설정하면 해당 컬럼의 셀을 직접 편집할 수 있다. 단, 복잡한 편집은 모달 편집(`v2-split-panel-layout`의 editButton.mode = "modal")을 권장한다.
|
||||
|
||||
### Q: 화면에 집계(합계, 평균 등)를 표시하고 싶은데?
|
||||
|
||||
**A**: `v2-aggregation-widget`을 사용하여 테이블 데이터의 합계, 평균, 개수 등을 카드 형태로 표시한다. 또는 `v2-status-count`로 상태별 건수를 표시한다.
|
||||
|
||||
---
|
||||
|
||||
## 6. 컴포넌트 선택 빠른 참조표
|
||||
|
||||
| 요구사항 | 컴포넌트 |
|
||||
|----------|----------|
|
||||
| 데이터 목록 보기 | `v2-table-list` |
|
||||
| 데이터 검색/필터 | `v2-table-search-widget` |
|
||||
| 좌우 분할 (마스터-디테일) | `v2-split-panel-layout` |
|
||||
| 그룹별 묶기 (접기/펼치기) | `v2-table-grouped` |
|
||||
| 탭 전환 | `v2-tabs-widget` 또는 `v2-split-panel-layout`의 additionalTabs |
|
||||
| 카드 형태 보기 | `v2-card-display` |
|
||||
| 피벗/집계 분석 | `v2-pivot-grid` |
|
||||
| 간트차트/일정 | `v2-timeline-scheduler` |
|
||||
| BOM 트리 | `v2-bom-tree` + `v2-bom-item-editor` |
|
||||
| 텍스트 입력 | `v2-input` |
|
||||
| 선택 (드롭다운 등) | `v2-select` |
|
||||
| 날짜 입력 | `v2-date` |
|
||||
| 파일 업로드 | `v2-file-upload` |
|
||||
| 액션 버튼 | `v2-button-primary` |
|
||||
| 자동 채번 | `v2-numbering-rule` |
|
||||
| 카테고리 관리 | `v2-category-manager` |
|
||||
| 결재 단계 표시 | `v2-approval-step` |
|
||||
| 상태별 건수 | `v2-status-count` |
|
||||
| 합계/평균 카드 | `v2-aggregation-widget` |
|
||||
| 구분선 | `v2-divider-line` |
|
||||
| 그룹 컨테이너 | `v2-section-card` 또는 `v2-section-paper` |
|
||||
| 데이터 반복 | `v2-repeat-container` 또는 `v2-repeater` |
|
||||
| 공정 작업기준 | `v2-process-work-standard` |
|
||||
| 품목 라우팅 | `v2-item-routing` |
|
||||
| 미디어 표시 | `v2-media` |
|
||||
| 랙 구조 | `v2-rack-structure` |
|
||||
| 위치 교환 | `v2-location-swap-selector` |
|
||||
|
|
@ -0,0 +1,952 @@
|
|||
# WACE 화면 시스템 - DB 스키마 & 컴포넌트 설정 전체 레퍼런스
|
||||
|
||||
> **최종 업데이트**: 2026-03-13
|
||||
> **용도**: AI 챗봇이 화면 생성 시 참조하는 DB 스키마, 컴포넌트 전체 설정 사전
|
||||
> **관련 문서**: `v2-component-usage-guide.md` (SQL 템플릿, 실행 예시)
|
||||
|
||||
---
|
||||
|
||||
## 1. 시스템 아키텍처
|
||||
|
||||
### 렌더링 파이프라인
|
||||
|
||||
```
|
||||
[DB] screen_definitions + screen_layouts_v2
|
||||
→ [Backend API] GET /api/screens/:screenId
|
||||
→ [layoutV2Converter] V2 JSON → Legacy 변환 (기본값 + overrides 병합)
|
||||
→ [ResponsiveGridRenderer] → DynamicComponentRenderer
|
||||
→ [ComponentRegistry] → 실제 React 컴포넌트
|
||||
```
|
||||
|
||||
### 테이블 관계도
|
||||
|
||||
```
|
||||
비즈니스 테이블 ←── table_labels (라벨)
|
||||
←── table_type_columns (컬럼 타입, company_code='*')
|
||||
←── column_labels (한글 라벨)
|
||||
|
||||
screen_definitions ←── screen_layouts_v2 (layout_data JSON)
|
||||
menu_info (메뉴 트리, menu_url → /screen/{screen_code})
|
||||
|
||||
[선택] dataflow_diagrams (비즈니스 로직)
|
||||
[선택] numbering_rules + numbering_rule_parts (채번)
|
||||
[선택] table_column_category_values (카테고리)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2. DB 테이블 스키마
|
||||
|
||||
### 2.1 비즈니스 테이블 필수 구조
|
||||
|
||||
> **[최우선 규칙] 비즈니스 테이블에 NOT NULL / UNIQUE 제약조건 절대 금지!**
|
||||
>
|
||||
> 멀티테넌시 환경에서 회사별로 필수값/유니크 규칙이 다를 수 있으므로,
|
||||
> 제약조건은 DB 레벨이 아닌 **`table_type_columns`의 메타데이터(`is_nullable`, `is_unique`)로 논리적 제어**한다.
|
||||
> DB에 직접 NOT NULL/UNIQUE/CHECK/FOREIGN KEY를 걸면 멀티테넌시가 깨진다.
|
||||
>
|
||||
> **허용**: `id` PRIMARY KEY, `DEFAULT` 값만 DB 레벨 설정
|
||||
> **금지**: 비즈니스 컬럼에 `NOT NULL`, `UNIQUE`, `CHECK`, `FOREIGN KEY`
|
||||
|
||||
```sql
|
||||
CREATE TABLE "{테이블명}" (
|
||||
"id" varchar(500) PRIMARY KEY DEFAULT gen_random_uuid()::text,
|
||||
"created_date" timestamp DEFAULT now(),
|
||||
"updated_date" timestamp DEFAULT now(),
|
||||
"writer" varchar(500) DEFAULT NULL,
|
||||
"company_code" varchar(500),
|
||||
-- 모든 비즈니스 컬럼은 varchar(500), NOT NULL/UNIQUE 제약조건 금지
|
||||
);
|
||||
```
|
||||
|
||||
### 2.2 table_labels
|
||||
|
||||
| 컬럼 | 타입 | 설명 |
|
||||
|------|------|------|
|
||||
| table_name | varchar PK | 테이블명 |
|
||||
| table_label | varchar | 한글 라벨 |
|
||||
| description | text | 설명 |
|
||||
| use_log_table | varchar(1) | 'Y'/'N' |
|
||||
|
||||
### 2.3 table_type_columns
|
||||
|
||||
| 컬럼 | 타입 | 설명 |
|
||||
|------|------|------|
|
||||
| id | serial PK | 자동 증가 |
|
||||
| table_name | varchar | UNIQUE(+column_name+company_code) |
|
||||
| column_name | varchar | 컬럼명 |
|
||||
| company_code | varchar | `'*'` = 전체 공통 |
|
||||
| input_type | varchar | text/number/date/code/entity/select/checkbox/radio/textarea/category/numbering |
|
||||
| detail_settings | text | JSON (code/entity/select 상세) |
|
||||
| is_nullable | varchar | `'Y'`/`'N'` (논리적 필수값 제어) |
|
||||
| display_order | integer | -5~-1: 기본, 0~: 비즈니스 |
|
||||
| column_label | varchar | 컬럼 한글 라벨 |
|
||||
| description | text | 컬럼 설명 |
|
||||
| is_visible | boolean | 화면 표시 여부 (기본 true) |
|
||||
| code_category | varchar | input_type=code일 때 코드 카테고리 |
|
||||
| code_value | varchar | 코드 값 |
|
||||
| reference_table | varchar | input_type=entity일 때 참조 테이블 |
|
||||
| reference_column | varchar | 참조 컬럼 |
|
||||
| display_column | varchar | 참조 표시 컬럼 |
|
||||
| is_unique | varchar | `'Y'`/`'N'` (논리적 유니크 제어) |
|
||||
| category_ref | varchar | 카테고리 참조 |
|
||||
|
||||
### 2.4 screen_definitions
|
||||
|
||||
| 컬럼 | 타입 | 설명 |
|
||||
|------|------|------|
|
||||
| screen_id | serial PK | 자동 증가 |
|
||||
| screen_name | varchar NOT NULL | 화면명 |
|
||||
| screen_code | varchar | **조건부 UNIQUE** (`WHERE is_active <> 'D'`) |
|
||||
| table_name | varchar | 메인 테이블명 |
|
||||
| company_code | varchar NOT NULL | 회사 코드 |
|
||||
| description | text | 화면 설명 |
|
||||
| is_active | char(1) | `'Y'`/`'N'`/`'D'` (D=삭제) |
|
||||
| layout_metadata | jsonb | 레이아웃 메타데이터 |
|
||||
| created_date | timestamp | 생성일시 |
|
||||
| created_by | varchar | 생성자 |
|
||||
| updated_date | timestamp | 수정일시 |
|
||||
| updated_by | varchar | 수정자 |
|
||||
| deleted_date | timestamp | 삭제일시 |
|
||||
| deleted_by | varchar | 삭제자 |
|
||||
| delete_reason | text | 삭제 사유 |
|
||||
| db_source_type | varchar | `'internal'` (기본) / `'external'` |
|
||||
| db_connection_id | integer | 외부 DB 연결 ID |
|
||||
| data_source_type | varchar | `'database'` (기본) / `'rest_api'` |
|
||||
| rest_api_connection_id | integer | REST API 연결 ID |
|
||||
| rest_api_endpoint | varchar | REST API 엔드포인트 |
|
||||
| rest_api_json_path | varchar | JSON 응답 경로 (기본 `'data'`) |
|
||||
| source_screen_id | integer | 원본 화면 ID (복사본일 때) |
|
||||
|
||||
> **screen_code UNIQUE 주의**: `is_active = 'D'`(삭제)인 화면은 UNIQUE 대상에서 제외된다. 삭제된 화면과 같은 코드로 새 화면을 만들 수 있지만, 활성 상태(`'Y'`/`'N'`)에서는 중복 불가.
|
||||
|
||||
### 2.5 screen_layouts_v2
|
||||
|
||||
| 컬럼 | 타입 | 설명 |
|
||||
|------|------|------|
|
||||
| layout_id | serial PK | 자동 증가 |
|
||||
| screen_id | integer FK | UNIQUE(+company_code+layer_id) |
|
||||
| company_code | varchar NOT NULL | 회사 코드 |
|
||||
| layout_data | jsonb NOT NULL | 전체 레이아웃 JSON (기본 `'{}'`) |
|
||||
| created_at | timestamptz | 생성일시 |
|
||||
| updated_at | timestamptz | 수정일시 |
|
||||
| layer_id | integer | 1=기본 레이어 (기본값 1) |
|
||||
| layer_name | varchar | 레이어명 (기본 `'기본 레이어'`) |
|
||||
| condition_config | jsonb | 레이어 조건부 표시 설정 |
|
||||
|
||||
### 2.6 menu_info
|
||||
|
||||
| 컬럼 | 타입 | 설명 |
|
||||
|------|------|------|
|
||||
| objid | numeric PK | BIGINT 고유값 |
|
||||
| menu_type | numeric | 0=화면, 1=폴더 |
|
||||
| parent_obj_id | numeric | 부모 메뉴 objid |
|
||||
| menu_name_kor | varchar | 메뉴명 (한글) |
|
||||
| menu_name_eng | varchar | 메뉴명 (영문) |
|
||||
| seq | numeric | 정렬 순서 |
|
||||
| menu_url | varchar | `/screen/{screen_code}` |
|
||||
| menu_desc | varchar | 메뉴 설명 |
|
||||
| writer | varchar | 작성자 |
|
||||
| regdate | timestamp | 등록일시 |
|
||||
| status | varchar | 상태 (`'active'` 등) |
|
||||
| company_code | varchar | 회사 코드 (기본 `'*'`) |
|
||||
| screen_code | varchar | 연결 화면 코드 |
|
||||
| system_name | varchar | 시스템명 |
|
||||
| lang_key | varchar | 다국어 키 |
|
||||
| lang_key_desc | varchar | 다국어 설명 키 |
|
||||
| menu_code | varchar | 메뉴 코드 |
|
||||
| source_menu_objid | bigint | 원본 메뉴 objid (복사본일 때) |
|
||||
| screen_group_id | integer | 화면 그룹 ID |
|
||||
| menu_icon | varchar | 메뉴 아이콘 |
|
||||
|
||||
---
|
||||
|
||||
## 3. 컴포넌트 전체 설정 레퍼런스 (32개)
|
||||
|
||||
> 아래 설정은 layout_data JSON의 각 컴포넌트 `overrides` 안에 들어가는 값이다.
|
||||
> 기본값과 다른 부분만 overrides에 지정하면 된다.
|
||||
|
||||
---
|
||||
|
||||
### 3.1 v2-table-list (데이터 테이블)
|
||||
|
||||
**용도**: DB 테이블 데이터를 테이블/카드 형태로 조회/편집. 가장 핵심적인 컴포넌트.
|
||||
|
||||
| 설정 | 타입 | 기본값 | 설명 |
|
||||
|------|------|--------|------|
|
||||
| tableName | string | - | 조회할 DB 테이블명 |
|
||||
| selectedTable | string | - | tableName 별칭 |
|
||||
| displayMode | `"table"\|"card"` | `"table"` | 테이블 모드 또는 카드 모드 |
|
||||
| autoLoad | boolean | `true` | 화면 로드 시 자동으로 데이터 조회 |
|
||||
| isReadOnly | boolean | false | 읽기 전용 (편집 불가) |
|
||||
| columns | ColumnConfig[] | `[]` | 표시할 컬럼 설정 배열 |
|
||||
| title | string | - | 테이블 상단 제목 |
|
||||
| showHeader | boolean | `true` | 테이블 헤더 행 표시 |
|
||||
| showFooter | boolean | `true` | 테이블 푸터 표시 |
|
||||
| height | string | `"auto"` | 높이 모드 (`"auto"`, `"fixed"`, `"viewport"`) |
|
||||
| fixedHeight | number | - | height="fixed"일 때 고정 높이(px) |
|
||||
| autoWidth | boolean | `true` | 컬럼 너비 자동 계산 |
|
||||
| stickyHeader | boolean | `false` | 스크롤 시 헤더 고정 |
|
||||
|
||||
**checkbox (체크박스 설정)**:
|
||||
|
||||
| 설정 | 타입 | 기본값 | 설명 |
|
||||
|------|------|--------|------|
|
||||
| enabled | boolean | `true` | 체크박스 사용 여부 |
|
||||
| multiple | boolean | `true` | 다중 선택 허용 |
|
||||
| position | `"left"\|"right"` | `"left"` | 체크박스 위치 |
|
||||
| selectAll | boolean | `true` | 전체 선택 버튼 표시 |
|
||||
|
||||
**pagination (페이지네이션)**:
|
||||
|
||||
| 설정 | 타입 | 기본값 | 설명 |
|
||||
|------|------|--------|------|
|
||||
| enabled | boolean | `true` | 페이지네이션 사용 |
|
||||
| pageSize | number | `20` | 한 페이지당 행 수 |
|
||||
| showSizeSelector | boolean | `true` | 페이지 크기 변경 드롭다운 |
|
||||
| showPageInfo | boolean | `true` | "1-20 / 100건" 같은 정보 표시 |
|
||||
| pageSizeOptions | number[] | `[10,20,50,100]` | 선택 가능한 페이지 크기 |
|
||||
|
||||
**horizontalScroll (가로 스크롤)**:
|
||||
|
||||
| 설정 | 타입 | 기본값 | 설명 |
|
||||
|------|------|--------|------|
|
||||
| enabled | boolean | `true` | 가로 스크롤 사용 |
|
||||
| maxVisibleColumns | number | `8` | 스크롤 없이 보이는 최대 컬럼 수 |
|
||||
| minColumnWidth | number | `100` | 컬럼 최소 너비(px) |
|
||||
| maxColumnWidth | number | `300` | 컬럼 최대 너비(px) |
|
||||
|
||||
**tableStyle (스타일)**:
|
||||
|
||||
| 설정 | 타입 | 기본값 | 설명 |
|
||||
|------|------|--------|------|
|
||||
| theme | string | `"default"` | 테마 (`default`/`striped`/`bordered`/`minimal`) |
|
||||
| headerStyle | string | `"default"` | 헤더 스타일 (`default`/`dark`/`light`) |
|
||||
| rowHeight | string | `"normal"` | 행 높이 (`compact`/`normal`/`comfortable`) |
|
||||
| alternateRows | boolean | `true` | 짝수/홀수 행 색상 교차 |
|
||||
| hoverEffect | boolean | `true` | 마우스 호버 시 행 강조 |
|
||||
| borderStyle | string | `"light"` | 테두리 (`none`/`light`/`heavy`) |
|
||||
|
||||
**toolbar (툴바 버튼)**:
|
||||
|
||||
| 설정 | 타입 | 기본값 | 설명 |
|
||||
|------|------|--------|------|
|
||||
| showEditMode | boolean | `false` | 즉시저장/배치저장 모드 전환 버튼 |
|
||||
| showExcel | boolean | `false` | Excel 내보내기 버튼 |
|
||||
| showPdf | boolean | `false` | PDF 내보내기 버튼 |
|
||||
| showSearch | boolean | `false` | 테이블 내 검색 |
|
||||
| showRefresh | boolean | `false` | 상단 새로고침 버튼 |
|
||||
| showPaginationRefresh | boolean | `true` | 하단 새로고침 버튼 |
|
||||
|
||||
**filter (필터)**:
|
||||
|
||||
| 설정 | 타입 | 기본값 | 설명 |
|
||||
|------|------|--------|------|
|
||||
| enabled | boolean | `true` | 필터 기능 사용 |
|
||||
| filters | array | `[]` | 사전 정의 필터 목록 |
|
||||
|
||||
**ColumnConfig (columns 배열 요소)**:
|
||||
|
||||
| 설정 | 타입 | 설명 |
|
||||
|------|------|------|
|
||||
| columnName | string | DB 컬럼명 |
|
||||
| displayName | string | 화면 표시명 |
|
||||
| visible | boolean | 표시 여부 |
|
||||
| sortable | boolean | 정렬 가능 여부 |
|
||||
| searchable | boolean | 검색 가능 여부 |
|
||||
| editable | boolean | 인라인 편집 가능 여부 |
|
||||
| width | number | 컬럼 너비(px) |
|
||||
| align | `"left"\|"center"\|"right"` | 텍스트 정렬 |
|
||||
| format | string | 포맷 (`text`/`number`/`date`/`currency`/`boolean`) |
|
||||
| hidden | boolean | 숨김 (데이터는 로드하되 표시 안 함) |
|
||||
| fixed | `"left"\|"right"\|false` | 컬럼 고정 위치 |
|
||||
| thousandSeparator | boolean | 숫자 천 단위 콤마 |
|
||||
| isEntityJoin | boolean | 엔티티 조인 사용 여부 |
|
||||
| entityJoinInfo | object | 조인 정보 (`sourceTable`, `sourceColumn`, `referenceTable`, `joinAlias`) |
|
||||
|
||||
**cardConfig (displayMode="card"일 때)**:
|
||||
|
||||
| 설정 | 타입 | 기본값 | 설명 |
|
||||
|------|------|--------|------|
|
||||
| idColumn | string | `"id"` | ID 컬럼 |
|
||||
| titleColumn | string | `"name"` | 카드 제목 컬럼 |
|
||||
| subtitleColumn | string | - | 부제목 컬럼 |
|
||||
| descriptionColumn | string | - | 설명 컬럼 |
|
||||
| imageColumn | string | - | 이미지 URL 컬럼 |
|
||||
| cardsPerRow | number | `3` | 행당 카드 수 |
|
||||
| cardSpacing | number | `16` | 카드 간격(px) |
|
||||
| showActions | boolean | `true` | 카드 액션 버튼 표시 |
|
||||
|
||||
---
|
||||
|
||||
### 3.2 v2-split-panel-layout (마스터-디테일 분할)
|
||||
|
||||
**용도**: 좌측 마스터 테이블 선택 → 우측 디테일 테이블 연동. 가장 복잡한 컴포넌트.
|
||||
|
||||
| 설정 | 타입 | 기본값 | 설명 |
|
||||
|------|------|--------|------|
|
||||
| splitRatio | number | `30` | 좌측 패널 비율(0~100) |
|
||||
| resizable | boolean | `true` | 사용자가 분할선 드래그로 비율 변경 가능 |
|
||||
| minLeftWidth | number | `200` | 좌측 최소 너비(px) |
|
||||
| minRightWidth | number | `300` | 우측 최소 너비(px) |
|
||||
| autoLoad | boolean | `true` | 화면 로드 시 자동 데이터 조회 |
|
||||
| syncSelection | boolean | `true` | 좌측 선택 시 우측 자동 갱신 |
|
||||
|
||||
**leftPanel / rightPanel 공통 설정**:
|
||||
|
||||
| 설정 | 타입 | 설명 |
|
||||
|------|------|------|
|
||||
| title | string | 패널 제목 |
|
||||
| tableName | string | DB 테이블명 |
|
||||
| displayMode | `"list"\|"table"\|"custom"` | `list`: 리스트, `table`: 테이블, `custom`: 자유 배치 |
|
||||
| columns | array | 컬럼 설정 (`name`, `label`, `width`, `sortable`, `align`, `isEntityJoin`, `joinInfo`) |
|
||||
| showSearch | boolean | 패널 내 검색 바 표시 |
|
||||
| showAdd | boolean | 추가 버튼 표시 |
|
||||
| showEdit | boolean | 수정 버튼 표시 |
|
||||
| showDelete | boolean | 삭제 버튼 표시 |
|
||||
| addButton | object | `{ enabled, mode("auto"/"modal"), modalScreenId }` |
|
||||
| editButton | object | `{ enabled, mode("auto"/"modal"), modalScreenId, buttonLabel }` |
|
||||
| deleteButton | object | `{ enabled, buttonLabel, confirmMessage }` |
|
||||
| addModalColumns | array | 추가 모달 전용 컬럼 (`name`, `label`, `required`) |
|
||||
| dataFilter | object | `{ enabled, filters, matchType("all"/"any") }` |
|
||||
| tableConfig | object | `{ showCheckbox, showRowNumber, rowHeight, headerHeight, striped, bordered, hoverable, stickyHeader }` |
|
||||
| components | array | displayMode="custom"일 때 내부 컴포넌트 배열 |
|
||||
|
||||
**rightPanel 전용 설정**:
|
||||
|
||||
| 설정 | 타입 | 설명 |
|
||||
|------|------|------|
|
||||
| relation | object | 마스터-디테일 연결 관계 |
|
||||
| relation.type | `"detail"\|"join"` | detail: FK 관계, join: 테이블 JOIN |
|
||||
| relation.leftColumn | string | 좌측(마스터) 연결 컬럼 (보통 `"id"`) |
|
||||
| relation.rightColumn | string | 우측(디테일) 연결 컬럼 (FK) |
|
||||
| relation.foreignKey | string | FK 컬럼명 (rightColumn과 동일) |
|
||||
| relation.keys | array | 복합키 `[{ leftColumn, rightColumn }]` |
|
||||
| additionalTabs | array | 우측 패널에 탭 추가 (각 탭은 rightPanel과 동일 구조 + `tabId`, `label`) |
|
||||
| addConfig | object | `{ targetTable, autoFillColumns, leftPanelColumn, targetColumn }` |
|
||||
| deduplication | object | `{ enabled, groupByColumn, keepStrategy, sortColumn }` |
|
||||
| summaryColumnCount | number | 요약 표시 컬럼 수 |
|
||||
|
||||
---
|
||||
|
||||
### 3.3 v2-table-search-widget (검색 바)
|
||||
|
||||
**용도**: 테이블 상단에 배치하여 검색/필터 기능 제공. 대상 테이블 컬럼을 자동 감지.
|
||||
|
||||
| 설정 | 타입 | 기본값 | 설명 |
|
||||
|------|------|--------|------|
|
||||
| autoSelectFirstTable | boolean | `true` | 화면 내 첫 번째 테이블 자동 연결 |
|
||||
| showTableSelector | boolean | `true` | 테이블 선택 드롭다운 표시 |
|
||||
| title | string | `"테이블 검색"` | 검색 바 제목 |
|
||||
| filterMode | `"dynamic"\|"preset"` | `"dynamic"` | dynamic: 자동 필터, preset: 고정 필터 |
|
||||
| presetFilters | array | `[]` | 고정 필터 목록 (`{ columnName, columnLabel, filterType, width }`) |
|
||||
| targetPanelPosition | `"left"\|"right"\|"auto"` | `"left"` | split-panel에서 대상 패널 위치 |
|
||||
|
||||
---
|
||||
|
||||
### 3.4 v2-input (텍스트/숫자 입력)
|
||||
|
||||
**용도**: 텍스트, 숫자, 비밀번호, textarea, 슬라이더, 컬러, 버튼 등 단일 값 입력.
|
||||
|
||||
| 설정 | 타입 | 기본값 | 설명 |
|
||||
|------|------|--------|------|
|
||||
| inputType | string | `"text"` | 입력 유형: `text`/`number`/`password`/`slider`/`color`/`button`/`textarea` |
|
||||
| format | string | `"none"` | 포맷 검증: `none`/`email`/`tel`/`url`/`currency`/`biz_no` |
|
||||
| placeholder | string | `""` | 입력 힌트 텍스트 |
|
||||
| required | boolean | `false` | 필수 입력 표시 |
|
||||
| readonly | boolean | `false` | 읽기 전용 |
|
||||
| disabled | boolean | `false` | 비활성화 |
|
||||
| maxLength | number | - | 최대 입력 글자 수 |
|
||||
| minLength | number | - | 최소 입력 글자 수 |
|
||||
| pattern | string | - | 정규식 패턴 검증 |
|
||||
| showCounter | boolean | `false` | 글자 수 카운터 표시 |
|
||||
| min | number | - | 최소값 (number/slider) |
|
||||
| max | number | - | 최대값 (number/slider) |
|
||||
| step | number | - | 증감 단위 (number/slider) |
|
||||
| buttonText | string | - | 버튼 텍스트 (inputType=button) |
|
||||
| tableName | string | - | 바인딩 테이블명 |
|
||||
| columnName | string | - | 바인딩 컬럼명 |
|
||||
|
||||
---
|
||||
|
||||
### 3.5 v2-select (선택)
|
||||
|
||||
**용도**: 드롭다운, 콤보박스, 라디오, 체크박스, 태그, 토글 등 선택형 입력.
|
||||
|
||||
| 설정 | 타입 | 기본값 | 설명 |
|
||||
|------|------|--------|------|
|
||||
| mode | string | `"dropdown"` | 선택 모드: `dropdown`/`combobox`/`radio`/`check`/`tag`/`tagbox`/`toggle`/`swap` |
|
||||
| source | string | `"distinct"` | 데이터 소스: `static`/`code`/`db`/`api`/`entity`/`category`/`distinct`/`select` |
|
||||
| options | array | `[]` | source=static일 때 옵션 목록 `[{ label, value }]` |
|
||||
| codeGroup | string | - | source=code일 때 코드 그룹 |
|
||||
| codeCategory | string | - | source=code일 때 코드 카테고리 |
|
||||
| table | string | - | source=db일 때 테이블명 |
|
||||
| valueColumn | string | - | source=db일 때 값 컬럼 |
|
||||
| labelColumn | string | - | source=db일 때 표시 컬럼 |
|
||||
| entityTable | string | - | source=entity일 때 엔티티 테이블 |
|
||||
| entityValueField | string | - | source=entity일 때 값 필드 |
|
||||
| entityLabelField | string | - | source=entity일 때 표시 필드 |
|
||||
| searchable | boolean | `true` | 검색 가능 (combobox에서 기본 활성) |
|
||||
| multiple | boolean | `false` | 다중 선택 허용 |
|
||||
| maxSelect | number | - | 최대 선택 수 |
|
||||
| allowClear | boolean | - | 선택 해제 허용 |
|
||||
| placeholder | string | `"선택하세요"` | 힌트 텍스트 |
|
||||
| required | boolean | `false` | 필수 선택 |
|
||||
| readonly | boolean | `false` | 읽기 전용 |
|
||||
| disabled | boolean | `false` | 비활성화 |
|
||||
| cascading | object | - | 연쇄 선택 (상위 select 값에 따라 하위 옵션 변경) |
|
||||
| hierarchical | boolean | - | 계층 구조 (부모-자식 관계) |
|
||||
| parentField | string | - | 부모 필드명 |
|
||||
|
||||
---
|
||||
|
||||
### 3.6 v2-date (날짜)
|
||||
|
||||
**용도**: 날짜, 시간, 날짜시간, 날짜범위, 월, 연도 입력.
|
||||
|
||||
| 설정 | 타입 | 기본값 | 설명 |
|
||||
|------|------|--------|------|
|
||||
| dateType | string | `"date"` | 날짜 유형: `date`/`datetime`/`time`/`daterange`/`month`/`year` |
|
||||
| format | string | `"YYYY-MM-DD"` | 표시/저장 형식 |
|
||||
| placeholder | string | `"날짜 선택"` | 힌트 텍스트 |
|
||||
| required | boolean | `false` | 필수 입력 |
|
||||
| readonly | boolean | `false` | 읽기 전용 |
|
||||
| disabled | boolean | `false` | 비활성화 |
|
||||
| showTime | boolean | `false` | 시간 선택 표시 (datetime) |
|
||||
| use24Hours | boolean | `true` | 24시간 형식 |
|
||||
| range | boolean | - | 범위 선택 (시작~종료) |
|
||||
| minDate | string | - | 선택 가능 최소 날짜 (ISO 8601) |
|
||||
| maxDate | string | - | 선택 가능 최대 날짜 |
|
||||
| showToday | boolean | - | 오늘 버튼 표시 |
|
||||
|
||||
---
|
||||
|
||||
### 3.7 v2-button-primary (액션 버튼)
|
||||
|
||||
**용도**: 저장, 삭제, 조회, 커스텀 등 액션 버튼. 제어관리(dataflow)와 연결 가능.
|
||||
|
||||
| 설정 | 타입 | 기본값 | 설명 |
|
||||
|------|------|--------|------|
|
||||
| text | string | `"저장"` | 버튼 텍스트 |
|
||||
| actionType | string | `"button"` | 버튼 타입: `button`/`submit`/`reset` |
|
||||
| variant | string | `"primary"` | 스타일: `primary`/`secondary`/`danger` |
|
||||
| size | string | `"md"` | 크기: `sm`/`md`/`lg` |
|
||||
| disabled | boolean | `false` | 비활성화 |
|
||||
| action | object | - | 액션 설정 |
|
||||
| action.type | string | `"save"` | 액션 유형: `save`/`delete`/`edit`/`copy`/`navigate`/`modal`/`control`/`custom` |
|
||||
| action.successMessage | string | `"저장되었습니다."` | 성공 시 토스트 메시지 |
|
||||
| action.errorMessage | string | `"오류가 발생했습니다."` | 실패 시 토스트 메시지 |
|
||||
| webTypeConfig | object | - | 제어관리 연결 설정 |
|
||||
| webTypeConfig.enableDataflowControl | boolean | - | 제어관리 활성화 |
|
||||
| webTypeConfig.dataflowConfig | object | - | 제어관리 설정 |
|
||||
| webTypeConfig.dataflowConfig.controlMode | string | - | `"relationship"`/`"flow"`/`"none"` |
|
||||
| webTypeConfig.dataflowConfig.relationshipConfig | object | - | `{ relationshipId, executionTiming("before"/"after"/"replace") }` |
|
||||
| webTypeConfig.dataflowConfig.flowConfig | object | - | `{ flowId, executionTiming }` |
|
||||
|
||||
---
|
||||
|
||||
### 3.8 v2-table-grouped (그룹화 테이블)
|
||||
|
||||
**용도**: 특정 컬럼 기준으로 데이터를 그룹화. 그룹별 접기/펼치기, 집계 표시.
|
||||
|
||||
| 설정 | 타입 | 기본값 | 설명 |
|
||||
|------|------|--------|------|
|
||||
| selectedTable | string | `""` | DB 테이블명 |
|
||||
| columns | array | `[]` | 컬럼 설정 (v2-table-list와 동일) |
|
||||
| showCheckbox | boolean | `false` | 체크박스 표시 |
|
||||
| checkboxMode | `"single"\|"multi"` | `"multi"` | 체크박스 모드 |
|
||||
| isReadOnly | boolean | `false` | 읽기 전용 |
|
||||
| rowClickable | boolean | `true` | 행 클릭 가능 |
|
||||
| showExpandAllButton | boolean | `true` | 전체 펼치기/접기 버튼 |
|
||||
| groupHeaderStyle | string | `"default"` | 그룹 헤더 스타일 (`default`/`compact`/`card`) |
|
||||
| emptyMessage | string | `"데이터가 없습니다."` | 빈 데이터 메시지 |
|
||||
| height | string\|number | `"auto"` | 높이 |
|
||||
| maxHeight | number | `600` | 최대 높이(px) |
|
||||
| pagination.enabled | boolean | `false` | 페이지네이션 사용 |
|
||||
| pagination.pageSize | number | `10` | 페이지 크기 |
|
||||
|
||||
**groupConfig (그룹화 설정)**:
|
||||
|
||||
| 설정 | 타입 | 기본값 | 설명 |
|
||||
|------|------|--------|------|
|
||||
| groupByColumn | string | `""` | **필수**. 그룹화 기준 컬럼 |
|
||||
| groupLabelFormat | string | `"{value}"` | 그룹 라벨 포맷 |
|
||||
| defaultExpanded | boolean | `true` | 초기 펼침 여부 |
|
||||
| sortDirection | `"asc"\|"desc"` | `"asc"` | 그룹 정렬 방향 |
|
||||
| summary.showCount | boolean | `true` | 그룹별 건수 표시 |
|
||||
| summary.sumColumns | string[] | `[]` | 합계 표시할 컬럼 목록 |
|
||||
| summary.avgColumns | string[] | - | 평균 표시 컬럼 |
|
||||
| summary.maxColumns | string[] | - | 최대값 표시 컬럼 |
|
||||
| summary.minColumns | string[] | - | 최소값 표시 컬럼 |
|
||||
|
||||
---
|
||||
|
||||
### 3.9 v2-pivot-grid (피벗 분석)
|
||||
|
||||
**용도**: 다차원 데이터 분석. 행/열/데이터/필터 영역에 필드를 배치하여 집계.
|
||||
|
||||
| 설정 | 타입 | 기본값 | 설명 |
|
||||
|------|------|--------|------|
|
||||
| fields | array | `[]` | **필수**. 피벗 필드 배열 |
|
||||
| dataSource | object | - | 데이터 소스 (`type`, `tableName`, `joinConfigs`, `filterConditions`) |
|
||||
| allowSortingBySummary | boolean | - | 집계값 기준 정렬 허용 |
|
||||
| allowFiltering | boolean | - | 필터링 허용 |
|
||||
| allowExpandAll | boolean | - | 전체 확장/축소 허용 |
|
||||
| wordWrapEnabled | boolean | - | 텍스트 줄바꿈 |
|
||||
| height | string\|number | - | 높이 |
|
||||
| totals.showRowGrandTotals | boolean | - | 행 총합계 표시 |
|
||||
| totals.showColumnGrandTotals | boolean | - | 열 총합계 표시 |
|
||||
| chart.enabled | boolean | - | 차트 연동 표시 |
|
||||
| chart.type | string | - | 차트 타입 (`bar`/`line`/`area`/`pie`/`stackedBar`) |
|
||||
|
||||
**fields 배열 요소**:
|
||||
|
||||
| 설정 | 타입 | 설명 |
|
||||
|------|------|------|
|
||||
| field | string | DB 컬럼명 |
|
||||
| caption | string | 표시 라벨 |
|
||||
| area | `"row"\|"column"\|"data"\|"filter"` | **필수**. 배치 영역 |
|
||||
| summaryType | string | area=data일 때: `sum`/`count`/`avg`/`min`/`max`/`countDistinct` |
|
||||
| groupInterval | string | 날짜 그룹화: `year`/`quarter`/`month`/`week`/`day` |
|
||||
| sortBy | string | 정렬 기준: `value`/`caption` |
|
||||
| sortOrder | string | 정렬 방향: `asc`/`desc`/`none` |
|
||||
|
||||
---
|
||||
|
||||
### 3.10 v2-card-display (카드 뷰)
|
||||
|
||||
**용도**: 테이블 데이터를 카드 형태로 표시. 이미지+제목+설명 구조.
|
||||
|
||||
| 설정 | 타입 | 기본값 | 설명 |
|
||||
|------|------|--------|------|
|
||||
| dataSource | string | `"table"` | 데이터 소스: `table`/`static` |
|
||||
| tableName | string | - | DB 테이블명 |
|
||||
| cardsPerRow | number | `3` | 행당 카드 수 (1~6) |
|
||||
| cardSpacing | number | `16` | 카드 간격(px) |
|
||||
| columnMapping | object | `{}` | 필드 매핑 (`title`, `subtitle`, `description`, `image`, `status`) |
|
||||
| cardStyle.showTitle | boolean | `true` | 제목 표시 |
|
||||
| cardStyle.showSubtitle | boolean | `true` | 부제목 표시 |
|
||||
| cardStyle.showDescription | boolean | `true` | 설명 표시 |
|
||||
| cardStyle.showImage | boolean | `false` | 이미지 표시 |
|
||||
| cardStyle.showActions | boolean | `true` | 액션 버튼 표시 |
|
||||
|
||||
---
|
||||
|
||||
### 3.11 v2-timeline-scheduler (간트차트)
|
||||
|
||||
**용도**: 시간축 기반 일정/계획 시각화. 드래그/리사이즈로 일정 편집.
|
||||
|
||||
| 설정 | 타입 | 기본값 | 설명 |
|
||||
|------|------|--------|------|
|
||||
| selectedTable | string | - | 스케줄 데이터 테이블 |
|
||||
| resourceTable | string | `"equipment_mng"` | 리소스(설비/작업자) 테이블 |
|
||||
| scheduleType | string | `"PRODUCTION"` | 스케줄 유형: `PRODUCTION`/`MAINTENANCE`/`SHIPPING`/`WORK_ASSIGN` |
|
||||
| defaultZoomLevel | string | `"day"` | 초기 줌: `day`/`week`/`month` |
|
||||
| editable | boolean | `true` | 편집 가능 |
|
||||
| draggable | boolean | `true` | 드래그 이동 허용 |
|
||||
| resizable | boolean | `true` | 기간 리사이즈 허용 |
|
||||
| rowHeight | number | `50` | 행 높이(px) |
|
||||
| headerHeight | number | `60` | 헤더 높이(px) |
|
||||
| resourceColumnWidth | number | `150` | 리소스 컬럼 너비(px) |
|
||||
| cellWidth.day | number | `60` | 일 단위 셀 너비 |
|
||||
| cellWidth.week | number | `120` | 주 단위 셀 너비 |
|
||||
| cellWidth.month | number | `40` | 월 단위 셀 너비 |
|
||||
| showConflicts | boolean | `true` | 시간 겹침 충돌 표시 |
|
||||
| showProgress | boolean | `true` | 진행률 바 표시 |
|
||||
| showTodayLine | boolean | `true` | 오늘 날짜 표시선 |
|
||||
| showToolbar | boolean | `true` | 상단 툴바 표시 |
|
||||
| showAddButton | boolean | `true` | 추가 버튼 |
|
||||
| height | number | `500` | 높이(px) |
|
||||
|
||||
**fieldMapping (필수)**:
|
||||
|
||||
| 설정 | 기본값 | 설명 |
|
||||
|------|--------|------|
|
||||
| id | `"schedule_id"` | 스케줄 PK 필드 |
|
||||
| resourceId | `"resource_id"` | 리소스 FK 필드 |
|
||||
| title | `"schedule_name"` | 제목 필드 |
|
||||
| startDate | `"start_date"` | 시작일 필드 |
|
||||
| endDate | `"end_date"` | 종료일 필드 |
|
||||
| status | - | 상태 필드 |
|
||||
| progress | - | 진행률 필드 (0~100) |
|
||||
|
||||
**resourceFieldMapping**:
|
||||
|
||||
| 설정 | 기본값 | 설명 |
|
||||
|------|--------|------|
|
||||
| id | `"equipment_code"` | 리소스 PK |
|
||||
| name | `"equipment_name"` | 리소스 표시명 |
|
||||
| group | - | 리소스 그룹 |
|
||||
|
||||
**statusColors (상태별 색상)**:
|
||||
|
||||
| 상태 | 기본 색상 |
|
||||
|------|----------|
|
||||
| planned | `"#3b82f6"` (파랑) |
|
||||
| in_progress | `"#f59e0b"` (주황) |
|
||||
| completed | `"#10b981"` (초록) |
|
||||
| delayed | `"#ef4444"` (빨강) |
|
||||
| cancelled | `"#6b7280"` (회색) |
|
||||
|
||||
---
|
||||
|
||||
### 3.12 v2-tabs-widget (탭)
|
||||
|
||||
**용도**: 탭 전환. 각 탭 내부에 컴포넌트 배치 가능.
|
||||
|
||||
| 설정 | 타입 | 기본값 | 설명 |
|
||||
|------|------|--------|------|
|
||||
| tabs | array | `[{id:"tab-1",label:"탭1",...}]` | 탭 배열 |
|
||||
| defaultTab | string | `"tab-1"` | 기본 활성 탭 ID |
|
||||
| orientation | string | `"horizontal"` | 탭 방향: `horizontal`/`vertical` |
|
||||
| variant | string | `"default"` | 스타일: `default`/`pills`/`underline` |
|
||||
| allowCloseable | boolean | `false` | 탭 닫기 버튼 표시 |
|
||||
| persistSelection | boolean | `false` | 탭 선택 상태 localStorage 저장 |
|
||||
|
||||
**tabs 배열 요소**: `{ id, label, order, disabled, icon, components[] }`
|
||||
**components 요소**: `{ id, componentType, label, position, size, componentConfig }`
|
||||
|
||||
---
|
||||
|
||||
### 3.13 v2-aggregation-widget (집계 카드)
|
||||
|
||||
**용도**: 합계, 평균, 개수 등 집계값을 카드 형태로 표시.
|
||||
|
||||
| 설정 | 타입 | 기본값 | 설명 |
|
||||
|------|------|--------|------|
|
||||
| dataSourceType | string | `"table"` | 데이터 소스: `table`/`component`/`selection` |
|
||||
| tableName | string | - | 테이블명 |
|
||||
| items | array | `[]` | 집계 항목 배열 |
|
||||
| layout | string | `"horizontal"` | 배치: `horizontal`/`vertical` |
|
||||
| showLabels | boolean | `true` | 라벨 표시 |
|
||||
| showIcons | boolean | `true` | 아이콘 표시 |
|
||||
| gap | string | `"16px"` | 항목 간격 |
|
||||
| autoRefresh | boolean | `false` | 자동 새로고침 |
|
||||
| refreshOnFormChange | boolean | `true` | 폼 변경 시 새로고침 |
|
||||
|
||||
**items 요소**: `{ id, columnName, columnLabel, type("sum"/"avg"/"count"/"max"/"min"), format, decimalPlaces, prefix, suffix }`
|
||||
|
||||
---
|
||||
|
||||
### 3.14 v2-status-count (상태별 건수)
|
||||
|
||||
**용도**: 상태별 건수를 카드 형태로 표시. 대시보드/현황 화면용.
|
||||
|
||||
| 설정 | 타입 | 기본값 | 설명 |
|
||||
|------|------|--------|------|
|
||||
| title | string | `"상태 현황"` | 제목 |
|
||||
| tableName | string | `""` | 대상 테이블 |
|
||||
| statusColumn | string | `"status"` | 상태 컬럼명 |
|
||||
| relationColumn | string | `""` | 관계 컬럼 (필터용) |
|
||||
| items | array | - | 상태 항목 `[{ value, label, color }]` |
|
||||
| showTotal | boolean | - | 합계 표시 |
|
||||
| cardSize | string | `"md"` | 카드 크기: `sm`/`md`/`lg` |
|
||||
|
||||
---
|
||||
|
||||
### 3.15 v2-text-display (텍스트 표시)
|
||||
|
||||
| 설정 | 타입 | 기본값 | 설명 |
|
||||
|------|------|--------|------|
|
||||
| text | string | `"텍스트를 입력하세요"` | 표시 텍스트 |
|
||||
| fontSize | string | `"14px"` | 폰트 크기 |
|
||||
| fontWeight | string | `"normal"` | 폰트 굵기 |
|
||||
| color | string | `"#212121"` | 텍스트 색상 |
|
||||
| textAlign | string | `"left"` | 정렬: `left`/`center`/`right` |
|
||||
| backgroundColor | string | - | 배경색 |
|
||||
| padding | string | - | 패딩 |
|
||||
|
||||
---
|
||||
|
||||
### 3.16 v2-numbering-rule (자동 채번)
|
||||
|
||||
| 설정 | 타입 | 기본값 | 설명 |
|
||||
|------|------|--------|------|
|
||||
| ruleConfig | object | - | 채번 규칙 설정 |
|
||||
| maxRules | number | `6` | 최대 파트 수 |
|
||||
| readonly | boolean | `false` | 읽기 전용 |
|
||||
| showPreview | boolean | `true` | 미리보기 표시 |
|
||||
| showRuleList | boolean | `true` | 규칙 목록 표시 |
|
||||
| cardLayout | string | `"vertical"` | 레이아웃: `vertical`/`horizontal` |
|
||||
|
||||
---
|
||||
|
||||
### 3.17 v2-file-upload (파일 업로드)
|
||||
|
||||
| 설정 | 타입 | 기본값 | 설명 |
|
||||
|------|------|--------|------|
|
||||
| placeholder | string | `"파일을 선택하세요"` | 힌트 텍스트 |
|
||||
| multiple | boolean | `true` | 다중 업로드 |
|
||||
| accept | string | `"*/*"` | 허용 파일 형식 (예: `"image/*"`, `".pdf,.xlsx"`) |
|
||||
| maxSize | number | `10485760` | 최대 파일 크기(bytes, 기본 10MB) |
|
||||
| maxFiles | number | - | 최대 파일 수 |
|
||||
| showPreview | boolean | - | 미리보기 표시 |
|
||||
| showFileList | boolean | - | 파일 목록 표시 |
|
||||
| allowDelete | boolean | - | 삭제 허용 |
|
||||
| allowDownload | boolean | - | 다운로드 허용 |
|
||||
|
||||
---
|
||||
|
||||
### 3.18 v2-section-card (그룹 컨테이너 - 테두리)
|
||||
|
||||
| 설정 | 타입 | 기본값 | 설명 |
|
||||
|------|------|--------|------|
|
||||
| title | string | `"섹션 제목"` | 제목 |
|
||||
| description | string | `""` | 설명 |
|
||||
| showHeader | boolean | `true` | 헤더 표시 |
|
||||
| padding | string | `"md"` | 패딩: `none`/`sm`/`md`/`lg` |
|
||||
| backgroundColor | string | `"default"` | 배경: `default`/`muted`/`transparent` |
|
||||
| borderStyle | string | `"solid"` | 테두리: `solid`/`dashed`/`none` |
|
||||
| collapsible | boolean | `false` | 접기/펼치기 가능 |
|
||||
| defaultOpen | boolean | `true` | 기본 펼침 |
|
||||
|
||||
---
|
||||
|
||||
### 3.19 v2-section-paper (그룹 컨테이너 - 배경색)
|
||||
|
||||
| 설정 | 타입 | 기본값 | 설명 |
|
||||
|------|------|--------|------|
|
||||
| backgroundColor | string | `"default"` | 배경: `default`/`muted`/`accent`/`primary`/`custom` |
|
||||
| customColor | string | - | custom일 때 색상 |
|
||||
| showBorder | boolean | `false` | 테두리 표시 |
|
||||
| padding | string | `"md"` | 패딩: `none`/`sm`/`md`/`lg` |
|
||||
| roundedCorners | string | `"md"` | 모서리: `none`/`sm`/`md`/`lg` |
|
||||
| shadow | string | `"none"` | 그림자: `none`/`sm`/`md` |
|
||||
|
||||
---
|
||||
|
||||
### 3.20 v2-divider-line (구분선)
|
||||
|
||||
| 설정 | 타입 | 기본값 | 설명 |
|
||||
|------|------|--------|------|
|
||||
| orientation | string | - | 방향 (가로/세로) |
|
||||
| thickness | number | - | 두께 |
|
||||
|
||||
---
|
||||
|
||||
### 3.21 v2-split-line (캔버스 분할선)
|
||||
|
||||
| 설정 | 타입 | 기본값 | 설명 |
|
||||
|------|------|--------|------|
|
||||
| resizable | boolean | `true` | 드래그 리사이즈 허용 |
|
||||
| lineColor | string | `"#e2e8f0"` | 분할선 색상 |
|
||||
| lineWidth | number | `4` | 분할선 두께(px) |
|
||||
|
||||
---
|
||||
|
||||
### 3.22 v2-repeat-container (반복 렌더링)
|
||||
|
||||
**용도**: 데이터 수만큼 내부 컴포넌트를 반복 렌더링. 카드 리스트 등에 사용.
|
||||
|
||||
| 설정 | 타입 | 기본값 | 설명 |
|
||||
|------|------|--------|------|
|
||||
| dataSourceType | string | `"manual"` | 소스: `table-list`/`v2-repeater`/`externalData`/`manual` |
|
||||
| dataSourceComponentId | string | - | 연결할 컴포넌트 ID |
|
||||
| tableName | string | - | 테이블명 |
|
||||
| layout | string | `"vertical"` | 배치: `vertical`/`horizontal`/`grid` |
|
||||
| gridColumns | number | `2` | grid일 때 컬럼 수 |
|
||||
| gap | string | `"16px"` | 아이템 간격 |
|
||||
| showBorder | boolean | `true` | 카드 테두리 |
|
||||
| showShadow | boolean | `false` | 카드 그림자 |
|
||||
| borderRadius | string | `"8px"` | 모서리 둥글기 |
|
||||
| backgroundColor | string | `"#ffffff"` | 배경색 |
|
||||
| padding | string | `"16px"` | 패딩 |
|
||||
| showItemTitle | boolean | `false` | 아이템 제목 표시 |
|
||||
| itemTitleTemplate | string | `""` | 제목 템플릿 (예: `"{order_no} - {item}"`) |
|
||||
| emptyMessage | string | `"데이터가 없습니다"` | 빈 상태 메시지 |
|
||||
| clickable | boolean | `false` | 클릭 가능 |
|
||||
| selectionMode | string | `"single"` | 선택 모드: `single`/`multiple` |
|
||||
| usePaging | boolean | `false` | 페이징 사용 |
|
||||
| pageSize | number | `10` | 페이지 크기 |
|
||||
|
||||
---
|
||||
|
||||
### 3.23 v2-repeater (반복 데이터 관리)
|
||||
|
||||
**용도**: 인라인/모달 모드로 반복 데이터(주문 상세 등) 관리. 행 추가/삭제/편집.
|
||||
|
||||
| 설정 | 타입 | 기본값 | 설명 |
|
||||
|------|------|--------|------|
|
||||
| renderMode | string | `"inline"` | 모드: `inline` (인라인 편집) / `modal` (모달로 선택 추가) |
|
||||
| mainTableName | string | - | 저장 대상 테이블 |
|
||||
| foreignKeyColumn | string | - | 마스터 연결 FK 컬럼 |
|
||||
| foreignKeySourceColumn | string | - | 마스터 PK 컬럼 |
|
||||
| columns | array | `[]` | 컬럼 설정 |
|
||||
| dataSource.tableName | string | - | 데이터 테이블 |
|
||||
| dataSource.foreignKey | string | - | FK 컬럼 |
|
||||
| dataSource.sourceTable | string | - | 모달용 소스 테이블 |
|
||||
| modal.size | string | `"md"` | 모달 크기: `sm`/`md`/`lg`/`xl`/`full` |
|
||||
| modal.title | string | - | 모달 제목 |
|
||||
| modal.searchFields | string[] | - | 검색 필드 |
|
||||
| features.showAddButton | boolean | `true` | 추가 버튼 |
|
||||
| features.showDeleteButton | boolean | `true` | 삭제 버튼 |
|
||||
| features.inlineEdit | boolean | `false` | 인라인 편집 |
|
||||
| features.showRowNumber | boolean | `false` | 행 번호 표시 |
|
||||
| calculationRules | array | - | 자동 계산 규칙 (예: 수량*단가=금액) |
|
||||
|
||||
---
|
||||
|
||||
### 3.24 v2-approval-step (결재 스테퍼)
|
||||
|
||||
| 설정 | 타입 | 기본값 | 설명 |
|
||||
|------|------|--------|------|
|
||||
| targetTable | string | `""` | 결재 대상 테이블 |
|
||||
| targetRecordIdField | string | `""` | 레코드 ID 필드 |
|
||||
| displayMode | string | `"horizontal"` | 표시 방향: `horizontal`/`vertical` |
|
||||
| showComment | boolean | `true` | 결재 코멘트 표시 |
|
||||
| showTimestamp | boolean | `true` | 결재 시간 표시 |
|
||||
| showDept | boolean | `true` | 부서 표시 |
|
||||
| compact | boolean | `false` | 컴팩트 모드 |
|
||||
|
||||
---
|
||||
|
||||
### 3.25 v2-bom-tree (BOM 트리)
|
||||
|
||||
| 설정 | 타입 | 기본값 | 설명 |
|
||||
|------|------|--------|------|
|
||||
| detailTable | string | `"bom_detail"` | BOM 디테일 테이블 |
|
||||
| foreignKey | string | `"bom_id"` | BOM 마스터 FK |
|
||||
| parentKey | string | `"parent_detail_id"` | 트리 부모 키 (자기참조) |
|
||||
|
||||
---
|
||||
|
||||
### 3.26 v2-bom-item-editor (BOM 편집)
|
||||
|
||||
| 설정 | 타입 | 기본값 | 설명 |
|
||||
|------|------|--------|------|
|
||||
| detailTable | string | `"bom_detail"` | BOM 디테일 테이블 |
|
||||
| sourceTable | string | `"item_info"` | 품목 소스 테이블 |
|
||||
| foreignKey | string | `"bom_id"` | BOM 마스터 FK |
|
||||
| parentKey | string | `"parent_detail_id"` | 트리 부모 키 |
|
||||
| itemCodeField | string | `"item_number"` | 품목 코드 필드 |
|
||||
| itemNameField | string | `"item_name"` | 품목명 필드 |
|
||||
| itemTypeField | string | `"type"` | 품목 유형 필드 |
|
||||
| itemUnitField | string | `"unit"` | 품목 단위 필드 |
|
||||
|
||||
---
|
||||
|
||||
### 3.27 v2-category-manager (카테고리 관리)
|
||||
|
||||
| 설정 | 타입 | 기본값 | 설명 |
|
||||
|------|------|--------|------|
|
||||
| tableName | string | - | 대상 테이블 |
|
||||
| columnName | string | - | 카테고리 컬럼 |
|
||||
| menuObjid | number | - | 연결 메뉴 OBJID |
|
||||
| viewMode | string | `"tree"` | 뷰 모드: `tree`/`list` |
|
||||
| showViewModeToggle | boolean | `true` | 뷰 모드 토글 표시 |
|
||||
| defaultExpandLevel | number | `1` | 기본 트리 펼침 레벨 |
|
||||
| showInactiveItems | boolean | `false` | 비활성 항목 표시 |
|
||||
| leftPanelWidth | number | `15` | 좌측 패널 너비 |
|
||||
|
||||
---
|
||||
|
||||
### 3.28 v2-media (미디어)
|
||||
|
||||
| 설정 | 타입 | 기본값 | 설명 |
|
||||
|------|------|--------|------|
|
||||
| mediaType | string | `"file"` | 미디어 타입: `file`/`image`/`video`/`audio` |
|
||||
| multiple | boolean | `false` | 다중 업로드 |
|
||||
| preview | boolean | `true` | 미리보기 |
|
||||
| maxSize | number | `10` | 최대 크기(MB) |
|
||||
| accept | string | `"*/*"` | 허용 형식 |
|
||||
| showFileList | boolean | `true` | 파일 목록 |
|
||||
| dragDrop | boolean | `true` | 드래그앤드롭 |
|
||||
|
||||
---
|
||||
|
||||
### 3.29 v2-location-swap-selector (위치 교환)
|
||||
|
||||
| 설정 | 타입 | 기본값 | 설명 |
|
||||
|------|------|--------|------|
|
||||
| dataSource.type | string | `"static"` | 소스: `static`/`table`/`code` |
|
||||
| dataSource.tableName | string | - | 장소 테이블 |
|
||||
| dataSource.valueField | string | `"location_code"` | 값 필드 |
|
||||
| dataSource.labelField | string | `"location_name"` | 표시 필드 |
|
||||
| dataSource.staticOptions | array | - | 정적 옵션 `[{value, label}]` |
|
||||
| departureField | string | `"departure"` | 출발지 저장 필드 |
|
||||
| destinationField | string | `"destination"` | 도착지 저장 필드 |
|
||||
| departureLabel | string | `"출발지"` | 출발지 라벨 |
|
||||
| destinationLabel | string | `"도착지"` | 도착지 라벨 |
|
||||
| showSwapButton | boolean | `true` | 교환 버튼 표시 |
|
||||
| variant | string | `"card"` | UI: `card`/`inline`/`minimal` |
|
||||
|
||||
---
|
||||
|
||||
### 3.30 v2-rack-structure (창고 랙)
|
||||
|
||||
| 설정 | 타입 | 기본값 | 설명 |
|
||||
|------|------|--------|------|
|
||||
| maxConditions | number | `10` | 최대 조건 수 |
|
||||
| maxRows | number | `99` | 최대 열 수 |
|
||||
| maxLevels | number | `20` | 최대 단 수 |
|
||||
| codePattern | string | `"{warehouseCode}-{floor}{zone}-{row:02d}-{level}"` | 위치 코드 패턴 |
|
||||
| namePattern | string | `"{zone}구역-{row:02d}열-{level}단"` | 위치 이름 패턴 |
|
||||
| showTemplates | boolean | `true` | 템플릿 표시 |
|
||||
| showPreview | boolean | `true` | 미리보기 |
|
||||
| showStatistics | boolean | `true` | 통계 카드 |
|
||||
| readonly | boolean | `false` | 읽기 전용 |
|
||||
|
||||
---
|
||||
|
||||
### 3.31 v2-process-work-standard (공정 작업기준)
|
||||
|
||||
| 설정 | 타입 | 기본값 | 설명 |
|
||||
|------|------|--------|------|
|
||||
| dataSource.itemTable | string | `"item_info"` | 품목 테이블 |
|
||||
| dataSource.routingVersionTable | string | `"item_routing_version"` | 라우팅 버전 테이블 |
|
||||
| dataSource.routingDetailTable | string | `"item_routing_detail"` | 라우팅 디테일 테이블 |
|
||||
| dataSource.processTable | string | `"process_mng"` | 공정 테이블 |
|
||||
| splitRatio | number | `30` | 좌우 분할 비율 |
|
||||
| leftPanelTitle | string | `"품목 및 공정 선택"` | 좌측 패널 제목 |
|
||||
| readonly | boolean | `false` | 읽기 전용 |
|
||||
| itemListMode | string | `"all"` | 품목 모드: `all`/`registered` |
|
||||
|
||||
---
|
||||
|
||||
### 3.32 v2-item-routing (품목 라우팅)
|
||||
|
||||
| 설정 | 타입 | 기본값 | 설명 |
|
||||
|------|------|--------|------|
|
||||
| dataSource.itemTable | string | `"item_info"` | 품목 테이블 |
|
||||
| dataSource.routingVersionTable | string | `"item_routing_version"` | 라우팅 버전 테이블 |
|
||||
| dataSource.routingDetailTable | string | `"item_routing_detail"` | 라우팅 디테일 테이블 |
|
||||
| dataSource.processTable | string | `"process_mng"` | 공정 테이블 |
|
||||
| splitRatio | number | `40` | 좌우 분할 비율 |
|
||||
| leftPanelTitle | string | `"품목 목록"` | 좌측 제목 |
|
||||
| rightPanelTitle | string | `"공정 순서"` | 우측 제목 |
|
||||
| readonly | boolean | `false` | 읽기 전용 |
|
||||
| autoSelectFirstVersion | boolean | `true` | 첫 버전 자동 선택 |
|
||||
| itemListMode | string | `"all"` | 품목 모드: `all`/`registered` |
|
||||
|
||||
---
|
||||
|
||||
## 4. 패턴 의사결정 트리
|
||||
|
||||
```
|
||||
Q1. 시간축 기반 일정/간트차트? → v2-timeline-scheduler
|
||||
Q2. 다차원 피벗 분석? → v2-pivot-grid
|
||||
Q3. 그룹별 접기/펼치기? → v2-table-grouped
|
||||
Q4. 카드 형태 표시? → v2-card-display
|
||||
Q5. 마스터-디테일?
|
||||
├ 우측 멀티 탭? → v2-split-panel-layout + additionalTabs
|
||||
└ 단일 디테일? → v2-split-panel-layout
|
||||
Q6. 단일 테이블? → v2-table-search-widget + v2-table-list
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. 관계(relation) 레퍼런스
|
||||
|
||||
| 관계 유형 | 설정 |
|
||||
|----------|------|
|
||||
| 단순 FK | `{ type:"detail", leftColumn:"id", rightColumn:"{FK}", foreignKey:"{FK}" }` |
|
||||
| 복합 키 | `{ type:"detail", keys:[{ leftColumn:"a", rightColumn:"b" }] }` |
|
||||
| JOIN | `{ type:"join", leftColumn:"{col}", rightColumn:"{col}" }` |
|
||||
|
||||
## 6. 엔티티 조인
|
||||
|
||||
FK 컬럼에 참조 테이블의 이름을 표시:
|
||||
|
||||
**table_type_columns**: `input_type='entity'`, `detail_settings='{"referenceTable":"X","referenceColumn":"id","displayColumn":"name"}'`
|
||||
|
||||
**layout_data columns**: `{ name:"fk_col", isEntityJoin:true, joinInfo:{ sourceTable:"A", sourceColumn:"fk_col", referenceTable:"X", joinAlias:"name" } }`
|
||||
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue