앱 관리 디자인 수정

This commit is contained in:
현성필
2025-11-17 14:17:34 +09:00
parent a074bd578a
commit ab2fca5419
18 changed files with 108 additions and 173 deletions
+41 -43
View File
@@ -4188,9 +4188,6 @@ select.form-control {
.faq-accordion .faq-item.active .faq-question {
color: #0049b4;
}
.faq-accordion .faq-item.active .faq-question::before {
background: linear-gradient(135deg, #0049b4 0%, #c3dfea 100%);
}
.faq-accordion .faq-item.active .faq-question .faq-icon {
transform: rotate(180deg);
color: #0049b4;
@@ -4288,7 +4285,7 @@ select.form-control {
display: flex;
align-items: center;
justify-content: center;
background: linear-gradient(135deg, #0049b4 0%, #c3dfea 100%);
background: #0049b4;
color: #FFFFFF;
border-radius: 50%;
font-size: 14px;
@@ -8633,50 +8630,34 @@ select.form-control {
@media (max-width: 768px) {
.form-actions {
flex-direction: column;
width: 100%;
padding: 0 16px 16px;
gap: 8px;
}
}
@media (max-width: 768px) {
.form-actions .btn,
.form-actions .btn-primary,
.form-actions .btn-secondary {
.form-actions .btn-secondary,
.form-actions .btn-cancel {
width: 100%;
min-height: 48px;
padding: 14px 24px;
font-size: 16px;
justify-content: center;
}
}
.form-actions .btn-primary,
.form-actions .btn-secondary {
display: inline-flex;
align-items: center;
gap: 8px;
padding: 12px 24px;
border-radius: 8px;
font-size: 16px;
font-weight: 500;
transition: all 0.3s ease;
text-decoration: none;
border: none;
cursor: pointer;
}
.form-actions .btn-primary .icon,
.form-actions .btn-secondary .icon {
font-size: 18px;
}
.form-actions .btn-primary {
background: linear-gradient(135deg, #0049b4 0%, #c3dfea 100%);
color: #FFFFFF;
box-shadow: 0 4px 12px rgba(75, 155, 255, 0.1);
}
.form-actions .btn-primary:hover {
transform: translateY(-2px);
box-shadow: 0 8px 24px rgba(75, 155, 255, 0.15);
}
.form-actions .btn-secondary {
background: #FFFFFF;
color: #1A1A2E;
border: 1px solid #E2E8F0;
}
.form-actions .btn-secondary:hover {
background: #F8FAFC;
border-color: #0049b4;
color: #0049b4;
.form-actions .btn .icon,
.form-actions .btn-primary .icon,
.form-actions .btn-secondary .icon,
.form-actions .btn-cancel .icon {
font-size: 18px;
}
.form-actions .btn svg,
.form-actions .btn-primary svg,
.form-actions .btn-secondary svg,
.form-actions .btn-cancel svg {
width: 18px;
height: 18px;
}
}
.register-result {
@@ -8890,6 +8871,14 @@ select.form-control {
gap: 16px;
flex-wrap: wrap;
}
@media (max-width: 768px) {
.result-actions {
flex-direction: column;
align-items: stretch;
gap: 8px;
padding: 0 16px;
}
}
.result-actions .btn-primary,
.result-actions .btn-secondary {
display: inline-flex;
@@ -8908,6 +8897,15 @@ select.form-control {
.result-actions .btn-secondary .icon {
font-size: 18px;
}
@media (max-width: 768px) {
.result-actions .btn-primary,
.result-actions .btn-secondary {
width: 100%;
min-height: 48px;
padding: 14px 24px;
justify-content: center;
}
}
.result-actions .btn-primary {
background: linear-gradient(135deg, #0049b4 0%, #c3dfea 100%);
color: #FFFFFF;
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -23,9 +23,9 @@
.faq-question {
color: $primary-blue;
&::before {
background: $gradient-primary;
}
//&::before {
// background: $gradient-primary;
//}
.faq-icon {
transform: rotate(180deg);
@@ -128,7 +128,7 @@
display: flex;
align-items: center;
justify-content: center;
background: $gradient-primary;
background: $primary-blue;
color: $white;
border-radius: $border-radius-circle;
font-size: $font-size-sm;
@@ -1004,54 +1004,30 @@
@media (max-width: $breakpoint-sm) {
flex-direction: column;
width: 100%;
.btn-primary,
.btn-secondary {
width: 100%;
justify-content: center;
}
}
.btn-primary,
.btn-secondary {
display: inline-flex;
align-items: center;
padding: 0 $spacing-md $spacing-md;
gap: $spacing-sm;
padding: 12px 24px;
border-radius: $border-radius-md;
font-size: $font-size-base;
font-weight: $font-weight-medium;
transition: $transition-base;
text-decoration: none;
border: none;
cursor: pointer;
.icon {
font-size: 18px;
}
}
.btn-primary {
background: $gradient-primary;
color: $white;
box-shadow: $shadow-md;
// Button styles for mobile
.btn,
.btn-primary,
.btn-secondary,
.btn-cancel {
@media (max-width: $breakpoint-sm) {
width: 100%;
min-height: 48px;
padding: 14px $spacing-lg;
font-size: $font-size-base;
justify-content: center;
&:hover {
transform: translateY(-2px);
box-shadow: $shadow-lg;
}
}
.icon {
font-size: 18px;
}
.btn-secondary {
background: $white;
color: $text-dark;
border: 1px solid $border-gray;
&:hover {
background: $gray-bg;
border-color: $primary-blue;
color: $primary-blue;
svg {
width: 18px;
height: 18px;
}
}
}
}
@@ -1303,6 +1279,13 @@
gap: $spacing-md;
flex-wrap: wrap;
@media (max-width: $breakpoint-sm) {
flex-direction: column;
align-items: stretch;
gap: $spacing-sm;
padding: 0 $spacing-md;
}
.btn-primary,
.btn-secondary {
display: inline-flex;
@@ -1320,6 +1303,13 @@
.icon {
font-size: 18px;
}
@media (max-width: $breakpoint-sm) {
width: 100%;
min-height: 48px;
padding: 14px $spacing-lg;
justify-content: center;
}
}
.btn-primary {
@@ -285,59 +285,6 @@
flex-wrap: wrap;
gap: $spacing-xs;
align-items: center;
.btn-action {
display: inline-flex;
align-items: center;
gap: 4px;
padding: 6px 12px;
font-size: $font-size-xs;
font-weight: $font-weight-medium;
border: none;
border-radius: $border-radius-md;
cursor: pointer;
transition: $transition-base;
white-space: nowrap;
&.btn-sm {
padding: 4px 10px;
font-size: 11px;
}
&.btn-primary {
background-color: $primary-blue;
color: $white;
&:hover {
background-color: darken($primary-blue, 10%);
box-shadow: $shadow-sm;
}
}
&.btn-danger {
background-color: $accent-orange;
color: $white;
&:hover {
background-color: darken($accent-orange, 10%);
box-shadow: $shadow-sm;
}
}
&.btn-warning {
background-color: $accent-yellow;
color: $gray-800;
&:hover {
background-color: darken($accent-yellow, 10%);
box-shadow: $shadow-sm;
}
}
&:active {
transform: scale(0.98);
}
}
}
// Empty State
@@ -19,7 +19,7 @@
class="btn btn-primary"
id="requestApiKey">
<i class="fas fa-plus"></i>
<span>앱 생성하기</span>
<span>앱 생성하기</span>
</button>
</div>
</div>
@@ -180,10 +180,10 @@
<!-- Action Buttons -->
<div class="form-actions">
<a th:href="@{/myapikey/modify/cancel(clientId=${apiKeyModification.clientId})}" class="btn-cancel">
<a th:href="@{/myapikey/modify/cancel(clientId=${apiKeyModification.clientId})}" class="btn btn-cancel">
취소
</a>
<button type="submit" class="btn-primary">
<button type="submit" class="btn btn-primary">
다음 단계
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<polyline points="9 18 15 12 9 6"></polyline>
@@ -374,4 +374,4 @@
</th:block>
</body>
</html>
</html>
@@ -129,11 +129,11 @@
<!-- Form Actions -->
<div class="form-actions">
<!-- Save and go back button -->
<button type="submit" formaction="/myapikey/modify/step2/save" class="btn-secondary" id="btnPrevStep">
<button type="submit" formaction="/myapikey/modify/step2/save" class="btn btn-secondary" id="btnPrevStep">
<span class="icon"></span>
이전 단계
</button>
<button type="submit" class="btn-primary" id="btnNext">
<button type="submit" class="btn btn-primary" id="btnNext">
저장
<span class="icon"></span>
</button>
@@ -53,11 +53,11 @@
<!-- Action Buttons -->
<div class="result-actions">
<a th:href="@{/myapikey}" class="btn-secondary">
<a th:href="@{/myapikey}" class="btn btn-secondary">
<span class="icon">📋</span>
API Key 목록으로
</a>
<a th:href="@{/myapikey/api_key_request/history}" class="btn-primary">
<a th:href="@{/myapikey/api_key_request/history}" class="btn btn-primary">
<span class="icon">📄</span>
요청 내역 확인
</a>
@@ -79,7 +79,7 @@
</p>
</div>
<div class="result-actions">
<a th:href="@{/myapikey}" class="btn-primary">
<a th:href="@{/myapikey}" class="btn btn-primary">
목록으로 돌아가기
</a>
</div>
@@ -149,4 +149,4 @@
</th:block>
</body>
</html>
</html>
@@ -177,11 +177,11 @@
<!-- Form Actions -->
<div class="form-actions">
<a href="/myapikey" class="btn-secondary" id="btnCancel">
<a href="/myapikey" class="btn btn-secondary" id="btnCancel">
<span class="icon"></span>
취소
</a>
<button type="submit" class="btn-primary">
<button type="submit" class="btn btn-primary">
다음 단계
<span class="icon"></span>
</button>
@@ -115,11 +115,11 @@
<!-- Form Actions -->
<div class="form-actions">
<button type="button" id="btnPrevStep" class="btn-secondary">
<button type="button" id="btnPrevStep" class="btn btn-secondary">
<span class="icon"></span>
이전 단계
</button>
<button type="submit" class="btn-primary">
<button type="submit" class="btn btn-primary">
저장
<span class="icon"></span>
</button>
@@ -53,7 +53,7 @@
<!-- Action Buttons -->
<div class="result-actions">
<a href="/myapikey" class="btn-secondary">
<a href="/myapikey" class="btn btn-secondary">
<span class="icon">📋</span>
API Key 목록으로
</a>
@@ -75,10 +75,10 @@
</p>
</div>
<div class="result-actions">
<a href="/myapikey/register/step1" class="btn-secondary">
<a href="/myapikey/register/step1" class="btn btn-secondary">
다시 시도
</a>
<a href="/myapikey" class="btn-primary">
<a href="/myapikey" class="btn btn-primary">
목록으로
</a>
</div>
@@ -147,14 +147,14 @@
<div class="detail-actions">
<button type="button"
sec:authorize="hasRole('ROLE_API_KEY_REQUEST')"
class="btn-cancel"
class="btn btn-secondary"
th:if="${appRequest.approval != null and appRequest.approval.approvalStatus != null and
(appRequest.approval.approvalStatus.toString() == 'PENDING' or appRequest.approval.approvalStatus.toString() == 'REQUESTED')}"
th:data-request-id="${appRequest.id}"
onclick="cancelRequestById(this)">
신청 취소
</button>
<a th:href="@{/myapikey}" class="btn-secondary">
<a th:href="@{/myapikey}" class="btn btn-primary">
목록으로
</a>
</div>
@@ -178,20 +178,20 @@
</div>
<!-- Action Buttons -->
<div class="detail-actions">
<div class="form-actions">
<a sec:authorize="hasRole('ROLE_API_KEY_REQUEST')"
class="btn-action btn-primary"
class="btn btn-primary"
th:href="@{/myapikey/modify/step1(clientId=${apiKey.clientid})}">
수정
</a>
<button type="button"
sec:authorize="hasRole('ROLE_API_KEY_REQUEST')"
class="btn-action btn-danger"
class="btn btn-danger"
th:data-client-id="${apiKey.clientid}"
onclick="deleteApiKeyFromButton(this)">
인증키 삭제
</button>
<a th:href="@{/myapikey}" class="btn-secondary">
<a th:href="@{/myapikey}" class="btn btn-secondary">
목록으로
</a>
</div>
@@ -101,7 +101,7 @@
<!-- Action Buttons -->
<div class="detail-actions">
<a th:href="@{/users}" class="btn-secondary">
<a th:href="@{/users}" class="btn btn-secondary">
<i class="fas fa-list"></i> 목록으로
</a>
</div>
@@ -72,13 +72,13 @@
<!-- Action Buttons -->
<div class="user-action-buttons" th:if="${user.roleCode != null and user.id != currentUserId}">
<button type="button" class="btn-action btn-sm btn-secondary inactivate_user"
<button type="button" class="btn btn-sm btn-secondary inactivate_user"
th:if="${user.userStatus.toString() == 'ACTIVE'}"
th:data-user-id="${user.id}"
th:data-user-name="${user.maskedUserName}">
비활성화
</button>
<button type="button" class="btn-action btn-sm btn-primary activate_user"
<button type="button" class="btn btn-sm btn-primary activate_user"
th:if="${user.userStatus.toString() != 'ACTIVE'}"
th:data-user-id="${user.id}"
th:data-user-name="${user.maskedUserName}">
@@ -90,7 +90,7 @@
th:data-user-email="${user.maskedEmailAddr}">
초대취소
</button>
<button type="button" class="btn-action btn-sm btn-warning assign_manager"
<button type="button" class="btn btn-sm btn-warning assign_manager"
th:if="${user.userStatus.toString() == 'ACTIVE' && user.roleCode.toString() == 'ROLE_CORP_USER'}"
th:data-user-id="${user.id}"
th:data-user-name="${user.maskedUserName}"