1275 lines
59 KiB
Plaintext
1275 lines
59 KiB
Plaintext
<%@ page import="org.springframework.util.ObjectUtils" %>
|
|
<%@ 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"%>
|
|
<spring:eval expression="@environment.getProperty('spring.profiles.active')" var="profiles"/>
|
|
|
|
<!-- 모든 사이트 공통 -->
|
|
<link rel="stylesheet" href="/mobile/css/default.css">
|
|
|
|
<!-- jquery -->
|
|
<script src="/mobile/vendor/jquery-3.7.1.min.js"></script>
|
|
|
|
<!-- 슬라이드 -->
|
|
<link rel="stylesheet" type="text/css" href="/mobile/vendor/swiper/swiper-bundle.min.css">
|
|
<script src="/mobile/vendor/swiper/swiper-bundle.min.js"></script>
|
|
|
|
<!-- 실시간검색 -->
|
|
<script src="/mobile/vendor/jquery.vticker.js"></script>
|
|
|
|
<!-- 커스텀 셀렉트 박스 -->
|
|
<script src="/mobile/vendor/jquery-nice-select/jquery.nice-select.min.js"></script>
|
|
<link rel="stylesheet" href="/mobile/vendor/jquery-nice-select/nice-select.css">
|
|
|
|
<!-- Dropzone -->
|
|
<script src="/mobile/vendor/dropzone/dropzone.min.js"></script>
|
|
<link rel="stylesheet" href="/mobile/vendor/dropzone/dropzone.min.css">
|
|
|
|
<!-- 스크립트 -->
|
|
<script src="//t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js"></script>
|
|
<script src="/mobile/js/script.js" defer=""></script>
|
|
<script src="<c:url value='/js/gcone.js'/>"></script>
|
|
|
|
<script src="/mobile/js/bottom-sheet.js" defer=""></script>
|
|
|
|
<!--ckeditor-->
|
|
<script src="<c:url value='/ckeditor/ckeditor.js'/>"></script>
|
|
<script src="<c:url value='/ckeditor/uploadAdapter.js'/>"></script>
|
|
<!-- CK editor -->
|
|
<link rel="stylesheet" href="<c:url value='/ckeditor/content.css'/>">
|
|
<%-- CK editor 적용 시 width 설정 --%>
|
|
<style type="text/css">
|
|
.ck.ck-editor{
|
|
width:100%;
|
|
}
|
|
</style>
|
|
|
|
|
|
<!-- Date Picker -->
|
|
<link rel="stylesheet" href="/mobile/vendor/jquery-ui/jquery-ui.min.css">
|
|
<link rel="stylesheet" href="/mobile/vendor/jquery-ui/jquery-ui.structure.css">
|
|
<script src="/mobile/vendor/jquery-ui/jquery-ui.min.js"></script>
|
|
|
|
<!-- micromodal -->
|
|
<!-- https://github.com/Ghosh/micromodal -->
|
|
<script src="/mobile/vendor/micromodal/micromodal.min.js"></script>
|
|
|
|
<!-- popModal -->
|
|
<link rel="stylesheet" type="text/css" href="/mobile/vendor/popModal/popModal.min.css">
|
|
<script src="/mobile/vendor/popModal/popModal.min.js"></script>
|
|
|
|
<!-- 파일 업로드 -->
|
|
<script src="<c:url value='/js/fileupload_comm.js'/>"></script>
|
|
|
|
<%--광고스크립트--%>
|
|
<%--광고스크립트 공통--%>
|
|
<script src="<c:url value='/js/adscript/common/adscript_common.js'/>"></script>
|
|
|
|
<%--광고스크립트 광고매체별--%>
|
|
<script src="<c:url value='/js/adscript/admedia/adscirpt_mobion.js'/>"></script>
|
|
<script src="<c:url value='/js/adscript/admedia/adscript_adn2dot0.js'/>"></script>
|
|
<script src="<c:url value='/js/adscript/admedia/adscript_criteo.js'/>"></script>
|
|
<script src="<c:url value='/js/adscript/admedia/adscript_googleAds.js'/>"></script>
|
|
<script src="<c:url value='/js/adscript/admedia/adscript_googleAnalytics.js'/>"></script>
|
|
<script src="<c:url value='/js/adscript/admedia/adscript_googleTagManager.js'/>"></script>
|
|
<script src="<c:url value='/js/adscript/admedia/adscript_kakaoMoments.js'/>"></script>
|
|
<script src="<c:url value='/js/adscript/admedia/adscript_meta.js'/>"></script>
|
|
<script src="<c:url value='/js/adscript/admedia/adscript_naverSrchAds.js'/>"></script>
|
|
<script src="<c:url value='/js/adscript/admedia/adscript_tgscript.js'/>"></script>
|
|
|
|
<%--광고스크립트 액션--%>
|
|
<script src="<c:url value='/js/adscript/trigger/adscript_trigger.js'/>"></script>
|
|
|
|
<%--광고스크립트 실행스크립트--%>
|
|
<script src="<c:url value='/js/adscript/adscript.js'/>"></script>
|
|
|
|
<%--theme적용--%>
|
|
<link rel="stylesheet" type="text/css" href="<c:out value="${sopmallInfo.themaPath}"/>">
|
|
|
|
<%--font적용--%>
|
|
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR&family=Noto+Sans+JP&display=swap" rel="stylesheet">
|
|
|
|
<%--Web-App연동 스크립트--%>
|
|
<script src="/mobile/js/bnft/common/Common_app.js" defer=""></script>
|
|
|
|
<c:set var = "meta" value = "${sopmallInfo.shopInfo}"/>
|
|
<!--파비콘,메타-->
|
|
<%--파비콘--%>
|
|
<c:choose>
|
|
<c:when test = "${fn:startsWith(meta.fviconCours, '/')}">
|
|
<c:set var = "fviconCours" value = "${meta.fviconCours}"/>
|
|
</c:when>
|
|
<c:otherwise>
|
|
<c:set var = "fviconCours" value = "/${meta.fviconCours}"/>
|
|
</c:otherwise>
|
|
</c:choose>
|
|
<%--메타--%>
|
|
<%--상품 타이틀 사용 여부 Y이면--%>
|
|
<c:choose>
|
|
<c:when test = "${sopmallInfo.shopInfo.metaGoodsAt eq 'Y' and fn:contains(accessUri,'/sopmal/goods/selectGoodsDtl')}">
|
|
<c:set var = "metaGoodsSj" value="${sopmallInfo.shopInfo.metaGoodsSj}"/>
|
|
<c:set var = "metaGoodsDc" value="${sopmallInfo.shopInfo.metaGoodsDc}"/>
|
|
<c:set var = "metaGoodsKwrd" value="${sopmallInfo.shopInfo.metaGoodsKwrd}"/>
|
|
<%--상품 명 있으면 set--%>
|
|
<c:choose>
|
|
<c:when test = "${not empty resultMap.goodsDtl.goodsNm}">
|
|
<c:set var="goodsNm" value="${resultMap.goodsDtl.goodsNm}"/>
|
|
<c:set var = "metaGoodsSj" value="${fn:replace(metaGoodsSj, '{goodsNm}', goodsNm)}"/>
|
|
<c:set var="metaGoodsDc" value="${fn:replace(metaGoodsDc, '{goodsNm}', goodsNm)}"/>
|
|
<c:set var="metaGoodsKwrd" value="${fn:replace(metaGoodsKwrd, '{goodsNm}', goodsNm)}"/>
|
|
</c:when>
|
|
<c:otherwise>
|
|
<c:set var = "metaGoodsSj" value="${fn:replace(metaGoodsSj, '{goodsNm}', '')}"/>
|
|
<c:set var = "metaGoodsDc" value="${fn:replace(metaGoodsDc, '{goodsNm}', '')}"/>
|
|
<c:set var = "metaGoodsKwrd" value="${fn:replace(metaGoodsKwrd, '{goodsNm}', '')}"/>
|
|
</c:otherwise>
|
|
</c:choose>
|
|
<%--짧은 설명 있으면 set--%>
|
|
<c:choose>
|
|
<c:when test = "${not empty resultMap.goodsDtl.srtDc}">
|
|
<c:set var="srtDc" value="${resultMap.goodsDtl.srtDc}"/>
|
|
<c:set var = "metaGoodsSj" value="${fn:replace(metaGoodsSj, '{srtDc}', srtDc)}"/>
|
|
<c:set var="metaGoodsDc" value="${fn:replace(metaGoodsDc, '{srtDc}', srtDc)}"/>
|
|
<c:set var="metaGoodsKwrd" value="${fn:replace(metaGoodsKwrd, '{srtDc}', srtDc)}"/>
|
|
</c:when>
|
|
<c:otherwise>
|
|
<c:set var = "metaGoodsSj" value="${fn:replace(metaGoodsSj, '{srtDc}', '')}"/>
|
|
<c:set var="metaGoodsDc" value="${fn:replace(metaGoodsDc, '{srtDc}', '')}"/>
|
|
<c:set var="metaGoodsKwrd" value="${fn:replace(metaGoodsKwrd, '{srtDc}', '')}"/>
|
|
</c:otherwise>
|
|
</c:choose>
|
|
<c:choose>
|
|
<c:when test = "${not empty resultMap.goodsDtl.reprsntDc}">
|
|
<c:set var="reprsntDc" value="${resultMap.goodsDtl.reprsntDc}"/>
|
|
<c:set var = "metaGoodsSj" value="${fn:replace(metaGoodsSj, '{reprsntDc}', reprsntDc)}"/>
|
|
<c:set var="metaGoodsDc" value="${fn:replace(metaGoodsDc, '{reprsntDc}', reprsntDc)}"/>
|
|
<c:set var="metaGoodsKwrd" value="${fn:replace(metaGoodsKwrd, '{reprsntDc}', reprsntDc)}"/>
|
|
</c:when>
|
|
<c:otherwise>
|
|
<c:set var = "metaGoodsSj" value="${fn:replace(metaGoodsSj, '{reprsntDc}', '')}"/>
|
|
<c:set var="metaGoodsDc" value="${fn:replace(metaGoodsDc, '{reprsntDc}', '')}"/>
|
|
<c:set var="metaGoodsKwrd" value="${fn:replace(metaGoodsKwrd, '{reprsntDc}', '')}"/>
|
|
</c:otherwise>
|
|
</c:choose>
|
|
<c:choose>
|
|
<c:when test = "${not empty resultMap.goodsDtl.kwrd}">
|
|
<c:set var="kwrd" value="${resultMap.goodsDtl.kwrd}"/>
|
|
<c:set var = "metaGoodsSj" value="${fn:replace(metaGoodsSj, '{kwrd}', kwrd)}"/>
|
|
<c:set var="metaGoodsDc" value="${fn:replace(metaGoodsDc, '{kwrd}', kwrd)}"/>
|
|
<c:set var="metaGoodsKwrd" value="${fn:replace(metaGoodsKwrd, '{kwrd}', kwrd)}"/>
|
|
</c:when>
|
|
<c:otherwise>
|
|
<c:set var = "metaGoodsSj" value="${fn:replace(metaGoodsSj, '{kwrd}', '')}"/>
|
|
<c:set var="metaGoodsDc" value="${fn:replace(metaGoodsDc, '{kwrd}', '')}"/>
|
|
<c:set var="metaGoodsKwrd" value="${fn:replace(metaGoodsKwrd, '{kwrd}', '')}"/>
|
|
</c:otherwise>
|
|
</c:choose>
|
|
<title>
|
|
<c:choose>
|
|
<c:when test="${profiles eq 'local'}">(로컬) </c:when>
|
|
<c:when test="${profiles eq 'dev'}">(개발) </c:when>
|
|
<c:otherwise></c:otherwise>
|
|
</c:choose>
|
|
${metaGoodsSj}
|
|
</title>
|
|
<meta name="description" content="<c:out value="${metaGoodsDc}"/>">
|
|
<meta name="keywords" content="<c:out value="${metaGoodsKwrd}"/>">
|
|
<meta property="og:title" content="<c:out value="${metaGoodsSj}"/>">
|
|
<meta property="og:description" content="<c:out value="${metaGoodsDc}"/>">
|
|
</c:when>
|
|
<c:otherwise>
|
|
<title>
|
|
<c:choose>
|
|
<c:when test="${profiles eq 'local'}">(로컬) </c:when>
|
|
<c:when test="${profiles eq 'dev'}">(개발) </c:when>
|
|
<c:otherwise></c:otherwise>
|
|
</c:choose>
|
|
<c:out value="${meta.metaSj}"/>
|
|
</title>
|
|
<meta name="description" content="<c:out value="${meta.metaDc}"/>">
|
|
<meta name="keywords" content="<c:out value="${meta.metaKwrd}"/>">
|
|
<meta property="og:title" content="<c:out value="${meta.metaSj}"/>">
|
|
<meta property="og:description" content="<c:out value="${meta.metaDc}"/>">
|
|
</c:otherwise>
|
|
</c:choose>
|
|
<link rel="icon" href="<c:out value="${fviconCours}"/>">
|
|
<meta name="robots" content="index,follow" />
|
|
|
|
<%--상품상세 일 경우 파라미터 포함 전체 경로 --%>
|
|
<c:set var="ogUrl" value=""/>
|
|
<c:choose>
|
|
<c:when test="${fn:contains(accessUri,'/sopmal/goods/selectGoodsDtl')}">
|
|
<c:set var="ogUrl" value="${meta.pcDomnAdres}${accessUri}?goodsInnb=${pageContext.request.getParameter('goodsInnb')}"/>
|
|
</c:when>
|
|
<c:otherwise>
|
|
<c:set var="ogUrl" value="${meta.pcDomnAdres}${accessUri}"/>
|
|
</c:otherwise>
|
|
</c:choose>
|
|
|
|
<meta property="og:url" content="<c:out value="${ogUrl}"/>">
|
|
<meta property="og:site_name" content="<c:out value="${meta.sopmalNm}"/>">
|
|
|
|
<%--상품 상세일 경우 상품 이미지, 그외 로고 --%>
|
|
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.cdnurl')" var="cdnurl"/>
|
|
<c:set var="ogImage" value=""/>
|
|
<c:choose>
|
|
<c:when test="${fn:contains(accessUri,'/sopmal/goods/selectGoodsDtl')}">
|
|
<c:set var="ogImage" value="${cdnurl}${fn:split(resultMap.goodsDtl.img, '|')[0]}"/>
|
|
</c:when>
|
|
<c:otherwise>
|
|
<c:set var="ogImage" value="${ cdnurl }${ topBarInfo.topbar.topFilCours }/${ topBarInfo.topbar.topSysFilNm }"/>
|
|
</c:otherwise>
|
|
</c:choose>
|
|
<meta property="og:image" content="<c:out value="${ogImage}"/>">
|
|
<meta property="og:type" content="website">
|
|
<spring:eval expression="@environment.getProperty('meta-content.google.'+'${sopmallInfo.shopInfo.sopmalCd}')" var="googleMeta"/>
|
|
<spring:eval expression="@environment.getProperty('meta-content.naver.'+'${sopmallInfo.shopInfo.sopmalCd}')" var="naverMeta"/>
|
|
<spring:eval expression="@environment.getProperty('meta-content.facebook.'+'${sopmallInfo.shopInfo.sopmalCd}')" var="facebookMeta"/>
|
|
<meta name="google-site-verification" content="${googleMeta}"/>
|
|
<meta name="naver-site-verification" content="${naverMeta}"/>
|
|
<meta name="facebook-domain-verification" content="${facebookMeta}"/>
|
|
<meta charset="UTF-8">
|
|
<!-- M자형 디스플레이 위해 "viewport-fit=cover" 속성 필요 -->
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1, viewport-fit=cover">
|
|
<script>
|
|
$.ajaxSetup({
|
|
beforeSend: function (jqXhr, settings) {
|
|
jqXhr.setRequestHeader('AJAX', true);
|
|
$("#overlay").fadeIn();
|
|
///mobile/images/loading.svg
|
|
let loadingImg = document.createElement('img'); // 로딩 중임을 알리는 이미지 생성
|
|
loadingImg.src = '/mobile/images/loading.svg'; // 로딩 중임을 알리는 이미지 설정
|
|
loadingImg.classList.add('loadingImg'); // 클래스 추가
|
|
loadingImg.id = 'loadingImg';
|
|
$("body").append(loadingImg); // 리스트에 추가
|
|
},
|
|
complete: function () {
|
|
// 동시에 여러 개의 AJAX가 수행될 경우를 대비하여 delay를 설정
|
|
setTimeout(function () {
|
|
$("#overlay").fadeOut();
|
|
}, 500);
|
|
$("#loadingImg").remove(); // 로딩 중 이미지 삭제
|
|
},
|
|
error: function (data, status, error) {
|
|
fn_ajax_error(data, status, error);
|
|
}
|
|
});
|
|
|
|
//ajax error 공통 처리 함수
|
|
//* 개별처리 필요 할 시 공통 함수 선언 후 개별 처리 할 수 있음
|
|
function fn_ajax_error(data, status, error) {
|
|
$("#overlay").fadeOut();
|
|
const isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);
|
|
if (!isMobile) return; // 모바일이 아닐 경우 종료
|
|
|
|
let message = '<spring:message code="error.internal-server"/>';
|
|
let focusTarget = null;
|
|
|
|
if (data?.responseJSON?.resBody?.message != null) {
|
|
if (fn_check_json(data.responseJSON.resBody.message)) {
|
|
const errorObject = JSON.parse(data.responseJSON.resBody.message);
|
|
if (errorObject) {
|
|
if (errorObject.errorMsg) {
|
|
// \n을 기준으로 문자열을 분할하고 첫 번째 값만 추출
|
|
message = errorObject.errorMsg.split('\n')[0].replace(/\n/g, '<br>'); // 첫 번째 줄만 추출하고 \n을 <br>로 대체
|
|
}
|
|
if (errorObject.errorFields) {
|
|
$('.main').eq(0).find('input,select,textarea').each(function () {
|
|
for (let idx = 0; idx < errorObject.errorFields.length; idx++) {
|
|
if (errorObject.errorFields[idx].indexOf($(this).attr('name')) >= 0) {
|
|
focusTarget = $(this);
|
|
break;
|
|
}
|
|
}
|
|
if (focusTarget) {
|
|
return false;
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}else{
|
|
message = data.responseJSON.resBody.message.split('\n')[0].replace(/\n/g, '<br>');
|
|
}
|
|
|
|
showModalError(message);
|
|
|
|
}
|
|
if (data?.responseJSON?.resBody?.result != null) {
|
|
if (fn_check_json(data.responseJSON.resBody.result)) {
|
|
const errorObject = JSON.parse(data.responseJSON.resBody.result);
|
|
if (errorObject) {
|
|
if (errorObject.errorMsg) {
|
|
// \n을 기준으로 문자열을 분할하고 첫 번째 값만 추출
|
|
message = errorObject.errorMsg.split('\n')[0].replace(/\n/g, '<br>'); // 첫 번째 줄만 추출하고 \n을 <br>로 대체
|
|
}
|
|
if (errorObject.errorFields) {
|
|
$('.main').eq(0).find('input,select,textarea').each(function () {
|
|
for (let idx = 0; idx < errorObject.errorFields.length; idx++) {
|
|
if (errorObject.errorFields[idx].indexOf($(this).attr('name')) >= 0) {
|
|
focusTarget = $(this);
|
|
break;
|
|
}
|
|
}
|
|
if (focusTarget) {
|
|
return false;
|
|
}
|
|
});
|
|
}
|
|
}
|
|
} else {
|
|
message = data.responseJSON.resBody.result.split('\n')[0].replace(/\n/g, '<br>');
|
|
}
|
|
|
|
showModalError(message);
|
|
|
|
} else if(data.status !== 200){
|
|
if(data.responseJSON.resBody.result){
|
|
message = JSON.parse(data.responseJSON.resBody.result);
|
|
message = message.errorMsg;
|
|
}
|
|
showModalError(message);
|
|
}
|
|
}
|
|
|
|
// 모달에 오류 메시지를 표시하고 확인 버튼 클릭 시 포커스를 주는 함수
|
|
function showModalError(message, focusTarget ='') {
|
|
$("#modal-error-content").html(message);
|
|
const closeModalTarget = $("#closeModalTarget").val();
|
|
if(!fn_is_empty(closeModalTarget)){
|
|
closeModal(closeModalTarget);
|
|
}
|
|
MicroModal.show("modal-error", {
|
|
onShow: function (modal) {
|
|
// 이미 존재하지 않는 경우에만 Hash 추가
|
|
if (window.location.hash !== '#' + "modal-error") {
|
|
window.history.replaceState({modal: 'open'}, '', '#' + "modal-error");
|
|
}
|
|
},
|
|
});
|
|
|
|
// 모달이 닫힐 때 포커스를 설정하고 스크롤 재활성화
|
|
$('#modal-error-confirm').off('click').on('click', function () {
|
|
MicroModal.close('modal-error');
|
|
});
|
|
}
|
|
|
|
/****************************최근 검색어*************************/
|
|
$(document).ready(function(){
|
|
init_set();
|
|
|
|
loadRecentSearches();
|
|
|
|
passwordChngDeAt();
|
|
|
|
ageChkAt();
|
|
|
|
fn_save_mbrdvc_info(${isAuthenticated});
|
|
});
|
|
|
|
function init_set() {
|
|
// 검색 url
|
|
$("#search-form").attr('action', "/sopmal/goods/selectGoodsSrchForm");
|
|
|
|
// 최근 검색어 전체 삭제
|
|
$('.recentSearch__deleteAll').on('click', function() {
|
|
deleteSearchAll();
|
|
});
|
|
|
|
// 검색 버튼 클릭시
|
|
$('#search_btn').on('click', function() {
|
|
let kwrd = $('input[name=kwrd]').val();
|
|
|
|
$('#search-form').submit();
|
|
if(kwrd) {
|
|
saveSearch(kwrd);
|
|
}
|
|
|
|
});
|
|
|
|
// 검색 창에서 키보드 엔터
|
|
$('input[name=kwrd]').on('keydown', function(e) {
|
|
if(e.key == 'Enter') {
|
|
$('#search_btn').click();
|
|
}
|
|
});
|
|
|
|
let auto_complete = $('.header-search-pop__auto-complete');
|
|
// 연관 검색어 창 처리
|
|
$('input[name=kwrd]').on('input', function(e) {
|
|
let kwrd = $('input[name=kwrd]').val();
|
|
|
|
// 검색창에 값이 있으면
|
|
if(kwrd != "") {
|
|
auto_complete.addClass('active');
|
|
|
|
}else {
|
|
auto_complete.removeClass('active');
|
|
}
|
|
});
|
|
|
|
// 검색어 자동 완성 기능
|
|
$('input[name=kwrd]').on('focusin keyup', function() {
|
|
let kwrd = $('input[name=kwrd]').val().trim();
|
|
|
|
setTimeout(function () {
|
|
$.ajax({
|
|
url : "/sopmal/goods/selectSrchGoodsNm",
|
|
type : "GET",
|
|
data : {
|
|
kwrd : kwrd,
|
|
sopmalCd : '${ sopmallInfo.shopInfo.sopmalCd }'
|
|
},
|
|
success : function(data) {
|
|
let result = JSON.parse(data.resBody.result);
|
|
autoComplete(result, kwrd);
|
|
}
|
|
});
|
|
|
|
}, 500);
|
|
|
|
});
|
|
}
|
|
|
|
// 최근 검색어 로드
|
|
function loadRecentSearches() {
|
|
let searchList = $('.recentSearch__list');
|
|
|
|
let searches = JSON.parse(localStorage.getItem('recentSearches')) || [];
|
|
if(!Array.isArray(searches)) {
|
|
searches = [];
|
|
}
|
|
searchList.innerHTML = '';
|
|
|
|
let str = "";
|
|
let cnt = 0;
|
|
searches.forEach(function (search) {
|
|
str += '<li class="recentSearch__item">' +
|
|
'<a class="recentSearch__link" href="/sopmal/goods/selectGoodsSrchForm?kwrd='+search+'">'+search+'</a>'+
|
|
'<button aria-label="검색기록 삭제" class="recentSearch__delete" onclick="deleteSearch('+cnt+');">'+
|
|
'<svg width="18" height="19" viewBox="0 0 18 19" fill="none" xmlns="http://www.w3.org/2000/svg">'+
|
|
'<path d="M3.60001 4.10001L14.4 14.9M3.60001 14.9L14.4 4.10001" stroke="#919191" stroke-miterlimit="10"></path>'+
|
|
'</svg>'+
|
|
'</button>'+
|
|
'</li>';
|
|
|
|
cnt++;
|
|
});
|
|
|
|
if(str == "") {
|
|
$('.recentSearch').html('<p class="recentSearch__noResult">최근 검색한 검색어가 없습니다.</p>');
|
|
}
|
|
|
|
searchList.html(str);
|
|
}
|
|
|
|
/*비밀번호 변경일 도래 여부 */
|
|
function passwordChngDeAt() {
|
|
const url = '<c:url value="/sopmal/mbr/selectPasswordChng"/>';
|
|
let passwordAt = '<%=(String)session.getAttribute("passwordChngDeAt")%>'
|
|
if(passwordAt ==='Y'){
|
|
location.href = url
|
|
}
|
|
}
|
|
|
|
/*연령확인 여부 확인 */
|
|
function ageChkAt() {
|
|
let ageChked = getCookieValue("ageChk");
|
|
if(!ageChked) {
|
|
openModal('confirm_ageChk_alert');
|
|
}
|
|
}
|
|
|
|
const fn_ageChk_yes = function() {
|
|
closeModal('confirm_ageChk_alert')
|
|
document.cookie = "ageChk=true; path=/; max-age=86400";
|
|
}
|
|
|
|
const fn_ageChk_no = function() {
|
|
window.location.href = "https://m.search.naver.com/search.naver?query=사케일잔";
|
|
}
|
|
|
|
//쿠키 값 가져오기
|
|
const getCookieValue = function(name) {
|
|
let matches = document.cookie.match(
|
|
new RegExp('(?:^|; )' + name + '=([^;]*)')
|
|
);
|
|
return matches ? matches[1] : null;
|
|
}
|
|
|
|
// 최근 검색어 저장
|
|
function saveSearch(param) {
|
|
let searches = JSON.parse(localStorage.getItem('recentSearches')) || [];
|
|
if (!Array.isArray(searches)) {
|
|
searches = [];
|
|
}
|
|
|
|
if (!searches.includes(param)) {
|
|
searches.push(param);
|
|
if (searches.length > 6) {
|
|
searches.shift(); // 6개를 초과하면 가장 오래된 검색어를 제거
|
|
}
|
|
localStorage.setItem('recentSearches', JSON.stringify(searches));
|
|
|
|
$.ajax({
|
|
type: 'post',
|
|
url: '<c:url value="/sopmal/goods/insertSrchwrdLog"/>',
|
|
data: { srchStr : param},
|
|
success: function () {}
|
|
});
|
|
}
|
|
}
|
|
|
|
// 최근 검색어 삭제
|
|
function deleteSearch(key) {
|
|
let searches = JSON.parse(localStorage.getItem('recentSearches')) || [];
|
|
if (!Array.isArray(searches)) {
|
|
searches = [];
|
|
}
|
|
searches.splice(key, 1); // 배열에서 특정 인덱스의 요소 삭제
|
|
localStorage.setItem('recentSearches', JSON.stringify(searches));
|
|
loadRecentSearches(); // 업데이트된 리스트 로드
|
|
}
|
|
|
|
// 최근 검색어 전체 삭제
|
|
function deleteSearchAll() {
|
|
localStorage.removeItem('recentSearches');
|
|
loadRecentSearches(); // 전체 삭제 후 리스트를 비움
|
|
}
|
|
|
|
|
|
const autoCompleteTag = $('.header-search-pop__auto-complete > ul');
|
|
|
|
// 검색어 자동 완성
|
|
function autoComplete(result, kwrd) {
|
|
let str = "";
|
|
let temp = "";
|
|
|
|
for(var i = 0; i < result.list.length; i++) {
|
|
temp = result.list[i].goodsNm.replace(kwrd, "<em>"+kwrd+"</em>");
|
|
// str += '<li>'+
|
|
// '<a href="/sopmal/goods/selectGoodsSrchForm?kwrd='+result.list[i].goodsNm+'">'+
|
|
// temp+
|
|
// '</a>'+
|
|
// '</li>';
|
|
str += '<li>'+
|
|
'<a href="javascript:void(0);" onclick="fn_search(\''+result.list[i].goodsNm+'\'); return false;">'+
|
|
temp+
|
|
'</a>'+
|
|
'</li>';
|
|
}
|
|
|
|
if(str == "") {
|
|
str = '<li>해당 단어로 시작하는 검색어가 없습니다.</li>';
|
|
}
|
|
|
|
autoCompleteTag.html(str);
|
|
};
|
|
|
|
// 검색창 열기
|
|
function fn_search_open() {
|
|
const searchPage = document.getElementsByClassName('searchPage');
|
|
|
|
searchPage.forEach(e => {
|
|
e.classList.add('active');
|
|
});
|
|
}
|
|
|
|
// 검색창 닫기
|
|
function fn_search_close() {
|
|
const searchPage = document.getElementsByClassName('searchPage');
|
|
const textBox = document.getElementById('header-search-bar');
|
|
textBox.value = "";
|
|
|
|
searchPage.forEach(e => {
|
|
e.classList.remove('active');
|
|
});
|
|
}
|
|
|
|
|
|
// 검색
|
|
function fn_search(kwrd) {
|
|
$('#header-search-bar').val(kwrd);
|
|
|
|
$('#search_btn').click();
|
|
}
|
|
|
|
<%--장바구니 갯수 조회--%>
|
|
fn_reflesh_cart_cnt();
|
|
|
|
// fn_go_back 함수: 마지막 URL로 이동하고, 그 URL은 배열에서 삭제
|
|
function fn_go_back() {
|
|
window.history.back();
|
|
}
|
|
</script>
|
|
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<input type = "hidden" id ="closeModalTarget"/>
|
|
<!-- 모달 validation-->
|
|
<div class="microModal microAlert" id="modal-error" aria-hidden="true" style="position: relative; z-index: 1010;">
|
|
<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-error-content">
|
|
</h2>
|
|
</div>
|
|
</div>
|
|
<div class="microModal__btnContainer">
|
|
<button type = "button" class="microModal__btn" id="modal-error-confirm">
|
|
<spring:message code="button.close"/>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<%--우편번호 찾기 마이크로 모달 div --%>
|
|
<div class="microModal microBottomSheet" id="postModal" aria-hidden="true" style="position: relative; z-index: 1010;">
|
|
<div class="microModal__overlay" tabindex="-1">
|
|
<div class="microModal__container" role="dialog" aria-modal="true">
|
|
<div class="microModal__body">
|
|
<div class="microModal__top">
|
|
<button class="microModal__close" aria-label="창 닫기" data-micromodal-close></button>
|
|
</div>
|
|
<div class="microModal__content">
|
|
<div id="postCodeCn" style="height: 70vh;"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<%--등록 확인 모달--%>
|
|
<div class="microModal microAlert" id="confirm_reg_alert" aria-hidden="true" style="position: relative; z-index: 1010;">
|
|
<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">
|
|
<spring:message code="confirm.common.insert"/>
|
|
</h2>
|
|
</div>
|
|
</div>
|
|
<div class="microModal__btnContainer">
|
|
<button class="microModal__btn" onclick="closeModal('confirm_reg_alert');enableButton('#regCfrmBtn');"><spring:message code="button.cancel"/></button>
|
|
<button class="microModal__btn microModal__btn-primary" id = "regCfrmBtn"><spring:message code="button.insert"/></button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<%--수정 확인 모달--%>
|
|
<div class="microModal microAlert" id="confirm_updt_alert" aria-hidden="true" style="position: relative; z-index: 1010;">
|
|
<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">
|
|
<spring:message code="confirm.common.update"/>
|
|
</h2>
|
|
</div>
|
|
</div>
|
|
<div class="microModal__btnContainer">
|
|
<button class="microModal__btn" onclick="closeModal('confirm_updt_alert');enableButton('#updtCfrmBtn');"><spring:message code="button.cancel"/></button>
|
|
<button class="microModal__btn microModal__btn-primary" id = "updtCfrmBtn"><spring:message code="button.update"/></button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<%--삭제 확인 모달--%>
|
|
<div class="microModal microAlert" id="confirm_del_alert" aria-hidden="true" style="position: relative; z-index: 1010;" >
|
|
<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">
|
|
<spring:message code="confirm.common.delete"/>
|
|
</h2>
|
|
</div>
|
|
</div>
|
|
<div class="microModal__btnContainer">
|
|
<button class="microModal__btn" onclick="closeModal('confirm_del_alert');enableButton('#delCfrmBtn');"><spring:message code="button.cancel"/></button>
|
|
<button class="microModal__btn microModal__btn-primary" id = "delCfrmBtn"><spring:message code="button.delete"/></button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<%--등록 성공 모달--%>
|
|
<div class="microModal microAlert" id="success_reg_alert" aria-hidden="true" style="position: relative; z-index: 1010;">
|
|
<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">
|
|
<spring:message code="success.common.insert"/>
|
|
</h2>
|
|
</div>
|
|
</div>
|
|
<div class="microModal__btnContainer">
|
|
<button class="microModal__btn" id = "regSuccessBtn"><spring:message code="button.ok"/></button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<%--수정 성공 모달--%>
|
|
<div class="microModal microAlert" id="success_updt_alert" aria-hidden="true" style="position: relative; z-index: 1010;">
|
|
<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">
|
|
<spring:message code="success.common.update"/>
|
|
</h2>
|
|
</div>
|
|
</div>
|
|
<div class="microModal__btnContainer">
|
|
<button class="microModal__btn" id = "updtSuccessBtn"><spring:message code="button.ok"/></button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<%--삭제 성공 모달--%>
|
|
<div class="microModal microAlert" id="success_del_alert" aria-hidden="true" style="position: relative; z-index: 1010;">
|
|
<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">
|
|
<spring:message code="success.common.delete"/>
|
|
</h2>
|
|
</div>
|
|
</div>
|
|
<div class="microModal__btnContainer">
|
|
<button class="microModal__btn" id = "delSuccessBtn"><spring:message code="button.ok"/></button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<%--비밀번호 불일치--%>
|
|
<div class="microModal microAlert" id="failPwMatch" aria-hidden="true" style="position: relative; z-index: 1010;">
|
|
<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">
|
|
<spring:message code="fail.common.pwMatch"/>
|
|
</h2>
|
|
</div>
|
|
</div>
|
|
<div class="microModal__btnContainer">
|
|
<button class="microModal__btn" data-micromodal-close="" aria-label="창 닫기"><spring:message code="button.ok"/></button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<%--비회원 로그인 유도 모달--%>
|
|
<div class="microModal microAlert" id="login_alert" aria-hidden="true" style="position: relative; z-index: 1010;">
|
|
<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">
|
|
회원만 사용가능합니다.<br/>
|
|
로그인하시겠습니까?
|
|
</h2>
|
|
</div>
|
|
</div>
|
|
<div class="microModal__btnContainer">
|
|
<button class="microModal__btn microModal__btn-primary" onclick="fn_move_login();"><spring:message code="button.yes"/></button>
|
|
<button class="microModal__btn" aria-label="창 닫기" onclick = "closeModal('login_alert')"><spring:message code="button.no"/></button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<%--연령확인 모달--%>
|
|
<div class="microModal microAlert" id="confirm_ageChk_alert" aria-hidden="true" style="font-family: 'Noto Sans JP', 'Noto Sans KR', sans-serif;">
|
|
<div class="microModal__overlay" tabindex="-1">
|
|
<div class="microModal__container" role="dialog" aria-modal="true" style="width: 350px;">
|
|
<div class="microModal__body">
|
|
<div class="microModal__top">
|
|
<p class="alert-content__text" style="font-size: 20px;">
|
|
満20歳以上ですか?<br>
|
|
(만20세 이상입니까?)
|
|
</p>
|
|
<br>
|
|
<p class="alert-content__text--sm" style="font-size: 15px;">
|
|
20歳未満の飲酒は法律で禁止されています。<br>
|
|
(20세 미만의 음주는 법으로 금지되어 있습니다.)
|
|
</p>
|
|
<br>
|
|
</div>
|
|
</div>
|
|
<div class="microModal__btnContainer">
|
|
<button class="microModal__btn microModal__btn-primary" onclick="fn_ageChk_yes();">はい (예)</button>
|
|
<button class="microModal__btn" onclick="fn_ageChk_no()">いいえ (아니오)</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<%--cutom 확인 모달--%>
|
|
<div class="microModal microAlert" id="custom_confirm_alert" aria-hidden="true" style="position: relative; z-index: 1010;">
|
|
<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="customConfirmAlertCn">
|
|
</h2>
|
|
</div>
|
|
</div>
|
|
<div class="microModal__btnContainer">
|
|
<button class="microModal__btn microModal__btn-primary" id="customConfirmBtn"><spring:message code="button.ok"/></button>
|
|
<button class="microModal__btn" aria-label="창 닫기" onclick = "closeModal('custom_confirm_alert')"><spring:message code="button.cancel"/></button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<%--cutom 확인 모달--%>
|
|
<div class="microModal microAlert" id="custom_alert" aria-hidden="true" style="position: relative; z-index: 1010;">
|
|
<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="customAlertCn">
|
|
</h2>
|
|
</div>
|
|
</div>
|
|
<div class="microModal__btnContainer">
|
|
<button class="microModal__btn" aria-label="창 닫기" onclick = "closeModal('custom_alert')" id="customAlertBtn"><spring:message code="button.ok"/></button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="searchPage">
|
|
<div class="searchPage__inner">
|
|
<form id="search-form">
|
|
<div class="searchPage__header">
|
|
|
|
<div class="innerSearch">
|
|
<input id="header-search-bar" name="kwrd" type="search" placeholder="검색어를 입력해 주세요" title="검색어 입력">
|
|
<button class="searchPage__textDeleteBtn">
|
|
<svg width="16" height="16" viewBox="0 0 16 16" fill="none"
|
|
xmlns="http://www.w3.org/2000/svg">
|
|
<circle cx="8.00023" cy="7.99974" r="6.93333" fill="#b3b3b3"></circle>
|
|
<path d="M5.06689 5.06641L10.9336 10.9331M5.06689 10.9331L10.9336 5.06641"
|
|
stroke="#ffffff" stroke-width="1.25" stroke-miterlimit="10"></path>
|
|
</svg>
|
|
</button>
|
|
<button id="search_btn"><i class="icon icon_nav-search"></i></button>
|
|
</div>
|
|
|
|
<div class="header-search-pop__auto-complete">
|
|
<ul>
|
|
|
|
</ul>
|
|
</div>
|
|
<button type="button" class="searchPage__closeBtn" onclick="fn_search_close();">
|
|
<span class="visually-hidden">검색어 삭제</span>
|
|
<svg xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" width="24" height="24"
|
|
viewBox="0 0 24 24">
|
|
<path
|
|
d="M 4.9902344 3.9902344 A 1.0001 1.0001 0 0 0 4.2929688 5.7070312 L 10.585938 12 L 4.2929688 18.292969 A 1.0001 1.0001 0 1 0 5.7070312 19.707031 L 12 13.414062 L 18.292969 19.707031 A 1.0001 1.0001 0 1 0 19.707031 18.292969 L 13.414062 12 L 19.707031 5.7070312 A 1.0001 1.0001 0 0 0 18.980469 3.9902344 A 1.0001 1.0001 0 0 0 18.292969 4.2929688 L 12 10.585938 L 5.7070312 4.2929688 A 1.0001 1.0001 0 0 0 4.9902344 3.9902344 z">
|
|
</path>
|
|
</svg>
|
|
</button>
|
|
</div>
|
|
</form>
|
|
|
|
<div class="searchPage__body">
|
|
<div class="searchPage__section">
|
|
<div class="searchPage__sectionHeader">
|
|
<h5 class="searchPage__title">최근 검색어</h5>
|
|
<button class="recentSearch__deleteAll">전체삭제</button>
|
|
</div>
|
|
<div class="recentSearch">
|
|
<ul class="recentSearch__list">
|
|
|
|
|
|
</ul>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 인기 검색어 -->
|
|
<div class="searchPage__section">
|
|
<div class="searchPage__sectionHeader">
|
|
<h5 class="searchPage__title">인기 검색어</h5>
|
|
</div>
|
|
<ul class="resultTrend__list">
|
|
<c:forEach var="popularSrchwrd" items="${ topBarInfo.popularSrchwrd }" varStatus="status">
|
|
<li>
|
|
<a href="javascript:void(0);" onclick="fn_search('${ popularSrchwrd.popularSrchwrd }'); return false;">
|
|
<span class="resultTrend__num">${ status.index +1 }</span>${ popularSrchwrd.popularSrchwrd }
|
|
</a>
|
|
</li>
|
|
</c:forEach>
|
|
</ul>
|
|
<!-- TODO: 이미지 배너 확인 필요. -->
|
|
<!-- <div class="subList__banner"> -->
|
|
<!-- <a href=""> -->
|
|
<!-- <img src="/mobile/images/브랜드및제품바로가기이미지02.png" alt=""> -->
|
|
<!-- </a> -->
|
|
<!-- </div> -->
|
|
<!-- <div class="subList__banner"> -->
|
|
<!-- <a href=""> -->
|
|
<!-- <img src="/mobile/images/브랜드및제품바로가기이미지03.png" alt=""> -->
|
|
<!-- </a> -->
|
|
<!-- </div> -->
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- 햄버거 메뉴 모달 -->
|
|
<div class="microModal microFullMenu" id="hamburger-menu" aria-hidden="true">
|
|
<div class="microModal__overlay" tabindex="-1">
|
|
<div class="microModal__container" role="dialog" aria-modal="true">
|
|
<div class="microModal__body" id = "hambergerModal">
|
|
<div class="microModal__top">
|
|
<h2 class="microModal__title">
|
|
전체메뉴
|
|
</h2>
|
|
<button type="button" class="microModal__close" onclick="closeModal('hamburger-menu');"></button>
|
|
</div>
|
|
<div class="microModal__content">
|
|
<div class="fullMenu">
|
|
<c:if test="${not isAuthenticated}">
|
|
<div class="sub-box">
|
|
<div class="fullMenu__top">
|
|
<button type="button" class="btn md outline" onclick="fn_move_login();">로그인</button>
|
|
<button type="button" class="btn md theme" onclick="location.href='/sopmal/mbr/selectJoinGuidance'; setTopMenuCode(); ">회원가입</button>
|
|
</div>
|
|
</div>
|
|
</c:if>
|
|
<div class="sub-box">
|
|
<div class="fullMenu__top">
|
|
<div class="member-rank-summary">
|
|
<div class="textBtns">
|
|
<a href="/index" class="textBtns__btn">홈으로</a>
|
|
<a href="/sopmal/ordr/selectSpbk" class="textBtns__btn">장바구니</a>
|
|
<c:choose>
|
|
<c:when test="${isAuthenticated}"><%--회원일시--%>
|
|
<a href="/sopmal/mpage/mbr/selectMpageMainInqire" class="textBtns__btn">마이페이지</a>
|
|
<a href="/sopmal/logout" class="textBtns__btn">로그아웃</a>
|
|
</c:when>
|
|
<c:otherwise><%--비회원일시--%>
|
|
<a href="/sopmal/mpage/ordr/selectMbrOrdrListInqire" class="textBtns__btn">주문조회</a>
|
|
</c:otherwise>
|
|
</c:choose>
|
|
</div>
|
|
<c:if test = "${isAuthenticated}">
|
|
<div class="member-rank-summary__top">
|
|
<div class="member-rank-summary__icon" id = "hambergerGradImg"></div>
|
|
<a href="/sopmal/mpage/mbr/selectMpageMainInqire" class="member-rank-summary__user">
|
|
<span class="member-rank-summary__rank" id = "hambergerGradNm"></span>
|
|
<span class="member-rank-summary__name" id = "hambergermbrNm"></span>
|
|
</a>
|
|
<a class="member-rank-summary__benefit-link" href="/sopmal/mpage/bnef/selectMbrGradInqire">등급별 혜택</a>
|
|
</div>
|
|
<div class="member-rank-summary__bottom">
|
|
<div class="member-rank-summary__summary">
|
|
<a href="/sopmal/mpage/bnef/selectMlgDtlsInqireForm" class="member-rank-summary__summary-item">
|
|
<img src="/mobile/images/icon_member-rank-mileage.png"
|
|
alt="">
|
|
<div class="member-rank-summary__summary-description">
|
|
<span class="member-rank-summary__summary-name">마일리지</span>
|
|
<p class="member-rank-summary__summary-numberContainer">
|
|
<span
|
|
class="member-rank-summary__summary-number comma"
|
|
id = "hambergerMbrMlgAmt"></span>
|
|
<span
|
|
class="member-rank-summary__summary-numberUnit">원</span>
|
|
</p>
|
|
</div>
|
|
</a>
|
|
<a href="/sopmal/mpage/bnef/selectCouponDtlsForm" class="member-rank-summary__summary-item">
|
|
<img src="/mobile/images/icon_member-rank-coupon.png" alt="">
|
|
<div class="member-rank-summary__summary-description">
|
|
<span class="member-rank-summary__summary-name">쿠폰</span>
|
|
<p class="member-rank-summary__summary-numberContainer">
|
|
<span class="member-rank-summary__summary-number comma" id = "hambergerCoupnCnt"></span>
|
|
<span
|
|
class="member-rank-summary__summary-numberUnit">장</span>
|
|
</p>
|
|
</div>
|
|
</a>
|
|
<a href="/sopmal/mpage/ordr/selectWslistInqireForm" class="member-rank-summary__summary-item">
|
|
<img src="/mobile/images/icon_member-rank-wishlist.png" alt="">
|
|
<div class="member-rank-summary__summary-description">
|
|
<span class="member-rank-summary__summary-name">위시리스트</span>
|
|
<p class="member-rank-summary__summary-numberContainer">
|
|
<span class="member-rank-summary__summary-number comma"
|
|
id = "hambergerWslistCnt"></span>
|
|
<span
|
|
class="member-rank-summary__summary-numberUnit">개</span>
|
|
</p>
|
|
</div>
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</c:if>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sub-box">
|
|
<div class="menu_navigation_wrap">
|
|
<!-- 카테고리 -->
|
|
<ul class="side_menu accordion">
|
|
<c:if test="${!empty sopmallInfo}">
|
|
<c:forEach var="topMenuList" items="${sopmallInfo.menuList}" varStatus="status">
|
|
<c:if test="${topMenuList.ctgryDvCd eq '01'}">
|
|
<c:if test="${topMenuList.gnbExpsrAt eq 'Y'}">
|
|
<c:if test="${topMenuList.rnum eq '2'}">
|
|
<c:set var="mDpth3Chk" value="N"/>
|
|
<li class="isSub list">
|
|
<div class="isSubDv">
|
|
<a href="<c:out value="${topMenuList.url}"/>" class="depth"><c:out value ="${topMenuList.ctgryNm}"/><em class="visually-hidden">상세내용닫기</em></a>
|
|
<a href="<c:out value="${topMenuList.url}"/>" class="moer"></a>
|
|
</div>
|
|
</c:if>
|
|
<c:if test="${topMenuList.rnum eq '3'}">
|
|
<!-- 메뉴 하위가 메뉴인 경우-->
|
|
<c:if test="${chkUpperMenuCd ne topMenuList.upperCtgryId}">
|
|
<c:set var="mDpth3Chk" value="Y"/>
|
|
<ul class="view">
|
|
</c:if>
|
|
<li><a href='<c:out value="${topMenuList.url}"/>'><c:out value ="${topMenuList.ctgryNm}"/></a></li>
|
|
</c:if>
|
|
<c:if test="${topMenuList.rnum < 4}">
|
|
<c:set var="chkUpperMenuCd" value="${topMenuList.upperCtgryId}"/>
|
|
</c:if>
|
|
</c:if>
|
|
|
|
<c:if test="${topMenuList.nextDepth3 eq '0' && topMenuList.nextDepth2 eq '0'}">
|
|
<c:if test="${topMenuList.rnum eq '2'}">
|
|
</li>
|
|
</c:if>
|
|
<c:if test="${topMenuList.rnum eq '3'}">
|
|
<c:if test="${mDpth3Chk eq 'Y'}">
|
|
</ul>
|
|
</c:if>
|
|
</li>
|
|
</c:if>
|
|
</c:if>
|
|
</c:if>
|
|
</c:forEach>
|
|
</c:if>
|
|
</ul>
|
|
<!-- 최근 본 상품(SIDE) -->
|
|
<div class="recently_side" id = "recentlySite">
|
|
<%--<div class="swiper recentlySide-swiper">
|
|
<div class="swiper-wrapper" id="recentlySite">
|
|
|
|
<div class="swiper-slide recentlySide__image">
|
|
<a href="">
|
|
<img src="/mobile/images/상품이미지01.png" alt="해당 이미지에 대한 설명">
|
|
</a>
|
|
</div>
|
|
<div class="swiper-slide recentlySide__image">
|
|
<a href="">
|
|
<img src="/mobile/images/상품이미지01.png" alt="해당 이미지에 대한 설명">
|
|
</a>
|
|
</div>
|
|
<div class="swiper-slide recentlySide__image">
|
|
<a href="">
|
|
<img src="/mobile/images/상품이미지01.png" alt="해당 이미지에 대한 설명">
|
|
</a>
|
|
</div>
|
|
|
|
<div class="swiper-slide recentlySide__image">
|
|
<a href="">
|
|
<img src="/mobile/images/상품이미지01.png" alt="해당 이미지에 대한 설명">
|
|
</a>
|
|
</div>
|
|
<div class="swiper-slide recentlySide__image">
|
|
<a href="">
|
|
<img src="/mobile/images/상품이미지01.png" alt="해당 이미지에 대한 설명">
|
|
</a>
|
|
</div>
|
|
|
|
</div>
|
|
<div class="swiper-pagination theme-pagination"></div>
|
|
</div>--%>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sub-box">
|
|
<div class="fullMenu__miscLinks">
|
|
<h5 class="fullMenu__miscLinks__title">서비스</h5>
|
|
<ul class="fullMenu__miscLinks__list">
|
|
<li>
|
|
<a href="/sopmal/csc/selectCscMainForm" class="fullMenu__miscLinks__link">고객센터</a>
|
|
</li>
|
|
<c:if test="${sopmallInfo.shopInfo.sopmalCd eq 'NC' && sopmallInfo.shopInfo.sopmalCd eq 'CH'}"><%--뉴트리코어,참다한만--%>
|
|
<li><a href="/sopmal/main/selectStrListForm" class="fullMenu__miscLinks__link">매장안내</a></li>
|
|
</c:if>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
<c:if test = "${sopmallInfo.shopInfo.cscTelnbOrdrPosblAt eq 'Y'}">
|
|
<div class="sub-box">
|
|
<div class="mainNotice__customerContact mainNotice__customerContact--moreInfo">
|
|
<i class="icon icon_notice03"></i>
|
|
<div class="mainNotice__customerContact__right">
|
|
<h4 class="notice__title customer-service">고객센터</h4>
|
|
<span class="notice__number"><c:out value="${sopmallInfo.shopInfo.cscTelnb}"/></span>
|
|
<p class="notice__paragraph">
|
|
<span class="notice__text01"><c:out value="${sopmallInfo.shopInfo.cscWkdayWorkTme}"/></span>
|
|
<span class="notice__text02">(<c:out value="${sopmallInfo.shopInfo.cscLunchTme}"/>)</span>
|
|
<br>
|
|
<span class="notice__text03"><c:out value="${sopmallInfo.shopInfo.cscRstde}"/></span>
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</c:if>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<script>
|
|
////햄버거 메뉴 관련 스크립트
|
|
// 좌측 메뉴 클릭시 해당 메뉴 보여주기
|
|
$('.fullMenu__menu__btn').on('click', function () {
|
|
$(this).addClass('current');
|
|
$(this).closest('li').siblings().find('.fullMenu__menu__btn').removeClass('current');
|
|
var index = $(this).closest('li').index() - 1; // 전체 메뉴 버튼을 뺀 나머지 버튼의 인덱스
|
|
$(this).closest('.fullMenu__content').find('.fullMenu__itemSection').eq(index).siblings().hide();
|
|
$(this).closest('.fullMenu__content').find('.fullMenu__itemSection').eq(index).show();
|
|
});
|
|
|
|
// 전체 메뉴 클릭시 전체 메뉴 보여주기
|
|
$('.fullMenuAll').on('click', function () {
|
|
$(this).addClass('current');
|
|
$(this).closest('li').siblings().find('.fullMenu__menu__btn').removeClass('current');
|
|
$(this).closest('.fullMenu__content').find('.fullMenu__itemSection').show();
|
|
});
|
|
|
|
//
|
|
$('.hamburgerTabBtn').on('click', function () {
|
|
$('.hamburgerTabBtn').removeClass('active');
|
|
$(this).addClass('active');
|
|
var index = $(this).closest('li').index();
|
|
$('.fullMenu__content').removeClass('active');
|
|
$('.fullMenu__content').eq(index).addClass('active');
|
|
});
|
|
|
|
$(document).ready(function(){
|
|
MicroModal.init({
|
|
disableScroll: true,
|
|
awaitCloseAnimation: true,
|
|
});
|
|
|
|
$(".menu_navigation_wrap .depth").on('click', function () {
|
|
/*하위레벨 없을 시 페이지 이동*/
|
|
if ($(this).closest(".isSub").find(".view").length === 0) {
|
|
const href = $(this).attr("href");
|
|
location.href = href;
|
|
}
|
|
});
|
|
});
|
|
</script>
|
|
|
|
<%--광고스크립트 정보--%>
|
|
<input type="hidden" id="adScriptDeviceTy" value="${deviceType}"/>
|
|
<% String adscriptMbrId = "";
|
|
if(!ObjectUtils.isEmpty(session.getAttribute("adscriptMbrId"))){
|
|
adscriptMbrId = session.getAttribute("adscriptMbrId").toString();
|
|
request.setAttribute("adscriptMbrId",adscriptMbrId);
|
|
|
|
}%>
|
|
<input type="hidden" id="adscriptMbrId" value="${adscriptMbrId}"/>
|
|
|
|
<div id="mbrMarktClauseAgreeDiv"></div>
|
|
|
|
<script>
|
|
|
|
/*최초 로그인시 마케팅 수신동의를 받지 않았을 경우 마케팅 수신동의 팝업 띄우기*/
|
|
$(document).ready(function() {
|
|
const name = 'marktAgreeAt'
|
|
const cookieValue = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)');
|
|
const agreeAt = cookieValue? cookieValue[2] : null;
|
|
|
|
//현재경로
|
|
let locationUrl = window.location.pathname;
|
|
|
|
//마케팅 수신동의 여부가 없으면 마케팅 수신동의 여부 팝업 띄우기
|
|
if(agreeAt ==='N' && !locationUrl.includes("selectMbrPurchsForm")){
|
|
|
|
document.cookie = 'marktAgreeAt=P; path=/'
|
|
|
|
//해당팝업이 오픈된건 마케팅수신동의여부가 없어서 열림
|
|
const stplatDvCd = '05'
|
|
|
|
|
|
$.ajax({
|
|
type: 'post',
|
|
url: "/sopmal/mbr/selectMbrMarktAgreePopup",
|
|
data: {stplatDvCd: stplatDvCd},
|
|
success: function (data) {
|
|
$('#mbrMarktClauseAgreePopup').remove();
|
|
$('#mbrMarktClauseAgreeDiv').html(data)
|
|
openModal('mbrMarktClauseAgreePopup');
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
//회원 주문서 작성페이지에는 미노출 처리
|
|
if(locationUrl.includes("selectMbrPurchsForm")){
|
|
document.cookie = 'marktAgreeAt=P; path=/'
|
|
}
|
|
})
|
|
|
|
//광고 수신동의여부 수정
|
|
$(document).on('click', '[name^="globalMbrMarktAgreeAt"]',function() {
|
|
|
|
const agreeAt = $(this).attr('id').split('-')[1];
|
|
|
|
console.log('agreeAt', agreeAt)
|
|
|
|
|
|
//광고수신동의 여부 수정
|
|
$.ajax({
|
|
type: 'post',
|
|
url: "/sopmal/mbr/updateMarkRecptnAgreUpdt",
|
|
data: {marktRecptnAgreAt: agreeAt},
|
|
success: function (data) {
|
|
console.log(data)
|
|
|
|
const result = JSON.parse(data.resBody.result)
|
|
|
|
//신규회원가입쿠폰 발행되었을 경우 메시지
|
|
if(result.status === '0'){
|
|
|
|
alert(result.message);
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
//모달 포커스 해제
|
|
$(this).blur()
|
|
closeModal('mbrMarktClauseAgreePopup')
|
|
|
|
|
|
})
|
|
</script>
|
|
</html> |