Merge branch 'main-design-layout' of https://git.eactive.synology.me:8090/kjb-eapim/eapim-portal into main-design-layout
This commit is contained in:
+1
-1
@@ -15,7 +15,7 @@ import org.springframework.web.bind.annotation.RequestParam;
|
|||||||
@Controller
|
@Controller
|
||||||
@RequestMapping("/agreements")
|
@RequestMapping("/agreements")
|
||||||
public class AgreementsController {
|
public class AgreementsController {
|
||||||
public static final String TERMS_AGREEMENTS = "fragment/kbank/terms_agreements";
|
public static final String TERMS_AGREEMENTS = "fragment/kjbank/terms_agreements";
|
||||||
|
|
||||||
private final AgreementsFacade agreementsFacade;
|
private final AgreementsFacade agreementsFacade;
|
||||||
|
|
||||||
|
|||||||
+1
-45
@@ -119,7 +119,7 @@ public class CommissionController {
|
|||||||
@PostMapping()
|
@PostMapping()
|
||||||
public ResponseEntity<?> list(@RequestBody CommissionSearch search) {
|
public ResponseEntity<?> list(@RequestBody CommissionSearch search) {
|
||||||
CommissionDTO commissionDTO = null;
|
CommissionDTO commissionDTO = null;
|
||||||
|
search.setProvider(providerCode);
|
||||||
search.setPartnerCode(SecurityUtil.getUserOrg().getOrgCode());
|
search.setPartnerCode(SecurityUtil.getUserOrg().getOrgCode());
|
||||||
|
|
||||||
if (!StringUtils.isEmpty(search.getPartnerCode())) {
|
if (!StringUtils.isEmpty(search.getPartnerCode())) {
|
||||||
@@ -157,50 +157,6 @@ public class CommissionController {
|
|||||||
return ErrorUtil.create("fail.commission.needPartnerCode");
|
return ErrorUtil.create("fail.commission.needPartnerCode");
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/print1/{year}/{month}")
|
|
||||||
public ResponseEntity<?> print(
|
|
||||||
@PathVariable("year") String year,
|
|
||||||
@PathVariable("month") String month) {
|
|
||||||
CommissionDTO commissionDTO = null;
|
|
||||||
CommissionSearch search = new CommissionSearch();
|
|
||||||
search.setOrganization(SecurityUtil.getPortalAuthenticatedUser().getPortalOrg());
|
|
||||||
|
|
||||||
search.setProvider(providerCode);
|
|
||||||
search.setYear(year);
|
|
||||||
search.setMonth(month);
|
|
||||||
|
|
||||||
search.setPartnerCode(SecurityUtil.getUserOrg().getOrgCode());
|
|
||||||
|
|
||||||
if (!StringUtils.isEmpty(search.getPartnerCode())) {
|
|
||||||
try {
|
|
||||||
String url = obmUrl + Constants.COMMISSION_PRINT_URL;
|
|
||||||
String result = externalService.getResponseHttpPost(url, toJson(search));
|
|
||||||
HashMap<String, Object> returnObj = new ObjectMapper().readValue(result, HashMap.class);
|
|
||||||
if (StringUtils.pathEquals(search.getPartnerCode(), "000002-01")) {
|
|
||||||
log.debug("Found Together : " + search.getPartnerCode());
|
|
||||||
search.setPartnerCode("000002-02");
|
|
||||||
String togetherResult = externalService.getResponseHttpPost(url, toJson(search));
|
|
||||||
|
|
||||||
HashMap<String, Object> togetherLendingReturnObj = new ObjectMapper().readValue(togetherResult, HashMap.class);
|
|
||||||
log.debug("togetherLendingReturnObj : " + togetherLendingReturnObj.toString());
|
|
||||||
if (!StringUtils.isEmpty(togetherLendingReturnObj.get("error"))) {
|
|
||||||
HashMap<String, Object> error = (HashMap) togetherLendingReturnObj.get("error");
|
|
||||||
return ErrorUtil.create("fail.commission.serverError", error.get("message").toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
HashMap<String, Object> mergeMap = mergeCommissionData(returnObj, togetherLendingReturnObj);
|
|
||||||
result = new ObjectMapper().writeValueAsString(mergeMap);
|
|
||||||
}
|
|
||||||
commissionDTO = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false).readValue(result, CommissionDTO.class);
|
|
||||||
} catch (Exception e) {
|
|
||||||
log.warn(e.getMessage(), e);
|
|
||||||
return ErrorUtil.create("fail.commission.list", "수수료 조회에 실패하였습니다.");
|
|
||||||
}
|
|
||||||
return ResponseEntity.ok().body(commissionDTO);
|
|
||||||
}
|
|
||||||
return ErrorUtil.create("fail.commission.needPartnerCode");
|
|
||||||
}
|
|
||||||
|
|
||||||
private String toJson(CommissionSearch search) {
|
private String toJson(CommissionSearch search) {
|
||||||
try {
|
try {
|
||||||
Map<String, String> jsonMap = new HashMap<>();
|
Map<String, String> jsonMap = new HashMap<>();
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -5,8 +5,8 @@
|
|||||||
|
|
||||||
// Color Palette - Vibrant and Modern
|
// Color Palette - Vibrant and Modern
|
||||||
// Primary colors
|
// Primary colors
|
||||||
$primary-blue: #4B9BFF; // Bright blue (main brand color)
|
$primary-blue: #0049b4; // 광주은행 블루
|
||||||
$secondary-blue: #2E7FF7; // Deep blue
|
$secondary-blue: #c3dfea; // Deep blue
|
||||||
$accent-cyan: #00D4FF; // Sky blue accent
|
$accent-cyan: #00D4FF; // Sky blue accent
|
||||||
$accent-yellow: #FFD93D; // Yellow accent
|
$accent-yellow: #FFD93D; // Yellow accent
|
||||||
$accent-orange: #FF6B6B; // Orange accent
|
$accent-orange: #FF6B6B; // Orange accent
|
||||||
|
|||||||
@@ -23,9 +23,9 @@
|
|||||||
.faq-question {
|
.faq-question {
|
||||||
color: $primary-blue;
|
color: $primary-blue;
|
||||||
|
|
||||||
&::before {
|
//&::before {
|
||||||
background: $gradient-primary;
|
// background: $gradient-primary;
|
||||||
}
|
//}
|
||||||
|
|
||||||
.faq-icon {
|
.faq-icon {
|
||||||
transform: rotate(180deg);
|
transform: rotate(180deg);
|
||||||
@@ -128,7 +128,7 @@
|
|||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
background: $gradient-primary;
|
background: $primary-blue;
|
||||||
color: $white;
|
color: $white;
|
||||||
border-radius: $border-radius-circle;
|
border-radius: $border-radius-circle;
|
||||||
font-size: $font-size-sm;
|
font-size: $font-size-sm;
|
||||||
|
|||||||
@@ -31,7 +31,7 @@
|
|||||||
|
|
||||||
// Button variants
|
// Button variants
|
||||||
&-primary {
|
&-primary {
|
||||||
background: $gradient-primary;
|
background: $primary-blue;
|
||||||
color: $white;
|
color: $white;
|
||||||
box-shadow: $shadow-md;
|
box-shadow: $shadow-md;
|
||||||
|
|
||||||
@@ -46,9 +46,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
&-secondary {
|
&-secondary {
|
||||||
background: $white;
|
background: $secondary-blue;
|
||||||
color: $primary-blue;
|
color: #6e7780;
|
||||||
border: 2px solid $primary-blue;
|
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
background: $light-bg;
|
background: $light-bg;
|
||||||
@@ -475,4 +474,4 @@
|
|||||||
i {
|
i {
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -332,30 +332,30 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
button {
|
//button {
|
||||||
padding: $spacing-sm $spacing-lg;
|
// padding: $spacing-sm $spacing-lg;
|
||||||
background: $gradient-primary;
|
// background: $gradient-primary;
|
||||||
color: $white;
|
// color: $white;
|
||||||
border: none;
|
// border: none;
|
||||||
border-radius: $border-radius-md;
|
// border-radius: $border-radius-md;
|
||||||
font-size: $font-size-sm;
|
// font-size: $font-size-sm;
|
||||||
font-weight: $font-weight-medium;
|
// font-weight: $font-weight-medium;
|
||||||
cursor: pointer;
|
// cursor: pointer;
|
||||||
transition: $transition-base;
|
// transition: $transition-base;
|
||||||
white-space: nowrap;
|
// white-space: nowrap;
|
||||||
|
//
|
||||||
&:hover {
|
// &:hover {
|
||||||
transform: translateY(-2px);
|
// transform: translateY(-2px);
|
||||||
box-shadow: $shadow-md;
|
// box-shadow: $shadow-md;
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
&:active {
|
// &:active {
|
||||||
transform: translateY(0);
|
// transform: translateY(0);
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
i {
|
// i {
|
||||||
margin-right: $spacing-xs;
|
// margin-right: $spacing-xs;
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,6 +51,7 @@
|
|||||||
@import 'pages/org-register';
|
@import 'pages/org-register';
|
||||||
@import 'pages/user-management';
|
@import 'pages/user-management';
|
||||||
@import 'pages/commission';
|
@import 'pages/commission';
|
||||||
|
@import 'pages/terms-agreements';
|
||||||
|
|
||||||
// 6. Themes
|
// 6. Themes
|
||||||
@import 'themes/dark';
|
@import 'themes/dark';
|
||||||
|
|||||||
@@ -1004,54 +1004,30 @@
|
|||||||
|
|
||||||
@media (max-width: $breakpoint-sm) {
|
@media (max-width: $breakpoint-sm) {
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
width: 100%;
|
padding: 0 $spacing-md $spacing-md;
|
||||||
|
|
||||||
.btn-primary,
|
|
||||||
.btn-secondary {
|
|
||||||
width: 100%;
|
|
||||||
justify-content: center;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-primary,
|
|
||||||
.btn-secondary {
|
|
||||||
display: inline-flex;
|
|
||||||
align-items: center;
|
|
||||||
gap: $spacing-sm;
|
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 {
|
// Button styles for mobile
|
||||||
background: $gradient-primary;
|
.btn,
|
||||||
color: $white;
|
.btn-primary,
|
||||||
box-shadow: $shadow-md;
|
.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 {
|
.icon {
|
||||||
transform: translateY(-2px);
|
font-size: 18px;
|
||||||
box-shadow: $shadow-lg;
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-secondary {
|
svg {
|
||||||
background: $white;
|
width: 18px;
|
||||||
color: $text-dark;
|
height: 18px;
|
||||||
border: 1px solid $border-gray;
|
}
|
||||||
|
|
||||||
&:hover {
|
|
||||||
background: $gray-bg;
|
|
||||||
border-color: $primary-blue;
|
|
||||||
color: $primary-blue;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1303,6 +1279,13 @@
|
|||||||
gap: $spacing-md;
|
gap: $spacing-md;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
|
|
||||||
|
@media (max-width: $breakpoint-sm) {
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: stretch;
|
||||||
|
gap: $spacing-sm;
|
||||||
|
padding: 0 $spacing-md;
|
||||||
|
}
|
||||||
|
|
||||||
.btn-primary,
|
.btn-primary,
|
||||||
.btn-secondary {
|
.btn-secondary {
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
@@ -1320,6 +1303,13 @@
|
|||||||
.icon {
|
.icon {
|
||||||
font-size: 18px;
|
font-size: 18px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@media (max-width: $breakpoint-sm) {
|
||||||
|
width: 100%;
|
||||||
|
min-height: 48px;
|
||||||
|
padding: 14px $spacing-lg;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn-primary {
|
.btn-primary {
|
||||||
|
|||||||
@@ -45,6 +45,7 @@
|
|||||||
border: 1px solid $border-gray;
|
border: 1px solid $border-gray;
|
||||||
border-radius: $border-radius-sm;
|
border-radius: $border-radius-sm;
|
||||||
font-size: $font-size-sm;
|
font-size: $font-size-sm;
|
||||||
|
min-width: 100px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -258,12 +259,15 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Commission Print Page Specific
|
// Commission Print Page Specific
|
||||||
.commission-print-page {
|
// Note: commissionPrint.html uses body class for scoping
|
||||||
|
body.commission-print-page {
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
|
width: 600px;
|
||||||
|
margin: 90px;
|
||||||
|
font-family: 'Noto Sans KR', -apple-system, sans-serif;
|
||||||
|
|
||||||
body {
|
div {
|
||||||
width: 600px;
|
position: relative;
|
||||||
margin: 90px;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
table {
|
table {
|
||||||
@@ -289,9 +293,32 @@
|
|||||||
|
|
||||||
h2 {
|
h2 {
|
||||||
margin-top: $spacing-2xl;
|
margin-top: $spacing-2xl;
|
||||||
|
float: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
p {
|
p {
|
||||||
line-height: 1.6;
|
line-height: 1.6;
|
||||||
|
|
||||||
|
&[style*="float: right"] {
|
||||||
|
margin-top: 25px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Print buttons
|
||||||
|
.btn {
|
||||||
|
padding: 8px 16px;
|
||||||
|
border: none;
|
||||||
|
border-radius: 4px;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-primary {
|
||||||
|
background: #667eea;
|
||||||
|
color: white;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: #5a67d8;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -102,14 +102,14 @@
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
padding: $spacing-lg $spacing-xl;
|
padding: $spacing-lg $spacing-xl;
|
||||||
background: linear-gradient(135deg, $primary-blue 0%, $secondary-blue 100%);
|
background: #EDF9FE;
|
||||||
border-radius: $border-radius-md;
|
border-radius: $border-radius-md;
|
||||||
margin-bottom: $spacing-xl;
|
margin-bottom: $spacing-xl;
|
||||||
|
|
||||||
h3 {
|
h3 {
|
||||||
font-size: $font-size-lg;
|
font-size: $font-size-lg;
|
||||||
font-weight: $font-weight-semibold;
|
font-weight: $font-weight-regular;
|
||||||
color: $white;
|
color: #515961;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,497 @@
|
|||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// Terms and Agreements Page - Modern Design
|
||||||
|
// 이용약관 및 개인정보처리방침 페이지
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Page Container
|
||||||
|
.terms-page {
|
||||||
|
min-height: calc(100vh - 140px);
|
||||||
|
background: $gray-bg;
|
||||||
|
padding: $spacing-3xl $spacing-lg;
|
||||||
|
|
||||||
|
@media (max-width: $breakpoint-sm) {
|
||||||
|
padding: $spacing-2xl $spacing-md;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.terms-container {
|
||||||
|
max-width: $container-max-width;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Page Header
|
||||||
|
.terms-header {
|
||||||
|
margin-bottom: $spacing-3xl;
|
||||||
|
|
||||||
|
@media (max-width: $breakpoint-sm) {
|
||||||
|
margin-bottom: $spacing-2xl;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-title {
|
||||||
|
font-size: $font-size-3xl;
|
||||||
|
font-weight: $font-weight-bold;
|
||||||
|
color: $text-dark;
|
||||||
|
margin-bottom: $spacing-md;
|
||||||
|
background: $gradient-primary;
|
||||||
|
-webkit-background-clip: text;
|
||||||
|
-webkit-text-fill-color: transparent;
|
||||||
|
background-clip: text;
|
||||||
|
|
||||||
|
@media (max-width: $breakpoint-sm) {
|
||||||
|
font-size: $font-size-2xl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-description {
|
||||||
|
font-size: $font-size-base;
|
||||||
|
color: $text-gray;
|
||||||
|
line-height: $line-height-normal;
|
||||||
|
|
||||||
|
@media (max-width: $breakpoint-sm) {
|
||||||
|
font-size: $font-size-sm;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Terms Content Card
|
||||||
|
.terms-content-card {
|
||||||
|
background: $white;
|
||||||
|
border-radius: $border-radius-lg;
|
||||||
|
box-shadow: $shadow-md;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tab Navigation
|
||||||
|
.terms-tabs {
|
||||||
|
display: flex;
|
||||||
|
gap: 0;
|
||||||
|
background: $gray-bg;
|
||||||
|
padding: $spacing-xs;
|
||||||
|
border-bottom: 1px solid $border-gray;
|
||||||
|
|
||||||
|
@media (max-width: $breakpoint-sm) {
|
||||||
|
padding: $spacing-xs;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tab-link {
|
||||||
|
flex: 1;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
gap: $spacing-sm;
|
||||||
|
padding: $spacing-md $spacing-lg;
|
||||||
|
font-size: $font-size-base;
|
||||||
|
font-weight: $font-weight-semibold;
|
||||||
|
color: $text-gray;
|
||||||
|
text-decoration: none;
|
||||||
|
background: transparent;
|
||||||
|
border-radius: $border-radius-md;
|
||||||
|
transition: $transition-base;
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
|
@media (max-width: $breakpoint-sm) {
|
||||||
|
padding: $spacing-sm $spacing-md;
|
||||||
|
font-size: $font-size-sm;
|
||||||
|
gap: $spacing-xs;
|
||||||
|
}
|
||||||
|
|
||||||
|
i {
|
||||||
|
font-size: $font-size-md;
|
||||||
|
transition: $transition-base;
|
||||||
|
|
||||||
|
@media (max-width: $breakpoint-sm) {
|
||||||
|
font-size: $font-size-base;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
color: $primary-blue;
|
||||||
|
background: rgba($primary-blue, 0.05);
|
||||||
|
|
||||||
|
i {
|
||||||
|
transform: scale(1.1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.active {
|
||||||
|
color: $white;
|
||||||
|
background: $primary-blue;
|
||||||
|
box-shadow: $shadow-sm;
|
||||||
|
|
||||||
|
i {
|
||||||
|
color: $white;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Version Selector
|
||||||
|
.terms-selector {
|
||||||
|
padding: $spacing-lg $spacing-2xl;
|
||||||
|
background: $light-bg;
|
||||||
|
border-bottom: 1px solid $border-gray;
|
||||||
|
|
||||||
|
@media (max-width: $breakpoint-sm) {
|
||||||
|
padding: $spacing-md $spacing-lg;
|
||||||
|
}
|
||||||
|
|
||||||
|
form {
|
||||||
|
max-width: 400px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-select {
|
||||||
|
position: relative;
|
||||||
|
cursor: pointer;
|
||||||
|
|
||||||
|
.select-selected {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: $spacing-sm;
|
||||||
|
padding: $spacing-md $spacing-lg;
|
||||||
|
background: $white;
|
||||||
|
border: 2px solid $border-gray;
|
||||||
|
border-radius: $border-radius-md;
|
||||||
|
font-size: $font-size-sm;
|
||||||
|
font-weight: $font-weight-medium;
|
||||||
|
color: $text-dark;
|
||||||
|
transition: $transition-base;
|
||||||
|
cursor: pointer;
|
||||||
|
|
||||||
|
@media (max-width: $breakpoint-sm) {
|
||||||
|
padding: $spacing-sm $spacing-md;
|
||||||
|
font-size: $font-size-xs;
|
||||||
|
}
|
||||||
|
|
||||||
|
i {
|
||||||
|
&:first-child {
|
||||||
|
color: $primary-blue;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
margin-left: auto;
|
||||||
|
font-size: $font-size-xs;
|
||||||
|
color: $text-gray;
|
||||||
|
transition: $transition-base;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
span {
|
||||||
|
font-weight: $font-weight-semibold;
|
||||||
|
color: $primary-blue;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
border-color: $primary-blue;
|
||||||
|
box-shadow: 0 0 0 3px rgba($primary-blue, 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
&.select-arrow-active {
|
||||||
|
border-color: $primary-blue;
|
||||||
|
|
||||||
|
i:last-child {
|
||||||
|
transform: rotate(180deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.select-items {
|
||||||
|
position: absolute;
|
||||||
|
top: calc(100% + $spacing-xs);
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
background: $white;
|
||||||
|
border: 2px solid $primary-blue;
|
||||||
|
border-radius: $border-radius-md;
|
||||||
|
box-shadow: $shadow-lg;
|
||||||
|
max-height: 240px;
|
||||||
|
overflow-y: auto;
|
||||||
|
z-index: $z-index-dropdown;
|
||||||
|
list-style: none;
|
||||||
|
padding: $spacing-xs;
|
||||||
|
margin: 0;
|
||||||
|
|
||||||
|
&.select-hide {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
li {
|
||||||
|
padding: $spacing-sm $spacing-md;
|
||||||
|
font-size: $font-size-sm;
|
||||||
|
color: $text-dark;
|
||||||
|
border-radius: $border-radius-sm;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: $transition-base;
|
||||||
|
|
||||||
|
@media (max-width: $breakpoint-sm) {
|
||||||
|
padding: $spacing-xs $spacing-sm;
|
||||||
|
font-size: $font-size-xs;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: $light-bg;
|
||||||
|
color: $primary-blue;
|
||||||
|
}
|
||||||
|
|
||||||
|
&.selected {
|
||||||
|
background: $primary-blue;
|
||||||
|
color: $white;
|
||||||
|
font-weight: $font-weight-semibold;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Terms Content
|
||||||
|
.terms-content {
|
||||||
|
padding: $spacing-3xl $spacing-2xl;
|
||||||
|
min-height: 400px;
|
||||||
|
|
||||||
|
@media (max-width: $breakpoint-sm) {
|
||||||
|
padding: $spacing-2xl $spacing-lg;
|
||||||
|
min-height: 300px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content-body {
|
||||||
|
font-size: $font-size-base;
|
||||||
|
color: $text-dark;
|
||||||
|
line-height: $line-height-loose;
|
||||||
|
white-space: pre-wrap;
|
||||||
|
word-wrap: break-word;
|
||||||
|
|
||||||
|
@media (max-width: $breakpoint-sm) {
|
||||||
|
font-size: $font-size-sm;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Content formatting
|
||||||
|
p {
|
||||||
|
margin-bottom: $spacing-md;
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
h1, h2, h3, h4, h5, h6 {
|
||||||
|
margin-top: $spacing-xl;
|
||||||
|
margin-bottom: $spacing-md;
|
||||||
|
font-weight: $font-weight-semibold;
|
||||||
|
color: $text-dark;
|
||||||
|
line-height: $line-height-tight;
|
||||||
|
|
||||||
|
&:first-child {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: $font-size-2xl;
|
||||||
|
font-weight: $font-weight-bold;
|
||||||
|
padding-bottom: $spacing-md;
|
||||||
|
border-bottom: 2px solid $border-gray;
|
||||||
|
|
||||||
|
@media (max-width: $breakpoint-sm) {
|
||||||
|
font-size: $font-size-xl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
font-size: $font-size-xl;
|
||||||
|
|
||||||
|
@media (max-width: $breakpoint-sm) {
|
||||||
|
font-size: $font-size-lg;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
h3 {
|
||||||
|
font-size: $font-size-lg;
|
||||||
|
|
||||||
|
@media (max-width: $breakpoint-sm) {
|
||||||
|
font-size: $font-size-base;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
strong {
|
||||||
|
font-weight: $font-weight-bold;
|
||||||
|
color: $text-dark;
|
||||||
|
}
|
||||||
|
|
||||||
|
em {
|
||||||
|
font-style: italic;
|
||||||
|
color: $text-gray;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: $primary-blue;
|
||||||
|
text-decoration: underline;
|
||||||
|
transition: $transition-base;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
color: $secondary-blue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ul, ol {
|
||||||
|
margin: $spacing-md 0;
|
||||||
|
padding-left: $spacing-2xl;
|
||||||
|
|
||||||
|
@media (max-width: $breakpoint-sm) {
|
||||||
|
padding-left: $spacing-lg;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ul {
|
||||||
|
list-style-type: disc;
|
||||||
|
}
|
||||||
|
|
||||||
|
ol {
|
||||||
|
list-style-type: decimal;
|
||||||
|
}
|
||||||
|
|
||||||
|
li {
|
||||||
|
margin-bottom: $spacing-sm;
|
||||||
|
line-height: $line-height-normal;
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
blockquote {
|
||||||
|
border-left: 4px solid $primary-blue;
|
||||||
|
padding-left: $spacing-lg;
|
||||||
|
margin: $spacing-lg 0;
|
||||||
|
color: $text-gray;
|
||||||
|
font-style: italic;
|
||||||
|
background: $gray-bg;
|
||||||
|
padding: $spacing-md $spacing-lg;
|
||||||
|
border-radius: 0 $border-radius-md $border-radius-md 0;
|
||||||
|
|
||||||
|
@media (max-width: $breakpoint-sm) {
|
||||||
|
padding: $spacing-sm $spacing-md;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
code {
|
||||||
|
background: $gray-bg;
|
||||||
|
padding: 2px 6px;
|
||||||
|
border-radius: $border-radius-sm;
|
||||||
|
font-family: $font-family-mono;
|
||||||
|
font-size: 0.9em;
|
||||||
|
color: $primary-blue;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
background: $gray-bg;
|
||||||
|
border: 1px solid $border-gray;
|
||||||
|
border-radius: $border-radius-md;
|
||||||
|
padding: $spacing-md;
|
||||||
|
overflow-x: auto;
|
||||||
|
margin: $spacing-lg 0;
|
||||||
|
|
||||||
|
@media (max-width: $breakpoint-sm) {
|
||||||
|
padding: $spacing-sm;
|
||||||
|
}
|
||||||
|
|
||||||
|
code {
|
||||||
|
background: transparent;
|
||||||
|
padding: 0;
|
||||||
|
color: $text-dark;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
width: 100%;
|
||||||
|
border-collapse: collapse;
|
||||||
|
margin: $spacing-lg 0;
|
||||||
|
border: 1px solid $border-gray;
|
||||||
|
border-radius: $border-radius-md;
|
||||||
|
overflow: hidden;
|
||||||
|
font-size: $font-size-sm;
|
||||||
|
|
||||||
|
@media (max-width: $breakpoint-sm) {
|
||||||
|
font-size: $font-size-xs;
|
||||||
|
}
|
||||||
|
|
||||||
|
th {
|
||||||
|
background: $light-bg;
|
||||||
|
padding: $spacing-sm $spacing-md;
|
||||||
|
text-align: left;
|
||||||
|
font-weight: $font-weight-semibold;
|
||||||
|
color: $text-dark;
|
||||||
|
border-bottom: 2px solid $border-gray;
|
||||||
|
|
||||||
|
@media (max-width: $breakpoint-sm) {
|
||||||
|
padding: $spacing-xs $spacing-sm;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
td {
|
||||||
|
padding: $spacing-sm $spacing-md;
|
||||||
|
border-bottom: 1px solid $border-gray;
|
||||||
|
color: $text-dark;
|
||||||
|
|
||||||
|
@media (max-width: $breakpoint-sm) {
|
||||||
|
padding: $spacing-xs $spacing-sm;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tr {
|
||||||
|
&:last-child td {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: $gray-bg;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
hr {
|
||||||
|
border: none;
|
||||||
|
border-top: 1px solid $border-gray;
|
||||||
|
margin: $spacing-2xl 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Article/Section numbering
|
||||||
|
.article {
|
||||||
|
margin-top: $spacing-2xl;
|
||||||
|
padding-top: $spacing-lg;
|
||||||
|
border-top: 1px solid $border-gray;
|
||||||
|
|
||||||
|
&:first-child {
|
||||||
|
margin-top: 0;
|
||||||
|
padding-top: 0;
|
||||||
|
border-top: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.section-number {
|
||||||
|
display: inline-block;
|
||||||
|
min-width: 30px;
|
||||||
|
color: $primary-blue;
|
||||||
|
font-weight: $font-weight-bold;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Scrollbar styling for select dropdown
|
||||||
|
.terms-selector .select-items {
|
||||||
|
&::-webkit-scrollbar {
|
||||||
|
width: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&::-webkit-scrollbar-track {
|
||||||
|
background: $gray-bg;
|
||||||
|
border-radius: $border-radius-sm;
|
||||||
|
}
|
||||||
|
|
||||||
|
&::-webkit-scrollbar-thumb {
|
||||||
|
background: $primary-blue;
|
||||||
|
border-radius: $border-radius-sm;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: $secondary-blue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -50,36 +50,6 @@
|
|||||||
gap: $spacing-md;
|
gap: $spacing-md;
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn-create-user,
|
|
||||||
.btn-create-user-large {
|
|
||||||
display: inline-flex;
|
|
||||||
align-items: center;
|
|
||||||
gap: $spacing-sm;
|
|
||||||
padding: 12px $spacing-xl;
|
|
||||||
background: $gradient-primary;
|
|
||||||
color: $white;
|
|
||||||
font-size: $font-size-base;
|
|
||||||
font-weight: $font-weight-semibold;
|
|
||||||
border: none;
|
|
||||||
border-radius: $border-radius-lg;
|
|
||||||
cursor: pointer;
|
|
||||||
transition: $transition-base;
|
|
||||||
box-shadow: $shadow-md;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
transform: translateY(-2px);
|
|
||||||
box-shadow: $shadow-lg;
|
|
||||||
}
|
|
||||||
|
|
||||||
&:active {
|
|
||||||
transform: translateY(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-icon {
|
|
||||||
font-size: $font-size-lg;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.btn-create-user-large {
|
.btn-create-user-large {
|
||||||
padding: $spacing-md $spacing-2xl;
|
padding: $spacing-md $spacing-2xl;
|
||||||
font-size: $font-size-md;
|
font-size: $font-size-md;
|
||||||
@@ -315,69 +285,6 @@
|
|||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
gap: $spacing-xs;
|
gap: $spacing-xs;
|
||||||
align-items: center;
|
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-secondary {
|
|
||||||
background-color: $text-gray;
|
|
||||||
color: $white;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
background-color: darken($text-gray, 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
|
// Empty State
|
||||||
@@ -622,35 +529,3 @@
|
|||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn-secondary {
|
|
||||||
display: inline-flex;
|
|
||||||
align-items: center;
|
|
||||||
gap: $spacing-sm;
|
|
||||||
padding: 12px $spacing-xl;
|
|
||||||
background-color: $white;
|
|
||||||
color: $text-dark;
|
|
||||||
font-size: $font-size-base;
|
|
||||||
font-weight: $font-weight-medium;
|
|
||||||
border: 2px solid $border-gray;
|
|
||||||
border-radius: $border-radius-lg;
|
|
||||||
text-decoration: none;
|
|
||||||
cursor: pointer;
|
|
||||||
transition: $transition-base;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
background-color: $gray-bg;
|
|
||||||
border-color: $primary-blue;
|
|
||||||
color: $primary-blue;
|
|
||||||
transform: translateY(-2px);
|
|
||||||
box-shadow: $shadow-sm;
|
|
||||||
}
|
|
||||||
|
|
||||||
&:active {
|
|
||||||
transform: translateY(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
i {
|
|
||||||
font-size: $font-size-base;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -3,22 +3,15 @@
|
|||||||
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||||
layout:decorate="~{layout/kjbank_base_layout}">
|
layout:decorate="~{layout/kjbank_base_layout}">
|
||||||
<head>
|
<head>
|
||||||
<title>수수료 관리</title>
|
<title>수수료 관리</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<section layout:fragment="contentFragment" class="content">
|
<section layout:fragment="contentFragment" class="content">
|
||||||
<div class="row wrap" style="max-width: 1400px; margin: 0 auto; padding: 20px;">
|
<div class="row wrap" style="max-width: 1400px; margin: 0 auto; padding: 20px;">
|
||||||
<div class="col-md-12">
|
<div class="col-md-12">
|
||||||
<h2><strong>기관 수수료 관리</strong></h2>
|
<h2><strong>기관 수수료 관리</strong></h2>
|
||||||
<p class="searchInfo">
|
|
||||||
<button class="btn btn-default" onclick="downloadExcel()" style="display:none;">다운로드</button>
|
<div class="searchBox row-two" style="background: #f8f9fa; padding: 20px; border-radius: 8px; margin-bottom: 20px; display: flex; align-items: center; gap: 20px; flex-wrap: wrap;">
|
||||||
</p>
|
|
||||||
<p class="searchInfo">
|
|
||||||
<button id="printBtn" class="btn btn-default" style="margin-left: 5px; display:none;" onclick="printCommission()">
|
|
||||||
<span>청구서 출력</span>
|
|
||||||
</button>
|
|
||||||
</p>
|
|
||||||
<div class="searchBox row-two" style="background: #f8f9fa; padding: 20px; border-radius: 8px; margin-bottom: 20px; display: flex; align-items: center; gap: 20px; flex-wrap: wrap;">
|
|
||||||
<span class="form-inline" style="display: flex; align-items: center; gap: 10px;">
|
<span class="form-inline" style="display: flex; align-items: center; gap: 10px;">
|
||||||
<label for="providers" style="font-weight: 500; min-width: 80px;">제공기관</label>
|
<label for="providers" style="font-weight: 500; min-width: 80px;">제공기관</label>
|
||||||
<select id="providers" class="form-control">
|
<select id="providers" class="form-control">
|
||||||
@@ -27,19 +20,20 @@
|
|||||||
<option value="2">한국은행</option>
|
<option value="2">한국은행</option>
|
||||||
</select>
|
</select>
|
||||||
</span>
|
</span>
|
||||||
<span class="form-inline" style="display: flex; align-items: center; gap: 10px;">
|
<span class="form-inline" style="display: flex; align-items: center; gap: 10px;">
|
||||||
<label for="organizations" style="font-weight: 500; min-width: 80px;">이용기관</label>
|
<label for="organizations" style="font-weight: 500; min-width: 80px;">이용기관</label>
|
||||||
<select id="organizations" class="form-control">
|
<select id="organizations" class="form-control">
|
||||||
<option value="">- 선택 -</option>
|
<option value="">- 선택 -</option>
|
||||||
<option value="1" selected th:text="${organization?.orgName ?: 'ABC 핀테크'}"></option>
|
<option value="1" selected th:text="${organization?.orgName ?: 'ABC 핀테크'}"></option>
|
||||||
</select>
|
</select>
|
||||||
</span>
|
</span>
|
||||||
<span class="form-inline" style="display: flex; align-items: center; gap: 10px;">
|
<span class="form-inline" style="display: flex; align-items: center; gap: 10px;">
|
||||||
<label for="forYear" style="font-weight: 500; min-width: 80px;">조회기간</label>
|
<label for="forYear" style="font-weight: 500; min-width: 80px;">조회기간</label>
|
||||||
<select id="forYear" class="form-control">
|
<select id="forYear" class="form-control">
|
||||||
<option value="">- 선택 -</option>
|
<option value="">- 선택 -</option>
|
||||||
<option value="2023">2023</option>
|
<option value="2023">2023</option>
|
||||||
<option value="2024" selected>2024</option>
|
<option value="2024">2024</option>
|
||||||
|
<option value="2025" selected>2025</option>
|
||||||
</select> <span>년</span>
|
</select> <span>년</span>
|
||||||
<select id="forMonth" class="form-control">
|
<select id="forMonth" class="form-control">
|
||||||
<option value="">- 선택 -</option>
|
<option value="">- 선택 -</option>
|
||||||
@@ -57,274 +51,246 @@
|
|||||||
<option value="12">12</option>
|
<option value="12">12</option>
|
||||||
</select> <span>월</span>
|
</select> <span>월</span>
|
||||||
</span>
|
</span>
|
||||||
<span class="btnBox" style="margin-left: auto;">
|
<span class="btnBox" style="margin-left: auto;">
|
||||||
<button type="button" class="btn btn-primary" onclick="loadData()">
|
<button type="button" class="btn btn-primary" onclick="loadData()">
|
||||||
<span class="glyphicon glyphicon-search"></span> <span>조회</span>
|
<span class="fa fa-search"></span><span>조회</span>
|
||||||
</button>
|
</button>
|
||||||
|
<button type="button" id="printBtn" class="btn btn-secondary" style="margin-left: 5px; display:none;" onclick="printCommission()">
|
||||||
|
<span>청구서 출력</span>
|
||||||
|
</button>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<p class="voffset3" style="color: #dc3545; margin-top: 30px;">
|
<p class="voffset3" style="color: #dc3545; margin-top: 30px;">
|
||||||
이용기관은 매월 1~5일 전월 수수료 조회 가능하며, 10일 확정금액으로 정산됩니다. <br/>
|
이용기관은 매월 1~5일 전월 수수료 조회 가능하며, 10일 확정금액으로 정산됩니다. <br/>
|
||||||
금액이상시 담당자 연락 및 조정요청 하시기 바랍니다. (매월 1~5일 수수료 조회, 6~9일 수수료 조정 및 확정, 10일 정산)
|
금액이상시 담당자 연락 및 조정요청 하시기 바랍니다. (매월 1~5일 수수료 조회, 6~9일 수수료 조정 및 확정, 10일 정산)
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<!-- API 수수료 테이블 -->
|
<!-- API 수수료 테이블 -->
|
||||||
<div class="table-responsive voffset3" style="overflow-x: auto; margin-top: 30px;">
|
<div class="table-responsive voffset3" style="overflow-x: auto; margin-top: 30px;">
|
||||||
<table class="table table-bordered border-type" style="border: 2px solid #dee2e6;">
|
<table class="table table-bordered border-type" style="border: 2px solid #dee2e6;">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col style="width:6%"/>
|
<col style="width:6%"/>
|
||||||
<col style="width:16%"/>
|
<col style="width:16%"/>
|
||||||
<col style="width:8%"/>
|
<col style="width:8%"/>
|
||||||
<col style="width:8%"/>
|
<col style="width:8%"/>
|
||||||
<col style="width:8%"/>
|
<col style="width:8%"/>
|
||||||
<col style="width:8%"/>
|
<col style="width:8%"/>
|
||||||
<col style="width:8%"/>
|
<col style="width:8%"/>
|
||||||
<col style="width:8%"/>
|
<col style="width:8%"/>
|
||||||
<col style="width:8%"/>
|
<col style="width:8%"/>
|
||||||
<col style="width:8%"/>
|
<col style="width:8%"/>
|
||||||
<col />
|
<col/>
|
||||||
</colgroup>
|
</colgroup>
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th rowspan="2">구분</th>
|
<th rowspan="2">구분</th>
|
||||||
<th rowspan="2">API 명</th>
|
<th rowspan="2">API 명</th>
|
||||||
<th colspan="4">조정 전</th>
|
<th colspan="4">조정 전</th>
|
||||||
<th colspan="4">조정 후</th>
|
<th colspan="4">조정 후</th>
|
||||||
<th rowspan="2">조정사유</th>
|
<th rowspan="2">조정사유</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>처리<br/>건수</th>
|
<th>처리<br/>건수</th>
|
||||||
<th>적용<br/>수수료(원)</th>
|
<th>적용<br/>수수료(원)</th>
|
||||||
<th>최저<br/>수수료</th>
|
<th>최저<br/>수수료</th>
|
||||||
<th>출금<br/>예상금액</th>
|
<th>출금<br/>예상금액</th>
|
||||||
<th>조정<br/>건수</th>
|
<th>조정<br/>건수</th>
|
||||||
<th>조정<br/>수수료(원)</th>
|
<th>조정<br/>수수료(원)</th>
|
||||||
<th>최저<br/>수수료</th>
|
<th>최저<br/>수수료</th>
|
||||||
<th>출금<br/>예상금액</th>
|
<th>출금<br/>예상금액</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody id="apiTableBody">
|
<tbody id="apiTableBody">
|
||||||
<!-- 동적 생성 -->
|
<!-- 동적 생성 -->
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<!-- 판매 수수료 테이블 -->
|
<!-- 판매 수수료 테이블 -->
|
||||||
<table class="table table-bordered border-type voffset3" style="border: 2px solid #dee2e6; margin-top: 30px;">
|
<table class="table table-bordered border-type voffset3" style="border: 2px solid #dee2e6; margin-top: 30px;">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col style="width: 6%;">
|
<col style="width: 6%;">
|
||||||
<col style="width: 8%;">
|
<col style="width: 8%;">
|
||||||
<col style="width: 8%;">
|
<col style="width: 8%;">
|
||||||
<col style="width: 5%;">
|
<col style="width: 5%;">
|
||||||
<col style="width: 5%;">
|
<col style="width: 5%;">
|
||||||
<col style="width: 7%;">
|
<col style="width: 7%;">
|
||||||
<col style="width: 6%;">
|
<col style="width: 6%;">
|
||||||
<col style="width: 6%;">
|
<col style="width: 6%;">
|
||||||
<col style="width: 7%;">
|
<col style="width: 7%;">
|
||||||
<col style="width: 7%;">
|
<col style="width: 7%;">
|
||||||
<col style="width: 6%;">
|
<col style="width: 6%;">
|
||||||
<col style="width: 6%;">
|
<col style="width: 6%;">
|
||||||
<col style="width: 7%;">
|
<col style="width: 7%;">
|
||||||
<col style="width: 7%;">
|
<col style="width: 7%;">
|
||||||
<col>
|
<col>
|
||||||
</colgroup>
|
</colgroup>
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th rowspan="2">구분</th>
|
<th rowspan="2">구분</th>
|
||||||
<th rowspan="2">과금대상<br/>업무</th>
|
<th rowspan="2">과금대상<br/>업무</th>
|
||||||
<th rowspan="2">수수료<br/>유형</th>
|
<th rowspan="2">수수료<br/>유형</th>
|
||||||
<th rowspan="2">과금<br/>기준</th>
|
<th rowspan="2">과금<br/>기준</th>
|
||||||
<th rowspan="2">값구분</th>
|
<th rowspan="2">값구분</th>
|
||||||
<th rowspan="2">판매액</th>
|
<th rowspan="2">판매액</th>
|
||||||
<th colspan="4">조정 전</th>
|
<th colspan="4">조정 전</th>
|
||||||
<th colspan="4">조정 후</th>
|
<th colspan="4">조정 후</th>
|
||||||
<th rowspan="2">조정사유</th>
|
<th rowspan="2">조정사유</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>적용<br/>수수료</th>
|
<th>적용<br/>수수료</th>
|
||||||
<th>처리<br/>건수</th>
|
<th>처리<br/>건수</th>
|
||||||
<th>최저<br/>수수료</th>
|
<th>최저<br/>수수료</th>
|
||||||
<th>출금<br/>예상수수료</th>
|
<th>출금<br/>예상수수료</th>
|
||||||
<th>적용<br/>수수료</th>
|
<th>적용<br/>수수료</th>
|
||||||
<th>처리<br/>건수</th>
|
<th>처리<br/>건수</th>
|
||||||
<th>최저<br/>수수료</th>
|
<th>최저<br/>수수료</th>
|
||||||
<th>출금<br/>예상수수료</th>
|
<th>출금<br/>예상수수료</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody id="saleTableBody">
|
<tbody id="saleTableBody">
|
||||||
<!-- 동적 생성 -->
|
<!-- 동적 생성 -->
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<!-- 합계 테이블 -->
|
<!-- 합계 테이블 -->
|
||||||
<table class="table table-bordered border-type voffset3" style="border: 2px solid #dee2e6; margin-top: 30px;">
|
<table class="table table-bordered border-type voffset3" style="border: 2px solid #dee2e6; margin-top: 30px;">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col />
|
<col/>
|
||||||
<col style="width: 13%"/>
|
<col style="width: 13%"/>
|
||||||
<col style="width: 13%"/>
|
<col style="width: 13%"/>
|
||||||
<col style="width: 13%"/>
|
<col style="width: 13%"/>
|
||||||
<col style="width: 13%"/>
|
<col style="width: 13%"/>
|
||||||
<col style="width: 13%"/>
|
<col style="width: 13%"/>
|
||||||
<col style="width: 13%" />
|
<col style="width: 13%"/>
|
||||||
</colgroup>
|
</colgroup>
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th rowspan="2">구분</th>
|
<th rowspan="2">구분</th>
|
||||||
<th colspan="3">조정 전</th>
|
<th colspan="3">조정 전</th>
|
||||||
<th colspan="3">조정 후</th>
|
<th colspan="3">조정 후</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th>판매액</th>
|
<th>판매액</th>
|
||||||
<th>처리건수(건)</th>
|
<th>처리건수(건)</th>
|
||||||
<th>출금예상금액</th>
|
<th>출금예상금액</th>
|
||||||
<th>판매액</th>
|
<th>판매액</th>
|
||||||
<th>처리건수(건)</th>
|
<th>처리건수(건)</th>
|
||||||
<th>출금예상금액</th>
|
<th>출금예상금액</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<tr class="bg-warning" style="background-color: #fff3cd !important;">
|
<tr class="bg-warning" style="background-color: #fff3cd !important;">
|
||||||
<td class="text-center"><strong id="totalTitle">2024년 3월 합계</strong></td>
|
<td class="text-center"><strong id="totalTitle">합계</strong></td>
|
||||||
<td class="text-right"><strong id="totalSalesAmount1">0</strong></td>
|
<td class="text-right"><strong id="totalSalesAmount1">-</strong></td>
|
||||||
<td class="text-right"><strong id="totalCount1">0</strong></td>
|
<td class="text-right"><strong id="totalCount1">-</strong></td>
|
||||||
<td class="text-right"><strong class="color_blue" style="font-size:16px; color: #007bff;" id="totalAmount1">0</strong></td>
|
<td class="text-right"><strong class="color_blue" style="font-size:16px; color: #007bff;" id="totalAmount1">-</strong></td>
|
||||||
<td class="text-right"><strong id="totalSalesAmount2">0</strong></td>
|
<td class="text-right"><strong id="totalSalesAmount2">-</strong></td>
|
||||||
<td class="text-right"><strong id="totalCount2">0</strong></td>
|
<td class="text-right"><strong id="totalCount2">-</strong></td>
|
||||||
<td class="text-right"><strong class="color_blue" style="font-size:16px; color: #007bff;" id="totalAmount2">0</strong></td>
|
<td class="text-right"><strong class="color_blue" style="font-size:16px; color: #007bff;" id="totalAmount2">-</strong></td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<th:block layout:fragment="contentScript">
|
<th:block layout:fragment="contentScript">
|
||||||
<script th:inline="javascript">
|
<script th:inline="javascript">
|
||||||
// 샘플 데이터
|
function formatNumber(num) {
|
||||||
const sampleData = {
|
return new Intl.NumberFormat('ko-KR').format(num);
|
||||||
apiCommissions: [
|
}
|
||||||
{
|
|
||||||
name: '계좌잔액조회',
|
|
||||||
count1: 20543, fee1: 50, min1: 500000, amount1: 1027150,
|
|
||||||
count2: 20543, fee2: 50, min2: 500000, amount2: 1027150,
|
|
||||||
reason: ''
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: '거래내역조회',
|
|
||||||
count1: 11876, fee1: 80, min1: 500000, amount1: 950080,
|
|
||||||
count2: 11876, fee2: 80, min2: 500000, amount2: 950080,
|
|
||||||
reason: ''
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: '송금 API',
|
|
||||||
count1: 4892, fee1: 200, min1: 500000, amount1: 978400,
|
|
||||||
count2: 4892, fee2: 200, min2: 500000, amount2: 978400,
|
|
||||||
reason: ''
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: '본인인증 API',
|
|
||||||
count1: 2341, fee1: 150, min1: 300000, amount1: 351150,
|
|
||||||
count2: 2100, fee2: 150, min2: 300000, amount2: 315000,
|
|
||||||
reason: '오류건 제외'
|
|
||||||
}
|
|
||||||
],
|
|
||||||
saleCommissions: [
|
|
||||||
{
|
|
||||||
name: '개인대출 상품 A',
|
|
||||||
type: '정률',
|
|
||||||
base: '금액',
|
|
||||||
division: '원',
|
|
||||||
salesAmount: 1050000000,
|
|
||||||
fee1: 0.025, count1: 55, min1: 100000, amount1: 275000,
|
|
||||||
fee2: 0.025, count2: 55, min2: 100000, amount2: 275000,
|
|
||||||
reason: ''
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: '기업대출 상품 B',
|
|
||||||
type: '정액',
|
|
||||||
base: '건',
|
|
||||||
division: '건',
|
|
||||||
salesAmount: 0,
|
|
||||||
fee1: 8000, count1: 21, min1: 100000, amount1: 168000,
|
|
||||||
fee2: 8000, count2: 21, min2: 100000, amount2: 168000,
|
|
||||||
reason: ''
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: '소상공인 대출 C',
|
|
||||||
type: '정액',
|
|
||||||
base: '건',
|
|
||||||
division: '건',
|
|
||||||
salesAmount: 0,
|
|
||||||
fee1: 3000, count1: 30, min1: 50000, amount1: 90000,
|
|
||||||
fee2: 3000, count2: 28, min2: 50000, amount2: 84000,
|
|
||||||
reason: '취소건 제외'
|
|
||||||
}
|
|
||||||
]
|
|
||||||
};
|
|
||||||
|
|
||||||
function formatNumber(num) {
|
function loadData() {
|
||||||
return new Intl.NumberFormat('ko-KR').format(num);
|
const year = document.getElementById('forYear').value;
|
||||||
|
const month = document.getElementById('forMonth').value;
|
||||||
|
|
||||||
|
if (!year || !month) {
|
||||||
|
customPopups.showAlert('조회 기간을 선택해주세요.');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 서버에서 데이터 조회 API 호출
|
||||||
|
fetch('/commission', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
'X-CSRF-TOKEN': /*[[${_csrf.token}]]*/ ''
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
year: year,
|
||||||
|
month: month
|
||||||
|
})
|
||||||
|
})
|
||||||
|
.then(response => {
|
||||||
|
if (!response.ok) {
|
||||||
|
throw new Error('데이터 조회에 실패했습니다.');
|
||||||
|
}
|
||||||
|
return response.json();
|
||||||
|
})
|
||||||
|
.then(data => renderCommissionData(data, year, month))
|
||||||
|
.catch(error => {
|
||||||
|
console.error('Error:', error);
|
||||||
|
customPopups.showAlert('데이터 조회 중 오류가 발생했습니다.');
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function renderCommissionData(data, year, month) {
|
||||||
|
// API 수수료 항목 필터링
|
||||||
|
const apiCommissions = data.list.filter(item => item.paymentTargetType === '01');
|
||||||
|
const saleCommissions = data.list.filter(item => item.paymentTargetType !== '01');
|
||||||
|
|
||||||
|
// API 수수료 테이블 렌더링
|
||||||
|
const apiTableBody = document.getElementById('apiTableBody');
|
||||||
|
apiTableBody.innerHTML = '';
|
||||||
|
|
||||||
|
let apiTotal1 = 0;
|
||||||
|
let apiTotal2 = 0;
|
||||||
|
let apiCount1 = 0;
|
||||||
|
let apiCount2 = 0;
|
||||||
|
|
||||||
|
apiCommissions.forEach((item, index) => {
|
||||||
|
if (index === 0) {
|
||||||
|
apiTableBody.innerHTML += `
|
||||||
|
<tr>
|
||||||
|
<td rowspan="${apiCommissions.length}" class="text-center">API<br/>수수료</td>
|
||||||
|
<td class="text-left">${item.paymentTargetName}</td>
|
||||||
|
<td class="text-right">${formatNumber(item.totalCount || 0)}</td>
|
||||||
|
<td class="text-right">${formatNumber(item.value || 0)}</td>
|
||||||
|
<td class="text-right">${formatNumber(item.minimumAmount || 0)}</td>
|
||||||
|
<td class="text-right"><span style="color: #8b0000;">${formatNumber(item.sum || 0)}</span></td>
|
||||||
|
<td class="text-right"><strong style="color: #007bff;">${formatNumber(item.totalCount2 || 0)}</strong></td>
|
||||||
|
<td class="text-right">${formatNumber(item.value2 || 0)}</td>
|
||||||
|
<td class="text-right">${formatNumber(item.minimumAmount2 || 0)}</td>
|
||||||
|
<td class="text-right"><span style="color: #8b0000;">${formatNumber(item.sum2 || 0)}</span></td>
|
||||||
|
<td>${item.changeReason2 || ''}</td>
|
||||||
|
</tr>
|
||||||
|
`;
|
||||||
|
} else {
|
||||||
|
apiTableBody.innerHTML += `
|
||||||
|
<tr>
|
||||||
|
<td class="text-left">${item.paymentTargetName}</td>
|
||||||
|
<td class="text-right">${formatNumber(item.totalCount || 0)}</td>
|
||||||
|
<td class="text-right">${formatNumber(item.value || 0)}</td>
|
||||||
|
<td class="text-right">${formatNumber(item.minimumAmount || 0)}</td>
|
||||||
|
<td class="text-right"><span style="color: #8b0000;">${formatNumber(item.sum || 0)}</span></td>
|
||||||
|
<td class="text-right"><strong style="color: #007bff;">${formatNumber(item.totalCount2 || 0)}</strong></td>
|
||||||
|
<td class="text-right">${formatNumber(item.value2 || 0)}</td>
|
||||||
|
<td class="text-right">${formatNumber(item.minimumAmount2 || 0)}</td>
|
||||||
|
<td class="text-right"><span style="color: #8b0000;">${formatNumber(item.sum2 || 0)}</span></td>
|
||||||
|
<td>${item.changeReason2 || ''}</td>
|
||||||
|
</tr>
|
||||||
|
`;
|
||||||
}
|
}
|
||||||
|
apiTotal1 += parseFloat(item.sum || 0);
|
||||||
|
apiTotal2 += parseFloat(item.sum2 || 0);
|
||||||
|
apiCount1 += parseInt(item.totalCount || 0);
|
||||||
|
apiCount2 += parseInt(item.totalCount2 || 0);
|
||||||
|
});
|
||||||
|
|
||||||
function loadData() {
|
// API 소계
|
||||||
const year = document.getElementById('forYear').value;
|
apiTableBody.innerHTML += `
|
||||||
const month = document.getElementById('forMonth').value;
|
|
||||||
|
|
||||||
if (!year || !month) {
|
|
||||||
customPopups.showAlert('조회 기간을 선택해주세요.');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// API 수수료 테이블 렌더링
|
|
||||||
const apiTableBody = document.getElementById('apiTableBody');
|
|
||||||
apiTableBody.innerHTML = '';
|
|
||||||
|
|
||||||
let apiTotal1 = 0;
|
|
||||||
let apiTotal2 = 0;
|
|
||||||
let apiCount1 = 0;
|
|
||||||
let apiCount2 = 0;
|
|
||||||
|
|
||||||
sampleData.apiCommissions.forEach((item, index) => {
|
|
||||||
if (index === 0) {
|
|
||||||
apiTableBody.innerHTML += `
|
|
||||||
<tr>
|
|
||||||
<td rowspan="${sampleData.apiCommissions.length}" class="text-center">API<br/>수수료</td>
|
|
||||||
<td class="text-left">${item.name}</td>
|
|
||||||
<td class="text-right">${formatNumber(item.count1)}</td>
|
|
||||||
<td class="text-right">${formatNumber(item.fee1)}</td>
|
|
||||||
<td class="text-right">${formatNumber(item.min1)}</td>
|
|
||||||
<td class="text-right"><span style="color: #8b0000;">${formatNumber(item.amount1)}</span></td>
|
|
||||||
<td class="text-right"><strong style="color: #007bff;">${formatNumber(item.count2)}</strong></td>
|
|
||||||
<td class="text-right">${formatNumber(item.fee2)}</td>
|
|
||||||
<td class="text-right">${formatNumber(item.min2)}</td>
|
|
||||||
<td class="text-right"><span style="color: #8b0000;">${formatNumber(item.amount2)}</span></td>
|
|
||||||
<td>${item.reason}</td>
|
|
||||||
</tr>
|
|
||||||
`;
|
|
||||||
} else {
|
|
||||||
apiTableBody.innerHTML += `
|
|
||||||
<tr>
|
|
||||||
<td class="text-left">${item.name}</td>
|
|
||||||
<td class="text-right">${formatNumber(item.count1)}</td>
|
|
||||||
<td class="text-right">${formatNumber(item.fee1)}</td>
|
|
||||||
<td class="text-right">${formatNumber(item.min1)}</td>
|
|
||||||
<td class="text-right"><span style="color: #8b0000;">${formatNumber(item.amount1)}</span></td>
|
|
||||||
<td class="text-right"><strong style="color: #007bff;">${formatNumber(item.count2)}</strong></td>
|
|
||||||
<td class="text-right">${formatNumber(item.fee2)}</td>
|
|
||||||
<td class="text-right">${formatNumber(item.min2)}</td>
|
|
||||||
<td class="text-right"><span style="color: #8b0000;">${formatNumber(item.amount2)}</span></td>
|
|
||||||
<td>${item.reason}</td>
|
|
||||||
</tr>
|
|
||||||
`;
|
|
||||||
}
|
|
||||||
apiTotal1 += item.amount1;
|
|
||||||
apiTotal2 += item.amount2;
|
|
||||||
apiCount1 += item.count1;
|
|
||||||
apiCount2 += item.count2;
|
|
||||||
});
|
|
||||||
|
|
||||||
// API 소계
|
|
||||||
apiTableBody.innerHTML += `
|
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="2" class="text-center">${year}년 ${month}월 API 수수료 소계</td>
|
<td colspan="2" class="text-center">${year}년 ${month}월 API 수수료 소계</td>
|
||||||
<td class="text-right">${formatNumber(apiCount1)}</td>
|
<td class="text-right">${formatNumber(apiCount1)}</td>
|
||||||
@@ -339,66 +305,67 @@
|
|||||||
</tr>
|
</tr>
|
||||||
`;
|
`;
|
||||||
|
|
||||||
// 판매 수수료 테이블 렌더링
|
// 판매 수수료 테이블 렌더링
|
||||||
const saleTableBody = document.getElementById('saleTableBody');
|
const saleTableBody = document.getElementById('saleTableBody');
|
||||||
saleTableBody.innerHTML = '';
|
saleTableBody.innerHTML = '';
|
||||||
|
|
||||||
let saleTotal1 = 0;
|
let saleTotal1 = 0;
|
||||||
let saleTotal2 = 0;
|
let saleTotal2 = 0;
|
||||||
let saleCount1 = 0;
|
let saleCount1 = 0;
|
||||||
let saleCount2 = 0;
|
let saleCount2 = 0;
|
||||||
let saleSalesAmount = 0;
|
let saleSalesAmount = 0;
|
||||||
|
|
||||||
sampleData.saleCommissions.forEach((item, index) => {
|
saleCommissions.forEach((item, index) => {
|
||||||
if (index === 0) {
|
const isPercentageFee = item.paymentBaseName === '금액';
|
||||||
saleTableBody.innerHTML += `
|
if (index === 0) {
|
||||||
|
saleTableBody.innerHTML += `
|
||||||
<tr>
|
<tr>
|
||||||
<td rowspan="${sampleData.saleCommissions.length}" class="text-center">판매<br/>수수료</td>
|
<td rowspan="${saleCommissions.length}" class="text-center">판매<br/>수수료</td>
|
||||||
<td class="text-left">${item.name}</td>
|
<td class="text-left">${item.paymentTargetName}</td>
|
||||||
<td>${item.type}</td>
|
<td>${item.detailFeeTypeName || ''}</td>
|
||||||
<td>${item.base}</td>
|
<td>${item.paymentBaseName || ''}</td>
|
||||||
<td>${item.division}</td>
|
<td>${item.valueDivisionName || ''}</td>
|
||||||
<td class="text-right">${item.salesAmount > 0 ? formatNumber(item.salesAmount) : ''}</td>
|
<td class="text-right">${item.totalValue ? formatNumber(item.totalValue) : ''}</td>
|
||||||
<td class="text-right">${item.base === '금액' ? (item.fee1 * 100) + '%' : formatNumber(item.fee1)}</td>
|
<td class="text-right">${isPercentageFee ? (parseFloat(item.value || 0) * 100) + '%' : formatNumber(item.value || 0)}</td>
|
||||||
<td class="text-right">${formatNumber(item.count1)}</td>
|
<td class="text-right">${formatNumber(item.totalCount || 0)}</td>
|
||||||
<td class="text-right">${formatNumber(item.min1)}</td>
|
<td class="text-right">${formatNumber(item.minimumAmount || 0)}</td>
|
||||||
<td class="text-right"><span style="color: #8b0000;">${formatNumber(item.amount1)}</span></td>
|
<td class="text-right"><span style="color: #8b0000;">${formatNumber(item.sum || 0)}</span></td>
|
||||||
<td class="text-right">${item.base === '금액' ? (item.fee2 * 100) + '%' : formatNumber(item.fee2)}</td>
|
<td class="text-right">${isPercentageFee ? (parseFloat(item.value2 || 0) * 100) + '%' : formatNumber(item.value2 || 0)}</td>
|
||||||
<td class="text-right">${formatNumber(item.count2)}</td>
|
<td class="text-right">${formatNumber(item.totalCount2 || 0)}</td>
|
||||||
<td class="text-right">${formatNumber(item.min2)}</td>
|
<td class="text-right">${formatNumber(item.minimumAmount2 || 0)}</td>
|
||||||
<td class="text-right"><span style="color: #8b0000;">${formatNumber(item.amount2)}</span></td>
|
<td class="text-right"><span style="color: #8b0000;">${formatNumber(item.sum2 || 0)}</span></td>
|
||||||
<td>${item.reason}</td>
|
<td>${item.changeReason2 || ''}</td>
|
||||||
</tr>
|
</tr>
|
||||||
`;
|
`;
|
||||||
} else {
|
} else {
|
||||||
saleTableBody.innerHTML += `
|
saleTableBody.innerHTML += `
|
||||||
<tr>
|
<tr>
|
||||||
<td class="text-left">${item.name}</td>
|
<td class="text-left">${item.paymentTargetName}</td>
|
||||||
<td>${item.type}</td>
|
<td>${item.detailFeeTypeName || ''}</td>
|
||||||
<td>${item.base}</td>
|
<td>${item.paymentBaseName || ''}</td>
|
||||||
<td>${item.division}</td>
|
<td>${item.valueDivisionName || ''}</td>
|
||||||
<td class="text-right">${item.salesAmount > 0 ? formatNumber(item.salesAmount) : ''}</td>
|
<td class="text-right">${item.totalValue ? formatNumber(item.totalValue) : ''}</td>
|
||||||
<td class="text-right">${item.base === '금액' ? (item.fee1 * 100) + '%' : formatNumber(item.fee1)}</td>
|
<td class="text-right">${isPercentageFee ? (parseFloat(item.value || 0) * 100) + '%' : formatNumber(item.value || 0)}</td>
|
||||||
<td class="text-right">${formatNumber(item.count1)}</td>
|
<td class="text-right">${formatNumber(item.totalCount || 0)}</td>
|
||||||
<td class="text-right">${formatNumber(item.min1)}</td>
|
<td class="text-right">${formatNumber(item.minimumAmount || 0)}</td>
|
||||||
<td class="text-right"><span style="color: #8b0000;">${formatNumber(item.amount1)}</span></td>
|
<td class="text-right"><span style="color: #8b0000;">${formatNumber(item.sum || 0)}</span></td>
|
||||||
<td class="text-right">${item.base === '금액' ? (item.fee2 * 100) + '%' : formatNumber(item.fee2)}</td>
|
<td class="text-right">${isPercentageFee ? (parseFloat(item.value2 || 0) * 100) + '%' : formatNumber(item.value2 || 0)}</td>
|
||||||
<td class="text-right">${formatNumber(item.count2)}</td>
|
<td class="text-right">${formatNumber(item.totalCount2 || 0)}</td>
|
||||||
<td class="text-right">${formatNumber(item.min2)}</td>
|
<td class="text-right">${formatNumber(item.minimumAmount2 || 0)}</td>
|
||||||
<td class="text-right"><span style="color: #8b0000;">${formatNumber(item.amount2)}</span></td>
|
<td class="text-right"><span style="color: #8b0000;">${formatNumber(item.sum2 || 0)}</span></td>
|
||||||
<td>${item.reason}</td>
|
<td>${item.changeReason2 || ''}</td>
|
||||||
</tr>
|
</tr>
|
||||||
`;
|
`;
|
||||||
}
|
}
|
||||||
saleTotal1 += item.amount1;
|
saleTotal1 += parseFloat(item.sum || 0);
|
||||||
saleTotal2 += item.amount2;
|
saleTotal2 += parseFloat(item.sum2 || 0);
|
||||||
saleCount1 += item.count1;
|
saleCount1 += parseInt(item.totalCount || 0);
|
||||||
saleCount2 += item.count2;
|
saleCount2 += parseInt(item.totalCount2 || 0);
|
||||||
saleSalesAmount += item.salesAmount;
|
saleSalesAmount += parseFloat(item.totalValue || 0);
|
||||||
});
|
});
|
||||||
|
|
||||||
// 판매 소계
|
// 판매 소계
|
||||||
saleTableBody.innerHTML += `
|
saleTableBody.innerHTML += `
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="5" class="text-center">${year}년 ${month}월 판매 수수료 소계</td>
|
<td colspan="5" class="text-center">${year}년 ${month}월 판매 수수료 소계</td>
|
||||||
<td class="text-right">${formatNumber(saleSalesAmount)}</td>
|
<td class="text-right">${formatNumber(saleSalesAmount)}</td>
|
||||||
@@ -414,54 +381,33 @@
|
|||||||
</tr>
|
</tr>
|
||||||
`;
|
`;
|
||||||
|
|
||||||
// 합계 업데이트
|
// 합계 업데이트
|
||||||
document.getElementById('totalTitle').textContent = `${year}년 ${month}월 합계`;
|
document.getElementById('totalTitle').textContent = `${year}년 ${month}월 합계`;
|
||||||
document.getElementById('totalSalesAmount1').textContent = formatNumber(saleSalesAmount);
|
document.getElementById('totalSalesAmount1').textContent = formatNumber(saleSalesAmount);
|
||||||
document.getElementById('totalCount1').textContent = formatNumber(apiCount1 + saleCount1);
|
document.getElementById('totalCount1').textContent = formatNumber(apiCount1 + saleCount1);
|
||||||
document.getElementById('totalAmount1').textContent = formatNumber(apiTotal1 + saleTotal1);
|
document.getElementById('totalAmount1').textContent = formatNumber(apiTotal1 + saleTotal1);
|
||||||
document.getElementById('totalSalesAmount2').textContent = formatNumber(saleSalesAmount);
|
document.getElementById('totalSalesAmount2').textContent = formatNumber(saleSalesAmount);
|
||||||
document.getElementById('totalCount2').textContent = formatNumber(apiCount2 + saleCount2);
|
document.getElementById('totalCount2').textContent = formatNumber(apiCount2 + saleCount2);
|
||||||
document.getElementById('totalAmount2').textContent = formatNumber(apiTotal2 + saleTotal2);
|
document.getElementById('totalAmount2').textContent = formatNumber(apiTotal2 + saleTotal2);
|
||||||
|
|
||||||
// 출력 버튼 표시
|
// 출력 버튼 표시
|
||||||
document.getElementById('printBtn').style.display = 'inline-block';
|
document.getElementById('printBtn').style.display = 'inline-block';
|
||||||
}
|
}
|
||||||
|
|
||||||
function printCommission() {
|
function printCommission() {
|
||||||
const year = document.getElementById('forYear').value;
|
const year = document.getElementById('forYear').value;
|
||||||
const month = document.getElementById('forMonth').value;
|
const month = document.getElementById('forMonth').value;
|
||||||
|
|
||||||
if (!year || !month) {
|
if (!year || !month) {
|
||||||
customPopups.showAlert('조회 기간을 선택해주세요.');
|
customPopups.showAlert('조회 기간을 선택해주세요.');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 별도 창으로 청구서 출력 페이지 열기
|
// 별도 창으로 청구서 출력 페이지 열기
|
||||||
const printUrl = '/commission/print/' + year + '/' + month;
|
const printUrl = '/commission/print/' + year + '/' + month;
|
||||||
window.open(printUrl, '_blank', 'width=800,height=900,scrollbars=yes,resizable=yes');
|
window.open(printUrl, '_blank', 'width=800,height=900,scrollbars=yes,resizable=yes');
|
||||||
}
|
}
|
||||||
|
</script>
|
||||||
function downloadExcel() {
|
|
||||||
customPopups.showAlert('엑셀 다운로드 기능 (구현 예정)');
|
|
||||||
}
|
|
||||||
|
|
||||||
// 페이지 로드 시 초기 데이터 로드
|
|
||||||
window.onload = function() {
|
|
||||||
loadData();
|
|
||||||
};
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style>
|
|
||||||
.glyphicon-search::before {
|
|
||||||
content: "🔍";
|
|
||||||
}
|
|
||||||
@media print {
|
|
||||||
.searchBox,
|
|
||||||
.searchInfo {
|
|
||||||
display: none !important;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</th:block>
|
</th:block>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -3,62 +3,63 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>수수료 청구서</title>
|
<title>수수료 청구서</title>
|
||||||
<link rel="stylesheet" th:href="@{/content/css/vendor.css}">
|
<!-- <link rel="stylesheet" th:href="@{/content/css/vendor.css}">-->
|
||||||
<style>
|
<!-- <link rel="stylesheet" th:href="@{/css/main.css}">-->
|
||||||
html,body{font-size:12px;}
|
<style>
|
||||||
body{width:600px; margin:90px; font-family: 'Noto Sans KR', -apple-system, sans-serif;}
|
html,body{font-size:12px;}
|
||||||
table{border-collapse: collapse;}
|
body{width:600px; margin:90px}
|
||||||
table th, td{padding:5px 10px;}
|
table{border-collapse: collapse;}
|
||||||
table tr{font-size:12px;}
|
table th, td{padding:5px 10px;}
|
||||||
.info-table{ border-top: 10px solid gray; width: 100%; border-bottom: 2px solid #333;}
|
table tr{font-size:12px;}
|
||||||
.info-table th{text-align:left;}
|
.info-table{ border-top: 10px solid gray; width: 100%; border-bottom: 2px solid #333;}
|
||||||
.commission-table{width:100%;}
|
.info-table th{text-align:left;}
|
||||||
.commission-table th,.commission-table td{border:1px solid #999 !important}
|
.commission-table{width:100%;}
|
||||||
.commission-table td{text-align:right}
|
.commission-table th,.commission-table td{border:1px solid #999 !important}
|
||||||
.bg_ygreen{background-color:aquamarine; text-align:center}
|
.commission-table td{text-align:right}
|
||||||
.bg_skyBlue{background-color:skyblue; text-align:center}
|
.bg_ygreen{background-color:aquamarine; text-align:center}
|
||||||
.bg_yellow{background-color:yellow; text-align:center}
|
.bg_skyBlue{background-color:skyblue; text-align:center}
|
||||||
|
.bg_yellow{background-color:yellow; text-align:center}
|
||||||
|
|
||||||
DIV { position: relative; }
|
DIV { position: relative; }
|
||||||
|
|
||||||
.btn {
|
.btn {
|
||||||
padding: 8px 16px;
|
padding: 8px 16px;
|
||||||
border: none;
|
border: none;
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn-primary {
|
.btn-primary {
|
||||||
background: #667eea;
|
background: #667eea;
|
||||||
color: white;
|
color: white;
|
||||||
}
|
}
|
||||||
|
|
||||||
.btn-primary:hover {
|
.btn-primary:hover {
|
||||||
background: #5a67d8;
|
background: #5a67d8;
|
||||||
}
|
}
|
||||||
|
|
||||||
@media print {
|
@media print {
|
||||||
@page {
|
@page {
|
||||||
size: auto;
|
size: auto;
|
||||||
margin: 0 -0cm;
|
margin: 0 -0cm;
|
||||||
}
|
}
|
||||||
html {
|
html {
|
||||||
margin:0 0cm;
|
margin: 0 0cm;
|
||||||
}
|
}
|
||||||
#printButton, #backButton {
|
.control {
|
||||||
display: none !important;
|
display: none !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body class="commission-print-page">
|
||||||
<button id="backButton" class="btn btn-primary" style="margin-right: 10px;" onclick="history.back()">뒤로가기</button>
|
<div class="control">
|
||||||
<input id="printButton" type="button" class="btn btn-primary" value="청구서 인쇄" onclick="window.print()"/>
|
<input id="printButton" type="button" class="btn btn-primary" value="청구서 인쇄" onclick="window.print()"/>
|
||||||
|
</div>
|
||||||
<div id="PrintDIV">
|
<div id="PrintDIV">
|
||||||
<h1 style="text-align:center">
|
<h1 style="text-align:center">
|
||||||
<img style="width:300px;" th:src="@{/img/portal/logo.jpg}" alt="광주은행 오픈뱅킹" />
|
<img style="height:30px;" th:src="@{/img/logo/logo.png}" alt="광주은행 오픈뱅킹" />
|
||||||
</h1>
|
</h1>
|
||||||
<p style="text-align:center">우61470 광주광역시 동구 제봉로 225 전화 (062)239-6722 FAX (062)239-6719 오픈뱅크 플랫폼 담당자</p>
|
<p style="text-align:center">우61470 광주광역시 동구 제봉로 225 전화 (062)239-6722 FAX (062)239-6719 오픈뱅크 플랫폼 담당자</p>
|
||||||
|
|
||||||
@@ -160,71 +161,6 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</th:block>
|
</th:block>
|
||||||
</th:block>
|
</th:block>
|
||||||
|
|
||||||
<!-- 샘플 데이터 (commission이 null인 경우) -->
|
|
||||||
<th:block th:if="${commission == null}">
|
|
||||||
<tr>
|
|
||||||
<td style="text-align:left">계좌잔액조회</td>
|
|
||||||
<td></td>
|
|
||||||
<td>20,543</td>
|
|
||||||
<td>₩50</td>
|
|
||||||
<td>₩1,027,150</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td style="text-align:left">거래내역조회</td>
|
|
||||||
<td></td>
|
|
||||||
<td>11,876</td>
|
|
||||||
<td>₩80</td>
|
|
||||||
<td>₩950,080</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td style="text-align:left">송금 API</td>
|
|
||||||
<td></td>
|
|
||||||
<td>4,892</td>
|
|
||||||
<td>₩200</td>
|
|
||||||
<td>₩978,400</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td style="text-align:left">본인인증 API</td>
|
|
||||||
<td></td>
|
|
||||||
<td>2,341</td>
|
|
||||||
<td>₩150</td>
|
|
||||||
<td>₩351,150</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th class="bg_skyBlue" colspan="4">소계</th>
|
|
||||||
<td class="bg_skyBlue">₩3,306,780</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td style="text-align:left">개인대출 상품 A</td>
|
|
||||||
<td>₩1,050,000,000</td>
|
|
||||||
<td>55</td>
|
|
||||||
<td>₩5,000</td>
|
|
||||||
<td>₩275,000</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td style="text-align:left">기업대출 상품 B</td>
|
|
||||||
<td>₩1,680,000,000</td>
|
|
||||||
<td>21</td>
|
|
||||||
<td>₩8,000</td>
|
|
||||||
<td>₩168,000</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td style="text-align:left">소상공인 대출 C</td>
|
|
||||||
<td>₩450,000,000</td>
|
|
||||||
<td>30</td>
|
|
||||||
<td>₩3,000</td>
|
|
||||||
<td>₩90,000</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th class="bg_skyBlue" colspan="4">소계</th>
|
|
||||||
<td class="bg_skyBlue">₩533,000</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<th class="bg_yellow" colspan="4">합계</th>
|
|
||||||
<td class="bg_yellow">₩3,839,780</td>
|
|
||||||
</tr>
|
|
||||||
</th:block>
|
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
<input type="text"
|
<input type="text"
|
||||||
th:field="*{searchWrd}"
|
th:field="*{searchWrd}"
|
||||||
placeholder="질문 또는 답변 내용으로 검색">
|
placeholder="질문 또는 답변 내용으로 검색">
|
||||||
<button type="button" onclick="fn_search_article()">
|
<button type="button" class="btn btn-primary" onclick="fn_search_article()">
|
||||||
<i class="fas fa-search"></i>
|
<i class="fas fa-search"></i>
|
||||||
<span>검색</span>
|
<span>검색</span>
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
name="searchWrd"
|
name="searchWrd"
|
||||||
th:value="${search.searchWrd}"
|
th:value="${search.searchWrd}"
|
||||||
placeholder="제목 또는 내용으로 검색">
|
placeholder="제목 또는 내용으로 검색">
|
||||||
<button type="button" onclick="fn_search_inquiry()">
|
<button type="button" class="btn btn-primary" onclick="fn_search_inquiry()">
|
||||||
<i class="fas fa-search"></i>
|
<i class="fas fa-search"></i>
|
||||||
<span>검색</span>
|
<span>검색</span>
|
||||||
</button>
|
</button>
|
||||||
@@ -92,7 +92,7 @@
|
|||||||
|
|
||||||
<!-- New Inquiry Button -->
|
<!-- New Inquiry Button -->
|
||||||
<div class="inquiry-actions">
|
<div class="inquiry-actions">
|
||||||
<a th:href="@{/inquiry/new}" class="action-btn-new">
|
<a th:href="@{/inquiry/new}" class="btn btn-primary">
|
||||||
<i class="fas fa-pen"></i>
|
<i class="fas fa-pen"></i>
|
||||||
<span>질문하기</span>
|
<span>질문하기</span>
|
||||||
</a>
|
</a>
|
||||||
|
|||||||
@@ -28,7 +28,7 @@
|
|||||||
name="searchSubjectOrDetail"
|
name="searchSubjectOrDetail"
|
||||||
th:value="${search.searchSubjectOrDetail}"
|
th:value="${search.searchSubjectOrDetail}"
|
||||||
placeholder="제목 또는 내용으로 검색">
|
placeholder="제목 또는 내용으로 검색">
|
||||||
<button type="button" onclick="fn_search_notice()">
|
<button type="button" class="btn btn-primary" onclick="fn_search_notice()">
|
||||||
<i class="fas fa-search"></i>
|
<i class="fas fa-search"></i>
|
||||||
<span>검색</span>
|
<span>검색</span>
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<!doctype html>
|
<!doctype html>
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"
|
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"
|
||||||
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout/kbank_base_layout}">
|
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{layout/kjbank_base_layout}">
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<section layout:fragment="contentFragment">
|
<section layout:fragment="contentFragment">
|
||||||
|
|||||||
@@ -16,10 +16,10 @@
|
|||||||
<div class="apikey-actions">
|
<div class="apikey-actions">
|
||||||
<button sec:authorize="hasRole('ROLE_API_KEY_REQUEST')"
|
<button sec:authorize="hasRole('ROLE_API_KEY_REQUEST')"
|
||||||
type="button"
|
type="button"
|
||||||
class="btn-create-app"
|
class="btn btn-primary"
|
||||||
id="requestApiKey">
|
id="requestApiKey">
|
||||||
<span class="btn-icon">➕</span>
|
<i class="fas fa-plus"></i>
|
||||||
앱 생성
|
<span>앱 생성하기</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -129,10 +129,10 @@
|
|||||||
<p>새로운 앱을 생성하여 API를 사용해보세요.</p>
|
<p>새로운 앱을 생성하여 API를 사용해보세요.</p>
|
||||||
<button sec:authorize="hasRole('ROLE_API_KEY_REQUEST')"
|
<button sec:authorize="hasRole('ROLE_API_KEY_REQUEST')"
|
||||||
type="button"
|
type="button"
|
||||||
class="btn-create-app-large"
|
class="btn btn-primary"
|
||||||
id="requestApiKeyEmpty">
|
id="requestApiKeyEmpty">
|
||||||
<span class="btn-icon">➕</span>
|
<i class="fas fa-plus"></i>
|
||||||
첫 앱 생성하기
|
<span>첫 앱 생성하기</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -180,10 +180,10 @@
|
|||||||
|
|
||||||
<!-- Action Buttons -->
|
<!-- Action Buttons -->
|
||||||
<div class="form-actions">
|
<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>
|
</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">
|
<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>
|
<polyline points="9 18 15 12 9 6"></polyline>
|
||||||
@@ -374,4 +374,4 @@
|
|||||||
</th:block>
|
</th:block>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -129,11 +129,11 @@
|
|||||||
<!-- Form Actions -->
|
<!-- Form Actions -->
|
||||||
<div class="form-actions">
|
<div class="form-actions">
|
||||||
<!-- Save and go back button -->
|
<!-- 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>
|
<span class="icon">←</span>
|
||||||
이전 단계
|
이전 단계
|
||||||
</button>
|
</button>
|
||||||
<button type="submit" class="btn-primary" id="btnNext">
|
<button type="submit" class="btn btn-primary" id="btnNext">
|
||||||
저장
|
저장
|
||||||
<span class="icon">→</span>
|
<span class="icon">→</span>
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@@ -53,11 +53,11 @@
|
|||||||
|
|
||||||
<!-- Action Buttons -->
|
<!-- Action Buttons -->
|
||||||
<div class="result-actions">
|
<div class="result-actions">
|
||||||
<a th:href="@{/myapikey}" class="btn-secondary">
|
<a th:href="@{/myapikey}" class="btn btn-secondary">
|
||||||
<span class="icon">📋</span>
|
<span class="icon">📋</span>
|
||||||
API Key 목록으로
|
API Key 목록으로
|
||||||
</a>
|
</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>
|
<span class="icon">📄</span>
|
||||||
요청 내역 확인
|
요청 내역 확인
|
||||||
</a>
|
</a>
|
||||||
@@ -79,7 +79,7 @@
|
|||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="result-actions">
|
<div class="result-actions">
|
||||||
<a th:href="@{/myapikey}" class="btn-primary">
|
<a th:href="@{/myapikey}" class="btn btn-primary">
|
||||||
목록으로 돌아가기
|
목록으로 돌아가기
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
@@ -149,4 +149,4 @@
|
|||||||
</th:block>
|
</th:block>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -177,11 +177,11 @@
|
|||||||
|
|
||||||
<!-- Form Actions -->
|
<!-- Form Actions -->
|
||||||
<div class="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>
|
<span class="icon">←</span>
|
||||||
취소
|
취소
|
||||||
</a>
|
</a>
|
||||||
<button type="submit" class="btn-primary">
|
<button type="submit" class="btn btn-primary">
|
||||||
다음 단계
|
다음 단계
|
||||||
<span class="icon">→</span>
|
<span class="icon">→</span>
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@@ -115,11 +115,11 @@
|
|||||||
|
|
||||||
<!-- Form Actions -->
|
<!-- Form Actions -->
|
||||||
<div class="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>
|
<span class="icon">←</span>
|
||||||
이전 단계
|
이전 단계
|
||||||
</button>
|
</button>
|
||||||
<button type="submit" class="btn-primary">
|
<button type="submit" class="btn btn-primary">
|
||||||
저장
|
저장
|
||||||
<span class="icon">→</span>
|
<span class="icon">→</span>
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@@ -53,7 +53,7 @@
|
|||||||
|
|
||||||
<!-- Action Buttons -->
|
<!-- Action Buttons -->
|
||||||
<div class="result-actions">
|
<div class="result-actions">
|
||||||
<a href="/myapikey" class="btn-secondary">
|
<a href="/myapikey" class="btn btn-secondary">
|
||||||
<span class="icon">📋</span>
|
<span class="icon">📋</span>
|
||||||
API Key 목록으로
|
API Key 목록으로
|
||||||
</a>
|
</a>
|
||||||
@@ -75,10 +75,10 @@
|
|||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="result-actions">
|
<div class="result-actions">
|
||||||
<a href="/myapikey/register/step1" class="btn-secondary">
|
<a href="/myapikey/register/step1" class="btn btn-secondary">
|
||||||
다시 시도
|
다시 시도
|
||||||
</a>
|
</a>
|
||||||
<a href="/myapikey" class="btn-primary">
|
<a href="/myapikey" class="btn btn-primary">
|
||||||
목록으로
|
목록으로
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -147,14 +147,14 @@
|
|||||||
<div class="detail-actions">
|
<div class="detail-actions">
|
||||||
<button type="button"
|
<button type="button"
|
||||||
sec:authorize="hasRole('ROLE_API_KEY_REQUEST')"
|
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
|
th:if="${appRequest.approval != null and appRequest.approval.approvalStatus != null and
|
||||||
(appRequest.approval.approvalStatus.toString() == 'PENDING' or appRequest.approval.approvalStatus.toString() == 'REQUESTED')}"
|
(appRequest.approval.approvalStatus.toString() == 'PENDING' or appRequest.approval.approvalStatus.toString() == 'REQUESTED')}"
|
||||||
th:data-request-id="${appRequest.id}"
|
th:data-request-id="${appRequest.id}"
|
||||||
onclick="cancelRequestById(this)">
|
onclick="cancelRequestById(this)">
|
||||||
신청 취소
|
신청 취소
|
||||||
</button>
|
</button>
|
||||||
<a th:href="@{/myapikey}" class="btn-secondary">
|
<a th:href="@{/myapikey}" class="btn btn-primary">
|
||||||
목록으로
|
목록으로
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -49,7 +49,7 @@
|
|||||||
maxlength="4"
|
maxlength="4"
|
||||||
disabled="disabled">
|
disabled="disabled">
|
||||||
</div>
|
</div>
|
||||||
<button type="button" class="org-btn org-btn-secondary change_mobile_phone" id="changePhoneBtn">변경</button>
|
<button type="button" class="btn btn-secondary change_mobile_phone" id="changePhoneBtn">변경</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="org-form-group" id="newPhoneNumberContainer" style="display: none;">
|
<div class="org-form-group" id="newPhoneNumberContainer" style="display: none;">
|
||||||
@@ -75,7 +75,7 @@
|
|||||||
maxlength="4" pattern="\d*" inputmode="numeric" placeholder="뒷자리"/>
|
maxlength="4" pattern="\d*" inputmode="numeric" placeholder="뒷자리"/>
|
||||||
<input type="hidden" value="" name="mobileNumber" id="mobileNumber">
|
<input type="hidden" value="" name="mobileNumber" id="mobileNumber">
|
||||||
</div>
|
</div>
|
||||||
<button type="button" class="org-btn org-btn-primary btn_auth">
|
<button type="button" class="btn btn-primary btn_auth">
|
||||||
인증번호 받기
|
인증번호 받기
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
@@ -91,7 +91,7 @@
|
|||||||
placeholder="SMS 인증번호 6자리">
|
placeholder="SMS 인증번호 6자리">
|
||||||
<span class="org-timer" id="certify_time">03:00</span>
|
<span class="org-timer" id="certify_time">03:00</span>
|
||||||
</div>
|
</div>
|
||||||
<button type="button" class="org-btn org-btn-primary btn_verify_auth">
|
<button type="button" class="btn btn-primary btn_verify_auth">
|
||||||
인증번호 확인
|
인증번호 확인
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -178,20 +178,20 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Action Buttons -->
|
<!-- Action Buttons -->
|
||||||
<div class="detail-actions">
|
<div class="form-actions">
|
||||||
<a sec:authorize="hasRole('ROLE_API_KEY_REQUEST')"
|
<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})}">
|
th:href="@{/myapikey/modify/step1(clientId=${apiKey.clientid})}">
|
||||||
수정
|
수정
|
||||||
</a>
|
</a>
|
||||||
<button type="button"
|
<button type="button"
|
||||||
sec:authorize="hasRole('ROLE_API_KEY_REQUEST')"
|
sec:authorize="hasRole('ROLE_API_KEY_REQUEST')"
|
||||||
class="btn-action btn-danger"
|
class="btn btn-danger"
|
||||||
th:data-client-id="${apiKey.clientid}"
|
th:data-client-id="${apiKey.clientid}"
|
||||||
onclick="deleteApiKeyFromButton(this)">
|
onclick="deleteApiKeyFromButton(this)">
|
||||||
인증키 삭제
|
인증키 삭제
|
||||||
</button>
|
</button>
|
||||||
<a th:href="@{/myapikey}" class="btn-secondary">
|
<a th:href="@{/myapikey}" class="btn btn-secondary">
|
||||||
목록으로
|
목록으로
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -58,8 +58,8 @@
|
|||||||
|
|
||||||
<!-- Action Buttons -->
|
<!-- Action Buttons -->
|
||||||
<div class="org-action-buttons">
|
<div class="org-action-buttons">
|
||||||
<button type="button" class="org-btn org-btn-secondary" id="cancelButton" th:onclick="|location.href='@{/mypage}'|">취소</button>
|
<button type="button" class="btn btn-secondary" id="cancelButton" th:onclick="|location.href='@{/mypage}'|">취소</button>
|
||||||
<button type="button" class="org-btn org-btn-primary" id="submitButton">법인회원 전환</button>
|
<button type="button" class="btn btn-primary" id="submitButton">법인회원 전환</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html xmlns:th="http://www.thymeleaf.org"
|
<html xmlns:th="http://www.thymeleaf.org"
|
||||||
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||||
layout:decorate="~{layout/kjbank_signup_layout}">
|
layout:decorate="~{layout/kjbank_title_layout}">
|
||||||
<head>
|
<head>
|
||||||
<title>비밀번호 변경</title>
|
<title>비밀번호 변경</title>
|
||||||
</head>
|
</head>
|
||||||
@@ -51,8 +51,8 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="org-action-buttons">
|
<div class="org-action-buttons">
|
||||||
<button type="button" class="org-btn org-btn-secondary" onclick="history.back()">취소</button>
|
<button type="button" class="btn btn-secondary" onclick="history.back()">취소</button>
|
||||||
<button type="submit" class="org-btn org-btn-primary">변경</button>
|
<button type="submit" class="btn btn-primary">변경</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html xmlns:th="http://www.thymeleaf.org"
|
<html xmlns:th="http://www.thymeleaf.org"
|
||||||
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||||
layout:decorate="~{layout/kjbank_signup_layout}">
|
layout:decorate="~{layout/kjbank_title_layout}">
|
||||||
<body>
|
<body>
|
||||||
<section layout:fragment="title">
|
<section layout:fragment="title">
|
||||||
<div class="org-page-title-banner">
|
<div class="org-page-title-banner">
|
||||||
@@ -31,8 +31,8 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="org-action-buttons">
|
<div class="org-action-buttons">
|
||||||
<button type="button" class="org-btn org-btn-secondary" th:onclick="|location.href='@{/}'|">취소</button>
|
<button type="button" class="btn btn-secondary" th:onclick="|location.href='@{/}'|">취소</button>
|
||||||
<button type="submit" class="org-btn org-btn-primary">확인</button>
|
<button type="submit" class="btn btn-primary">확인</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||||
layout:decorate="~{layout/kjbank_signup_layout}">
|
layout:decorate="~{layout/kjbank_title_layout}">
|
||||||
<body>
|
<body>
|
||||||
<section layout:fragment="title">
|
<section layout:fragment="title">
|
||||||
<div class="org-page-title-banner">
|
<div class="org-page-title-banner">
|
||||||
@@ -214,8 +214,8 @@
|
|||||||
|
|
||||||
<!-- Action Buttons -->
|
<!-- Action Buttons -->
|
||||||
<div class="org-action-buttons">
|
<div class="org-action-buttons">
|
||||||
<button type="button" class="org-btn org-btn-secondary" th:onclick="|location.href='@{/}'|">취소</button>
|
<button type="button" class="btn btn-secondary" th:onclick="|location.href='@{/}'|">취소</button>
|
||||||
<button type="button" class="org-btn org-btn-primary">수정 적용</button>
|
<button type="button" class="btn btn-primary">수정 적용</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
@@ -573,7 +573,7 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
// 수정 버튼 이벤트
|
// 수정 버튼 이벤트
|
||||||
const submitButton = document.querySelector('.org-btn-primary:not(.btn_add2)');
|
const submitButton = document.querySelector('.btn-primary:not(.btn_add2)');
|
||||||
if (submitButton) {
|
if (submitButton) {
|
||||||
submitButton.addEventListener('click', function(e) {
|
submitButton.addEventListener('click', function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||||
layout:decorate="~{layout/kjbank_signup_layout}">
|
layout:decorate="~{layout/kjbank_title_layout}">
|
||||||
<body>
|
<body>
|
||||||
<section layout:fragment="title">
|
<section layout:fragment="title">
|
||||||
<div class="org-page-title-banner">
|
<div class="org-page-title-banner">
|
||||||
@@ -30,8 +30,8 @@
|
|||||||
|
|
||||||
<!-- Action Buttons -->
|
<!-- Action Buttons -->
|
||||||
<div class="org-action-buttons">
|
<div class="org-action-buttons">
|
||||||
<button type="button" class="org-btn org-btn-secondary" th:onclick="|location.href='@{/}'|">취소</button>
|
<button type="button" class="btn btn-secondary" th:onclick="|location.href='@{/}'|">취소</button>
|
||||||
<button type="button" class="org-btn org-btn-primary submit-btn">수정 적용</button>
|
<button type="button" class="btn btn-primary submit-btn">수정 적용</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
@@ -64,7 +64,7 @@
|
|||||||
const form = document.getElementById('updateForm');
|
const form = document.getElementById('updateForm');
|
||||||
|
|
||||||
// 수정 버튼 이벤트
|
// 수정 버튼 이벤트
|
||||||
const submitButton = document.querySelector('.org-btn-primary.submit-btn');
|
const submitButton = document.querySelector('.btn-primary.submit-btn');
|
||||||
if (submitButton) {
|
if (submitButton) {
|
||||||
submitButton.addEventListener('click', function (e) {
|
submitButton.addEventListener('click', function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
<html xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||||
layout:decorate="~{layout/kjbank_signup_layout}">
|
layout:decorate="~{layout/kjbank_title_layout}">
|
||||||
<body>
|
<body>
|
||||||
<section layout:fragment="title">
|
<section layout:fragment="title">
|
||||||
<div class="org-page-title-banner">
|
<div class="org-page-title-banner">
|
||||||
@@ -22,15 +22,15 @@
|
|||||||
|
|
||||||
<!-- Corporate Transfer Button -->
|
<!-- Corporate Transfer Button -->
|
||||||
<div class="org-info-notice" style="margin-top: 32px;">
|
<div class="org-info-notice" style="margin-top: 32px;">
|
||||||
<button type="button" class="org-btn org-btn-secondary btn_business" style="width: 100%;">
|
<button type="button" class="btn btn-secondary btn_business" style="width: 100%;">
|
||||||
법인회원 전환
|
법인회원 전환
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Action Buttons -->
|
<!-- Action Buttons -->
|
||||||
<div class="org-action-buttons">
|
<div class="org-action-buttons">
|
||||||
<button type="button" class="org-btn org-btn-secondary" th:onclick="|location.href='@{/}'|">취소</button>
|
<button type="button" class="btn btn-secondary" th:onclick="|location.href='@{/}'|">취소</button>
|
||||||
<button type="button" class="org-btn org-btn-primary submit-btn">수정</button>
|
<button type="button" class="btn btn-primary submit-btn">수정</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
@@ -65,7 +65,7 @@
|
|||||||
const form = document.getElementById('updateForm');
|
const form = document.getElementById('updateForm');
|
||||||
|
|
||||||
// 수정 버튼 이벤트
|
// 수정 버튼 이벤트
|
||||||
const submitButton = document.querySelector('.org-btn-primary.submit-btn');
|
const submitButton = document.querySelector('.btn-primary.submit-btn');
|
||||||
if (submitButton) {
|
if (submitButton) {
|
||||||
submitButton.addEventListener('click', function (e) {
|
submitButton.addEventListener('click', function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
<input type="hidden" id="loginId" name="loginId" th:value="${loginId}">
|
<input type="hidden" id="loginId" name="loginId" th:value="${loginId}">
|
||||||
<input type="hidden" name="registrationType" th:value="${registrationType}"/>
|
<input type="hidden" name="registrationType" th:value="${registrationType}"/>
|
||||||
<input type="hidden" id="registrationScenario" name="registrationScenario" value="new"/>
|
<input type="hidden" id="registrationScenario" name="registrationScenario" value="new"/>
|
||||||
<button type="button" class="org-btn org-btn-check btn_check_email"
|
<button type="button" class="btn org-btn-check btn_check_email"
|
||||||
th:classappend="${isInvited ? 'hidden' : ''}">
|
th:classappend="${isInvited ? 'hidden' : ''}">
|
||||||
중복체크
|
중복체크
|
||||||
</button>
|
</button>
|
||||||
|
|||||||
@@ -40,7 +40,7 @@
|
|||||||
th:placeholder="#{portal.Register.phone2}">
|
th:placeholder="#{portal.Register.phone2}">
|
||||||
</div>
|
</div>
|
||||||
<input type="hidden" th:field="*{mobileNumber}" id="mobileNumber">
|
<input type="hidden" th:field="*{mobileNumber}" id="mobileNumber">
|
||||||
<button type="button" class="org-btn org-btn-check btn_auth">
|
<button type="button" class="btn org-btn-check btn_auth">
|
||||||
인증번호 받기
|
인증번호 받기
|
||||||
</button>
|
</button>
|
||||||
<div id="mobile-validation" class="org-validation-message"></div>
|
<div id="mobile-validation" class="org-validation-message"></div>
|
||||||
@@ -59,7 +59,7 @@
|
|||||||
inputmode="numeric" class="org-form-input" th:placeholder="#{ncrdRegister.validate.authNumber}" required>
|
inputmode="numeric" class="org-form-input" th:placeholder="#{ncrdRegister.validate.authNumber}" required>
|
||||||
<span class="org-timer" id="certify_time">03:00</span>
|
<span class="org-timer" id="certify_time">03:00</span>
|
||||||
</div>
|
</div>
|
||||||
<button type="button" class="org-btn org-btn-check btn_verify_auth">
|
<button type="button" class="btn org-btn-check btn_verify_auth">
|
||||||
인증번호 확인
|
인증번호 확인
|
||||||
</button>
|
</button>
|
||||||
<div id="authNumber-validation" class="org-validation-message"></div>
|
<div id="authNumber-validation" class="org-validation-message"></div>
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
<input type="text" id="domain" class="org-form-input"
|
<input type="text" id="domain" class="org-form-input"
|
||||||
placeholder="도메인">
|
placeholder="도메인">
|
||||||
</div>
|
</div>
|
||||||
<button type="button" class="org-btn org-btn-check btn_check_email">
|
<button type="button" class="btn org-btn-check btn_check_email">
|
||||||
중복체크
|
중복체크
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="ko" xmlns:th="http://www.thymeleaf.org"
|
<html lang="ko" xmlns:th="http://www.thymeleaf.org"
|
||||||
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||||
layout:decorate="~{layout/kjbank_signup_layout}">
|
layout:decorate="~{layout/kjbank_title_layout}">
|
||||||
<body>
|
<body>
|
||||||
<section layout:fragment="title">
|
<section layout:fragment="title">
|
||||||
<div class="org-page-title-banner">
|
<div class="org-page-title-banner">
|
||||||
@@ -55,8 +55,8 @@
|
|||||||
|
|
||||||
<!-- Action Buttons -->
|
<!-- Action Buttons -->
|
||||||
<div class="org-action-buttons">
|
<div class="org-action-buttons">
|
||||||
<button type="button" class="org-btn org-btn-secondary" id="cancelButton">취소</button>
|
<button type="button" class="btn btn-secondary" id="cancelButton">취소</button>
|
||||||
<button type="button" class="org-btn org-btn-primary btn_register">가입신청</button>
|
<button type="button" class="btn btn-primary btn_register">가입신청</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="ko" xmlns:th="http://www.thymeleaf.org"
|
<html lang="ko" xmlns:th="http://www.thymeleaf.org"
|
||||||
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||||
layout:decorate="~{layout/kjbank_signup_layout}">
|
layout:decorate="~{layout/kjbank_title_layout}">
|
||||||
<body>
|
<body>
|
||||||
<section layout:fragment="title">
|
<section layout:fragment="title">
|
||||||
<div class="org-page-title-banner">
|
<div class="org-page-title-banner">
|
||||||
@@ -60,8 +60,8 @@
|
|||||||
|
|
||||||
<!-- Action Buttons -->
|
<!-- Action Buttons -->
|
||||||
<div class="org-action-buttons">
|
<div class="org-action-buttons">
|
||||||
<button type="button" class="org-btn org-btn-secondary" id="cancelButton">취소</button>
|
<button type="button" class="btn btn-secondary" id="cancelButton">취소</button>
|
||||||
<button type="button" class="org-btn org-btn-primary btn_register">가입신청</button>
|
<button type="button" class="btn btn-primary btn_register">가입신청</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
|
|||||||
@@ -101,7 +101,7 @@
|
|||||||
|
|
||||||
<!-- Action Buttons -->
|
<!-- Action Buttons -->
|
||||||
<div class="detail-actions">
|
<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> 목록으로
|
<i class="fas fa-list"></i> 목록으로
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -13,9 +13,9 @@
|
|||||||
<h2>이용자 목록</h2>
|
<h2>이용자 목록</h2>
|
||||||
</div>
|
</div>
|
||||||
<div class="user-management-actions">
|
<div class="user-management-actions">
|
||||||
<button type="button" class="btn-create-user" id="addUserBtn">
|
<button type="button" class="btn btn-primary" id="addUserBtn">
|
||||||
<span class="btn-icon">➕</span>
|
<i class="fas fa-plus"></i>
|
||||||
이용자 추가
|
<span>이용자 추가</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -72,25 +72,25 @@
|
|||||||
|
|
||||||
<!-- Action Buttons -->
|
<!-- Action Buttons -->
|
||||||
<div class="user-action-buttons" th:if="${user.roleCode != null and user.id != currentUserId}">
|
<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:if="${user.userStatus.toString() == 'ACTIVE'}"
|
||||||
th:data-user-id="${user.id}"
|
th:data-user-id="${user.id}"
|
||||||
th:data-user-name="${user.maskedUserName}">
|
th:data-user-name="${user.maskedUserName}">
|
||||||
비활성화
|
비활성화
|
||||||
</button>
|
</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:if="${user.userStatus.toString() != 'ACTIVE'}"
|
||||||
th:data-user-id="${user.id}"
|
th:data-user-id="${user.id}"
|
||||||
th:data-user-name="${user.maskedUserName}">
|
th:data-user-name="${user.maskedUserName}">
|
||||||
활성화
|
활성화
|
||||||
</button>
|
</button>
|
||||||
<button type="button" class="btn-action btn-sm btn-danger cancel_invitation"
|
<button type="button" class="btn btn-sm btn-secondary cancel_invitation"
|
||||||
th:if="${user.userStatus.toString() == 'PENDING'}"
|
th:if="${user.userStatus.toString() == 'PENDING'}"
|
||||||
th:data-user-id="${user.id}"
|
th:data-user-id="${user.id}"
|
||||||
th:data-user-email="${user.maskedEmailAddr}">
|
th:data-user-email="${user.maskedEmailAddr}">
|
||||||
초대취소
|
초대취소
|
||||||
</button>
|
</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:if="${user.userStatus.toString() == 'ACTIVE' && user.roleCode.toString() == 'ROLE_CORP_USER'}"
|
||||||
th:data-user-id="${user.id}"
|
th:data-user-id="${user.id}"
|
||||||
th:data-user-name="${user.maskedUserName}"
|
th:data-user-name="${user.maskedUserName}"
|
||||||
@@ -120,7 +120,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="col-actions">
|
<div class="col-actions">
|
||||||
<div class="user-action-buttons">
|
<div class="user-action-buttons">
|
||||||
<button type="button" class="btn-action btn-sm btn-danger cancel_invitation"
|
<button type="button" class="btn btn-sm btn-secondary cancel_invitation"
|
||||||
th:data-user-id="${user.id}"
|
th:data-user-id="${user.id}"
|
||||||
th:data-user-email="${user.maskedEmailAddr}">
|
th:data-user-email="${user.maskedEmailAddr}">
|
||||||
초대취소
|
초대취소
|
||||||
@@ -136,9 +136,9 @@
|
|||||||
<div class="empty-icon">👥</div>
|
<div class="empty-icon">👥</div>
|
||||||
<h3>등록된 이용자가 없습니다</h3>
|
<h3>등록된 이용자가 없습니다</h3>
|
||||||
<p>새로운 이용자를 추가하여 시작하세요.</p>
|
<p>새로운 이용자를 추가하여 시작하세요.</p>
|
||||||
<button type="button" class="btn-create-user-large" id="addUserBtnEmpty">
|
<button type="button" class="btn btn-primary" id="addUserBtnEmpty">
|
||||||
<span class="btn-icon">➕</span>
|
<i class="fas fa-plus"></i>
|
||||||
첫 이용자 추가하기
|
<span>첫 이용자 추가하기</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -8,9 +8,9 @@
|
|||||||
<div class="footer-left">
|
<div class="footer-left">
|
||||||
<img src="/img/logo/logo.png" alt="광주은행" class="footer-logo">
|
<img src="/img/logo/logo.png" alt="광주은행" class="footer-logo">
|
||||||
<div class="footer-links">
|
<div class="footer-links">
|
||||||
<a href="#" class="footer-link">이용약관</a>
|
<a th:href="@{/agreements/terms}" class="footer-link">이용약관</a>
|
||||||
<span class="footer-separator">|</span>
|
<span class="footer-separator">|</span>
|
||||||
<a href="#" class="footer-link">개인정보처리방침</a>
|
<a th:href="@{/agreements/terms(tab=privacy)}" class="footer-link">개인정보처리방침</a>
|
||||||
</div>
|
</div>
|
||||||
<p class="footer-copyright">Copyright 2025 Kwangju Bank. All Rights Reserved.</p>
|
<p class="footer-copyright">Copyright 2025 Kwangju Bank. All Rights Reserved.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -62,7 +62,7 @@
|
|||||||
</li>
|
</li>
|
||||||
<li sec:authorize="hasRole('ROLE_APP')">
|
<li sec:authorize="hasRole('ROLE_APP')">
|
||||||
<a th:href="@{/myapikey}"><i class="fas fa-key"></i>인증 키 관리</a>
|
<a th:href="@{/myapikey}"><i class="fas fa-key"></i>인증 키 관리</a>
|
||||||
<a th:href="@{/commission/manage}"><i class="fas fa-key"></i>과금 관리</a>
|
<a th:href="@{/commission/manage}"><i class="fas fa-money-bill"></i>과금 관리</a>
|
||||||
</li>
|
</li>
|
||||||
<li><a th:href="@{/mypage}"><i class="fas fa-user-circle"></i>내 정보 관리</a></li>
|
<li><a th:href="@{/mypage}"><i class="fas fa-user-circle"></i>내 정보 관리</a></li>
|
||||||
<li><a th:href="@{/change_password}"><i class="fas fa-lock"></i>비밀번호 변경</a></li>
|
<li><a th:href="@{/change_password}"><i class="fas fa-lock"></i>비밀번호 변경</a></li>
|
||||||
@@ -148,11 +148,6 @@
|
|||||||
<i class="fas fa-key"></i> 인증 키 관리
|
<i class="fas fa-key"></i> 인증 키 관리
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<!-- <li sec:authorize="hasRole('ROLE_API_KEY_REQUEST_VIEW')">-->
|
|
||||||
<!-- <a th:href="@{/myapikey/api_key_request/history}" class="drawer-link">-->
|
|
||||||
<!-- <i class="fas fa-list"></i> 인증키 신청 목록-->
|
|
||||||
<!-- </a>-->
|
|
||||||
<!-- </li>-->
|
|
||||||
<li sec:authorize="isAuthenticated()">
|
<li sec:authorize="isAuthenticated()">
|
||||||
<a th:href="@{/mypage}" class="drawer-link">
|
<a th:href="@{/mypage}" class="drawer-link">
|
||||||
<i class="fas fa-user-circle"></i> 내 정보 관리
|
<i class="fas fa-user-circle"></i> 내 정보 관리
|
||||||
|
|||||||
@@ -1,74 +1,106 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
<html xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
|
||||||
layout:decorate="~{layout/kjbank_base_layout}">
|
layout:decorate="~{layout/kjbank_title_layout}">
|
||||||
<body>
|
<body>
|
||||||
<section layout:fragment="contentFragment" class="content">
|
<section layout:fragment="title">
|
||||||
<div class="content_wrap">
|
<div class="org-page-title-banner">
|
||||||
<div class="sub_title2">
|
<img th:src="@{/img/user_register_title.png}" class="title-image">
|
||||||
<h2 class="title" th:classappend="${isTermsOfUse ? 'add3' : 'add4'}"
|
<h1 th:text="${agreementTitle}">비밀번호 변경</h1>
|
||||||
th:text="${agreementTitle}">이용약관</h2>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="inner cs2">
|
</section>
|
||||||
<div class="tab-wrap">
|
<section layout:fragment="contentFragment">
|
||||||
<div class="tabs">
|
<div class="org-info-notice">
|
||||||
<ul class="tab_nav tab_bt">
|
<ul>
|
||||||
<li th:class="${isTermsOfUse ? 'active' : ''}">
|
<li>광주은행 서비스 이용약관 및 개인정보처리방침을 확인하실 수 있습니다.</li>
|
||||||
<a th:href="@{/agreements/terms(tab='terms')}">이용약관</a>
|
</ul>
|
||||||
</li>
|
</div>
|
||||||
<li th:class="${isPrivacyPolicy ? 'active' : ''}">
|
<div class="terms-container">
|
||||||
<a th:href="@{/agreements/terms(tab='privacy')}">개인정보처리방침</a>
|
<!-- Tab Navigation -->
|
||||||
</li>
|
<div class="terms-tabs">
|
||||||
</ul>
|
<a th:href="@{/agreements/terms(tab='terms')}"
|
||||||
<div class="tab active" th:id="${isTermsOfUse ? 'tab1' : 'tab2'}">
|
class="tab-link"
|
||||||
<div class="form_type">
|
th:classappend="${isTermsOfUse ? 'active' : ''}">
|
||||||
<div class="info1 ts_top">
|
<i class="fas fa-file-alt"></i>
|
||||||
<div class="info_line ts_left">
|
이용약관
|
||||||
<div class="info_box1 info_add3 info_top">
|
</a>
|
||||||
<span class="input">
|
<a th:href="@{/agreements/terms(tab='privacy')}"
|
||||||
<form id="agreementForm" th:action="@{/agreements/terms}" method="get">
|
class="tab-link"
|
||||||
<input type="hidden" name="tab"
|
th:classappend="${isPrivacyPolicy ? 'active' : ''}">
|
||||||
th:value="${currentTab}">
|
<i class="fas fa-shield-alt"></i>
|
||||||
<div class="custom_select" id="agreement_select">
|
개인정보처리방침
|
||||||
<div class="select_selected">
|
</a>
|
||||||
시행일자 : <span th:text="${#temporals.format(selectedAgreement.publishedOn, 'yyyy.MM.dd')}"></span>
|
|
||||||
</div>
|
|
||||||
<ul class="common_selecttype select_items select_hide">
|
|
||||||
<li th:each="agreement : ${agreementsList}"
|
|
||||||
th:data-id="${#temporals.format(agreement.publishedOn, 'yyyy-MM-dd')}"
|
|
||||||
th:text="'시행일자 : ' + ${#temporals.format(agreement.publishedOn, 'yyyy.MM.dd')}"
|
|
||||||
th:class="${#temporals.format(agreement.publishedOn, 'yyyy-MM-dd') == selectedDate ? 'selected' : ''}">
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<input type="hidden" name="publishedOn" id="publishedOnInput">
|
|
||||||
</form>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="terms_contents m_termst" th:utext="${selectedAgreement.contents}"
|
|
||||||
style="white-space: pre-wrap; word-wrap: break-word;">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- Version Selector -->
|
||||||
|
<div class="terms-selector">
|
||||||
|
<form id="agreementForm" th:action="@{/agreements/terms}" method="get">
|
||||||
|
<input type="hidden" name="tab" th:value="${currentTab}">
|
||||||
|
<div class="custom-select" id="agreement_select">
|
||||||
|
<div class="select-selected">
|
||||||
|
<i class="fas fa-calendar-alt"></i>
|
||||||
|
시행일자 : <span th:text="${#temporals.format(selectedAgreement.publishedOn, 'yyyy.MM.dd')}"></span>
|
||||||
|
<i class="fas fa-chevron-down"></i>
|
||||||
|
</div>
|
||||||
|
<ul class="select-items select-hide">
|
||||||
|
<li th:each="agreement : ${agreementsList}"
|
||||||
|
th:data-id="${#temporals.format(agreement.publishedOn, 'yyyy-MM-dd')}"
|
||||||
|
th:text="'시행일자 : ' + ${#temporals.format(agreement.publishedOn, 'yyyy.MM.dd')}"
|
||||||
|
th:class="${#temporals.format(agreement.publishedOn, 'yyyy-MM-dd') == selectedDate ? 'selected' : ''}">
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<input type="hidden" name="publishedOn" id="publishedOnInput">
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Terms Content -->
|
||||||
|
<div class="terms-content">
|
||||||
|
<div class="content-body" th:utext="${selectedAgreement.contents}"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</section>
|
</section>
|
||||||
<script layout:fragment="contentScript">
|
<script layout:fragment="contentScript">
|
||||||
document.addEventListener('DOMContentLoaded', function () {
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
const selects = document.getElementById('agreement_select');
|
const customSelect = document.getElementById('agreement_select');
|
||||||
const form = document.getElementById('agreementForm');
|
const selectSelected = customSelect.querySelector('.select-selected');
|
||||||
const publishedOnInput = document.getElementById('publishedOnInput');
|
const selectItems = customSelect.querySelector('.select-items');
|
||||||
|
const form = document.getElementById('agreementForm');
|
||||||
|
const publishedOnInput = document.getElementById('publishedOnInput');
|
||||||
|
|
||||||
createCustomSelect(selects, {
|
// Toggle dropdown on click
|
||||||
onSelect: (item) => {
|
selectSelected.addEventListener('click', function(e) {
|
||||||
publishedOnInput.value = item;
|
e.stopPropagation();
|
||||||
form.submit();
|
selectItems.classList.toggle('select-hide');
|
||||||
}
|
selectSelected.classList.toggle('select-arrow-active');
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Handle option selection
|
||||||
|
const options = selectItems.querySelectorAll('li');
|
||||||
|
options.forEach(option => {
|
||||||
|
option.addEventListener('click', function() {
|
||||||
|
const selectedDate = this.getAttribute('data-id');
|
||||||
|
publishedOnInput.value = selectedDate;
|
||||||
|
|
||||||
|
// Update selected state
|
||||||
|
options.forEach(opt => opt.classList.remove('selected'));
|
||||||
|
this.classList.add('selected');
|
||||||
|
|
||||||
|
// Close dropdown
|
||||||
|
selectItems.classList.add('select-hide');
|
||||||
|
selectSelected.classList.remove('select-arrow-active');
|
||||||
|
|
||||||
|
// Submit form
|
||||||
|
form.submit();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Close dropdown when clicking outside
|
||||||
|
document.addEventListener('click', function() {
|
||||||
|
selectItems.classList.add('select-hide');
|
||||||
|
selectSelected.classList.remove('select-arrow-active');
|
||||||
|
});
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
Reference in New Issue
Block a user