feature/admin #6
|
|
@ -48,7 +48,7 @@ public class SecurityConfig {
|
|||
|
||||
// 인증 설정
|
||||
http.authorizeHttpRequests(c -> c
|
||||
.requestMatchers("/css/**", "/images/**", "/js/**").permitAll()
|
||||
.requestMatchers("/css/**", "/images/**", "/js/**", "/font/**").permitAll()
|
||||
.requestMatchers("/common/modal/**").permitAll()
|
||||
.requestMatchers(LOGIN_PATH, LOGOUT_PATH, ERROR_PATH).permitAll()
|
||||
.anyRequest().authenticated());
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
package com.bpgroup.poc.admin.security;
|
||||
|
||||
public class SecurityFilterConstants {
|
||||
public static final String[] EXCLUDE_FILTER_STARTS_WITH_URI = {"/login", "/logout", "/error", "/css", "/js", "/images", "/favicon.ico", "/common/modal"};
|
||||
public static final String[] EXCLUDE_FILTER_STARTS_WITH_URI = {"/login", "/logout", "/error", "/css", "/js", "/images", "/favicon.ico", "/common/modal", "/font"};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,63 @@
|
|||
|
||||
@font-face {
|
||||
font-family: 'Pretendard';
|
||||
font-weight: 900;
|
||||
font-display: swap;
|
||||
src: local('Pretendard Black'), url(../font/Pretendard-Black.woff2) format('woff2'), url(../font/Pretendard-Black.woff) format('woff');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Pretendard';
|
||||
font-weight: 800;
|
||||
font-display: swap;
|
||||
src: local('Pretendard ExtraBold'), url(../font/Pretendard-ExtraBold.woff2) format('woff2'), url(../font/Pretendard-ExtraBold.woff) format('woff');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Pretendard';
|
||||
font-weight: 700;
|
||||
font-display: swap;
|
||||
src: local('Pretendard Bold'), url(../font/Pretendard-Bold.woff2) format('woff2'), url(../font/Pretendard-Bold.woff) format('woff');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Pretendard';
|
||||
font-weight: 600;
|
||||
font-display: swap;
|
||||
src: local('Pretendard SemiBold'), url(../font/Pretendard-SemiBold.woff2) format('woff2'), url(../font/Pretendard-SemiBold.woff) format('woff');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Pretendard';
|
||||
font-weight: 500;
|
||||
font-display: swap;
|
||||
src: local('Pretendard Medium'), url(../font/Pretendard-Medium.woff2) format('woff2'), url(../font/Pretendard-Medium.woff) format('woff');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Pretendard';
|
||||
font-weight: 400;
|
||||
font-display: swap;
|
||||
src: local('Pretendard Regular'), url(../font/Pretendard-Regular.woff2) format('woff2'), url(../font/Pretendard-Regular.woff) format('woff');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Pretendard';
|
||||
font-weight: 300;
|
||||
font-display: swap;
|
||||
src: local('Pretendard Light'), url(../font/Pretendard-Light.woff2) format('woff2'), url(../font/Pretendard-Light.woff) format('woff');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Pretendard';
|
||||
font-weight: 200;
|
||||
font-display: swap;
|
||||
src: local('Pretendard ExtraLight'), url(../font/Pretendard-ExtraLight.woff2) format('woff2'), url(../font/Pretendard-ExtraLight.woff) format('woff');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Pretendard';
|
||||
font-weight: 100;
|
||||
font-display: swap;
|
||||
src: local('Pretendard Thin'), url(../font/Pretendard-Thin.woff2) format('woff2'), url(../font/Pretendard-Thin.woff) format('woff');
|
||||
}
|
||||
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
html, body, div, span, applet, object, iframe,
|
||||
h1, h2, h3, h4, h5, h6, p, blockquote, pre, a,
|
||||
abbr, address, big, cite, code, del,
|
||||
abbr, acsronym, address, big, cite, code, del,
|
||||
dfn, em, img, ins, kbd, q, s, samp, small,
|
||||
strike, strong, sub, sup, tt, var, b, u, i,
|
||||
center, dl, dt, dd, ol, ul, li, fieldset, form,
|
||||
|
|
@ -15,12 +15,13 @@ summary, time, mark, audio, video, button, a, input {
|
|||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
box-sizing: border-box;
|
||||
font-size: 100%;
|
||||
font: inherit;
|
||||
vertical-align: baseline;
|
||||
-webkit-tap-highlight-color : rgba(0,0,0,0);
|
||||
line-height: 150%;
|
||||
box-sizing: border-box;
|
||||
word-break: keep-all;
|
||||
}
|
||||
|
||||
/* HTML5 display-role reset for older browsers */
|
||||
|
|
@ -33,7 +34,7 @@ body {
|
|||
line-height: 1
|
||||
}
|
||||
ol, ul {
|
||||
list-style: none
|
||||
list-style: none;
|
||||
}
|
||||
blockquote, q {
|
||||
quotes: none
|
||||
|
|
@ -50,7 +51,3 @@ table {
|
|||
a {
|
||||
text-decoration: none
|
||||
}
|
||||
* {
|
||||
font-family: 'Pretendard', 'sans-serif';
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
|
@ -1,136 +0,0 @@
|
|||
|
||||
/*20240220 김보라 퍼블수정*/
|
||||
html, body {height:calc(100vh - 72px);}
|
||||
.wrapper {height:100%}
|
||||
#dayKo {margin-left: 20px;}
|
||||
.terminal_wrap {margin:20px 0 10px 0; padding:15px; background:#f5f5f5}
|
||||
.terminal_wrap .terminal_top{overflow: hidden;}
|
||||
.terminal_wrap .terminal_top .terminal_btn {float:right;}
|
||||
.terminal_wrap .terminal_list_wrap {border-top:1px solid #ddd; margin: 10px 0 0 0; padding:10px}
|
||||
.terminal_list_wrap .terminal_list_in {padding: 5px 0;}
|
||||
.terminal_list_wrap .terminal_list_in .checkbox-label {line-height: normal; padding-left: 25px; display: inline;}
|
||||
.terminal_list_wrap .terminal_list_in > p {text-align: center;}
|
||||
|
||||
.table_radio_wrap {vertical-align: middle;}
|
||||
.table_radio_wrap .radio_box {display: inline-block !important; padding-right:10px !important; padding-left: 0; margin-left:0; }
|
||||
.table_radio_wrap .radio_box input[type="radio"] + label {position:static;}
|
||||
|
||||
.btn_wrap {position: relative; text-align: right; margin-top:10px;}
|
||||
.table_select_box, .table_date_box {width: 225px;}
|
||||
|
||||
.tb_sty01.tb_sty02 {border-top:1px solid #999}
|
||||
|
||||
#batchRegisterTerminalModal .modal-content {max-width: 530px !important}
|
||||
#depositDetailModal .modal-content, #withdrawDetailModal .modal-content,
|
||||
#transferDetailModal .modal-content, #transferHistoryModal .modal-content {max-width: 750px !important}
|
||||
|
||||
.btn_normal.excelbtn {
|
||||
height: 36px;
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
line-height: 36px;
|
||||
}
|
||||
.tb_wrapper.tb_wrapper_x_scroll {overflow-x: auto;}
|
||||
.tb_wrapper.tb_wrapper_terminal {max-height: 170px; overflow-y: auto; overflow-x: auto;}
|
||||
.wd_auto .tbl_bert_m > th{vertical-align: middle;}
|
||||
.wd_auto input {width:100% !important;}
|
||||
|
||||
.font_bold{font-weight: bold;}
|
||||
.tooltip_prt {position:relative;}
|
||||
.tooltip_chd {
|
||||
visibility: hidden;
|
||||
background-color: black;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
border-radius: 6px;
|
||||
padding: 5px;
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
|
||||
width: max-content;
|
||||
bottom: -5%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, 50%);
|
||||
}
|
||||
.tooltip_prt:hover .tooltip_chd {
|
||||
visibility: visible;
|
||||
}
|
||||
table colgroup > col { min-width:max-content !important}
|
||||
|
||||
table td > p, table td > a {
|
||||
display:block;
|
||||
overflow:hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.mt-05 {
|
||||
margin-top: 5px;
|
||||
}
|
||||
.mt-10 {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.tb_wrapper {padding-bottom:35px}
|
||||
/*20240226 김현종 퍼블 수정*/
|
||||
.clickable_text a:link, .clickable_text a:visited {
|
||||
color: blue;
|
||||
text-decoration: underline;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
/*20240229 김현종 퍼블 수정*/
|
||||
.title_text a {
|
||||
color: black; /* 원하는 색상으로 설정 */
|
||||
text-decoration: none; /* 밑줄 제거 */
|
||||
}
|
||||
|
||||
.title_text a:visited {
|
||||
color: black; /* 방문한 링크에 대해서도 동일한 색상 유지 */
|
||||
}
|
||||
|
||||
|
||||
/* 모바일 */
|
||||
@media (max-width: 767px){
|
||||
.mb_w50 {overflow: hidden; margin-left:-5px;}
|
||||
.mb_w50 > span {width:50%; float:left; padding:0 3px !important; box-sizing: border-box;}
|
||||
.mb_w50 > span select {width:100%}
|
||||
|
||||
table td > p, table td > a {
|
||||
overflow: inherit;
|
||||
white-space: inherit;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
.tb_w_auto {width:130px !important;}
|
||||
.table_wrap h4 { height: auto !important}
|
||||
.table_wrap2 .tb_right {position:absolute;}
|
||||
}
|
||||
|
||||
/* 테블릿 세로 */
|
||||
@media (min-width: 768px) and (max-width: 991px) {
|
||||
.menu_wrap {
|
||||
max-width:200px
|
||||
}
|
||||
|
||||
.tb_w_auto {width:100px}
|
||||
}
|
||||
|
||||
|
||||
/* 테블릿 가로 */
|
||||
|
||||
@media (min-width: 992px) and (max-width: 1199px) {
|
||||
.menu_wrap {
|
||||
max-width:200px
|
||||
}
|
||||
|
||||
.tb_w_auto {width:130px}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* 데스크탑 일반 */
|
||||
|
||||
@media (min-width: 1200px) {
|
||||
|
||||
}
|
||||
|
|
@ -1,6 +1,18 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
|
||||
<g id="chk_off" fill="#fff" stroke="#007fa8" stroke-width="1">
|
||||
<rect width="20" height="20" stroke="none"/>
|
||||
<rect x="0.5" y="0.5" width="19" height="19" fill="none"/>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18">
|
||||
<g id="chk_off" transform="translate(0 0.355)">
|
||||
<g id="사각형_142" data-name="사각형 142" transform="translate(0 -0.355)" fill="#fff" stroke="#b5bbc3" stroke-width="1">
|
||||
<rect width="18" height="18" rx="4" stroke="none"/>
|
||||
<rect x="0.5" y="0.5" width="17" height="17" rx="3.5" fill="none"/>
|
||||
</g>
|
||||
<g id="그룹_381" data-name="그룹 381">
|
||||
<g id="사각형_142-2" data-name="사각형 142" transform="translate(0 -0.355)" fill="#fff" stroke="#333" stroke-width="1">
|
||||
<rect width="18" height="18" rx="3" stroke="none"/>
|
||||
<rect x="0.5" y="0.5" width="17" height="17" rx="2.5" fill="none"/>
|
||||
</g>
|
||||
<g id="그룹_277" data-name="그룹 277" transform="translate(4.671 5.835)">
|
||||
<line id="선_31" data-name="선 31" x2="3.114" y2="3.114" transform="translate(0 2.076)" fill="none" stroke="#fff" stroke-linecap="round" stroke-width="1.8"/>
|
||||
<line id="선_32" data-name="선 32" y1="5.19" x2="5.19" transform="translate(3.114)" fill="none" stroke="#fff" stroke-linecap="round" stroke-width="1.8"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 275 B After Width: | Height: | Size: 1.2 KiB |
|
|
@ -1,6 +1,15 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
|
||||
<g id="chk_on" transform="translate(-1599 -1046)">
|
||||
<rect id="사각형_1369" data-name="사각형 1369" width="20" height="20" transform="translate(1599 1046)" fill="#007fa8"/>
|
||||
<path id="패스_412" data-name="패스 412" d="M2915.522-3564.191l-5.052-5.151,1.53-1.5,3.361,3.427,6.459-8.055,1.672,1.34Z" transform="translate(-1307.941 4625.084)" fill="#fff"/>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18">
|
||||
<g id="chk_on" transform="translate(0 0.355)">
|
||||
<g id="사각형_142" data-name="사각형 142" transform="translate(0 -0.355)" fill="#fff" stroke="#b5bbc3" stroke-width="1">
|
||||
<rect width="18" height="18" rx="4" stroke="none"/>
|
||||
<rect x="0.5" y="0.5" width="17" height="17" rx="3.5" fill="none"/>
|
||||
</g>
|
||||
<g id="그룹_381" data-name="그룹 381">
|
||||
<rect id="사각형_142-2" data-name="사각형 142" width="18" height="18" rx="3" transform="translate(0 -0.355)" fill="#0059c5"/>
|
||||
<g id="그룹_277" data-name="그룹 277" transform="translate(4.671 5.835)">
|
||||
<line id="선_31" data-name="선 31" x2="3.114" y2="3.114" transform="translate(0 2.076)" fill="none" stroke="#fff" stroke-linecap="round" stroke-width="1.8"/>
|
||||
<line id="선_32" data-name="선 32" y1="5.19" x2="5.19" transform="translate(3.114)" fill="none" stroke="#fff" stroke-linecap="round" stroke-width="1.8"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 467 B After Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 4.2 KiB |
|
|
@ -0,0 +1,7 @@
|
|||
<svg id="ico_clear" xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
|
||||
<circle id="타원_73" data-name="타원 73" cx="10" cy="10" r="10" fill="#999"/>
|
||||
<g id="그룹_2783" data-name="그룹 2783" transform="translate(6.5 6.5)">
|
||||
<line id="선_94" data-name="선 94" x2="7" y2="7" fill="none" stroke="#fff" stroke-width="2"/>
|
||||
<line id="선_95" data-name="선 95" x1="7" y2="7" fill="none" stroke="#fff" stroke-width="2"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 475 B |
|
|
@ -1,6 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="15.603" height="15.603" viewBox="0 0 15.603 15.603">
|
||||
<g id="ico_close" transform="translate(-324.162 -20.162)">
|
||||
<line id="선_19" data-name="선 19" x2="14.189" y2="14.189" transform="translate(324.869 20.869)" fill="none" stroke="#fff" stroke-width="2"/>
|
||||
<line id="선_20" data-name="선 20" x1="14.189" y2="14.189" transform="translate(324.869 20.869)" fill="none" stroke="#fff" stroke-width="2"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 471 B |
|
|
@ -1,3 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="8" viewBox="0 0 13 8">
|
||||
<path id="패스_1291" data-name="패스 1291" d="M1321.314,229.728l-5.2-5.333-1.3,1.334,6.5,6.666h0l6.5-6.666-1.3-1.334Z" transform="translate(-1314.815 -224.395)" fill="#fff"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 270 B |
|
|
@ -1,3 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="8" viewBox="0 0 13 8">
|
||||
<path id="패스_1291" data-name="패스 1291" d="M1321.314,229.728l-5.2-5.333-1.3,1.334,6.5,6.666h0l6.5-6.666-1.3-1.334Z" transform="translate(-1314.815 -224.395)" fill="#333"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 270 B |
|
|
@ -0,0 +1,16 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="17" height="15" viewBox="0 0 17 15">
|
||||
<g id="ico_max" transform="translate(-5 -8)">
|
||||
<g id="그룹_337" data-name="그룹 337" transform="translate(5 8)">
|
||||
<g id="그룹_405" data-name="그룹 405">
|
||||
<g id="사각형_210" data-name="사각형 210" fill="rgba(255,255,255,0)" stroke="#000" stroke-width="1">
|
||||
<rect width="6" height="15" stroke="none"/>
|
||||
<rect x="0.5" y="0.5" width="5" height="14" fill="none"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="그룹_404" data-name="그룹 404" transform="translate(8.697 4)">
|
||||
<path id="패스_1216" data-name="패스 1216" d="M354.9,85.187l3.42,3.5-3.42,3.5" transform="translate(-350.714 -85.187)" fill="none" stroke="#000" stroke-width="1"/>
|
||||
<path id="패스_1217" data-name="패스 1217" d="M362.362,87.11h-7.285" transform="translate(-355.078 -83.61)" fill="none" stroke="#000" stroke-width="1"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 971 B |
|
|
@ -1,7 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="12" viewBox="0 0 20 12">
|
||||
<g id="그룹_2754" data-name="그룹 2754" transform="translate(-320 -21)">
|
||||
<rect id="사각형_1995" data-name="사각형 1995" width="20" height="2" transform="translate(320 21)" fill="#333"/>
|
||||
<rect id="사각형_1996" data-name="사각형 1996" width="20" height="2" transform="translate(320 31)" fill="#333"/>
|
||||
<rect id="사각형_1997" data-name="사각형 1997" width="20" height="2" transform="translate(320 26)" fill="#333"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 546 B |
|
|
@ -0,0 +1,16 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="16.301" height="15" viewBox="0 0 16.301 15">
|
||||
<g id="ico_mini" transform="translate(-5 -8)">
|
||||
<g id="그룹_337" data-name="그룹 337" transform="translate(5 8)">
|
||||
<g id="그룹_405" data-name="그룹 405">
|
||||
<g id="사각형_210" data-name="사각형 210" fill="rgba(255,255,255,0)" stroke="#fff" stroke-width="1">
|
||||
<rect width="6" height="15" stroke="none"/>
|
||||
<rect x="0.5" y="0.5" width="5" height="14" fill="none"/>
|
||||
</g>
|
||||
</g>
|
||||
<g id="그룹_404" data-name="그룹 404" transform="translate(8.697 4)">
|
||||
<path id="패스_1216" data-name="패스 1216" d="M358.318,85.187l-3.42,3.5,3.42,3.5" transform="translate(-354.898 -85.187)" fill="none" stroke="#fff" stroke-width="1"/>
|
||||
<path id="패스_1217" data-name="패스 1217" d="M355.078,87.11h7.285" transform="translate(-354.758 -83.61)" fill="none" stroke="#fff" stroke-width="1"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 982 B |
|
|
@ -1,3 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="8" viewBox="0 0 13 8">
|
||||
<path id="패스_330" data-name="패스 330" d="M1321.314,227.062l-5.2,5.333-1.3-1.334,6.5-6.666h0l6.5,6.666-1.3,1.334Z" transform="translate(-1314.815 -224.395)" fill="#fff"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 268 B |
|
|
@ -0,0 +1,5 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="91.263" height="16" viewBox="0 0 91.263 16">
|
||||
<g id="logo_secui" transform="translate(-544 -198.999)">
|
||||
<path id="합치기_1" data-name="합치기 1" d="M87.31,16V0h3.953V16ZM5.336,15.872H0c.8-3.683,3.57-3.478,3.57-3.478h10.1a.161.161,0,0,0,.163-.157v-.489a.174.174,0,0,0-.12-.146L2.282,7.417A2.554,2.554,0,0,1,.348,4.575V2.264C.348.9,1.109.025,2.8.025H17.6s-.456,3.285-3.617,3.382H4.053a.155.155,0,0,0-.162.163v.459A.172.172,0,0,0,4,4.175L15.737,8.427a2.435,2.435,0,0,1,1.739,2.542v2.7c0,1.033-.547,2.2-2.779,2.2H5.336Zm38.917,0c-1,0-3.012-.205-3.012-2.7V2.723c0-2.51,1.941-2.7,3.012-2.7H58.679s-.567,3.367-3.572,3.334L53.345,3.4l-7.975.009a.16.16,0,0,0-.158.153v8.749a.163.163,0,0,0,.158.166H58.148v3.392Zm-20.486,0c-1.155,0-2.976-.205-2.976-2.7V2.723c0-2.512,1.931-2.7,2.976-2.7H38.284a3.779,3.779,0,0,1-3.76,3.34L32.961,3.4l-8.09.011a.157.157,0,0,0-.156.153V6.15s.027.134.151.134H37.995a3.787,3.787,0,0,1-3.57,3.28l-1.807,0H24.849a.165.165,0,0,0-.14.171v2.574a.163.163,0,0,0,.162.166H37.178v3.392Zm41.063,0c-1.764,0-2.978-.444-2.978-2.686V.007h3.913V12.413a.17.17,0,0,0,.154.171h9.365a.165.165,0,0,0,.162-.171V.007h3.911V13.181c0,2.242-1.286,2.686-2.966,2.686Z" transform="translate(544 198.999)" fill="#0059c5"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
|
|
@ -0,0 +1,5 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="91.263" height="16" viewBox="0 0 91.263 16">
|
||||
<g id="logo_secui_gray" transform="translate(-544 -198.999)">
|
||||
<path id="합치기_1" data-name="합치기 1" d="M87.31,16V0h3.953V16ZM5.336,15.872H0c.8-3.683,3.57-3.478,3.57-3.478h10.1a.161.161,0,0,0,.163-.157v-.489a.174.174,0,0,0-.12-.146L2.282,7.417A2.554,2.554,0,0,1,.348,4.575V2.264C.348.9,1.109.025,2.8.025H17.6s-.456,3.285-3.617,3.382H4.053a.155.155,0,0,0-.162.163v.459A.172.172,0,0,0,4,4.175L15.737,8.427a2.435,2.435,0,0,1,1.739,2.542v2.7c0,1.033-.547,2.2-2.779,2.2H5.336Zm38.917,0c-1,0-3.012-.205-3.012-2.7V2.723c0-2.51,1.941-2.7,3.012-2.7H58.679s-.567,3.367-3.572,3.334L53.345,3.4l-7.975.009a.16.16,0,0,0-.158.153v8.749a.163.163,0,0,0,.158.166H58.148v3.392Zm-20.486,0c-1.155,0-2.976-.205-2.976-2.7V2.723c0-2.512,1.931-2.7,2.976-2.7H38.284a3.779,3.779,0,0,1-3.76,3.34L32.961,3.4l-8.09.011a.157.157,0,0,0-.156.153V6.15s.027.134.151.134H37.995a3.787,3.787,0,0,1-3.57,3.28l-1.807,0H24.849a.165.165,0,0,0-.14.171v2.574a.163.163,0,0,0,.162.166H37.178v3.392Zm41.063,0c-1.764,0-2.978-.444-2.978-2.686V.007h3.913V12.413a.17.17,0,0,0,.154.171h9.365a.165.165,0,0,0,.162-.171V.007h3.911V13.181c0,2.242-1.286,2.686-2.966,2.686Z" transform="translate(544 198.999)" fill="#999"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
|
|
@ -1,7 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18">
|
||||
<g id="radio_off" transform="translate(0 -1)">
|
||||
<rect id="사각형_11" data-name="사각형 11" width="18" height="18" rx="9" transform="translate(0 1)" fill="#fff"/>
|
||||
<path id="사각형_11_-_윤곽선" data-name="사각형 11 - 윤곽선" d="M9,2a7,7,0,1,0,7,7A7.008,7.008,0,0,0,9,2M9,0A9,9,0,1,1,0,9,9,9,0,0,1,9,0Z" transform="translate(0 1)" fill="#007fa8"/>
|
||||
<circle id="타원_7" data-name="타원 7" cx="4" cy="4" r="4" transform="translate(5 6)" fill="#fff"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 578 B |
|
|
@ -1,7 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18">
|
||||
<g id="radio_on" transform="translate(0 -1)">
|
||||
<rect id="사각형_11" data-name="사각형 11" width="18" height="18" rx="9" transform="translate(0 1)" fill="#fff"/>
|
||||
<path id="사각형_11_-_윤곽선" data-name="사각형 11 - 윤곽선" d="M9,2a7,7,0,1,0,7,7A7.008,7.008,0,0,0,9,2M9,0A9,9,0,1,1,0,9,9,9,0,0,1,9,0Z" transform="translate(0 1)" fill="#007fa8"/>
|
||||
<circle id="타원_7" data-name="타원 7" cx="4" cy="4" r="4" transform="translate(5 6)" fill="#007fa8"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 580 B |
|
|
@ -0,0 +1,3 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="11.061" height="6.591" viewBox="0 0 11.061 6.591">
|
||||
<path id="select_arrow" d="M402.877,21.831l5,5,5-5" transform="translate(-402.347 -21.301)" fill="none" stroke="#090909" stroke-width="1.5"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 249 B |
|
|
@ -1,73 +1,88 @@
|
|||
// mobile 100vh err issue 대응
|
||||
const setVh = () => {
|
||||
document.documentElement.style.setProperty('--vh', `${window.innerHeight}px`)
|
||||
};
|
||||
window.addEventListener('resize', setVh);
|
||||
setVh();
|
||||
|
||||
document.addEventListener('touchstart', function () {
|
||||
|
||||
// header 높이 만큼 body의 padding-top으로 설정
|
||||
|
||||
window.addEventListener('load', function() {
|
||||
var headerHeight = document.querySelector('header').offsetHeight;
|
||||
document.body.style.paddingTop = headerHeight + 'px';
|
||||
});
|
||||
|
||||
// 콘텐츠영역 자동 높이 조절
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
setupAccordion();
|
||||
|
||||
// navigation 모바일 처리
|
||||
document.querySelector('#toggleLink').addEventListener('click', function () {
|
||||
toggleMenu('.menu_wrap');
|
||||
});
|
||||
// Sidebar 열고 닫기
|
||||
|
||||
document.querySelector('.closeButton').addEventListener('click', function () {
|
||||
closeMenu('.menu_wrap');
|
||||
});
|
||||
function toggleSidebar() {
|
||||
var sidebar = document.querySelector('.sidebar');
|
||||
var contentHeader = document.querySelector('.content .con_header');
|
||||
var toggleBtn = document.querySelector('.toggle-btn');
|
||||
|
||||
document.querySelectorAll('.modal .close, .modal').forEach(function (element) {
|
||||
element.addEventListener('click', function (e) {
|
||||
if (e.target !== this) return; // 모달 내부를 클릭한 경우에는 닫히지 않도록 처리
|
||||
closeModal();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
// 아코디언
|
||||
function setupAccordion() {
|
||||
document.querySelectorAll('.nav_tit').forEach(function (element) {
|
||||
element.addEventListener('click', function () {
|
||||
this.nextElementSibling.classList.toggle('active');
|
||||
document.querySelectorAll('.nav_section').forEach(function (section) {
|
||||
if (section !== this.nextElementSibling) {
|
||||
section.classList.remove('active');
|
||||
if (sidebar.style.width === '200px') {
|
||||
sidebar.style.width = '0';
|
||||
toggleBtn.classList.remove('active');
|
||||
contentHeader.classList.remove('active');
|
||||
} else {
|
||||
section.classList.toggle('active');
|
||||
sidebar.style.width = '200px';
|
||||
toggleBtn.classList.add('active');
|
||||
contentHeader.classList.add('active');
|
||||
}
|
||||
}, this);
|
||||
document.querySelectorAll('.nav_tit').forEach(function (tit) {
|
||||
if (tit !== this) {
|
||||
tit.classList.remove('active');
|
||||
}
|
||||
|
||||
|
||||
document.addEventListener("DOMContentLoaded", function() {
|
||||
|
||||
// Sidebar 아코디언 메뉴
|
||||
const accordionItems = document.querySelectorAll('.accordion-header');
|
||||
|
||||
accordionItems.forEach(item => {
|
||||
item.addEventListener('click', () => {
|
||||
item.classList.toggle('active');
|
||||
});
|
||||
});
|
||||
|
||||
// INPUT 내용 삭제
|
||||
document.querySelectorAll(".btn_clear").forEach(function(btn) {
|
||||
btn.style.display = "none";
|
||||
});
|
||||
|
||||
document.querySelectorAll(".inp input").forEach(function(input) {
|
||||
input.addEventListener("input", function() {
|
||||
var parentLabel = this.closest(".inp");
|
||||
var clearButton = parentLabel.querySelector(".btn_clear");
|
||||
|
||||
if (this.value !== "") {
|
||||
clearButton.style.display = "block";
|
||||
} else {
|
||||
tit.classList.toggle('active');
|
||||
clearButton.style.display = "none";
|
||||
}
|
||||
}, this);
|
||||
});
|
||||
});
|
||||
|
||||
document.querySelectorAll(".btn_clear").forEach(function(btn) {
|
||||
btn.addEventListener("click", function() {
|
||||
var parentLabel = this.closest(".inp");
|
||||
var input = parentLabel.querySelector("input");
|
||||
|
||||
input.value = "";
|
||||
this.style.display = "none";
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
// 입력값 변경시 호출 함수 등록
|
||||
document.querySelectorAll(".inp_states").forEach(function(inputElement) {
|
||||
inputElement.addEventListener("input", function() {
|
||||
removeErrorClass(this);
|
||||
});
|
||||
});
|
||||
|
||||
// 에러 클래스 제거 함수
|
||||
function removeErrorClass(inputElement) {
|
||||
if (inputElement.value.trim() !== "") {
|
||||
inputElement.closest(".inp").classList.remove("err");
|
||||
inputElement.nextElementSibling.style.display = "none";
|
||||
}
|
||||
}
|
||||
|
||||
// navigation 모바일 처리
|
||||
function toggleMenu(selector) {
|
||||
document.querySelector(selector).classList.toggle('active');
|
||||
}
|
||||
|
||||
function closeMenu(selector) {
|
||||
document.querySelector(selector).classList.remove('active');
|
||||
}
|
||||
|
||||
//modal 열기 닫기
|
||||
function openModal() {
|
||||
document.querySelector('.modal').style.display = 'block';
|
||||
document.body.style.overflow = 'hidden';
|
||||
}
|
||||
});
|
||||
|
||||
function closeModal() {
|
||||
document.querySelector('.modal').style.display = 'none';
|
||||
document.body.style.overflow = 'auto';
|
||||
}
|
||||
|
|
@ -6,9 +6,7 @@
|
|||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
|
||||
<title>관리자 시스템</title>
|
||||
<link rel="shortcut icon" th:href="@{/images/favicon.ico}">
|
||||
<link rel="stylesheet" th:href="@{/css/style.css}"/>
|
||||
<link rel="stylesheet" th:href="@{/css/sub.css}"/>
|
||||
|
||||
<script type="text/javascript" th:src="@{/js/motion.js}"></script>
|
||||
<script type="text/javascript" th:src="@{/js/pagehelper.js}"></script>
|
||||
|
|
@ -23,14 +21,14 @@
|
|||
<header>
|
||||
<th:block th:replace="~{layout/gnb :: gnb}"></th:block>
|
||||
</header>
|
||||
<div class="wrapper flexbox">
|
||||
<main>
|
||||
<div class="container">
|
||||
<th:block th:replace="~{layout/lnb :: lnb}"></th:block>
|
||||
<div class="container flexitem">
|
||||
<div class="content">
|
||||
<th:block layout:fragment="contents"/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<th:block layout:fragment="script">
|
||||
</th:block>
|
||||
</main>
|
||||
<th:block layout:fragment="script"></th:block>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -2,13 +2,15 @@
|
|||
<html lang="ko" xmlns:th="http://www.thymeleaf.org">
|
||||
<body>
|
||||
<th:block th:fragment="gnb">
|
||||
<h1 class="title_text">
|
||||
관리자 시스템
|
||||
<div>
|
||||
<h1>
|
||||
<img th:src="@{/images/logo_secui.svg}" alt="SECUI logo">
|
||||
<span>- Partner Inventory System</span>
|
||||
</h1>
|
||||
<p class="menu_right">
|
||||
<a href="#">비밀번호 변경</a>
|
||||
<div class="user_info">
|
||||
<a href="#none">madzoneviper</a>
|
||||
<a th:href="@{/logout}">로그아웃</a>
|
||||
</p>
|
||||
<a href="#none" class="nav_menu" id="toggleLink"><img th:src="@{/images/ico_menu.svg}" alt="메뉴 아이콘"></a>
|
||||
</div>
|
||||
</div>
|
||||
</th:block>
|
||||
</body>
|
||||
|
|
@ -3,23 +3,37 @@
|
|||
xmlns:th="http://www.thymeleaf.org">
|
||||
<body>
|
||||
<th:block th:fragment="lnb">
|
||||
<nav class="menu_wrap flexitem">
|
||||
<h2>메뉴</h2>
|
||||
<button class="closeButton"><img th:src="@{/images/ico_close.svg}"></button>
|
||||
<div th:if="${#authorization.expression('isAuthenticated()')}">
|
||||
<div th:each="menuGroup : ${menuInfos}">
|
||||
<a class="nav_tit"
|
||||
<div class="sidebar" id="sidebar" style="width: 200px;">
|
||||
<ul class="accordion" th:if="${#authorization.expression('isAuthenticated()')}">
|
||||
<li class="accordion-item" th:each="menuGroup : ${menuInfos}">
|
||||
<div class="accordion-header"
|
||||
th:classappend="${pathInfo.activeClass(menuGroup.getUri())}"
|
||||
th:text="${menuGroup.getName()}">
|
||||
</a>
|
||||
<ul class="nav_section">
|
||||
</div>
|
||||
<div class="accordion-content">
|
||||
<ul class="sub_menu">
|
||||
<li th:each="menu : ${menuGroup.getMenuChildren()}">
|
||||
<a th:with="path= ${menu.getUri()}" th:href="${path}"
|
||||
th:classappend="${pathInfo.activeClass(path)}"><span th:text="${menu.getName()}"></span></a>
|
||||
th:classappend="${pathInfo.activeClass(path)}"><span
|
||||
th:text="${menu.getName()}"></span></a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
<footer>
|
||||
<div>
|
||||
<div class="foot_head">
|
||||
<h2><img src="../images/logo_secui_gray.svg" alt="secui logo"></h2>
|
||||
<a href="#none">개인정보취급방침</a>
|
||||
</div>
|
||||
</nav>
|
||||
<p class="foot_copy">
|
||||
(03161) 서울특별시 종로구 종로 51, 3,5,6층 (종로2가, 종로타워)<br>
|
||||
<span>COPYRIGHT(C) 2018 SECUI ALL RIGHTS RESERVED</span>
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
</div>
|
||||
<button class="toggle-btn active" onclick="toggleSidebar()"><span class="blind">메뉴 열기/닫기</span></button>
|
||||
</th:block>
|
||||
</body>
|
||||
|
|
@ -4,8 +4,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
|
||||
<title>시스템</title>
|
||||
<link rel="shortcut icon" th:href="@{/images/favicon.ico}">
|
||||
<title>SECUI - Partner Inventory System</title>
|
||||
<link rel="stylesheet" th:href="@{/css/style.css}"/>
|
||||
|
||||
<script type="text/javascript" th:src="@{/js/pagehelper.js}"></script>
|
||||
|
|
@ -15,30 +14,92 @@
|
|||
|
||||
<th:block th:replace="~{fragment/csrf/csrf :: applyCsrf}"></th:block>
|
||||
</head>
|
||||
<body>
|
||||
<div class="login_wrap">
|
||||
<body class="login">
|
||||
<header>
|
||||
<div>
|
||||
<h1>
|
||||
<img th:src="@{/images/logo_secui.svg}" alt="SECUI logo">
|
||||
<span>- Partner Inventory System</span>
|
||||
</h1>
|
||||
<div class="language">
|
||||
language :
|
||||
<span>
|
||||
<select>
|
||||
<option>한국어</option>
|
||||
<option>English</option>
|
||||
</select>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
<main>
|
||||
<div class="login_wrapper">
|
||||
<h2>LOGIN</h2>
|
||||
<div class="login_box">
|
||||
<h1>시스템</h1>
|
||||
<p class="login_subtit">환영합니다. 시스템에 로그인하세요.</p>
|
||||
<form th:action="@{/login}" method="post" id="loginForm">
|
||||
<div class="check_form">
|
||||
<p class="check_box">
|
||||
<input type="checkbox" id="c2" name="c" class="checkbox">
|
||||
<label for="c2" class="gtr small"></label>아이디 저장
|
||||
</p>
|
||||
</div>
|
||||
<div class="input_form">
|
||||
<p>
|
||||
<label>아이디</label>
|
||||
<input type="text" name="loginId" placeholder="이름 입력">
|
||||
<label for="username" class="inp clear err"> <!-- 에러메세지 뿌릴때는 .err 클래스 추가 -->
|
||||
<input type="text" id="username" name="username" class="inp_states" placeholder="사용자 이메일 입력"
|
||||
autocomplete="off">
|
||||
<span class="focus-bg"></span>
|
||||
<span class="err_msg">에러메세지가 노출됩니다.</span>
|
||||
<button class="btn_clear"><span class="blind">삭제</span></button>
|
||||
</label>
|
||||
</p>
|
||||
<p>
|
||||
<label>비밀번호</label>
|
||||
<input type="password" name="password" placeholder="암호 입력">
|
||||
<label for="inp2" class="inp clear">
|
||||
<input type="password" id="inp2" name="password" class="inp_states" placeholder="비밀번호 입력"
|
||||
autocomplete="off">
|
||||
<span class="focus-bg"></span>
|
||||
<span class="err_msg">에러메세지가 노출됩니다.</span>
|
||||
<button class="btn_clear"><span class="blind">삭제</span></button>
|
||||
</label>
|
||||
</p>
|
||||
</form>
|
||||
<button type="button" id="loginButton" class="btn_confirm btn_login">로그인</button>
|
||||
<button type="button" id="loginJson" class="btn_confirm btn_login">로그인(JSON)</button>
|
||||
<button type="button" class="btn_blue" id="btnLogin">로그인</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="out_link">
|
||||
<a href="#none">신규회원가입</a>
|
||||
<a href="#none">아이디/비밀번호 찾기</a>
|
||||
</div>
|
||||
<ul class="sub_discription">
|
||||
<li><em>·</em> SECUI는 Partner Inventory System입니다.</li>
|
||||
<li><em>·</em> 처음 방문하시는 사용자는 신규회원가입 후 사용해 주세요.</li>
|
||||
<li><em>·</em> 본 시스템은 Internet Explorer를 지원하지 않습니다.</li>
|
||||
</ul>
|
||||
</div>
|
||||
</main>
|
||||
<footer>
|
||||
<div>
|
||||
<div class="foot_head">
|
||||
<h2><img src="../images/logo_secui_gray.svg" alt="secui logo"></h2>
|
||||
<a href="#none">개인정보취급방침</a>
|
||||
</div>
|
||||
<p class="foot_copy">
|
||||
(03161) 서울특별시 종로구 종로 51, 3,5,6층 (종로2가, 종로타워)<br>
|
||||
<span>COPYRIGHT(C) 2018 SECUI ALL RIGHTS RESERVED</span>
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
<body>
|
||||
<script type="text/javascript" th:inline="javascript">
|
||||
document.getElementById('loginJson').addEventListener(('click'), function () {
|
||||
const errorMessage = /*[[${errorMessage}]]*/ '';
|
||||
|
||||
if (errorMessage) {
|
||||
PageHelper.showErrorModal(errorMessage);
|
||||
}
|
||||
|
||||
// 로그인
|
||||
document.getElementById('btnLogin').addEventListener(('click'), function () {
|
||||
Reqhelper.reqPostJson('/login', {
|
||||
username: document.querySelector('input[name="loginId"]').value,
|
||||
username: document.querySelector('input[name="username"]').value,
|
||||
password: document.querySelector('input[name="password"]').value
|
||||
}, function (res) {
|
||||
if (res.resultCode === '0000') {
|
||||
|
|
@ -48,37 +109,6 @@
|
|||
}
|
||||
});
|
||||
});
|
||||
|
||||
const errorMessage = /*[[${errorMessage}]]*/ '';
|
||||
|
||||
if (errorMessage) {
|
||||
PageHelper.showErrorModal(errorMessage);
|
||||
}
|
||||
|
||||
document.querySelector('#loginButton').addEventListener('click', function () {
|
||||
|
||||
if (!validate()) {
|
||||
return;
|
||||
}
|
||||
document.querySelector('#loginForm').submit();
|
||||
|
||||
function validate() {
|
||||
const loginId = document.querySelector('input[name="loginId"]').value;
|
||||
const password = document.querySelector('input[name="password"]').value;
|
||||
|
||||
if (!loginId) {
|
||||
PageHelper.showErrorModal('아이디를 입력해주세요.');
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!password) {
|
||||
PageHelper.showErrorModal('비밀번호를 입력해주세요.');
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
|
|
@ -4,8 +4,7 @@
|
|||
layout:decorate="~{main/admin/management/root.html}">
|
||||
<body>
|
||||
<th:block layout:fragment="innerContents">
|
||||
<div class="table_wrap mt-20">
|
||||
<h4>관리자 등록</h4>
|
||||
<h2>관리자 등록</h2>
|
||||
<div class="tb_wrapper">
|
||||
<label for="iptCreateLoginId">아이디: </label><input type="text" id="iptCreateLoginId" name="loginId">
|
||||
<label for="iptCreatePassword">비밀번호: </label><input type="password" id="iptCreatePassword" name="password">
|
||||
|
|
@ -40,7 +39,6 @@
|
|||
<label for="iptUpdateLoginId">아이디: </label><input type="text" id="iptDeleteLoginId" name="loginId" readonly>
|
||||
<button type="button" id="btnDelete" class="btn_confirm" data-bs-dismiss="modal">삭제</button>
|
||||
</div>
|
||||
</div>
|
||||
</th:block>
|
||||
|
||||
<th:block layout:fragment="innerScript">
|
||||
|
|
|
|||
|
|
@ -5,6 +5,12 @@
|
|||
layout:decorate="~{layout/common.html}">
|
||||
<body>
|
||||
<th:block layout:fragment="contents">
|
||||
<div class="con_header active">
|
||||
<div class="breadcrum">
|
||||
<a href="#none">메인화면</a>
|
||||
<a href="#none">관리자 관리</a>
|
||||
</div>
|
||||
</div>
|
||||
<th:block layout:fragment="innerContents"></th:block>
|
||||
</th:block>
|
||||
</body>
|
||||
|
|
|
|||