초기소스

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,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>