11
This commit is contained in:
50
.playwright-mcp/page-2026-04-07T08-22-57-118Z.yml
Normal file
50
.playwright-mcp/page-2026-04-07T08-22-57-118Z.yml
Normal file
@@ -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: • 리프 메뉴 아이콘 클릭 → 바로 이동
|
||||
50
.playwright-mcp/page-2026-04-07T08-25-10-540Z.yml
Normal file
50
.playwright-mcp/page-2026-04-07T08-25-10-540Z.yml
Normal file
@@ -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: • 리프 메뉴 아이콘 클릭 → 바로 이동
|
||||
38
.playwright-mcp/page-2026-04-07T08-25-23-248Z.yml
Normal file
38
.playwright-mcp/page-2026-04-07T08-25-23-248Z.yml
Normal file
@@ -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: • 리프 메뉴 아이콘 클릭 → 바로 이동
|
||||
49
.playwright-mcp/page-2026-04-07T08-25-34-108Z.yml
Normal file
49
.playwright-mcp/page-2026-04-07T08-25-34-108Z.yml
Normal file
@@ -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: • 리프 메뉴 아이콘 클릭 → 바로 이동
|
||||
50
.playwright-mcp/page-2026-04-07T08-26-01-971Z.yml
Normal file
50
.playwright-mcp/page-2026-04-07T08-26-01-971Z.yml
Normal file
@@ -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: • 리프 메뉴 아이콘 클릭 → 바로 이동
|
||||
38
.playwright-mcp/page-2026-04-07T08-26-06-344Z.yml
Normal file
38
.playwright-mcp/page-2026-04-07T08-26-06-344Z.yml
Normal file
@@ -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: • 리프 메뉴 아이콘 클릭 → 바로 이동
|
||||
49
.playwright-mcp/page-2026-04-07T08-26-14-138Z.yml
Normal file
49
.playwright-mcp/page-2026-04-07T08-26-14-138Z.yml
Normal file
@@ -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: • 리프 메뉴 아이콘 클릭 → 바로 이동
|
||||
50
.playwright-mcp/page-2026-04-07T08-30-21-572Z.yml
Normal file
50
.playwright-mcp/page-2026-04-07T08-30-21-572Z.yml
Normal file
@@ -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: • 리프 메뉴 아이콘 클릭 → 바로 이동
|
||||
50
.playwright-mcp/page-2026-04-07T08-35-06-635Z.yml
Normal file
50
.playwright-mcp/page-2026-04-07T08-35-06-635Z.yml
Normal file
@@ -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: • 리프 메뉴 아이콘 클릭 → 바로 이동
|
||||
50
.playwright-mcp/page-2026-04-07T08-35-48-140Z.yml
Normal file
50
.playwright-mcp/page-2026-04-07T08-35-48-140Z.yml
Normal file
@@ -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: • 리프 메뉴 아이콘 클릭 → 바로 이동
|
||||
39
.playwright-mcp/page-2026-04-07T08-36-01-130Z.yml
Normal file
39
.playwright-mcp/page-2026-04-07T08-36-01-130Z.yml
Normal file
@@ -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: • 리프 메뉴 아이콘 클릭 → 바로 이동
|
||||
50
.playwright-mcp/page-2026-04-07T08-41-10-582Z.yml
Normal file
50
.playwright-mcp/page-2026-04-07T08-41-10-582Z.yml
Normal file
@@ -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: • 리프 메뉴 아이콘 클릭 → 바로 이동
|
||||
39
.playwright-mcp/page-2026-04-07T08-41-15-094Z.yml
Normal file
39
.playwright-mcp/page-2026-04-07T08-41-15-094Z.yml
Normal file
@@ -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: • 리프 메뉴 아이콘 클릭 → 바로 이동
|
||||
50
.playwright-mcp/page-2026-04-07T08-41-56-681Z.yml
Normal file
50
.playwright-mcp/page-2026-04-07T08-41-56-681Z.yml
Normal file
@@ -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: • 리프 메뉴 아이콘 클릭 → 바로 이동
|
||||
38
.playwright-mcp/page-2026-04-07T08-42-12-729Z.yml
Normal file
38
.playwright-mcp/page-2026-04-07T08-42-12-729Z.yml
Normal file
@@ -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: • 리프 메뉴 아이콘 클릭 → 바로 이동
|
||||
49
.playwright-mcp/page-2026-04-07T08-42-29-518Z.yml
Normal file
49
.playwright-mcp/page-2026-04-07T08-42-29-518Z.yml
Normal file
@@ -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";
|
||||
|
||||
import { useState, Suspense, useEffect, useCallback } from "react";
|
||||
import React, { useState, Suspense, useEffect, useCallback, useRef } from "react";
|
||||
import { useRouter, usePathname, useSearchParams } from "next/navigation";
|
||||
import { Button } from "@/components/ui/button";
|
||||
import {
|
||||
@@ -14,6 +14,8 @@ import {
|
||||
Package,
|
||||
ChevronDown,
|
||||
ChevronRight,
|
||||
PanelLeftClose,
|
||||
PanelLeftOpen,
|
||||
UserCheck,
|
||||
LogOut,
|
||||
User,
|
||||
@@ -52,6 +54,7 @@ import {
|
||||
} from "@/components/ui/dialog";
|
||||
import { CompanySwitcher } from "@/components/admin/CompanySwitcher";
|
||||
import { getIconComponent } from "@/components/admin/MenuIconPicker";
|
||||
import { TooltipProvider } from "@/components/ui/tooltip";
|
||||
|
||||
interface ExtendedUserInfo {
|
||||
userId: string;
|
||||
@@ -249,6 +252,34 @@ function AppLayoutInner({ children }: AppLayoutProps) {
|
||||
const [isMobile, setIsMobile] = useState(false);
|
||||
const [showCompanySwitcher, setShowCompanySwitcher] = useState(false);
|
||||
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 직접 접근 시 탭 자동 열기
|
||||
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) {
|
||||
return (
|
||||
<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
|
||||
className={`${
|
||||
isMobile
|
||||
? (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"
|
||||
} 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 && (
|
||||
<div className="border-border flex h-14 items-center justify-between border-b px-4">
|
||||
<Logo />
|
||||
</div>
|
||||
)}
|
||||
|
||||
{(user as ExtendedUserInfo)?.userType === "SUPER_ADMIN" && (
|
||||
<div className="border-border bg-muted/50 mx-3 mt-3 rounded-md border p-3">
|
||||
<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>
|
||||
{/* 축소 hover 오버레이: 마우스 올리면 전체 메뉴 표시 */}
|
||||
{!isMobile && sidebarCollapsed && collapsedHover && (
|
||||
<>
|
||||
<div
|
||||
className="fixed inset-0 z-30"
|
||||
onMouseEnter={handleCollapsedMouseLeave}
|
||||
/>
|
||||
<div
|
||||
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"
|
||||
onMouseEnter={() => { if (collapsedHoverTimer.current) clearTimeout(collapsedHoverTimer.current); setCollapsedHover(true); }}
|
||||
onMouseLeave={handleCollapsedMouseLeave}
|
||||
>
|
||||
<div className="border-border flex h-14 items-center justify-between border-b px-4">
|
||||
<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="사이드바 펼치기"
|
||||
>
|
||||
<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>
|
||||
</>
|
||||
)}
|
||||
|
||||
{((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"
|
||||
{/* 헤더: 로고 + 토글 버튼 */}
|
||||
{!isMobile && (
|
||||
<div className={`border-border flex h-14 items-center border-b overflow-hidden ${sidebarCollapsed ? "justify-center px-2" : "justify-between px-4"}`}>
|
||||
{sidebarCollapsed ? (
|
||||
<button
|
||||
onClick={toggleSidebarCollapse}
|
||||
className="flex h-9 w-9 items-center justify-center rounded-lg border border-border/50 transition-colors hover:bg-accent"
|
||||
title="사이드바 펼치기"
|
||||
>
|
||||
<Building2 className="h-4 w-4" />
|
||||
회사 선택
|
||||
</Button>
|
||||
<PanelLeftOpen className="h-5 w-5 text-muted-foreground" />
|
||||
</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 className="flex-1 overflow-y-auto py-4">
|
||||
<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>
|
||||
))}
|
||||
{/* 확장 상태 전용: 관리 회사, 모드 전환 버튼 */}
|
||||
{(!isMobile && sidebarCollapsed) ? null : (
|
||||
<>
|
||||
{(user as ExtendedUserInfo)?.userType === "SUPER_ADMIN" && (
|
||||
<div className="border-border bg-muted/50 mx-3 mt-3 rounded-md border p-3">
|
||||
<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>
|
||||
) : (
|
||||
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 className="border-border border-t px-3 py-1">
|
||||
<ThemeToggle />
|
||||
</div>
|
||||
{/* 테마 토글 */}
|
||||
{(!isMobile && sidebarCollapsed) ? null : (
|
||||
<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}>
|
||||
<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">
|
||||
{user.photo && user.photo.trim() !== "" && user.photo !== "null" ? (
|
||||
<img
|
||||
@@ -797,12 +930,14 @@ function AppLayoutInner({ children }: AppLayoutProps) {
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
<div className="min-w-0 flex-1">
|
||||
<p className="text-foreground truncate text-sm font-medium">{user.userName || "사용자"}</p>
|
||||
<p className="text-muted-foreground truncate text-xs">
|
||||
{user.deptName || user.email || user.userId}
|
||||
</p>
|
||||
</div>
|
||||
{(!isMobile && sidebarCollapsed) ? null : (
|
||||
<div className="min-w-0 flex-1">
|
||||
<p className="text-foreground truncate text-sm font-medium">{user.userName || "사용자"}</p>
|
||||
<p className="text-muted-foreground truncate text-xs">
|
||||
{user.deptName || user.email || user.userId}
|
||||
</p>
|
||||
</div>
|
||||
)}
|
||||
</button>
|
||||
</DropdownMenuTrigger>
|
||||
<DropdownMenuContent className="w-56" align="start" side="top">
|
||||
@@ -856,6 +991,7 @@ function AppLayoutInner({ children }: AppLayoutProps) {
|
||||
</DropdownMenu>
|
||||
</div>
|
||||
</aside>
|
||||
</TooltipProvider>
|
||||
|
||||
{/* 가운데 컨텐츠 영역 - 탭 시스템 */}
|
||||
<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