초기소스

This commit is contained in:
jazz
2025-10-29 17:08:05 +09:00
parent e531aa9540
commit 439a379a02
7551 changed files with 1234427 additions and 3 deletions

View File

@@ -0,0 +1,401 @@
<%@ 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-09-12 이대환 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<jsp:include page="/WEB-INF/views/comm/mobile/Include.jsp"/>
</head>
<script>
$(document).ready(function() {
fn_set_header_title("회원가입");
$('#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');
}
if ($('[name="essntl"]:not(:checked)').length > 0) {
$('#submit').prop('disabled', true);
} else {
$('#submit').prop('disabled', false);
}
});
$('.termCheck').click(function () {
if($('.termCheck:not(:checked)').length == 0) {
$('#termCheckAll').prop('checked', true);
} else {
$('#termCheckAll').prop('checked', false);
}
if ($('[name="essntl"]:not(:checked)').length > 0) {
$('#submit').prop('disabled', true);
} else {
$('#submit').prop('disabled', false);
}
});
/* ********************************************************
* 모달 배경화면 스크롤 방지
******************************************************** */
MicroModal.init({
disableScroll: true,
awaitCloseAnimation: true,
});
/* ********************************************************
* 풀스크린 팝업 이벤트 리스너
******************************************************** */
$('.fullscreen-trigger').on('click', function (e) {
e.preventDefault();
var modalId = $(this).attr('data-micromodal-trigger');
openModal(modalId);
});
$('.microModal .microModal__close').on('click', function () {
var modalId = $(this).closest('.microModal').attr('id');
closeModal(modalId);
});
window.addEventListener('popstate', function (event) {
var modalId = window.location.hash.replace('#', '');
if (modalId) {
closeModal(modalId);
} else {
$('.microModal').each(function () {
MicroModal.close($(this).attr('id'));
});
}
document.body.style.overflow = '';
});
if (window.location.hash) {
var modalId = window.location.hash.replace('#', '');
openModal(modalId);
}
});
/* ********************************************************
* 회원가입 화면으로 이동
******************************************************** */
const fn_move_joinC = function() {
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){
fn_alert_show('회원가입에 실패하였습니다. 회원가입 안내 화면으로 돌아갑니다.', '/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);
/* ********************************************************
* alert모달 세팅
******************************************************** */
const fn_alert_show = function(content, redirectUri) {
$('#modal-alert-content').text(content);
openModal('modal-alert');
if(redirectUri){
$(".microModal__btn").on("click", function() {
if (typeof redirectUri == 'function') {
redirectUri();
} else if (typeof redirectUri == 'string') {
window.location.href = redirectUri;
}
});
}
}
</script>
<body>
<div class="screen-wrap">
<!-- 헤더 영역 -->
<header class="header header--sub">
<jsp:include page="/WEB-INF/views/comm/mobile/Header.jsp"/>
</header>
<!-- 하단 탭바 -->
<jsp:include page="/WEB-INF/views/comm/mobile/TabBar.jsp"/>
<!-- 메인 컨텐츠 -->
<div class="content-wrap">
<main class="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-page">
<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-medium 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> 마일리지/ 혜택 통합<br>멤버십 서비스</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'}">
<button class="signUpTerms__misc__detail fullscreen-trigger" onclick="fn_set_termPop('${term.cdNm}', ${status.count}); return false;" data-micromodal-trigger="terms-pop">보기</button>
<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="bottomBtnControls">
<button id="submit" class="btn lg theme" onclick="fn_move_joinC();" disabled>동의하고 가입하기</button>
</div>
</div>
</div>
<!-- Top 버튼 -->
<div class="quick-menu__to-top">
<button><i class="icon icon_quick-to-top"></i>
<span class="visually-hidden">위로 가기</span>
</button>
</div>
</main>
</div>
</div>
<!-- 서비스 이용약관 동의 -->
<div class="microModal microFullScreen" id="terms-pop" aria-hidden="true">
<div class="microModal__overlay" tabindex="-1">
<div class="microModal__container" role="dialog" aria-modal="true">
<div class="microModal__body">
<div class="microModal__top">
<div id="termNm"><c:if test="${integrated}">GC ONE </c:if></div>
<button class="microModal__close" aria-label="창 닫기"></button>
</div>
<div class="microModal__content">
<div class="microModal__inner">
<div class="terms_wrap ck-content" id="termCn"></div>
</div>
</div>
</div>
</div>
</div>
</div>
<%--alert 팝업--%>
<div class="microModal microAlert" id="modal-alert" aria-hidden="true">
<div class="microModal__overlay" tabindex="-1">
<div class="microModal__container" role="dialog" aria-modal="true">
<div class="microModal__body">
<div class="microModal__top">
<h2 class="microModal__title" id="modal-alert-content">Alert 메시지</h2>
</div>
</div>
<div class="microModal__btnContainer">
<button type="button" class="microModal__btn" onclick="closeModal('modal-alert')">
<spring:message code="button.close"/>
</button>
</div>
</div>
</div>
</div>
</body>
</html>