초기소스

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,343 @@
<%@ 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" %>
<footer class="footer">
<div class="footer-top">
<div class="footer-top__inner">
<ul class="footer-top__link">
<c:if test="${!empty sopmallInfo}">
<c:forEach var="topMenuList" items="${sopmallInfo.menuList}" varStatus="status">
<c:if test="${topMenuList.ctgryDvCd eq '03'}">
<li><a href='<c:out value="${topMenuList.url}"/>' onclick="setTopMenuCode()"
<c:if test = "${fn:contains(topMenuList.url,'/sopmal/main/selectClause?stplatDvCd=02')}">class="footer-body__text01" </c:if>><c:out value="${topMenuList.ctgryNm}"/></a></li>
</c:if>
</c:forEach>
</c:if>
</ul>
<c:if test = "${not empty footerInfo.footerInfo.familySite}">
<select class="family-site-link" title="해당 셀렉트에 대한 설명">
<option value="" disabled selected>FAMILY SITE</option>
<c:forEach var = "familySite" items = "${footerInfo.footerInfo.familySite}">
<option value="<c:out value="${familySite.familySiteUrl}"/>"><c:out value="${familySite.familySiteNm}"/></option>
</c:forEach>
</select>
</c:if>
</div>
</div>
<div class="footer-body">
<div class="footer-body__inner">
<c:set var="operBsnmInfo" value="${footerInfo.footerInfo.operBsnmInfo}"/>
<c:set var="sleBsnmInfo" value="${footerInfo.footerInfo.sleBsnmInfo}"/>
<c:set var="sopmalInfo" value="${footerInfo.footerInfo.sopmalInfo}"/>
<c:set var="designSetup" value="${footerInfo.footerInfo.designSetup}"/>
<c:set var="scriptSetup" value="${footerInfo.footerInfo.scriptSetup}"/>
<c:choose>
<c:when test="${ designSetup.lptManageSetupDvCd eq '01' }">
<c:set var="footerCn" value="${ designSetup.footerCn }"/>
<c:set var="footerCn" value="${ fn:replace(footerCn, '{reprsntTelnb}', sopmalInfo.reprsntTelnb) }"/>
<c:set var="footerCn" value="${ fn:replace(footerCn, '{reprsntEmail}', sopmalInfo.reprsntEmail) }"/>
<c:set var="footerCn" value="${ fn:replace(footerCn, '{cscWkdayWorkTme}', sopmalInfo.cscWkdayWorkTme) }"/>
<c:set var="footerCn" value="${ fn:replace(footerCn, '{cscLunchTme}', sopmalInfo.cscLunchTme) }"/>
<c:set var="footerCn" value="${ fn:replace(footerCn, '{cscRstde}', sopmalInfo.cscRstde) }"/>
<c:set var="footerCn" value="${ fn:replace(footerCn, '{cscTelnb}', sopmalInfo.cscTelnb) }"/>
<c:set var="footerCn" value="${ fn:replace(footerCn, '{rejectTelnb}', sopmalInfo.rejectTelnb) }"/>
<c:set var="footerCn" value="${ fn:replace(footerCn, '{ascEntrpsNm}', sopmalInfo.ascEntrpsNm) }"/>
<c:set var="footerCn" value="${ fn:replace(footerCn, '{ascWkdayWorkTme}', sopmalInfo.ascWkdayWorkTme) }"/>
<c:set var="footerCn" value="${ fn:replace(footerCn, '{ascLunchTme}', sopmalInfo.ascLunchTme) }"/>
<c:set var="footerCn" value="${ fn:replace(footerCn, '{ascZip}', sopmalInfo.ascZip) }"/>
<c:set var="footerCn" value="${ fn:replace(footerCn, '{ascAdres}', sopmalInfo.ascAdres) }"/>
<c:set var="footerCn" value="${ fn:replace(footerCn, '{ascDtlAdres}', sopmalInfo.ascDtlAdres) }"/>
<c:set var="footerCn" value="${ fn:replace(footerCn, '{operBsnmNm}', operBsnmInfo.bsnmNm) }"/>
<c:set var="footerCn" value="${ fn:replace(footerCn, '{operBizrnb}', operBsnmInfo.bizrnb) }"/>
<c:set var="footerCn" value="${ fn:replace(footerCn, '{operReprsntvnm}', operBsnmInfo.reprsntvnm) }"/>
<c:set var="footerCn" value="${ fn:replace(footerCn, '{operLnbAdres}', operBsnmInfo.lnbAdres) }"/>
<c:set var="footerCn" value="${ fn:replace(footerCn, '{operRnmAdres}', operBsnmInfo.rnmAdres) }"/>
<c:set var="footerCn" value="${ fn:replace(footerCn, '{operDtlAdres}', operBsnmInfo.dtlAdres) }"/>
<c:set var="footerCn" value="${ fn:replace(footerCn, '{operIndvdlinfoPrtcRspnberNm}', operBsnmInfo.indvdlinfoPrtcRspnberNm) }"/>
<c:set var="footerCn" value="${ fn:replace(footerCn, '{sleBsnmNm}', sleBsnmInfo.bsnmNm) }"/>
<c:set var="footerCn" value="${ fn:replace(footerCn, '{sleBizrnb}', sleBsnmInfo.bizrnb) }"/>
<c:set var="footerCn" value="${ fn:replace(footerCn, '{sleReprsntvnm}', sleBsnmInfo.reprsntvnm) }"/>
<c:set var="footerCn" value="${ fn:replace(footerCn, '{sleLnbAdres}', sleBsnmInfo.lnbAdres) }"/>
<c:set var="footerCn" value="${ fn:replace(footerCn, '{sleRnmAdres}', sleBsnmInfo.rnmAdres) }"/>
<c:set var="footerCn" value="${ fn:replace(footerCn, '{sleDtlAdres}', sleBsnmInfo.dtlAdres) }"/>
<c:set var="footerCn" value="${ fn:replace(footerCn, '{sleIndvdlinfoPrtcRspnberNm}', sleBsnmInfo.indvdlinfoPrtcRspnberNm) }"/>
${footerCn}
</c:when>
<c:when test="${ designSetup.lptManageSetupDvCd eq '02' }">
<c:choose>
<c:when test="${operBsnmInfo.bsnmInnb ne sleBsnmInfo.bsnmInnb}">
<span class="footer-body__text01">
판매사업자 : <c:out value="${sleBsnmInfo.bsnmNm}"/>
</span>
<p class="footer-body__text02">
대표자 : <c:out value="${sleBsnmInfo.reprsntvnm}"/>
주소:
<c:choose>
<c:when test="${not empty sleBsnmInfo.rnmAdres && not empty sleBsnmInfo.lnbAdres}">
<c:out value="${sleBsnmInfo.lnbAdres}"/>
</c:when>
<c:when test="${empty sleBsnmInfo.rnmAdres && not empty sleBsnmInfo.lnbAdres}">
<c:out value="${sleBsnmInfo.lnbAdres}"/>
</c:when>
<c:when test="${not empty sleBsnmInfo.rnmAdres && empty sleBsnmInfo.lnbAdres}">
<c:out value="${sleBsnmInfo.rnmAdres}"/>
</c:when>
</c:choose>
<c:out value="${sleBsnmInfo.dtlAdres}"/>
대표전화 : <c:out value="${sopmalInfo.reprsntTelnb}"/>
대표이메일 :
<a href="mailto:<c:out value='${sopmalInfo.reprsntEmail}'/>">
<c:out value="${sopmalInfo.reprsntEmail}"/>
</a>
<br/>
개인정보관리책임자 : <c:out value="${sleBsnmInfo.indvdlinfoPrtcRspnberNm}"/>
사업자 등록번호: <c:out value="${sleBsnmInfo.bizrnb}"/>
<a href="javascript:;" onclick="window.open('https://www.ftc.go.kr/bizCommPop.do?wrkr_no=<c:out value='${sleBsnmInfo.replaceBizrnb}'/>','communicationViewPopup','width=750,height=700,scrollbars=yes')">
[사업자정보확인]
</a>
통신판매업 신고번호 : <c:out value="${sleBsnmInfo.mobDclNb}"/>
<br/>
[ <a href="#selerInfo" rel="modal:open">판매자 정보</a> ] &nbsp; &nbsp;
[ <a href="#indvdlInfoProcsModal" rel="modal:open" onclick="fn_get_indvdlInfoPorcsCn();">판매자 개인정보 처리방침</a> ]
</p>
<p class="footer-body__text03">
통신판매중개사업자 : <c:out value="${operBsnmInfo.bsnmNm}"/>
<br/>
대표자 : <c:out value="${operBsnmInfo.reprsntvnm}"/> &nbsp;
주소:
<c:choose>
<c:when test="${not empty operBsnmInfo.rnmAdres && not empty operBsnmInfo.lnbAdres}">
<c:out value="${operBsnmInfo.lnbAdres}"/>
</c:when>
<c:when test="${empty operBsnmInfo.rnmAdres && not empty operBsnmInfo.lnbAdres}">
<c:out value="${operBsnmInfo.lnbAdres}"/>
</c:when>
<c:when test="${not empty operBsnmInfo.rnmAdres && empty operBsnmInfo.lnbAdres}">
<c:out value="${operBsnmInfo.rnmAdres}"/>
</c:when>
</c:choose>
<c:out value="${operBsnmInfo.dtlAdres}"/>
대표전화 : <c:out value="${operBsnmInfo.telnb}"/>&nbsp;
대표이메일 :
<a href="mailto:<c:out value='${operBsnmInfo.email}'/>">
<c:out value="${operBsnmInfo.email}"/>
</a>
<br/>
개인정보관리책임자 : <c:out value="${operBsnmInfo.indvdlinfoPrtcRspnberNm}"/>&nbsp;
사업자 등록번호: <c:out value="${operBsnmInfo.bizrnb}"/>&nbsp;
<a href="javascript:;" onclick="window.open('https://www.ftc.go.kr/bizCommPop.do?wrkr_no=<c:out value='${operBsnmInfo.replaceBizrnb}'/>','communicationViewPopup','width=750,height=700,scrollbars=yes')">
[사업자정보확인]
</a> &nbsp;
통신판매업 신고번호 : <c:out value="${operBsnmInfo.mobDclNb}"/>
<br/>
<c:out value="${operBsnmInfo.bsnmNm}"/>는 통신판매중개자이며, 통신판매의 당사자가 아닙니다.
상품 및 거래와 관련한 의무와 책임은 판매자에게 있습니다.
<br/>
Copyright ⓒ<c:out value="${operBsnmInfo.bsnmNm}"/> All rights reserved.
</p>
<div class="footer-image-container">
<%--
<img src="/pc/images/푸터로고.png" alt="해당 이미지에 대한 설명">
<div class="footer-image-container__misc">
<img src="/pc/images/푸터이미지01.png" alt="해당 이미지에 대한 설명">
<img src="/pc/images/푸터이미지02.png" alt="해당 이미지에 대한 설명">
</div>
--%>
</div>
</c:when>
<c:otherwise>
<span class="footer-body__text01">
사업자명 : <c:out value="${operBsnmInfo.bsnmNm}"/>
</span>
<p class="footer-body__text02">
대표자 : <c:out value="${operBsnmInfo.reprsntvnm}"/> &nbsp;
주소:
<c:choose>
<c:when test="${not empty operBsnmInfo.rnmAdres && not empty operBsnmInfo.lnbAdres}">
<c:out value="${operBsnmInfo.lnbAdres}"/>
</c:when>
<c:when test="${empty operBsnmInfo.rnmAdres && not empty operBsnmInfo.lnbAdres}">
<c:out value="${operBsnmInfo.lnbAdres}"/>
</c:when>
<c:when test="${not empty operBsnmInfo.rnmAdres && empty operBsnmInfo.lnbAdres}">
<c:out value="${operBsnmInfo.rnmAdres}"/>
</c:when>
</c:choose>
<c:out value="${operBsnmInfo.dtlAdres}"/> &nbsp;
대표전화 : <c:out value="${sopmalInfo.reprsntTelnb}"/> &nbsp;
대표이메일 :
<a href="mailto:<c:out value='${sopmalInfo.reprsntEmail}'/>">
<c:out value="${sopmalInfo.reprsntEmail}"/>
</a>
<br/>
개인정보관리책임자 : <c:out value="${operBsnmInfo.indvdlinfoPrtcRspnberNm}"/> &nbsp;
사업자 등록번호: <c:out value="${operBsnmInfo.bizrnb}"/>
<a href="javascript:;" onclick="window.open('https://www.ftc.go.kr/bizCommPop.do?wrkr_no=<c:out value='${operBsnmInfo.replaceBizrnb}'/>','communicationViewPopup','width=750,height=700,scrollbars=yes')">
[사업자정보확인]
</a> &nbsp;
통신판매업 신고번호 : <c:out value="${sleBsnmInfo.mobDclNb}"/>
</p>
<p class="footer-body__text03">
Copyright ⓒ<c:out value="${sleBsnmInfo.bsnmNm}"/> All rights reserved.
</p>
<div class="footer-image-container">
<%--
<img src="/pc/images/푸터로고.png" alt="해당 이미지에 대한 설명">
<div class="footer-image-container__misc">
<img src="/pc/images/푸터이미지01.png" alt="해당 이미지에 대한 설명">
<img src="/pc/images/푸터이미지02.png" alt="해당 이미지에 대한 설명">
</div>
--%>
</div>
</c:otherwise>
</c:choose>
</c:when>
</c:choose>
</div>
</div>
<c:if test="${scriptSetup.scriptCnUseAt eq 'Y'}">
${scriptSetup.scriptCn}
</c:if>
<div id="selerInfo" class="modal alert" style="display: none; max-width: 600px;">
<div class="modal-header">
<div class="modal-header__title">판매자 정보</div>
</div>
<div class="modal-content">
<div class="popModalContent__inner">
<div class="popModalContent__reviewBenefit">
<dl>
<dt>상호명</dt>
<dd><c:out value="${sleBsnmInfo.bsnmNm}"/></dd>
</dl>
<dl>
<dt>대표자</dt>
<dd><c:out value="${sleBsnmInfo.reprsntvnm}"/></dd>
</dl>
<dl>
<dt>사업자등록번호</dt>
<dd><c:out value="${sleBsnmInfo.bizrnb}"/></dd>
</dl>
<dl>
<dt>통신판매업번호</dt>
<dd><c:out value="${sleBsnmInfo.mobDclNb}"/></dd>
</dl>
<c:if test = "${not empty sleBsnmInfo.bsnDclNb}">
<dl>
<dt>영업신고번호</dt>
<dd><c:out value="${sleBsnmInfo.bsnDclNb}"/></dd>
</dl>
</c:if>
<dl>
<dt>사업장 소재지</dt>
<dd><c:choose>
<c:when test = "${not empty operBsnmInfo.rnmAdres && not empty operBsnmInfo.lnbAdres}">
<c:out value="${operBsnmInfo.lnbAdres}"/>
</c:when>
<c:when test = "${empty operBsnmInfo.rnmAdres && not empty operBsnmInfo.lnbAdres}">
<c:out value="${operBsnmInfo.lnbAdres}"/>
</c:when>
<c:when test = "${not empty operBsnmInfo.rnmAdres && empty operBsnmInfo.lnbAdres}">
<c:out value="${operBsnmInfo.rnmAdres}"/>
</c:when>
</c:choose><c:out value="${sleBsnmInfo.dtlAdres}"/></dd>
</dl>
<c:if test = "${footerInfo.footerInfo.sopmalInfo.cscTelnbOrdrPosblAt eq 'Y' && not empty footerInfo.footerInfo.sopmalInfo.cscTelnb}">
<dl>
<dt>고객센터</dt>
<dd>
<c:out value="${footerInfo.footerInfo.sopmalInfo.cscTelnb}"/>
</dd>
</dl>
</c:if>
<dl>
<dt>email</dt>
<dd>
<c:out value="${sleBsnmInfo.email}"/>
</dd>
</dl>
</div>
</div>
</div>
<div class="alert-btn-container">
<a href="#" rel="modal:close" class="alert-btn alert-btn--confirm">확인</a>
</div>
</div>
<div id="indvdlInfoProcsModal" class="modal alert" style="display: none; max-width: 800px;">
<div class="modal-header">
<div class="modal-header__title">판매자 개인정보 처리 방침</div>
</div>
<div class="modal-content" id = "indvdlInfoProcsContent">
<input type = "hidden" value = "N" id = "indvdlInfoProcsAjaxAt"/>
</div>
<div class="alert-btn-container">
<a href="#" rel="modal:close" class="alert-btn alert-btn--confirm">확인</a>
</div>
</div>
</footer>
<script>
/*판매자 개인정보 처리방침 조회*/
const fn_get_indvdlInfoPorcsCn = () => {
const indvdlInfoProcsAjaxAt = $("#indvdlInfoProcsAjaxAt").val();
if (indvdlInfoProcsAjaxAt === 'N') {
$.ajax({
type: 'post',
url: "/sopmal/main/selectIndvdlInfoProcsCn",
data : {stplatDvCd : '08'},
success: function (data) {
data = data.resBody.result;
data = JSON.parse(data);
let clauseList = data.clauseList;
if (clauseList) {
let i = 0;
clauseList.forEach(function (item) {
if (i === 0) {
$("#indvdlInfoProcsContent").append(item.stplatCn);
return false;
}
});
$("#indvdlInfoProcsContent").addClass("ck-content");
}
$("#indvdlInfoProcsAjaxAt").val("Y");
}
});
}
};
function setTopMenuCode() {
document.cookie = "checkMenu=Y";
}
</script>
<c:if test="${sopmallInfo.shopInfo.sopmalCd eq 'DL'}">
<script>
(function(){var w=window;if(w.ChannelIO){return w.console.error("ChannelIO script included twice.");}var ch=function(){ch.c(arguments);};ch.q=[];ch.c=function(args){ch.q.push(args);};w.ChannelIO=ch;function l(){if(w.ChannelIOInitialized){return;}w.ChannelIOInitialized=true;var s=document.createElement("script");s.type="text/javascript";s.async=true;s.src="https://cdn.channel.io/plugin/ch-plugin-web.js";var x=document.getElementsByTagName("script")[0];if(x.parentNode){x.parentNode.insertBefore(s,x);}}if(document.readyState==="complete"){l();}else{w.addEventListener("DOMContentLoaded",l);w.addEventListener("load",l);}})();
ChannelIO('boot', {
"pluginKey": "f73ed102-2f9c-44ff-ab17-dc18045401a2" // fill your plugin key
});
</script>
</c:if>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,459 @@
<%@ 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" %>
<%--
Class Name : include.jsp
Description : 통합관리자 CSS 및 JS 공통 include
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2023-12-14 최범식 최초 생성
--%>
<%-- CSS --%>
<!-- 모든 사이트 공통 -->
<link rel="stylesheet" href="<c:url value='/pc/css/default.css'/>">
<!-- 네이버페이 확인용 css(실제 API 적용할땐 삭제하시면 됩니다.) -->
<link rel="stylesheet" href="<c:url value='/pc/css/pay.css'/>">
<!-- jquery -->
<script src="<c:url value='/pc/vendor/jquery-3.7.1.min.js'/>"></script>
<!-- 슬라이드 -->
<link rel="stylesheet" type="text/css" href="<c:url value='/pc/vendor/slick/slick.css'/>">
<link rel="stylesheet" type="text/css" href="<c:url value='/pc/vendor/slick/slick-theme.css'/>">
<script src="<c:url value='/pc/vendor/slick/slick.min.js'/>"></script>
<!-- 실시간검색 -->
<script src="<c:url value='/pc/vendor/jquery.vticker.js'/>"></script>
<!-- 커스텀 셀렉트 박스 -->
<script src="<c:url value='/pc/vendor/jquery-nice-select/jquery.nice-select.min.js'/>"></script>
<link rel="stylesheet" href="<c:url value='/pc/vendor/jquery-nice-select/nice-select.css'/>">
<!-- 제이쿼리 모달 -->
<script src="<c:url value='/pc/vendor/jquery-modal/jquery.modal.min.js'/>"></script>
<link rel="stylesheet" href="<c:url value='/pc/vendor/jquery-modal/jquery.modal.min.css'/>">
<!-- 제이쿼리 모달 -->
<script src="<c:url value='/pc/vendor/dropzone/dropzone.min.js'/>"></script>
<link rel="stylesheet" href="<c:url value='/pc/vendor/dropzone/dropzone.min.css'/>">
<!-- 스크립트 -->
<script src="//t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js"></script>
<script src="<c:url value='/js/sopmal/common.js'/>"></script>
<script src="<c:url value='/pc/js/script.js'/>" defer></script>
<script src="<c:url value='/js/sopmal/gcone.js'/>"></script>
<%--Web-App연동 스크립트--%>
<script src="/mobile/js/bnft/common/Common_app.js" defer=""></script>
<!-- 파일 업로드 -->
<script src="<c:url value='/js/sopmal/fileupload_comm.js'/>"></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" type="text/css" href="<c:url value='/pc/vendor/jquery-ui/jquery-ui.min.css'/>">
<link rel="stylesheet" type="text/css" href="<c:url value='/pc/vendor/jquery-ui/jquery-ui.structure.css'/>">
<script src="<c:url value='/pc/vendor/jquery-ui/jquery-ui.min.js'/>"></script>
<!-- popModal -->
<link rel="stylesheet" type="text/css" href="<c:url value='/pc/vendor/popModal/popModal.min.css'/>">
<script src="<c:url value='/pc/vendor/popModal/popModal.min.js'/>"></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>${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: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}"/>
<script type="text/javascript">
/*****************************************************************
* 로딩이미지
****************************************************************/
const loding = function (isShow) {
if (isShow) {
$('.loadingImg').show();
} else {
$('.loadingImg').hide();
}
};
$.ajaxSetup({
beforeSend: function (jqXhr, settins) {
jqXhr.setRequestHeader('AJAX', true);
$("#overlay").fadeIn();
loding(true);
},
complete: function () {
//동시에 여러개의 AJAX가 수행될 경우를 대비하여 delay를 설정
setTimeout(function () {
$("#overlay").fadeOut();
loding(false);
}, 500);
},
error: function (data, status, error) {
fn_ajax_error(data, status, error);
}
});
//ajax error 공통 처리 함수
//* 개별처리 필요 할 시 공통 함수 선언 후 개별 처리 할 수 있음
function fn_ajax_error(data, status, error) {
$("#overlay").fadeOut();
loding(true);
console.log(data);
if (data?.responseJSON?.resBody?.message != null) {
if (fn_check_json(data.responseJSON.resBody.message)) {
const errorObject = JSON.parse(data.responseJSON.resBody.message);
console.log(errorObject);
if (!errorObject) {
alert('<spring:message code="error.internal-server"/>');
} else {
if (!errorObject.errorMsg) {
alert('<spring:message code="error.internal-server"/>');
} else {
alert(errorObject.errorMsg);
let isMtched = false;
$('.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) {
isMtched = true;
break;
}
}
if (isMtched) {
$(this).focus();
return false;
}
});
}
}
} else {
if (data.responseJSON.resBody.message) {
alert(data.responseJSON.resBody.message);
}else {
alert('<spring:message code="error.internal-server"/>');
}
}
}
if (data?.responseJSON?.resBody?.result != null) {
if (fn_check_json(data.responseJSON.resBody.result)) {
const errorObject = JSON.parse(data.responseJSON.resBody.result);
console.log(errorObject);
if (!errorObject) {
alert('<spring:message code="error.internal-server"/>');
} else {
if (!errorObject.errorMsg) {
alert('<spring:message code="error.internal-server"/>');
} else {
alert(errorObject.errorMsg);
let isMtched = false;
$('.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) {
isMtched = true;
break;
}
}
if (isMtched) {
$(this).focus();
return false;
}
});
}
}
} else {
if (data.responseJSON.resBody.result) {
alert(data.responseJSON.resBody.result);
} else {
alert('<spring:message code="error.internal-server"/>');
}
}
}
else if (data.status !== 200) {
if (data.status !== 0) {
if(data.responseJSON.resBody.result){
const result = JSON.parse(data.responseJSON.resBody.result);
alert(result.errorMsg);
}else{
alert('<spring:message code="error.internal-server"/>');
}
}
}
}
</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="${sopmallInfo.themaPath}">
<script>
<%--장바구니 갯수 조회--%>
fn_reflesh_cart_cnt()
/*비밀번호 변경 알림 여부 확인*/
$(document).ready(function () {
const url = '<c:url value="/sopmal/mbr/selectPasswordChng"/>';
const originalUrl = window.location.href;
let passwordAt = '<%=(String)session.getAttribute("passwordChngDeAt")%>'
if (passwordAt === 'Y') {
location.href = url + '?originalUrl=' + encodeURIComponent(originalUrl);
}
})
</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)
$('#mbrMarktClauseAgreePopup').modal()
}
});
}
//회원 주문서 작성페이지에는 미노출 처리
if (locationUrl.includes("selectMbrPurchsForm")) {
document.cookie = 'marktAgreeAt=P; path=/'
}
})
//광고 수신동의여부 수정
function fn_global_mbr_markt_agree_at(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);
}
}
});
}
</script>
<!--로딩영역-->
<div class="loadingImg" style="display:none; position: relative; z-index: 1010;">
<div class="loding_popup_wrap"><img src="/mobile/images/loading.svg" alt="loading"></div>
</div>

View File

@@ -0,0 +1,74 @@
<%@ 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"%>
<header class="header">
<div class="header__top">
<div class="header-left">
<div class="header__logo">
<a href="/admin/main">
<img src="/admin/images/logo_default.png" alt="GC ONE 관리자">
<span class="header__logo-title">통합관리자</span>
</a>
</div>
</div>
<div class="header-right">
<a href="#notification-list-pop" rel="modal:open" class="header-right__notification">
<i class="icon icon_notification"></i>
<span class="visually-hidden">알림</span>
<span class="number-badge">3</span>
</a>
<c:if test="${isAuthenticated}">
<div class="header-right__user-info">
<i class="icon icon_user-info"></i>
<c:out value="${userNm}"/>님
<div class="userInfo-float">
<div class="userInfo-float__top">
<i class="icon icon_user-info-big"></i>
<div class="userInfo-float__info">
<p class="userInfo-float__info-row">
<c:out value="${userNm}"/>
</p>
</div>
</div>
<div class="userInfo-float__bottom">
<a href="javascript:void(0)" onclick="setTopMenuCode('','/admin/use/mngr/selectMngrInfoInqireForm')" class="btn outline sm">정보수정</a>
<a href="/admin/logout" class="btn dark sm">로그아웃</a>
</div>
</div>
</div>
</c:if>
</div>
</div>
<div class="header__bottom">
<nav class="header-nav">
<div class="header-nav__fullMenu-trigger">
<a class="header-nav__fullMenu-trigger-btn" href="#full-menu" rel="modal:open" style="pointer-events: none">
<span>통합관리자시스템</span>
</a>
</div>
<div class="header-nav__right">
<ul>
<c:if test="${!empty topMenuList}">
<c:forEach var="topMenuList" items="${topMenuList.menuList}" varStatus="status">
<c:set var="topMenuCd" value="${sessionScope.topMenuCd}" />
<li <c:if test="${topMenuCd eq topMenuList.menuCd}"> class="current" </c:if>>
<a href="javascript:void(0)" onclick="setTopMenuCode('<c:out value="${topMenuList.menuCd}"/>','<c:out value="${topMenuList.url}"/>')"><c:out value ="${topMenuList.menuNm}"/></a>
</li>
</c:forEach>
</c:if>
</ul>
</div>
</nav>
</div>
</header>
<script>
function setTopMenuCode(topMenuCd, topMenuUrl) {
document.cookie = "topMenuCd=" + topMenuCd + "; path=/admin";
document.cookie = "leftMenuCd=" + "" + "; path=/admin";
document.cookie = "upperMenuCd=" + "" + "; path=/admin";
document.cookie = "topMenuUrl=" + topMenuUrl + "; path=/admin";
document.cookie = "checkMenu=Y" + "; path=/admin";
window.location.href = topMenuUrl;
}
</script>

View File

@@ -0,0 +1,190 @@
<%@ 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" %>
<%--
Class Name : include.jsp
Description : 통합관리자 CSS 및 JS 공통 include
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2023-12-14 박철민 최초 생성
--%>
<!-- 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>
<%--파비콘 , 메타정보--%>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="\assets\favicon\gcone.ico">
<title>GC ONE 통합관리자</title>
<%--mixed Contents 대응--%>
<spring:eval expression="@environment.getProperty('spring.profiles.active')" var="profiles"/>
<c:if test="${profiles eq 'stage'}">
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
</c:if>
<%-- CSS --%>
<link rel="stylesheet" href="/admin/css/style.css"> <!-- ADMIN CSS -->
<link rel="stylesheet" href="/admin/vendor/jquery-nice-select/nice-select.css">
<link rel="stylesheet" href="/admin/vendor/jquery-ui/jquery-ui.min.css">
<link rel="stylesheet" href="/admin/vendor/jquery-ui/jquery-ui.structure.css">
<link rel="stylesheet" href="/admin/vendor/jquery-modal/jquery.modal.min.css">
<link rel="stylesheet" href="<c:url value='/mngr/vendor/time-picker/timepicker.css'/>">
<link rel="stylesheet" href="<c:url value='/mngr/vendor/dropzone/dropzone.min.css'/>">
<link rel="stylesheet" href="<c:url value='/mngr/vendor/jstree/themes/default/style.min.css'/>">
<%-- JS --%>
<script src="//t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js"></script>
<%--<script src="/webjars/jquery/3.7.1/jquery.min.js"></script>--%>
<script src="/admin/vendor/jquery-3.7.1.min.js""></script>
<%--<script src="/webjars/jquery-nice-select/1.1.0/js/jquery.nice-select.min.js"></script> --%>
<script src="/admin/vendor/jquery-nice-select/jquery.nice-select.min.js"></script>
<%--<script src="/webjars/jquery-ui/jquery-ui.min.js"></script>--%>
<script src="/admin/vendor/jquery-ui/jquery-ui.min.js"></script>
<%--<script src="/webjars/jquery-modal/0.9.1/jquery.modal.min.js"></script>--%>
<script src="/admin/vendor/jquery-modal/jquery.modal.min.js"></script>
<script src="<c:url value='/admin/vendor/tablednd/jquery.tablednd.1.0.5.min.js'/>"></script>
<script src="<c:url value='/mngr/vendor/time-picker/timepicker.min.js'/>"></script>
<script src="<c:url value='/admin/vendor/tablednd/jquery.tablednd.1.0.5.min.js'/>"></script>
<script src="<c:url value='/mngr/vendor/dropzone/dropzone.min.js'/>"></script>
<script src="<c:url value='/mngr/vendor/chart.js/chart.umd.min.js'/>"></script>
<script src="<c:url value='/admin/vendor/jstree/jstree.min.js'/>"></script>
<script src="<c:url value='/ckeditor/ckeditor.js'/>"></script>
<script src="<c:url value='/ckeditor/uploadAdapter.js'/>"></script>
<script src="<c:url value='/jchartfx/js/jchartfx.system.js'/>"></script>
<script src="<c:url value='/jchartfx/js/jchartfx.coreVector.js'/>"></script>
<script src="<c:url value='/admin/js/script.js'/>" defer></script> <!-- ADMIN 스크립트 함수 -->
<script src="<c:url value='/js/gcone.js'/>"></script> <!-- 공통 스크립트 함수 -->
<meta name="robots" content="noindex,nofollow">
<script type="text/javascript">
$.ajaxSetup({
beforeSend: function (jqXhr, settins) {
jqXhr.setRequestHeader('AJAX', true);
$("#overlay").fadeIn();
},
complete: function () {
//동시에 여러개의 AJAX가 수행될 경우를 대비하여 delay를 설정
setTimeout(function () {
$("#overlay").fadeOut();
}, 500);
},
error: function (data) {
$("#overlay").fadeOut();
loding(false);
if (data?.responseJSON?.resBody?.result != null) {
if (!data.responseJSON.resBody.result) {
alert('<spring:message code="error.internal-server"/>');
} else {
if (fn_check_json(data.responseJSON.resBody.result)) {
const errorObject = JSON.parse(data.responseJSON.resBody.result);
if (!errorObject) {
alert('<spring:message code="error.internal-server"/>');
} else {
if (!errorObject.errorMsg) {
alert('<spring:message code="error.internal-server"/>');
} else {
alert(errorObject.errorMsg);
let isMtched = false;
$('.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) {
isMtched = true;
break;
}
}
if (isMtched) {
$(this).focus();
return false;
}
});
}
}
} else {
if (data.responseJSON.resBody.result) {
alert(data.responseJSON.resBody.result);
} else {
alert('<spring:message code="error.ajax"/>');
}
}
}
} else {
alert('<spring:message code="error.ajax"/>');
}
}
});
/**********************************************************************
* 회원 crm정보 모달 호출(공통)
* 파라미터 설명 {
* obj : 호출버튼 객체
* mbrInnb : 회원 고유번호
* mbrDvCd : 회원 구분코드
* modalDiv : 모달 selector
* }
**********************************************************************/
const fn_select_crm_mini_info = function(obj, mbrInnb, mbrDvCd, modalDiv,sopmalCd){
const element = $(obj); // 클릭된 요소
let offset = element.offset();
const info = $(obj).attr("data-info");
$.ajax({
type : 'POST',
url : "<c:url value='/admin/use/mbr/selectMbrInfo'/>",
data: {
mbrDvCd : mbrDvCd,
mbrInnb : mbrInnb,
sopmalCd : sopmalCd
},
success : function(html) {
fn_close_modal(info);
$(modalDiv).html(html);
$("#" + info).css({
top: offset.top + element.outerHeight(), // 첫 번째 모달의 아래로 설정
left: offset.left-150,
width: $("#" + info).width() + 50,
zIndex: 9998 // 첫 번째 모달보다 위에 표시되도록 설정
});
$("#" + info).show();
}
});
};
/**********************************************************************
* CMR 레이어 팝업 닫기 버튼 클릭 이벤트
**********************************************************************/
$(document).on('click', '.mini-info-content__close', function(e) {
e.preventDefault();
$(this).closest(".mini-info-content").hide();
});
/*****************************************************************
* 로딩이미지
****************************************************************/
$(document).on("click", '.loading', function(){
loding(true);
});
const loding = function(isShow) {
if(isShow){
$('.loding_wrap').show();
}else{
$('.loding_wrap').hide();
}
};
</script>
<!--로딩영역-->
<div class="loding_wrap" style="display:none; position: relative; z-index: 1010;">
<div class="loding_popup_wrap"><img src="/mngr/images/loding.gif" alt="loading"></div>
</div>

View File

@@ -0,0 +1,84 @@
<%@ 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"%>
<aside class="side-nav">
<nav class="side-nav__inner">
<ul class="depth2">
<c:if test="${!empty leftMenuList}">
<c:forEach var="leftMenuList" items="${leftMenuList.menuList}" varStatus="status">
<!-- 선택한 TOP메뉴코드 -->
<c:set var="topMenuCd" value="${sessionScope.topMenuCd}" />
<!-- 선택한 LEFT메뉴코드 -->
<c:set var="leftMenuCd" value="${sessionScope.leftMenuCd}" />
<!-- 선택한 LEFT메뉴의 상위 코드 -->
<c:set var="upperMenuCd" value="${sessionScope.upperMenuCd}" />
<!-- 2뎁스의 메뉴 조회 -->
<c:if test="${'2' eq leftMenuList.menuDepth}">
<c:choose>
<%-- 2뎁스 밑에 3뎁스가 있는 경우 Sample --%>
<c:when test="${'1' eq leftMenuList.nextDepth3}">
<c:set var="depth2MenuCd" value="${leftMenuList.menuCd}" />
<c:choose>
<c:when test="${depth2MenuCd eq upperMenuCd || (status.index eq 0 && empty leftMenuCd)}">
<li class="has-sub opened">
</c:when>
<c:otherwise>
<li class="has-sub">
</c:otherwise>
</c:choose>
<div class="depth2-title"><c:out value ="${leftMenuList.menuNm}"/></div>
<ul class="depth3">
</c:when>
<%-- 2뎁스 밑에 3뎁스가 없는 경우 Sample --%>
<c:otherwise>
<c:choose>
<c:when test="${leftMenuCd eq leftMenuList.menuCd || (status.index eq 0 && empty leftMenuCd)}">
<li class="current">
</c:when>
<c:otherwise>
<li>
</c:otherwise>
</c:choose>
<a class="depth2-title" href="javascript:void(0)" onclick="fn_select_left('<c:out value="${topMenuCd}"/>','<c:out value="${leftMenuList.menuCd}"/>','<c:out value="${leftMenuList.upperMenuCd}"/>', '<c:out value="${leftMenuList.url}"/>')"><c:out value ="${leftMenuList.menuNm}"/></a>
</li>
</c:otherwise>
</c:choose>
</c:if>
<!-- 3뎁스의 메뉴 조회 -->
<c:if test="${'3' eq leftMenuList.menuDepth}">
<c:choose>
<c:when test="${leftMenuCd eq leftMenuList.menuCd || (status.index eq 1 && empty leftMenuCd)}">
<li class="current">
</c:when>
<c:otherwise>
<li>
</c:otherwise>
</c:choose>
<a href="javascript:void(0)" onclick="fn_select_left('<c:out value="${topMenuCd}"/>','<c:out value="${leftMenuList.menuCd}"/>','<c:out value="${leftMenuList.upperMenuCd}"/>', '<c:out value="${leftMenuList.url}"/>')"><c:out value ="${leftMenuList.menuNm}"/></a>
</li>
</c:if>
<!-- 3뎁스가 끝나고 새로운 2뎁스가 시작되면 태그를 닫아준다-->
<c:if test="${'1' eq leftMenuList.nextDepth2}">
</ul>
</li>
</c:if>
</c:forEach>
</c:if>
</ul>
</nav>
</aside>
<script>
function fn_select_left(topMenuCd, leftMenuCd, upperMenuCd, leftMenuUrl) {
document.cookie = "topMenuCd=" + topMenuCd + "; path=/admin";
document.cookie = "leftMenuCd=" + leftMenuCd + "; path=/admin";
document.cookie = "upperMenuCd=" + upperMenuCd + "; path=/admin";
document.cookie = "leftMenuUrl=" + leftMenuUrl + "; path=/admin";
document.cookie = "checkMenu=Y" + "; path=/admin";
window.location.href = leftMenuUrl;
}
</script>

View File

@@ -0,0 +1,340 @@
<%@ 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="spring" uri="http://www.springframework.org/tags" %>
<!DOCTYPE html>
<html lang="ko">
<spring:eval expression="@environment.getProperty('mngrfo.common.fileupload.cdnurl')" var="cdnurl"/>
<script>
// 현재 창의 이름을 'crmWin'로 설정
window.onload = function() {
if (!window.name) {
window.name = 'crmWin';
}
}
$(document).ready(function (){
// 전화와 왔을 경우
if (window.parent !== window) {
var sopmalCd = parent.document.ValidForm.sopmalCd.value;
// console.log('header > sopmalCd (쇼핑몰 이름, 로고 get) : ' + sopmalCd);
// fn_select_sopmal_name(sopmalCd);
}
/*
* crm버튼 선택 이벤트
*/
$(document).on('click', '#btnCrm', function() {
const td = $(this).closest('td');
const mbrInnb = $(td).find('.mbrInnb').val();
const mbrDvCd = $(td).find('.mbrDvCd').val();
fn_move_crm_cnslt(mbrInnb, mbrDvCd);
});
$("#srchKyword").on('keydown', function (event) {
if (event.keyCode === 13) {
event.preventDefault();
fn_select_crm_mbr_popup(1);
}
});
$("#mainSrchKyword").on('keydown', function (event) {
if (event.keyCode === 13) {
event.preventDefault();
fn_select_crm_mbr_popup(1);
}
});
});
// 전화 쇼피몽 이름 창 닫기
const fn_sopmal_bar_close = function() {
$('#callSopmalNm').hide();
}
// 쇼핑몰 이름 조회
const fn_select_sopmal_name = function (sopmalCd) {
const url = '<c:url value="/crm/main/selectSopmalNm"/>';
$.ajax({
type: 'POST',
url: url,
data: {
sopmalCd : sopmalCd
},
success: function (data) {
let result = JSON.parse(data.resBody.result);
//콜 들어올 시 회색 바 노출
let message = result.sopmalNm + ' 전화';
$('#sopmalNm').text(message);
$('#callSopmalNm').show();
//해당 브랜드 로고 header로고에 등록
if(!fn_is_empty(result.topFilCours)){
const cdnurl = '${cdnurl}';
const logoImgSrc = cdnurl + result.topFilCours + '/' + result.topSysFilNm;
$("#crmMainLogo").attr("src",logoImgSrc);
}
}
});
}
// window.addEventListener('message', function(event) {
// if(event.data.functionName == 'recordKeyLoad') {
// fn_sopmal_bar_close()
// }
// }, false);
/******************************************************
* CRM 회원 검색 조회
*******************************************************/
const fn_select_crm_mbr_popup = function () {
const url = '<c:url value="/crm/main/selectCrmMbrSrchForm"/>';
// 전화와 왔을 경우
if (window.parent !== window) {
var sopmalCd = parent.document.ValidForm.sopmalCd.value;
$("#mainSopmalCd").val(sopmalCd);
$("#ctiAt").val("Y");
}
let data = $('#mainMbrSrchFrom').serialize();
$.ajax({
type: 'POST',
url: url,
data: data,
success: function (data) {
$('#crmSearchPopup').remove();
$('#popupDiv').html(data);
$('#crmSearchPopup').modal();
// $("#searchBtn").click();
}
});
// 하나면 바로 이동
// 여러개명 팝업 호출
}
/******************************************************
* CRM 회원 검색 조회
*******************************************************/
const fn_select_crm_mbr_list = function (pageIndex, pageUnit, srchKywordDv, srchKyword) {
if (srchKywordDv !== undefined && srchKywordDv !== '') {
$('#popSrchKywordDv').val(srchKywordDv);
}
if (srchKyword !== undefined && srchKyword !== '') {
$('#popSrchKyword').val(srchKyword);
}
let dataStr;
if (!pageIndex) {
$('#mbrPopPageIndex').val(1);
} else {
$('#mbrPopPageIndex').val(pageIndex);
}
if (!pageUnit) {
dataStr = $('#mbrSrchForm').serialize();
} else {
if ($('#pageUnit').length) {
$('#pageUnit').val(pageUnit);
dataStr = $('#mbrSrchForm').serialize();
} else {
dataStr = $('#mbrSrchForm').serialize() + '&pageUnit=' + pageUnit;
}
}
$('#pageIndex').val(pageIndex);
$.ajax({
type: "post",
url: "<c:url value="/crm/main/selectCrmMbrSrch"/>",
data: dataStr,
success: function (resultHtml) {
$('#mbrPageDiv').html(resultHtml);
let bool;
if(fn_is_empty($("#popSrchKyword"))){
bool = isValidPhoneNumber($("#mainSrchKyword").val().replaceAll('-',''));
}else{
bool = isValidPhoneNumber($("#popSrchKyword").val().replaceAll('-',''));
}
if (fn_return_parents_totcnt().totalRecordCount == 0 && $("#headerSrch").val() === 'phone' && bool) {//검색조건이 휴대폰번호이고 비회원이면 비회원으로 crm 넘어감
fn_move_crm_cnslt('', '', $("#mainSrchKyword").val());
} else if (fn_return_parents_totcnt().totalRecordCount == 1) {//회원 1명
fn_move_crm_cnslt(fn_return_parents_totcnt().mbrInnb, fn_return_parents_totcnt().mbrDvCd);
} else { //회원 다수
$(".mbtlnb").each(function () {
let mbtlnb = fn_format_mbtlnb($(this).text().trim());
mbtlnb = mbtlnb.replace(/(\d{3})-(\d{4})-(\d{4})/, "$1-****-$3");
$(this).text(mbtlnb);
});
}
}
});
};
//휴대폰번호 숫자만 허용
function isValidPhoneNumber(phoneNumber) {
// 한국 전화번호 형식: 010-1234-5678, 02-123-4567 등
const phoneRegex = /^[0-9]+$/;
return phoneRegex.test(phoneNumber);
}
/******************************************************
* 회원 목록 총 개수 반환
*******************************************************/
const fn_return_parents_totcnt = function () {
let totCnt = $('#totCnt').val();
let mbrInnb = null;
let mbrDvCd = null;
if (totCnt === '1') {
mbrInnb = $('input[name="oneMbrInnb"]').val();
mbrDvCd = $('input[name="oneMbrDvCD"]').val();
}
const data = {
totalRecordCount: totCnt,
mbrInnb: mbrInnb,
mbrDvCd: mbrDvCd
};
return data;
}
</script>
<header class="header">
<div class="header__top">
<div class="header-left">
<div class="header__logo">
<%
if(request.getCookies() != null){
for(Cookie cookie : request.getCookies()){
if("authSopmalCd".equals(cookie.getName())){
request.setAttribute("cookieAuthSopmalCd", cookie.getValue());
break;
}
}
}
%>
<c:if test="${not empty crmMenuList.menuList}">
<c:forEach var = "crmTopMenuList" items = "${crmMenuList.menuList}" varStatus="status">
<c:if test = "${crmTopMenuList.expsrLcDvCd eq '01' && crmTopMenuList.sortOrdr eq '1'}">
<a href="<c:out value="${crmTopMenuList.url}"/>" style="background:#eeeeee;margin-right: 18px;">
<c:choose>
<c:when test = "${not empty siteList && not empty cookieAuthSopmalCd}">
<c:forEach var="site" items="${siteList}">
<c:if test = "${cookieAuthSopmalCd eq site.sopmalCd}">
<img src="<c:out value="${cdnurl}${site.topFilCours}/${site.topSysFilNm}"/>" alt="<c:out value="${site.sopmalNm}"/>">
</c:if>
</c:forEach>
</c:when>
<c:otherwise>
<img src="/crm/images/logo_white.png" alt="GC ONE 관리자" id="crmMainLogo">
</c:otherwise>
</c:choose>
<span class="header__logo-title"><c:out value="${crmTopMenuList.menuNm}"/></span>
</a>
</c:if>
</c:forEach>
</c:if>
</div>
<div class="header-searchBar">
<form id="mainMbrSrchFrom">
<div class="header-searchBar__inner">
<div class="header-searchBar__select">
<select name="srchKywordDv" title="검색어 구분" id = "headerSrch">
<option value="phone" selected>휴대전화</option>
<option value="name">이름</option>
<option value="id">아이디</option>
<option value="email">이메일</option>
</select>
</div>
<input class="header-searchBar__input" id ="mainSrchKyword" type="text" name="srchKyword" title="검색어 입력" placeholder="검색어를 입력하세요" value="<c:out value="${ mainVO.phone }"/>">
<input type="hidden" name="sopmalCd" id="mainSopmalCd" value="<c:out value="${ mainVO.sopmalCd }"/>"/>
<input type="hidden" name="ctiAt" id="ctiAt"/>
<button class="header-searchBar__btn" type="button" id="srchBtn" onclick="fn_select_crm_mbr_popup(); return false;"><span class="visually-hidden">검색</span></button>
</div>
</form>
</div>
<ul class="header-crmLink">
<c:if test="${not empty crmMenuList.menuList}">
<c:forEach var="crmTopMenuList" items="${crmMenuList.menuList}" varStatus="status">
<c:if test="${crmTopMenuList.expsrLcDvCd eq '01' && crmTopMenuList.sortOrdr ne '1'}">
<c:choose>
<c:when test = "${fn:contains(crmTopMenuList.url,'/sopmal/mbr/selectJoinGuidance')}"><%--회원등록은 사용자 url로 이동--%>
<li><a onclick="fn_move_sopmal_bbs_list('','','<c:out value="${crmTopMenuList.url}"/>')" target="_blank" style="cursor:pointer"><c:out value="${crmTopMenuList.menuNm}"/></a></li>
</c:when>
<c:when test = "${fn:contains(crmTopMenuList.url,'/crm/ordr/selectMngrOrdrRegistForm')}"><%--주문등록--%>
<li><a onclick="fn_move_mngr_ordr_regist_form('${cnsltVO.mbrInnb}','${cnsltVO.mbrDvCd}','${cnsltVO.mbtlnb}')" target="_blank" style="cursor:pointer"><c:out value="${crmTopMenuList.menuNm}"/></a></li>
</c:when>
<c:otherwise>
<li><a href="<c:out value="${crmTopMenuList.url}"/>" target="_blank"><c:out value="${crmTopMenuList.menuNm}"/></a></li>
</c:otherwise>
</c:choose>
</c:if>
</c:forEach>
</c:if>
</ul>
</div>
<div class="header-right">
<div class="header-right__linkContainer">
<a class="btn outline xsm" href="/mngr/main" title="관리자 바로가기" target="adminWin">
<i class="icon icon_headerLaptop"></i>
관리자 바로가기
</a>
</div>
<div class="header-right__user-info">
<c:out value="${userNm}"/>님
<div class="userInfo-float">
<div class="userInfo-float__top">
<i class="icon icon_user-info-big"></i>
<div class="userInfo-float__info">
<p class="userInfo-float__info-row">
${userNm}
</p>
<p class="userInfo-float__info-row">
</p>
</div>
</div>
<div class="userInfo-float__bottom">
<a href="/mngr/setup/mngr/selectMngrInfoInqireForm" class="btn outline sm">정보수정</a>
<a href="/logout" class="btn dark sm">로그아웃</a>
</div>
</div>
</div>
<button class="header-right__logout" onclick="location.href='/logout'">
<i class="icon icon_logout-white"></i>
로그아웃
</button>
</div>
</div>
<div id = 'popupDiv'></div>
<!-- crm 전화 쇼핑몰 이름 -->
<div id="callSopmalNm" style="
width:100%; height:35px;
background-color:#ccc;
position:absolute; top:0px;
/* display: flex; */
align-items: center;
justify-content: space-between;
padding-right: 10px;
display: none;
">
<span id="sopmalNm" style="
display: inline-block; /* 인라인 블록으로 변경 */
line-height: 35px; /* 세로 중앙 정렬 */
width: calc(100% - 100px); /* 버튼 공간을 고려한 너비 */
text-align: center; /* 텍스트 중앙 정렬 */
"></span>
<button onclick="fn_sopmal_bar_close();" style="
position: absolute; /* 절대 위치로 설정 */
right: 10px; /* 오른쪽 끝에서 약간 떨어짐 */
line-height: 35px; /* 세로 중앙 정렬 */
">닫기</button>
</div>
</header>
</html>

View File

@@ -0,0 +1,218 @@
<%@ 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"%>
<%--
Class Name : include.jsp
Description : CRM CSS 및 JS 공통 include
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-01-25 김혜인 최초 생성
--%>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<%--mixed Contents 대응--%>
<spring:eval expression="@environment.getProperty('spring.profiles.active')" var="profiles"/>
<c:if test="${profiles eq 'stage'}">
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
</c:if>
<%-- CSS --%>
<link rel="stylesheet" href="<c:url value='/crm/css/style.css'/>">
<link rel="stylesheet" href="/mngr/vendor/jquery-nice-select/nice-select.css">
<link rel="stylesheet" href="/mngr/vendor/jquery-ui/jquery-ui.min.css">
<link rel="stylesheet" href="/mngr/vendor/jquery-ui/jquery-ui.structure.css">
<link rel="stylesheet" href="/mngr/vendor/jquery-modal/jquery.modal.min.css">
<link rel="stylesheet" href="<c:url value='/mngr/vendor/time-picker/timepicker.css'/>">
<link rel="stylesheet" href="<c:url value='/mngr/vendor/dropzone/dropzone.min.css'/>">
<link rel="stylesheet" href="<c:url value='/mngr/vendor/jstree/themes/default/style.min.css'/>">
<link rel="stylesheet" href="<c:url value='/ckeditor/content.css'/>">
<%-- CK editor 적용 시 width 설정 --%>
<style type="text/css">
.ck.ck-editor{
width:100%;
}
</style>
<%-- JS --%>
<script src="/mngr/vendor/jquery-3.7.1.min.js"></script>
<script src="/mngr/vendor/jquery-nice-select/jquery.nice-select.min.js"></script>
<script src="/mngr/vendor/jquery-ui/jquery-ui.min.js"></script>
<script src="/mngr/vendor/jquery-modal/jquery.modal.min.js"></script>
<script src="//t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js"></script>
<script src="<c:url value='/mngr/vendor/tablednd/jquery.tablednd.1.0.5.min.js'/>"></script>
<script src="<c:url value='/mngr/vendor/time-picker/timepicker.min.js'/>"></script>
<script src="<c:url value='/mngr/vendor/dropzone/dropzone.min.js'/>"></script>
<script src="<c:url value='/crm/js/script.js'/>" defer></script>
<script src="<c:url value='/js/gcone.js'/>"></script>
<script src="<c:url value='/js/fileupload_comm.js'/>"></script>
<script src="<c:url value='/ckeditor/ckeditor.js'/>"></script>
<script src="<c:url value='/mngr/vendor/chart.js/chart.umd.min.js'/>"></script>
<script src="<c:url value='/admin/vendor/jstree/jstree.min.js'/>"></script>
<%--파비콘--%>
<link rel="icon" type="image/png" href="\assets\favicon\gcone.ico">
<meta name="robots" content="noindex,nofollow">
<title>GC ONE 고객CRM</title>
<script type="text/javascript">
$.ajaxSetup({
beforeSend : function(jqXhr, settins) {
jqXhr.setRequestHeader('AJAX',true);
$("#overlay").fadeIn();
loding(true);
},
complete : function() {
//동시에 여러개의 AJAX가 수행될 경우를 대비하여 delay를 설정
setTimeout(function(){
$("#overlay").fadeOut();
},500);
loding(false);
},
error: function(data){
$("#overlay").fadeOut();
loding(false);
console.log(data);
if (data?.responseJSON?.resBody?.result != null) {
if (!data.responseJSON.resBody.result) {
alert('<spring:message code="error.internal-server"/>');
} else {
if (fn_check_json(data.responseJSON.resBody.result)) {
const errorObject = JSON.parse(data.responseJSON.resBody.result);
if (!errorObject) {
alert('<spring:message code="error.internal-server"/>');
} else {
if (!errorObject.errorMsg) {
alert('<spring:message code="error.internal-server"/>');
} else {
alert(errorObject.errorMsg);
let isMtched = false;
$('.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) {
isMtched = true;
break;
}
}
if (isMtched) {
$(this).focus();
return false;
}
});
}
}
} else {
if (data.responseJSON.resBody.result) {
alert(data.responseJSON.resBody.result);
} else {
alert('<spring:message code="error.ajax"/>');
}
}
}
} else {
alert('<spring:message code="error.ajax"/>');
}
}
});
/**********************************************************************
* 회원 crm정보 모달 호출(공통)
* 파라미터 설명 {
* obj : 호출버튼 객체
* mbrInnb : 회원 고유번호
* mbrDvCd : 회원 구분코드
* modalDiv : 모달 selector
* }
**********************************************************************/
const fn_select_crm_mini_info = function(obj, mbrInnb, mbrDvCd, modalDiv){
const element = $(obj); // 클릭된 요소
let offset = element.offset();
const info = $(obj).attr("data-info");
$.ajax({
type : 'POST',
url : "<c:url value='/crm/mbr/selectMbrCrmInfoPopupForm'/>",
data: {
mbrDvCd : mbrDvCd,
mbrInnb : mbrInnb
},
success : function(html) {
fn_close_modal(info);
$(modalDiv).html(html);
$("#" + info).css({
top: offset.top + element.outerHeight(), // 첫 번째 모달의 아래로 설정
left: offset.left-150,
width: $("#" + info).width() + 50,
zIndex: 9998 // 첫 번째 모달보다 위에 표시되도록 설정
});
$("#" + info).show();
}
});
};
/**********************************************************************
* CMR 레이어 팝업 닫기 버튼 클릭 이벤트
**********************************************************************/
$(document).on('click', '.mini-info-content__close', function(e) {
e.preventDefault();
$(this).closest(".mini-info-content").hide();
});
/*****************************************************************
* 회원 crm정보 모달 : 상담 등록 이동
****************************************************************/
const fn_move_crm_cnslt = function(mbrInnb, mbrDvCd, nmbrMbtlnb, customer_record_key) {
console.log("param 확인 : ", mbrInnb, mbrDvCd, customer_record_key);
let form = $('<form></form>');
if(fn_is_empty(mbrDvCd)){//비회원
$(form).append($('<input/>', {type:'hidden', name:'mbtlnb', value:nmbrMbtlnb}));
$(form).append($('<input/>', {type:'hidden', name:'mbrTyCd', value:'02'}));
}else{//회원
$(form).append($('<input/>', {type: 'hidden', name: 'mbrInnb', value: mbrInnb}));
$(form).append($('<input/>', {type: 'hidden', name: 'mbrDvCd', value: mbrDvCd}));
}
//$(form).append($('<input/>', {type:'hidden', name:'customer_record_key', value:customer_record_key}));
if (window.parent !== window) {
console.log("부모 프레임이 있습니다.");
var uRecordKey = parent.document.ValidForm.Customer_CRecFile.value;
console.log('uRecordKey : ' + uRecordKey);
$(form).append($('<input/>', {type:'hidden', name:'customer_record_key', value:uRecordKey}));
} else {
console.log("부모 프레임이 없습니다.");
}
$(form).attr('method', 'post');
$(form).attr('action', '<c:url value="/crm/cnslt/selectCnsltDtlsForm"/>');
$(form).appendTo('body');
$(form).submit();
$(form).remove();
};
const loding = function(isShow) {
if(isShow){
$('.loadingImg').show();
}else{
$('.loadingImg').hide();
}
};
/*****************************************************************
* 로딩이미지
****************************************************************/
</script>
<!--로딩영역-->
<div class="loadingImg" style="display:none; position: relative; z-index: 1010;">
<div class="loding_popup_wrap"><img src="/mngr/images/loding.gif" alt="loading"></div>
</div>

View File

@@ -0,0 +1,270 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<script>
$(document).ready(function (){
/*발송팝업*/
$(document).on("click",".sndng",function(){
let url = $(this).val();
let actionDv = '';
let sndngInfo = '';
if(url.indexOf("selectEmailSndngPopupForm") > 0){
actionDv = 'email';
if($("#mbrTyCd").val() === '01'){//회원일시 이메일 값 set
sndngInfo = $("#leftEmail").val();
}
}else if (url.indexOf("selectMssageSndngPopupForm") > 0){
actionDv = 'mssage';
if ($("#mbrTyCd").val() === '02') {//회원일시 sms 값 set
sndngInfo = $("#leftMbtlnb").val();
}
}else {
actionDv = '';
}
if(actionDv !== ''){
fn_select_sndng_target($(this).val(),actionDv,sndngInfo);
}
});
});
/* ********************************************************
* 회원 탈퇴 함수
******************************************************** */
const fn_regist_mbr_secsn = function () {
let mbrInnb = [];
mbrInnb.push($("#secsnMbrInnb").val());
let mbrDvCd = [];
mbrDvCd.push($("#secsnMbrDvCd").val())
let secsnResn = $("input[name='secsnResn']").val();
if (confirm('회원 탈퇴하시겠습니까?')) {
$.ajax({
type: "post",
url: '<c:url value="/mngr/mbr/updateMbrSecsnUpdt"/>',
data: {mbrarr: mbrInnb, mbrDvCdArr: mbrDvCd, secsnResn: secsnResn},
success: function (data) {
alert('정상적으로 탈퇴 되었습니다.');
location.reload();
}
});
}
};
/*******************************************************
* 회원 탈퇴 팝업 호출
*******************************************************/
const fn_secsn_popup = function (modalDivSltr, modalSlrt) {
const data = null;
$.ajax({
type: 'POST',
url: '<c:url value="/crm/mbr/selectMbrSecsnProcsPopupForm"/>',
data: $("#leftForm").serializeArray(),
success: function (data) {
$(modalSlrt).remove();
$(modalDivSltr).html(data);
$(modalSlrt).modal();
}
});
}
/*
* 발송 팝업 호출 메소드
* url = 호출 url
* targetParam = vo에 담을 변수 명
* target = 해당 정보에 접근자 이름
* IndvdlVal = 단일 회원 클릭시 정보
*/
const fn_select_sndng_target = (url,actionDv,sndngInfo) => {
if(sndngInfo !== ''){
let resultArr = [];
resultArr.push({mbrInnb: $("#leftMbrInnb").val(), recpntNm: $("#leftMbrNm").val(), sndngInfo: sndngInfo});
const sndngCnt = resultArr.length;
const mbrInfo = JSON.stringify(resultArr);
const encodedMbrInfo = encodeURIComponent(mbrInfo);
PopupCenter(url + "?mbrInfo=" + encodedMbrInfo + "&sndngCnt=" + sndngCnt, '팝업', '1280', '840');
}else{
PopupCenter(url, '팝업', '1280', '840');
}
}
// 메뉴 이동
const fn_move_menu = (target) => {
let url = $(target).attr("url");
console.log(url);
if (url) {
$("#leftForm").attr("method", "post");
$("#leftForm").attr("action", url);
$("#leftForm").submit();
}
};
</script>
<%--회원인지 비회원인지 set--%>
<c:choose>
<c:when test = "${cnsltVO.mbrInnb > 0}"><%--회원--%>
<c:set var = "mbrTyCd" value = "01"/>
</c:when>
<c:otherwise><%--비회원 --%>
<c:set var = "mbrTyCd" value = "02"/>
</c:otherwise>
</c:choose>
<aside class="side-nav">
<div class="header-fixed">
<div class="header-fixed__logo">
<c:if test="${not empty crmMenuList.menuList}">
<c:forEach var="crmTopMenuList" items="${crmMenuList.menuList}" varStatus="status">
<c:if test="${crmTopMenuList.expsrLcDvCd eq '01' && crmTopMenuList.sortOrdr eq '1'}">
<a href="<c:out value="${crmTopMenuList.url}"/>">
<span id = "sopmalLogo"><img src="/crm/images/logo_default.png" alt="GC ONE 관리자"></span>
<span class="header__logo-title"><c:out value="${crmTopMenuList.menuNm}"/></span>
</a>
</c:if>
</c:forEach>
</c:if>
</div>
</div>
<nav class="side-nav__inner">
<ul class="depth2"><%--반복문--%>
<c:if test="${not empty crmMenuList.menuList}">
<c:forEach var="crmTopMenuList" items="${crmMenuList.menuList}" varStatus="status">
<c:if test="${crmTopMenuList.expsrLcDvCd eq '02'}">
<c:choose>
<c:when test = "${mbrTyCd eq '01'}"><%--회원 메뉴 --%>
<li class="<c:if test="${fn:contains(crmTopMenuList.url,accessUri)}">current</c:if> <c:if test = "${status.index % 3 == 0}">upper-line</c:if>"><%--메뉴 3개씩 나눠서 줄 처리--%>
<a class="depth2-title" url="<c:out value="${crmTopMenuList.url}"/>" onclick="fn_move_menu(this);" style="cursor:pointer;" mbr="${mbr}"><%--비회원이면 회원 정보 메뉴이동 x--%>
<c:out value="${crmTopMenuList.menuNm}"/>
<c:choose>
<c:when test="${fn:contains(crmTopMenuList.url,'selectMbrActInfoInqire')}"> <%--활동정보--%>
&nbsp;<span id="mbrActInfo"></span>
</c:when>
<c:when test="${fn:contains(crmTopMenuList.url,'selectMbrOrdrListInqireForm')}"> <%--주문--%>
<div class="depth2__number-container">
<span class="depth2__number comma" id="rcpmnyWaitCnt" title="입금대기 주문건">0</span>
<span class="depth2__number comma" id="exportWaitCnt" title="미출고완료 주문건">0</span>
</div>
</c:when>
<c:when test="${(fn:contains(crmTopMenuList.url,'selectMbrRtngudRefndDtlsInqireForm'))}"> <%--반품/환불--%>
<div class="depth2__number-container">
<span class="depth2__number comma" id="refundCnt" title="미처리 반품/환불건">0</span>
</div>
</c:when>
<c:when test="${fn:contains(crmTopMenuList.url,'selectMlgDtlsForm')}"> <%--마일리지--%>
<div class="depth2__number-container">
<span class="depth2__number comma" id="totMlg"
title="총 마일리지">0</span>
</div>
</c:when>
<c:when test="${fn:contains(crmTopMenuList.url,'selectCashDtlsForm')}"> <%--GC 머니--%>
<div class="depth2__number-container">
<span class="depth2__number comma" id="cashAmt"
title="GC 머니">0</span>
</div>
</c:when>
<c:when test="${fn:contains(crmTopMenuList.url,'selectHoldCouponDtlsForm')}"> <%--쿠폰--%>
<div class="depth2__number-container">
<span class="depth2__number comma" id="couponCnt" title="사용가능 쿠폰 수">0</span>
</div>
</c:when>
<c:when test="${fn:contains(crmTopMenuList.url,'selectGoodsRvwInqireForm')}"> <%--상품후기--%>
<div class="depth2__number-container">
<span class="depth2__number comma" id="rvwCnt" title="상품 후기건">0</span>
</div>
</c:when>
<c:when test="${fn:contains(crmTopMenuList.url,'selectGoodsInqryInqireForm')}"> <%--상품문의--%>
<div class="depth2__number-container">
<span class="depth2__number comma" id="qnaCnt" title="상품 문의건">0</span>
</div>
</c:when>
<c:when test="${fn:contains(crmTopMenuList.url,'selectCnsltDtlsForm')}"> <%--상담--%>
<div class="depth2__number-container">
<span class="depth2__number comma" id="CnsltWaitCnt" title="미처리 상담건">0</span>
</div>
</c:when>
</c:choose>
</a>
</li>
</c:when>
<c:otherwise>
<c:if test = "${ fn:contains(crmTopMenuList.url, 'selectCstmrInfoInqire')
|| fn:contains(crmTopMenuList.url,'selectMbrOrdrListInqireForm')
|| fn:contains(crmTopMenuList.url,'selectMbrRtngudRefndDtlsInqireForm')
|| fn:contains(crmTopMenuList.url,'selectCnsltDtlsForm') }"><%--비회원 허용 메뉴 (주문,반품,상담)--%>
<c:choose>
<c:when test="${fn:contains(crmTopMenuList.url, 'selectCstmrInfoInqire')}">
<li>
<a class="depth2-title" id="nmbrMbr">
${cnsltVO.mbtlnb}
</a>
</li>
</c:when>
<c:otherwise>
<li class="<c:if test="${fn:contains(crmTopMenuList.url,accessUri)}">current</c:if> <c:if test = "${status.index % 3 == 0}">upper-line</c:if>"><%--메뉴 3개씩 나눠서 줄 처리--%>
<a class="depth2-title" url="<c:out value="${crmTopMenuList.url}"/>" onclick="fn_move_menu(this);" style="cursor:pointer;"><%--비회원이면 회원 정보 메뉴이동 x--%>
<c:out value="${crmTopMenuList.menuNm}"/>
<c:choose>
<c:when test="${fn:contains(crmTopMenuList.url,'selectMbrOrdrListInqireForm')}"> <%--주문--%>
<div class="depth2__number-container">
<span class="depth2__number comma" id="rcpmnyWaitCnt" title="입금대기 주문건">0</span>
<span class="depth2__number comma" id="exportWaitCnt" title="미출고완료 주문건">0</span>
</div>
</c:when>
<c:when test="${(fn:contains(crmTopMenuList.url,'selectMbrRtngudRefndDtlsInqireForm'))}"> <%--반품/환불--%>
<div class="depth2__number-container">
<span class="depth2__number comma" id="refundCnt"
title="미처리 반품/환불건">0</span>
</div>
</c:when>
<c:when test="${fn:contains(crmTopMenuList.url,'selectCnsltDtlsForm')}"> <%--상담--%>
<div class="depth2__number-container">
<span class="depth2__number comma" id="CnsltWaitCnt" title="미처리 상담건">0</span>
</div>
</c:when>
</c:choose>
</a>
</li>
</c:otherwise>
</c:choose>
</c:if>
</c:otherwise>
</c:choose>
</c:if>
</c:forEach>
</c:if>
</ul>
<div class="side-nav__crmBtn-container" id="sndngDiv">
<c:if test="${not empty crmMenuList.menuList}">
<c:forEach var="crmTopMenuList" items="${crmMenuList.menuList}" varStatus="status">
<c:if test="${crmTopMenuList.expsrLcDvCd eq '04'}">
<button type="button"
class="side-nav__crm-btn light <c:if test = "${fn:contains(crmTopMenuList.url,'ntcn')}">sndng</c:if>" <%--email,sms발송시 해당 팝업 체크--%>
value="<c:out value="${crmTopMenuList.url}"/>">
<c:out value="${crmTopMenuList.menuNm}"/>
</button>
</c:if>
</c:forEach>
</c:if>
</div>
<c:if test = "${mbrTyCd eq '01'}">
<div class="side-nav__crmBtn-container" id="secsnModalDiv">
<button class="side-nav__crm-btn dark" type="button" onclick="fn_secsn_popup('#secsnModalDiv', '#delete-account-pop');">회원탈퇴 처리</button>
</div>
</c:if>
</nav>
</aside>
<form id = "leftForm">
<c:choose>
<c:when test = "${mbrTyCd eq '01'}">
<input type="hidden" id="leftMbrInnb" name="mbrInnb" value="<c:out value="${cnsltVO.mbrInnb}"/>"/>
<input type="hidden" id="leftMbrDvCd" name="mbrDvCd" value="<c:out value="${cnsltVO.mbrDvCd}"/>"/>
</c:when>
<c:otherwise>
<c:if test = "${not empty cnsltVO.ordrInnb}">
<input type="hidden" id="leftOrdrInnb" name= "ordrInnb" value = "<c:out value="${cnsltVO.ordrInnb}"/>"/>
</c:if>
<input type="hidden" id="leftMbrNm" name= "mbrNm" value = "<c:out value="${cnsltVO.mbrNm}"/>"/>
</c:otherwise>
</c:choose>
<input type="hidden" id="leftMbtlnb" name= "mbtlnb" value = "<c:out value="${cnsltVO.mbtlnb}"/>"/>
<input type="hidden" id="leftEmail"/>
<input type="hidden" id="mbrTyCd" value="${mbrTyCd}" name="mbrTyCd"/><%--콜 들어올 시 해당 sopmalCd로 이동--%>
</form>
<!-- 회원 탈퇴 모달 영역 -->
<div id="secsnModalDiv">
</div>

View File

@@ -0,0 +1,148 @@
<%@ page import="java.util.Date" %>
<%@ 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"%>
<script>
$(document).ready(function() {
let customer_record_key = '${ cnsltVO.customer_record_key }';
let mbrInnb = '${cnsltVO.mbrInnb}';
let mbrDvCd = '${cnsltVO.mbrDvCd}';
fn_regist_crm_cnslt_form(customer_record_key, mbrInnb, mbrDvCd);
});
/******************************************************
* CRM 상담 등록 폼
*******************************************************/
const fn_regist_crm_cnslt_form = function(customer_record_key, mbrInnb, mbrDvCd) {
console.log("상담 등록 폼");
let dataStr;
$.ajax({
type: "post",
url : "<c:url value="/crm/cnslt/selectCnsltRegistPopupForm"/>",
data : {
customer_record_key : customer_record_key,
mbrInnb : mbrInnb,
mbrDvCd : mbrDvCd
},
success:function(resultHtml) {
$('#crmRegistPopupFormDiv').html(resultHtml);
}
});
};
/* ********************************************************
* 대분류 선태값에 따른 중분류 생성
******************************************************** */
const fn_select_lrgeClCd = function(cdValue, target) {
console.log("cdValue : ", cdValue);
let dataStr;
$.ajax({
type: "post",
url : "<c:url value="/crm/cnslt/selectCnsltRegistPopupFormCmmnCdArray"/>",
data : dataStr,
success:function(data) {
console.log("data : ", data);
let jsonData;
switch (cdValue) {
case '01':
jsonData = JSON.parse(data.resBody.result).middlClCdList01;
break;
case '02':
jsonData = JSON.parse(data.resBody.result).middlClCdList02;
break;
case '03':
jsonData = JSON.parse(data.resBody.result).middlClCdList03;
break;
case '04':
jsonData = JSON.parse(data.resBody.result).middlClCdList04;
break;
case '05':
jsonData = JSON.parse(data.resBody.result).middlClCdList05;
break;
case '06':
jsonData = JSON.parse(data.resBody.result).middlClCdList06;
break;
case '07':
jsonData = JSON.parse(data.resBody.result).middlClCdList07;
break;
case '08':
jsonData = JSON.parse(data.resBody.result).middlClCdList08;
break;
}
console.log("jsonData : ", jsonData);
fn_create_selectBox(jsonData, target);
}
});
}
/* ********************************************************
* 중분류 셀렉트 생성
******************************************************** */
function fn_create_selectBox(jsonData, tartget) {
$('#middlClCdDiv').empty();
console.log("jsonData f : ", jsonData);
let trClone = '';
trClone = '<select name="middlCl" title="중분류">'
+ '<option value="" selected disabled>선택</option>'
for (let i = 0; i < jsonData.length; i++) {
trClone +=' <option value="' + jsonData[i].cd + '">' + jsonData[i].cdNm + '</option>';
}
trClone += '</select>';
$('#middlClCdDiv').append(trClone);
$('#middlClCdDiv > select').niceSelect();
}
/* ********************************************************
* 상담 등록
******************************************************** */
const fn_regist = function() {
const data = $('#registForm').serialize();
console.log("data : ", data);
if (confirm('상담을 <spring:message code="confirm.common.insert"/>')) {
$.ajax({
type: 'post',
url: '<c:url value="/crm/cnslt/insertCnsltRegist"/>',
data: data,
success: function (result) {
alert('<spring:message code="success.common.insert"/>');
if($("#mbrTyCd").val() !== '02'){ //회원 조회
const mbrInnb = '<c:out value="${cnsltVO.mbrInnb}"/>';
const mbrDvCd = '<c:out value="${cnsltVO.mbrDvCd}"/>';
location.href="/crm/cnslt/selectCnsltDtlsForm?mbrInnb="+mbrInnb+"&mbrDvCd="+mbrDvCd;
}else{ //비회원 조회
const mbtlnb = '<c:out value="${cnsltVO.mbtlnb}"/>';
const mbrTyCd = '<c:out value="${cnsltVO.mbrTyCd}"/>';
location.href="/crm/cnslt/selectCnsltDtlsForm?mbtlnb="+mbtlnb+"&mbrTyCd="+mbrTyCd;
}
}
});
};
}
const fn_only_num = function(target) {
//숫자만 허용
target.val(target.val().replace(/[^0-9]/g, ''));
}
</script>
<div id="crmRegistPopupFormDiv">
</div>

View File

@@ -0,0 +1,17 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<aside class="sub-left-menu">
<h2 class="sub-left-menu__title"><button type = "button" onclick="location.href='/sopmal/csc/selectBbscttAuth?authDv=REDNG&reqUrl=csc&bbsId=notice'">고객센터</button></h2>
<div class="sub-left-menu__list">
<ul class="sub-left-menu__sub-list customer">
<c:if test="${!empty sopmallInfo}">
<c:forEach var="topMenuList" items="${sopmallInfo.menuList}" varStatus="status">
<c:if test="${topMenuList.ctgryDvCd eq '04'}">
<li><a class = "cscMenu" href='<c:out value="${topMenuList.url}"/>' id = "<c:out value="${topMenuList.bbsId}"/>"><c:out value="${topMenuList.ctgryNm}"/></a></li>
</c:if>
</c:forEach>
</c:if>
</ul>
</div>
</aside>

View File

@@ -0,0 +1,51 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<header class="header">
<div class="header__top">
<div class="header-left">
<div class="header__logo">
<a href="/itrnt">
<img src="<c:url value="/itrnt/images/logo_default.png"/>" alt="GC ONE 관리자">
<span class="header__logo-title">인트라넷</span>
</a>
</div>
</div>
<div class="header-right">
<button class="header-right__user-info">
<i class="icon icon_user-info"></i>
<c:out value="${userNm}"/>님
</button>
<button class="header-right__logout" onclick="location.href='/logout'">
<i class="icon icon_logout"></i>
로그아웃
</button>
</div>
</div>
<div class="header__bottom">
<nav class="header-nav">
<div class="header-nav__right">
<ul>
<c:if test="${!empty topMenuList}">
<c:forEach var="topMenuList" items="${topMenuList.menuList}" varStatus="status">
<c:set var="topMenuCd" value="${sessionScope.topMenuCd}" />
<li <c:if test="${topMenuCd eq topMenuList.menuCd}"> class="current" </c:if>>
<a href="javascript:void(0)" onclick="setTopMenuCode('<c:out value="${topMenuList.menuCd}"/>','<c:out value="${topMenuList.url}"/>')"><c:out value ="${topMenuList.menuNm}"/></a>
</li>
</c:forEach>
</c:if>
</ul>
</div>
</nav>
</div>
</header>
<script>
function setTopMenuCode(topMenuCd, topMenuUrl) {
document.cookie = "topMenuCd=" + topMenuCd + "; path=/itrnt";
document.cookie = "leftMenuCd=" + "" + "; path=/itrnt";
document.cookie = "upperMenuCd=" + "" + "; path=/itrnt";
document.cookie = "topMenuUrl=" + topMenuUrl + "; path=/itrnt";
document.cookie = "checkMenu=Y" + "; path=/itrnt";
window.location.href = topMenuUrl;
}
</script>

View File

@@ -0,0 +1,225 @@
<%@ 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"%>
<%--
Class Name : Include.jsp
Description : 인트라넷 CSS 및 JS 공통 include
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-03-18 유재현 최초 생성
--%>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>GC ONE 인트라넷</title>
<%--mixed Contents 대응--%>
<spring:eval expression="@environment.getProperty('spring.profiles.active')" var="profiles"/>
<c:if test="${profiles eq 'stage'}">
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
</c:if>
<!-- CK editor -->
<script src='/ckeditor/ckeditor.js' data-cke-editor="editor"></script>
<script src='/ckeditor/uploadAdapter.js' data-cke-editor="editor"></script>
<link rel="stylesheet" href="/ckeditor/content.css">
<%-- CK editor 적용 시 width 설정 --%>
<%--파비콘--%>
<link rel="icon" type="image/png" href="\assets\favicon\gcone.ico">
<!-- CSS -->
<link rel="stylesheet" href="/itrnt/css/style.css">
<link rel="stylesheet" href="/itrnt/vendor/jquery-nice-select/nice-select.css">
<link rel="stylesheet" href="/itrnt/vendor/jquery-ui/jquery-ui.min.css">
<link rel="stylesheet" href="/itrnt/vendor/jquery-ui/jquery-ui.structure.css">
<link rel="stylesheet" href="/itrnt/vendor/jquery-modal/jquery.modal.min.css">
<link rel="stylesheet" href="<c:url value='/itrnt/vendor/time-picker/timepicker.css'/>">
<link rel="stylesheet" href="<c:url value='/itrnt/vendor/dropzone/dropzone.min.css'/>">
<link rel="stylesheet" href="<c:url value='/itrnt/vendor/jstree/themes/default/style.min.css'/>">
<!-- JS -->
<script src="/itrnt/vendor/jquery-3.7.1.min.js"></script>
<script src="/itrnt/vendor/jquery-nice-select/jquery.nice-select.min.js"></script>
<script src="/itrnt/vendor/jquery-ui/jquery-ui.min.js"></script>
<script src="/itrnt/vendor/jquery-modal/jquery.modal.min.js"></script>
<script src="//t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js"></script>
<script src="<c:url value='/js/fileupload_comm.js'/>"></script>
<script src="<c:url value='/itrnt/vendor/tablednd/jquery.tablednd.1.0.5.min.js'/>"></script>
<script src="<c:url value='/itrnt/vendor/time-picker/timepicker.min.js'/>"></script>
<script src="<c:url value='/itrnt/vendor/tablednd/jquery.tablednd.1.0.5.min.js'/>"></script>
<script src="<c:url value='/itrnt/vendor/dropzone/dropzone.min.js'/>"></script>
<script src="<c:url value='/itrnt/vendor/jstree/jstree.min.js'/>"></script>
<script src="<c:url value='/itrnt/vendor/chart.js/chart.umd.min.js'/>"></script>
<script src="<c:url value='/itrnt/vendor/emoji-mart/browser.js'/>"></script>
<script src="<c:url value='/jchartfx/js/jchartfx.system.js'/>"></script>
<script src="<c:url value='/jchartfx/js/jchartfx.coreVector.js'/>"></script>
<script src="<c:url value='/itrnt/js/script.js'/>" defer></script> <!-- itrnt 스크립트 함수 -->
<script src="<c:url value='/js/gcone.js'/>"></script> <!-- 공통 스크립트 함수 -->
<script type="text/javascript">
$.ajaxSetup({
beforeSend: function (jqXhr, settins) {
jqXhr.setRequestHeader('AJAX', true);
$("#overlay").fadeIn();
loding(true);
},
complete: function () {
//동시에 여러개의 AJAX가 수행될 경우를 대비하여 delay를 설정
setTimeout(function () {
$("#overlay").fadeOut();
loding(false);
}, 500);
},
error: function (data) {
$("#overlay").fadeOut();
loding(false);
console.log("data");
console.log(data);
if (data?.responseJSON?.resBody?.result != null) {
if (!data.responseJSON.resBody.result) {
alert('<spring:message code="error.internal-server"/>');
} else {
if (fn_check_json(data.responseJSON.resBody.result)) {
const errorObject = JSON.parse(data.responseJSON.resBody.result);
if (!errorObject) {
alert('<spring:message code="error.internal-server"/>');
} else {
if (!errorObject.errorMsg) {
alert('<spring:message code="error.internal-server"/>');
} else {
alert(errorObject.errorMsg); //vo 에러메시지 띄움
let isMtched = false;
$('.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) {
isMtched = true;
break;
}
}
if (isMtched) {
$(this).focus();
return false;
}
});
}
}
} else {
console.log("here 1");
if (data.responseJSON.resBody.result) {
alert(data.responseJSON.resBody.result);
} else {
alert('<spring:message code="error.ajax"/>');
}
}
}
} else {
console.log("here 2");
alert('<spring:message code="error.ajax"/>');
}
}
});
</script>
<script>
/*****************************************************************
* 로딩이미지
****************************************************************/
$(document).on("click", '.loading', function(){
loding(true);
});
const loding = function(isShow) {
if(isShow){
$('.loadingImg').show();
}else{
$('.loadingImg').hide();
}
};
/**********************************************************************
* 회원 crm정보 모달 호출(공통)
* 파라미터 설명 {
* obj : 호출버튼 객체
* mbrInnb : 회원 고유번호
* mbrDvCd : 회원 구분코드
* modalDiv : 모달 selector
* }
**********************************************************************/
const fn_select_crm_mini_info = function(obj, mbrInnb, mbrDvCd, modalDiv){
const element = $(obj); // 클릭된 요소
let offset = element.offset();
const info = $(obj).attr("data-info");
$.ajax({
type : 'POST',
url : "<c:url value='/itrnt/crm/mbr/selectMbrCrmInfoPopupForm'/>",
data: {
mbrDvCd : mbrDvCd,
mbrInnb : mbrInnb
},
success : function(html) {
fn_close_modal(info);
$(modalDiv).html(html);
const modal = $("#" + info);
const modalWidth = modal.outerWidth(); // 모달 너비
const buttonWidth = element.outerWidth(); // 버튼 너비
const buttonHeight = element.outerHeight(); // 버튼 높이
const viewportWidth = $(window).width(); // 화면 너비
// 모달의 기본 위치: 버튼 아래, 버튼 오른쪽 끝 정렬
let leftPosition = offset.left + buttonWidth - modalWidth;
let topPosition = offset.top + buttonHeight; // 버튼 바로 아래
// 화면 경계를 넘어가면 조정
if (leftPosition < 0) {
leftPosition = offset.left; // 화면 왼쪽으로 넘어가면 버튼 왼쪽 정렬
} else if (leftPosition + modalWidth > viewportWidth) {
leftPosition = offset.left + buttonWidth - modalWidth; // 화면 오른쪽 경계
}
modal.css({
top: topPosition, // 버튼 아래로 위치
left: leftPosition, // 오른쪽 끝에 맞추거나 화면 경계에 조정
position: 'absolute', // 화면 기준 고정 위치
zIndex: 9998 // 화면 위로 표시
});
modal.show();
}
});
};
/**********************************************************************
* 회원 crm정보 모달 호출(공통)
* 파라미터 설명 {
* obj : 호출버튼 객체
* mbrInnb : 회원 고유번호
* mbrDvCd : 회원 구분코드
* modalDiv : 모달 selector
* }
**********************************************************************/
const fn_move_crm = function(mbrInnb, mbrDvCd){
let form = $('<form></form>');
$(form).append($('<input/>', {type: 'hidden', name: 'mbrInnb', value: mbrInnb}));
$(form).append($('<input/>', {type: 'hidden', name: 'mbrDvCd', value: mbrDvCd}));
$(form).attr('method', 'post');
$(form).attr('action', '/itrnt/crm/mbr/selectCstmrInfoInqire');
$(form).appendTo('body');
$(form).submit();
$(form).remove();
};
</script>
<!--로딩영역-->
<div class="loadingImg" style="display:none; position: relative; z-index: 1010;">
<div class="loding_popup_wrap"><img src="/mngr/images/loding.gif" alt="loading"></div>
</div>

View File

@@ -0,0 +1,82 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<aside class="side-nav">
<nav class="side-nav__inner">
<ul class="depth2">
<c:if test="${!empty leftMenuList}">
<c:forEach var="leftMenuList" items="${leftMenuList.menuList}" varStatus="status">
<!-- 선택한 TOP메뉴코드 -->
<c:set var="topMenuCd" value="${sessionScope.topMenuCd}" />
<!-- 선택한 LEFT메뉴코드 -->
<c:set var="leftMenuCd" value="${sessionScope.leftMenuCd}" />
<!-- 선택한 LEFT메뉴의 상위 코드 -->
<c:set var="upperMenuCd" value="${sessionScope.upperMenuCd}" />
<!-- 2뎁스의 메뉴 조회 -->
<c:if test="${'2' eq leftMenuList.menuDepth}">
<c:choose>
<%-- 2뎁스 밑에 3뎁스가 있는 경우 Sample --%>
<c:when test="${'1' eq leftMenuList.nextDepth3}">
<c:set var="depth2MenuCd" value="${leftMenuList.menuCd}" />
<c:choose>
<c:when test="${depth2MenuCd eq upperMenuCd || (status.index eq 0 && empty leftMenuCd)}">
<li class="has-sub opened">
</c:when>
<c:otherwise>
<li class="has-sub">
</c:otherwise>
</c:choose>
<div class="depth2-title"><c:out value ="${leftMenuList.menuNm}"/></div>
<ul class="depth3">
</c:when>
<%-- 2뎁스 밑에 3뎁스가 없는 경우 Sample --%>
<c:otherwise>
<c:choose>
<c:when test="${leftMenuCd eq leftMenuList.menuCd || (status.index eq 0 && empty leftMenuCd)}">
<li class="current">
</c:when>
<c:otherwise>
<li>
</c:otherwise>
</c:choose>
<a class="depth2-title" href="javascript:void(0)" onclick="fn_select_left('<c:out value="${topMenuCd}"/>','<c:out value="${leftMenuList.menuCd}"/>','<c:out value="${leftMenuList.upperMenuCd}"/>', '<c:out value="${leftMenuList.url}"/>')"><c:out value ="${leftMenuList.menuNm}"/></a>
</li>
</c:otherwise>
</c:choose>
</c:if>
<!-- 3뎁스의 메뉴 조회 -->
<c:if test="${'3' eq leftMenuList.menuDepth}">
<c:choose>
<c:when test="${leftMenuCd eq leftMenuList.menuCd || (status.index eq 1 && empty leftMenuCd)}">
<li class="current">
</c:when>
<c:otherwise>
<li>
</c:otherwise>
</c:choose>
<a href="javascript:void(0)" onclick="fn_select_left('<c:out value="${topMenuCd}"/>','<c:out value="${leftMenuList.menuCd}"/>','<c:out value="${leftMenuList.upperMenuCd}"/>', '<c:out value="${leftMenuList.url}"/>')"><c:out value ="${leftMenuList.menuNm}"/></a>
</li>
</c:if>
<!-- 3뎁스가 끝나고 새로운 2뎁스가 시작되면 태그를 닫아준다-->
<c:if test="${'1' eq leftMenuList.nextDepth2}">
</ul>
</li>
</c:if>
</c:forEach>
</c:if>
</ul>
</nav>
</aside>
<script>
function fn_select_left(topMenuCd, leftMenuCd, upperMenuCd, leftMenuUrl) {
document.cookie = "topMenuCd=" + topMenuCd + "; path=/itrnt";
document.cookie = "leftMenuCd=" + leftMenuCd + "; path=/itrnt";
document.cookie = "upperMenuCd=" + upperMenuCd + "; path=/itrnt";
document.cookie = "leftMenuUrl=" + leftMenuUrl + "; path=/itrnt";
document.cookie = "checkMenu=Y" + "; path=/itrnt";
window.location.href = leftMenuUrl;
}
</script>

View File

@@ -0,0 +1,47 @@
<%@ 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="spring" uri="http://www.springframework.org/tags" %>
<!DOCTYPE html>
<html lang="ko">
<spring:eval expression="@environment.getProperty('mngrfo.common.fileupload.cdnurl')" var="cdnurl"/>
<script>
// 현재 창의 이름을 'crmWin'로 설정
window.onload = function() {
if (!window.name) {
window.name = 'crmWin';
}
}
</script>
<header class="header">
<div class="header__top">
<div class="header-left">
<div class="header__logo">
<a href="/itrnt">
<img src="/itrnt/images/logo_default.png" alt="GC ONE 인트라넷" id="crmMainLogo">
<span class="header__logo-title">인트라넷CRM</span>
</a>
</div>
<div class="header-searchBar">
</div>
<ul class="header-crmLink">
</ul>
</div>
<div class="header-right">
<div class="header-right__linkContainer">
<a class="btn outline xsm" href="/itrnt" title="인트라넷 바로가기" target="itrntWin">
<i class="icon icon_headerLaptop"></i>
인트라넷 바로가기
</a>
</div>
<div class="header-right__user-info">
<c:out value="${userNm}"/>님
</div>
<button class="header-right__logout" onclick="location.href='/logout'">
<i class="icon icon_logout-white"></i>
로그아웃
</button>
</div>
</div>
<div id = 'popupDiv'></div>
</header>
</html>

View File

@@ -0,0 +1,81 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<script>
// 메뉴 이동
const fn_move_menu = (target) => {
let url = $(target).attr("url");
if (url) {
$("#leftForm").attr("method", "post");
$("#leftForm").attr("action", url);
$("#leftForm").submit();
}
};
$(document).ready(function () {
const accessUri= '<c:out value="${accessUri}"/>';
$(".url").each(function (){
const url = $(this).attr("url");
if(url === accessUri){
$(this).closest("li").addClass("current");
}
});
});
</script>
<style>
.url{
cursor:pointer;
}
</style>
<aside class="side-nav">
<div class="header-fixed">
<div class="header-fixed__logo">
<a href="/itrnt/index">
<span id = "sopmalLogo"><img src="/itrnt/images/logo_default.png" alt="GC ONE 인트라넷"></span>
<span class="header__logo-title">GC ONE 인트라넷</span>
</a>
</div>
</div>
<nav class="side-nav__inner">
<ul class="depth2">
<li>
<a class="depth2-title url" url="/itrnt/crm/mbr/selectCstmrInfoInqire" onclick="fn_move_menu(this);">회원정보</a>
</li>
<li>
<a class="depth2-title url" url="/itrnt/crm/ordr/selectMbrOrdrListInqireForm" onclick="fn_move_menu(this);">주문</a>
</li>
<li>
<a class="depth2-title url" url="/itrnt/crm/coupon/selectHoldCouponDtlsForm" onclick="fn_move_menu(this);">쿠폰
<div class="depth2__number-container">
<span class="depth2__number comma" id="couponCnt" title="사용가능 쿠폰 수">0</span>
</div>
</a>
</li>
<li>
<a class="depth2-title url" url="/itrnt/crm/cnslt/selectCnsltDtlsForm" onclick="fn_move_menu(this);">상담</a>
</li>
<li class="upper-line">
<a class="depth2-title url" url="/itrnt/crm/mlg/selectMlgDtlsForm" id="mlgBtn" onclick="fn_move_menu(this);">마일리지 내역
<div class="depth2__number-container">
<span class="depth2__number comma" id="totMlg">0</span>
</div>
</a>
</li>
<li>
<a class="depth2-title url" url="/itrnt/crm/mlg/selectCashDtlsForm"
onclick="fn_move_menu(this);">GC 머니 내역
<div class="depth2__number-container">
<span class="depth2__number comma" id="cashAmt">0</span>
</div>
</a>
</li>
</ul>
<div class="side-nav__crmBtn-container">
<a class="side-nav__crm-btn light url" url="/itrnt/crm/mbr/selectMbrInfoUpdtInqire" onclick="fn_move_menu(this);">회원정보 수정</a>
</div>
</nav>
</aside>
<form id = "leftForm">
<input type="hidden" id="leftMbrInnb" name="mbrInnb" value="<c:out value="${cnsltVO.mbrInnb}"/>"/>
<input type="hidden" id="leftMbrDvCd" name="mbrDvCd" value="<c:out value="${cnsltVO.mbrDvCd}"/>"/>
<input type="hidden" id="leftMbtlnb" name="mbtlnb" value="<c:out value="${cnsltVO.mbtlnb}"/>"/>
<input type="hidden" id="leftSopmalCd" name="sopmalCd" value="<c:out value="${cnsltVO.sopmalCd}"/>"/>
</form>

View File

@@ -0,0 +1,147 @@
<%@ page import="java.util.Date" %>
<%@ 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"%>
<script>
$(document).ready(function() {
let mbrInnb = '${cnsltVO.mbrInnb}';
let mbrDvCd = '${cnsltVO.mbrDvCd}';
fn_regist_crm_cnslt_form(mbrInnb, mbrDvCd);
});
/******************************************************
* CRM 상담 등록 폼
*******************************************************/
const fn_regist_crm_cnslt_form = function(mbrInnb, mbrDvCd) {
console.log("상담 등록 폼");
let dataStr;
$.ajax({
type: "post",
url : "<c:url value="/itrnt/crm/cnslt/selectCnsltRegistPopupForm"/>",
data : {
mbrInnb : mbrInnb,
mbrDvCd : mbrDvCd
},
success:function(resultHtml) {
$('#crmRegistPopupFormDiv').html(resultHtml);
}
});
};
/* ********************************************************
* 대분류 선태값에 따른 중분류 생성
******************************************************** */
const fn_select_lrgeClCd = function(cdValue, target) {
console.log("cdValue : ", cdValue);
let dataStr;
$.ajax({
type: "post",
url : "<c:url value="/itrnt/crm/cnslt/selectCnsltRegistPopupFormCmmnCdArray"/>",
data : dataStr,
success:function(data) {
console.log("data : ", data);
let jsonData;
switch (cdValue) {
case '01':
jsonData = JSON.parse(data.resBody.result).middlClCdList01;
break;
case '02':
jsonData = JSON.parse(data.resBody.result).middlClCdList02;
break;
case '03':
jsonData = JSON.parse(data.resBody.result).middlClCdList03;
break;
case '04':
jsonData = JSON.parse(data.resBody.result).middlClCdList04;
break;
case '05':
jsonData = JSON.parse(data.resBody.result).middlClCdList05;
break;
case '06':
jsonData = JSON.parse(data.resBody.result).middlClCdList06;
break;
case '07':
jsonData = JSON.parse(data.resBody.result).middlClCdList07;
break;
case '08':
jsonData = JSON.parse(data.resBody.result).middlClCdList08;
break;
}
console.log("jsonData : ", jsonData);
fn_create_selectBox(jsonData, target);
}
});
}
/* ********************************************************
* 중분류 셀렉트 생성
******************************************************** */
function fn_create_selectBox(jsonData, tartget) {
$('#middlClCdDiv').empty();
console.log("jsonData f : ", jsonData);
let trClone = '';
trClone = '<select name="middlCl" title="중분류">'
+ '<option value="" selected disabled>선택</option>'
for (let i = 0; i < jsonData.length; i++) {
trClone +=' <option value="' + jsonData[i].cd + '">' + jsonData[i].cdNm + '</option>';
}
trClone += '</select>';
$('#middlClCdDiv').append(trClone);
$('#middlClCdDiv > select').niceSelect();
}
/* ********************************************************
* 상담 등록
******************************************************** */
const fn_regist = function() {
const data = $('#registForm').serialize();
console.log("data : ", data);
if (confirm('상담을 <spring:message code="confirm.common.insert"/>')) {
$.ajax({
type: 'post',
url: '<c:url value="/itrnt/crm/cnslt/insertCnsltRegist"/>',
data: data,
success: function (result) {
result = JSON.parse(result.resBody.result);
console.log(result);
if(result.result > 0){
alert('<spring:message code="success.common.insert"/>');
$(".url").each(function () {//상담 폼으로 이동
if ($(this).attr("url") === '/itrnt/crm/cnslt/selectCnsltDtlsForm') {
$(this).click();
}
});
}else{
alert('<spring:message code="fail.common.insert"/>');
}
}
});
};
}
const fn_only_num = function(target) {
//숫자만 허용
target.val(target.val().replace(/[^0-9]/g, ''));
}
</script>
<div id="crmRegistPopupFormDiv">
</div>

View File

@@ -0,0 +1,305 @@
<%@ 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" %>
<header class="header">
<div class="header__top">
<div class="header-left">
<div class="header__logo">
<a href="/mngr/main?authSopmalCd=<c:out value="${authSopmalCd}"/>">
<%
if(request.getCookies() != null){
for(Cookie cookie : request.getCookies()){
if("authSopmalCd".equals(cookie.getName())){
request.setAttribute("cookieAuthSopmalCd", cookie.getValue());
break;
}
}
}
%>
<c:choose>
<c:when test="${not empty siteList && not empty cookieAuthSopmalCd}">
<c:forEach var="site" items="${siteList}">
<c:if test = "${cookieAuthSopmalCd eq site.sopmalCd}">
<spring:eval expression="@environment.getProperty('mngrfo.common.fileupload.cdnurl')" var="cdnurl"/>
<img src="<c:out value="${cdnurl}${site.topFilCours}/${site.topSysFilNm}"/>" alt="<c:out value="${site.sopmalNm}"/>">
</c:if>
</c:forEach>
</c:when>
<c:otherwise>
<img src="/mngr/images/logo_default.png" alt="GC ONE 관리자">
</c:otherwise>
</c:choose>
</a>
<div class="header__siteSelectArrow"><span class="visually-hidden">사이트 선택</span></div>
<div class="siteSelect">
<ul class="siteSelect__list" style="width: 300%">
<c:if test = "${not empty siteList}">
<c:forEach var = "site" items = "${siteList}">
<li>
<button class="siteSelect__btn" data-value="${site.sopmalCd}" ><c:out value="${site.sopmalNm}"/></button>
</li>
</c:forEach>
</c:if>
</ul>
</div>
</div>
<%--<div class="header-searchBar">
<form>
<div class="header-searchBar__inner">
<div class="header-searchBar__select">
<select title="해당 셀렉트에 대한 설명">
<option value="">주문</option>
<option value="">출고</option>
<option value="">실물</option>
<option value="">회원</option>
</select>
</div>
<input class="header-searchBar__input" type="text" title="검색어 입력" placeholder="검색어를 입력하세요">
<button class="header-searchBar__btn"><span class="visually-hidden">검색</span></button>
</div>
</form>
</div>
<a href="#quick-search-info" class="ml-4 mt-4" rel="modal:open">
<i class="icon icon_question"></i>
</a>--%>
</div>
<div class="header-right">
<div class="header-right__linkContainer">
<c:if test = "${cookieAuthSopmalCd eq 'CH' || cookieAuthSopmalCd eq 'NC'}">
<a class="btn outline xsm" title="인트라넷 바로가기" onclick="fn_move_itrnt()" style="cursor:pointer">
<i class="icon icon_headerSetting"></i>
인트라넷 바로가기
</a>
</c:if>
<a class="btn outline xsm" title="쇼핑몰 바로가기" onclick="fn_move_sopmal_bbs_list('','','')" style="cursor:pointer">
<i class="icon icon_headerCart"></i>
쇼핑몰 바로가기
</a>
<a class="btn outline xsm" href="/crm/main" title="CRM 바로가기" target="crmWin">
<i class="icon icon_headerLaptop"></i>
CRM 바로가기
</a>
</div>
<!--
<a href="#notification-list-pop" rel="modal:open" class="header-right__notification" title="알림">
<i class="icon icon_notification"></i>
<span class="visually-hidden">알림</span>
<span class="number-badge">3</span>
</a>
-->
<div class="header-right__user-info">
<i class="icon icon_user-info"></i>
<c:out value="${userNm}"/>님
<div class="userInfo-float">
<div class="userInfo-float__top">
<i class="icon icon_user-info-big"></i>
<div class="userInfo-float__info">
<p class="userInfo-float__info-row">
<c:out value="${userNm}"/>
</p>
<p class="userInfo-float__info-row">
</p>
</div>
</div>
<div class="userInfo-float__bottom">
<a href="javascript:void(0)" onclick="setTopMenuCode('','/mngr/setup/mngr/selectMngrInfoInqireForm')" class="btn outline sm">정보수정</a>
<a href="/mngr/logout" class="btn dark sm">로그아웃</a>
</div>
</div>
</div>
</div>
</div>
<div class="header__bottom">
<nav class="header-nav">
<div class="header-nav__fullMenu-trigger">
<a class="header-nav__fullMenu-trigger-btn" href="#full-menu" rel="modal:open" style="pointer-events: none">
<span>관리자시스템</span>
<svg xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" width="20" height="20"
viewBox="0 0 50 50">
</svg>
</a>
</div>
<div class="header-nav__right">
<ul>
<c:if test="${!empty topMenuList}">
<c:forEach var="topMenuList" items="${topMenuList.menuList}" varStatus="status">
<c:set var="topMenuCd" value="${sessionScope.topMenuCd}" />
<li <c:if test="${topMenuCd eq topMenuList.menuCd}"> class="current" </c:if>>
<a href="javascript:void(0)" onclick="setTopMenuCode('<c:out value="${topMenuList.menuCd}"/>','<c:out value="${topMenuList.url}"/>')"><c:out value ="${topMenuList.menuNm}"/></a>
</li>
</c:forEach>
</c:if>
</ul>
</div>
</nav>
</div>
</header>
<script>
// 현재 창의 이름을 'adminWin'로 설정
window.onload = function() {
if (!window.name) {
window.name = 'adminWin';
}
}
let pcDomainUrl = '';
/*도메인 주소 get*/
$.ajax({
type: 'post',
url: "/mngr/getPcUrl",
success: function (data) {
let sopmalInfo = data.resBody.result;
sopmalInfo = JSON.parse(sopmalInfo);
let pcDomnAdres = sopmalInfo.sopmalInfo.pcDomnAdres;
$('.header__logo').attr('data-pcurl', pcDomnAdres);
}
});
function setTopMenuCode(topMenuCd, topMenuUrl) {
document.cookie = "topMenuCd=" + topMenuCd + "; path=/mngr";
document.cookie = "leftMenuCd=" + "" + "; path=/mngr";
document.cookie = "upperMenuCd=" + "" + "; path=/mngr";
document.cookie = "topMenuUrl=" + topMenuUrl + "; path=/mngr";
document.cookie = "checkMenu=Y" + "; path=/mngr";
window.location.href = topMenuUrl;
}
/*****************************************************************
* 관리자 쇼핑몰 변경
****************************************************************/
$(document).on('click', '.siteSelect__btn', function (event) {
event.preventDefault()
const url = '<c:url value="/mngr/auth/selectMngrSopmalSite"/>'
const sopmalCd = $(this).data('value')
console.log('sopmalCd', sopmalCd)
const data = {
"sopmalCd" : sopmalCd
}
$.ajax({
contentType:"application/json",
url: url,
type:'post',
data: JSON.stringify(data),
dataType:"json",
success: function (data) {
const result = data.resBody.result.result
if(result ==='success'){
location.href='/mngr/main'
}
}
});
})
/*****************************************************************
* 인트라넷 로그인
****************************************************************/
const fn_move_itrnt = function(tentcpnId, tentcpnPassword){
const hostname = window.location.hostname;
let itrntDomain = null;
if (hostname.match(/^loc\./)) { // loc.로 시작하는지 검사
itrntDomain = 'http://loc.itrnt.gcone.co.kr:18310';
} else if (hostname.match(/^dev\./)) { // dev.로 시작하는지 검사
itrntDomain = 'http://dev.itrnt.gcone.co.kr';
} else {
itrntDomain = 'https://itrnt.gcone.co.kr';
}
// 본사 아이디 CH와 NC일 경우 분기 처리
if(fn_is_empty(tentcpnId)){
let authSopmalCd = '<c:out value="${cookieAuthSopmalCd}"/>';
if ("CH" === authSopmalCd) {
tentcpnId = 'store9';
tentcpnPassword = '99ec233bbf655681512400e638be4fac2ec9ebc5c29227a471d14f6abf387ec5';
} else if ("NC" === authSopmalCd) {
tentcpnId = 'base';
tentcpnPassword = '99ec233bbf655681512400e638be4fac2ec9ebc5c29227a471d14f6abf387ec5';
} else {
alert("참다한 또는 뉴트리코어만 로그인 가능 합니다.");
return false;
}
}
const popupWindow = window.open(itrntDomain+"/login", "_blank");
// 팝업창 초기 화면 설정
popupWindow.document.write(`
<html>
<head><title>Login Result</title></head>
<body>
<h3>로그인 진행 중...</h3>
<p id="resultMessage"></p>
</body>
</html>
`);
const realm = 'ITRNT';
const username = tentcpnId;
const password = tentcpnPassword;
const accessUrl = itrntDomain;
const redirectUri = accessUrl+"/itrnt" ;
const sopMalCd = "ITRNT";
const itrntDv = "02"; // 01: 로그인화면, 02 : 관리자 화면
const loginUrl = "/login/"+realm;
// 서버에 요청 보내기
fetch(loginUrl, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
username: username,
password: password,
redirectUri: redirectUri,
accessUrl: accessUrl,
sopMalCd: sopMalCd,
itrntDv: itrntDv
})
})
.then(response => {
if (response.ok) {
return response.text(); // 응답 데이터를 텍스트로 반환
} else {
switch(response.status) {
case 401:
throw new Error('회원아이디 또는 비밀번호를 확인해주세요.');
case 404:
throw new Error('페이지를 찾을 수 없습니다.');
default:
throw new Error('회원 로그인에 실패하였습니다. 관리자에게 문의해주세요.');
}
}
})
.then(data => {
// 팝업창에 리다이렉트 링크 제공
const encodedRedirectURL = encodeURIComponent(redirectUri);
const ssoURL = "/sso/"+realm+"?redirectUrl="+encodedRedirectURL;
popupWindow.document.write(`
<script>
setTimeout(() => {
window.location.href ='`+ssoURL+`';
}, 1000);
<\/script>
`);
}).catch(error => {
// 에러 메시지를 팝업창에 표시
console.error('Error:', error);
const resultMessage = popupWindow.document.getElementById('resultMessage');
if (resultMessage) {
resultMessage.innerText = '로그인 실패: ' + error.message;
}
// 3초 후 팝업창 닫기
setTimeout(() => {
popupWindow.close();
}, 3000);
});
}
</script>

View File

@@ -0,0 +1,322 @@
<%@ 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" %>
<% response.setHeader("Cache-Control","no-cache");
response.setHeader("Pragma","no-cache");
response.setDateHeader("Expires",0);
if (request.getProtocol().equals("HTTP/1.1")) response.setHeader("Cache-Control", "no-cache");
%>
<!-- CK editor -->
<script src='/ckeditor/ckeditor.js' data-cke-editor="editor"></script>
<script src='/ckeditor/uploadAdapter.js' data-cke-editor="editor"></script>
<link rel="stylesheet" href="/ckeditor/content.css">
<%-- CK editor 적용 시 width 설정 --%>
<%--파비콘, 메타, 타이틀--%>
<title>GC ONE 관리자</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="\assets\favicon\gcone.ico">
<meta name="robots" content="noindex,nofollow">
<%--mixed Contents 대응--%>
<spring:eval expression="@environment.getProperty('spring.profiles.active')" var="profiles"/>
<c:if test="${profiles eq 'stage'}">
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
</c:if>
<!-- CSS -->
<link rel="stylesheet" href="/mngr/css/style.css">
<link rel="stylesheet" href="/mngr/vendor/jquery-nice-select/nice-select.css">
<link rel="stylesheet" href="/mngr/vendor/jquery-ui/jquery-ui.min.css">
<link rel="stylesheet" href="/mngr/vendor/jquery-ui/jquery-ui.structure.css">
<link rel="stylesheet" href="/mngr/vendor/jquery-modal/jquery.modal.min.css">
<link rel="stylesheet" href="<c:url value='/mngr/vendor/time-picker/timepicker.css'/>">
<link rel="stylesheet" href="<c:url value='/mngr/vendor/dropzone/dropzone.min.css'/>">
<link rel="stylesheet" href="<c:url value='/mngr/vendor/jstree/themes/default/style.min.css'/>">
<!-- JChartFX -->
<link rel="stylesheet" href="/jchartfx/styles/Attributes/jchartfx.attributes.css" />
<link rel="stylesheet" href="/jchartfx/styles/Palettes/jchartfx.paletteTemp.css" />
<!-- JS -->
<script src="/mngr/vendor/jquery-3.7.1.min.js"></script>
<script src="/mngr/vendor/jquery-nice-select/jquery.nice-select.min.js"></script>
<script src="/mngr/vendor/jquery-ui/jquery-ui.min.js"></script>
<script src="/mngr/vendor/jquery-modal/jquery.modal.min.js"></script>
<script src="//t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js"></script>
<script src="<c:url value='/mngr/vendor/tablednd/jquery.tablednd.1.0.5.min.js'/>"></script>
<script src="<c:url value='/mngr/vendor/time-picker/timepicker.min.js'/>"></script>
<script src="<c:url value='/mngr/vendor/tablednd/jquery.tablednd.1.0.5.min.js'/>"></script>
<script src="<c:url value='/mngr/vendor/dropzone/dropzone.min.js'/>"></script>
<script src="<c:url value='/mngr/vendor/jstree/jstree.min.js'/>"></script>
<script src="<c:url value='/mngr/vendor/chart.js/chart.umd.min.js'/>"></script>
<script src="<c:url value='/mngr/vendor/emoji-mart/browser.js'/>"></script>
<script src="<c:url value='/jchartfx/js/jchartfx.system.js'/>"></script>
<script src="<c:url value='/jchartfx/js/jchartfx.coreVector.js'/>"></script>
<script src="<c:url value='/mngr/js/script.js'/>" defer></script> <!-- MNGR 스크립트 함수 -->
<script src="<c:url value='/js/mngr/gcone.js'/>"></script> <!-- 공통 스크립트 함수 -->
<script src="<c:url value='/js/alarmCount.js'/>"></script> <!-- 알림 카운트 js -->
<script type="text/javascript">
$.ajaxSetup({
beforeSend: function (jqXhr, settins) {
jqXhr.setRequestHeader('AJAX', true);
$("#overlay").fadeIn();
loding(true);
},
complete: function () {
//동시에 여러개의 AJAX가 수행될 경우를 대비하여 delay를 설정
setTimeout(function () {
$("#overlay").fadeOut();
loding(false);
}, 500);
},
error: function (data) {
$("#overlay").fadeOut();
loding(false);
console.log("data");
console.log(data);
if (data?.responseJSON?.resBody?.result != null) {
if (!data.responseJSON.resBody.result) {
alert('<spring:message code="error.internal-server"/>');
} else {
if (fn_check_json(data.responseJSON.resBody.result)) {
const errorObject = JSON.parse(data.responseJSON.resBody.result);
if (!errorObject) {
alert('<spring:message code="error.internal-server"/>');
} else {
if (!errorObject.errorMsg) {
alert('<spring:message code="error.internal-server"/>');
} else {
alert(errorObject.errorMsg); //vo 에러메시지 띄움
let isMtched = false;
$('.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) {
isMtched = true;
break;
}
}
if (isMtched) {
$(this).focus();
return false;
}
});
}
}
} else {
console.log("here 1");
if (data.responseJSON.resBody.result) {
alert(data.responseJSON.resBody.result);
} else {
alert('<spring:message code="error.ajax"/>');
}
}
}
} else {
console.log("here 2");
alert('<spring:message code="error.ajax"/>');
}
}
});
/**********************************************************************
* 회원 crm정보 모달 호출(공통)
* 파라미터 설명 {
* obj : 호출버튼 객체
* mbrInnb : 회원 고유번호
* mbrDvCd : 회원 구분코드
* modalDiv : 모달 selector
* }
**********************************************************************/
const fn_select_crm_mini_info = function(obj, mbrInnb, mbrDvCd, modalDiv){
const element = $(obj); // 클릭된 요소
let offset = element.offset();
const info = $(obj).attr("data-info");
$.ajax({
type : 'POST',
url : "<c:url value='/crm/mbr/selectMbrCrmInfoPopupForm'/>",
data: {
mbrDvCd : mbrDvCd,
mbrInnb : mbrInnb
},
success : function(html) {
fn_close_modal(info);
$(modalDiv).html(html);
const target = $("#" + info);
let top;
let left;
let width = $("#" + info).width() + 50;
let zIndex = 9998
if (fn_is_empty($("#board-list-detail"))) {
top = offset.top + element.outerHeight(); // 첫 번째 모달의 아래로 설정
left = offset.left - 150;
} else { //게시글 상세에서는 위로 위치
top = offset.top + (element.outerHeight() / 2) - (target.outerHeight() / 2);
left = offset.left + element.outerWidth() + 10; // 오른쪽으로 10px 띄움
}
target.css({
top: top,
left: left,
width: width,
zIndex: zIndex
});
target.show();
}
});
};
/**********************************************************************
* 비회원 crm정보 모달 호출(공통)
* 파라미터 설명 {
* obj : 호출버튼 객체
* mbtlnb : 주문자번호
* modalDiv : 모달 selector
* }
**********************************************************************/
const fn_select_crm_mini_info_nmbr = function(obj, mbtlnb,ordrInnb,mbrNm,modalDiv){
const element = $(obj); // 클릭된 요소
let offset = element.offset();
const info = $(obj).attr("data-info");
$.ajax({
type : 'POST',
url : "<c:url value='/crm/mbr/selectNmbrCrmInfoPopupForm'/>",
data: {
mbtlnb : mbtlnb,
ordrInnb : ordrInnb,
mbrNm : mbrNm
},
success : function(html) {
fn_close_modal(info);
$(modalDiv).html(html);
const target = $("#" + info);
let top;
let left;
let width = $("#" + info).width() + 50;
let zIndex = 9998
if (fn_is_empty($("#board-list-detail"))) {
top = offset.top + element.outerHeight(); // 첫 번째 모달의 아래로 설정
left = offset.left - 150;
} else { //게시글 상세에서는 위로 위치
top = offset.top + (element.outerHeight() / 2) - (target.outerHeight() / 2);
left = offset.left + element.outerWidth() + 10; // 오른쪽으로 10px 띄움
}
target.css({
top: top,
left: left,
width: width,
zIndex: zIndex
});
}
});
};
/**********************************************************************
* CMR 레이어 팝업 닫기 버튼 클릭 이벤트
**********************************************************************/
$(document).on('click', '.mini-info-content__close', function(e) {
e.preventDefault();
$(this).closest(".mini-info-content").hide();
});
/*****************************************************************
* 회원 crm정보 모달 : 상담 등록 이동
****************************************************************/
const fn_move_crm_cnslt = function(mbrInnb, mbrDvCd) {
console.log("param 확인 : ", mbrInnb, mbrDvCd);
let form = $('<form></form>');
$(form).append($('<input/>', {type:'hidden', name:'mbrInnb', value:mbrInnb}));
$(form).append($('<input/>', {type:'hidden', name:'mbrDvCd', value:mbrDvCd}));
$(form).attr('method', 'post');
$(form).attr('action', '<c:url value="/crm/cnslt/selectCnsltDtlsForm"/>');
$(form).appendTo('body');
$(form).submit();
$(form).remove();
};
/*****************************************************************
* 비회원 주문 목록 이동
****************************************************************/
const fn_move_crm_cnslt_nmbr = function(mbtlnb, ordrInnb,mbrNm) {
let form = $('<form></form>');
$(form).append($('<input/>', {type:'hidden', name:'mbtlnb', value:mbtlnb}));
$(form).append($('<input/>', {type:'hidden', name:'ordrInnb', value:ordrInnb}));
$(form).append($('<input/>', {type:'hidden', name:'mbrNm', value:mbrNm}));
$(form).attr('method', 'post');
$(form).attr('action', '<c:url value="/crm/cnslt/selectCnsltDtlsForm"/>');
$(form).appendTo('body');
$(form).submit();
$(form).remove();
};
/*****************************************************************
* 로딩이미지
****************************************************************/
const loding = function(isShow) {
if(isShow){
$('.loadingImg').show();
}else{
$('.loadingImg').hide();
}
};
</script>
<style>
.top_menu_req_cnt {
width: 15px ;
height: 15px ;
border-radius: 10px ;
background-color: red ;
color: white ;
font-size: 10px ;
line-height: 15px ;
text-align: center ;
float: right ;
margin-top: -45px ;
padding-right: 2px;
}
.top_menu_req_cnt2 {
width: 15px ;
height: 15px ;
border-radius: 10px ;
background-color: yellow ;
color: black ;
font-size: 10px ;
line-height: 15px ;
text-align: center ;
float: right ;
margin-top: -45px ;
margin-right: 20px;
padding-right: 2px;
}
</style>
<!--로딩영역-->
<div class="loadingImg" style="display:none; position: relative; z-index: 1010;">
<div class="loding_popup_wrap"><img src="/mngr/images/loding.gif" alt="loading"></div>
</div>

View File

@@ -0,0 +1,84 @@
<%@ 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"%>
<aside class="side-nav">
<nav class="side-nav__inner">
<ul class="depth2">
<c:if test="${!empty leftMenuList}">
<c:forEach var="leftMenuList" items="${leftMenuList.menuList}" varStatus="status">
<!-- 선택한 TOP메뉴코드 -->
<c:set var="topMenuCd" value="${sessionScope.topMenuCd}" />
<!-- 선택한 LEFT메뉴코드 -->
<c:set var="leftMenuCd" value="${sessionScope.leftMenuCd}" />
<!-- 선택한 LEFT메뉴의 상위 코드 -->
<c:set var="upperMenuCd" value="${sessionScope.upperMenuCd}" />
<!-- 2뎁스의 메뉴 조회 -->
<c:if test="${'3' eq leftMenuList.menuDepth}">
<c:choose>
<%-- 2뎁스 밑에 3뎁스가 있는 경우 Sample --%>
<c:when test="${'1' eq leftMenuList.nextDepth3}">
<c:set var="depth2MenuCd" value="${leftMenuList.menuCd}" />
<c:choose>
<c:when test="${depth2MenuCd eq upperMenuCd || (status.index eq 0 && empty leftMenuCd)}">
<li class="has-sub opened">
</c:when>
<c:otherwise>
<li class="has-sub">
</c:otherwise>
</c:choose>
<div class="depth2-title"><c:out value ="${leftMenuList.menuNm}"/></div>
<ul class="depth3">
</c:when>
<%-- 2뎁스 밑에 3뎁스가 없는 경우 Sample --%>
<c:otherwise>
<c:choose>
<c:when test="${leftMenuCd eq leftMenuList.menuCd || (status.index eq 0 && empty leftMenuCd)}">
<li class="current">
</c:when>
<c:otherwise>
<li>
</c:otherwise>
</c:choose>
<a class="depth2-title" href="javascript:void(0)" onclick="fn_select_left('<c:out value="${topMenuCd}"/>','<c:out value="${leftMenuList.menuCd}"/>','<c:out value="${leftMenuList.upperMenuCd}"/>', '<c:out value="${leftMenuList.url}"/>')"><c:out value ="${leftMenuList.menuNm}"/></a>
</li>
</c:otherwise>
</c:choose>
</c:if>
<!-- 3뎁스의 메뉴 조회 -->
<c:if test="${'4' eq leftMenuList.menuDepth}">
<c:choose>
<c:when test="${leftMenuCd eq leftMenuList.menuCd || (status.index eq 1 && empty leftMenuCd)}">
<li class="current">
</c:when>
<c:otherwise>
<li>
</c:otherwise>
</c:choose>
<a href="javascript:void(0)" onclick="fn_select_left('<c:out value="${topMenuCd}"/>','<c:out value="${leftMenuList.menuCd}"/>','<c:out value="${leftMenuList.upperMenuCd}"/>', '<c:out value="${leftMenuList.url}"/>')"><c:out value ="${leftMenuList.menuNm}"/></a>
</li>
</c:if>
<!-- 3뎁스가 끝나고 새로운 2뎁스가 시작되면 태그를 닫아준다-->
<c:if test="${'1' eq leftMenuList.nextDepth2}">
</ul>
</li>
</c:if>
</c:forEach>
</c:if>
</ul>
</nav>
</aside>
<script>
function fn_select_left(topMenuCd, leftMenuCd, upperMenuCd, leftMenuUrl) {
document.cookie = "topMenuCd=" + topMenuCd + "; path=/mngr";
document.cookie = "leftMenuCd=" + leftMenuCd + "; path=/mngr";
document.cookie = "upperMenuCd=" + upperMenuCd + "; path=/mngr";
document.cookie = "leftMenuUrl=" + leftMenuUrl + "; path=/mngr";
document.cookie = "checkMenu=Y" + "; path=/mngr";
window.location.href = leftMenuUrl;
}
</script>

View File

@@ -0,0 +1,296 @@
<%@ 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" %>
<footer class="footer">
<ul class="footer__first">
<c:if test="${!empty sopmallInfo}">
<c:forEach var="topMenuList" items="${sopmallInfo.menuList}" varStatus="status">
<c:if test="${ topBarInfo.topbar.gnbTyCd eq '04'}">
<li>
<a href='<c:out value="${topMenuList.url}"/>' onclick="setTopMenuCode()">
<c:choose>
<c:when test = "${fn:contains(topMenuList.url,'/sopmal/main/selectClause?stplatDvCd=02')}">
<strong><c:out value="${topMenuList.ctgryNm}"/></strong>
</c:when>
<c:otherwise>
<c:out value="${topMenuList.ctgryNm}"/>
</c:otherwise>
</c:choose>
</a>
</li>
</c:if>
</c:forEach>
</c:if>
</ul>
<div class="footer__second">
<button type="button" class="footer__second__detailBtn">사업자 정보 확인</button>
<c:if test = "${not empty footerInfo.footerInfo.familySite}">
<select class="family-site-link" title="해당 셀렉트에 대한 설명">
<option value="" disabled selected>FAMILY SITE</option>
<c:forEach var = "familySite" items = "${footerInfo.footerInfo.familySite}">
<option value="<c:out value="${familySite.familySiteUrl}"/>"><c:out value="${familySite.familySiteNm}"/></option>
</c:forEach>
</select>
</c:if>
</div>
<div class="footerHide">
<c:set var="operBsnmInfo" value="${footerInfo.footerInfo.operBsnmInfo}"/>
<c:set var="sleBsnmInfo" value="${footerInfo.footerInfo.sleBsnmInfo}"/>
<c:set var="sopmalInfo" value="${footerInfo.footerInfo.sopmalInfo}"/>
<c:set var="scriptSetup" value="${footerInfo.footerInfo.scriptSetup}"/>
<ul class="footer__third">
<c:choose>
<c:when test="${operBsnmInfo.bsnmInnb ne sleBsnmInfo.bsnmInnb}">
<li>
<span class="footer__third__th">판매사업자</span>
<span class="footer__third__td">
<c:out value="${sleBsnmInfo.bsnmNm}"/>
</span>
</li>
<li><span class="footer__third__th">대표자</span><span class="footer__third__td"><c:out value="${sleBsnmInfo.reprsntvnm}"/></span></li>
<li><span class="footer__third__th">주소</span><span class="footer__third__td">
<c:choose>
<c:when test = "${not empty sleBsnmInfo.rnmAdres && not empty sleBsnmInfo.lnbAdres}">
<c:out value="${sleBsnmInfo.lnbAdres}"/>
</c:when>
<c:when test = "${empty operBsnmInfo.rnmAdres && not empty sleBsnmInfo.lnbAdres}">
<c:out value="${sleBsnmInfo.lnbAdres}"/>
</c:when>
<c:when test = "${not empty sleBsnmInfo.rnmAdres && empty sleBsnmInfo.lnbAdres}">
<c:out value="${sleBsnmInfo.rnmAdres}"/>
</c:when>
</c:choose> <c:out value="${sleBsnmInfo.dtlAdres}"/></span></li>
<li><span class="footer__third__th">대표전화</span><span class="footer__third__td"><c:out value="${sopmalInfo.reprsntTelnb}"/></span>
</li>
<li><span class="footer__third__th">대표이메일</span>
<a href="mailto:<c:out value='${sopmalInfo.reprsntEmail}'/>" class="footer__third__td"><strong><c:out value="${sopmalInfo.reprsntEmail}"/></strong></a>
</li>
<li><span class="footer__third__th">사업자 등록번호</span><span
class="footer__third__td"><c:out value="${sleBsnmInfo.bizrnb}"/></span>
[ <a href="javascript:;" onclick="window.open('https://www.ftc.go.kr/bizCommPop.do?wrkr_no=<c:out value="${sleBsnmInfo.replaceBizrnb}"/>','communicationViewPopup','width=750,height=700,scrollbars=yes')" class="footer__underLine">사업자정보확인</a> ]
</li>
<li><span class="footer__third__th">개인정보관리책임자</span><span class="footer__third__td"><c:out value="${sleBsnmInfo.indvdlinfoPrtcRspnberNm}"/></span>
</li>
<li><span class="footer__third__th">통신판매업 신고번호</span><span class="footer__third__td"><c:out value="${sleBsnmInfo.mobDclNb}"/></span></li>
<li>[ <a onclick="openModal('selerInfo');" class="footer__underLine">판매자 정보</a> ]
[ <a onclick="fn_get_indvdlInfoPorcsCn();" class="footer__underLine">판매자 개인정보 처리방침</a> ]</li>
</ul>
<div class="footer__logo">
</div>
<ul class="footer__third" style="font-size:12px; color:#888888;">
<li>
통신판매중개사업자 &nbsp; | &nbsp; <c:out value="${operBsnmInfo.bsnmNm}"/>
</li>
<li>대표자 &nbsp; | &nbsp; <c:out value="${operBsnmInfo.reprsntvnm}"/></li>
<li>주소 &nbsp; | &nbsp;
<c:choose>
<c:when test = "${not empty operBsnmInfo.rnmAdres && not empty operBsnmInfo.lnbAdres}">
<c:out value="${operBsnmInfo.lnbAdres}"/>
</c:when>
<c:when test = "${empty operBsnmInfo.rnmAdres && not empty operBsnmInfo.lnbAdres}">
<c:out value="${operBsnmInfo.lnbAdres}"/>
</c:when>
<c:when test = "${not empty operBsnmInfo.rnmAdres && empty operBsnmInfo.lnbAdres}">
<c:out value="${operBsnmInfo.rnmAdres}"/>
</c:when>
</c:choose> <c:out value="${operBsnmInfo.dtlAdres}"/></span></li>
<li>대표전화 &nbsp; | &nbsp; <c:out value="${operBsnmInfo.telnb}"/>
</li>
<li>대표이메일 &nbsp; | &nbsp;
<a href="mailto:<c:out value='${operBsnmInfo.email}'/>"><c:out value="${operBsnmInfo.email}"/></a>
</li>
<li>사업자 등록번호 &nbsp; | &nbsp; <c:out value="${operBsnmInfo.bizrnb}"/> &nbsp;
[ <a href="javascript:;" onclick="window.open('https://www.ftc.go.kr/bizCommPop.do?wrkr_no=<c:out value="${operBsnmInfo.replaceBizrnb}"/>','communicationViewPopup','width=750,height=700,scrollbars=yes')">사업자정보확인</a> ]
</li>
<li>개인정보관리책임자 &nbsp; | &nbsp; <c:out value="${operBsnmInfo.indvdlinfoPrtcRspnberNm}"/>
</li>
<li>통신판매업 신고번호 &nbsp; | &nbsp; <c:out value="${operBsnmInfo.mobDclNb}"/></li>
</ul>
<br/>
<p class="footer__description">
<c:out value="${operBsnmInfo.bsnmNm}"/>는 통신판매중계자이며, 통신판매의 당사자가
아닙니다. 상품 및 거래와 관련한 의무와 책임은 판매자에게 있습니다.</p>
<p class="footer__copyright">ⓒ<c:out value="${operBsnmInfo.bsnmNm}"/> All rights reserved.</p>
<%--로딩이미지--%>
<img src="/mobile/images/loading.svg" style = "display:none" class = "loadingImg">
</c:when>
<c:otherwise>
<li>
<span class="footer__third__th">사업자명</span>
<span class="footer__third__td">
<c:out value="${operBsnmInfo.bsnmNm}"/>
</span>
</li>
<li><span class="footer__third__th">대표자</span><span class="footer__third__td"><c:out value="${operBsnmInfo.reprsntvnm}"/></span></li>
<li><span class="footer__third__th">주소</span><span class="footer__third__td">
<c:choose>
<c:when test = "${not empty operBsnmInfo.rnmAdres && not empty operBsnmInfo.lnbAdres}">
<c:out value="${operBsnmInfo.lnbAdres}"/>
</c:when>
<c:when test = "${empty operBsnmInfo.rnmAdres && not empty operBsnmInfo.lnbAdres}">
<c:out value="${operBsnmInfo.lnbAdres}"/>
</c:when>
<c:when test = "${not empty operBsnmInfo.rnmAdres && empty operBsnmInfo.lnbAdres}">
<c:out value="${operBsnmInfo.rnmAdres}"/>
</c:when>
</c:choose> <c:out value="${operBsnmInfo.dtlAdres}"/></span></li>
<li><span class="footer__third__th">대표전화</span><span class="footer__third__td"><c:out value="${sopmalInfo.reprsntTelnb}"/></span>
</li>
<li><span class="footer__third__th">대표이메일</span>
<a href="mailto:<c:out value='${sopmalInfo.reprsntEmail}'/>" class="footer__third__td"><strong><c:out value="${sopmalInfo.reprsntEmail}"/></strong></a>
</li>
<li><span class="footer__third__th">사업자 등록번호</span><span
class="footer__third__td"><c:out value="${operBsnmInfo.bizrnb}"/></span>
<a href="javascript:;" onclick="window.open('https://www.ftc.go.kr/bizCommPop.do?wrkr_no=<c:out value="${operBsnmInfo.replaceBizrnb}"/>','communicationViewPopup','width=750,height=700,scrollbars=yes')" class="footer__underLine">사업자정보확인</a>
</li>
<li><span class="footer__third__th">개인정보관리책임자</span><span class="footer__third__td"><c:out value="${operBsnmInfo.indvdlinfoPrtcRspnberNm}"/></span>
</li>
<li><span class="footer__third__th">통신판매업 신고번호</span><span class="footer__third__td"><c:out value="${sleBsnmInfo.mobDclNb}"/></span></li>
</ul>
<div class="footer__logo">
</div>
<p class="footer__copyright">ⓒ<c:out value="${sleBsnmInfo.bsnmNm}"/> All rights reserved.</p>
<%--로딩이미지--%>
<img src="/mobile/images/loading.svg" style = "display:none" class = "loadingImg">
</c:otherwise>
</c:choose>
</footer>
<div class="microModal microBottomSheet" id="selerInfo" 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">
<button class="microModal__close" aria-label="창 닫기" data-micromodal-close></button>
</div>
<div class="microModal__content">
<div class="deliveryFeeInfo">
<div class="deliveryFeeInfo__item">
<div class="deliveryFeeInfo__controls">
<em>판매자 정보</em>
</div>
<table>
<colgroup>
<col style="width: 40%;">
<col style="width: 60%;">
</colgroup>
<tbody>
<tr>
<th>상호명</th>
<td><c:out value="${sleBsnmInfo.bsnmNm}"/></td>
</tr>
<tr>
<th>대표자</th>
<td><c:out value="${sleBsnmInfo.reprsntvnm}"/></td>
</tr>
<tr>
<th>사업자등록번호</th>
<td><c:out value="${sleBsnmInfo.bizrnb}"/></td>
</tr>
<tr>
<th>통신판매업번호</th>
<td><c:out value="${sleBsnmInfo.mobDclNb}"/></td>
</tr>
<c:if test="${not empty sleBsnmInfo.bsnDclNb}">
<tr>
<th>영업신고번호</th>
<td><c:out value="${sleBsnmInfo.bsnDclNb}"/></td>
</tr>
</c:if>
<tr>
<th>사업장 소재지</th>
<td><c:choose>
<c:when test = "${not empty sleBsnmInfo.rnmAdres && not empty sleBsnmInfo.lnbAdres}">
<c:out value="${sleBsnmInfo.lnbAdres}"/>
</c:when>
<c:when test = "${empty sleBsnmInfo.rnmAdres && not empty sleBsnmInfo.lnbAdres}">
<c:out value="${sleBsnmInfo.lnbAdres}"/>
</c:when>
<c:when test = "${not empty sleBsnmInfo.rnmAdres && empty sleBsnmInfo.lnbAdres}">
<c:out value="${sleBsnmInfo.rnmAdres}"/>
</c:when>
</c:choose><c:out value="${sleBsnmInfo.dtlAdres}"/></td>
</tr>
<c:if test="${footerInfo.footerInfo.sopmalInfo.cscTelnbOrdrPosblAt eq 'Y' && not empty footerInfo.footerInfo.sopmalInfo.cscTelnb}">
<tr>
<th>고객센터</th>
<td><c:out value="${footerInfo.footerInfo.sopmalInfo.cscTelnb}"/></td>
</tr>
</c:if>
<tr>
<th>email</th>
<td><c:out value="${sleBsnmInfo.email}"/></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<c:if test="${scriptSetup.scriptCnUseAt eq 'Y'}">
${scriptSetup.scriptCn}
</c:if>
<div class="microModal microFullScreen" id="indvdlInfoProcsModal" 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">
<h4 class="microModal__title" style="width:105%;">
판매자 개인정보 처리방침
</h4>
<button class="microModal__close" aria-label="창 닫기" data-micromodal-close></button>
</div>
<div class="microModal__content ck-content" id = "indvdlInfoProcsContent">
<input type = "hidden" value = "N" id = "indvdlInfoProcsAjaxAt"/>
</div>
</div>
</div>
</div>
</div>
<script>
/*판매자 개인정보 처리방침 조회*/
const fn_get_indvdlInfoPorcsCn = () => {
const indvdlInfoProcsAjaxAt = $("#indvdlInfoProcsAjaxAt").val();
if (indvdlInfoProcsAjaxAt === 'N') {
$.ajax({
type: 'post',
url: "/sopmal/main/selectIndvdlInfoProcsCn",
data : {stplatDvCd : '08'},
success: function (data) {
data = data.resBody.result;
data = JSON.parse(data);
let clauseList = data.clauseList;
if (clauseList) {
let i = 0;
clauseList.forEach(function (item) {
if (i === 0) {
$("#indvdlInfoProcsAjaxAt").after(item.stplatCn);
return false;
}
});
}
$("#indvdlInfoProcsAjaxAt").val("Y");
}
});
}
openModal('indvdlInfoProcsModal');
};
</script>
<c:if test="${sopmallInfo.shopInfo.sopmalCd eq 'DL'}">
<script>
(function(){var w=window;if(w.ChannelIO){return w.console.error("ChannelIO script included twice.");}var ch=function(){ch.c(arguments);};ch.q=[];ch.c=function(args){ch.q.push(args);};w.ChannelIO=ch;function l(){if(w.ChannelIOInitialized){return;}w.ChannelIOInitialized=true;var s=document.createElement("script");s.type="text/javascript";s.async=true;s.src="https://cdn.channel.io/plugin/ch-plugin-web.js";var x=document.getElementsByTagName("script")[0];if(x.parentNode){x.parentNode.insertBefore(s,x);}}if(document.readyState==="complete"){l();}else{w.addEventListener("DOMContentLoaded",l);w.addEventListener("load",l);}})();
ChannelIO('boot', {
"pluginKey": "f73ed102-2f9c-44ff-ab17-dc18045401a2" // fill your plugin key
});
</script>
</c:if>

View File

@@ -0,0 +1,44 @@
<%@ 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="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.cdnurl')" var="cdnurl"/>
<div class="header__wrapper">
<div class="header__controls-wrapper">
<div class="header__controls">
<div class="header__toBack">
<c:if test = "${!(fn:contains('/sopmal/ordr/selectOrdrCompt',accessUri)||fn:contains('/sopmal/ordr/selectOrdrFailr',accessUri))}"><%--주문완료와 주문실패는 뒤로가기 버튼 미노출--%>
<button type="button" class="header__toBack__btn" >
<span class="visually-hidden">뒤로가기</span>
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none"
viewBox="0 0 24 24">
<path fill="#1A1A1A"
d="M16.598 3.338a.75.75 0 0 0-1.061 0l-8.132 8.131a.75.75 0 0 0 0 1.061l8.132 8.132a.75.75 0 0 0 1.06-1.06L8.998 12l7.6-7.602a.75.75 0 0 0 0-1.06Z">
</path>
</svg>
</button>
</c:if>
</div>
<h1 class="header__title" id="headerTitle"></h1><%--각자 페이지에 맞게 set해야함--%>
<div class="header__btn-container">
<button class="header__btn" onclick="fn_search_open();" type="button"><i class="icon icon_nav-search"></i><span
class="visually-hidden">검색</span></button>
<button type="button" class="header__btn" onclick="location.href='/sopmal/ordr/selectSpbk';">
<span class="number-badge headerCartCnt"><c:out value="${topBarInfo.cartCnt}"/></span>
<i class="icon icon_nav-cart"></i>
<span class="visually-hidden">장바구니</span>
</button>
<button type="button" class="header__btn" onclick="fn_select_mbrInfo('<c:out value="${cdnurl}"/>',${isAuthenticated}); openModal('hamburger-menu');">
<i class="icon icon_nav-menu"></i>
<span class="visually-hidden">메뉴</span>
</button>
</div>
</div>
</div>
</div>
<script>
//뒤로가기 이벤트 부여, 각 페이지 마다 이벤트 삭제 후 다른 이벤트 사용 가능
$(".header__toBack__btn").on("click",function (){
fn_go_back();
});
</script>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,93 @@
<%@ 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"%>
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.cdnurl')" var="cdnurl"/>
<!-- 헤더 영역 -->
<header class="header">
<c:choose>
<c:when test = "${not empty topBarInfo.case15}">
<!-- 최상단 띠배너 -->
<div class="top-banner">
<div class="swiper top-banner-swiper">
<div class="swiper-wrapper">
<c:forEach items="${ topBarInfo.case15 }" var="case15" varStatus="status">
<div class="swiper-slide top-banner__image">
<a href="${ case15.itmeCnncUrl }">
<img src="${cdnurl}${ case15.filCours }/${ case15.sysFilNm }"
alt="해당 이미지에 대한 설명">
</a>
</div>
</c:forEach>
</div>
</div>
<div class=" top-banner__btn-container">
<button class="top-banner__close">
<span class="visually-hidden">닫기</span>
</button>
</div>
</div>
</c:when>
<c:otherwise>
<!-- 최상단 띠배너 -->
<div class="top-banner" style="display: none;">
</div>
</c:otherwise>
</c:choose>
<div class="header__wrapper">
<div class="header__controls-wrapper">
<div class="header__controls">
<a class="header__home-link" href="">
<img src="${ cdnurl }${ topBarInfo.topbar.topFilCours }/${ topBarInfo.topbar.topSysFilNm }" alt="<c:out value="${sopmallInfo.shopInfo.sopmalNm}"/>">
</a>
<div class="header__btn-container">
<button class="header__btn" onclick="fn_search_open();" type="button">
<i class="icon icon_nav-search"></i>
<span class="visually-hidden">검색</span>
</button>
<!-- <button class="header__btn" onclick="setTopMenuCode(); location.href='/sopmal/ordr/selectSpbk';"> -->
<button class="header__btn" onclick="location.href='/sopmal/ordr/selectSpbk';">
<span class="number-badge headerCartCnt">${ topBarInfo.cartCnt }</span>
<i class="icon icon_nav-cart"></i><span class="visually-hidden">장바구니</span></button>
<button class="header__btn" onclick="fn_select_mbrInfo('<c:out value="${cdnurl}"/>',${isAuthenticated}); openModal('hamburger-menu');">
<i class="icon icon_nav-menu"></i>
<span class="visually-hidden">메뉴</span>
</button>
</div>
</div>
</div>
<nav class="home-category">
<div class="home-category__content">
<ul class="home-category__list">
<c:if test="${!empty sopmallInfo}">
<c:forEach var="topMenuList" items="${sopmallInfo.menuList}" varStatus="status">
<c:if test="${topMenuList.ctgryDvCd eq '01' && topMenuList.menuExpsrAt eq 'Y'}">
<c:if test="${topMenuList.rnum eq '2'}">
<li class="home-category__item">
<a href="<c:out value="${topMenuList.url}"/>" onclick="setTopMenuCode()" <c:if test="${not empty topMenuList.menuChrColor}"> style="color:${topMenuList.menuChrColor};"</c:if>><c:out value ="${topMenuList.ctgryNm}"/></a>
</li>
</c:if>
</c:if>
</c:forEach>
</c:if>
</ul>
</div>
</nav>
</div>
</header>
<script>
// 상단 띠 배너 스크립트
const topBannerSwiper = new Swiper(".top-banner-swiper", {
loop: true,
autoplay: {
delay: 4000,
},
});
// 상단 띠 배너 닫기 버튼
$(".top-banner__close").click(function () {
$(".top-banner").remove();
});
</script>

View File

@@ -0,0 +1,273 @@
<%@ 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="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.cdnurl')" var="cdnurl"/>
<aside class="tab-bar">
<nav class="tab-bar__nav">
<a class="tab-bar__link" onclick="fn_select_mbrInfo('<c:out value="${cdnurl}"/>',${isAuthenticated}); openModal('hamburger-menu');">
<i class="icon icon_tab-bar-category"></i>
카테고리</a>
<a class="tab-bar__link" href="/sopmal/mpage/ordr/selectWslistInqireForm" id="tabBarWishOrBnft" data-sopmalcd="${sopmallInfo.shopInfo.sopmalCd}">
<i class="icon icon_tab-bar-wishlist"></i>
위시리스트</a>
<div class="tab-bar__home-wrapper">
<div class="tab-bar__home">
<a href="/" class="hide-text">
<i class="icon icon_tab-bar-home"></i>
<span class="visually-hidden">홈</span>
</a>
</div>
</div>
<a class="tab-bar__link" href="/sopmal/ordr/selectSpbk">
<i class="icon icon_tab-bar-cart"></i>
장바구니</a>
<a class="tab-bar__link active" href="/sopmal/mpage/mbr/selectMpageMainInqire">
<i class="icon icon_tab-bar-mypage"></i>
마이페이지
</a>
</nav>
<div class="tab-bar__bg">
<div class="tab-bar__bg-fraction"></div>
</div>
</aside>
<!-- 햄버거 메뉴 모달 -->
<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="/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="/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' && topMenuList.gnbExpsrAt eq 'Y'}">
<c:if test="${topMenuList.rnum eq '2'}">
<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="${'3' eq topMenuList.rnum}">
<!-- 메뉴 하위가 메뉴인 경우-->
<c:if test="${chkUpperMenuCd ne topMenuList.upperCtgryId}">
<ul class="view">
</c:if>
<li><a href='<c:out value="${topMenuList.url}"/>'><c:out value ="${topMenuList.ctgryNm}"/></a></li>
<c:if test="${'0' eq topMenuList.nextDepth3 && '0' eq topMenuList.nextDepth2}">
</ul>
</li>
</c:if>
</c:if>
<c:if test="${topMenuList.rnum < 4}">
<c:set var="chkUpperMenuCd" value="${ topMenuList.upperCtgryId }"/>
</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>
</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>

View File

@@ -0,0 +1,35 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<aside class="sub-left-menu">
<c:if test="${!empty sopmallInfo}">
<h2 class="sub-left-menu__title">마이페이지</h2>
<c:forEach var="topMenuList" items="${sopmallInfo.menuList}" varStatus="status">
<c:if test="${topMenuList.ctgryDvCd eq '05'}">
<c:if test="${topMenuList.rnum eq '2'}">
<div class="sub-left-menu__list">
<a class="sub-left-menu__list-title"><c:out value="${topMenuList.ctgryNm}"/></a>
<ul class="sub-left-menu__sub-list">
</c:if>
<c:if test="${topMenuList.rnum eq '3'}">
<c:set var="ctgryId" value="${sessionScope.ctgryId}" />
<%-- <li><a href="javascript:void(0)" onclick="setMenuCode('<c:out value="${topMenuList.ctgryId}"/>','<c:out value="${topMenuList.url}"/>')" <c:if test="${ctgryId eq topMenuList.ctgryId}"> class="current" </c:if>><c:out value="${topMenuList.ctgryNm}"/></a></li> --%>
<li><a href="javascript:void(0)" onclick="setMenuCode('<c:out value="${topMenuList.ctgryId}"/>','<c:out value="${topMenuList.url}"/>')" <c:if test="${ctgryId eq topMenuList.ctgryId}"> class="current" </c:if>><c:out value="${topMenuList.ctgryNm}"/></a></li>
<!-- 4뎁스가 끝나고 새로운 3뎁스가 시작되면 태그를 닫아준다-->
<c:if test="${'0' eq topMenuList.nextDepth3 && '0' eq topMenuList.nextDepth2}">
</ul>
</div>
</c:if>
</c:if>
</c:if>
</c:forEach>
</c:if>
</aside>
<script>
function setMenuCode(ctgryId, myMenuUrl) {
document.cookie = "ctgryId=" + ctgryId + "; path=/sopmal";
document.cookie = "myMenuUrl=" + myMenuUrl + "; path=/sopmal";
window.location.href = myMenuUrl;
}
</script>

View File

@@ -0,0 +1,113 @@
<%@ 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="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<div class="member-rank-summary">
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.cdnurl')" var="cdnurl"/>
<div class="member-rank-summary__top">
<div class="member-rank-summary__user">
<div class="member-rank-summary__rank2">
<c:if test = "${not empty mpageResultMap.info.mbrGradIconCours}">
<input type = "hidden" name = "" value = "<c:out value = "${cdnurl}${mpageResultMap.info.mbrGradIconCours}"/>" id = "" class = ""/>
<img src="${cdnurl}${mpageResultMap.info.mbrGradIconCours}" onerror="this.src='/pc/images/image_placeholder.png'" alt="${ mpageResultMap.info.mbrGradNm }">
</c:if>
<span class="member-rank-summary__rank"><c:out value="${ mpageResultMap.info.mbrGradNm }"/></span>
</div>
<span class="member-rank-summary__name"><c:out value="${ mpageResultMap.info.mbrNm }"/><span class="append">님</span></span>
</div>
<c:if test = "${sopmallInfo.shopInfo.cashAt eq 'Y'}">
<div class="member-rank-summary__summary-info">
<c:choose>
<c:when test="${ mpageResultMap.info.mbrGradAmt gt mpageResultMap.info.rlSetleAmt }">
<p>지금부터 <em>
<c:out value="${ mpageResultMap.info.attiNeedAmtWon }"/> 더 주문</em>, 총 결제 금액이<em><c:out
value="${ mpageResultMap.info.mbrGradAmtWon }"/> 이상</em>이면
<span class="member-badge vip"><c:out value="${ mpageResultMap.info.nextMbrGradNm}"/></span>
등급이 될 수 있어요!
</p>
</c:when>
<c:otherwise>
<p>현재 회원님은
<span class="member-badge vip"><c:out value="${ mpageResultMap.info.mbrGradNm }"/></span>등급이에요.
</p>
</c:otherwise>
</c:choose>
</div>
</c:if>
</div>
<div class="member-rank-summary__bottom">
<div class="member-rank-summary__summary" style="justify-content: center;">
<c:if test="${sopmallInfo.shopInfo.cashAt eq 'Y'}">
<a href="/sopmal/mpage/bnef/selectCashDtlsInqireForm" class="member-rank-summary__summary-item">
<img src="/pc/images/icon_member-rank-mileage.png" alt="">
<div class="member-rank-summary__summary-description">
<span class="member-rank-summary__summary-name">GC 머니</span>
<p class="member-rank-summary__summary-numberContainer">
<span class="member-rank-summary__summary-number three-digit-comma"><c:out value="${mpageResultMap.info.mbrCashAmt}"/></span>
<span class="member-rank-summary__summary-numberUnit">점</span>
</p>
</div>
</a>
</c:if>
<a href="/sopmal/mpage/bnef/selectMlgDtlsInqireForm" class="member-rank-summary__summary-item">
<img src="/pc/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 three-digit-comma"><fmt:formatNumber value="${mpageResultMap.info.mbrMlgAmt}" pattern="#,###"/></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="/pc/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 three-digit-comma"><c:out value="${ mpageResultMap.info.couponCnt }"/></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="/pc/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 three-digit-comma"><c:out value="${ mpageResultMap.info.wishGoodsCnt }"/></span>
<span class="member-rank-summary__summary-numberUnit">개</span>
</p>
</div>
</a>
<a href="/sopmal/mpage/ordr/selectMbrOrdrListInqire" class="member-rank-summary__summary-item">
<img src="/pc/images/icon_member-rank-delivery.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 three-digit-comma"><c:out value="${ mpageResultMap.info.dlvyingOrdrCnt }"/></span>
<span class="member-rank-summary__summary-numberUnit">개</span>
</p>
</div>
</a>
</div>
<c:if test="${sopmallInfo.shopInfo.cashAt eq 'N'}"> <%--충전형마일리지 사용야부에 따라 화면 위치 다름--%>
<div class="member-rank-summary__summary-info">
<c:choose>
<c:when test="${ mpageResultMap.info.mbrGradAmt gt mpageResultMap.info.rlSetleAmt }">
<p>지금부터 <em>
<c:out value="${ mpageResultMap.info.attiNeedAmtWon }"/> 더 주문</em>, 총 결제 금액이<em><c:out
value="${ mpageResultMap.info.mbrGradAmtWon }"/> 이상</em>이면
<span class="member-badge vip"><c:out value="${ mpageResultMap.info.nextMbrGradNm}"/></span>
등급이 될 수 있어요!
</p>
</c:when>
<c:otherwise>
<p>현재 회원님은
<span class="member-badge vip"><c:out value="${ mpageResultMap.info.mbrGradNm }"/></span>등급이에요.
</p>
</c:otherwise>
</c:choose>
</div>
</c:if>
</div>
</div>