diff --git a/apps/cm/src/pages/dashboard/ui/dashboard-page.tsx b/apps/cm/src/pages/dashboard/ui/dashboard-page.tsx index b19c0d0c6..327689474 100644 --- a/apps/cm/src/pages/dashboard/ui/dashboard-page.tsx +++ b/apps/cm/src/pages/dashboard/ui/dashboard-page.tsx @@ -110,12 +110,12 @@ function DashboardPage() { }; return ( -
+
{/* 첫번째 라인 */} -
+
{/* 첫번쨰 열 */} -
+
{/* 전국 하수처리시설 개소수 및 가동률 */} @@ -127,7 +127,7 @@ function DashboardPage() {
{/* 두번쨰 열 */} -
+
{/* 수계별 유입ㆍ방류수질 분석 */} @@ -139,14 +139,16 @@ function DashboardPage() {
{/* 지도영역 */} - +
+ +
{/* 사용자 정보 카드 */} -
+
{error &&
{error}
} {userInfo ? ( -
-
+
+
프로필 { const target = e.target as HTMLImageElement; @@ -156,15 +158,15 @@ function DashboardPage() {
{userInfo.userName || "-"}
온라인
-
+
2FA 활성화:{" "} {userInfo.twoFactorEnabled ? "예" : "아니오"}
-
- - +
+ +
) : ( @@ -172,7 +174,7 @@ function DashboardPage() { )}
-

일정 알림

+

일정 알림

@@ -180,7 +182,7 @@ function DashboardPage() {
-

내 작성글

+

내 작성글

@@ -190,7 +192,7 @@ function DashboardPage() {
{/* 두번째 라인 */} -
+
diff --git a/packages/common/components/src/ui/header/index.tsx b/packages/common/components/src/ui/header/index.tsx index 920e29316..5408cbc4e 100644 --- a/packages/common/components/src/ui/header/index.tsx +++ b/packages/common/components/src/ui/header/index.tsx @@ -30,6 +30,7 @@ const isLoggedIn = !!userId; export function Header({ viewOnly }: { viewOnly?: boolean }) { const [mounted, setMounted] = useState(false); const [logoWidth, setLogoWidth] = useState(0); + const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false); const logoRef = useRef(null); const { data: userInfo } = useQuery({ @@ -146,65 +147,126 @@ export function Header({ viewOnly }: { viewOnly?: boolean }) { }, []); return ( -
-
- -

- {mounted ? ( - logo { - if (logoRef.current) { - setLogoWidth(logoRef.current.offsetWidth); - } - }} - /> - ) : ( - - )} +
+
+
+ +

+ {mounted ? ( + logo { + if (logoRef.current) { + setLogoWidth(logoRef.current.offsetWidth); + } + }} + /> + ) : ( + + )} 0 ? `${(logoWidth - 120) / (siteInfo?.siteNm?.length || 1)}px` : '0.05em' - }} + className="text-xs sm:text-sm md:text-[1.2rem] font-semibold text-foreground" + style={{ + letterSpacing: logoWidth > 0 ? `${(logoWidth - 120) / (siteInfo?.siteNm?.length || 1)}px` : '0.05em' + }} > - {siteInfo?.siteNm} - -

+ {siteInfo?.siteNm} + +

+
+ {/* 모바일에서 오른쪽 요소들 */} +
+ {/* 모바일 메뉴 토글 버튼 */} + {mounted && ( + + )} + {mounted && isLoggedIn && ( + + + + + +
    +
  • + +
  • +
  • + 로그아웃 +
  • +
+
+
+ )} +
-
+ {/* 모바일에서 네비게이션 (토글 시 표시) */} + {isMobileMenuOpen && ( +
+ {mounted && userSiteList?.content && userSiteList.content.length > 0 && ( + + )} +
+ )} + {/* 데스크톱에서 중간 네비게이션 */} +
{mounted && userSiteList?.content && userSiteList.content.length > 0 && ( -
-
+ {/* 데스크톱에서 오른쪽 요소들 */} +
{mounted ? ( isLoggedIn && ( -