다크모드
호스피탈리티 룸 마스터 프론트엔드 유지보수
구성
text
hospitalityRoomMasterRepo.js
├─ list_hospitality_room_master_v1
├─ create_hospitality_room_master_v1
└─ update_hospitality_room_master_v1
useRooms.js
├─ room master + room operations Office scope 공유
├─ create/update request key 재사용
└─ masterRevision과 operation revision 분리
master/room/general/MainOrg.vue
├─ 선택 room id 소유
├─ SheetCreateRoomArt
└─ SheetReadRoomArt(read↔edit 단일 시트)화면 흐름
페이지 mount에서 loadRoomTypes()와 loadRoomMaster()를 함께 실행해 active 룸 타입, 연결 가능 공간과 운영 projection을 읽는다. 테이블은 룸 타입 → 룸 등록코드 → 룸명 → 프로퍼티 공간 → 상태 순서이며, 별도 상세 버튼 없이 룸명 클릭으로 선택 row의 상세 시트를 연다.
생성 시트는 프로퍼티 공간·룸 등록코드·관리코드·룸명·룸 타입·상태를 받는다. 연결할 공간은 아직 다른 룸에 할당되지 않은 활성 객실·회의실·데스크만 보이고, 타입은 현재 Office의 active 서버 타입만 보인다. 관리코드는 선택 입력이며 비우면 서버가 만든다.
상세 시트는 SheetUpdate 듀얼을 두지 않고 read↔edit를 제자리에서 전환한다. 편집 모드에서 등록코드·관리코드·프로퍼티 공간은 disabled이고 룸명·룸 타입·인벤토리 상태만 수정한다. active 타입만 새 값으로 선택할 수 있지만, 현재 값이 inactive라면 라벨을 보존해 다른 필드만 편집할 수 있다. 저장은 valid && dirty일 때만 활성화한다. dirty 상태의 취소·닫기는 공용 dialog-cancel-art 확인 후 draft를 버린다.
데이터 계약
hospitalityRoomOperationsRepo normalize 결과는 다음 revision을 구분한다.
masterRevision: 룸 정의 수정 optimistic concurrencyrevision: 청소 배정·완료·검수 optimistic concurrency
등록코드는 registrationCode, 관리코드는 managementCode, 공간 UUID는 propertySpaceId다. 시스템 UUID는 목록·상세에 표시하지 않는다. 생성·수정 성공 뒤 master와 operations를 다시 불러오므로 룸 상태 보드·하우스키핑도 같은 row를 소비한다.
디자인·경계
MDS 0.10의 sheet, field, Select, table, badge, alert만 사용하며 로컬 CSS는 없다. 세로 상세은 sheet-width-3xl, 2단 편집 field grid를 사용한다. 일괄 업로드·다운로드와 선택 checkbox는 실제 action이 없어 표시하지 않는다.
시설·회계·전자결재 composable을 import하지 않는다. 프로퍼티 공간은 플랫폼 코어 identity로만 참조하며 Hospitality 원장은 독립적으로 동작한다.
테스트와 잔여
hospitalityRoomMasterRepo.spec.jshospitalityRoomMasterMigration.spec.jshospitalityRoomMasterUi.spec.jshospitality_room_master_smoke.sql
실시간 구독, 특성·요금의 별도 서버 subledger, CSV 일괄 업로드, 연결룸·컴포넌트 스위트는 후속이다. 서버 query 계약이 없는 검색·필터·페이지네이션 shell은 렌더링에서 제거했다.