✅ 주요 변경사항:
- 백엔드: menuService.ts 추가 (형제 메뉴 조회 유틸리티)
- 백엔드: numberingRuleService.getAvailableRulesForMenu() 메뉴 스코프 적용
- 백엔드: tableCategoryValueService 메뉴 스코프 준비 (menuObjid 파라미터 추가)
- 프론트엔드: TextInputConfigPanel에 부모 메뉴 선택 UI 추가
- 프론트엔드: 메뉴별 채번규칙 필터링 (형제 메뉴 공유)
🔧 기술 세부사항:
- getSiblingMenuObjids(): 같은 부모를 가진 형제 메뉴 OBJID 조회
- 채번규칙 우선순위: menu (형제) > table > global
- 사용자 메뉴(menu_type='1') 레벨 2만 부모 메뉴로 선택 가능
📝 다음 단계:
- 카테고리 컴포넌트도 메뉴 스코프로 전환 예정
- 메뉴 클릭 시 localStorage에 메뉴 이름 저장 (useMenu, AppLayout)
- 엑셀 다운로드 시 localStorage의 메뉴 이름을 파일명으로 사용
- 백엔드 카테고리 컬럼 조회 쿼리 파라미터 버그 수정
- API 호출 시 불필요한 autoFilter 파라미터 제거
파일명 형식: {메뉴이름}_{날짜}.xlsx
예시: 품목등록테스트_2025-11-11.xlsx
- 데이터 행에 font-normal 적용하여 bold 제거
- 헤더는 font-bold 유지
- 데이터 행 상하 여백 축소 (py-2 → py-1.5)
- 행 고정 높이 제거하여 컨텐츠에 따라 자동 조정
변경된 파일:
- frontend/lib/registry/components/table-list/TableListComponent.tsx
- inputType이 date/datetime인 컬럼 yyyy-mm-dd 형식으로 표시
- format이 'date'인 경우도 동일한 형식 적용
- 생성일, 수정일 등 날짜 컬럼 가독성 개선
변경된 파일:
- frontend/lib/registry/components/table-list/TableListComponent.tsx
- 화면 편집기 컬럼 설정 기반 다운로드 (visible 컬럼만)
- 필터 조건 적용 (필터링된 데이터만 다운로드)
- 한글 라벨명 표시 (column_labels 테이블 조회)
- Entity 조인 값 표시 (writer → writer_name 등)
- 카테고리 타입 라벨 변환 (코드 → 라벨)
- 멀티테넌시 보안 강화 (autoFilter: true)
- 디버깅 로그 정리
변경된 파일:
- frontend/lib/utils/buttonActions.ts
- frontend/lib/registry/components/table-list/TableListComponent.tsx
관련 이슈: #엑셀다운로드개선
- writer 컬럼이 있는 테이블에서 자동으로 user_name 표시
- 백엔드: entityJoinService에서 writer 컬럼 감지 및 user_info 조인
- 프론트엔드: entityJoinApi 항상 사용 및 writer_name 자동 표시
- 디버깅 로그 제거
- 문제: writer 컬럼이 user_name으로 변환되지 않음
- 원인: entityJoinColumns가 없을 때 tableTypeApi 사용 (entity 조인 미지원)
- 해결: 항상 entityJoinApi.getTableDataWithJoins 사용
- 영향:
- writer 컬럼이 있는 모든 테이블에서 자동으로 writer_name 조인
- 기존 additionalJoinColumns도 정상 작동
- 백엔드의 자동 writer 조인 기능 활성화
- 문제: 테이블 리스트에서 writer 컬럼이 user_id로 표시됨
- 해결:
1. 백엔드: entityJoinService에서 writer 컬럼 자동 감지
2. writer 컬럼 발견 시 user_info 테이블과 자동 조인
3. writer_name 별칭으로 user_name 반환
4. 프론트엔드: writer 컬럼일 때 writer_name 우선 표시
- 영향:
- writer 컬럼이 있는 모든 테이블에서 자동으로 작성자명 표시
- 기존 entity 조인 설정과 충돌 없이 작동
- column_labels 설정 불필요
- 문제: 속성 패널에서 너비/높이 입력 시 격자 시스템이 자동으로 값을 변경
- 원인: updateComponentProperty에서 size.width/height 변경 시 무조건 격자 스냅 적용
- 해결: 직접 입력 시에는 격자 스냅을 적용하지 않도록 로직 주석 처리
- 영향:
- 속성 패널에서 원하는 크기로 자유롭게 설정 가능
- 드래그/리사이즈 시에는 별도 로직에서 격자 스냅 처리
- 디버깅 로그 제거
- 문제: 버튼 컴포넌트 클릭 시 버튼 동작이 실행되어 선택되지 않음
- 해결:
1. ButtonPrimaryComponent에서 디자인 모드일 때 <button> 대신 <div>로 렌더링
2. ScreenDesigner의 ScreenPreviewProvider에서 isPreviewMode를 false로 설정
3. 디자인 모드에서는 버튼 액션이 실행되지 않고 onClick만 전달되도록 수정
- 영향: button-primary 타입 버튼이 화면 편집기에서 정상적으로 선택 가능
- 드래그 드롭으로 배치되는 인풋 필드 기본 높이 30px로 변경
- 날짜 입력 컴포넌트의 모든 외부 div에 h-full 추가
- 모든 input 요소에 min-h-full 추가하여 부모 높이를 제대로 따르도록 수정
- daterange, year 타입도 동일하게 적용
- 데이터 조회 API에 회사별 자동 필터링 기능 추가
- GET /api/data/:tableName에 company_code 필터 자동 적용
- GET /api/data/join에 우측 테이블 회사별 필터링 추가
- 최고 관리자(company_code = '*')는 전체 데이터 조회 가능
- 분할 패널 레이아웃 우측 추가 시 조인 컬럼 자동 입력
- 좌측에서 선택한 항목의 조인 키 값을 우측 추가 모달에 자동 설정
- 자동 설정된 필드는 읽기 전용으로 표시 (disabled + 안내 문구)
- 사용자는 나머지 필드만 입력하면 됨
- 데이터 서비스 개선
- getJoinedData 함수에 companyCode 파라미터 추가
- checkColumnExists 함수를 public으로 변경하여 재사용성 향상
- 조인 쿼리에 DISTINCT 추가로 중복 데이터 방지
- 복합키 테이블의 레코드 삭제 지원
- 레코드 생성 시 멀티테넌시 자동 처리
- company_code와 company_name 자동 추가
- 테이블 컬럼 존재 여부 체크 후 자동 설정
- 분할 패널 설정 UI 개선
- 좌측 패널 표시 컬럼 선택 UI 추가
- 추가 폼에 표시할 컬럼 선택 기능 추가
- Primary Key 정보 자동 조회 및 표시
주요 변경사항:
- 드래그앤드롭 컬럼의 라벨 숨김 및 placeholder로 라벨명 표시
- 기본 높이 30px로 변경
- 5개 시스템 컬럼(id, created_date, updated_date, writer, company_code) 숨김
- AI-개발자 협업 작업 수칙 문서 작성 및 .cursorrules에 통합
파일 변경:
- frontend/components/screen/ScreenDesigner.tsx
* getDefaultHeight(): 기본 높이를 30px로 변경
* handleDrop(): labelDisplay false, placeholder 추가
- frontend/components/screen/panels/TablesPanel.tsx
* hiddenColumns Set으로 시스템 컬럼 필터링
- .cursor/rules/ai-developer-collaboration-rules.mdc (신규)
* 확인 우선, 한 번에 하나, 철저한 마무리 원칙
* 데이터베이스 검증, 코드 수정, 테스트, 커뮤니케이션 규칙
- .cursorrules
* 필수 확인 규칙 섹션 추가
* 모든 작업 시작/완료 시 협업 규칙 확인 강제화
- 채번 규칙 scope_type을 table로 단순화
- 화면의 테이블명을 자동으로 감지하여 채번 규칙 필터링
- TextInputConfigPanel에 screenTableName prop 추가
- getAvailableNumberingRulesForScreen API로 테이블 기반 조회
- NumberingRuleDesigner에서 자동으로 테이블명 설정
- webTypeConfigConverter 유틸리티 추가 (기존 화면 호환성)
- AutoGenerationConfig 타입 개선 (enabled, options.numberingRuleId)
- 채번 규칙 선택 UI에서 ID 제거, 설명 추가
- 불필요한 console.log 제거
Backend:
- numberingRuleService: 테이블 기반 필터링 로직 구현
- numberingRuleController: available-for-screen 엔드포인트 수정
Frontend:
- TextInputConfigPanel: 테이블명 기반 채번 규칙 로드
- NumberingRuleDesigner: 적용 범위 UI 제거, 테이블명 자동 설정
- ScreenDesigner: webTypeConfig → autoGeneration 변환 로직 통합
- DetailSettingsPanel: autoGeneration 속성 매핑 개선
문제:
- 고정 높이 (h-[400px] sm:h-[500px])로 인해 데이터가 적어도 큰 공간 차지
- 하단에 빈 공간이 남는데도 스크롤이 생기는 비효율적인 UX
- overflow-y-scroll이 항상 스크롤바를 표시함
해결:
- 고정 높이 제거 → flex-1 (부모의 남은 공간 차지)
- overflow-y-scroll → overflow-y-auto (필요할 때만 스크롤)
- 데이터 양에 따라 자동으로 높이 조정
개선 사항:
✅ 데이터가 적을 때: 불필요한 공간 없이 컴팩트하게 표시
✅ 데이터가 많을 때: 자동으로 스크롤 생성
✅ 반응형 레이아웃에 자연스럽게 적응
✅ 스크롤바가 필요할 때만 표시되어 깔끔한 UI
문제:
- 그룹 헤더의 bg-muted/50 (반투명 배경)으로 인해 스크롤 시 뒤 내용이 비쳐 보임
- sticky 위치에서 가독성 저하
해결:
- bg-muted/50 → bg-muted (불투명 배경)
- hover 효과도 hover:bg-muted → hover:bg-muted/80으로 조정
- 스크롤 시 깔끔한 가림 효과 제공
개선 사항:
- sticky 그룹 헤더의 완전한 배경 덮기
- 스크롤 시 가독성 향상
- shadcn 가이드라인 준수 (단색 배경)