- EditModal: 저장 완료 후 자동으로 닫히고 부모 테이블 새로고침
- buttonActions.ts: 저장 성공 후 closeEditModal 이벤트 발생
- InteractiveScreenViewerDynamic: onSave prop 추가하여 EditModal 연동
- InteractiveDataTable: EditModal 열 때 onSave 콜백으로 loadData 전달
- 두 가지 시나리오 모두 지원:
1. InteractiveScreenViewerDynamic 버튼의 onSave 호출
2. DynamicComponentRenderer 버튼의 buttonActions.ts 처리
🐛 버그 수정
- 화면 목록으로 이동 버튼 클릭 후에도 3초 타이머가 계속 실행되던 문제 해결
- 빠르게 버튼 클릭 후 다른 화면 진입 시 다시 튕겨나는 현상 수정
�� 변경 내용
- useRef로 타이머 참조 저장 (autoRedirectTimerRef)
- 모달이 닫힐 때 타이머 정리 (clearTimeout)
- 컴포넌트 언마운트 시 타이머 정리
- '화면 목록으로 이동' 버튼 클릭 시 타이머 즉시 정리
📝 기술적 개선
- setTimeout 타이머를 useRef로 관리
- useEffect cleanup 함수에서 타이머 정리
- 버튼 onClick에서 타이머 수동 정리
✅ 결과
- 버튼 클릭 시 타이머가 즉시 정리됨
- 다른 화면으로 이동 후 3초 뒤 튕겨나지 않음
- 메모리 누수 방지
🐛 버그 수정
- 화면 저장 성공 모달의 버튼 텍스트가 검은색으로 표시되던 문제 해결
- '화면 목록으로 이동' 버튼에 text-white 추가
- '메뉴에 할당' 버튼에 text-white 추가
- '화면 교체' 버튼에 text-white 추가
🎨 변경 내용
- bg-green-600 → bg-green-600 text-white
- bg-blue-600 → bg-blue-600 text-white
- bg-orange-600 → bg-orange-600 text-white
📝 관련 파일
- frontend/components/screen/MenuAssignmentModal.tsx
✅ 결과
- 모든 버튼 텍스트가 흰색으로 정상 표시됨
🐛 버그 수정
- dynamicFormService.ts에서 ExecutionResult 타입 오류 해결
- executedNodes → nodes로 속성명 변경
- errors 속성을 nodes에서 추출하도록 수정
🔧 변경 내용
- executionResult.nodes를 사용하여 executedActions 생성
- 실패한 노드를 필터링하여 errors 배열 생성
- TypeScript 컴파일 오류 해결
📝 관련 이슈
- TS2339: Property 'executedNodes' does not exist on type 'ExecutionResult'
- TS2339: Property 'errors' does not exist on type 'ExecutionResult'
✨ 새로운 기능
- 테이블 타입 관리에 테이블 복제 기능 추가
- 기존 테이블의 설정과 컬럼 정보를 복사하여 새 테이블 생성
- 최고 관리자만 사용 가능 (company_code = '*' AND userType = 'SUPER_ADMIN')
- 테이블 1개 선택 시에만 복제 버튼 활성화
🎨 UI 개선
- 테이블 목록에 '테이블 복제' 버튼 추가 (Copy 아이콘)
- CreateTableModal을 복제 모드로 재사용
- 복제 모드 시 제목/설명/버튼 텍스트 동적 변경
- 원본 테이블 정보 자동 로드
🔧 기술적 개선
- CreateTableModal에 mode/sourceTableName props 추가
- 복제 모드 감지 및 데이터 자동 로드 로직 구현
- API 타입 정의 수정 (ColumnListData 인터페이스 추가)
- 백엔드 응답 구조와 프론트엔드 타입 일치화
🐛 버그 수정
- API 응답 구조 불일치 문제 해결
- ColumnListResponse 타입 수정 (배열 → 객체)
- 데이터 파싱 로직 수정 (data.columns 접근)
- 디버그 로그 추가로 문제 추적 개선
📝 변경된 파일
- frontend/app/(main)/admin/tableMng/page.tsx
- frontend/components/admin/CreateTableModal.tsx
- frontend/lib/api/tableManagement.ts
- frontend/types/ddl.ts
- 테이블_복제_기능_구현_계획서.md (신규)
✅ 테스트 완료
- 최고 관리자 권한 체크
- 테이블 정보 로드
- 컬럼 정보 복제
- 새 테이블명 입력 및 검증
- 테이블 생성 및 목록 갱신
- frontend: screen.ts에 saveScreenLayout 함수 추가 (ScreenDesigner_new.tsx가 호출하던 누락된 함수)
- frontend: ScreenDesigner_new.tsx 저장 시 디버깅 로그 추가
- backend: screenManagementService.ts에 dataflowConfig 저장 확인 로그 추가
문제 원인:
- ScreenDesigner_new.tsx가 호출하던 screenApi.saveScreenLayout 함수가 정의되지 않음
- 이로 인해 레이아웃 저장이 실패했을 가능성
해결:
- saveScreenLayout 함수를 추가하여 정상적인 레이아웃 저장 가능
- 디버깅 로그를 통해 실제로 selectedDiagramId가 저장되는지 확인 가능
프론트엔드:
- ImprovedButtonControlConfigPanel에서 selectedDiagramId 저장 추가
- 플로우 선택 시 flowConfig와 함께 selectedDiagramId도 저장
- selectedRelationshipId는 null로 설정 (노드 플로우는 관계 불필요)
백엔드:
- dynamicFormService에서 relationshipId 유무에 따라 실행 방식 분기
- relationshipId가 없으면 NodeFlowExecutionService.executeFlow() 실행
- relationshipId가 있으면 기존 dataflowControlService.executeDataflowControl() 실행
- 노드 플로우 실행 시 formData를 contextData로 전달
원인:
- 기존에는 flowConfig만 저장하고 selectedDiagramId를 저장하지 않음
- 백엔드에서 selectedDiagramId가 없어서 제어관리 실행 조건 불만족
- 관계 기반 제어와 노드 플로우를 구분하지 못함
- 화면 관리 페이지에서 position.x === 0인 컴포넌트가 100% 너비로 표시되도록 수정
- 대시보드 뷰어에서 부모 컨테이너의 maxWidth 제한 제거하여 화면 전체 너비 활용
- AppLayout의 main 영역에 16px 내부 패딩 적용
- RealtimePreview 및 RealtimePreviewDynamic 컴포넌트에서 좌측 정렬 컴포넌트 너비 자동 조정
- 모바일 환경에서 화면 스케일링 비활성화 (반응형만 작동)
- table-mobile-fixed CSS 클래스 추가로 모바일 테이블 레이아웃 개선
- useResponsive 훅 추가로 반응형 감지 기능 구현
- 플로우 위젯 단계 박스 미니멀 디자인 적용
- 테두리와 배경 제거, 하단 선만 표시
- STEP 배지 제거, 단계명과 건수 상하 배치
- 선택 인디케이터(ChevronUp) 제거
- 건수 폰트 굵기 조정 (font-medium)
- 검색 필터 기능 개선
- 그리드 컬럼 수 확장 (최대 6개까지)
- 상단 타이틀과 검색 필터 사이 여백 조정
- 검색 필터 설정 시 표시되는 컬럼만 선택 가능하도록 변경
- 필터 설정을 사용자별로 저장하도록 변경
- 이전 사용자의 필터 설정 자동 정리 로직 추가
- 기본 버튼 컴포넌트 스타일 변경
- 배경 흰색, 검정 테두리로 변경
- 외부 커넥션 관리 테이블 표준화 (DB 연결, REST API 연결)
- 모든 관리자 테이블의 그림자 제거 (테이블 타입 관리 왼쪽 카드 제외)
- 테이블 타입 관리 왼쪽 카드 호버 효과 강화 (shadow-lg, bg-muted/20)
- 탭 컴포넌트 배경색 밝게 조정 (bg-muted/30)
- 탭 트리거 테두리 제거
- 테이블 삭제 방식을 체크박스 선택 기반 일괄 삭제로 변경
- 좌측 테이블 리스트 영역에 스크롤 적용
- 선택된 테이블에 검정 테두리 표시 (border-2 border-black)
- 우측 상단 타이틀 제거
- 각 테이블 카드에 라운딩 적용 (rounded-lg)
- 컬럼 간 간격 개선 (입력 타입-상세 설정 간격 증가)
- Entity 설정 박스 스타일 제거 (평면적 레이아웃으로 변경)
- 좌측 영역 우측 여백 조정 (pr-4)
- 모든 테이블 헤더의 회색 배경 제거 (bg-muted/50 → bg-background)
- 모든 테이블 행의 홀수 행 회색 배경 제거 (모든 행을 흰색 배경으로 통일)
- 호버 시에만 회색 배경이 나타나도록 통일
- TableListComponent, SingleTableWithSticky, 모든 관리자 테이블 컴포넌트에 적용
- 테이블 구조 표준화 문서 업데이트
- 모든 테이블 컴포넌트의 외곽 테두리(border) 제거
- 테이블 컨테이너의 라운드(rounded-lg) 제거
- 테이블 행 구분선(border-b)은 유지하여 데이터 구분
- FlowWidget과 TableListComponent에 동일한 스타일 적용
- 검색 필터 영역의 회색 배경(bg-muted/30) 제거
- 검색 필터 제목 제거
- AdvancedSearchFilters 컴포넌트의 '검색 필터' 제목 제거