feat: 화면 디자이너 모달 및 제어 관리 탭 기능 추가

- 화면 설정 모달에 "제어 관리" 탭 추가하여 버튼 제어 설정을 간편하게 관리
- 버튼 액션 설정 기능 구현: 버튼 목록 표시 및 각 버튼의 액션 타입 수정 가능
- 화면 디자이너 모달 통합: 전체화면 Dialog 내부에 ScreenDesigner 임베드
- URL 쿼리 파라미터로 화면 디자이너 자동 열기 기능 추가
- 화면 캔버스 크기 자동 조절 기능 구현: 최소 크기 보장 및 여유 마진 추가
- 필드 추가/제거 기능 개선: 기존 그리드 컬럼 변경 로직과 통합하여 사용자 경험 향상
This commit is contained in:
DDD1542
2026-01-14 14:35:27 +09:00
parent 905a9f62c3
commit f321aaf7aa
12 changed files with 3022 additions and 1124 deletions

View File

@@ -1010,7 +1010,8 @@ export const getMultipleScreenLayoutSummary = async (req: Request, res: Response
properties->'componentConfig'->>'bindField',
properties->>'bindField',
properties->'componentConfig'->>'field',
properties->>'field'
properties->>'field',
properties->>'columnName'
) as bind_field,
-- componentConfig 전체 (JavaScript에서 다양한 패턴 파싱용)
properties->'componentConfig' as component_config
@@ -1113,6 +1114,17 @@ export const getMultipleScreenLayoutSummary = async (req: Request, res: Response
}
}
// 4. bindField가 있으면 usedColumns에 추가 (인풋 필드, 텍스트 필드 등)
if (row.bind_field && !usedColumns.includes(row.bind_field)) {
usedColumns.push(row.bind_field);
}
// 5. componentConfig.field 또는 componentConfig.valueField도 추가
const configField = componentConfig.field || componentConfig.valueField;
if (configField && typeof configField === 'string' && !usedColumns.includes(configField)) {
usedColumns.push(configField);
}
if (summaryMap[screenId]) {
summaryMap[screenId].widgetCounts[componentKind] =
(summaryMap[screenId].widgetCounts[componentKind] || 0) + 1;