11
This commit is contained in:
@@ -0,0 +1,50 @@
|
|||||||
|
- generic [active] [ref=e1]:
|
||||||
|
- generic [ref=e2]:
|
||||||
|
- generic [ref=e3]:
|
||||||
|
- button "사이드바 접기/펼치기" [ref=e4] [cursor=pointer]:
|
||||||
|
- img [ref=e5]
|
||||||
|
- generic [ref=e7]:
|
||||||
|
- generic [ref=e8]: W
|
||||||
|
- generic [ref=e9]: WACE 솔루션
|
||||||
|
- generic [ref=e10]:
|
||||||
|
- generic [ref=e12] [cursor=pointer]:
|
||||||
|
- img [ref=e13]
|
||||||
|
- generic [ref=e16]: 대시보드
|
||||||
|
- generic [ref=e17] [cursor=pointer]:
|
||||||
|
- generic [ref=e18]:
|
||||||
|
- img [ref=e19]
|
||||||
|
- generic [ref=e24]: 사용자 관리
|
||||||
|
- img [ref=e25]
|
||||||
|
- generic [ref=e27] [cursor=pointer]:
|
||||||
|
- generic [ref=e28]:
|
||||||
|
- img [ref=e29]
|
||||||
|
- generic [ref=e31]: 제품 관리
|
||||||
|
- img [ref=e32]
|
||||||
|
- generic [ref=e35] [cursor=pointer]:
|
||||||
|
- img [ref=e36]
|
||||||
|
- generic [ref=e37]: 통계/분석
|
||||||
|
- generic [ref=e38] [cursor=pointer]:
|
||||||
|
- generic [ref=e39]:
|
||||||
|
- img [ref=e40]
|
||||||
|
- generic [ref=e43]: 시스템 설정
|
||||||
|
- img [ref=e44]
|
||||||
|
- generic [ref=e47] [cursor=pointer]:
|
||||||
|
- generic [ref=e48]: 박
|
||||||
|
- generic [ref=e49]:
|
||||||
|
- generic [ref=e50]: 박개발
|
||||||
|
- generic [ref=e51]: 개발팀
|
||||||
|
- generic [ref=e52]:
|
||||||
|
- generic [ref=e54]: 대시보드
|
||||||
|
- generic [ref=e55]: 컨텐츠 영역
|
||||||
|
- generic [ref=e56]:
|
||||||
|
- strong [ref=e57]: 사이드바 프로토타입
|
||||||
|
- text: • 사이드바 우측
|
||||||
|
- strong [ref=e58]: ◀ 버튼
|
||||||
|
- text: 을 클릭하면 축소
|
||||||
|
- text: • 축소 상태에서 아이콘
|
||||||
|
- strong [ref=e59]: hover → 툴팁
|
||||||
|
- text: 표시
|
||||||
|
- text: • 하위 메뉴가 있는 아이콘
|
||||||
|
- strong [ref=e60]: 클릭 → 플라이아웃
|
||||||
|
- text: 팝업
|
||||||
|
- text: • 리프 메뉴 아이콘 클릭 → 바로 이동
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
- generic [active] [ref=e1]:
|
||||||
|
- generic [ref=e2]:
|
||||||
|
- generic [ref=e3]:
|
||||||
|
- button "사이드바 접기/펼치기" [ref=e4] [cursor=pointer]:
|
||||||
|
- img [ref=e5]
|
||||||
|
- generic [ref=e7]:
|
||||||
|
- generic [ref=e8]: W
|
||||||
|
- generic [ref=e9]: WACE 솔루션
|
||||||
|
- generic [ref=e10]:
|
||||||
|
- generic [ref=e12] [cursor=pointer]:
|
||||||
|
- img [ref=e13]
|
||||||
|
- generic [ref=e16]: 대시보드
|
||||||
|
- generic [ref=e17] [cursor=pointer]:
|
||||||
|
- generic [ref=e18]:
|
||||||
|
- img [ref=e19]
|
||||||
|
- generic [ref=e24]: 사용자 관리
|
||||||
|
- img [ref=e25]
|
||||||
|
- generic [ref=e27] [cursor=pointer]:
|
||||||
|
- generic [ref=e28]:
|
||||||
|
- img [ref=e29]
|
||||||
|
- generic [ref=e31]: 제품 관리
|
||||||
|
- img [ref=e32]
|
||||||
|
- generic [ref=e35] [cursor=pointer]:
|
||||||
|
- img [ref=e36]
|
||||||
|
- generic [ref=e37]: 통계/분석
|
||||||
|
- generic [ref=e38] [cursor=pointer]:
|
||||||
|
- generic [ref=e39]:
|
||||||
|
- img [ref=e40]
|
||||||
|
- generic [ref=e43]: 시스템 설정
|
||||||
|
- img [ref=e44]
|
||||||
|
- generic [ref=e47] [cursor=pointer]:
|
||||||
|
- generic [ref=e48]: 박
|
||||||
|
- generic [ref=e49]:
|
||||||
|
- generic [ref=e50]: 박개발
|
||||||
|
- generic [ref=e51]: 개발팀
|
||||||
|
- generic [ref=e52]:
|
||||||
|
- generic [ref=e54]: 대시보드
|
||||||
|
- generic [ref=e55]: 컨텐츠 영역
|
||||||
|
- generic [ref=e56]:
|
||||||
|
- strong [ref=e57]: 사이드바 프로토타입
|
||||||
|
- text: • 사이드바 우측
|
||||||
|
- strong [ref=e58]: ◀ 버튼
|
||||||
|
- text: 을 클릭하면 축소
|
||||||
|
- text: • 축소 상태에서 아이콘
|
||||||
|
- strong [ref=e59]: hover → 툴팁
|
||||||
|
- text: 표시
|
||||||
|
- text: • 하위 메뉴가 있는 아이콘
|
||||||
|
- strong [ref=e60]: 클릭 → 플라이아웃
|
||||||
|
- text: 팝업
|
||||||
|
- text: • 리프 메뉴 아이콘 클릭 → 바로 이동
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
- generic [ref=e1]:
|
||||||
|
- generic [ref=e2]:
|
||||||
|
- generic [ref=e3]:
|
||||||
|
- button "사이드바 접기/펼치기" [active] [ref=e4] [cursor=pointer]:
|
||||||
|
- img [ref=e5]
|
||||||
|
- generic [ref=e8]: W
|
||||||
|
- generic [ref=e61]:
|
||||||
|
- generic [ref=e62] [cursor=pointer]:
|
||||||
|
- img [ref=e63]
|
||||||
|
- generic: 대시보드
|
||||||
|
- generic [ref=e66] [cursor=pointer]:
|
||||||
|
- img [ref=e67]
|
||||||
|
- generic: 사용자 관리
|
||||||
|
- generic [ref=e72] [cursor=pointer]:
|
||||||
|
- img [ref=e73]
|
||||||
|
- generic: 제품 관리
|
||||||
|
- generic [ref=e75] [cursor=pointer]:
|
||||||
|
- img [ref=e76]
|
||||||
|
- generic: 통계/분석
|
||||||
|
- generic [ref=e77] [cursor=pointer]:
|
||||||
|
- img [ref=e78]
|
||||||
|
- generic: 시스템 설정
|
||||||
|
- generic [ref=e48] [cursor=pointer]: 박
|
||||||
|
- generic [ref=e52]:
|
||||||
|
- generic [ref=e54]: 대시보드
|
||||||
|
- generic [ref=e55]: 컨텐츠 영역
|
||||||
|
- generic [ref=e56]:
|
||||||
|
- strong [ref=e57]: 사이드바 프로토타입
|
||||||
|
- text: • 사이드바 우측
|
||||||
|
- strong [ref=e58]: ◀ 버튼
|
||||||
|
- text: 을 클릭하면 축소
|
||||||
|
- text: • 축소 상태에서 아이콘
|
||||||
|
- strong [ref=e59]: hover → 툴팁
|
||||||
|
- text: 표시
|
||||||
|
- text: • 하위 메뉴가 있는 아이콘
|
||||||
|
- strong [ref=e60]: 클릭 → 플라이아웃
|
||||||
|
- text: 팝업
|
||||||
|
- text: • 리프 메뉴 아이콘 클릭 → 바로 이동
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
- generic [active] [ref=e1]:
|
||||||
|
- generic [ref=e2]:
|
||||||
|
- generic [ref=e3]:
|
||||||
|
- button "사이드바 접기/펼치기" [ref=e4] [cursor=pointer]:
|
||||||
|
- img [ref=e5]
|
||||||
|
- generic [ref=e8]: W
|
||||||
|
- generic [ref=e61]:
|
||||||
|
- generic [ref=e62] [cursor=pointer]:
|
||||||
|
- img [ref=e63]
|
||||||
|
- generic: 대시보드
|
||||||
|
- generic [ref=e66] [cursor=pointer]:
|
||||||
|
- img [ref=e67]
|
||||||
|
- generic: 사용자 관리
|
||||||
|
- generic [ref=e81]:
|
||||||
|
- generic [ref=e82]: 사용자 관리
|
||||||
|
- generic [ref=e83]:
|
||||||
|
- img [ref=e84]
|
||||||
|
- text: 사용자 목록
|
||||||
|
- generic [ref=e87]:
|
||||||
|
- img [ref=e88]
|
||||||
|
- text: 권한 설정
|
||||||
|
- generic [ref=e91]:
|
||||||
|
- img [ref=e92]
|
||||||
|
- text: 부서 관리
|
||||||
|
- generic [ref=e72] [cursor=pointer]:
|
||||||
|
- img [ref=e73]
|
||||||
|
- generic: 제품 관리
|
||||||
|
- generic [ref=e75] [cursor=pointer]:
|
||||||
|
- img [ref=e76]
|
||||||
|
- generic: 통계/분석
|
||||||
|
- generic [ref=e77] [cursor=pointer]:
|
||||||
|
- img [ref=e78]
|
||||||
|
- generic: 시스템 설정
|
||||||
|
- generic [ref=e48] [cursor=pointer]: 박
|
||||||
|
- generic [ref=e52]:
|
||||||
|
- generic [ref=e54]: 대시보드
|
||||||
|
- generic [ref=e55]: 컨텐츠 영역
|
||||||
|
- generic [ref=e56]:
|
||||||
|
- strong [ref=e57]: 사이드바 프로토타입
|
||||||
|
- text: • 사이드바 우측
|
||||||
|
- strong [ref=e58]: ◀ 버튼
|
||||||
|
- text: 을 클릭하면 축소
|
||||||
|
- text: • 축소 상태에서 아이콘
|
||||||
|
- strong [ref=e59]: hover → 툴팁
|
||||||
|
- text: 표시
|
||||||
|
- text: • 하위 메뉴가 있는 아이콘
|
||||||
|
- strong [ref=e60]: 클릭 → 플라이아웃
|
||||||
|
- text: 팝업
|
||||||
|
- text: • 리프 메뉴 아이콘 클릭 → 바로 이동
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
- generic [active] [ref=e1]:
|
||||||
|
- generic [ref=e2]:
|
||||||
|
- generic [ref=e3]:
|
||||||
|
- button "사이드바 접기/펼치기" [ref=e4] [cursor=pointer]:
|
||||||
|
- img [ref=e5]
|
||||||
|
- generic [ref=e7]:
|
||||||
|
- generic [ref=e8]: W
|
||||||
|
- generic [ref=e9]: WACE 솔루션
|
||||||
|
- generic [ref=e10]:
|
||||||
|
- generic [ref=e12] [cursor=pointer]:
|
||||||
|
- img [ref=e13]
|
||||||
|
- generic [ref=e16]: 대시보드
|
||||||
|
- generic [ref=e17] [cursor=pointer]:
|
||||||
|
- generic [ref=e18]:
|
||||||
|
- img [ref=e19]
|
||||||
|
- generic [ref=e24]: 사용자 관리
|
||||||
|
- img [ref=e25]
|
||||||
|
- generic [ref=e27] [cursor=pointer]:
|
||||||
|
- generic [ref=e28]:
|
||||||
|
- img [ref=e29]
|
||||||
|
- generic [ref=e31]: 제품 관리
|
||||||
|
- img [ref=e32]
|
||||||
|
- generic [ref=e35] [cursor=pointer]:
|
||||||
|
- img [ref=e36]
|
||||||
|
- generic [ref=e37]: 통계/분석
|
||||||
|
- generic [ref=e38] [cursor=pointer]:
|
||||||
|
- generic [ref=e39]:
|
||||||
|
- img [ref=e40]
|
||||||
|
- generic [ref=e43]: 시스템 설정
|
||||||
|
- img [ref=e44]
|
||||||
|
- generic [ref=e47] [cursor=pointer]:
|
||||||
|
- generic [ref=e48]: 박
|
||||||
|
- generic [ref=e49]:
|
||||||
|
- generic [ref=e50]: 박개발
|
||||||
|
- generic [ref=e51]: 개발팀
|
||||||
|
- generic [ref=e52]:
|
||||||
|
- generic [ref=e54]: 대시보드
|
||||||
|
- generic [ref=e55]: 컨텐츠 영역
|
||||||
|
- generic [ref=e56]:
|
||||||
|
- strong [ref=e57]: 사이드바 프로토타입
|
||||||
|
- text: • 사이드바 우측
|
||||||
|
- strong [ref=e58]: ◀ 버튼
|
||||||
|
- text: 을 클릭하면 축소
|
||||||
|
- text: • 축소 상태에서 아이콘
|
||||||
|
- strong [ref=e59]: hover → 툴팁
|
||||||
|
- text: 표시
|
||||||
|
- text: • 하위 메뉴가 있는 아이콘
|
||||||
|
- strong [ref=e60]: 클릭 → 플라이아웃
|
||||||
|
- text: 팝업
|
||||||
|
- text: • 리프 메뉴 아이콘 클릭 → 바로 이동
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
- generic [ref=e1]:
|
||||||
|
- generic [ref=e2]:
|
||||||
|
- generic [ref=e3]:
|
||||||
|
- button "사이드바 접기/펼치기" [active] [ref=e4] [cursor=pointer]:
|
||||||
|
- img [ref=e5]
|
||||||
|
- generic [ref=e8]: W
|
||||||
|
- generic [ref=e61]:
|
||||||
|
- generic [ref=e62] [cursor=pointer]:
|
||||||
|
- img [ref=e63]
|
||||||
|
- generic: 대시보드
|
||||||
|
- generic [ref=e66] [cursor=pointer]:
|
||||||
|
- img [ref=e67]
|
||||||
|
- generic: 사용자 관리
|
||||||
|
- generic [ref=e72] [cursor=pointer]:
|
||||||
|
- img [ref=e73]
|
||||||
|
- generic: 제품 관리
|
||||||
|
- generic [ref=e75] [cursor=pointer]:
|
||||||
|
- img [ref=e76]
|
||||||
|
- generic: 통계/분석
|
||||||
|
- generic [ref=e77] [cursor=pointer]:
|
||||||
|
- img [ref=e78]
|
||||||
|
- generic: 시스템 설정
|
||||||
|
- generic [ref=e48] [cursor=pointer]: 박
|
||||||
|
- generic [ref=e52]:
|
||||||
|
- generic [ref=e54]: 대시보드
|
||||||
|
- generic [ref=e55]: 컨텐츠 영역
|
||||||
|
- generic [ref=e56]:
|
||||||
|
- strong [ref=e57]: 사이드바 프로토타입
|
||||||
|
- text: • 사이드바 우측
|
||||||
|
- strong [ref=e58]: ◀ 버튼
|
||||||
|
- text: 을 클릭하면 축소
|
||||||
|
- text: • 축소 상태에서 아이콘
|
||||||
|
- strong [ref=e59]: hover → 툴팁
|
||||||
|
- text: 표시
|
||||||
|
- text: • 하위 메뉴가 있는 아이콘
|
||||||
|
- strong [ref=e60]: 클릭 → 플라이아웃
|
||||||
|
- text: 팝업
|
||||||
|
- text: • 리프 메뉴 아이콘 클릭 → 바로 이동
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
- generic [active] [ref=e1]:
|
||||||
|
- generic [ref=e2]:
|
||||||
|
- generic [ref=e3]:
|
||||||
|
- button "사이드바 접기/펼치기" [ref=e4] [cursor=pointer]:
|
||||||
|
- img [ref=e5]
|
||||||
|
- generic [ref=e8]: W
|
||||||
|
- generic [ref=e61]:
|
||||||
|
- generic [ref=e62] [cursor=pointer]:
|
||||||
|
- img [ref=e63]
|
||||||
|
- generic: 대시보드
|
||||||
|
- generic [ref=e66] [cursor=pointer]:
|
||||||
|
- img [ref=e67]
|
||||||
|
- generic: 사용자 관리
|
||||||
|
- generic [ref=e81]:
|
||||||
|
- generic [ref=e82]: 사용자 관리
|
||||||
|
- generic [ref=e83]:
|
||||||
|
- img [ref=e84]
|
||||||
|
- text: 사용자 목록
|
||||||
|
- generic [ref=e87]:
|
||||||
|
- img [ref=e88]
|
||||||
|
- text: 권한 설정
|
||||||
|
- generic [ref=e91]:
|
||||||
|
- img [ref=e92]
|
||||||
|
- text: 부서 관리
|
||||||
|
- generic [ref=e72] [cursor=pointer]:
|
||||||
|
- img [ref=e73]
|
||||||
|
- generic: 제품 관리
|
||||||
|
- generic [ref=e75] [cursor=pointer]:
|
||||||
|
- img [ref=e76]
|
||||||
|
- generic: 통계/분석
|
||||||
|
- generic [ref=e77] [cursor=pointer]:
|
||||||
|
- img [ref=e78]
|
||||||
|
- generic: 시스템 설정
|
||||||
|
- generic [ref=e48] [cursor=pointer]: 박
|
||||||
|
- generic [ref=e52]:
|
||||||
|
- generic [ref=e54]: 대시보드
|
||||||
|
- generic [ref=e55]: 컨텐츠 영역
|
||||||
|
- generic [ref=e56]:
|
||||||
|
- strong [ref=e57]: 사이드바 프로토타입
|
||||||
|
- text: • 사이드바 우측
|
||||||
|
- strong [ref=e58]: ◀ 버튼
|
||||||
|
- text: 을 클릭하면 축소
|
||||||
|
- text: • 축소 상태에서 아이콘
|
||||||
|
- strong [ref=e59]: hover → 툴팁
|
||||||
|
- text: 표시
|
||||||
|
- text: • 하위 메뉴가 있는 아이콘
|
||||||
|
- strong [ref=e60]: 클릭 → 플라이아웃
|
||||||
|
- text: 팝업
|
||||||
|
- text: • 리프 메뉴 아이콘 클릭 → 바로 이동
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
- generic [active] [ref=e1]:
|
||||||
|
- generic [ref=e2]:
|
||||||
|
- generic [ref=e3]:
|
||||||
|
- button "사이드바 접기/펼치기" [ref=e4] [cursor=pointer]:
|
||||||
|
- img [ref=e5]
|
||||||
|
- generic [ref=e7]:
|
||||||
|
- generic [ref=e8]: W
|
||||||
|
- generic [ref=e9]: WACE 솔루션
|
||||||
|
- generic [ref=e10]:
|
||||||
|
- generic [ref=e12] [cursor=pointer]:
|
||||||
|
- img [ref=e13]
|
||||||
|
- generic [ref=e16]: 대시보드
|
||||||
|
- generic [ref=e17] [cursor=pointer]:
|
||||||
|
- generic [ref=e18]:
|
||||||
|
- img [ref=e19]
|
||||||
|
- generic [ref=e24]: 사용자 관리
|
||||||
|
- img [ref=e25]
|
||||||
|
- generic [ref=e27] [cursor=pointer]:
|
||||||
|
- generic [ref=e28]:
|
||||||
|
- img [ref=e29]
|
||||||
|
- generic [ref=e31]: 제품 관리
|
||||||
|
- img [ref=e32]
|
||||||
|
- generic [ref=e35] [cursor=pointer]:
|
||||||
|
- img [ref=e36]
|
||||||
|
- generic [ref=e37]: 통계/분석
|
||||||
|
- generic [ref=e38] [cursor=pointer]:
|
||||||
|
- generic [ref=e39]:
|
||||||
|
- img [ref=e40]
|
||||||
|
- generic [ref=e43]: 시스템 설정
|
||||||
|
- img [ref=e44]
|
||||||
|
- generic [ref=e47] [cursor=pointer]:
|
||||||
|
- generic [ref=e48]: 박
|
||||||
|
- generic [ref=e49]:
|
||||||
|
- generic [ref=e50]: 박개발
|
||||||
|
- generic [ref=e51]: 개발팀
|
||||||
|
- generic [ref=e52]:
|
||||||
|
- generic [ref=e54]: 대시보드
|
||||||
|
- generic [ref=e55]: 컨텐츠 영역
|
||||||
|
- generic [ref=e56]:
|
||||||
|
- strong [ref=e57]: 사이드바 프로토타입
|
||||||
|
- text: • 사이드바 우측
|
||||||
|
- strong [ref=e58]: ◀ 버튼
|
||||||
|
- text: 을 클릭하면 축소
|
||||||
|
- text: • 축소 상태에서 아이콘
|
||||||
|
- strong [ref=e59]: hover → 툴팁
|
||||||
|
- text: 표시
|
||||||
|
- text: • 하위 메뉴가 있는 아이콘
|
||||||
|
- strong [ref=e60]: 클릭 → 플라이아웃
|
||||||
|
- text: 팝업
|
||||||
|
- text: • 리프 메뉴 아이콘 클릭 → 바로 이동
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
- generic [active] [ref=e1]:
|
||||||
|
- generic [ref=e2]:
|
||||||
|
- generic [ref=e3]:
|
||||||
|
- button "사이드바 접기/펼치기" [ref=e4] [cursor=pointer]:
|
||||||
|
- img [ref=e5]
|
||||||
|
- generic [ref=e7]:
|
||||||
|
- generic [ref=e8]: W
|
||||||
|
- generic [ref=e9]: WACE 솔루션
|
||||||
|
- generic [ref=e10]:
|
||||||
|
- generic [ref=e12] [cursor=pointer]:
|
||||||
|
- img [ref=e13]
|
||||||
|
- generic [ref=e16]: 대시보드
|
||||||
|
- generic [ref=e17] [cursor=pointer]:
|
||||||
|
- generic [ref=e18]:
|
||||||
|
- img [ref=e19]
|
||||||
|
- generic [ref=e24]: 사용자 관리
|
||||||
|
- img [ref=e25]
|
||||||
|
- generic [ref=e27] [cursor=pointer]:
|
||||||
|
- generic [ref=e28]:
|
||||||
|
- img [ref=e29]
|
||||||
|
- generic [ref=e31]: 제품 관리
|
||||||
|
- img [ref=e32]
|
||||||
|
- generic [ref=e35] [cursor=pointer]:
|
||||||
|
- img [ref=e36]
|
||||||
|
- generic [ref=e37]: 통계/분석
|
||||||
|
- generic [ref=e38] [cursor=pointer]:
|
||||||
|
- generic [ref=e39]:
|
||||||
|
- img [ref=e40]
|
||||||
|
- generic [ref=e43]: 시스템 설정
|
||||||
|
- img [ref=e44]
|
||||||
|
- generic [ref=e47] [cursor=pointer]:
|
||||||
|
- generic [ref=e48]: 박
|
||||||
|
- generic [ref=e49]:
|
||||||
|
- generic [ref=e50]: 박개발
|
||||||
|
- generic [ref=e51]: 개발팀
|
||||||
|
- generic [ref=e52]:
|
||||||
|
- generic [ref=e54]: 대시보드
|
||||||
|
- generic [ref=e55]: 컨텐츠 영역
|
||||||
|
- generic [ref=e56]:
|
||||||
|
- strong [ref=e57]: 사이드바 프로토타입
|
||||||
|
- text: • 사이드바 우측
|
||||||
|
- strong [ref=e58]: ◀ 버튼
|
||||||
|
- text: 을 클릭하면 축소
|
||||||
|
- text: • 축소 상태에서 아이콘
|
||||||
|
- strong [ref=e59]: hover → 툴팁
|
||||||
|
- text: 표시
|
||||||
|
- text: • 하위 메뉴가 있는 아이콘
|
||||||
|
- strong [ref=e60]: 클릭 → 플라이아웃
|
||||||
|
- text: 팝업
|
||||||
|
- text: • 리프 메뉴 아이콘 클릭 → 바로 이동
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
- generic [active] [ref=e1]:
|
||||||
|
- generic [ref=e2]:
|
||||||
|
- generic [ref=e3]:
|
||||||
|
- generic [ref=e4]:
|
||||||
|
- generic [ref=e5]: W
|
||||||
|
- generic [ref=e6]: WACE 솔루션
|
||||||
|
- button "사이드바 접기/펼치기" [ref=e7] [cursor=pointer]:
|
||||||
|
- img [ref=e8]
|
||||||
|
- generic [ref=e11]:
|
||||||
|
- generic [ref=e13] [cursor=pointer]:
|
||||||
|
- img [ref=e14]
|
||||||
|
- generic [ref=e17]: 대시보드
|
||||||
|
- generic [ref=e18] [cursor=pointer]:
|
||||||
|
- generic [ref=e19]:
|
||||||
|
- img [ref=e20]
|
||||||
|
- generic [ref=e25]: 사용자 관리
|
||||||
|
- img [ref=e26]
|
||||||
|
- generic [ref=e28] [cursor=pointer]:
|
||||||
|
- generic [ref=e29]:
|
||||||
|
- img [ref=e30]
|
||||||
|
- generic [ref=e32]: 제품 관리
|
||||||
|
- img [ref=e33]
|
||||||
|
- generic [ref=e36] [cursor=pointer]:
|
||||||
|
- img [ref=e37]
|
||||||
|
- generic [ref=e38]: 통계/분석
|
||||||
|
- generic [ref=e39] [cursor=pointer]:
|
||||||
|
- generic [ref=e40]:
|
||||||
|
- img [ref=e41]
|
||||||
|
- generic [ref=e44]: 시스템 설정
|
||||||
|
- img [ref=e45]
|
||||||
|
- generic [ref=e48] [cursor=pointer]:
|
||||||
|
- generic [ref=e49]: 박
|
||||||
|
- generic [ref=e50]:
|
||||||
|
- generic [ref=e51]: 박개발
|
||||||
|
- generic [ref=e52]: 개발팀
|
||||||
|
- generic [ref=e53]:
|
||||||
|
- generic [ref=e55]: 대시보드
|
||||||
|
- generic [ref=e56]: 컨텐츠 영역
|
||||||
|
- generic [ref=e57]:
|
||||||
|
- strong [ref=e58]: 사이드바 프로토타입
|
||||||
|
- text: • 사이드바 우측
|
||||||
|
- strong [ref=e59]: ◀ 버튼
|
||||||
|
- text: 을 클릭하면 축소
|
||||||
|
- text: • 축소 상태에서 아이콘
|
||||||
|
- strong [ref=e60]: hover → 툴팁
|
||||||
|
- text: 표시
|
||||||
|
- text: • 하위 메뉴가 있는 아이콘
|
||||||
|
- strong [ref=e61]: 클릭 → 플라이아웃
|
||||||
|
- text: 팝업
|
||||||
|
- text: • 리프 메뉴 아이콘 클릭 → 바로 이동
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
- generic [ref=e1]:
|
||||||
|
- generic [ref=e2]:
|
||||||
|
- generic [ref=e3]:
|
||||||
|
- generic [ref=e4]:
|
||||||
|
- generic [ref=e5]: W
|
||||||
|
- button "사이드바 접기/펼치기" [active] [ref=e7] [cursor=pointer]:
|
||||||
|
- img [ref=e62]
|
||||||
|
- generic [ref=e65]:
|
||||||
|
- generic [ref=e66] [cursor=pointer]:
|
||||||
|
- img [ref=e67]
|
||||||
|
- generic: 대시보드
|
||||||
|
- generic [ref=e70] [cursor=pointer]:
|
||||||
|
- img [ref=e71]
|
||||||
|
- generic: 사용자 관리
|
||||||
|
- generic [ref=e76] [cursor=pointer]:
|
||||||
|
- img [ref=e77]
|
||||||
|
- generic: 제품 관리
|
||||||
|
- generic [ref=e79] [cursor=pointer]:
|
||||||
|
- img [ref=e80]
|
||||||
|
- generic: 통계/분석
|
||||||
|
- generic [ref=e81] [cursor=pointer]:
|
||||||
|
- img [ref=e82]
|
||||||
|
- generic: 시스템 설정
|
||||||
|
- generic [ref=e49] [cursor=pointer]: 박
|
||||||
|
- generic [ref=e53]:
|
||||||
|
- generic [ref=e55]: 대시보드
|
||||||
|
- generic [ref=e56]: 컨텐츠 영역
|
||||||
|
- generic [ref=e57]:
|
||||||
|
- strong [ref=e58]: 사이드바 프로토타입
|
||||||
|
- text: • 사이드바 우측
|
||||||
|
- strong [ref=e59]: ◀ 버튼
|
||||||
|
- text: 을 클릭하면 축소
|
||||||
|
- text: • 축소 상태에서 아이콘
|
||||||
|
- strong [ref=e60]: hover → 툴팁
|
||||||
|
- text: 표시
|
||||||
|
- text: • 하위 메뉴가 있는 아이콘
|
||||||
|
- strong [ref=e61]: 클릭 → 플라이아웃
|
||||||
|
- text: 팝업
|
||||||
|
- text: • 리프 메뉴 아이콘 클릭 → 바로 이동
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
- generic [active] [ref=e1]:
|
||||||
|
- generic [ref=e2]:
|
||||||
|
- generic [ref=e3]:
|
||||||
|
- generic [ref=e4]:
|
||||||
|
- generic [ref=e5]: W
|
||||||
|
- generic [ref=e6]: WACE 솔루션
|
||||||
|
- button "사이드바 접기/펼치기" [ref=e7] [cursor=pointer]:
|
||||||
|
- img [ref=e8]
|
||||||
|
- generic [ref=e11]:
|
||||||
|
- generic [ref=e13] [cursor=pointer]:
|
||||||
|
- img [ref=e14]
|
||||||
|
- generic [ref=e17]: 대시보드
|
||||||
|
- generic [ref=e18] [cursor=pointer]:
|
||||||
|
- generic [ref=e19]:
|
||||||
|
- img [ref=e20]
|
||||||
|
- generic [ref=e25]: 사용자 관리
|
||||||
|
- img [ref=e26]
|
||||||
|
- generic [ref=e28] [cursor=pointer]:
|
||||||
|
- generic [ref=e29]:
|
||||||
|
- img [ref=e30]
|
||||||
|
- generic [ref=e32]: 제품 관리
|
||||||
|
- img [ref=e33]
|
||||||
|
- generic [ref=e36] [cursor=pointer]:
|
||||||
|
- img [ref=e37]
|
||||||
|
- generic [ref=e38]: 통계/분석
|
||||||
|
- generic [ref=e39] [cursor=pointer]:
|
||||||
|
- generic [ref=e40]:
|
||||||
|
- img [ref=e41]
|
||||||
|
- generic [ref=e44]: 시스템 설정
|
||||||
|
- img [ref=e45]
|
||||||
|
- generic [ref=e48] [cursor=pointer]:
|
||||||
|
- generic [ref=e49]: 박
|
||||||
|
- generic [ref=e50]:
|
||||||
|
- generic [ref=e51]: 박개발
|
||||||
|
- generic [ref=e52]: 개발팀
|
||||||
|
- generic [ref=e53]:
|
||||||
|
- generic [ref=e55]: 대시보드
|
||||||
|
- generic [ref=e56]: 컨텐츠 영역
|
||||||
|
- generic [ref=e57]:
|
||||||
|
- strong [ref=e58]: 사이드바 프로토타입
|
||||||
|
- text: • 사이드바 우측
|
||||||
|
- strong [ref=e59]: ◀ 버튼
|
||||||
|
- text: 을 클릭하면 축소
|
||||||
|
- text: • 축소 상태에서 아이콘
|
||||||
|
- strong [ref=e60]: hover → 툴팁
|
||||||
|
- text: 표시
|
||||||
|
- text: • 하위 메뉴가 있는 아이콘
|
||||||
|
- strong [ref=e61]: 클릭 → 플라이아웃
|
||||||
|
- text: 팝업
|
||||||
|
- text: • 리프 메뉴 아이콘 클릭 → 바로 이동
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
- generic [ref=e1]:
|
||||||
|
- generic [ref=e2]:
|
||||||
|
- generic [ref=e3]:
|
||||||
|
- generic [ref=e4]:
|
||||||
|
- generic [ref=e5]: W
|
||||||
|
- button "사이드바 접기/펼치기" [active] [ref=e7] [cursor=pointer]:
|
||||||
|
- img [ref=e62]
|
||||||
|
- generic [ref=e65]:
|
||||||
|
- generic [ref=e66] [cursor=pointer]:
|
||||||
|
- img [ref=e67]
|
||||||
|
- generic: 대시보드
|
||||||
|
- generic [ref=e70] [cursor=pointer]:
|
||||||
|
- img [ref=e71]
|
||||||
|
- generic: 사용자 관리
|
||||||
|
- generic [ref=e76] [cursor=pointer]:
|
||||||
|
- img [ref=e77]
|
||||||
|
- generic: 제품 관리
|
||||||
|
- generic [ref=e79] [cursor=pointer]:
|
||||||
|
- img [ref=e80]
|
||||||
|
- generic: 통계/분석
|
||||||
|
- generic [ref=e81] [cursor=pointer]:
|
||||||
|
- img [ref=e82]
|
||||||
|
- generic: 시스템 설정
|
||||||
|
- generic [ref=e49] [cursor=pointer]: 박
|
||||||
|
- generic [ref=e53]:
|
||||||
|
- generic [ref=e55]: 대시보드
|
||||||
|
- generic [ref=e56]: 컨텐츠 영역
|
||||||
|
- generic [ref=e57]:
|
||||||
|
- strong [ref=e58]: 사이드바 프로토타입
|
||||||
|
- text: • 사이드바 우측
|
||||||
|
- strong [ref=e59]: ◀ 버튼
|
||||||
|
- text: 을 클릭하면 축소
|
||||||
|
- text: • 축소 상태에서 아이콘
|
||||||
|
- strong [ref=e60]: hover → 툴팁
|
||||||
|
- text: 표시
|
||||||
|
- text: • 하위 메뉴가 있는 아이콘
|
||||||
|
- strong [ref=e61]: 클릭 → 플라이아웃
|
||||||
|
- text: 팝업
|
||||||
|
- text: • 리프 메뉴 아이콘 클릭 → 바로 이동
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
- generic [active] [ref=e1]:
|
||||||
|
- generic [ref=e2]:
|
||||||
|
- generic [ref=e3]:
|
||||||
|
- generic [ref=e4]:
|
||||||
|
- generic [ref=e5]: W
|
||||||
|
- generic [ref=e6]: WACE 솔루션
|
||||||
|
- button "사이드바 접기" [ref=e7] [cursor=pointer]:
|
||||||
|
- img [ref=e8]
|
||||||
|
- generic [ref=e11]:
|
||||||
|
- generic [ref=e13] [cursor=pointer]:
|
||||||
|
- img [ref=e14]
|
||||||
|
- generic [ref=e17]: 대시보드
|
||||||
|
- generic [ref=e18] [cursor=pointer]:
|
||||||
|
- generic [ref=e19]:
|
||||||
|
- img [ref=e20]
|
||||||
|
- generic [ref=e25]: 사용자 관리
|
||||||
|
- img [ref=e26]
|
||||||
|
- generic [ref=e28] [cursor=pointer]:
|
||||||
|
- generic [ref=e29]:
|
||||||
|
- img [ref=e30]
|
||||||
|
- generic [ref=e32]: 제품 관리
|
||||||
|
- img [ref=e33]
|
||||||
|
- generic [ref=e36] [cursor=pointer]:
|
||||||
|
- img [ref=e37]
|
||||||
|
- generic [ref=e38]: 통계/분석
|
||||||
|
- generic [ref=e39] [cursor=pointer]:
|
||||||
|
- generic [ref=e40]:
|
||||||
|
- img [ref=e41]
|
||||||
|
- generic [ref=e44]: 시스템 설정
|
||||||
|
- img [ref=e45]
|
||||||
|
- generic [ref=e48] [cursor=pointer]:
|
||||||
|
- generic [ref=e49]: 박
|
||||||
|
- generic [ref=e50]:
|
||||||
|
- generic [ref=e51]: 박개발
|
||||||
|
- generic [ref=e52]: 개발팀
|
||||||
|
- generic [ref=e53]:
|
||||||
|
- generic [ref=e55]: 대시보드
|
||||||
|
- generic [ref=e56]: 컨텐츠 영역
|
||||||
|
- generic [ref=e57]:
|
||||||
|
- strong [ref=e58]: 사이드바 프로토타입
|
||||||
|
- text: • 사이드바 우측
|
||||||
|
- strong [ref=e59]: ◀ 버튼
|
||||||
|
- text: 을 클릭하면 축소
|
||||||
|
- text: • 축소 상태에서 아이콘
|
||||||
|
- strong [ref=e60]: hover → 툴팁
|
||||||
|
- text: 표시
|
||||||
|
- text: • 하위 메뉴가 있는 아이콘
|
||||||
|
- strong [ref=e61]: 클릭 → 플라이아웃
|
||||||
|
- text: 팝업
|
||||||
|
- text: • 리프 메뉴 아이콘 클릭 → 바로 이동
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
- generic [active] [ref=e1]:
|
||||||
|
- generic [ref=e2]:
|
||||||
|
- generic [ref=e3]:
|
||||||
|
- generic [ref=e5]: W
|
||||||
|
- button "사이드바 펼치기" [ref=e63] [cursor=pointer]:
|
||||||
|
- img [ref=e64]
|
||||||
|
- generic [ref=e67]:
|
||||||
|
- generic [ref=e68] [cursor=pointer]:
|
||||||
|
- img [ref=e69]
|
||||||
|
- generic: 대시보드
|
||||||
|
- generic [ref=e72] [cursor=pointer]:
|
||||||
|
- img [ref=e73]
|
||||||
|
- generic: 사용자 관리
|
||||||
|
- generic [ref=e78] [cursor=pointer]:
|
||||||
|
- img [ref=e79]
|
||||||
|
- generic: 제품 관리
|
||||||
|
- generic [ref=e81] [cursor=pointer]:
|
||||||
|
- img [ref=e82]
|
||||||
|
- generic: 통계/분석
|
||||||
|
- generic [ref=e83] [cursor=pointer]:
|
||||||
|
- img [ref=e84]
|
||||||
|
- generic: 시스템 설정
|
||||||
|
- generic [ref=e49] [cursor=pointer]: 박
|
||||||
|
- generic [ref=e53]:
|
||||||
|
- generic [ref=e55]: 대시보드
|
||||||
|
- generic [ref=e56]: 컨텐츠 영역
|
||||||
|
- generic [ref=e57]:
|
||||||
|
- strong [ref=e58]: 사이드바 프로토타입
|
||||||
|
- text: • 사이드바 우측
|
||||||
|
- strong [ref=e59]: ◀ 버튼
|
||||||
|
- text: 을 클릭하면 축소
|
||||||
|
- text: • 축소 상태에서 아이콘
|
||||||
|
- strong [ref=e60]: hover → 툴팁
|
||||||
|
- text: 표시
|
||||||
|
- text: • 하위 메뉴가 있는 아이콘
|
||||||
|
- strong [ref=e61]: 클릭 → 플라이아웃
|
||||||
|
- text: 팝업
|
||||||
|
- text: • 리프 메뉴 아이콘 클릭 → 바로 이동
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
- generic [active] [ref=e1]:
|
||||||
|
- generic [ref=e2]:
|
||||||
|
- generic [ref=e3]:
|
||||||
|
- generic [ref=e5]: W
|
||||||
|
- button "사이드바 펼치기" [ref=e63] [cursor=pointer]:
|
||||||
|
- img [ref=e64]
|
||||||
|
- generic [ref=e67]:
|
||||||
|
- generic [ref=e68] [cursor=pointer]:
|
||||||
|
- img [ref=e69]
|
||||||
|
- generic: 대시보드
|
||||||
|
- generic [ref=e72] [cursor=pointer]:
|
||||||
|
- img [ref=e73]
|
||||||
|
- generic: 사용자 관리
|
||||||
|
- generic [ref=e87]:
|
||||||
|
- generic [ref=e88]: 사용자 관리
|
||||||
|
- generic [ref=e89]:
|
||||||
|
- img [ref=e90]
|
||||||
|
- text: 사용자 목록
|
||||||
|
- generic [ref=e93]:
|
||||||
|
- img [ref=e94]
|
||||||
|
- text: 권한 설정
|
||||||
|
- generic [ref=e97]:
|
||||||
|
- img [ref=e98]
|
||||||
|
- text: 부서 관리
|
||||||
|
- generic [ref=e78] [cursor=pointer]:
|
||||||
|
- img [ref=e79]
|
||||||
|
- generic: 제품 관리
|
||||||
|
- generic [ref=e81] [cursor=pointer]:
|
||||||
|
- img [ref=e82]
|
||||||
|
- generic: 통계/분석
|
||||||
|
- generic [ref=e83] [cursor=pointer]:
|
||||||
|
- img [ref=e84]
|
||||||
|
- generic: 시스템 설정
|
||||||
|
- generic [ref=e49] [cursor=pointer]: 박
|
||||||
|
- generic [ref=e53]:
|
||||||
|
- generic [ref=e55]: 대시보드
|
||||||
|
- generic [ref=e56]: 컨텐츠 영역
|
||||||
|
- generic [ref=e57]:
|
||||||
|
- strong [ref=e58]: 사이드바 프로토타입
|
||||||
|
- text: • 사이드바 우측
|
||||||
|
- strong [ref=e59]: ◀ 버튼
|
||||||
|
- text: 을 클릭하면 축소
|
||||||
|
- text: • 축소 상태에서 아이콘
|
||||||
|
- strong [ref=e60]: hover → 툴팁
|
||||||
|
- text: 표시
|
||||||
|
- text: • 하위 메뉴가 있는 아이콘
|
||||||
|
- strong [ref=e61]: 클릭 → 플라이아웃
|
||||||
|
- text: 팝업
|
||||||
|
- text: • 리프 메뉴 아이콘 클릭 → 바로 이동
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
import { useState, Suspense, useEffect, useCallback } from "react";
|
import React, { useState, Suspense, useEffect, useCallback, useRef } from "react";
|
||||||
import { useRouter, usePathname, useSearchParams } from "next/navigation";
|
import { useRouter, usePathname, useSearchParams } from "next/navigation";
|
||||||
import { Button } from "@/components/ui/button";
|
import { Button } from "@/components/ui/button";
|
||||||
import {
|
import {
|
||||||
@@ -14,6 +14,8 @@ import {
|
|||||||
Package,
|
Package,
|
||||||
ChevronDown,
|
ChevronDown,
|
||||||
ChevronRight,
|
ChevronRight,
|
||||||
|
PanelLeftClose,
|
||||||
|
PanelLeftOpen,
|
||||||
UserCheck,
|
UserCheck,
|
||||||
LogOut,
|
LogOut,
|
||||||
User,
|
User,
|
||||||
@@ -52,6 +54,7 @@ import {
|
|||||||
} from "@/components/ui/dialog";
|
} from "@/components/ui/dialog";
|
||||||
import { CompanySwitcher } from "@/components/admin/CompanySwitcher";
|
import { CompanySwitcher } from "@/components/admin/CompanySwitcher";
|
||||||
import { getIconComponent } from "@/components/admin/MenuIconPicker";
|
import { getIconComponent } from "@/components/admin/MenuIconPicker";
|
||||||
|
import { TooltipProvider } from "@/components/ui/tooltip";
|
||||||
|
|
||||||
interface ExtendedUserInfo {
|
interface ExtendedUserInfo {
|
||||||
userId: string;
|
userId: string;
|
||||||
@@ -249,6 +252,34 @@ function AppLayoutInner({ children }: AppLayoutProps) {
|
|||||||
const [isMobile, setIsMobile] = useState(false);
|
const [isMobile, setIsMobile] = useState(false);
|
||||||
const [showCompanySwitcher, setShowCompanySwitcher] = useState(false);
|
const [showCompanySwitcher, setShowCompanySwitcher] = useState(false);
|
||||||
const [currentCompanyName, setCurrentCompanyName] = useState<string>("");
|
const [currentCompanyName, setCurrentCompanyName] = useState<string>("");
|
||||||
|
const [sidebarCollapsed, setSidebarCollapsed] = useState(() => {
|
||||||
|
if (typeof window !== "undefined") {
|
||||||
|
return localStorage.getItem("sidebarCollapsed") === "true";
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
const [collapsedHover, setCollapsedHover] = useState(false);
|
||||||
|
const collapsedHoverTimer = useRef<NodeJS.Timeout | null>(null);
|
||||||
|
|
||||||
|
const toggleSidebarCollapse = () => {
|
||||||
|
setSidebarCollapsed((prev) => {
|
||||||
|
const next = !prev;
|
||||||
|
localStorage.setItem("sidebarCollapsed", String(next));
|
||||||
|
return next;
|
||||||
|
});
|
||||||
|
setCollapsedHover(false);
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleCollapsedMouseEnter = () => {
|
||||||
|
if (!sidebarCollapsed || isMobile) return;
|
||||||
|
if (collapsedHoverTimer.current) clearTimeout(collapsedHoverTimer.current);
|
||||||
|
collapsedHoverTimer.current = setTimeout(() => setCollapsedHover(true), 200);
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleCollapsedMouseLeave = () => {
|
||||||
|
if (collapsedHoverTimer.current) clearTimeout(collapsedHoverTimer.current);
|
||||||
|
setCollapsedHover(false);
|
||||||
|
};
|
||||||
|
|
||||||
// URL 직접 접근 시 탭 자동 열기
|
// URL 직접 접근 시 탭 자동 열기
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@@ -581,6 +612,26 @@ function AppLayoutInner({ children }: AppLayoutProps) {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 축소 상태 메뉴 렌더링 (아이콘만, hover 시 오버레이 메뉴로 조작)
|
||||||
|
const renderCollapsedMenu = (menu: any) => {
|
||||||
|
const isActive = isMenuActive(menu);
|
||||||
|
const hasActiveChild = menu.hasChildren && menu.children?.some((child: any) => isMenuActive(child));
|
||||||
|
|
||||||
|
return (
|
||||||
|
<button
|
||||||
|
key={menu.id}
|
||||||
|
className={`flex h-10 w-10 items-center justify-center rounded-lg transition-colors [&_svg]:h-5 [&_svg]:w-5 ${
|
||||||
|
isActive || hasActiveChild
|
||||||
|
? "bg-primary/10 text-primary"
|
||||||
|
: "text-muted-foreground hover:bg-accent hover:text-foreground"
|
||||||
|
}`}
|
||||||
|
onClick={() => handleMenuClick(menu)}
|
||||||
|
>
|
||||||
|
{menu.icon}
|
||||||
|
</button>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
if (isPreviewMode) {
|
if (isPreviewMode) {
|
||||||
return (
|
return (
|
||||||
<div className="bg-background h-screen w-full overflow-auto p-4">{children}</div>
|
<div className="bg-background h-screen w-full overflow-auto p-4">{children}</div>
|
||||||
@@ -695,95 +746,177 @@ function AppLayoutInner({ children }: AppLayoutProps) {
|
|||||||
)}
|
)}
|
||||||
|
|
||||||
{/* 왼쪽 사이드바 */}
|
{/* 왼쪽 사이드바 */}
|
||||||
|
<TooltipProvider delayDuration={0}>
|
||||||
<aside
|
<aside
|
||||||
className={`${
|
className={`${
|
||||||
isMobile
|
isMobile
|
||||||
? (sidebarOpen ? "translate-x-0" : "-translate-x-full") + " fixed top-14 left-0 z-40 h-[calc(100vh-56px)]"
|
? (sidebarOpen ? "translate-x-0" : "-translate-x-full") + " fixed top-14 left-0 z-40 h-[calc(100vh-56px)]"
|
||||||
: "relative z-auto h-screen translate-x-0"
|
: "relative z-auto h-screen translate-x-0"
|
||||||
} border-sidebar-border bg-sidebar flex w-[260px] flex-col border-r transition-transform duration-300 sm:w-[220px] lg:w-[240px]`}
|
} border-sidebar-border bg-sidebar flex flex-col border-r transition-all duration-300 flex-shrink-0 overflow-hidden ${
|
||||||
|
!isMobile && sidebarCollapsed ? "w-16" : "w-[260px] sm:w-[220px] lg:w-[240px]"
|
||||||
|
}`}
|
||||||
|
onMouseEnter={handleCollapsedMouseEnter}
|
||||||
|
onMouseLeave={handleCollapsedMouseLeave}
|
||||||
>
|
>
|
||||||
{!isMobile && (
|
{/* 축소 hover 오버레이: 마우스 올리면 전체 메뉴 표시 */}
|
||||||
<div className="border-border flex h-14 items-center justify-between border-b px-4">
|
{!isMobile && sidebarCollapsed && collapsedHover && (
|
||||||
<Logo />
|
<>
|
||||||
</div>
|
<div
|
||||||
)}
|
className="fixed inset-0 z-30"
|
||||||
|
onMouseEnter={handleCollapsedMouseLeave}
|
||||||
{(user as ExtendedUserInfo)?.userType === "SUPER_ADMIN" && (
|
/>
|
||||||
<div className="border-border bg-muted/50 mx-3 mt-3 rounded-md border p-3">
|
<div
|
||||||
<div className="flex items-center gap-2">
|
className="border-sidebar-border bg-sidebar fixed left-16 top-0 z-40 flex h-screen w-[240px] flex-col border-r shadow-xl animate-in slide-in-from-left-2 duration-200"
|
||||||
<Building2 className="text-primary h-4 w-4 shrink-0" />
|
onMouseEnter={() => { if (collapsedHoverTimer.current) clearTimeout(collapsedHoverTimer.current); setCollapsedHover(true); }}
|
||||||
<div className="min-w-0 flex-1">
|
onMouseLeave={handleCollapsedMouseLeave}
|
||||||
<p className="text-muted-foreground text-[10px]">현재 관리 회사</p>
|
>
|
||||||
<p className="truncate text-sm font-semibold" title={currentCompanyName || "로딩 중..."}>
|
<div className="border-border flex h-14 items-center justify-between border-b px-4">
|
||||||
{currentCompanyName || "로딩 중..."}
|
<Logo />
|
||||||
</p>
|
<button
|
||||||
|
onClick={toggleSidebarCollapse}
|
||||||
|
className="flex h-8 w-8 shrink-0 items-center justify-center rounded-lg border border-border/50 transition-colors hover:bg-accent"
|
||||||
|
title="사이드바 펼치기"
|
||||||
|
>
|
||||||
|
<PanelLeftOpen className="h-[18px] w-[18px] text-muted-foreground" />
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<div className="flex-1 overflow-y-auto py-4">
|
||||||
|
<nav className="space-y-0.5 px-3">
|
||||||
|
{uiMenus.map((menu) => renderMenu(menu))}
|
||||||
|
</nav>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{((user as ExtendedUserInfo)?.userType === "SUPER_ADMIN" ||
|
{/* 헤더: 로고 + 토글 버튼 */}
|
||||||
(user as ExtendedUserInfo)?.userType === "COMPANY_ADMIN" ||
|
{!isMobile && (
|
||||||
(user as ExtendedUserInfo)?.userType === "admin") && (
|
<div className={`border-border flex h-14 items-center border-b overflow-hidden ${sidebarCollapsed ? "justify-center px-2" : "justify-between px-4"}`}>
|
||||||
<div className="border-border space-y-2 border-b p-3">
|
{sidebarCollapsed ? (
|
||||||
<Button
|
<button
|
||||||
onClick={handleModeSwitch}
|
onClick={toggleSidebarCollapse}
|
||||||
className={`flex w-full items-center justify-center gap-2 rounded-md px-3 py-2 text-sm font-medium transition-colors duration-150 hover:cursor-pointer ${
|
className="flex h-9 w-9 items-center justify-center rounded-lg border border-border/50 transition-colors hover:bg-accent"
|
||||||
isAdminMode
|
title="사이드바 펼치기"
|
||||||
? "border border-amber-200 bg-amber-50 text-amber-700 hover:bg-amber-100 dark:border-amber-800 dark:bg-amber-950 dark:text-amber-400"
|
|
||||||
: "border-primary/20 bg-primary/5 text-primary hover:bg-primary/10 border"
|
|
||||||
}`}
|
|
||||||
>
|
|
||||||
{isAdminMode ? (
|
|
||||||
<>
|
|
||||||
<UserCheck className="h-4 w-4" />
|
|
||||||
사용자 메뉴로 전환
|
|
||||||
</>
|
|
||||||
) : (
|
|
||||||
<>
|
|
||||||
<Shield className="h-4 w-4" />
|
|
||||||
관리자 메뉴로 전환
|
|
||||||
</>
|
|
||||||
)}
|
|
||||||
</Button>
|
|
||||||
|
|
||||||
{(user as ExtendedUserInfo)?.userType === "SUPER_ADMIN" && (
|
|
||||||
<Button
|
|
||||||
onClick={() => {
|
|
||||||
console.log("🔴 회사 선택 버튼 클릭!");
|
|
||||||
setShowCompanySwitcher(true);
|
|
||||||
}}
|
|
||||||
className="border-primary/20 bg-primary/5 text-primary hover:bg-primary/10 flex w-full items-center justify-center gap-2 rounded-md border px-3 py-2 text-sm font-medium transition-colors duration-150 hover:cursor-pointer"
|
|
||||||
>
|
>
|
||||||
<Building2 className="h-4 w-4" />
|
<PanelLeftOpen className="h-5 w-5 text-muted-foreground" />
|
||||||
회사 선택
|
</button>
|
||||||
</Button>
|
) : (
|
||||||
|
<>
|
||||||
|
<Logo />
|
||||||
|
<button
|
||||||
|
onClick={toggleSidebarCollapse}
|
||||||
|
className="flex h-8 w-8 shrink-0 items-center justify-center rounded-lg border border-border/50 transition-colors hover:bg-accent"
|
||||||
|
title="사이드바 접기"
|
||||||
|
>
|
||||||
|
<PanelLeftClose className="h-[18px] w-[18px] text-muted-foreground" />
|
||||||
|
</button>
|
||||||
|
</>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
<div className="flex-1 overflow-y-auto py-4">
|
{/* 확장 상태 전용: 관리 회사, 모드 전환 버튼 */}
|
||||||
<nav className="space-y-0.5 px-3">
|
{(!isMobile && sidebarCollapsed) ? null : (
|
||||||
{loading ? (
|
<>
|
||||||
<div className="animate-pulse space-y-2">
|
{(user as ExtendedUserInfo)?.userType === "SUPER_ADMIN" && (
|
||||||
{[...Array(5)].map((_, i) => (
|
<div className="border-border bg-muted/50 mx-3 mt-3 rounded-md border p-3">
|
||||||
<div key={i} className="bg-muted h-8 rounded"></div>
|
<div className="flex items-center gap-2">
|
||||||
))}
|
<Building2 className="text-primary h-4 w-4 shrink-0" />
|
||||||
|
<div className="min-w-0 flex-1">
|
||||||
|
<p className="text-muted-foreground text-[10px]">현재 관리 회사</p>
|
||||||
|
<p className="truncate text-sm font-semibold" title={currentCompanyName || "로딩 중..."}>
|
||||||
|
{currentCompanyName || "로딩 중..."}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
) : (
|
|
||||||
uiMenus.map((menu) => renderMenu(menu))
|
|
||||||
)}
|
)}
|
||||||
</nav>
|
|
||||||
|
{((user as ExtendedUserInfo)?.userType === "SUPER_ADMIN" ||
|
||||||
|
(user as ExtendedUserInfo)?.userType === "COMPANY_ADMIN" ||
|
||||||
|
(user as ExtendedUserInfo)?.userType === "admin") && (
|
||||||
|
<div className="border-border space-y-2 border-b p-3">
|
||||||
|
<Button
|
||||||
|
onClick={handleModeSwitch}
|
||||||
|
className={`flex w-full items-center justify-center gap-2 rounded-md px-3 py-2 text-sm font-medium transition-colors duration-150 hover:cursor-pointer ${
|
||||||
|
isAdminMode
|
||||||
|
? "border border-amber-200 bg-amber-50 text-amber-700 hover:bg-amber-100 dark:border-amber-800 dark:bg-amber-950 dark:text-amber-400"
|
||||||
|
: "border-primary/20 bg-primary/5 text-primary hover:bg-primary/10 border"
|
||||||
|
}`}
|
||||||
|
>
|
||||||
|
{isAdminMode ? (
|
||||||
|
<>
|
||||||
|
<UserCheck className="h-4 w-4" />
|
||||||
|
사용자 메뉴로 전환
|
||||||
|
</>
|
||||||
|
) : (
|
||||||
|
<>
|
||||||
|
<Shield className="h-4 w-4" />
|
||||||
|
관리자 메뉴로 전환
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
</Button>
|
||||||
|
|
||||||
|
{(user as ExtendedUserInfo)?.userType === "SUPER_ADMIN" && (
|
||||||
|
<Button
|
||||||
|
onClick={() => {
|
||||||
|
console.log("🔴 회사 선택 버튼 클릭!");
|
||||||
|
setShowCompanySwitcher(true);
|
||||||
|
}}
|
||||||
|
className="border-primary/20 bg-primary/5 text-primary hover:bg-primary/10 flex w-full items-center justify-center gap-2 rounded-md border px-3 py-2 text-sm font-medium transition-colors duration-150 hover:cursor-pointer"
|
||||||
|
>
|
||||||
|
<Building2 className="h-4 w-4" />
|
||||||
|
회사 선택
|
||||||
|
</Button>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</>
|
||||||
|
)}
|
||||||
|
|
||||||
|
{/* 메뉴 영역 */}
|
||||||
|
<div className="flex-1 overflow-y-auto py-4">
|
||||||
|
{!isMobile && sidebarCollapsed ? (
|
||||||
|
/* 축소 상태: 아이콘 메뉴 */
|
||||||
|
<nav className="flex flex-col items-center gap-1">
|
||||||
|
{loading ? (
|
||||||
|
<div className="animate-pulse space-y-2">
|
||||||
|
{[...Array(5)].map((_, i) => (
|
||||||
|
<div key={i} className="bg-muted h-10 w-10 rounded-lg"></div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
) : (
|
||||||
|
uiMenus.map((menu) => renderCollapsedMenu(menu))
|
||||||
|
)}
|
||||||
|
</nav>
|
||||||
|
) : (
|
||||||
|
/* 확장 상태: 기존 메뉴 */
|
||||||
|
<nav className="space-y-0.5 px-3">
|
||||||
|
{loading ? (
|
||||||
|
<div className="animate-pulse space-y-2">
|
||||||
|
{[...Array(5)].map((_, i) => (
|
||||||
|
<div key={i} className="bg-muted h-8 rounded"></div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
) : (
|
||||||
|
uiMenus.map((menu) => renderMenu(menu))
|
||||||
|
)}
|
||||||
|
</nav>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="border-border border-t px-3 py-1">
|
{/* 테마 토글 */}
|
||||||
<ThemeToggle />
|
{(!isMobile && sidebarCollapsed) ? null : (
|
||||||
</div>
|
<div className="border-border border-t px-3 py-1">
|
||||||
|
<ThemeToggle />
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
|
||||||
<div className="border-border bg-muted/30 border-t p-3">
|
{/* 하단 유저 영역 */}
|
||||||
|
<div className={`border-border bg-muted/30 border-t ${!isMobile && sidebarCollapsed ? "flex justify-center p-2" : "p-3"}`}>
|
||||||
<DropdownMenu modal={false}>
|
<DropdownMenu modal={false}>
|
||||||
<DropdownMenuTrigger asChild>
|
<DropdownMenuTrigger asChild>
|
||||||
<button className="hover:bg-accent flex w-full items-center gap-3 rounded-lg px-2 py-2 text-left transition-colors">
|
<button className={`hover:bg-accent flex items-center rounded-lg transition-colors ${!isMobile && sidebarCollapsed ? "h-10 w-10 justify-center" : "w-full gap-3 px-2 py-2 text-left"}`}>
|
||||||
<div className="relative flex h-9 w-9 shrink-0 overflow-hidden rounded-full">
|
<div className="relative flex h-9 w-9 shrink-0 overflow-hidden rounded-full">
|
||||||
{user.photo && user.photo.trim() !== "" && user.photo !== "null" ? (
|
{user.photo && user.photo.trim() !== "" && user.photo !== "null" ? (
|
||||||
<img
|
<img
|
||||||
@@ -797,12 +930,14 @@ function AppLayoutInner({ children }: AppLayoutProps) {
|
|||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
<div className="min-w-0 flex-1">
|
{(!isMobile && sidebarCollapsed) ? null : (
|
||||||
<p className="text-foreground truncate text-sm font-medium">{user.userName || "사용자"}</p>
|
<div className="min-w-0 flex-1">
|
||||||
<p className="text-muted-foreground truncate text-xs">
|
<p className="text-foreground truncate text-sm font-medium">{user.userName || "사용자"}</p>
|
||||||
{user.deptName || user.email || user.userId}
|
<p className="text-muted-foreground truncate text-xs">
|
||||||
</p>
|
{user.deptName || user.email || user.userId}
|
||||||
</div>
|
</p>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
</button>
|
</button>
|
||||||
</DropdownMenuTrigger>
|
</DropdownMenuTrigger>
|
||||||
<DropdownMenuContent className="w-56" align="start" side="top">
|
<DropdownMenuContent className="w-56" align="start" side="top">
|
||||||
@@ -856,6 +991,7 @@ function AppLayoutInner({ children }: AppLayoutProps) {
|
|||||||
</DropdownMenu>
|
</DropdownMenu>
|
||||||
</div>
|
</div>
|
||||||
</aside>
|
</aside>
|
||||||
|
</TooltipProvider>
|
||||||
|
|
||||||
{/* 가운데 컨텐츠 영역 - 탭 시스템 */}
|
{/* 가운데 컨텐츠 영역 - 탭 시스템 */}
|
||||||
<main className={`flex min-w-0 flex-1 flex-col overflow-hidden bg-background ${isMobile ? "h-[calc(100vh-56px)]" : "h-screen"}`}>
|
<main className={`flex min-w-0 flex-1 flex-col overflow-hidden bg-background ${isMobile ? "h-[calc(100vh-56px)]" : "h-screen"}`}>
|
||||||
|
|||||||
Reference in New Issue
Block a user