28 KiB
V2 컴포넌트 사용 가이드 (LLM/챗봇용)
최종 업데이트: 2026-03-13 용도: LLM 챗봇이 화면 개발 요청을 받았을 때, 어떤 컴포넌트를 어떤 설정으로 사용해야 하는지 판단하는 레퍼런스 버전: 2.0.0 대상: AI 에이전트, 챗봇, 화면 설계자
0. 핵심 규칙 (반드시 준수)
- 사용자 업무 화면은 React 코드로 직접 만들지 않는다 → DB에
screen_definitions+screen_layouts_v2+menu_infoINSERT로 구현 - 모든 컴포넌트는
v2-접두사 →v2-없는 레거시 컴포넌트 사용 금지 - UI와 로직 분리 → UI는
screen_layouts_v2, 비즈니스 로직은dataflow_diagrams - 멀티테넌시 필수 → 모든 테이블에
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 배열 항목:
{
"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 구조:
{
"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 배열 항목:
{
"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 구조:
{
"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 (우측 패널에 멀티 탭 배치):
{
"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 항목 구조:
{
"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):
{
"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 예시:
{
"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 예시:
{
"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 배열 추가.
{
"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 설정 예시
시나리오: 수주 목록에서 [확정] 버튼 클릭 → 상태를 '확정'으로 변경 + 이력 테이블에 기록
{
"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
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
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
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 |