This commit is contained in:
shim
2023-04-17 11:06:08 +09:00
parent d0b393aa97
commit 76264e09ad
4686 changed files with 552713 additions and 0 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,34 @@
var _isFullSize = false;
var _isCodeEdit = false;
function editFullSize(id,obj)
{
if (_isCodeEdit)
{
_codefullscreen();
}
else {
if (_isFullSize == false)
{
obj.title = '원래대로';
$('#'+id).addClass('rb-fullsize');
_isFullSize = true;
}
else {
obj.title = '전체화면';
$('#'+id).removeClass('rb-fullsize');
_isFullSize = false;
}
}
}
function goHref_parent(url) {
parent.location.href = url;
}
$(function () {
$('[data-toggle="tooltip"]').tooltip()
$('[data-tooltip="tooltip"]').tooltip({
html: true
})
$('.js-tooltip').tooltip()
})

View File

@@ -0,0 +1,283 @@
<header class="navbar navbar-expand fixed-top navbar-dark bg-dark" role="navigation" data-scroll-header>
<?php if($g['device'] && $module == 'dashboard'):?>
<a class="navbar-brand" href="<?php echo $g['s']?>/?r=<?php echo $r?>&amp;m=admin&amp;module=dashboard&amp;front=mobile.shortcut" style="margin-left:0;">
<i class="kf kf-bi-01 fa-lg" style="color:#000;"></i>
</a>
<?php else:?>
<a class="navbar-brand" href="<?php echo $g['s']?>/?r=<?php echo $r?>&amp;m=admin&amp;module=dashboard<?php if($g['mobile']&&$_SESSION['pcmode']!='Y'):?>&amp;front=mobile.shortcut<?php endif?>">
<span class="badge badge-light"><?php echo $MD['name']?></span>
</a>
<?php if($module == 'dashboard' && ($front == 'main' || $front == 'mobile.dashboard')):?>
<i class="fa fa-cog rb-modal-dashboard js-tooltip d-none" title="대시보드 꾸미기" data-toggle="modal" data-target="#modal_window"></i>
<?php endif?>
<?php endif?>
<div class="navbar-collapse collapse">
<?php if($g['device']&&$module=='dashboard'):?>
<ul class="navbar-nav mr-auto">
<li<?php if($front=='mobile.shortcut'):?> class="active"<?php endif?>><a href="<?php echo $g['s']?>/?r=<?php echo $r?>&amp;m=admin&amp;module=dashboard&amp;front=mobile.shortcut">바로가기</a></li>
<li<?php if($front=='mobile.dashboard'):?> class="active"<?php endif?>><a href="<?php echo $g['s']?>/?r=<?php echo $r?>&amp;m=admin&amp;module=dashboard&amp;front=mobile.dashboard">대시보드</a></li>
<li<?php if($front=='mobile.site'):?> class="active"<?php endif?>><a href="<?php echo $g['s']?>/?r=<?php echo $r?>&amp;m=admin&amp;module=dashboard&amp;front=mobile.site">사이트</a></li>
</ul>
<?php else:?>
<ul class="navbar-nav mr-auto" id="rb-admin-ul-tabs">
<?php $_front =explode('_' , $front); ?>
<?php $_menuCount=$d['amenu']?count($d['amenu']):0;if(!$nosite&&$_menuCount):?>
<?php if($_i<=10):?>
<?php $_i=1;foreach($d['amenu'] as $_k => $_v):?>
<li id="rb-more-tab-<?php echo $_i?>" class="nav-item">
<a class="nav-link<?php if($_front[0] == $_k):?> active<?php endif?>" href="<?php echo $g['s']?>/?r=<?php echo $r?>&amp;m=<?php echo $m?>&amp;module=<?php echo $module?>&amp;front=<?php echo $_k ?>">
<?php echo $_v ?>
</a>
</li>
<?php $_i++;endforeach?>
<?php endif?>
<?php if($_i>10):?>
<li class="nav-item dropdown rb-more-tabs d-block d-sm-none">
<a class="nav-link dropdown-toggle" href="#." data-toggle="dropdown">더보기</a>
<div class="dropdown-menu dropdown-menu-right">
<?php $_i=1;foreach($d['amenu'] as $_k => $_v):?>
<a id="rb-more-tabs-<?php echo $_i?>" class="dropdown-item<?php if($front == $_k):?> active<?php endif?>" href="<?php echo $g['s']?>/?r=<?php echo $r?>&amp;m=<?php echo $m?>&amp;module=<?php echo $module?>&amp;front=<?php echo $_k?>">
<?php echo $_v?>
</a>
<?php $_i++;endforeach?>
</div>
</li>
<?php endif?>
<?php endif?>
</ul>
<?php endif?>
<ul class="navbar-nav my-0">
<?php if($module!='dashboard'):?>
<li class="nav-item">
<a class="nav-link<?php if($front == '_info'):?> active<?php endif?>" href="<?php echo $g['s']?>/?r=<?php echo $r?>&amp;m=<?php echo $m?>&amp;module=<?php echo $module?>&amp;front=_info">
<i class="fa fa-question-circle fa-lg"></i> 안내
</a>
</li>
<?php endif?>
<?php $exists_bookmark=getDbRows($table['s_admpage'],'memberuid='.$my['uid']." and url='".$g['s'].'/?r='.$r.'&m='.$m.'&module='.$module.'&front='.$front."'")?>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#">
<i id="_bookmark_star_" class="fa fa-lg fa-star<?php if($exists_bookmark):?> rb-star-fill text-primary<?php else:?>-o<?php endif?>"></i>
</a>
<div class="dropdown-menu dropdown-menu-right p-0">
<div class="card border-dark rounded-0 mb-0" style="width: 300px">
<div class="card-header d-flex justify-content-between align-items-center py-1 px-2 bg-white border-secondary">
북마크
<div>
<div id="_bookmark_notyet_" class="btn-group btn-group-sm dropdown<?php if($exists_bookmark):?> d-none<?php endif?>">
<button type="button" class="btn btn-outline-secondary rb-bookmark-add">북마크에 추가</button>
<button type="button" class="btn btn-outline-secondary dropdown-toggle dropdown-body" data-toggle="dropdown">
<span class="caret"></span>
<span class="sr-only">Toggle Dropdown</span>
</button>
<div id="rb-bookmark-dropdown1" class="dropdown-menu">
<a href="#." class="dropdown-item rb-bookmark-add">북마크에 추가</a>
<div class="dropdown-divider"></div>
<a href="#." data-toggle="modal" data-target="#modal_window" class="dropdown-item rb-modal-bookmark">북마크 관리</a>
</div>
</div>
<div id="_bookmark_already_" class="btn-group btn-group-sm <?php if(!$exists_bookmark):?> d-none<?php endif?>">
<button type="button" class="btn btn-light disabled">추가됨</button>
<button type="button" class="btn btn-light dropdown-toggle dropdown-toggle-split" data-toggle="dropdown">
<span class="sr-only">Toggle Dropdown</span>
</button>
<div id="rb-bookmark-dropdown2" class="dropdown-menu dropdown-menu-right">
<a class="dropdown-item b-bookmark-del" href="#">북마크에서 삭제</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item rb-modal-bookmark" href="#" data-toggle="modal" data-target="#modal_window">북마크 관리</a>
</div>
</div>
</div>
</div>
<div id="_add_bookmark_" class="list-group list-group-flush rb-scrollbar">
<?php $ADMPAGE = getDbArray($table['s_admpage'],'memberuid='.$my['uid'],'*','gid','asc',0,1)?>
<?php while($R=db_fetch_array($ADMPAGE)):?>
<a href="<?php echo $R['url']?>" class="list-group-item list-group-item-action d-flex justify-content-between align-items-center" id="_now_bookmark_<?php echo $R['uid']?>">
<?php echo $R['name']?>
<i class="fa fa-fw fa-file-text-o"></i>
</a>
<?php endwhile?>
<?php if(!db_num_rows($ADMPAGE)):?><a class="list-group-item"><i class="fa fa-fw fa-file-text-o"></i>등록된 북마크가 없습니다</a><?php endif?>
</div>
<div class="card-footer p-0 border-top-0">
<a href="#." data-toggle="modal" data-target="#modal_window" class="rb-modal-bookmark btn btn-link btn-block">북마크 관리</a>
</div>
</div>
</div>
</li>
<?php if ($my['super'] && !$my['adm_site']): ?>
<?php
$SITES = getDbArray($table['s_site'],'','*','gid','asc',0,$p);
$SITEN = db_num_rows($SITES);
?>
<?php if($SITEN>1 && ($module!='admin' && $module!='project')):?>
<li class="nav-item d-none" data-role="siteSelector">
<div class="input-group input-group-sm mt-1 ml-2 border border-primary">
<div class="input-group-append" style="margin-left: 0;">
<a class="input-group-text muted-link" href="<?php echo $g['s']?>/?r=<?php echo $SD['id']?>&amp;m=<?php echo $m?>&amp;pickmodule=site&amp;panel=Y" target="_parent" data-toggle="tooltip" title="사이트관리">
<i class="<?php echo $SD['icon']?> fa-lg" aria-hidden="true"></i>
</a>
</div>
<select class="form-control custom-select" onchange="goHref_parent('<?php echo $g['s']?>/?m=<?php echo $m?>&pickmodule=<?php echo $module?>&panel=Y&pickfront=<?php echo $front?>&r='+this.value);" style="margin-left: -1px;min-width:100px">
<?php while($S = db_fetch_array($SITES)):?>
<option value="<?php echo $S['id']?>"<?php if($r==$S['id']):?> selected<?php endif?>><?php echo $S['label']?></option>
<?php endwhile?>
</select>
</div>
</li>
<?php endif?>
<?php else: ?>
<?php
$SITES = getArrayString($my['adm_site']);
$SITEN = $SITES[count];
?>
<?php if($SITEN>1 && ($module!='admin' && $module!='project')):?>
<li class="nav-item d-none" data-role="siteSelector">
<div class="input-group input-group-sm mt-1 ml-2 border border-primary">
<div class="input-group-append" style="margin-left: 0;">
<a class="input-group-text muted-link" href="<?php echo $g['s']?>/?r=<?php echo $_SD['id']?>&amp;m=<?php echo $m?>&amp;pickmodule=site&amp;panel=Y" target="_parent">
<i class="<?php echo $SD['icon']?> fa-lg" aria-hidden="true"></i>
</a>
</div>
<select class="form-control custom-select" onchange="goHref_parent('<?php echo $g['s']?>/?m=<?php echo $m?>&pickmodule=<?php echo $module?>&panel=Y&pickfront=<?php echo $front?>&r='+this.value);" style="margin-left: -1px;min-width:100px">
<?php $_i=0;foreach($SITES['data'] as $val):?>
<?php $_SD = getUidData($table['s_site'],$val); ?>
<option value="<?php echo $_SD['id']?>"<?php if($r==$_SD['id']):?> selected<?php endif?>><?php echo $_SD['label']?></option>
<?php $_i++;endforeach?>
</select>
</div>
</li>
<?php endif?>
<?php endif; ?>
</ul>
</div><!-- /.navbar-collapse -->
</header>
<main id="rb-admin-page-content">
<?php include $g['adm_module'] ?>
</main>
<script>
$(document).ready(function()
{
document.body.onload = tabSetting;
document.body.onresize = tabSetting;
<?php if($g['device']):?>
$('#bs-example-navbar-collapse-1').on('show.bs.collapse', function () {
$("#_navbar_header_").addClass('rb-header-bottom-line');
});
$('#bs-example-navbar-collapse-1').on('hide.bs.collapse', function () {
$("#_navbar_header_").removeClass('rb-header-bottom-line');
});
getId('_add_bookmark_').style.maxHeight = '205px';
<?php endif?>
$('#bs-example-navbar-collapse-1 [data-toggle=dropdown]').on('click', function(event) {
event.preventDefault();
event.stopPropagation();
$(this).parent().siblings().removeClass('open');
$(this).parent().toggleClass('open');
});
$(".rb-help-btn").click(function(){
$(this).button('toggle');
});
$('.rb-modal-bookmark').on('click',function() {
modalSetting('modal_window','<?php echo getModalLink('&amp;m=admin&amp;module=admin&amp;front=modal.bookmark')?>');
});
$('.rb-bookmark-add').on('click',function() {
frames._action_frame_admin.location.href = '<?php echo $g['s']?>/?r=<?php echo $r?>&m=<?php echo $m?>&a=bookmark&_addmodule=<?php echo $module?>&_addfront=<?php echo $front?>';
});
$('.rb-bookmark-del').on('click',function() {
frames._action_frame_admin.location.href = '<?php echo $g['s']?>/?r=<?php echo $r?>&m=<?php echo $m?>&a=bookmark_delete&deltype=hidden&_addmodule=<?php echo $module?>&_addfront=<?php echo $front?>';
});
});
function tabSetting()
{
<?php if($g['device']):?>
$('#bs-example-navbar-collapse-1').removeClass('navbar-collapse');
if(document.body.scrollWidth > 750) $('#bs-example-navbar-collapse-1').addClass('navbar-collapse');
else $('#bs-example-navbar-collapse-1').removeClass('navbar-collapse');
<?php endif?>
var i;
var bodyWidth = document.body.scrollWidth;
var allTabnum = <?php echo (int)$_menuCount?>;
var showTabnum = allTabnum;
var showTabMore = false;
if (allTabnum > 3)
{
if (bodyWidth >= 0 && bodyWidth < 360)
{
showTabnum = 2;
showTabMore = true;
}
else if (bodyWidth >= 360 && bodyWidth < 523)
{
showTabnum = 3;
showTabMore = true;
}
else if (bodyWidth >= 523 && bodyWidth < 640)
{
showTabnum = 4;
showTabMore = true;
}
else if (bodyWidth >= 640 && bodyWidth < 750)
{
showTabnum = 5;
showTabMore = true;
}
else if (bodyWidth >= 750 && bodyWidth < 1100)
{
showTabnum = 8;
showTabMore = true;
}
else if (bodyWidth >= 1100 && bodyWidth < 1400)
{
showTabnum = 10;
showTabMore = false;
}
else if (bodyWidth >= 1400)
{
showTabnum = allTabnum;
showTabMore = false;
}
}
for (i = 1; i <= allTabnum; i++)
{
$('#rb-more-tab-'+i).removeClass('d-none');
$('#rb-more-tabs-'+i).removeClass('d-none');
}
for (i = showTabnum+1; i <= allTabnum; i++) $('#rb-more-tab-'+i).addClass('d-none');
for (i = 0; i <= showTabnum; i++) $('#rb-more-tabs-'+i).addClass('d-none');
if (showTabMore == true) $('.rb-more-tabs').removeClass('d-none');
else $('.rb-more-tabs').addClass('d-none');
}
// 북마크 dropdown 내부클릭시 dropdown 유지
$('.dropdown-body').on('click', function(e) {
e.stopPropagation();
});
</script>

View File

@@ -0,0 +1,196 @@
@charset "utf-8";
@import url(https://fonts.googleapis.com/earlyaccess/notosanskr.css);
html,
body {
height: 100%;
}
body {
background-color: #343a40 !important;
font-family: 'Noto Sans KR', "돋움", dotum, '나눔고딕', 'Nanum Gothic', sans-serif, FontAwesome, kimsq !important;
color: #ccc
}
a {
color: #ccc
}
.rb-root {
display: table;
height: 100%;
width: 100%;
padding: 0;
}
#rb-login {
display: table-cell;
text-align: left;
margin: 0 auto;
padding: 10% 0 100px;
}
#rb-login .card {
margin: 0 auto 15px;
color: #ccc;
background-color: rgb(39, 44, 50);
border: 1px solid #222;
border-radius: 3px;
color: #999;
box-shadow: 0px 2px 2px #222;
}
#rb-login .card-header h1 {
margin-bottom: 0;
font-size: 18px
}
#rb-login .card-header a {
color: #ccc
}
#rb-login .card-header a:hover {
text-decoration: none
}
#rb-login .card .form-group label {
font-weight: normal;
display: block;
margin-bottom: 7px
}
#rb-login .form-login .label-link {
float: right;
font-size: 12px;
line-height: 24px;
}
#rb-login .panel .form-control.input-lg {
border-radius: 2px;
}
#rb-login .card-footer ul {
margin-bottom: 0
}
#rb-login .card-foote a {
font-size: 90%;
}
.form-control,
.form-control[readonly] {
background-color: rgb(31, 34, 39);
color: rgb(171, 175, 181);
border-color: rgb(27, 30, 36);
border-radius: 0
}
.btn {
border-radius: 0
}
/*반응형 설정*/
@media (min-width: 481px) {
#rb-login .card {
width: 350px;
}
}
@media (max-width: 480px) {
body {
/*background-color: #fff !important*/
}
#rb-login {
padding: 0;
}
#rb-login .card {
box-shadow: none;
border: none;
border-radius: none;
background-color: inherit;
}
#rb-login .card-footer {
/*background-color: transparent;*/
}
#rb-login h1 {
font-size: 20px
}
#rb-login .btn.btn-primary {
width: 100%;
padding: 10px 16px;
font-size: 18px;
line-height: 1.33;
border-radius: 6px;
}
}
#modal-pwReset {
font-size: 14px
}
#modal-pwReset .modal-header,
#modal-pwReset .card-header {
background-color: #0069d9;
color: #fff
}
#modal-pwReset .modal-content {
border-radius: .45rem;
}
#modal-pwReset .nav-tabs .nav-link:focus,
#modal-pwReset .nav-tabs .nav-link:hover {
border-color: #0069d9 #0069d9 #fff;
}
#modal-pwReset .form-control,
#modal-pwReset .form-control[readonly] {
background-color: #fff;
border: 1px solid #ced4da;
border-radius: 0;
color: #495057;
}
.btn-light {
color: #24292e;
user-select: none;
background-color: #eff3f6;
background-image: linear-gradient(-180deg, #fafbfc 0%, #eff3f6 90%);
background-repeat: repeat-x;
background-position: -1px -1px;
background-size: 110% 110%;
border: 1px solid rgba(27, 31, 35, 0.2);
white-space: nowrap;
vertical-align: middle;
cursor: pointer;
}
.btn-light:hover,
.btn-light.hover {
background-color: #e6ebf1;
background-image: linear-gradient(-180deg, #f0f3f6 0%, #e6ebf1 90%);
background-position: -.5em;
border-color: rgba(27, 31, 35, 0.35);
}
.btn-light:not(:disabled):not(.disabled).active,
.btn-light:not(:disabled):not(.disabled):active,
.show>.btn-light.dropdown-toggle {
background-color: #e9ecef;
background-image: none;
border-color: rgba(27, 31, 35, 0.35);
box-shadow: inset 0 0.15em 0.3em rgba(27, 31, 35, 0.15);
}
.btn-light:not(:disabled):not(.disabled).active:focus,
.btn-light:not(:disabled):not(.disabled):active:focus,
.show>.btn-light.dropdown-toggle:focus {
box-shadow: 0 0 0 0.2em rgba(3, 102, 214, 0.3);
}

View File

@@ -0,0 +1,535 @@
<div class="rb-root">
<div id="rb-login">
<div class="card">
<div class="card-header">
<h1>
<a href="<?php echo $g['r']?>/">
<i class="kf-bi-01"></i>
</a>
<small>관리자 모드</small>
</h1>
</div>
<div class="card-body">
<form class="loginForm" role="form" name="loginform" id="admin-loginform" action="<?php echo $g['s']?>/" method="post">
<input type="hidden" name="r" value="<?php echo $r?>">
<input type="hidden" name="a" value="login">
<input type="hidden" name="referer" value="<?php echo $referer ? $referer : $_SERVER['HTTP_REFERER']?>">
<input type="hidden" name="usertype" value="admin">
<input type="hidden" name="pickgoods" value="<?php echo $pickgoods ?>">
<input type="hidden" name="form" value="">
<div class="form-group">
<label for="id" class="control-label">아이디 또는 이메일</label>
<input type="text" name="id" class="form-control input-lg" id="id" placeholder="" value="" autofocus required autocapitalize="off" autocorrect="off" tabindex="1">
<div class="invalid-feedback mt-2" data-role="idErrorBlock"></div>
</div>
<div class="form-group">
<label for="pw" class="control-label">비밀번호</label>
<input type="password" name="pw" class="form-control input-lg" id="pw" placeholder="" value="" required tabindex="2">
<div class="invalid-feedback mt-2" data-role="passwordErrorBlock"></div>
</div>
<div class="custom-control custom-checkbox mb-2">
<input type="checkbox" class="custom-control-input" id="login_cookie" name="login_cookie" value="checked" data-toggle="collapse" data-target="#collapsealert">
<label class="custom-control-label" for="login_cookie">로그인 상태 유지</label>
</div>
<div class="collapse" id="collapsealert" style="">
<div class="alert alert-danger f12 mb-3">
개인정보 보호를 위해, 개인 PC에서만 사용해 주세요.
</div>
</div>
<button class="btn btn-lg btn-primary btn-block" type="submit" id="rb-submit" data-role="submit" tabindex="3">
<span class="not-loading">로그인</span>
<span class="is-loading"><i class="fa fa-spinner fa-lg fa-spin fa-fw"></i> 로그인중 ...</span>
</button>
<p class="mt-3">
<a href="#modal-pwReset" data-toggle="modal">
<small>비밀번호를 잊으셨나요?</small>
</a>
</p>
</form>
</div>
</div>
</div>
</div>
<!-- 모달 : modal-pwReset : 비밀번호 초기화 -->
<div class="modal fade" id="modal-pwReset" tabindex="-1" role="dialog">
<div class="modal-dialog" role="document" style="max-width: 400px;">
<div class="modal-content">
<div class="modal-header border-bottom-0 d-flex flex-column" style="">
<h5 class="modal-title mx-auto h6">관리자 비밀번호 재설정</h5>
</div>
<?php if ($d['member']['join_byEmail'] || $d['member']['join_byPhone']): ?>
<div class="card border-0" style="margin-top: -15px" data-role="confirm_code">
<div class="card-header">
<ul class="nav nav-tabs nav-justified card-header-tabs f14">
<?php if ($d['member']['join_byEmail']): ?>
<li class="nav-item">
<a class="nav-link<?php echo $d['member']['join_byEmail']?' active':'' ?>" id="tab-email" data-toggle="tab" href="#pane-pw-email">
이메일로 받기
</a>
</li>
<?php endif; ?>
<?php if ($d['member']['join_byPhone']): ?>
<li class="nav-item">
<a class="nav-link<?php echo ($d['member']['join_byPhone'] && !$d['member']['join_byEmail'])?' active':'' ?>" id="tab-phone" data-toggle="tab" href="#pane-pw-phone">
휴대폰으로 받기
</a>
</li>
<?php endif; ?>
</ul>
</div>
<div class="card-body ">
<div class="tab-content text-center">
<div class="tab-pane <?php echo $d['member']['join_byEmail']?' show active':'' ?>" id="pane-pw-email" role="tabpanel" aria-labelledby="tab-email">
<div class="input-group input-group-lg mt-3">
<input type="email" class="form-control" name="email" placeholder="이메일 주소" tabindex="1" autocorrect="off" autocapitalize="off" required value="">
<div class="invalid-tooltip" data-role="emailErrorBlock"></div>
<div class="input-group-append">
<button class="btn btn-light" type="button" data-act="send_code" data-type="email" data-device="desktop">
<span class="not-loading">다음</span>
<span class="is-loading"><i class="fa fa-spinner fa-spin"></i></span>
</button>
</div>
</div>
<div class="d-none mt-3" data-role="verify_email_area">
<small class="form-text text-success my-3">
인증번호를 발송했습니다.(유효시간 <?php echo $d['member']['join_keyexpire'] ?>분)
<span data-role="countdown" data-email-countdown="">[00:00]</span><br>
위 메일로 발송된 6자리 인증번호를 입력해 주세요.<br>
인증번호가 오지 않으면 입력하신 정보가 정확한지 확인하여 주세요.
</small>
<div class="input-group input-group-lg">
<input type="number" class="form-control" name="confirm_email_code" data-role="confirm_email_code" placeholder="인증번호 입력">
<div class="invalid-tooltip" data-role="emailCodeBlock"></div>
<div class="input-group-append">
<button class="btn btn-outline-primary" type="button" data-act="confirm_code" data-type="email" data-device="desktop">
<span class="not-loading">확인</span>
<span class="is-loading"><i class="fa fa-spinner fa-spin"></i></span>
</button>
</div>
</div>
</div><!-- /.d-none -->
</div><!-- /.tab-pane -->
<div class="tab-pane <?php echo ($d['member']['join_byPhone'] && !$d['member']['join_byEmail'])?' show active':'' ?>" id="pane-pw-phone" role="tabpanel" aria-labelledby="tab-phone">
<div class="input-group input-group-lg mt-3">
<input type="tel" class="form-control" name="phone" placeholder="휴대폰 번호" tabindex="1" autocorrect="off" autocapitalize="off" required>
<div class="invalid-tooltip" data-role="phoneErrorBlock"></div>
<div class="input-group-append">
<button class="btn btn-light" type="button" data-act="send_code" data-type="phone" data-device="desktop">
<span class="not-loading">다음</span>
<span class="is-loading"><i class="fa fa-spinner fa-spin"></i></span>
</button>
</div>
</div>
<div class="d-none mt-3" data-role="verify_phone_area">
<small class="form-text text-success my-3">
인증번호를 발송했습니다.(유효시간 <?php echo $d['member']['join_keyexpire'] ?>분)
<span data-role="countdown" data-phone-countdown="">[00:00]</span><br>
위 휴대폰으로 발송된 6자리 인증번호를 입력해 주세요.<br>
인증번호가 오지 않으면 입력하신 정보가 정확한지 확인하여 주세요.
</small>
<div class="input-group input-group-lg">
<input type="number" class="form-control" name="confirm_phone_code" data-role="confirm_phone_code" placeholder="인증번호 입력">
<div class="invalid-tooltip" data-role="phoneCodeBlock">인증번호를 입력해주세요.</div>
<div class="input-group-append">
<button class="btn btn-outline-primary" type="button" data-act="confirm_code" data-type="phone" data-device="desktop">
<span class="not-loading">확인</span>
<span class="is-loading"><i class="fa fa-spinner fa-spin"></i></span>
</button>
</div>
</div>
</div><!-- /.d-none -->
</div><!-- /.tab-pane -->
</div><!-- /.tab-content -->
<ul class="list-unstyled f13 text-muted mt-4 mb-1">
<li>본인인증을 통해 비밀번호를 재설정 하실 수 있습니다.</li>
<li>인증번호를 받을 곳을 선택해 주세요.</li>
<li>비밀번호는 암호화 저장되어 분실 시 찾아드릴 수 없습니다.</li>
</ul>
</div><!-- /.card-body tab-content-->
</div><!-- /.card -->
<?php endif; ?>
<div class="card d-none" data-role="change_pw">
<div class="card-body">
<form id="pwResetForm" role="form" action="<?php echo $g['s']?>/" method="post" autocomplete="off">
<input type="hidden" name="r" value="<?php echo $r?>">
<input type="hidden" name="m" value="member">
<input type="hidden" name="a" value="pw_reset">
<input type="hidden" name="act" value="change_pw">
<input type="hidden" name="device" value="desktop">
<input type="hidden" name="code" value="">
<input type="hidden" name="target" value="">
<input type="hidden" name="type" value="">
<input type="hidden" name="check_pw1" value="0">
<input type="hidden" name="check_pw2" value="0">
<input type="hidden" name="usertype" value="admin">
<div class="form-group position-relative">
<label>비밀번호(6~16자리)</label>
<input type="password" class="form-control form-control-lg" name="pw1" placeholder="" autocorrect="off" autocapitalize="off" data-role="pw1">
<div class="invalid-tooltip" data-role="pw1CodeBlock" id="pw1-feedback"></div>
</div>
<div class="form-group position-relative">
<label>비밀번호 재입력</label>
<input type="password" class="form-control form-control-lg" name="pw2" placeholder="" autocorrect="off" autocapitalize="off" data-role="pw2">
<div class="invalid-tooltip" data-role="pw2CodeBlock" id="pw2-feedback"></div>
</div>
<div class="mt-4 mb-3">
<button type="submit" class="btn btn-outline-primary btn-lg btn-block" data-role="submit">
<span class="not-loading">변경하기</span>
<span class="is-loading"><i class="fa fa-spinner fa-lg fa-spin fa-fw"></i> 변경중 ...</span>
</button>
</div>
</form>
</div><!-- /.card-body -->
</div><!-- /.card -->
<div class="modal-footer justify-content-center py-2">
<button type="button" class="btn btn-link muted-link" data-dismiss="modal">닫기</button>
</div>
</div>
</div>
</div>
<!-- https://github.com/hilios/jQuery.countdown -->
<?php getImport('jquery.countdown','jquery.countdown.min','2.2.0','js')?>
<script>
var modal_pwReset = $('#modal-pwReset')
$(function () {
$('#admin-loginform').submit(function(e){
e.preventDefault();
e.stopPropagation();
var form = $(this)
var formID = form.attr('id')
var f = document.getElementById(formID);
form.find('[name="form"]').val('#'+formID);
form.find('[type="submit"]').attr("disabled",true);
form.find('.form-control').removeClass('is-invalid') //에러이력 초기화
setTimeout(function(){
getIframeForAction(f);
f.submit();
}, 500);
});
// 로그인 에러 흔적 초기화
$("#admin-loginform").find('.form-control').keyup(function() {
$(this).removeClass('is-invalid')
});
})
function doPwCountdown(type) {
modal_pwReset.find('[data-'+type+'-countdown]').each(function() {
var $this = $(this), finalDate = $(this).data(type+'-countdown');
$this.html('');
$this.countdown(finalDate, function(event) {
$this.html('['+event.strftime('%M:%S')+']');
});
});
};
function pwResetCheck(obj,layer) {
var f = document.getElementById('pwResetForm');
if (!obj.value)
{
obj.classList.remove('is-invalid');
getId(layer).innerHTML = '';
}
else
{
if (obj.name == 'pw1') {
f.classList.remove('was-validated');
if (f.pw1.value.length < 6 || f.pw1.value.length > 16) {
f.check_pw1.value = '0';
f.classList.remove('was-validated');
obj.classList.add('is-invalid');
obj.classList.remove('is-valid');
getId(layer).innerHTML = '영문/숫자 2개 이상의 조합으로 최소 6~16자로 입력하셔야 합니다.';
obj.focus();
return false;
}
if (getTypeCheck(f.pw1.value,"abcdefghijklmnopqrstuvwxyz")) {
getId(layer).innerHTML = '비밀번호가 영문만으로 입력되었습니다.\n영문/숫자 2개 이상의 조합으로 최소 6자이상 입력하셔야 합니다.';
obj.focus();
return false;
}
if (getTypeCheck(f.pw1.value,"1234567890")) {
getId(layer).innerHTML = '비밀번호가 숫자만으로 입력되었습니다.\n영문/숫자 2개 이상의 조합으로 최소 6자이상 입력하셔야 합니다.';
obj.focus();
return false;
}
f.pw1.classList.add('is-valid');
f.pw1.classList.remove('is-invalid');
getId(layer).innerHTML = '';
f.check_pw1.value = '1';
}
if (obj.name == 'pw2') {
f.classList.remove('was-validated');
obj.classList.add('is-invalid');
obj.classList.remove('is-valid');
if (f.pw1.value != f.pw2.value)
{
getId(layer).innerHTML = '비밀번호가 일치하지 않습니다.';
f.classList.remove('was-validated');
obj.focus();
f.check_pw2.value = '0';
return false;
}
f.pw2.classList.add('is-valid');
f.pw2.classList.remove('is-invalid');
getId(layer).innerHTML = '';
f.check_pw2.value = '1';
}
}
}
$(function () {
modal_pwReset.on('show.bs.modal', function (e) {
var modal = modal_pwReset
//화면 초기화
modal.find('[data-role="confirm_code"]').removeClass('d-none')
modal.find('[data-role="change_pw"]').addClass('d-none')
modal.find('#tab-email').tab('show')
modal.find('[data-act="send_code"]').prop("disabled",false)
modal.find('[data-act="send_code"] .not-loading').text('다음')
modal.find('[data-act="confirm_code"]').prop("disabled",false)
modal.find('[type="number"]').val('').removeClass('is-invalid')
modal.find('[name="email"]').val('').removeClass('is-invalid')
modal.find('[name="phone"]').val('').removeClass('is-invalid')
modal.find('[data-role="verify_email_area"]').addClass('d-none')
modal.find('[data-role="verify_phone_area"]').addClass('d-none')
modal.find('[data-role="pw1"]').val('').removeClass('is-invalid')
modal.find('[data-role="pw2"]').val('').removeClass('is-invalid')
modal.find('[name="check_pw1"]').val(0)
modal.find('[name="check_pw2"]').val(0)
modal.find('[data-role="submit"]').prop("disabled",false)
})
modal_pwReset.on('shown.bs.modal', function (e) {
var modal = modal_pwReset
modal.find('[name="email"]').trigger('focus')
})
modal_pwReset.find('input').keyup(function() {
$(this).removeClass('is-invalid') //에러 발생후 다시 입력 시도시에 에러 흔적 초기화
});
//비밀번호 유용성 체크
modal_pwReset.find('[data-role="change_pw"] input').keyup(function(){
var modal = modal_pwReset
var item = $(this).data('role')
var item_pw_check = modal.find('[name=check_pw]').val()
if (item =='pw1') {
element = document.querySelector('[name="pw1"]');
pwResetCheck(element,'pw1-feedback')
}
if (item =='pw2') {
element = document.querySelector('[name="pw2"]');
pwResetCheck(element,'pw2-feedback')
}
});
})
modal_pwReset.find('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
var pane = $(this).attr('id')
if (pane=='tab-email') modal_pwReset.find('[name="email"]').focus()
if (pane=='tab-phone') modal_pwReset.find('[name="phone"]').focus()
})
// 본인인증 코드발송
modal_pwReset.on('click','[data-act="send_code"]',function(){
var modal = modal_pwReset
var button = $(this)
var act = 'send_code'
var type = button.attr('data-type')
var device = button.attr('data-device')
if (type=='email') {
var input = modal.find('[name="email"]')
var _input = document.querySelector('#modal-pwReset [name="email"]');
var target = input.val()
var msg = modal.find('[data-role="emailErrorBlock"]')
// 상태초기화
input.removeClass('is-invalid is-valid')
// 이메일 입력폼 유효성 체크
if (!target) {
input.focus()
input.addClass('is-invalid')
msg.text('이메일을 입력해주세요.')
return false;
}
if (!chkEmailAddr(_input.value)) {
input.focus()
input.addClass('is-invalid')
msg.text('이메일 형식이 아닙니다.')
return false;
}
}
if (type=='phone') {
var input = modal.find('[name="phone"]')
var _input = document.querySelector('#modal-pwReset [name="phone"]');
var target = input.val()
var msg = modal.find('[data-role="phoneErrorBlock"]')
// 상태초기화
input.removeClass('is-invalid is-valid')
// 휴대폰번호 입력폼 유효성 체크
if (!target) {
input.focus()
input.addClass('is-invalid')
msg.text('휴대폰 번호를 입력해주세요.')
return false;
}
if (!chkPhoneNumber(_input.value)) {
input.focus()
input.addClass('is-invalid')
msg.text('휴대폰 번호 형식이 아닙니다.')
return false;
}
}
button.attr('disabled',true) //버튼 로딩처리
var url = rooturl+'/?r='+raccount+'&m=member&a=pw_reset&act='+act+'&type='+type+'&target='+target+'&device='+device+'&usertype=admin'
getIframeForAction();
//modal.find('[data-act=confirm_code]').attr('data-type',type);
//modal.find('[type=number]').attr('data-role','confirm_'+type+'_code').attr('name','confirm_'+type+'_code');
//modal.find('.invalid-tooltip').attr('data-role',type+'CodeBlock');
modal.find('[data-role=countdown]').text('');
modal.find('[data-role="target"]').text(target)
setTimeout(function() {
frames.__iframe_for_action__.location.href = url;
}, 700);
});
// 본인인증 코드확인
modal_pwReset.on('click','[data-act="confirm_code"]',function(){
var modal = modal_pwReset
var button = $(this)
var act = 'confirm_code'
var type = button.data('type')
var device = button.data('device')
if (type=='email') {
var input = modal.find('[name="confirm_email_code"]')
var code = input.val()
var msg = modal.find('[data-role="emailCodeBlock"]')
// 상태초기화
input.removeClass('is-invalid is-valid')
// 인증번호 입력폼 유효성 체크
if (!code) {
input.focus()
input.addClass('is-invalid')
msg.text('인증번호를 입력해주세요.')
return false;
}
}
if (type=='phone') {
var input = modal.find('[name="confirm_phone_code"]')
var code = input.val()
var msg = modal.find('[data-role="phoneCodeBlock"]')
// 상태초기화
input.removeClass('is-invalid is-valid')
// 인증번호 입력폼 유효성 체크
if (!code) {
input.focus()
input.addClass('is-invalid')
msg.text('인증번호를 입력해주세요.')
return false;
}
}
button.attr('disabled',true) //버튼 로딩처리
var url = rooturl+'/?r='+raccount+'&m=member&a=pw_reset&act='+act+'&type='+type+'&code='+code+'&device='+device
getIframeForAction();
setTimeout(function() {
frames.__iframe_for_action__.location.href = url;
}, 700);
});
// 비밀번호 변경
$('#pwResetForm').submit( function(e){
e.preventDefault();
e.stopPropagation();
var form = $(this)
var formID = form.attr('id')
var f = document.getElementById(formID);
if (f.check_pw1.value == '0' || f.check_pw2.value == '0') {
return false;
}
form.find('[name="form"]').val('#'+formID);
form.find('[type="submit"]').attr("disabled",true); //버튼 로딩처리
form.find('.form-control').removeClass('is-invalid') //에러이력 초기화
setTimeout(function(){
getIframeForAction(f);
f.submit();
}, 500);
}
);
</script>