모바일 화면 - drawer 디자인 반영
This commit is contained in:
@@ -836,146 +836,182 @@ hr {
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: var(--white);
|
||||
background: #ffffff;
|
||||
transform: translateY(100%);
|
||||
transition: transform 0.3s ease;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
overflow-y: auto;
|
||||
}
|
||||
.mobile-drawer .drawer-header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 20px;
|
||||
border-bottom: 2px solid var(--border-gray);
|
||||
background: var(--white);
|
||||
box-shadow: var(--shadow-sm);
|
||||
min-height: 60px;
|
||||
height: 44px;
|
||||
min-height: 44px;
|
||||
padding: 0 12px 0 20px;
|
||||
background: #ffffff;
|
||||
}
|
||||
.mobile-drawer .drawer-header .drawer-logo {
|
||||
.mobile-drawer .drawer-header .drawer-header-left {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 12px;
|
||||
gap: 8px;
|
||||
}
|
||||
.mobile-drawer .drawer-header .drawer-logo .logo {
|
||||
height: 32px;
|
||||
width: auto;
|
||||
.mobile-drawer .drawer-header .drawer-header-left .drawer-user-icon {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
}
|
||||
.mobile-drawer .drawer-header .drawer-logo .logo-text {
|
||||
font-size: 16px;
|
||||
font-weight: 700;
|
||||
color: var(--primary-blue);
|
||||
.mobile-drawer .drawer-header .drawer-header-left .drawer-login-text {
|
||||
font-family: "Noto Sans KR", sans-serif;
|
||||
font-size: 12px;
|
||||
font-weight: 400;
|
||||
color: #212529;
|
||||
line-height: 26px;
|
||||
}
|
||||
.mobile-drawer .drawer-header .drawer-close {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
background: transparent;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border-radius: 8px;
|
||||
font-size: 18px;
|
||||
color: var(--text-gray);
|
||||
transition: all 0.3s ease;
|
||||
padding: 0;
|
||||
}
|
||||
.mobile-drawer .drawer-header .drawer-close svg {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
}
|
||||
.mobile-drawer .drawer-header .drawer-close:hover {
|
||||
background: var(--white);
|
||||
color: var(--text-dark);
|
||||
opacity: 0.7;
|
||||
}
|
||||
.mobile-drawer .drawer-welcome {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
min-height: 214px;
|
||||
padding: 40px 20px;
|
||||
background: #ebfbff;
|
||||
border-bottom: 1px solid #dadada;
|
||||
}
|
||||
.mobile-drawer .drawer-welcome .welcome-text {
|
||||
font-family: "Noto Sans KR", sans-serif;
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
color: #212529;
|
||||
line-height: 26px;
|
||||
margin: 0 0 24px 0;
|
||||
text-align: center;
|
||||
}
|
||||
.mobile-drawer .drawer-welcome .welcome-buttons {
|
||||
display: flex;
|
||||
gap: 21px;
|
||||
width: 100%;
|
||||
max-width: 309px;
|
||||
}
|
||||
.mobile-drawer .drawer-welcome .btn-drawer-signup {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 40px;
|
||||
background: #e5e7eb;
|
||||
color: #5f666c;
|
||||
font-family: "Noto Sans KR", sans-serif;
|
||||
font-size: 14px;
|
||||
font-weight: 700;
|
||||
border-radius: 8px;
|
||||
text-decoration: none;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
.mobile-drawer .drawer-welcome .btn-drawer-signup:hover {
|
||||
background: #d1d5db;
|
||||
}
|
||||
.mobile-drawer .drawer-welcome .btn-drawer-login {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 40px;
|
||||
background: #0049b4;
|
||||
color: #ffffff;
|
||||
font-family: "Noto Sans KR", sans-serif;
|
||||
font-size: 14px;
|
||||
font-weight: 700;
|
||||
border-radius: 8px;
|
||||
text-decoration: none;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
.mobile-drawer .drawer-welcome .btn-drawer-login:hover {
|
||||
background: rgb(0, 52.3166666667, 129);
|
||||
}
|
||||
.mobile-drawer .drawer-nav {
|
||||
flex: 1;
|
||||
padding: 0;
|
||||
overflow-y: auto;
|
||||
background: var(--white);
|
||||
padding: 0 20px;
|
||||
background: #ffffff;
|
||||
}
|
||||
.mobile-drawer .drawer-nav .drawer-menu {
|
||||
.mobile-drawer .drawer-nav .drawer-menu-list {
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding: 20px 0;
|
||||
padding: 0;
|
||||
}
|
||||
.mobile-drawer .drawer-nav .drawer-menu li {
|
||||
margin-bottom: 8px;
|
||||
.mobile-drawer .drawer-nav .drawer-menu-item {
|
||||
border-bottom: 1px solid #dadada;
|
||||
}
|
||||
.mobile-drawer .drawer-nav .drawer-menu li .drawer-link {
|
||||
display: block;
|
||||
padding: 16px 24px;
|
||||
margin: 0 20px;
|
||||
color: var(--text-dark);
|
||||
text-decoration: none;
|
||||
font-size: 18px;
|
||||
font-weight: 500;
|
||||
border-radius: 12px;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
.mobile-drawer .drawer-nav .drawer-menu li .drawer-link:hover, .mobile-drawer .drawer-nav .drawer-menu li .drawer-link:active {
|
||||
background: var(--light-bg);
|
||||
color: var(--primary-blue);
|
||||
transform: translateX(4px);
|
||||
box-shadow: var(--shadow-sm);
|
||||
}
|
||||
.mobile-drawer .drawer-actions {
|
||||
padding: 24px;
|
||||
border-top: 2px solid var(--border-gray);
|
||||
background: var(--white);
|
||||
box-shadow: 0 -4px 12px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
.mobile-drawer .drawer-actions .drawer-login-btn {
|
||||
display: block;
|
||||
text-align: center;
|
||||
padding: 14px 20px;
|
||||
color: var(--text-dark);
|
||||
text-decoration: none;
|
||||
border: 2px solid var(--primary-blue);
|
||||
border-radius: 12px;
|
||||
font-weight: 600;
|
||||
font-size: 16px;
|
||||
margin-bottom: 12px;
|
||||
transition: all 0.3s ease;
|
||||
}
|
||||
.mobile-drawer .drawer-actions .drawer-login-btn:hover {
|
||||
background: var(--light-bg);
|
||||
color: var(--primary-blue);
|
||||
}
|
||||
.mobile-drawer .drawer-actions .drawer-signup-btn {
|
||||
.mobile-drawer .drawer-nav .drawer-menu-item .drawer-menu-btn {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 8px;
|
||||
padding: 14px 20px;
|
||||
color: var(--white);
|
||||
text-decoration: none;
|
||||
border-radius: 12px;
|
||||
font-weight: 600;
|
||||
font-size: 16px;
|
||||
margin-bottom: 12px;
|
||||
transition: all 0.3s ease;
|
||||
box-shadow: var(--shadow-md);
|
||||
}
|
||||
.mobile-drawer .drawer-actions .drawer-signup-btn:hover {
|
||||
transform: translateY(-2px);
|
||||
box-shadow: var(--shadow-lg);
|
||||
}
|
||||
.mobile-drawer .drawer-actions .drawer-search-btn {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 8px;
|
||||
justify-content: space-between;
|
||||
width: 100%;
|
||||
padding: 14px 20px;
|
||||
background: var(--gray-bg);
|
||||
color: var(--text-dark);
|
||||
height: 56px;
|
||||
padding: 0 8px;
|
||||
background: transparent;
|
||||
border: none;
|
||||
border-radius: 12px;
|
||||
font-weight: 500;
|
||||
font-size: 16px;
|
||||
cursor: pointer;
|
||||
transition: all 0.3s ease;
|
||||
font-family: "Noto Sans KR", sans-serif;
|
||||
font-size: 16px;
|
||||
font-weight: 500;
|
||||
color: #212529;
|
||||
text-align: left;
|
||||
}
|
||||
.mobile-drawer .drawer-actions .drawer-search-btn:hover {
|
||||
background: var(--light-bg);
|
||||
color: var(--primary-blue);
|
||||
.mobile-drawer .drawer-nav .drawer-menu-item .drawer-menu-btn .accordion-icon {
|
||||
transition: transform 0.3s ease;
|
||||
}
|
||||
.mobile-drawer .drawer-nav .drawer-menu-item .drawer-submenu {
|
||||
display: none;
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding: 12px 0;
|
||||
background: #fafafa;
|
||||
}
|
||||
.mobile-drawer .drawer-nav .drawer-menu-item .drawer-submenu li a {
|
||||
display: block;
|
||||
padding: 8px 16px 8px 57px;
|
||||
font-family: "Noto Sans KR", sans-serif;
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
color: #212529;
|
||||
text-decoration: none;
|
||||
line-height: 28px;
|
||||
transition: color 0.3s ease;
|
||||
}
|
||||
.mobile-drawer .drawer-nav .drawer-menu-item .drawer-submenu li a:hover {
|
||||
color: #0049b4;
|
||||
}
|
||||
.mobile-drawer .drawer-nav .drawer-menu-item .drawer-submenu li:not(:first-child) a {
|
||||
font-weight: 400;
|
||||
color: #515151;
|
||||
}
|
||||
.mobile-drawer .drawer-nav .drawer-menu-item.open .drawer-menu-btn {
|
||||
font-weight: 700;
|
||||
}
|
||||
.mobile-drawer .drawer-nav .drawer-menu-item.open .drawer-menu-btn .accordion-icon {
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
.mobile-drawer .drawer-nav .drawer-menu-item.open .drawer-submenu {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.btn-mobilemenu {
|
||||
@@ -15889,7 +15925,7 @@ body.commission-print-page .btn-primary:hover {
|
||||
}
|
||||
@media (max-width: 768px) {
|
||||
.container {
|
||||
padding: 0 16px;
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -9,7 +9,8 @@
|
||||
padding: 0 $spacing-lg;
|
||||
|
||||
@include respond-to('sm') {
|
||||
padding: 0 $spacing-md;
|
||||
//padding: 0 $spacing-md;
|
||||
padding: 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -312,7 +312,7 @@
|
||||
}
|
||||
|
||||
// ===========================
|
||||
// Mobile Drawer/Modal
|
||||
// Mobile Drawer/Modal (Figma Design)
|
||||
// ===========================
|
||||
.mobile-drawer {
|
||||
position: fixed;
|
||||
@@ -335,7 +335,7 @@
|
||||
}
|
||||
|
||||
.drawer-overlay {
|
||||
display: none; // Not needed for full-screen drawer
|
||||
display: none;
|
||||
}
|
||||
|
||||
.drawer-content {
|
||||
@@ -346,162 +346,219 @@
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: var(--white);
|
||||
background: #ffffff;
|
||||
transform: translateY(100%);
|
||||
transition: transform 0.3s ease;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
// Figma: 헤더 바 44px
|
||||
.drawer-header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 20px;
|
||||
border-bottom: 2px solid var(--border-gray);
|
||||
background: var(--white);
|
||||
box-shadow: var(--shadow-sm);
|
||||
min-height: 60px;
|
||||
height: 44px;
|
||||
min-height: 44px;
|
||||
padding: 0 12px 0 20px;
|
||||
background: #ffffff;
|
||||
|
||||
.drawer-logo {
|
||||
.drawer-header-left {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 12px;
|
||||
gap: 8px;
|
||||
|
||||
.logo {
|
||||
height: 32px;
|
||||
width: auto;
|
||||
.drawer-user-icon {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
}
|
||||
|
||||
.logo-text {
|
||||
font-size: 16px;
|
||||
font-weight: 700;
|
||||
color: var(--primary-blue);
|
||||
.drawer-login-text {
|
||||
font-family: 'Noto Sans KR', sans-serif;
|
||||
font-size: 12px;
|
||||
font-weight: 400;
|
||||
color: #212529;
|
||||
line-height: 26px;
|
||||
}
|
||||
}
|
||||
|
||||
.drawer-close {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
background: transparent;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border-radius: 8px;
|
||||
font-size: 18px;
|
||||
color: var(--text-gray);
|
||||
transition: all 0.3s ease;
|
||||
padding: 0;
|
||||
|
||||
svg {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: var(--white);
|
||||
color: var(--text-dark);
|
||||
opacity: 0.7;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Figma: 환영 영역 214px, 배경 #ebfbff
|
||||
.drawer-welcome {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
min-height: 214px;
|
||||
padding: 40px 20px;
|
||||
background: #ebfbff;
|
||||
border-bottom: 1px solid #dadada;
|
||||
|
||||
.welcome-text {
|
||||
font-family: 'Noto Sans KR', sans-serif;
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
color: #212529;
|
||||
line-height: 26px;
|
||||
margin: 0 0 24px 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.welcome-buttons {
|
||||
display: flex;
|
||||
gap: 21px;
|
||||
width: 100%;
|
||||
max-width: 309px;
|
||||
}
|
||||
|
||||
// Figma: 회원가입 버튼 - #e5e7eb 배경, #5f666c 텍스트
|
||||
.btn-drawer-signup {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 40px;
|
||||
background: #e5e7eb;
|
||||
color: #5f666c;
|
||||
font-family: 'Noto Sans KR', sans-serif;
|
||||
font-size: 14px;
|
||||
font-weight: 700;
|
||||
border-radius: 8px;
|
||||
text-decoration: none;
|
||||
transition: all 0.3s ease;
|
||||
|
||||
&:hover {
|
||||
background: #d1d5db;
|
||||
}
|
||||
}
|
||||
|
||||
// Figma: 로그인 버튼 - #0049b4 배경, 흰색 텍스트
|
||||
.btn-drawer-login {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 40px;
|
||||
background: #0049b4;
|
||||
color: #ffffff;
|
||||
font-family: 'Noto Sans KR', sans-serif;
|
||||
font-size: 14px;
|
||||
font-weight: 700;
|
||||
border-radius: 8px;
|
||||
text-decoration: none;
|
||||
transition: all 0.3s ease;
|
||||
|
||||
&:hover {
|
||||
background: darken(#0049b4, 10%);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Figma: 메뉴 리스트 (아코디언)
|
||||
.drawer-nav {
|
||||
flex: 1;
|
||||
padding: 0;
|
||||
overflow-y: auto;
|
||||
background: var(--white);
|
||||
padding: 0 20px;
|
||||
background: #ffffff;
|
||||
|
||||
.drawer-menu {
|
||||
.drawer-menu-list {
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding: 20px 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
li {
|
||||
margin-bottom: 8px;
|
||||
.drawer-menu-item {
|
||||
border-bottom: 1px solid #dadada;
|
||||
|
||||
.drawer-link {
|
||||
display: block;
|
||||
padding: 16px 24px;
|
||||
margin: 0 20px;
|
||||
color: var(--text-dark);
|
||||
text-decoration: none;
|
||||
font-size: 18px;
|
||||
font-weight: 500;
|
||||
border-radius: 12px;
|
||||
transition: all 0.3s ease;
|
||||
// Figma: 메뉴 버튼 56px 높이
|
||||
.drawer-menu-btn {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
width: 100%;
|
||||
height: 56px;
|
||||
padding: 0 8px;
|
||||
background: transparent;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
font-family: 'Noto Sans KR', sans-serif;
|
||||
font-size: 16px;
|
||||
font-weight: 500;
|
||||
color: #212529;
|
||||
text-align: left;
|
||||
|
||||
&:hover, &:active {
|
||||
background: var(--light-bg);
|
||||
color: var(--primary-blue);
|
||||
transform: translateX(4px);
|
||||
box-shadow: var(--shadow-sm);
|
||||
.accordion-icon {
|
||||
transition: transform 0.3s ease;
|
||||
}
|
||||
}
|
||||
|
||||
// Figma: 서브메뉴 - 배경 #fafafa
|
||||
.drawer-submenu {
|
||||
display: none;
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding: 12px 0;
|
||||
background: #fafafa;
|
||||
|
||||
li {
|
||||
a {
|
||||
display: block;
|
||||
padding: 8px 16px 8px 57px;
|
||||
font-family: 'Noto Sans KR', sans-serif;
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
color: #212529;
|
||||
text-decoration: none;
|
||||
line-height: 28px;
|
||||
transition: color 0.3s ease;
|
||||
|
||||
&:hover {
|
||||
color: #0049b4;
|
||||
}
|
||||
}
|
||||
|
||||
// 두 번째 항목부터 Regular
|
||||
&:not(:first-child) a {
|
||||
font-weight: 400;
|
||||
color: #515151;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.drawer-actions {
|
||||
padding: 24px;
|
||||
border-top: 2px solid var(--border-gray);
|
||||
background: var(--white);
|
||||
box-shadow: 0 -4px 12px rgba(0, 0, 0, 0.05);
|
||||
// 열린 상태
|
||||
&.open {
|
||||
.drawer-menu-btn {
|
||||
font-weight: 700;
|
||||
|
||||
.drawer-login-btn {
|
||||
display: block;
|
||||
text-align: center;
|
||||
padding: 14px 20px;
|
||||
color: var(--text-dark);
|
||||
text-decoration: none;
|
||||
border: 2px solid var(--primary-blue);
|
||||
border-radius: 12px;
|
||||
font-weight: 600;
|
||||
font-size: 16px;
|
||||
margin-bottom: 12px;
|
||||
transition: all 0.3s ease;
|
||||
.accordion-icon {
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
}
|
||||
|
||||
&:hover {
|
||||
background: var(--light-bg);
|
||||
color: var(--primary-blue);
|
||||
}
|
||||
}
|
||||
|
||||
.drawer-signup-btn {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 8px;
|
||||
padding: 14px 20px;
|
||||
color: var(--white);
|
||||
text-decoration: none;
|
||||
border-radius: 12px;
|
||||
font-weight: 600;
|
||||
font-size: 16px;
|
||||
margin-bottom: 12px;
|
||||
transition: all 0.3s ease;
|
||||
box-shadow: var(--shadow-md);
|
||||
|
||||
&:hover {
|
||||
transform: translateY(-2px);
|
||||
box-shadow: var(--shadow-lg);
|
||||
}
|
||||
}
|
||||
|
||||
.drawer-search-btn {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 8px;
|
||||
width: 100%;
|
||||
padding: 14px 20px;
|
||||
background: var(--gray-bg);
|
||||
color: var(--text-dark);
|
||||
border: none;
|
||||
border-radius: 12px;
|
||||
font-weight: 500;
|
||||
font-size: 16px;
|
||||
cursor: pointer;
|
||||
transition: all 0.3s ease;
|
||||
|
||||
&:hover {
|
||||
background: var(--light-bg);
|
||||
color: var(--primary-blue);
|
||||
.drawer-submenu {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -98,87 +98,106 @@
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<!-- Mobile Drawer/Modal -->
|
||||
<!-- Mobile Drawer/Modal (Figma Design) -->
|
||||
<div class="mobile-drawer" id="mobileDrawer">
|
||||
<div class="drawer-overlay" id="drawerOverlay"></div>
|
||||
<div class="drawer-content">
|
||||
<!-- Drawer Header -->
|
||||
<div class="drawer-header">
|
||||
<div class="drawer-logo">
|
||||
<a th:href="@{/}" class="drawer-logo-link">
|
||||
<img src="/img/logo/logo.png" alt="광주은행" class="logo">
|
||||
</a>
|
||||
<a th:href="@{/}" class="logo-text">개발자 포털</a>
|
||||
<div class="drawer-header-left">
|
||||
<img th:src="@{/img/icon_user_blue.svg}" alt="User" class="drawer-user-icon" onerror="this.src='/img/user_icon.svg'">
|
||||
<span class="drawer-login-text" sec:authorize="isAnonymous()">로그인 해 주세요</span>
|
||||
<span class="drawer-login-text" sec:authorize="isAuthenticated()">[[${#authentication.principal.userName}]]님</span>
|
||||
</div>
|
||||
<button class="drawer-close" id="drawerClose">
|
||||
<i class="fas fa-times"></i>
|
||||
<button class="drawer-close" id="drawerClose" aria-label="메뉴 닫기">
|
||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M18 6L6 18M6 6L18 18" stroke="#212529" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<!-- Authenticated User Info (Mobile) -->
|
||||
<div class="drawer-user-info" sec:authorize="isAuthenticated()">
|
||||
<div class="drawer-profile">
|
||||
<div class="profile-avatar">
|
||||
<i class="fas fa-user-circle"></i>
|
||||
</div>
|
||||
<div class="profile-info">
|
||||
<p class="profile-name">[[${#authentication.principal.userName}]]님</p>
|
||||
<span class="profile-greeting">즐거운 하루 되세요!</span>
|
||||
</div>
|
||||
<!-- Welcome Section (Anonymous) -->
|
||||
<div class="drawer-welcome" sec:authorize="isAnonymous()">
|
||||
<p class="welcome-text">광주은행 API Portal에 오신것을 환영합니다.</p>
|
||||
<div class="welcome-buttons">
|
||||
<a th:href="@{/signup}" class="btn-drawer-signup">회원가입</a>
|
||||
<a th:href="@{/login}" class="btn-drawer-login">로그인</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<nav class="drawer-nav">
|
||||
<ul class="drawer-menu">
|
||||
<li><a href="#docs" class="drawer-link">서비스 소개</a></li>
|
||||
<li><a href="/apis" class="drawer-link">오픈 API</a></li>
|
||||
<li><a href="#playground" class="drawer-link">고객지원</a></li>
|
||||
<!-- Welcome Section (Authenticated) -->
|
||||
<div class="drawer-welcome authenticated" sec:authorize="isAuthenticated()">
|
||||
<p class="welcome-text">[[${#authentication.principal.userName}]]님, 환영합니다.</p>
|
||||
<div class="welcome-buttons">
|
||||
<a th:href="@{/mypage}" class="btn-drawer-signup">내 정보</a>
|
||||
<a th:href="@{/actionLogout.do}" class="btn-drawer-login">로그아웃</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Authenticated Menu Items -->
|
||||
<li sec:authorize="isAuthenticated()">
|
||||
<a href="#community" class="drawer-link">커뮤니티</a>
|
||||
<!-- Navigation Menu (Accordion Style) -->
|
||||
<nav class="drawer-nav">
|
||||
<ul class="drawer-menu-list">
|
||||
<!-- API Portal 안내 -->
|
||||
<li class="drawer-menu-item has-submenu">
|
||||
<button class="drawer-menu-btn" type="button">
|
||||
<span>API Portal 안내</span>
|
||||
<svg class="accordion-icon" width="14" height="7" viewBox="0 0 14 7" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M1 1L7 6L13 1" stroke="#212529" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
</button>
|
||||
<ul class="drawer-submenu">
|
||||
<li><a th:href="@{/about}">API Portal 소개</a></li>
|
||||
<li><a th:href="@{/guide}">이용안내</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li sec:authorize="hasRole('ROLE_USER_MANAGER')">
|
||||
<a th:href="@{/users}" class="drawer-link">
|
||||
<i class="fas fa-users"></i> 이용자 관리
|
||||
</a>
|
||||
|
||||
<!-- API -->
|
||||
<li class="drawer-menu-item has-submenu">
|
||||
<button class="drawer-menu-btn" type="button">
|
||||
<span>API</span>
|
||||
<svg class="accordion-icon" width="14" height="7" viewBox="0 0 14 7" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M1 1L7 6L13 1" stroke="#212529" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
</button>
|
||||
<ul class="drawer-submenu">
|
||||
<li><a th:href="@{/apis}">API 마켓</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li sec:authorize="hasRole('ROLE_APP')">
|
||||
<a th:href="@{/myapikey}" class="drawer-link">
|
||||
<i class="fas fa-key"></i> 인증 키 관리
|
||||
</a>
|
||||
<!-- 고객지원 -->
|
||||
<li class="drawer-menu-item has-submenu">
|
||||
<button class="drawer-menu-btn" type="button">
|
||||
<span>고객지원</span>
|
||||
<svg class="accordion-icon" width="14" height="7" viewBox="0 0 14 7" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M1 1L7 6L13 1" stroke="#212529" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
</button>
|
||||
<ul class="drawer-submenu">
|
||||
<li><a th:href="@{/portalnotice}">공지사항</a></li>
|
||||
<li><a th:href="@{/faq_list}">FAQ</a></li>
|
||||
<li><a th:href="@{/inquiry}">Q&A</a></li>
|
||||
<li><a th:href="@{/partnership}">사업 제휴 문의</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li sec:authorize="hasRole('ROLE_APP')">
|
||||
<a th:href="@{/statistics/api}" class="drawer-link">
|
||||
<i class="fas fa-chart-bar"></i> 이용 통계
|
||||
</a>
|
||||
</li>
|
||||
<li sec:authorize="isAuthenticated()">
|
||||
<a th:href="@{/mypage}" class="drawer-link">
|
||||
<i class="fas fa-user-circle"></i> 내 정보 관리
|
||||
</a>
|
||||
</li>
|
||||
<li sec:authorize="isAuthenticated()">
|
||||
<a th:href="@{/change_password}" class="drawer-link">
|
||||
<i class="fas fa-lock"></i> 비밀번호 변경
|
||||
</a>
|
||||
|
||||
<!-- 마이페이지 (Authenticated Only) -->
|
||||
<li class="drawer-menu-item has-submenu" sec:authorize="isAuthenticated()">
|
||||
<button class="drawer-menu-btn" type="button">
|
||||
<span>마이페이지</span>
|
||||
<svg class="accordion-icon" width="14" height="7" viewBox="0 0 14 7" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M1 1L7 6L13 1" stroke="#212529" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
</button>
|
||||
<ul class="drawer-submenu">
|
||||
<li sec:authorize="hasRole('ROLE_USER_MANAGER')"><a th:href="@{/users}">이용자 관리</a></li>
|
||||
<li sec:authorize="hasRole('ROLE_APP')"><a th:href="@{/myapikey}">인증 키 관리</a></li>
|
||||
<li sec:authorize="hasRole('ROLE_APP')"><a th:href="@{/statistics/api}">이용 통계</a></li>
|
||||
<li sec:authorize="hasRole('ROLE_APP')"><a th:href="@{/commission/manage}">과금 관리</a></li>
|
||||
<li><a th:href="@{/mypage}">내 정보 관리</a></li>
|
||||
<li><a th:href="@{/change_password}">비밀번호 변경</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
|
||||
<div class="drawer-actions">
|
||||
<!-- Anonymous User Actions -->
|
||||
<div sec:authorize="isAnonymous()">
|
||||
<a th:href="@{/login}" class="drawer-login-btn">로그인</a>
|
||||
</div>
|
||||
|
||||
<!-- Authenticated User Actions -->
|
||||
<div sec:authorize="isAuthenticated()">
|
||||
<a th:href="@{/actionLogout.do}" class="drawer-logout-btn">
|
||||
<i class="fas fa-sign-out-alt"></i>
|
||||
로그아웃
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</th:block>
|
||||
@@ -201,18 +220,40 @@
|
||||
function closeDrawer() {
|
||||
drawer.classList.remove('active');
|
||||
document.body.style.overflow = '';
|
||||
// Close all accordion menus when drawer closes
|
||||
document.querySelectorAll('.drawer-menu-item.open').forEach(item => {
|
||||
item.classList.remove('open');
|
||||
});
|
||||
}
|
||||
|
||||
menuToggle?.addEventListener('click', openDrawer);
|
||||
drawerClose?.addEventListener('click', closeDrawer);
|
||||
drawerOverlay?.addEventListener('click', closeDrawer);
|
||||
|
||||
// Close drawer when clicking on nav links
|
||||
document.querySelectorAll('.drawer-link').forEach(link => {
|
||||
// Mobile Drawer Accordion Menu
|
||||
const menuButtons = document.querySelectorAll('.drawer-menu-btn');
|
||||
menuButtons.forEach(btn => {
|
||||
btn.addEventListener('click', function(e) {
|
||||
e.preventDefault();
|
||||
const menuItem = this.closest('.drawer-menu-item');
|
||||
const isOpen = menuItem.classList.contains('open');
|
||||
|
||||
// Close all other menus (optional - remove for multi-open)
|
||||
// document.querySelectorAll('.drawer-menu-item.open').forEach(item => {
|
||||
// if (item !== menuItem) item.classList.remove('open');
|
||||
// });
|
||||
|
||||
// Toggle current menu
|
||||
menuItem.classList.toggle('open');
|
||||
});
|
||||
});
|
||||
|
||||
// Close drawer when clicking on submenu links
|
||||
document.querySelectorAll('.drawer-submenu a').forEach(link => {
|
||||
link.addEventListener('click', closeDrawer);
|
||||
});
|
||||
|
||||
// Mypage Dropdown
|
||||
// Mypage Dropdown (Desktop)
|
||||
const mypageToggle = document.querySelector('.mypage-toggle');
|
||||
const mypageDropdown = document.querySelector('.mypage-dropdown');
|
||||
|
||||
@@ -222,20 +263,18 @@
|
||||
mypageDropdown.classList.toggle('active');
|
||||
});
|
||||
|
||||
// Close dropdown when clicking outside
|
||||
document.addEventListener('click', function(e) {
|
||||
if (!mypageDropdown.contains(e.target)) {
|
||||
mypageDropdown.classList.remove('active');
|
||||
}
|
||||
});
|
||||
|
||||
// Prevent dropdown from closing when clicking inside
|
||||
mypageDropdown.addEventListener('click', function(e) {
|
||||
e.stopPropagation();
|
||||
});
|
||||
}
|
||||
|
||||
// Desktop Navigation Submenu Toggle (Click-based for mobile-like behavior on desktop)
|
||||
// Desktop Navigation Submenu Toggle
|
||||
const navItems = document.querySelectorAll('.header-center .nav-menu > li');
|
||||
|
||||
navItems.forEach(item => {
|
||||
@@ -243,30 +282,25 @@
|
||||
const submenu = item.querySelector('.sub-menu');
|
||||
|
||||
if (submenu) {
|
||||
// Add click handler for toggle
|
||||
link.addEventListener('click', function(e) {
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
|
||||
// Close other submenus
|
||||
navItems.forEach(otherItem => {
|
||||
if (otherItem !== item && otherItem.classList.contains('submenu-open')) {
|
||||
otherItem.classList.remove('submenu-open');
|
||||
}
|
||||
});
|
||||
|
||||
// Toggle current submenu
|
||||
item.classList.toggle('submenu-open');
|
||||
});
|
||||
|
||||
// Close submenu when clicking outside
|
||||
document.addEventListener('click', function(e) {
|
||||
if (!item.contains(e.target)) {
|
||||
item.classList.remove('submenu-open');
|
||||
}
|
||||
});
|
||||
|
||||
// Prevent submenu from closing when clicking inside
|
||||
submenu.addEventListener('click', function(e) {
|
||||
e.stopPropagation();
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user