초기소스
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
|
||||
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
|
||||
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
|
||||
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
|
||||
<%@ taglib prefix="ui" uri="http://www.winbit.kr/ctl/ui"%>
|
||||
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld"%>
|
||||
|
||||
<%--
|
||||
Class Name : JoinC.jsp
|
||||
Description : 회원가입
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2024-02-05 최범식 최초 생성
|
||||
--%>
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
|
||||
<head>
|
||||
<%-- 공통 include --%>
|
||||
<jsp:include page="/WEB-INF/views/comm/Include.jsp"/>
|
||||
</head>
|
||||
<%-- 공통 Header --%>
|
||||
<jsp:include page="/WEB-INF/views/comm/Header.jsp"/>
|
||||
<body>
|
||||
|
||||
<%-- 공통 Footer --%>
|
||||
<jsp:include page="/WEB-INF/views/comm/Footer.jsp"/>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
533
src/main/webapp/WEB-INF/views/sopmal/mbr/IdPasswordSearchR.jsp
Normal file
533
src/main/webapp/WEB-INF/views/sopmal/mbr/IdPasswordSearchR.jsp
Normal file
@@ -0,0 +1,533 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
|
||||
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
|
||||
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
|
||||
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
|
||||
<%@ taglib prefix="ui" uri="http://www.winbit.kr/ctl/ui"%>
|
||||
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld"%>
|
||||
|
||||
<%--
|
||||
Class Name : IdPasswordSearchR.jsp
|
||||
Description : 아이디 패스워드 조회
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2024-02-05 최범식 최초 생성
|
||||
2024-09-09 이대환 내용수정
|
||||
--%>
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
|
||||
<head>
|
||||
<%-- 공통 include --%>
|
||||
<jsp:include page="/WEB-INF/views/comm/Include.jsp"/>
|
||||
</head>
|
||||
<script type="text/javascript">
|
||||
|
||||
$(document).ready(function() {
|
||||
fn_select_tap('id');
|
||||
fn_show_phoneAuth();
|
||||
first = 0;
|
||||
|
||||
$(".login__inputBox__alertText").hide();
|
||||
fn_alert_hide($("#srchIdMbrNm"), $("#srchIdMbrNmAlert"));
|
||||
fn_alert_hide($("#srchIdPhoneNb"), $("#srchIdPhoneNbAlert"));
|
||||
fn_alert_hide($("#srchIdSendungNb"), $("#srchIdSendungNbAlert"));
|
||||
fn_alert_hide($("#srchPsMbrNm"), $("#srchPsMbrNmAlert"));
|
||||
fn_alert_hide($("#srchPsMbrId"), $("#srchPsMbrIdAlert"));
|
||||
fn_alert_hide($("#srchPsPhoneNb"), $("#srchPsPhoneNbAlert"));
|
||||
fn_alert_hide($("#srchPsSendungNb"), $("#srchPsSendungNbAlert"));
|
||||
|
||||
$('.certInp').on('keydown', function(e) {
|
||||
if (e.keyCode == 13) {
|
||||
$('.phoneAuthBtn').first().click();
|
||||
}
|
||||
});
|
||||
$('.certNb').on('keydown', function(e) {
|
||||
if (e.keyCode == 13) {
|
||||
fn_confim_own();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
/* ********************************************************
|
||||
* 아이디 패스워드 찾기 탭 변경
|
||||
******************************************************** */
|
||||
findType = '';
|
||||
const fn_select_tap = function(_target) {
|
||||
|
||||
if (_target === 'id') {
|
||||
|
||||
$('#findId').addClass('current');
|
||||
$('#findPswd').removeClass('current');
|
||||
$('#reqIdForm').show();
|
||||
$('#reqPswdForm').hide();
|
||||
} else {
|
||||
|
||||
$('#findId').removeClass('current');
|
||||
$('#findPswd').addClass('current');
|
||||
$('#reqIdForm').hide();
|
||||
$('#reqPswdForm').show();
|
||||
}
|
||||
findType = _target;
|
||||
|
||||
//입력값 초기화
|
||||
first = 0;
|
||||
certNb = '';
|
||||
fn_stop_timer();
|
||||
$('.input-text').val('');
|
||||
|
||||
if(isChkd_own){
|
||||
$('.input-text').attr("readonly", false);
|
||||
$('.phoneAuthBtn').show();
|
||||
$('.phoneAuthOkBtn').hide();
|
||||
$('#resIdForm').hide();
|
||||
$('#resPswdForm').hide();
|
||||
isChkd_own = false;
|
||||
}
|
||||
}
|
||||
|
||||
/* ********************************************************
|
||||
* 아이디 찾기 탭이동
|
||||
******************************************************** */
|
||||
const fn_move_tapFindId = function (){
|
||||
|
||||
$('#findId').click();
|
||||
}
|
||||
|
||||
/* ********************************************************
|
||||
* 패스워드 찾기 탭이동
|
||||
******************************************************** */
|
||||
const fn_move_tapFindPwsd = function (){
|
||||
|
||||
$('#findPswd').click();
|
||||
}
|
||||
|
||||
/* ********************************************************
|
||||
* 휴대폰 인증 버튼 클릭시, 휴대폰 인증 박스 노출
|
||||
******************************************************** */
|
||||
const fn_show_phoneAuth = function() {
|
||||
let phoneAuthBtn = $('.phoneAuthBtn');
|
||||
let phoneAuthContent = $('.phoneAuthContent');
|
||||
|
||||
phoneAuthContent.hide();
|
||||
|
||||
phoneAuthBtn.click(function () {
|
||||
if (findType === 'id') {
|
||||
if(!$('#srchIdMbrNm').val()){
|
||||
alert('이름을 입력해 주세요.');
|
||||
$('#srchIdMbrNm').focus();
|
||||
return;
|
||||
}else if(!$('#srchIdPhoneNb').val()){
|
||||
alert('휴대폰 번호를 입력해 주세요.');
|
||||
$('#srchIdPhoneNb').focus();
|
||||
return;
|
||||
}
|
||||
|
||||
$('#reqIdForm .phoneAuthContent').show();
|
||||
$('#srchIdSendungNb').focus();
|
||||
}else {
|
||||
if(!$('#srchPsMbrNm').val()){
|
||||
alert('이름을 입력해 주세요.');
|
||||
$('#srchPsMbrNm').focus();
|
||||
return;
|
||||
}else if(!$('#srchPsMbrId').val()){
|
||||
alert('아이디를 입력해 주세요.');
|
||||
$('#srchPsMbrId').focus();
|
||||
return;
|
||||
}else if(!$('#srchPsPhoneNb').val()){
|
||||
alert('휴대폰 번호를 입력해 주세요.');
|
||||
$('#srchPsPhoneNb').focus();
|
||||
return;
|
||||
}
|
||||
|
||||
$('#reqPswdForm .phoneAuthContent').show();
|
||||
$('#srchPsSendungNb').focus();
|
||||
}
|
||||
|
||||
fn_sending_number();
|
||||
});
|
||||
}
|
||||
|
||||
/* ********************************************************
|
||||
* 휴대폰 인증 카운터
|
||||
******************************************************** */
|
||||
let seconds;
|
||||
let countdown;
|
||||
let timerRunning = false;
|
||||
const fn_set_timeOut = function() {
|
||||
|
||||
if (seconds >= 0) {
|
||||
|
||||
const minutes = Math.floor(seconds / 60).toString().padStart(2, '0');
|
||||
const remainingSeconds = (seconds % 60).toString().padStart(2, '0');
|
||||
|
||||
$('.timer').text(minutes+":"+remainingSeconds);
|
||||
|
||||
seconds--;
|
||||
} else {
|
||||
|
||||
fn_stop_timer();
|
||||
alert('인증번호 유효시간이 만료되었습니다.');
|
||||
}
|
||||
}
|
||||
|
||||
/* ********************************************************
|
||||
* 휴대폰 인증 번호 발송
|
||||
******************************************************** */
|
||||
first = 0;
|
||||
certNb = '';
|
||||
const fn_sending_number = function() {
|
||||
|
||||
if(timerRunning){
|
||||
return;
|
||||
}
|
||||
|
||||
let phoneNb;
|
||||
let mbrNm;
|
||||
let mbtlnb;
|
||||
if (findType === 'id') {
|
||||
phoneNb = $('#srchIdPhoneNb').val();
|
||||
mbrNm = $('#srchIdMbrNm').val();
|
||||
mbtlnb = $('#srchIdPhoneNb').val();
|
||||
} else {
|
||||
phoneNb = $('#srchPsPhoneNb').val();
|
||||
mbrNm = $('#srchPsMbrNm').val();
|
||||
mbtlnb = $('#srchPsPhoneNb').val();
|
||||
}
|
||||
|
||||
if(certNb === phoneNb){
|
||||
first++;
|
||||
}else{
|
||||
first = 0;
|
||||
}
|
||||
certNb = phoneNb;
|
||||
|
||||
mbtlnb = mbtlnb.trim().replace(/-/g, '');
|
||||
let params = {
|
||||
'mbrNm' : mbrNm,
|
||||
'mbtlnb': mbtlnb
|
||||
};
|
||||
|
||||
$.ajax({
|
||||
type : 'post',
|
||||
url : '<c:url value="/sopmal/mbr/insertPhoneAuth"/>',
|
||||
data : params,
|
||||
success : function (Data) {
|
||||
|
||||
let result = JSON.parse(Data.resBody.result);
|
||||
if(result.result == "success"){
|
||||
if (first > 0) {
|
||||
alert('인증번호가 재발송되었습니다.');
|
||||
} else if (first === 0) {
|
||||
alert('인증번호가 발송되었습니다.');
|
||||
first++;
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
|
||||
let sndngInnb = (findType === 'id') ? $('#srchIdForm .sndngInnb') : $('#srchPswdForm .sndngInnb');
|
||||
sndngInnb.val(result.sndngInnb);
|
||||
}else {
|
||||
alert('인증번호 발송에 실패했습니다.');
|
||||
fn_stop_timer();
|
||||
return;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$('.input-text').attr("readonly", true);
|
||||
$('.certNb').attr("readonly", false);
|
||||
|
||||
clearInterval(countdown);
|
||||
seconds = 180;
|
||||
|
||||
fn_set_timeOut();
|
||||
countdown = setInterval(fn_set_timeOut, 1000);
|
||||
timerRunning = true;
|
||||
}
|
||||
|
||||
/* ********************************************************
|
||||
* 타이머 정지 함수
|
||||
******************************************************** */
|
||||
const fn_stop_timer = function() {
|
||||
|
||||
if (timerRunning) {
|
||||
clearInterval(countdown);
|
||||
$('.timer').text('03:00');
|
||||
$('.certNb').val('');
|
||||
$('.phoneAuthContent').hide();
|
||||
|
||||
$('.input-text').attr("readonly", false);
|
||||
timerRunning = false;
|
||||
}
|
||||
}
|
||||
|
||||
/* ********************************************************
|
||||
* 휴대폰 인증 확인
|
||||
******************************************************** */
|
||||
isChkd_own = false;
|
||||
const fn_confim_own = function() {
|
||||
|
||||
if (first <= 0) return;
|
||||
|
||||
let sndngInnb;
|
||||
let mbtlnb;
|
||||
let crtnb;
|
||||
if (findType === 'id') {
|
||||
sndngInnb = $('#srchIdForm .sndngInnb').val();
|
||||
mbtlnb = $('#srchIdPhoneNb').val();
|
||||
crtnb = $('#srchIdSendungNb').val();
|
||||
} else {
|
||||
sndngInnb = $('#srchPswdForm .sndngInnb').val();
|
||||
mbtlnb = $('#srchPsPhoneNb').val();
|
||||
crtnb = $('#srchPsSendungNb').val();
|
||||
}
|
||||
fn_stop_timer();
|
||||
|
||||
mbtlnb = mbtlnb.trim().replace(/-/g, '');
|
||||
let params = {
|
||||
'sndngInnb': sndngInnb,
|
||||
'mbtlnb': mbtlnb,
|
||||
'crtnb' : crtnb
|
||||
};
|
||||
|
||||
$.ajax({
|
||||
type : 'post',
|
||||
url : '<c:url value="/sopmal/mbr/selectPhoneAuth"/>',
|
||||
data : params,
|
||||
success : function (Data) {
|
||||
|
||||
let result = JSON.parse(Data.resBody.result);
|
||||
if(result.result == "success"){
|
||||
alert('인증되었습니다.');
|
||||
$('.phoneAuthOkBtn').show();
|
||||
$('.phoneAuthBtn').hide();
|
||||
isChkd_own = true;
|
||||
|
||||
fn_select_infor();
|
||||
$('.input-text').attr("readonly", true);
|
||||
}else {
|
||||
alert('인증번호가 일치하지 않습니다.');
|
||||
return;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
/* ********************************************************
|
||||
* 아이디 패스워드 조회
|
||||
******************************************************** */
|
||||
const fn_select_infor = function() {
|
||||
|
||||
let mbrId = '';
|
||||
let mbtlnb = '';
|
||||
let mbrNm = '';
|
||||
let url = '';
|
||||
|
||||
if (findType === 'id') {
|
||||
url = '<c:url value="/sopmal/mbr/selectIdSearch"/>';
|
||||
mbrNm = $('#srchIdMbrNm').val().trim();
|
||||
mbtlnb = $('#srchIdPhoneNb').val().trim().replace(/-/g, '');
|
||||
|
||||
} else {
|
||||
url = '<c:url value="/sopmal/mbr/selectPasswordSearch"/>';
|
||||
mbrNm = $('#srchPsMbrNm').val().trim();
|
||||
mbrId = $('#srchPsMbrId').val().trim();
|
||||
mbtlnb = $('#srchPsPhoneNb').val().trim().replace(/-/g, '');
|
||||
}
|
||||
|
||||
let params = {
|
||||
'mbrId' : mbrId,
|
||||
'mbtlnb': mbtlnb,
|
||||
'mbrNm' : mbrNm
|
||||
};
|
||||
|
||||
$.ajax({
|
||||
type : 'post',
|
||||
url : url,
|
||||
data : params,
|
||||
success : function(data) {
|
||||
|
||||
let result = JSON.parse(data.resBody.result);
|
||||
if (findType === 'id') {
|
||||
|
||||
$('#reqIdForm').hide();
|
||||
$('#resIdForm').show();
|
||||
|
||||
if(result.result == "success"){
|
||||
$('#resIdForm').find('.userId').text(result.selectId);
|
||||
$('.findSuccess').show();
|
||||
$('.findFail').hide();
|
||||
}else {
|
||||
$('.findSuccess').hide();
|
||||
$('.findFail').show();
|
||||
}
|
||||
} else if (findType === 'pswd') {
|
||||
|
||||
$('#reqPswdForm').hide();
|
||||
$('#resPswdForm').show();
|
||||
|
||||
if(result.result == "success"){
|
||||
let message = '회원님의 휴대폰(' + fn_hide_numbers(mbtlnb)+ ')';
|
||||
$('#resPswdForm').find('.mbph').text(message);
|
||||
$('.findSuccess').show();
|
||||
$('.findFail').hide();
|
||||
}
|
||||
else {
|
||||
$('.findSuccess').hide();
|
||||
$('.findFail').show();
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/* ********************************************************
|
||||
* 핸드폰번호 가리기
|
||||
******************************************************** */
|
||||
const fn_hide_numbers = function (_arg){
|
||||
|
||||
let mbph = "";
|
||||
for(var i = 0; i < _arg.length; i++){
|
||||
if (i === 3) mbph += '-';
|
||||
mbph += i > _arg.length - 8 ? "*" : _arg.charAt(i);
|
||||
}
|
||||
return mbph;
|
||||
}
|
||||
|
||||
/* ********************************************************
|
||||
* 사용자 입력값이 입력될 때 alertText 숨기기
|
||||
******************************************************** */
|
||||
const fn_alert_hide = (inputId, alertId) => {
|
||||
inputId.on('input', function () {
|
||||
alertId.hide();
|
||||
if (!$(this).val()) {
|
||||
alertId.show();
|
||||
}
|
||||
})
|
||||
};
|
||||
|
||||
</script>
|
||||
|
||||
<body>
|
||||
<%-- 공통 Header --%>
|
||||
<jsp:include page="/WEB-INF/views/comm/Header.jsp"/>
|
||||
<!-- 헤더 영역(Type3) -->
|
||||
<main>
|
||||
<div class="sub-wrapper">
|
||||
<div class="sub-content">
|
||||
<div class="page-title center">
|
||||
<h2 class="page-title__title">아이디/비밀번호 찾기</h2>
|
||||
<p class="page-title__subTitle">아이디, 비밀번호가 생각나지 않으세요?</p>
|
||||
</div>
|
||||
<div class="login">
|
||||
<div class="boxTab">
|
||||
<button type="button" class="boxTab__tabBtn current" id="findId" onclick="fn_select_tap('id');"><spring:message code="button.findId"/></button>
|
||||
<button type="button" class="boxTab__tabBtn" id="findPswd" onclick="fn_select_tap('pswd');"><spring:message code="button.findPswd"/></button>
|
||||
</div>
|
||||
|
||||
<div class="boxTab__content login-content current" id="reqIdForm">
|
||||
<form id="srchIdForm">
|
||||
<div class="login__inputBox">
|
||||
<input type="text" class="input-text full certInp" id="srchIdMbrNm" name="mbrNm" title="이름" placeholder="이름">
|
||||
<p class="login__inputBox__alertText" id="srchIdMbrNmAlert">이름을 입력해 주세요.</p>
|
||||
<div class="inputWithBtn">
|
||||
<input type="text" class="input-text full number certInp" id="srchIdPhoneNb" name="mbtlnb" title="휴대폰" placeholder="휴대폰번호 입력 (’-’ 없이)" oninput="fn_set_event(this, 'keyup', fn_fmt_telno)" maxlength="13">
|
||||
<button type="button" class="btn md theme outline phoneAuthBtn"><spring:message code="button.certification"/></button>
|
||||
<!-- 인증완료시 버튼 -->
|
||||
<button type="button" class="btn md outline phoneAuthOkBtn" style="display:none;"><spring:message code="button.certificationDone"/></button>
|
||||
</div>
|
||||
<p class="login__inputBox__alertText" id="srchIdPhoneNbAlert">휴대폰번호를 입력해 주세요.</p>
|
||||
<div class="inputWithBtn phoneAuthContent">
|
||||
<input type="hidden" class="sndngInnb">
|
||||
<div class="inputTimer">
|
||||
<input type="text" class="input-text full number certNb" id="srchIdSendungNb" title="인증번호" placeholder="인증번호 입력" maxlength="6">
|
||||
<span class="inputTimer__time timer">03:00</span>
|
||||
</div>
|
||||
<button type="button" class="btn md gray" onclick="fn_confim_own();"><spring:message code="button.ok"/></button>
|
||||
</div>
|
||||
<p class="login__inputBox__alertText" id="srchIdSendungNbAlert">인증번호를 입력해 주세요.</p>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="boxTab__content login-content current" id="resIdForm" style="display: none;">
|
||||
<div class="login__findResult">
|
||||
<p class="findSuccess">
|
||||
고객님의 아이디는 <em class="userId"></em> 입니다.
|
||||
</p>
|
||||
<p class="findFail">
|
||||
<span style="color:red;">일치하는 정보가 없습니다.</span><br>아이디 찾기 방법을 변경하거나 회원가입을 해주세요.
|
||||
</p>
|
||||
</div>
|
||||
<div class="login__btnContainer-half">
|
||||
<button type="button" class="btn xl full outline login__loginBtn findSuccess" onclick="fn_move_tapFindPwsd();">비밀번호 찾기</button>
|
||||
<a href="<c:url value='/sopmal/mbr/selectUsrLoginForm'/>" class="btn xl full dark login__loginBtn findSuccess">로그인</a>
|
||||
<button type="button" class="btn xl full outline login__loginBtn findFail" onclick="fn_move_tapFindId();">아이디 찾기</button>
|
||||
<a href="<c:url value='/sopmal/mbr/selectJoinGuidance'/>" class="btn xl full dark login__loginBtn findFail">회원가입</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="boxTab__content login-content" id="reqPswdForm">
|
||||
<form id="srchPswdForm">
|
||||
<div class="login__inputBox">
|
||||
<input type="text" class="input-text full certInp" id="srchPsMbrNm" name="mbrNm" title="이름" placeholder="이름">
|
||||
<p class="login__inputBox__alertText" id="srchPsMbrNmAlert">이름을 입력해 주세요.</p>
|
||||
<input type="text" class="input-text full certInp" id="srchPsMbrId" name="mbrId" title="아이디" placeholder="아이디">
|
||||
<p class="login__inputBox__alertText" id="srchPsMbrIdAlert">아이디를 입력해 주세요.</p>
|
||||
<div class="inputWithBtn">
|
||||
<input type="text" class="input-text full number certInp" id="srchPsPhoneNb" name="mbtlnb" title="휴대폰" placeholder="휴대폰번호 입력 (’-’ 없이)" oninput="fn_set_event(this, 'keyup', fn_fmt_telno)" maxlength="13">
|
||||
<button type="button" class="btn md theme outline phoneAuthBtn"><spring:message code="button.certification"/></button>
|
||||
<!-- 인증완료시 버튼 -->
|
||||
<button type="button" class="btn md outline phoneAuthOkBtn" style="display:none;"><spring:message code="button.certificationDone"/></button>
|
||||
</div>
|
||||
<p class="login__inputBox__alertText" id="srchPsPhoneNbAlert">휴대폰번호를 입력해 주세요.</p>
|
||||
<div class="inputWithBtn phoneAuthContent">
|
||||
<input type="hidden" class="sndngInnb">
|
||||
<div class="inputTimer">
|
||||
<input type="text" class="input-text full number certNb" id="srchPsSendungNb" title="인증번호" placeholder="인증번호 입력" maxlength="6">
|
||||
<span class="inputTimer__time timer">03:00</span>
|
||||
</div>
|
||||
<button type="button" class="btn md gray" onclick="fn_confim_own();"><spring:message code="button.ok"/></button>
|
||||
</div>
|
||||
<p class="login__inputBox__alertText" id="srchPsSendungNbAlert">인증번호를 입력해 주세요.</p>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="boxTab__content login-content" id="resPswdForm" style="display: none;">
|
||||
<div class="login__findResult">
|
||||
<p class="findSuccess">
|
||||
<em class="mbph"></em>으로<br>임시 비밀번호가
|
||||
발송되었습니다.
|
||||
<br>
|
||||
SMS를 확인 부탁 드립니다.
|
||||
</p>
|
||||
<p class="findFail">
|
||||
<span style="color:red;">일치하는 정보가 없습니다.</span><br>아이디 찾기 방법을 변경하거나 회원가입을 해주세요.
|
||||
</p>
|
||||
</div>
|
||||
<a href="<c:url value='/login'/>" class="btn xl full dark login__loginBtn findSuccess">로그인</a>
|
||||
<div class="login__btnContainer-half findFail">
|
||||
<button type="button" class="btn xl full outline login__loginBtn" onclick="fn_move_tapFindPwsd();">비밀번호 찾기</button>
|
||||
<a href="<c:url value='/sopmal/mbr/selectJoinGuidance'/>" class="btn xl full dark login__loginBtn">회원가입</a>
|
||||
</div>
|
||||
<p class="textInfo findSuccess"><i class="icon icon_textInfo--sm"></i>SNS 계정으로 가입한 회원의 비밀번호는 저장하지 있지 않으며, 해당
|
||||
SNS
|
||||
서비스 제공시에 문의하시길 바랍니다.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
|
||||
|
||||
<%-- 공통 Footer --%>
|
||||
<jsp:include page="/WEB-INF/views/comm/Footer.jsp"/>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
330
src/main/webapp/WEB-INF/views/sopmal/mbr/JoinAgreeTermsR.jsp
Normal file
330
src/main/webapp/WEB-INF/views/sopmal/mbr/JoinAgreeTermsR.jsp
Normal file
@@ -0,0 +1,330 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
|
||||
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
|
||||
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
|
||||
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
|
||||
<%@ taglib prefix="ui" uri="http://www.winbit.kr/ctl/ui"%>
|
||||
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld"%>
|
||||
|
||||
<%--
|
||||
Class Name : JoinAgreeTermsR.jsp
|
||||
Description : 회원가입 약관
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2024-02-05 최범식 최초 생성
|
||||
2024-08-17 이대환 독립몰/통합몰 구분
|
||||
--%>
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
|
||||
<head>
|
||||
<%-- 공통 include --%>
|
||||
<jsp:include page="/WEB-INF/views/comm/Include.jsp"/>
|
||||
</head>
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
$(document).ready(function() {
|
||||
$('#termCheckAll').prop('checked', false);
|
||||
|
||||
/* ********************************************************
|
||||
* 약관 전체동의
|
||||
******************************************************** */
|
||||
$('#termCheckAll').click(function () {
|
||||
if ($('#termCheckAll').is(':checked')) {
|
||||
|
||||
$('.termCheck').prop('checked', true);
|
||||
$('[name=stplatDvCdAts]').val('Y');
|
||||
} else {
|
||||
|
||||
$('.termCheck').prop('checked', false);
|
||||
$('[name=stplatDvCdAts]').val('N');
|
||||
}
|
||||
});
|
||||
|
||||
$('.termCheck').click(function () {
|
||||
if($('.termCheck:not(:checked)').length == 0) {
|
||||
$('#termCheckAll').prop('checked', true);
|
||||
} else {
|
||||
$('#termCheckAll').prop('checked', false);
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
/* ********************************************************
|
||||
* 회원가입 안내화면으로 이동(뒤로 가기)
|
||||
******************************************************** */
|
||||
const fn_move_joinGuidance = function() {
|
||||
history.back();
|
||||
if(history.length <= 1){
|
||||
window.close();
|
||||
}
|
||||
}
|
||||
|
||||
/* ********************************************************
|
||||
* 회원가입 화면으로 이동
|
||||
******************************************************** */
|
||||
const fn_move_joinC = function() {
|
||||
|
||||
if ($('[name="essntl"]:not(:checked)').length > 0) {
|
||||
alert('[필수]항목을 체크해 주세요.');
|
||||
return;
|
||||
}
|
||||
|
||||
if ($('input[name="joinMthCd"]').length) {
|
||||
disableButton('#submit');
|
||||
|
||||
if(!confirm('회원가입을 <spring:message code="confirm.common.predicate"/>')){
|
||||
fn_regist_fail();
|
||||
return;
|
||||
}
|
||||
let params = $('#termsForm').serialize();
|
||||
|
||||
$.ajax({
|
||||
type : 'post',
|
||||
url : '<c:url value="/sopmal/mbr/selectMbrwithdrawalSearch"/>',
|
||||
data : params,
|
||||
success : function(result) {
|
||||
|
||||
let mbrWithDrawalList = JSON.parse(result.resBody.result).mbrWithDrawalList;
|
||||
if(mbrWithDrawalList.length > 0) {
|
||||
params = params + '&' + $.param({'extMember': mbrWithDrawalList[0].mbrInnb});
|
||||
}
|
||||
|
||||
$.ajax({
|
||||
type : 'post',
|
||||
url : '<c:url value="/sopmal/mbr/insertUsrJoinRegist"/>',
|
||||
data : params,
|
||||
success : function (result) {
|
||||
|
||||
const response = JSON.parse(result.resBody.result);
|
||||
const errStatus = response.status;
|
||||
|
||||
if(errStatus === 500){
|
||||
alert('회원가입에 실패하였습니다. 회원가입 안내 화면으로 돌아갑니다.');
|
||||
location.replace('/sopmal/mbr/selectJoinGuidance');
|
||||
fn_regist_fail();
|
||||
return;
|
||||
}
|
||||
|
||||
const mbrInnb = response.mbrInnb;
|
||||
const marketingAgree = response.marketingAgree;
|
||||
|
||||
if (mbrInnb !== null) {
|
||||
openSocialLoginPopup($('input[name="joinMthCd"]').val(), marketingAgree);
|
||||
// location.replace('/sopmal/mbr/selectJoinCompleteR'+(marketingAgree=='Y'?'?stplatDvCdAts=Y':''));
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}else{
|
||||
|
||||
$('#termsForm').attr('method', 'post');
|
||||
$('#termsForm').attr('action', '<c:url value="/sopmal/mbr/selectJoinForm"/>');
|
||||
$('#termsForm').submit();
|
||||
}
|
||||
}
|
||||
|
||||
/* ********************************************************
|
||||
* 회원 가입 실패
|
||||
******************************************************** */
|
||||
const fn_regist_fail = function() {
|
||||
enableButton('#submit');
|
||||
}
|
||||
|
||||
/* ********************************************************
|
||||
* 체크박스 값변경
|
||||
******************************************************** */
|
||||
const fn_set_checkbox = function(_target) {
|
||||
|
||||
if ($(_target).is(':checked')) {
|
||||
|
||||
$(_target).parent().find('.termBoolean').val('Y');
|
||||
$(_target).parent().find('.termDisable').prop('disabled', false);
|
||||
} else {
|
||||
|
||||
$(_target).parent().find('.termBoolean').val('N');
|
||||
$(_target).parent().find('.termDisable').prop('disabled', true);
|
||||
}
|
||||
}
|
||||
|
||||
/* ********************************************************
|
||||
* 약관 팝업 값 설정
|
||||
******************************************************** */
|
||||
const fn_set_termPop = function(termNm, index) {
|
||||
|
||||
$('#termNm').html('<c:if test="${integrated}">GC ONE </c:if>'+termNm);
|
||||
$('#termCn').html($('#stplatCn'+index).html());
|
||||
}
|
||||
|
||||
/* ********************************************************
|
||||
* SNS 소셜 로그인
|
||||
******************************************************** */
|
||||
const openSocialLoginPopup = (provider, marketingAgree) => {
|
||||
var accessUrl = '${accessUrl}';
|
||||
var redirectUri = '/sopmal/mbr/selectJoinCompleteR'
|
||||
+ '?joinMthCd='+(provider.length>5?provider.slice(3).toLowerCase():provider.toLowerCase())
|
||||
+ (marketingAgree=='Y'?'&stplatDvCdAts=Y':'');
|
||||
|
||||
var width = 600;
|
||||
var height = 600;
|
||||
var left = (screen.width / 2) - (width / 2);
|
||||
var top = (screen.height / 2) - (height / 2);
|
||||
var url = '${ssoUrl}/oauth2/authorization/' + provider
|
||||
+ '?redirect_uri=' + encodeURIComponent(redirectUri) + '&oauth2_type=login&access_url='+ encodeURIComponent(accessUrl);
|
||||
|
||||
window.open(url, 'SocialLoginPopup', 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, copyhistory=no, width=' + width + ', height=' + height + ', top=' + top + ', left=' + left);
|
||||
}
|
||||
|
||||
const receiveMessage = (event) => {
|
||||
if(event.origin !== "${ssoUrl}") {
|
||||
return;
|
||||
}
|
||||
if(event.data.type === 'LOGIN_SUCCESS') {
|
||||
window.location.href = event.data.redirectUrl;
|
||||
}
|
||||
}
|
||||
|
||||
window.addEventListener('message', receiveMessage, false);
|
||||
|
||||
</script>
|
||||
|
||||
<body>
|
||||
<%-- 공통 Header --%>
|
||||
<jsp:include page="/WEB-INF/views/comm/Header.jsp"/>
|
||||
<!-- 헤더 영역(Type3) -->
|
||||
<main>
|
||||
<c:set var="terms" value="${resultMap.joinAgreeTerms}" />
|
||||
<c:set var="sopmalInfo" value="${resultMap.sopmalInfo}" />
|
||||
<c:set var="integrated" value="${sopmalInfo.sopmalTyCd == '01'}" />
|
||||
<!-- 약관 세팅 -->
|
||||
<div class="sub-wrapper">
|
||||
<div class="sub-content">
|
||||
<div class="page-title center">
|
||||
<c:choose>
|
||||
<c:when test="${integrated}">
|
||||
<h2 class="page-title__title">GC ONE(통합회원) 가입</h2>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<h2 class="page-title__title">회원가입</h2>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
<div class="ck-content">
|
||||
<c:out value="${sopmalInfo.joinGuidanceSj}" escapeXml="false"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="signUpTerms">
|
||||
<c:choose>
|
||||
<c:when test="${integrated}">
|
||||
<p class="signUpTerms__agreeText">GC ONE 회원 서비스 이용약관에 동의해 주세요.</p>
|
||||
<div class="signUpTerms__all">
|
||||
<div class="b-checkbox-container">
|
||||
<label class="b-checkbox is-large checkbox">
|
||||
<input type="checkbox" value="" id="termCheckAll">
|
||||
<span class="check"></span>
|
||||
<span class="control-label">GC ONE 통합회원 전체 동의</span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="signUpTerms__all__description">
|
||||
<p>통합 회원과 제휴 브랜드의 가입 및 혜택 정보 수신 동의 내용을 확인하고 전체 동의합니다.</p>
|
||||
<p class="important">※ 선택 항목에 대한 동의를 거부하더라도 통합 회원가입에는 영향을 미치지 않습니다.</p>
|
||||
<p>단, 미동의 해당 제휴 브랜드는 이용 제한이 있거나 혜택을 받으실 수 없습니다</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="signUpTerms__gcone">
|
||||
<a class="signUpTerms__gcone__link" href="">
|
||||
<p><em>GC ONE</em> 마일리지/ 혜택 통합 멤버십 서비스</p>
|
||||
<svg viewBox="0 0 306 306" xml:space="preserve">
|
||||
<path d="M0,277.7L28.3,306L266,68.3v131.7h40V0H106.1v40h131.7L0,277.7z"></path>
|
||||
</svg>
|
||||
</a>
|
||||
<p class="signUpTerms__gcone__text">GC ONE은 친환경 제품, 안전성이 검증된 원료로 최고의 품질을 갖춘 브랜드만 제휴합니다.</p>
|
||||
</div>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<p class="signUpTerms__agreeText">서비스 이용약관에 동의해 주세요.</p>
|
||||
<div class="signUpTerms__all">
|
||||
<div class="b-checkbox-container">
|
||||
<label class="b-checkbox is-large checkbox">
|
||||
<input type="checkbox" value="" id="termCheckAll">
|
||||
<span class="check"></span>
|
||||
<span class="control-label">전체 동의</span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="signUpTerms__all__description">
|
||||
<p>모두 확인하였으며 동의합니다.</p>
|
||||
<p>전체 동의에는 필수 및 선택 정보에 대한 동의가 포함되어 있으며, 개별적으로 동의를 선택 하실 수 있습니다.</p>
|
||||
<p class="important">※ 선택 항목에 대한 동의를 거부하시는 경우에도 서비스 이용이 가능합니다.</p>
|
||||
</div>
|
||||
</div>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
<form id="termsForm">
|
||||
<div class="signUpTerms__misc">
|
||||
<c:if test="${not empty vo.joinMthCd}">
|
||||
<input type="hidden" name="joinMthCd" value='<c:out value="${vo.joinMthCd}"/>'>
|
||||
<input type="hidden" name="extrlIntrlckId" value='<c:out value="${vo.extrlIntrlckId}"/>'>
|
||||
<input type="hidden" name="mbtlnb" value='<c:out value="${vo.mbtlnb}"/>'>
|
||||
<input type="hidden" name="mbrNm" value='<c:out value="${vo.mbrNm}"/>'>
|
||||
<input type="hidden" name="email" value='<c:out value="${vo.email}"/>'>
|
||||
<input type="hidden" name="sex" value='<c:out value="${vo.sex}"/>'>
|
||||
<input type="hidden" name="brthDe" value='<c:out value="${vo.brthDe}"/>'>
|
||||
</c:if>
|
||||
<c:choose>
|
||||
<c:when test="${ not empty terms}">
|
||||
<c:forEach items="${ terms }" var="term" varStatus="status">
|
||||
<div class="signUpTerms__misc__item">
|
||||
<div class="b-checkbox-container">
|
||||
<label class="b-checkbox is-medium checkbox">
|
||||
<input type="hidden" class="termDisable" name="sopmalStplatInnb" value='<c:out value="${term.sopmalStplatInnb}"/>'>
|
||||
<input type="hidden" class="termDisable" name="stplatDvCds" value='<c:out value="${term.stplatDvCd}"/>'>
|
||||
<input type="hidden" class="termDisable termBoolean" name="stplatDvCdAts" value="N">
|
||||
<input class="termCheck" type="checkbox" <c:if test="${term.essntlAt == 'Y'}">name="essntl"</c:if> onchange="fn_set_checkbox(this);">
|
||||
<span class="check"></span>
|
||||
<span class="control-label">
|
||||
[<c:if test="${term.essntlAt == 'Y'}">필수</c:if><c:if test="${term.essntlAt == 'N'}">선택</c:if>]
|
||||
${term.cdNm}
|
||||
</span>
|
||||
</label>
|
||||
</div>
|
||||
<c:if test="${term.cnWritngAt == 'Y'}">
|
||||
<a class="signUpTerms__misc__detail" href="#terms-pop" rel="modal:open" onclick="fn_set_termPop('${term.cdNm}', ${status.count}); return false;">보기</a>
|
||||
<div id="stplatCn${status.count}" style="display:none"><c:out value="${term.stplatCn}" escapeXml="false"/></div>
|
||||
</c:if>
|
||||
</div>
|
||||
</c:forEach>
|
||||
</c:when>
|
||||
</c:choose>
|
||||
</div>
|
||||
</form>
|
||||
<div class="signUp__btnContainer-half">
|
||||
<button type="button" class="btn xl full outline signUp__signUpBtn" onclick="fn_move_joinGuidance();">취소</button>
|
||||
<button type="button" id="submit" class="btn xl full theme signUp__signUpBtn" onclick="fn_move_joinC();">동의하기</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
<%-- 공통 Footer --%>
|
||||
<jsp:include page="/WEB-INF/views/comm/Footer.jsp"/>
|
||||
|
||||
<!-- 이용약관 팝업 -->
|
||||
<div id="terms-pop" class="modal default" style="max-width: 620px;">
|
||||
<div class="modal-header">
|
||||
<div class="modal-header__title" id="termNm"><c:if test="${integrated}">GC ONE </c:if></div>
|
||||
</div>
|
||||
<div class="modal-content">
|
||||
<div class="terms_wrap ck-content" id="termCn"></div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<!-- <a href="#" rel="modal:close" class="btn large outline">닫기</a> -->
|
||||
<a href="#" rel="modal:close" class="btn theme large">확인</a>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
940
src/main/webapp/WEB-INF/views/sopmal/mbr/JoinC.jsp
Normal file
940
src/main/webapp/WEB-INF/views/sopmal/mbr/JoinC.jsp
Normal file
@@ -0,0 +1,940 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
|
||||
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
|
||||
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
|
||||
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
|
||||
<%@ taglib prefix="ui" uri="http://www.winbit.kr/ctl/ui"%>
|
||||
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld"%>
|
||||
|
||||
<%--
|
||||
Class Name : JoinC.jsp
|
||||
Description : 회원가입
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2024-02-05 최범식 최초 생성
|
||||
2024-08-19 이대환 독립몰/통합몰 구분
|
||||
--%>
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
|
||||
<head>
|
||||
<%-- 공통 include --%>
|
||||
<jsp:include page="/WEB-INF/views/comm/Include.jsp"/>
|
||||
</head>
|
||||
<script type="text/javascript">
|
||||
|
||||
$(document).ready(function() {
|
||||
fn_set_birthYears();
|
||||
fn_set_birthMonths();
|
||||
fn_show_phoneAuth();
|
||||
fn_check_stplat();
|
||||
first = 0;
|
||||
|
||||
$(".signUp__inputBox__alertText").hide();
|
||||
fn_alert_hide($("#mbrNm"), $("#mbrNmAlert"));
|
||||
fn_alert_hide($("#mbtlnb"), $("#mbtlnbAlert"));
|
||||
fn_alert_hide($("#mbtlCert"), $("#mbtlCertAlert"));
|
||||
fn_alert_hide($("#mbrId"), $("#mbrIdAlert"), 'id');
|
||||
fn_alert_hide($("#mbrPassword"), $("#mbrPasswordAlert"), 'pw');
|
||||
fn_alert_hide($("#mbrPasswordChk"), $("#mbrPasswordChkAlert"), 'pw');
|
||||
fn_alert_hide($("#id"), $("#emailAlert"));
|
||||
fn_alert_hide($('input[name="sex"]'), $("#sexAlert"));
|
||||
fn_alert_hide($("#dtlAdres"), $("#postcodeAlert"));
|
||||
fn_alert_hide_selected();
|
||||
|
||||
$('#regForm').on('keydown', function(e) {
|
||||
if (e.keyCode == 13) {
|
||||
e.preventDefault();
|
||||
}
|
||||
});
|
||||
$('#mbrNm').on('keydown', function(e) {
|
||||
if (e.keyCode == 13) {
|
||||
$('#phoneAuthBtn').click();
|
||||
}
|
||||
});
|
||||
$('#mbtlnb').on('keydown', function(e) {
|
||||
if (e.keyCode == 13) {
|
||||
$('#phoneAuthBtn').click();
|
||||
}
|
||||
});
|
||||
$('#mbtlCert').on('keydown', function(e) {
|
||||
if (e.keyCode == 13) {
|
||||
fn_confim_own();
|
||||
}
|
||||
});
|
||||
$('#mbrId').on('keydown', function(e) {
|
||||
if (e.keyCode == 13) {
|
||||
fn_check_mbrid();
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
/* ********************************************************
|
||||
* 약관동의 체크
|
||||
******************************************************** */
|
||||
const fn_check_stplat = function() {
|
||||
if(!$('input[name="sopmalStplatInnb"]').val()){
|
||||
alert('약관 동의 처리에 문제가 발생했습니다. 다시 시도해 주세요.');
|
||||
window.location.href = '/sopmal/mbr/selectJoinAgreeTermsForm';
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/* ********************************************************
|
||||
* domain 넣기
|
||||
******************************************************** */
|
||||
const fn_set_domain = function(_value) {
|
||||
|
||||
if (_value === '직접입력') {
|
||||
|
||||
$('#domain').attr('readonly', false);
|
||||
$('#domain').val('');
|
||||
} else {
|
||||
$('#domain').attr('readonly', true);
|
||||
$('#domain').val(_value);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* ********************************************************
|
||||
* email 합치기
|
||||
******************************************************** */
|
||||
const fn_make_email = function() {
|
||||
|
||||
let domain = $('#domain').val();
|
||||
let id = $('#id').val().trim();
|
||||
$('[name=email]').val(id + '@' + domain);
|
||||
|
||||
return $('[name=email]').val();
|
||||
}
|
||||
|
||||
/* ********************************************************
|
||||
* 생년월일 합치기
|
||||
******************************************************** */
|
||||
const fn_make_brthDe = function() {
|
||||
|
||||
var year = $('#select-brthYear').val();
|
||||
var month = ($('#select-Month').val()< 10 ? '0' : '') + $('#select-Month').val();
|
||||
$('[name=brthDe]').val(year + month + '01');
|
||||
}
|
||||
|
||||
/* ********************************************************
|
||||
* 전화번호 하이픈 제거
|
||||
******************************************************** */
|
||||
const fn_make_mbtlnb = function() {
|
||||
|
||||
var mbtlnb = $('#mbtlnb').val();
|
||||
$('[name=mbtlnb]').val(mbtlnb.trim().replace(/-/g, ''));
|
||||
}
|
||||
|
||||
/* ********************************************************
|
||||
* password check
|
||||
******************************************************** */
|
||||
const fn_check_password = function() {
|
||||
|
||||
var regular = /^((?=.*[a-zA-Z])(?=.*\d|.*\W)|(?=.*\d)(?=.*\W))[a-zA-Z\d\W]{6,20}$/;
|
||||
let mbrPassword = $('#mbrPassword');
|
||||
let mbrPasswordChk = $('#mbrPasswordChk');
|
||||
let mbrId = $('#mbrId');
|
||||
|
||||
if(!regular.test(mbrPassword.val())){
|
||||
alert('비밀번호는 영문 대소문자/숫자/특수문자 중 2가지 이상 조합한 6~20자로 입력해주세요.');
|
||||
mbrPassword.focus();
|
||||
return;
|
||||
}
|
||||
|
||||
if(!regular.test(mbrPasswordChk.val())){
|
||||
alert('비밀번호는 영문 대소문자/숫자/특수문자 중 2가지 이상 조합한 6~20자로 입력해주세요.');
|
||||
mbrPasswordChk.focus();
|
||||
return;
|
||||
}
|
||||
|
||||
if (mbrPassword.val() !== mbrPasswordChk.val()) {
|
||||
alert('비밀번호가 일치하지 않습니다.');
|
||||
mbrPassword.focus();
|
||||
return;
|
||||
}
|
||||
|
||||
if (mbrPassword.val() == mbrId.val()) {
|
||||
mbrPassword.focus();
|
||||
alert('비밀번호는 아이디와 동일할 수 없습니다.');
|
||||
return;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**********************************************
|
||||
* 이메일 형식 유효성 체크 (올바른 이메일 형식일 때 True)
|
||||
***********************************************/
|
||||
const fn_check_email = function() {
|
||||
|
||||
let mbrEmail = fn_make_email();
|
||||
var regular = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/i;
|
||||
|
||||
if(regular.test(mbrEmail)){
|
||||
return true;
|
||||
}else{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/* ********************************************************
|
||||
* 우편번호 찾기
|
||||
******************************************************** */
|
||||
const fn_set_postcode = function(_data) {
|
||||
|
||||
$('#adresDv').val(_data.addressType)
|
||||
$('#postcode').val(_data.postcode);
|
||||
$('#address').val(_data.addressType == '01' ? _data.roadAddress : _data.jibunAddress);
|
||||
}
|
||||
|
||||
/* ********************************************************
|
||||
* 생년 콤보박스
|
||||
******************************************************** */
|
||||
const fn_set_birthYears = function() {
|
||||
|
||||
let date = new Date();
|
||||
let year = date.getFullYear();
|
||||
|
||||
let combo = '';
|
||||
|
||||
combo ='<select class="md" name="brthYear" id="select-brthYear" title="생년">';
|
||||
combo +=' <option value="" selected disabled>년</option>';
|
||||
|
||||
for (let y = year - 14; y >= year - 101; y--) {
|
||||
combo +=' <option value="' + y + '">' + y + ' 년' + '</option>';
|
||||
}
|
||||
|
||||
combo +='</select>';
|
||||
|
||||
$('#birthYear').html(combo);
|
||||
$('#select-brthYear').niceSelect();
|
||||
}
|
||||
|
||||
/* ********************************************************
|
||||
* 생월 콤보박스
|
||||
******************************************************** */
|
||||
const fn_set_birthMonths = function() {
|
||||
|
||||
let combo = '';
|
||||
|
||||
combo ='<select class="md" name="brthMonth" id="select-Month" title="생월">';
|
||||
combo +=' <option value="" selected disabled>월</option>';
|
||||
for (let m = 1; m < 13; m++) {
|
||||
combo +=' <option value="' + m + '">' + m + ' 월' + '</option>';
|
||||
}
|
||||
combo +='</select>';
|
||||
|
||||
$('#birthMonth').html(combo);
|
||||
$('#select-Month').niceSelect();
|
||||
}
|
||||
|
||||
|
||||
/* ********************************************************
|
||||
* 휴대폰 인증 카운터
|
||||
******************************************************** */
|
||||
let seconds;
|
||||
let countdown;
|
||||
let timerRunning = false;
|
||||
const fn_set_timeOut = function() {
|
||||
|
||||
if (seconds >= 0) {
|
||||
|
||||
const minutes = Math.floor(seconds / 60).toString().padStart(2, '0');
|
||||
const remainingSeconds = (seconds % 60).toString().padStart(2, '0');
|
||||
|
||||
$('#timer').text(minutes+":"+remainingSeconds);
|
||||
|
||||
seconds--;
|
||||
} else {
|
||||
|
||||
fn_stop_timer();
|
||||
alert('인증번호 유효시간이 만료되었습니다.');
|
||||
}
|
||||
}
|
||||
|
||||
/* ********************************************************
|
||||
* 휴대폰 인증 번호 발송
|
||||
******************************************************** */
|
||||
first = 0;
|
||||
mbtlCert = '';
|
||||
const fn_sending_number = function() {
|
||||
|
||||
if(timerRunning){
|
||||
return;
|
||||
}
|
||||
|
||||
if(mbtlCert === $('#mbtlnb').val()){
|
||||
first++;
|
||||
}else{
|
||||
first = 0;
|
||||
}
|
||||
mbtlCert = $('#mbtlnb').val();
|
||||
|
||||
let mbrNm = $('#mbrNm').val();
|
||||
let mbtlnb = $('#mbtlnb').val().trim().replace(/-/g, '');
|
||||
let params = {
|
||||
'mbrNm' : mbrNm,
|
||||
'mbtlnb': mbtlnb
|
||||
};
|
||||
|
||||
$.ajax({
|
||||
type : 'post',
|
||||
url : '<c:url value="/sopmal/mbr/insertPhoneAuth"/>',
|
||||
data : params,
|
||||
dataType: 'json',
|
||||
success : function (Data) {
|
||||
|
||||
let result = Data.resBody.result;
|
||||
if(result.result == "success"){
|
||||
if (first > 0) {
|
||||
alert('인증번호가 재발송되었습니다.');
|
||||
} else if (first === 0) {
|
||||
alert('인증번호가 발송되었습니다.');
|
||||
first++;
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
$('#sndngInnb').val(result.sndngInnb);
|
||||
}else {
|
||||
alert('인증번호 발송에 실패했습니다.');
|
||||
fn_stop_timer();
|
||||
return;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$('#mbrNm').attr("readonly", true);
|
||||
$('#mbtlnb').attr("readonly", true);
|
||||
clearInterval(countdown);
|
||||
seconds = 180;
|
||||
|
||||
fn_set_timeOut();
|
||||
countdown = setInterval(fn_set_timeOut, 1000);
|
||||
timerRunning = true;
|
||||
}
|
||||
|
||||
/* ********************************************************
|
||||
* 타이머 정지 함수
|
||||
******************************************************** */
|
||||
const fn_stop_timer = function() {
|
||||
|
||||
if (timerRunning) {
|
||||
clearInterval(countdown);
|
||||
$('#timer').text('03:00');
|
||||
$('#mbtlCert').val('');
|
||||
$('#phoneAuthContent').hide();
|
||||
$('#mbrNm').attr("readonly", false);
|
||||
$('#mbtlnb').attr("readonly", false);
|
||||
timerRunning = false;
|
||||
}
|
||||
}
|
||||
|
||||
/* ********************************************************
|
||||
* 휴대폰 인증 확인
|
||||
******************************************************** */
|
||||
isChkd_own = false;
|
||||
const fn_confim_own = function() {
|
||||
|
||||
if (first <= 0) return;
|
||||
|
||||
let sndngInnb = $('#sndngInnb').val();
|
||||
let mbtlnb = $('#mbtlnb').val().trim().replace(/-/g, '');
|
||||
let crtnb = $('#mbtlCert').val();
|
||||
fn_stop_timer();
|
||||
|
||||
let params = {
|
||||
'sndngInnb': sndngInnb,
|
||||
'mbtlnb': mbtlnb,
|
||||
'crtnb' : crtnb
|
||||
};
|
||||
|
||||
$.ajax({
|
||||
type : 'post',
|
||||
url : '<c:url value="/sopmal/mbr/selectPhoneAuth"/>',
|
||||
data : params,
|
||||
dataType: 'json',
|
||||
success : function (Data) {
|
||||
|
||||
let result = Data.resBody.result;
|
||||
if(result.result == "success"){
|
||||
alert('인증되었습니다.');
|
||||
$('#phoneAuthOkBtn').show();
|
||||
$('#phoneAuthBtn').hide();
|
||||
isChkd_own = true;
|
||||
|
||||
//TODO : 메서드명 변경 필요 탈퇴회원 → 기존가입여부
|
||||
fn_check_mbrwithdrawal();
|
||||
$('#mbrNm').attr("readonly", true);
|
||||
$('#mbtlnb').attr("readonly", true);
|
||||
}else {
|
||||
alert('인증번호가 일치하지 않습니다.');
|
||||
return;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
/* ********************************************************
|
||||
* 기존 가입 여부 조회
|
||||
******************************************************** */
|
||||
const fn_check_mbrwithdrawal = function() {
|
||||
|
||||
let mbrNm = $('#mbrNm').val().trim();
|
||||
$('#mbrNm').val(mbrNm);
|
||||
let mbtlnb = $('#mbtlnb').val().trim().replace(/-/g, '');
|
||||
let params = {
|
||||
'mbrNm' : mbrNm,
|
||||
'mbtlnb': mbtlnb
|
||||
};
|
||||
|
||||
$.ajax({
|
||||
type : 'post',
|
||||
url : '<c:url value="/sopmal/mbr/selectMbrwithdrawalSearch"/>',
|
||||
data : params,
|
||||
dataType: 'json',
|
||||
success : function(result) {
|
||||
|
||||
let mbrWithDrawalList = result.resBody.result.mbrWithDrawalList;
|
||||
|
||||
fn_make_rejoinInforList(mbrWithDrawalList);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/* ********************************************************
|
||||
* 기존 가입 내역
|
||||
******************************************************** */
|
||||
const fn_make_rejoinInforList = function(_data) {
|
||||
|
||||
let tbodyClone;
|
||||
let isExtMember = false;
|
||||
let snsMemberCnt = 0;
|
||||
|
||||
if (_data.length > 0) {
|
||||
|
||||
let extMember = _data[0].mbrInnb;
|
||||
|
||||
$('#rejoinContainer').show();
|
||||
for (let i = 0; i < _data.length; i++) {
|
||||
|
||||
if (_data[i].dev >= 3) {
|
||||
|
||||
snsMemberCnt++;
|
||||
isExtMember = true;
|
||||
|
||||
tbodyClone +='<tr>';
|
||||
tbodyClone +=' <td style="display : none;">' + _data[i].mbrInnb + '</td>';
|
||||
tbodyClone +=' <td>' + _data[i].brand + '</td>';
|
||||
tbodyClone +=' <td>' + _data[i].extrlIntrlckDv + '</td>';
|
||||
tbodyClone +=' <td>' + _data[i].emailAdres + '</td>';
|
||||
tbodyClone +='</tr>';
|
||||
} else {
|
||||
|
||||
$('#rejoinContainer').hide();
|
||||
alert('이미 가입된 정보입니다. 로그인해 주세요.');
|
||||
snsMemberCnt = 0;
|
||||
isExtMember = false;
|
||||
// window.location.href = '<c:out value="${issuerUri}"/>/index';
|
||||
window.location.href = '/sopmal/login';
|
||||
break;
|
||||
}
|
||||
}
|
||||
tbodyClone +='<tr style="display:none;"><td><input type="text" name="extMember" value="'+extMember+'"/></td></tr>';
|
||||
$('#rejoinSelect').html(tbodyClone);
|
||||
|
||||
if(snsMemberCnt > 1){
|
||||
$('#rejoinSelect tr').each(function() {
|
||||
if (!($(this).find('input[name="extMember"]').length) && $(this).find('td').eq(0).text().trim() !== String(extMember)) {
|
||||
$(this).remove();
|
||||
}
|
||||
});
|
||||
}
|
||||
if (isExtMember) {
|
||||
alert('인증되었습니다. 인증하신 정보로 가입된 계정 정보가 있습니다. 계정정보 연동을 진행합니다.');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* ********************************************************
|
||||
* 회원 가입
|
||||
******************************************************** */
|
||||
const fn_regist_member = function() {
|
||||
disableButton('#registBtn');
|
||||
|
||||
if(fn_check_stplat()) {
|
||||
fn_regist_fail();
|
||||
return;
|
||||
};
|
||||
|
||||
if (!isChkd_own) {
|
||||
alert('휴대폰 인증을 해주세요.');
|
||||
$('#mbtlnb').focus();
|
||||
fn_regist_fail();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!isChkd_Dup) {
|
||||
alert('아이디 중복 확인을 해주세요.');
|
||||
$('#mbrId').focus();
|
||||
fn_regist_fail();
|
||||
return;
|
||||
}
|
||||
|
||||
if(!fn_check_password()) {
|
||||
fn_regist_fail();
|
||||
return;
|
||||
}
|
||||
|
||||
if(!fn_check_email()) {
|
||||
alert('올바른 이메일 형식이 아닙니다.');
|
||||
$('#id').focus();
|
||||
fn_regist_fail();
|
||||
return;
|
||||
}
|
||||
|
||||
if ($('#select-brthYear').val() == null || $('#select-Month').val() == null) {
|
||||
alert('생년월을 선택해 주세요.');
|
||||
$("#brthDeAlert").show();
|
||||
document.getElementById('birthYear').scrollIntoView();
|
||||
fn_regist_fail();
|
||||
return;
|
||||
}
|
||||
|
||||
if ($('input[name="sex"]:checked').val() == null) {
|
||||
alert('성별을 선택해 주세요.');
|
||||
$("#sexAlert").show();
|
||||
$('#men').focus();
|
||||
fn_regist_fail();
|
||||
return;
|
||||
}
|
||||
|
||||
if ($('#postcode').val().trim() == '' || $('#address').val().trim() == '') {
|
||||
alert('우편번호를 선택해 주세요.');
|
||||
$("#postcodeAlert").show();
|
||||
document.getElementById('postcodeBtn').scrollIntoView();
|
||||
fn_regist_fail();
|
||||
return;
|
||||
}
|
||||
|
||||
if ($('#dtlAdres').val().trim() == '') {
|
||||
alert('상세주소를 입력해 주세요.');
|
||||
$('#dtlAdres').focus();
|
||||
fn_regist_fail();
|
||||
return;
|
||||
}
|
||||
|
||||
if(!confirm('회원가입을 <spring:message code="confirm.common.predicate"/>')){
|
||||
fn_regist_fail();
|
||||
return;
|
||||
}
|
||||
fn_make_brthDe();
|
||||
fn_make_mbtlnb();
|
||||
|
||||
let params = $('#regForm').serialize();
|
||||
$.ajax({
|
||||
type : 'post',
|
||||
url : '<c:url value="/sopmal/mbr/insertUsrJoinRegist"/>',
|
||||
data : params,
|
||||
dataType: 'json',
|
||||
success : function (result) {
|
||||
|
||||
const response = result.resBody.result;
|
||||
const errStatus = response.status;
|
||||
|
||||
if(errStatus === 500){
|
||||
alert('회원가입에 실패하였습니다. 회원가입 안내 화면으로 돌아갑니다.');
|
||||
location.replace('/sopmal/mbr/selectJoinGuidance');
|
||||
fn_regist_fail();
|
||||
return;
|
||||
}
|
||||
|
||||
const mbrInnb = response.mbrInnb;
|
||||
const marketingAgree = response.marketingAgree;
|
||||
|
||||
if (mbrInnb !== null) {
|
||||
// alert($('#registType').val()+'에 가입되었습니다.');
|
||||
location.replace('/sopmal/mbr/selectJoinCompleteR'+(marketingAgree=='Y'?'?stplatDvCdAts=Y':''));
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/* ********************************************************
|
||||
* 회원 가입 실패
|
||||
******************************************************** */
|
||||
const fn_regist_fail = function() {
|
||||
enableButton('#registBtn');
|
||||
}
|
||||
|
||||
/* ********************************************************
|
||||
* 아이디 중복 확인
|
||||
******************************************************** */
|
||||
dupList = [];
|
||||
isChkd_Dup = false;
|
||||
const fn_check_mbrid = function() {
|
||||
|
||||
var regular = /^(?=.*[a-zA-Z])[a-zA-Z\d_]{6,20}$/;
|
||||
let mbrid = $('#mbrId').val().trim();
|
||||
$('#mbrId').val(mbrid);
|
||||
|
||||
if(!regular.test(mbrid)) {
|
||||
alert('아이디는 영문 소문자, 숫자, 밑줄만 사용 가능하며, 6~20자 이내로 입력해주세요.');
|
||||
return
|
||||
}
|
||||
|
||||
if(!isChkd_Dup) {
|
||||
let params = {
|
||||
'mbrId' : mbrid
|
||||
};
|
||||
|
||||
$.ajax({
|
||||
type : 'post',
|
||||
url : '<c:url value="/sopmal/mbr/selectIdDplctCnfirm"/>',
|
||||
data : params,
|
||||
dataType: 'json',
|
||||
success : function(Data) {
|
||||
|
||||
if (Data.resBody.result.message === 'impossible'){
|
||||
alert('\"' + mbrid + '\" 은 이용중인 아이디 입니다.');
|
||||
dupList.push(mbrid);
|
||||
$("#mbrIdAlert").html('이미 사용중인 아이디입니다.');
|
||||
$("#mbrIdAlert").show();
|
||||
}
|
||||
if (Data.resBody.result.message === 'possible'){
|
||||
isChkd_Dup = true;
|
||||
alert('\"' + mbrid + '\" 은 사용 가능합니다.');
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/* ********************************************************
|
||||
* 휴대폰 인증 버튼 클릭시, 휴대폰 인증 박스 노출
|
||||
******************************************************** */
|
||||
const fn_show_phoneAuth = function() {
|
||||
let phoneAuthBtn = $('#phoneAuthBtn');
|
||||
let phoneAuthContent = $('#phoneAuthContent');
|
||||
|
||||
phoneAuthContent.hide();
|
||||
|
||||
phoneAuthBtn.click(function () {
|
||||
if(!$('#mbrNm').val()){
|
||||
alert('이름을 입력해 주세요.');
|
||||
$('#mbrNm').focus();
|
||||
return;
|
||||
}else if(!$('#mbtlnb').val()){
|
||||
alert('휴대폰 번호를 입력해 주세요.');
|
||||
$('#mbtlnb').focus();
|
||||
return;
|
||||
}
|
||||
|
||||
$('#phoneAuthContent').show();
|
||||
$('#mbtlCert').focus();
|
||||
fn_sending_number();
|
||||
});
|
||||
}
|
||||
|
||||
/* ********************************************************
|
||||
* 메인화면 이동(뒤로 가기))
|
||||
******************************************************** */
|
||||
const fn_move_mainPage = function() {
|
||||
history.back();
|
||||
if(history.length <= 1){
|
||||
window.close();
|
||||
}
|
||||
}
|
||||
|
||||
/* ********************************************************
|
||||
* 사용자 입력값이 입력될 때 alertText 숨기기
|
||||
******************************************************** */
|
||||
const fn_alert_hide = (inputId, alertId, type) => {
|
||||
inputId.on('input', function () {
|
||||
switch(type){
|
||||
case 'id':
|
||||
var regular = /^(?=.*[a-zA-Z])[a-zA-Z\d_]{6,20}$/;
|
||||
if (!$(this).val()) {
|
||||
alertId.html('아이디를 입력해 주세요.');
|
||||
}else if(dupList.includes(inputId.val())){
|
||||
alertId.html('이미 사용중인 아이디입니다.');
|
||||
alertId.show();
|
||||
return;
|
||||
}else if(!regular.test(inputId.val())){
|
||||
alertId.html('아이디는 영문 소문자, 숫자, 밑줄만 사용 가능하며, 6~20자 이내로 입력해주세요.');
|
||||
alertId.show();
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case 'pw':
|
||||
var regular = /^((?=.*[a-zA-Z])(?=.*\d|.*\W)|(?=.*\d)(?=.*\W))[a-zA-Z\d\W]{6,20}$/;
|
||||
if (!$(this).val()) {
|
||||
alertId.html('비밀번호를 입력해 주세요.');
|
||||
}else if(!regular.test(inputId.val())){
|
||||
alertId.html('비밀번호는 영문 대소문자/숫자/특수문자 중 2가지 이상 조합한 6~20자로 입력해주세요.');
|
||||
alertId.show();
|
||||
return;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
alertId.hide();
|
||||
if (!$(this).val()) {
|
||||
alertId.show();
|
||||
}
|
||||
})
|
||||
};
|
||||
|
||||
/* ********************************************************
|
||||
* 사용자 입력값이 입력될 때 alertText 숨기기
|
||||
******************************************************** */
|
||||
const fn_alert_hide_selected = () => {
|
||||
let birthSelected = false;
|
||||
|
||||
$("#birthYear").on('change', function() {
|
||||
if(birthSelected){
|
||||
$("#brthDeAlert").hide();
|
||||
}
|
||||
birthSelected = true;
|
||||
})
|
||||
$("#birthMonth").on('change', function() {
|
||||
if(birthSelected){
|
||||
$("#brthDeAlert").hide();
|
||||
}
|
||||
birthSelected = true;
|
||||
})
|
||||
}
|
||||
|
||||
/*******************************************************
|
||||
* 앱 환경을 검증하고 우편번호 버튼 함수를 변경하는 함수
|
||||
*******************************************************/
|
||||
function initPostcodeInterface() {
|
||||
// 앱 환경에서 사용할 모바일용 함수명 정의
|
||||
const MOBILE_POSTCODE_FUNCTION = "fn_select_postcode_app";
|
||||
|
||||
// 앱 인터페이스 초기화 확인
|
||||
if (window.app) {
|
||||
console.log("앱 환경 감지됨, 우편번호 함수 변경");
|
||||
changePostcodeFunction(MOBILE_POSTCODE_FUNCTION);
|
||||
} else {
|
||||
console.log("앱 인터페이스를 기다리는 중...");
|
||||
let checkCount = 0;
|
||||
const maxChecks = 10; // 최대 5초(500ms * 10)까지 시도
|
||||
const checkInterval = setInterval(function() {
|
||||
checkCount++;
|
||||
if (window.app) {
|
||||
clearInterval(checkInterval);
|
||||
console.log("앱 인터페이스 초기화 완료, 우편번호 함수 변경");
|
||||
changePostcodeFunction(MOBILE_POSTCODE_FUNCTION);
|
||||
} else if (checkCount >= maxChecks) {
|
||||
clearInterval(checkInterval);
|
||||
console.warn("앱 인터페이스를 찾을 수 없습니다. 최대 시도 횟수 초과.");
|
||||
}
|
||||
}, 500);
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************
|
||||
* 우편번호 버튼의 onclick 함수를 변경하는 함수
|
||||
*******************************************************/
|
||||
function changePostcodeFunction(newFunctionName) {
|
||||
console.log("changePostcodeFunction 호출");
|
||||
console.log("newFunctionName: " + newFunctionName);
|
||||
const postcodeBtn = document.getElementById('postcodeBtn');
|
||||
if (postcodeBtn) {
|
||||
postcodeBtn.setAttribute('onclick', newFunctionName + '(fn_set_postcode);');
|
||||
console.log('우편번호 버튼 함수가' + newFunctionName + '으로 변경되었습니다.');
|
||||
} else {
|
||||
console.warn('우편번호 버튼을 찾을 수 없습니다.');
|
||||
}
|
||||
}
|
||||
|
||||
// 페이지 로드 시 함수 실행
|
||||
document.addEventListener('DOMContentLoaded', initPostcodeInterface);
|
||||
|
||||
</script>
|
||||
|
||||
<body>
|
||||
<%-- 공통 Header --%>
|
||||
<jsp:include page="/WEB-INF/views/comm/Header.jsp"/>
|
||||
<!-- 메인 컨텐츠 영역 -->
|
||||
<main>
|
||||
<c:set var="sopmalInfo" value="${resultMap.sopmalInfo}" />
|
||||
<c:set var="integrated" value="${sopmalInfo.sopmalTyCd == '01'}" />
|
||||
<div class="sub-wrapper">
|
||||
<div class="sub-content">
|
||||
<div class="page-title center">
|
||||
<c:choose>
|
||||
<c:when test="${integrated}">
|
||||
<h2 class="page-title__title">GC ONE(통합회원) 가입</h2>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<h2 class="page-title__title">회원가입</h2>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
<div class="ck-content">
|
||||
<c:out value='${sopmalInfo.joinGuidanceSj}' escapeXml="false"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="signUp">
|
||||
<div class="signUp__required"><span class="required-asterisk">*</span> 필수입력사항</div>
|
||||
<form id="regForm">
|
||||
<input type="hidden" name="sopmalStplatInnb" value="<c:out value='${resultMap.sopmalStplatInnb}'/>"/>
|
||||
<input type="hidden" name="stplatDvCds" value="<c:out value='${resultMap.stplatDvCds}'/>"/>
|
||||
<input type="hidden" name="stplatDvCdAts" value="<c:out value='${resultMap.stplatDvCdAts}'/>"/>
|
||||
<c:choose>
|
||||
<c:when test="${integrated}">
|
||||
<input type="hidden" id="registType" value='GC ONE(통합회원)'>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<input type="hidden" id="registType" value='<c:out value="${sopmalInfo.sopmalNm}"/>'>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
<div class="signUp__inputBox">
|
||||
<div class="signUp__inputBox__item">
|
||||
<div class="signUp__inputBox__itemTitle">이름<span class="required-asterisk">*</span></div>
|
||||
<input type="text" class="input-text full" name="mbrNm" id="mbrNm" title="이름" placeholder="이름을 입력해 주세요.">
|
||||
<p class="signUp__inputBox__alertText" id="mbrNmAlert">이름을 입력해 주세요.</p>
|
||||
</div>
|
||||
<div class="signUp__inputBox__item">
|
||||
<div class="signUp__inputBox__itemTitle">휴대전화<span class="required-asterisk">*</span></div>
|
||||
<div class="inputWithBtn">
|
||||
<input type="text" class="input-text full number" id="mbtlnb" title="휴대폰" placeholder="휴대폰번호 입력 (’-’ 없이)" oninput="fn_set_event(this, 'keyup', fn_fmt_telno)" maxlength="13">
|
||||
<input type="hidden" name="mbtlnb">
|
||||
<button type="button" class="btn md theme outline" id="phoneAuthBtn"><spring:message code="button.certification"/></button>
|
||||
<!-- 인증완료시 버튼 -->
|
||||
<button type="button" class="btn md outline" id="phoneAuthOkBtn" style="display:none;"><spring:message code="button.certificationDone"/></button>
|
||||
</div>
|
||||
<p class="signUp__inputBox__alertText" id="mbtlnbAlert">휴대폰 번호를 입력해 주세요.</p>
|
||||
<div class="phoneAuth" id="phoneAuthContent">
|
||||
<input type="hidden" id="sndngInnb">
|
||||
<div>
|
||||
<div class="inputWithBtn">
|
||||
<div class="inputTimer">
|
||||
<input type="text" class="input-text full number" id="mbtlCert" title="인증번호" placeholder="인증번호 입력" maxlength="6">
|
||||
<span class="inputTimer__time" id="timer">03:00</span>
|
||||
</div>
|
||||
<button type="button" class="btn md gray" onclick="fn_confim_own();"><spring:message code="button.ok"/></button>
|
||||
</div>
|
||||
<p class="signUp__inputBox__alertText" id="mbtlCertAlert">인증번호를 입력해 주세요.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="signUp__inputBox__item" id="rejoinContainer" style="display: none;">
|
||||
<div class="signUp__inputBox__itemTitle">가입 계정 정보<span
|
||||
class="required-asterisk">*</span>
|
||||
</div>
|
||||
<p class="textInfo"><i class="icon icon_textInfo--sm"></i> 인증하신 정보로 가입된 계정 정보입니다. 해당
|
||||
정보로 연동되어 간편 가입이 진행됩니다.
|
||||
</p>
|
||||
<table class="table vertical tight">
|
||||
<caption>해당 테이블에 대한 설명</caption>
|
||||
<!-- 각 열 width 설정 -->
|
||||
<colgroup>
|
||||
<col style="width: 30%;">
|
||||
<col style="width: auto;">
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="display:none;">회원 고유번호</th>
|
||||
<th>가입사이트</th>
|
||||
<th>가입방식</th>
|
||||
<th>이메일</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="rejoinSelect"></tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="signUp__inputBox__item">
|
||||
<div class="signUp__inputBox__itemTitle">아이디<span class="required-asterisk">*</span></div>
|
||||
<div class="inputWithBtn">
|
||||
<input type="text" class="input-text full" name="mbrId" id="mbrId" title="아이디" placeholder="영문 소문자, 숫자, 밑줄(만) 사용 가능, 6~20자" oninput="this.value = this.value.toLowerCase();" onchange="isChkd_Dup = false;" maxlength="20">
|
||||
<button type="button" class="btn md outline" onclick="fn_check_mbrid();">중복 확인</button>
|
||||
</div>
|
||||
<p class="signUp__inputBox__alertText" id="mbrIdAlert">아이디를 입력해 주세요.</p>
|
||||
</div>
|
||||
<div class="signUp__inputBox__item">
|
||||
<div class="signUp__inputBox__itemTitle">비밀번호<span class="required-asterisk">*</span></div>
|
||||
<input type="password" class="input-text full" name="mbrPassword" id="mbrPassword" title="비밀번호" placeholder="영문 대소문자/숫자/특수문자 중 2가지 이상 포함 6~20자" maxlength="20">
|
||||
<p class="signUp__inputBox__alertText" id="mbrPasswordAlert">비밀번호를 입력해 주세요.</p>
|
||||
</div>
|
||||
<div class="signUp__inputBox__item">
|
||||
<div class="signUp__inputBox__itemTitle">비밀번호 확인<span class="required-asterisk">*</span></div>
|
||||
<input type="password" class="input-text full" name="mbrPasswordChk" id="mbrPasswordChk" title="비밀번호 확인" placeholder="비밀번호를 한번 더 입력해주세요." maxlength="20">
|
||||
<p class="signUp__inputBox__alertText" id="mbrPasswordChkAlert">비밀번호를 입력해 주세요.</p>
|
||||
</div>
|
||||
<div class="signUp__inputBox__item">
|
||||
<div class="signUp__inputBox__itemTitle">이메일<span class="required-asterisk">*</span>
|
||||
<input type="hidden" name="email" value=""/>
|
||||
</div>
|
||||
<div class="inputEmail">
|
||||
<input class="input-text full" type="email" id="id" title="이메일 id" placeholder="이메일" maxlength="25">
|
||||
<span class="inputEmail__at">@</span>
|
||||
<input class="input-text full" type="text" id="domain" title="이메일 domain" maxlength="25">
|
||||
<div class="select-box">
|
||||
<select name="domain" title="이메일 자동발송 발신주소" onchange="fn_set_domain(this.value);">
|
||||
<c:forEach var="cgn001" items="${resultMap.cgn001}" varStatus="status">
|
||||
<option value="${cgn001.cdNm}" ${f:setSelected(cgn001.cd, '99')}><c:out value="${cgn001.cdNm}"/></option>
|
||||
</c:forEach>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<p class="signUp__inputBox__alertText" id="emailAlert">이메일을 입력해 주세요.</p>
|
||||
</div>
|
||||
<div class="signUp__inputBox__item">
|
||||
<div class="signUp__inputBox__itemTitle">생년월<span class="required-asterisk">*</span></div>
|
||||
<div class="inputHalf">
|
||||
<input type="hidden" name="brthDe">
|
||||
<div class="select-box" id="birthYear"></div>
|
||||
<div class="select-box" id="birthMonth"></div>
|
||||
</div>
|
||||
<p class="signUp__inputBox__alertText" id="brthDeAlert">생년월을 선택해 주세요.</p>
|
||||
</div>
|
||||
<div class="signUp__inputBox__item">
|
||||
<div class="signUp__inputBox__itemTitle">성별<span class="required-asterisk">*</span></div>
|
||||
<div class="custom-radio-container">
|
||||
<div class="custom-radio is-medium">
|
||||
<input type="radio" id="men" name="sex" value="M">
|
||||
<label for="men">남자</label>
|
||||
</div>
|
||||
<div class="custom-radio is-medium">
|
||||
<input type="radio" id="women" name="sex" value="F">
|
||||
<label for="women">여자</label>
|
||||
</div>
|
||||
</div>
|
||||
<p class="signUp__inputBox__alertText" id="sexAlert">성별을 선택해 주세요.</p>
|
||||
</div>
|
||||
<div class="signUp__inputBox__item">
|
||||
<div class="signUp__inputBox__itemTitle">주소<span class="required-asterisk">*</span></div>
|
||||
<div class="inputAddress">
|
||||
<div class="inputAddress__postalCode">
|
||||
<input type="text" class="input-text" id="postcode" name="zip" title="우편번호" placeholder="우편번호" readonly>
|
||||
<button type="button" id="postcodeBtn" class="btn md theme outline" onclick="fn_select_postcode(fn_set_postcode);"><spring:message code="button.zipcode"/></button>
|
||||
</div>
|
||||
<input type="text" class="input-text full" id="address" name="lnbAdres" title="주소" placeholder="주소" readonly>
|
||||
<input type="text" class="input-text full" id="dtlAdres" name="dtlAdres" title="상세주소" placeholder="나머지 주소를 입력해 주세요.">
|
||||
<input type="hidden" id="adresDv" name="adresDv">
|
||||
</div>
|
||||
<p class="signUp__inputBox__alertText" id="postcodeAlert">주소를 입력해 주세요.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="signUp__btnContainer-half">
|
||||
<button type="button" class="btn xl full outline signUp__signUpBtn" onclick="fn_move_mainPage();"><spring:message code="button.cancel"/></button>
|
||||
<button type="button" id="registBtn" class="btn xl full theme signUp__signUpBtn" onclick="fn_regist_member();"><spring:message code="button.insert"/></button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
<%-- 공통 Footer --%>
|
||||
<jsp:include page="/WEB-INF/views/comm/Footer.jsp"/>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
89
src/main/webapp/WEB-INF/views/sopmal/mbr/JoinCompleteR.jsp
Normal file
89
src/main/webapp/WEB-INF/views/sopmal/mbr/JoinCompleteR.jsp
Normal file
@@ -0,0 +1,89 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
|
||||
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
|
||||
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
|
||||
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
|
||||
<%@ taglib prefix="ui" uri="http://www.winbit.kr/ctl/ui"%>
|
||||
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld"%>
|
||||
|
||||
<%--
|
||||
Class Name : JoinCompleteR.jsp
|
||||
Description : 회원가입 완료
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2024-02-05 최범식 최초 생성
|
||||
2024-08-19 이대환 독립몰/통합몰 구분
|
||||
--%>
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
|
||||
<head>
|
||||
<%-- 공통 include --%>
|
||||
<jsp:include page="/WEB-INF/views/comm/Include.jsp"/>
|
||||
</head>
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
$(document).ready(function() {
|
||||
var urlParams = new URLSearchParams(window.location.search);
|
||||
urlParams.has('joinMthCd') && $('#joinMthCd').val(urlParams.get('joinMthCd'));
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
<body>
|
||||
<%-- 공통 Header --%>
|
||||
<jsp:include page="/WEB-INF/views/comm/Header.jsp"/>
|
||||
<!-- 헤더 영역(Type3) -->
|
||||
<main>
|
||||
<c:set var="sopmalInfo" value="${resultMap.sopmalInfo}" />
|
||||
<c:set var="integrated" value="${sopmalInfo.sopmalTyCd == '01'}" />
|
||||
<div class="sub-wrapper">
|
||||
<div class="sub-content">
|
||||
<div class="page-title center">
|
||||
<c:choose>
|
||||
<c:when test="${integrated}">
|
||||
<h2 class="page-title__title">GC ONE(통합회원) 가입</h2>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<h2 class="page-title__title">회원가입</h2>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
<!-- <div class="ck-content"> -->
|
||||
<%-- <c:out value='${sopmalInfo.joinGuidanceSj}' escapeXml="false"/> --%>
|
||||
<!-- </div> -->
|
||||
</div>
|
||||
<div class="signUpComplete">
|
||||
<div class="signUpComplete__inner">
|
||||
<img src="/pc/images/image_signUpComplete.png" alt="">
|
||||
<div class="signUpComplete__box">
|
||||
<c:out value='${sopmalInfo.joinComptWords}' escapeXml='false'/>
|
||||
</div>
|
||||
<c:choose>
|
||||
<c:when test="${StplatDvCdAt == 'Y'}">
|
||||
<p class="textInfo">회원님은 <fmt:formatDate value="<%= new java.util.Date()%>" pattern="yyyy-MM-dd"/>에 <c:out value='${sopmalInfo.sopmalNm}'/>의 마케팅 정보 수신을 동의하셨습니다.</p>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<p class="textInfo">회원님은 <fmt:formatDate value="<%= new java.util.Date()%>" pattern="yyyy-MM-dd"/>에 <c:out value='${sopmalInfo.sopmalNm}'/>의 마케팅 정보 수신을 거부하셨습니다.</p><br>
|
||||
<p class="textInfo"><i class="icon icon_textInfo--sm"></i>다양한 혜택 및 서비스를 받으시려면 마케팅 수신 활용에 동의해주시기 바랍니다.</p>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
<input type="hidden" id="joinMthCd" value="general">
|
||||
</div>
|
||||
<div class="signUp__btnContainer-half">
|
||||
<a href="<c:url value='/index'/>" class="btn xl full theme">쇼핑하러 가기</a>
|
||||
<c:if test="${!isAuthenticated}">
|
||||
<a href="<c:url value='/login'/>" class="btn xl full theme">로그인</a>
|
||||
</c:if>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
<%-- 공통 Footer --%>
|
||||
<jsp:include page="/WEB-INF/views/comm/Footer.jsp"/>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
128
src/main/webapp/WEB-INF/views/sopmal/mbr/JoinGuidanceR.jsp
Normal file
128
src/main/webapp/WEB-INF/views/sopmal/mbr/JoinGuidanceR.jsp
Normal file
@@ -0,0 +1,128 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
|
||||
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
|
||||
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
|
||||
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
|
||||
<%@ taglib prefix="ui" uri="http://www.winbit.kr/ctl/ui"%>
|
||||
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld"%>
|
||||
|
||||
<%--
|
||||
Class Name : JoinGuidanceR.jsp
|
||||
Description : 회원가입 안내
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2024-02-05 최범식 최초 생성
|
||||
2024-08-17 이대환 독립몰/통합몰 구분
|
||||
--%>
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
|
||||
<head>
|
||||
<%-- 공통 include --%>
|
||||
<jsp:include page="/WEB-INF/views/comm/Include.jsp"/>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<%-- 공통 Header --%>
|
||||
<jsp:include page="/WEB-INF/views/comm/Header.jsp"/>
|
||||
<!-- 헤더 영역(Type3) -->
|
||||
<main>
|
||||
<c:set var="sopmalInfo" value="${resultMap.sopmalInfo}" />
|
||||
<c:set var="integrated" value="${sopmalInfo.sopmalTyCd == '01'}" />
|
||||
<input type="hidden" id="sopmalCd" value="<c:out value="${sopmalInfo.sopmalCd}"/>">
|
||||
<div class="sub-wrapper">
|
||||
<div class="sub-content">
|
||||
<div class="page-title center">
|
||||
<c:choose>
|
||||
<c:when test="${integrated}">
|
||||
<h2 class="page-title__title">GC ONE(통합회원) 가입</h2>
|
||||
</c:when>
|
||||
<c:otherwise>
|
||||
<h2 class="page-title__title">회원가입</h2>
|
||||
</c:otherwise>
|
||||
</c:choose>
|
||||
<div class="ck-content">
|
||||
<c:out value='${sopmalInfo.joinGuidanceSj}' escapeXml="false"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="signUp-promotion">
|
||||
<div class="signUp-promotion__introBox first ck-content">
|
||||
<c:out value='${sopmalInfo.joinGuidanceWords}' escapeXml='false'/>
|
||||
</div>
|
||||
<c:if test="${!isAuthenticated}">
|
||||
<div class="signUp-promotion__col-2 signUpLink" style="margin-bottom: 40px;">
|
||||
<a href="<c:url value='/sopmal/mbr/selectJoinAgreeTermsForm'/>" class="btn lg theme">바로 가입 할래요</a>
|
||||
<%--<a class="btn lg outline" onclick="$('html, body').animate({scrollTop: $('.signUp-promotion__section').offset().top}, 0);return false;" style="cursor: pointer;">가입시 혜택부터 볼래요</a>--%>
|
||||
<div class="login__sns">
|
||||
<c:if test="${sopmalInfo.kakaoIntrlckAt == 'Y'}"><button type="button" class="login__sns__btn kakao" onclick="openSocialLoginPopup('KAKAO');"><i class="icon icon_kakaoLogin"></i>카카오로 회원가입</button></c:if>
|
||||
<c:if test="${sopmalInfo.naverIntrlckAt == 'Y'}"><button type="button" class="login__sns__btn naver" onclick="openSocialLoginPopup('NAVER');"><i class="icon icon_naverLogin"></i>네이버로 회원가입</button></c:if>
|
||||
</div>
|
||||
</div>
|
||||
</c:if>
|
||||
<div class="signUp-promotion__section">
|
||||
<h5 class="signUp-promotion__section__title"><c:if test="${integrated}">GC ONE (통합 회원) </c:if>주요 혜택</h5>
|
||||
<div class="signUp-promotion__col-3 ck-content">
|
||||
<c:out value='${sopmalInfo.joinBnef}' escapeXml='false'/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
<%-- 공통 Footer --%>
|
||||
<jsp:include page="/WEB-INF/views/comm/Footer.jsp"/>
|
||||
<script type="text/javascript">
|
||||
|
||||
$(document).ready(function() {
|
||||
let signUpPromo = $('.signUp-promotion__col-3.ck-content');
|
||||
let figureTable = signUpPromo.find('figure.table');
|
||||
if(figureTable.length == 4){
|
||||
signUpPromo.removeClass('signUp-promotion__col-3').addClass('signUp-promotion__col-2');
|
||||
}
|
||||
});
|
||||
|
||||
/* ********************************************************
|
||||
* SNS 소셜 로그인
|
||||
******************************************************** */
|
||||
const openSocialLoginPopup = (provider) => {
|
||||
var accessUrl = '${accessUrl}';
|
||||
var redirectUri = accessUrl + '/sopmal/mbr/selectJoinAgreeTermsForm';
|
||||
|
||||
var width = 600;
|
||||
var height = 600;
|
||||
var left = (screen.width / 2) - (width / 2);
|
||||
var top = (screen.height / 2) - (height / 2);
|
||||
var url = '${ssoUrl}/oauth2/authorization/' + $('#sopmalCd').val() + "-" + provider
|
||||
+ '?redirect_uri=' + encodeURIComponent(redirectUri) + '&oauth2_type=join&access_url='+ encodeURIComponent(accessUrl);
|
||||
|
||||
window.open(url, 'SocialLoginPopup', 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, copyhistory=no, width=' + width + ', height=' + height + ', top=' + top + ', left=' + left);
|
||||
}
|
||||
|
||||
const receiveMessage = (event) => {
|
||||
if(event.origin !== "${ssoUrl}") {
|
||||
return;
|
||||
}
|
||||
if(event.data.type === 'LOGIN_SUCCESS') {
|
||||
var tempForm = $('<form>', {
|
||||
method: 'post',
|
||||
action: event.data.redirectUrl
|
||||
});
|
||||
$.each(event.data, function(key, value) {
|
||||
$('<input>', {
|
||||
type: 'hidden',
|
||||
name: key,
|
||||
value: value
|
||||
}).appendTo(tempForm);
|
||||
});
|
||||
tempForm.appendTo('body');
|
||||
tempForm.submit();
|
||||
tempForm.remove();
|
||||
}
|
||||
}
|
||||
|
||||
window.addEventListener('message', receiveMessage, false);
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,40 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
|
||||
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
|
||||
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
|
||||
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
|
||||
<%@ taglib prefix="ui" uri="http://www.winbit.kr/ctl/ui"%>
|
||||
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld"%>
|
||||
|
||||
<%--
|
||||
Class Name : MbrMarktAgreePopupR.jsp
|
||||
Description : 마케팅 수신동의 팝업
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2025-02-08 유재현 최초 생성
|
||||
--%>
|
||||
<div id="mbrMarktClauseAgreePopup" class="modal default" style="max-width: 620px;">
|
||||
<div class="modal-header">
|
||||
<%-- ${resultMap}--%>
|
||||
<div class="modal-header__title" id = "mbrMarktClauseAgree-sj">
|
||||
<c:forEach var="stplat" items="${resultMap.stplat}">
|
||||
<c:if test="${stplat.cd eq '05'}">
|
||||
<c:out value="${stplat.cdNm}"/>
|
||||
</c:if>
|
||||
</c:forEach>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-content ck-content" id = "mbrMarktClauseAgree-content">
|
||||
<c:forEach var="clauseList" items="${resultMap.clauseList}" varStatus="staus">
|
||||
<c:if test="${staus.first}">
|
||||
${clauseList.stplatCn}
|
||||
</c:if>
|
||||
</c:forEach>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<a href="#" rel="modal:close" class="btn theme large" onclick="fn_global_mbr_markt_agree_at('Y');">동의</a>
|
||||
<a href="#" rel="modal:close" class="btn large outline" onclick="fn_global_mbr_markt_agree_at('N');">비동의</a>
|
||||
</div>
|
||||
</div>
|
||||
21
src/main/webapp/WEB-INF/views/sopmal/mbr/UsrLoginR.jsp
Normal file
21
src/main/webapp/WEB-INF/views/sopmal/mbr/UsrLoginR.jsp
Normal file
@@ -0,0 +1,21 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<script>
|
||||
var fullUrl = '${accessUrl}';
|
||||
var currentUrl = '${currentUrl}';
|
||||
|
||||
// fullUrl이 없으면 currentUrl로 설정
|
||||
if (!fullUrl || fullUrl.trim() === "") {
|
||||
fullUrl = currentUrl;
|
||||
}
|
||||
|
||||
var hashIndex = fullUrl.indexOf('#');
|
||||
// # 기호가 있는 경우 URL에서 # 기호와 그 이후를 제거
|
||||
var cleanUrl = hashIndex !== -1 ? fullUrl.substring(0, hashIndex) : fullUrl;
|
||||
var encodedRedirectUri = encodeURIComponent(cleanUrl);
|
||||
location.href = "/login?redirect_uri=" + encodedRedirectUri;
|
||||
</script>
|
||||
</html>
|
||||
<%--권한 접근이 안되어 튕겨냄--%>
|
||||
92
src/main/webapp/WEB-INF/views/sopmal/mbr/UsrMainPage.jsp
Normal file
92
src/main/webapp/WEB-INF/views/sopmal/mbr/UsrMainPage.jsp
Normal file
@@ -0,0 +1,92 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
|
||||
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
|
||||
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
|
||||
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
|
||||
<%@ taglib prefix="ui" uri="http://www.winbit.kr/ctl/ui"%>
|
||||
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld"%>
|
||||
|
||||
<%--
|
||||
Class Name : JoinC.jsp
|
||||
Description : 회원가입
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2024-02-05 최범식 최초 생성
|
||||
--%>
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
|
||||
<head>
|
||||
<%-- 공통 include --%>
|
||||
<jsp:include page="/WEB-INF/views/comm/Include.jsp"/>
|
||||
</head>
|
||||
<body>
|
||||
<%-- 공통 Header --%>
|
||||
<jsp:include page="/WEB-INF/views/comm/Header.jsp"/>
|
||||
|
||||
<main>
|
||||
<div class="sub-wrapper">
|
||||
<div class="sub-content">
|
||||
<div class="page-title center">
|
||||
<h2 class="page-title__title">로그인</h2>
|
||||
<p class="page-title__subTitle">회원 로그인을 하시면 각종 혜택 및 정보를 제공 받으실 수 있습니다.</p>
|
||||
</div>
|
||||
<div class="login">
|
||||
<div class="boxTab">
|
||||
<button class="boxTab__tabBtn current">회원</button>
|
||||
<button class="boxTab__tabBtn">비회원(주문조회)</button>
|
||||
</div>
|
||||
<div class="boxTab__content login-content current">
|
||||
<form action="">
|
||||
<div class="login__inputBox">
|
||||
<input class="input-text full" type="text" title="해당 인풋에 대한 설명" placeholder="아이디">
|
||||
<p class="login__inputBox__alertText">아이디를 입력해 주세요.</p>
|
||||
<input class="input-text full" type="password" title="해당 인풋에 대한 설명"
|
||||
placeholder="비밀번호 (숫자,영문,특수문자 조합 8~20자리)">
|
||||
<p class="login__inputBox__alertText">비밀번호를 입력해 주세요.</p>
|
||||
</div>
|
||||
<button class="btn xl full dark login__loginBtn">로그인</button>
|
||||
<div class="login__misc">
|
||||
<div class="b-checkbox-container">
|
||||
<label class="b-checkbox is-medium checkbox">
|
||||
<input type="checkbox" value="">
|
||||
<span class="check"></span>
|
||||
<span class="control-label">아이디 저장</span>
|
||||
</label>
|
||||
</div>
|
||||
<a class="login__misc__link" href="">아이디/비밀번호 찾기</a>
|
||||
</div>
|
||||
</form>
|
||||
<div class="login__signIn">
|
||||
<p class="login__signIn__text">아직 GC ONE 회원이 아니세요?</p>
|
||||
<a class="login__signIn__link" href="">회원가입</a>
|
||||
</div>
|
||||
<div class="login__sns">
|
||||
<button class="login__sns__btn kakao"><i class="icon icon_kakaoLogin"></i>카카오 로그인</button>
|
||||
<button class="login__sns__btn naver"><i class="icon icon_naverLogin"></i>네이버 로그인</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="boxTab__content login-content">
|
||||
<form action="">
|
||||
<div class="login__inputBox">
|
||||
<input class="input-text full" type="search" title="해당 인풋에 대한 설명" placeholder="주문번호">
|
||||
<p class="login__inputBox__alertText">주문번호를 입력해 주세요.</p>
|
||||
<input class="input-text full number" type="search" title="해당 인풋에 대한 설명"
|
||||
placeholder="주문 시 입력한 휴대폰번호">
|
||||
<p class="login__inputBox__alertText">휴대폰번호를 입력해 주세요.</p>
|
||||
</div>
|
||||
<button class="btn xl full dark login__loginBtn">조회알라리</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
<%-- 공통 Footer --%>
|
||||
<jsp:include page="/WEB-INF/views/comm/Footer.jsp"/>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,59 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
|
||||
<%--
|
||||
Class Name : passwordChngPopupR.jsp
|
||||
Description : 비밀번호 변경 팝업 조회
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2024-10-21 유재현 최초 생성
|
||||
--%>
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$(".signUp__inputBox__alertText").hide();
|
||||
fn_alert_hide($("#mbrPassword"), $("#mbrPasswordAlert"), 'pw');
|
||||
fn_alert_hide($("#newPassword"), $("#newPasswordAlert"), 'pw');
|
||||
fn_alert_hide($("#checkPassword"), $("#checkPasswordAlert"), 'pw');
|
||||
});
|
||||
</script>
|
||||
<div id="passwordChngPopup" class="modal default" style="max-width: 600px;">
|
||||
<div class="modal-header">
|
||||
<div class="modal-header__title">비밀번호 수정</div>
|
||||
</div>
|
||||
<div class="modal-content">
|
||||
<table class="table-address table-wrapper">
|
||||
<caption>비밀번호 변경</caption>
|
||||
<colgroup>
|
||||
<col style="width:30%;">
|
||||
<col style="width:auto;">
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>기존 비밀번호</th>
|
||||
<td>
|
||||
<input type="password" class="input-text full" name="mbrPassword" id="mbrPassword" title="기존 비밀번호" placeholder="기존 비밀번호 입력" maxlength="20" style="margin-top:0px; margin-bottom:0px;">
|
||||
<p class="signUp__inputBox__alertText" id="mbrPasswordAlert">비밀번호를 입력해 주세요.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>변경할 비밀번호</th>
|
||||
<td>
|
||||
<input type="password" class="input-text full" name="newPassword" id="newPassword" title="변경할 비밀번호" placeholder="영문 대소문자/숫자/특수문자 중 2가지 이상 포함 6~20자" maxlength="20">
|
||||
<p class="signUp__inputBox__alertText" id="newPasswordAlert">비밀번호를 입력해 주세요.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>변경할 비밀번호 확인</th>
|
||||
<td>
|
||||
<input type="password" class="input-text full" name="checkPassword" id="checkPassword" title="변경할 비밀번호 확인" placeholder="비밀번호를 한번 더 입력해주세요." maxlength="20">
|
||||
<p class="signUp__inputBox__alertText" id="checkPasswordAlert">비밀번호를 입력해 주세요.</p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="shipping-btn-container">
|
||||
<button class="btn large outline" onclick="fn_close_modal('passwordChngPopup')">취소</button>
|
||||
<button class="btn theme large" onclick="fn_change_now();">수정하기</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
207
src/main/webapp/WEB-INF/views/sopmal/mbr/passwordChngR.jsp
Normal file
207
src/main/webapp/WEB-INF/views/sopmal/mbr/passwordChngR.jsp
Normal file
@@ -0,0 +1,207 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
|
||||
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
|
||||
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
|
||||
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
|
||||
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
|
||||
<%@ taglib prefix="ui" uri="http://www.winbit.kr/ctl/ui" %>
|
||||
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld" %>
|
||||
|
||||
<%--
|
||||
Class Name : passwordChngR.jsp
|
||||
Description : 비밀번호 변경 안내 조회
|
||||
Modification Information
|
||||
|
||||
수정일 수정자 수정내용
|
||||
------- -------- ---------------------------
|
||||
2024-10-21 유재현 최초 생성
|
||||
--%>
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<title>비밀번호 변경 캠페인</title>
|
||||
<jsp:include page="/WEB-INF/views/comm/Include.jsp"/>
|
||||
</head>
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
|
||||
});
|
||||
|
||||
/* ********************************************************
|
||||
* 나중에 변경하기
|
||||
******************************************************** */
|
||||
const fn_change_later = function() {
|
||||
$.ajax({
|
||||
type: 'post',
|
||||
url : '<c:url value="/sopmal/mbr/updatePasswordChngLater"/>',
|
||||
success: function (data) {
|
||||
const result = JSON.parse(data.resBody.result).message;
|
||||
|
||||
if(result === "success"){
|
||||
alert('<spring:message code="success.common.update"/>')
|
||||
|
||||
var urlParams = new URLSearchParams(window.location.search);
|
||||
if (urlParams.has('originalUrl')) {
|
||||
window.location.href = decodeURIComponent(urlParams.get('originalUrl'));
|
||||
return false;
|
||||
}
|
||||
window.location.href = '/index';
|
||||
return false;
|
||||
}
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
/* ********************************************************
|
||||
* 비밀번호 변경
|
||||
******************************************************** */
|
||||
const fn_change_now = function() {
|
||||
|
||||
if(!fn_check_password()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (confirm('비밀번호를 <spring:message code="confirm.common.update"/>')) {
|
||||
$.ajax({
|
||||
type: 'post',
|
||||
url: '<c:url value="/sopmal/mbr/updatePasswordChng"/>',
|
||||
data : {
|
||||
'mbrPassword' : $("#mbrPassword").val(),
|
||||
'newPassword' : $("#newPassword").val(),
|
||||
'checkPassword' : $("#checkPassword").val()
|
||||
},
|
||||
success: function (data) {
|
||||
const result = JSON.parse(data.resBody.result).message;
|
||||
|
||||
if(result === "success"){
|
||||
alert('<spring:message code="success.common.update"/>')
|
||||
|
||||
var urlParams = new URLSearchParams(window.location.search);
|
||||
if (urlParams.has('originalUrl')) {
|
||||
window.location.href = decodeURIComponent(urlParams.get('originalUrl'));
|
||||
return false;
|
||||
}
|
||||
window.location.href = '/index';
|
||||
return false;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/* ********************************************************
|
||||
* password check
|
||||
******************************************************** */
|
||||
const fn_check_password = function() {
|
||||
|
||||
var regular = /^(?=.*[a-zA-Z])(?=.*\d|.*\W)|(?=.*[a-zA-Z])(?=.*\W)|(?=.*\d)(?=.*\W)[a-zA-Z\d\W]{6,20}$/;
|
||||
let mbrPassword = $('#mbrPassword');
|
||||
let newPassword = $('#newPassword');
|
||||
let newPasswordChk = $('#checkPassword');
|
||||
|
||||
if(!regular.test(mbrPassword.val())){
|
||||
alert('비밀번호는 영문 대소문자/숫자/특수문자 중 2가지 이상 조합한 6~20자로 입력해주세요.');
|
||||
mbrPassword.focus();
|
||||
return;
|
||||
}
|
||||
|
||||
if(!regular.test(newPassword.val())){
|
||||
alert('비밀번호는 영문 대소문자/숫자/특수문자 중 2가지 이상 조합한 6~20자로 입력해주세요.');
|
||||
newPassword.focus();
|
||||
return;
|
||||
}
|
||||
|
||||
if(!regular.test(newPasswordChk.val())){
|
||||
alert('비밀번호는 영문 대소문자/숫자/특수문자 중 2가지 이상 조합한 6~20자로 입력해주세요.');
|
||||
newPasswordChk.focus();
|
||||
return;
|
||||
}
|
||||
|
||||
if (newPassword.val() !== newPasswordChk.val()) {
|
||||
alert('변경 비밀번호가 일치하지 않습니다.');
|
||||
newPassword.focus();
|
||||
return;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/* ********************************************************
|
||||
* 사용자 입력값이 입력될 때 alertText 숨기기
|
||||
******************************************************** */
|
||||
const fn_alert_hide = (inputId, alertId, type) => {
|
||||
inputId.on('input', function () {
|
||||
switch(type){
|
||||
case 'id':
|
||||
var regular = /^(?=.*[a-zA-Z])(?=.*\d)[a-zA-Z\d_]{6,20}$/;
|
||||
if (!$(this).val()) {
|
||||
alertId.html('아이디를 입력해 주세요.');
|
||||
}else if(dupList.includes(inputId.val())){
|
||||
alertId.html('이미 사용중인 아이디입니다.');
|
||||
alertId.show();
|
||||
return;
|
||||
}else if(!regular.test(inputId.val())){
|
||||
alertId.html('아이디는 공백없는 영문, 숫자, 밑줄 포함 6~20자 조합만 사용 가능합니다.');
|
||||
alertId.show();
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case 'pw':
|
||||
var regular = /^(?=.*[a-zA-Z])(?=.*\d|.*\W)|(?=.*[a-zA-Z])(?=.*\W)|(?=.*\d)(?=.*\W)[a-zA-Z\d\W]{6,20}$/;
|
||||
if (!$(this).val()) {
|
||||
alertId.html('비밀번호를 입력해 주세요.');
|
||||
}else if(!regular.test(inputId.val())){
|
||||
alertId.html('비밀번호는 영문 대소문자/숫자/특수문자 중 2가지 이상 조합한 6~20자로 입력해주세요.');
|
||||
alertId.show();
|
||||
return;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
alertId.hide();
|
||||
if (!$(this).val()) {
|
||||
alertId.show();
|
||||
}
|
||||
})
|
||||
};
|
||||
</script>
|
||||
<body>
|
||||
<jsp:include page="/WEB-INF/views/comm/Header.jsp"/>
|
||||
<main>
|
||||
<div class="pwChange__wrapper">
|
||||
<div class="pwChange">
|
||||
<div class="pwChange__tit">
|
||||
<div class="pwChange__img">
|
||||
<img src="/pc/images/icon_pw-change.png" alt="">
|
||||
</div>
|
||||
<div class="pwChange__txt">
|
||||
<p class="pwChange__txt__top">비밀번호 변경 캠페인</p>
|
||||
<p class="pwChange__txt__title">회원님의 소중한<br>개인정보를 지켜주세요.</p>
|
||||
<p class="pwChange__txt__text">
|
||||
회원님의 아이디 <em>${passwordResultMap.mbrId}</em>은(는) 비밀번호 변경 대상입니다.<br>
|
||||
${passwordResultMap.sopmalNm}에서는 회원님의 개인정보보호를 위해 ${passwordResultMap.passwordChngDe}개월 이상<br>
|
||||
비밀번호를 변경하지 않은 경우 비밀번호 변경을 안내하고 있습니다.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pwChange__btn">
|
||||
<a href="javascript:void(0);" class="btn xl outline" onclick="fn_change_later();">
|
||||
<span>
|
||||
나중에 변경하기
|
||||
<br>
|
||||
<em>${passwordResultMap.passwordCnfirmDe}개월 후에 변경</em>
|
||||
</span>
|
||||
</a>
|
||||
<a href="javascript:void(0);" class="btn xl dark" onclick="fn_open_modal('#passwordChngDiv', '#passwordChngPopup', '<c:url value="/sopmal/mbr/selectPasswordChngPopup"/>')">
|
||||
지금 변경하기
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
</body>
|
||||
|
||||
<%--비밀번호 변경 팝업--%>
|
||||
<div id="passwordChngDiv"></div>
|
||||
</html>
|
||||
Reference in New Issue
Block a user