초기소스

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,142 @@
<%@ 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 : ItrntBbsListR.jsp
Description : 인트라넷 게시글 목록 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-03-26 이운산 최초 생성(퍼블리싱 적용)
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@ include file="/WEB-INF/views/comm/itrnt/Include.jsp"%>
</head>
<body>
<%@include file ="/WEB-INF/views/comm/itrnt/Header.jsp" %>
<main class="main">
<%@include file ="/WEB-INF/views/comm/itrnt/Left.jsp" %>
<div class="content">
<div class="content__inner">
<button class="side-nav__fold"><span class="visually-hidden">좌측메뉴 펼치기/닫기</span></button>
<div class="page-title">
<h2 class="page-title__title">게시글 리스트</h2>
<div class="page-title__btn-container">
<div class="select-box">
<select class="select-link" title="게시판 목록">
<option value="#">주요 게시판</option>
<c:forEach var = "bbsList" items = "${resultMap.bbsList}">
<option value="<c:out value="/itrnt/bbs/selectBbscttListInqireForm?bbsId=${bbsList.bbsId}"/>"><c:out value="${bbsList.bbsNm}"/>(<fmt:formatNumber value="${bbsList.bbscttInnb}" pattern="#,###"/>)</option>
</c:forEach>
</select>
</div>
</div>
</div>
<div class="content-section__col-2-container" style="">
<c:choose>
<c:when test = "${not empty resultMap.bbsList}">
<c:forEach var = "bbs" items = "${resultMap.bbsList}">
<section class="content-section">
<h3 class="content-section__title">
<a href="<c:out value="/itrnt/bbs/selectBbscttListInqireForm?bbsId=${bbs.bbsId}"/>">
<c:out value="${bbs.bbsNm}"/> <span><fmt:formatNumber value="${bbs.bbscttInnb}" pattern="#,###"/></span>건
</a>
</h3>
<div class="table-wrapper">
<table class="table vertical tight">
<caption>해당 테이블에 대한 설명</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 9%;">
<col style="width: 20%;">
<col style="width: auto;">
<c:if test = "${bbs.bbsTyCd ne '02'}">
<col style="width: 12%">
</c:if>
<col style="width: 18%">
</colgroup>
<thead>
<tr>
<th>번호</th>
<th>작성자</th>
<th>제목</th>
<c:if test = "${bbs.bbsTyCd ne '02'}">
<th>상태</th>
</c:if>
<th>문의일</th>
</tr>
</thead>
<tbody>
<c:choose>
<c:when test = "${not empty resultMap.listByBbs}">
<c:forEach var = "listByBbs" items = "${resultMap.listByBbs}">
<c:forEach var = "list" items = "${listByBbs}">
<c:if test = "${list.bbsId eq bbs.bbsId}">
<tr>
<td><c:out value="${list.rnum}"/></td>
<td><c:out value="${list.regusrNm}"/><br>(<c:out value="${list.regusrId}"/>)</td>
<td class="text-left">
<a href="/itrnt/bbs/selectBbscttListInqireForm?bbsId=${bbs.bbsId}&bbscttInnb=<c:out value="${list.bbscttInnb}"/>&dashAt=Y" class="badge-word">
<c:out value="${list.sj}"/>
<c:if test = "${list.cmtCnt > 0}">
(<c:out value="${list.cmtCnt}"/>)
</c:if>
</a>
</td>
<c:if test = "${bbs.bbsTyCd ne '02'}">
<td>
<c:choose>
<c:when test="${list.answAt eq 'N'}">
<span class="stone-7">
답변대기
</span>
</c:when>
<c:otherwise>
<span class="blue-7">
답변완료
</span>
</c:otherwise>
</c:choose>
</td>
</c:if>
<td>
<c:out value="${list.registDt}"/>
</td>
</tr>
</c:if>
</c:forEach>
</c:forEach>
</c:when>
<c:otherwise>
</c:otherwise>
</c:choose>
</tbody>
</table>
</div>
<a href="<c:out value="/itrnt/bbs/selectBbscttListInqireForm?bbsId=${bbs.bbsId}"/>" class="content-section__col-2-more">+ 더보기</a>
</section>
</c:forEach>
</c:when>
<c:otherwise>
<section class="content-section">
<div>설정된 노출게시판이 없습니다.</div>
</section>
</c:otherwise>
</c:choose>
</div>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</div>
</main>
</body>
</html>

View File

@@ -0,0 +1,357 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ page import="java.util.Date" %>
<%@ 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" %>
<%@ page import="java.util.Date" %>
<%--
Class Name : GnrlBbscttDtlPopupR.jsp
Description : 일반 게시글 상세 조회 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2023-12-08 김혜지 최초 생성
--%>
<div id="board-list-detail" class="modal" style="max-width: 1400px;">
<div class="modal-header">
<h4>게시글 보기</h4>
</div>
<div class="modal-content">
<%--게시글 정보--%>
<c:set value="${resultMap.bbscttInfo.dataMap}" var="bbscttInfo"/>
<%--게시글 vo--%>
<c:set value="${resultMap.bbsctt}" var="bbscttVO"/>
<%--추가문항답변--%>
<c:set value="${resultMap.bbscttInfo.qesitmAnswList}" var="qesitmAnswList"/>
<%--추가문항답변--%>
<c:set value="${resultMap.bbscttInfo.qesitmList}" var="qesitmList"/>
<%--게시글 파일정보--%>
<c:set value="${resultMap.bbscttInfo.fileInfo}" var="fileInfo"/>
<%--게시판 설정 --%>
<c:set value="${resultMap.bbsInfo}" var="bbsInfo"/>
<%--게시글 연관상품--%>
<c:set value="${resultMap.goodsList.goodsList}" var="goodsList"/>
<c:if test="${resultMap.bbsctt.tentGroup eq '02'}">
<c:set value="style='display:none;'" var="isStr"/>
</c:if>
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.cdnurl')" var="cdnurl"/>
<%--상세에서 작업 후 목록 조회 유무--%>
<input type="hidden" id="${dtlPop}" value="<c:out value='${dtlPop}'/>"/>
<input type="hidden" id="useAt" value="<c:out value="${bbscttInfo.useAt}"/>"/>
<div class="form-control-container mb-10">
<div class="left">
</div>
<div class="center">
</div>
<div class="right">
<%--공지사항은 매장이 댓글 crud, 게시글수정삭제 불가--%>
<c:choose>
<c:when test = "${bbscttVO.tentGroup eq '02' and bbscttVO.bbsId eq 'gs_seller_notice'}">
<c:set var = "modifyAt" value = "N"/>
</c:when>
<c:otherwise>
<c:set var = "modifyAt" value = "Y"/>
</c:otherwise>
</c:choose>
<%--매장 로그인인데 해당 게시글이 관리자가 쓴 글일 시 매장이 수정,삭제 불가--%>
<c:choose>
<c:when test = "${bbscttVO.tentGroup eq '02' and bbscttInfo.regusr ne bbscttVO.strInnb}">
<c:set var = "modifyAt2" value = "N"/>
</c:when>
<c:otherwise>
<c:set var = "modifyAt2" value = "Y"/>
</c:otherwise>
</c:choose>
<c:if test="${bbscttInfo.useAt eq 'Y' and modifyAt eq 'Y' and modifyAt2 eq 'Y'}">
<button type="button" class="btn xsm primary outline" onclick="fn_select_bbsctt_update_pop('<c:out value="${ bbscttInfo.bbscttInnb }"/>','dtlPop');">
<spring:message code="button.update"/>
</button>
<c:if test = "${bbsInfo.bbsTyCd ne '02'}">
<c:choose>
<c:when test = "${bbscttInfo.procsComptAt eq 'Y'}">
<button type="button" class="btn xsm outline primary" dv="complete" onclick = "fn_update_answ_sttus(this,'<c:out value="${bbscttInfo.bbscttInnb}"/>');" ${isStr}>답변완료</button>
</c:when>
<c:otherwise>
<button type="button" class="btn xsm outline primary" dv ="return" onclick = "fn_update_answ_sttus(this,'<c:out value="${bbscttInfo.bbscttInnb}"/>');" ${isStr}>답변대기</button>
</c:otherwise>
</c:choose>
</c:if>
<button type="button" class="btn xsm dark" onclick="fn_delete_bbsctt('<c:out value="${ bbscttInfo.bbscttInnb }"/>','','','');" >
<spring:message code="button.delete"/>
</button>
</c:if>
</div>
</div>
<%--게시글 상세내용 START--%>
<div class="table-wrapper mb-40">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 15%;">
<col style="width: 35%;">
<col style="width: 15%;">
<col style="width: 35%;">
</colgroup>
<tbody>
<tr>
<th>공지 기간 제한<br><span class="fs-13">(공지글 여부)</span></th>
<td>
<div class="td-inner">
<span id="dtlNtc">
<c:choose>
<c:when test="${bbscttInfo.ntcAt eq 'Y' && bbscttInfo.ntcPdSetupAt eq 'Y'}">
<c:choose>
<c:when test="${bbscttInfo.ntcPdAt eq 'Y'}">
${ bbscttInfo.ntceBgnDe }~${ bbscttInfo.ntceEndDe }[종료]
</c:when>
<c:otherwise>
${ bbscttInfo.ntceBgnDe }~${ bbscttInfo.ntceEndDe }
</c:otherwise>
</c:choose>
</c:when>
<c:when test="${bbscttInfo.ntcAt eq 'Y' && bbscttInfo.ntcPdSetupAt eq 'N'}">
상시 공지
</c:when>
<c:when test="${bbscttInfo.ntcAt eq 'N'}">
공지 안함
</c:when>
</c:choose>
</span>
</div>
</td>
<th>노출 여부</th>
<td>
<div class="td-inner">
<span id="dtlNtce">
<c:choose>
<c:when test="${bbscttInfo.expsrAt eq 'Y'}">
노출
</c:when>
<c:otherwise>
미노출
</c:otherwise>
</c:choose>
</span>
</div>
</td>
</tr>
<tr>
<th>등록일</th>
<td>
<div class="td-inner" id="dtlRegistDt">
${ bbscttInfo.registDt }
</div>
</td>
<th>조회수</th>
<td>
<div class="td-inner" id="dtlInqireCnt">
${bbscttInfo.inqireCnt }
</div>
</td>
</tr>
<c:if test="${not empty qesitmAnswList}"> <%--2문항 답변 출력시 다음 tr에 문항 답변 출력--%>
<c:forEach items="${qesitmList}" var="qesitm" varStatus="status">
<c:choose>
<c:when test="${status.index % 2 == 0}">
<tr>
<th><c:out value="${qesitm.qesitmNm}"/></th>
<td>
<c:forEach var = "answ" items = "${qesitmAnswList}">
<c:if test = "${answ.qesitmInnb eq qesitm.qesitmInnb}">
<c:out value="${answ.answCn}"/>
</c:if>
</c:forEach>
</td>
</c:when>
<c:when test="${status.index % 2 != 0}">
<th><c:out value="${qesitm.qesitmNm}"/></th>
<td>
<c:forEach var="answ" items="${qesitmAnswList}">
<c:if test = "${answ.qesitmInnb eq qesitm.qesitmInnb}">
<c:out value="${answ.answCn}"/>
</c:if>
</c:forEach>
</td>
</tr>
</c:when>
</c:choose>
</c:forEach>
</c:if>
<tr>
<th>작성자</th>
<td>
<div>
<c:out value="${ bbscttInfo.regusrNm}"/>(<c:out value="${bbscttInfo.maskingRegusrId}"/>)
</div>
</td>
</tr>
<c:if test="${not empty resultMap.bbscttInfo.fileInfo}">
<tr>
<th>파일</th>
<td colspan="3">
<div class="td-inner">
<ul class="file-list">
<c:if test = "${not empty resultMap.bbscttInfo.fileInfo}">
<c:forEach var="file" items="${resultMap.bbscttInfo.fileInfo}">
<li id="<c:out value = '${file.bbscttAtchmnfilInnb}'/>">
<a href="#" class="file-list__item" id = '<c:out value="${file.orginlFilNm}"/>'
onclick="downloadFile(this,'<c:out value="${bbscttVO.sopmalCd}"/>','ITRB', 1);">
<i class="icon icon_file-list mr-2"></i>
<span class="file-list__item-title">
<c:out value="${file.orginlFilNm}"/>
</span>
</a>
</li>
</c:forEach>
</c:if>
</ul>
</div>
</td>
</tr>
</c:if>
<tr>
<th>제목</th>
<td colspan="3">
<div class="td-inner">
<div>
<c:choose>
<c:when test="${bbscttInfo.useAt eq 'Y'}">
<c:out value="${bbscttInfo.sj}"/>
</c:when>
<c:otherwise>
<span class="stone-6">삭제된 게시글입니다.</span>
</c:otherwise>
</c:choose>
</div>
<c:if test="${bbscttInfo.newAt eq 'Y'}">
<i class="icon icon_new-badge"></i>
</c:if>
<c:if test="${bbscttInfo.popularAt eq 'Y'}">
<i class="icon icon_hot-badge"></i>
</c:if>
<c:if test="${ bbscttInfo.secretBbscttAt eq 'Y' }">
<i class="icon icon_lock"></i>
</c:if>
</div>
</td>
</tr>
<tr>
<th>내용</th>
<td colspan="3">
<div id="cnDiv" class="ck-content" style="white-space: pre-wrap; max-width: 800px;">
<c:choose>
<c:when test = "${bbscttInfo.useAt eq 'N'}">
<span class="stone-6">삭제된 게시글입니다.</span>
</c:when>
<c:otherwise>
${bbscttInfo.cn}
</c:otherwise>
</c:choose>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<%--게시글 상세내용 END--%>
<%-- 게시글 댓글 START --%>
<c:if test = "${modifyAt eq 'Y' and bbscttVO.bbsId ne 'gs_seller_notice'}">
<div id="cm"></div>
<%-- 게시글 댓글 등록 START --%>
<form class="cmFormTr dtlCmDiv" id="cmInputClass">
<input type="hidden" name="bbscttInnb" value="${bbscttInfo.bbscttInnb }" id="bbscttInnb"/>
<input type="hidden" name="bbsId" value="${ bbsInfo.bbsId }"/>
<input type="hidden" name="cmInnb"/>
<div class="comment-write-container mb-40">
<span class="comment-id">
<i class="icon icon_comment-user"></i>
<span class="comment-id__name"><c:out value="${bbscttVO.regusrNm}"/></span>
<span class="comment-id__id">(<c:out value="${bbscttVO.regusrId}"/>)</span>
<span class="comment-id__ip">(IP: <c:out value="${ip}"/>)</span>
</span>
<div class="comment-write">
<div class="comment-write__textarea-container">
<textarea class="comment-write__textarea" id="cmInputCn" rows="5" placeholder="댓글을 입력하세요." title="댓글 입력" name="cn"></textarea>
</div>
<button type="button" id="btnCmReg" class="comment-write__button"
onclick="fn_regist_cm('c', this);">
<spring:message code="button.insert"/></button>
</div>
<div class="b-checkbox-container">
<label class="b-checkbox checkbox">
<input type="checkbox" name="secretBbscttAt" value="Y" onclick="fn_check_secret_cm(this);">
<span class="check"></span>
<span class="control-label">비밀 댓글</span>
</label>
</div>
</div>
</form>
<%-- 게시글 댓글 등록 END --%>
<%-- 게시글 댓글 END --%>
</c:if>
<%-- 이전글/다음글 START --%>
<div class="prev-next">
<c:if test="${not empty bbscttInfo.beforeInnb}">
<div class="prev-next__item prev">
<div class="prev-next__item-title">이전글</div>
<div class="prev-next__item-content">
<button type="button" class="moveDetil"
regusr-dv="02"
bbs-id="<c:out value ='${bbsInfo.bbsId}'/>"
bbsctt-innb="<c:out value ='${ bbscttInfo.beforeInnb }'/>">
<c:choose>
<c:when test="${bbscttInfo.beforeUseAt eq 'Y'}">
<c:out value="${bbscttInfo.beforeSj}"/>
</c:when>
<c:otherwise>
<span class="stone-6">삭제된 게시글입니다.</span>
</c:otherwise>
</c:choose>
</button>
</div>
<div class="prev-next__item-info">
<span class="prev-next__item-info__author">
<c:out value="${bbscttInfo.beforeRegusrNm}"/>
</span>
<span class="prev-next__item-info__date">
<c:out value="${ bbscttInfo.beforeRegistDt}"/>
</span>
</div>
</div>
</c:if>
<c:if test="${not empty bbscttInfo.afterInnb}">
<div class="prev-next__item next">
<div class="prev-next__item-title">다음글</div>
<div class="prev-next__item-content">
<button type="button" class="moveDetil" bbs-id="<c:out value ='${bbsInfo.bbsId}'/>" bbsctt-innb="<c:out value ='${ bbscttInfo.afterInnb }'/>">
<c:choose>
<c:when test="${bbscttInfo.afterUseAt eq 'Y'}">
<c:out value="${bbscttInfo.afterSj}"/>
</c:when>
<c:otherwise>
<span class="stone-6">삭제된 게시글입니다.</span>
</c:otherwise>
</c:choose>
</button>
</div>
<div class="prev-next__item-info">
<span class="prev-next__item-info__author">
<c:out value="${bbscttInfo.afterRegusrNm}"/>
</span>
<span class="prev-next__item-info__date">
<c:out value="${ bbscttInfo.afterRegistDt}"/>
</span>
</div>
</div>
</c:if>
</div>
<!-- 이전글/다음글 END -->
</div>
<div class="modal-footer">
<a id="btnCloseModal" rel="modal:close" class="btn primary" style="cursor:pointer">확인</a>
</div>
</div>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,261 @@
<%@ 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 : ItrntBbsListR.jsp
Description : 인트라넷 게시글 목록 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-03-26 이운산 최초 생성(퍼블리싱 적용)
--%>
<!DOCTYPE html>
<html lang="ko">
<%--공지사항 게시판 내 관리자만 할 수 있는 것들--%>
<c:if test="${resultMap.bbsInfo.bbsId eq 'gs_seller_notice' && resultMap.bbsctt.tentGroup eq '02'}">
<c:set value="style='display:none;'" var="isStrAtNotice"/>
</c:if>
<c:if test="${resultMap.bbsctt.tentGroup eq '02'}">
<c:set value="style='display:none;'" var="isStr"/>
</c:if>
<section class="content-section">
<div class="form-control-container">
<div class="left">
<div class="search-number">
<span class="search-number__text">총 <strong>
<fmt:formatNumber value="${resultMap.paginationInfo.totalRecordCount}" pattern="#,###"/></strong>건</span>
</div>
</div>
<div class="center">
</div>
<div class="right">
<div class="select-box">
<select id="pageUnit" name="pageUnit" title="페이지당 출력될 목록건수" onchange="fn_select_bbsctt_list('1');">
<c:forEach items="${ resultMap.paginationInfo.pageUnitArr }" var="pageUnit" varStatus="pageUnitStatus">
<option value="<c:out value="${ pageUnit }"/>"
<c:if test="${ resultMap.paginationInfo.recordCountPerPage eq pageUnit }">selected="selected"</c:if>>
<c:out value="${ pageUnit }"/>개씩
</option>
</c:forEach>
</select>
</div>
</div>
</div>
<form id="listForm">
<hr class="horizontal-line">
<div class="form-control-container">
<div class="left">
<button type="button" class="btn outline sm" onclick="fn_delete_bbsctt('', 'many');" ${isStrAtNotice}>선택<spring:message code="button.delete"/></button>
</div>
<div class="center">
</div>
</div>
<hr class="spacing">
<div class="table-wrapper" id="listTb">
<table class="table vertical">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 4%;">
<col style="width: 3%;">
<col style="width: 11%;">
<col style="width: 7%;">
<c:if test = "${resultMap.bbsInfo.bbsId eq 'logistics_req'}">
<col style="width: 5%;">
</c:if>
<c:if test="${not empty resultMap.resultList.qesitmList}"><%--항목 만큼 --%>
<c:forEach var="qesitmList" items="${resultMap.resultList.qesitmList}">
<col style="width: auto;">
</c:forEach>
</c:if>
<col style="width: auto">
<col style="width: 10%;">
<c:if test = "${resultMap.bbsInfo.bbsId ne 'gs_seller_notice'}">
<col style="width: 5%">
</c:if>
<c:if test = "${resultMap.bbsInfo.bbsTyCd ne '02'}">
<col style="width: 6%;">
</c:if>
<col style="width: 4%">
<col style="width: 9%">
</colgroup>
<thead>
<tr>
<th>
<label class="b-checkbox checkbox is-medium check-all">
<input type="checkbox" value="" id="listChkA">
<span class="check"></span>
</label>
</th>
<th>번호</th>
<th>작성자</th>
<c:if test = "${resultMap.bbsInfo.bbsId ne 'gs_seller_notice'}">
<th>매장구분</th>
</c:if>
<c:if test="${resultMap.bbsInfo.bbsId eq 'logistics_req'}">
<th>문의유형</th>
</c:if>
<c:if test = "${not empty resultMap.resultList.qesitmList}"><%--항목 만큼 --%>
<c:forEach var = "qesitmList" items = "${resultMap.resultList.qesitmList}">
<th><c:out value="${qesitmList.qesitmNm}"/></th>
</c:forEach>
</c:if>
<th>제목</th>
<th>등록일</th>
<th>조회수</th>
<c:if test = "${resultMap.bbsInfo.bbsTyCd ne '02'}">
<th>답변상태</th>
</c:if>
<th>상태</th>
<th>관리</th>
</tr>
</thead>
<tbody id="contentSection">
<c:choose>
<c:when test="${ not empty resultMap.resultList.resultList }">
<c:set var="rnumAt" value="false"/>
<c:forEach items="${ resultMap.resultList.resultList}" var="resultList" varStatus="status">
<tr>
<input type = "hidden" name = "bbscttInnb" value = "<c:out value = "${resultList.bbscttInnb}"/>"/>
<td>
<c:choose>
<c:when test="${resultList.rnum eq 0}">
</c:when>
<c:otherwise>
<c:if test="${ resultList.useAt eq 'Y'}">
<label class="b-checkbox checkbox is-medium chkLabel">
<input type="checkbox" value="${resultList.bbscttInnb}"
name="selectedBbscttRow" class='bbscttChk'>
<span class="check"></span>
</label>
</c:if>
</c:otherwise>
</c:choose>
</td>
<td>
<c:choose>
<c:when test="${resultList.rnum eq '0'}">
공지
</c:when>
<c:otherwise>
<c:out value="${resultList.rnum}"/>
</c:otherwise>
</c:choose>
</td>
<td><c:out value="${resultList.regusrNm}"/><br><c:if test = "${resultList.regusrDvCd eq '04'}">(<c:out value="${resultList.regusrId}"/>)</td></c:if>
<c:if test = "${resultMap.bbsInfo.bbsId ne 'gs_seller_notice'}">
<td><c:out value="${ resultList.strDvNm}"/></td>
</c:if>
<c:if test="${resultMap.bbsInfo.bbsId eq 'logistics_req'}">
<td><c:out value="${resultList.writeDvNm}"/></td>
</c:if>
<c:if test="${not empty resultMap.resultList.qesitmList}"><%--항목 만큼 --%>
<c:forEach var="qesitmList" items="${resultMap.resultList.qesitmList}">
<td>
<c:if test = "${not empty resultMap.resultList.answList}">
<c:forEach var = "answList" items = "${resultMap.resultList.answList}" varStatus="status">
<c:if test = "${(resultList.bbscttInnb eq answList.bbscttInnb) && (qesitmList.qesitmInnb eq answList.qesitmInnb)}">
<c:out value="${answList.answCn}"/>
</c:if>
</c:forEach>
</c:if>
</td>
</c:forEach>
</c:if>
<td class="left">
<a class="under-line moveDetil"
bbsctt-innb="<c:out value="${ resultList.bbscttInnb }"/>"
bbs-id="<c:out value="${ resultList.bbsId }"/>">
<c:choose>
<c:when test="${resultList.useAt eq 'Y'}">
<c:out value="${ resultList.sj }"/>
</c:when>
<c:otherwise>
<span class="stone-6">삭제된 게시글입니다.[<c:out
value="${ resultList.updtDt}"/>]</span>
</c:otherwise>
</c:choose>
</a>
<c:if test="${resultList.isfiles eq 1}"><%--첨부파일여부--%>
<i class="icon icon_image-badge"></i>
</c:if>
<c:if test="${resultList.newAt eq 'Y'}"><%--새로운게시글여부--%>
<i class="icon icon_new-badge"></i>
</c:if>
<c:if test="${resultList.popularAt eq 'Y'}"><%--인기게시글여부--%>
<i class="icon icon_hot-badge"></i>
</c:if>
<c:if test="${resultList.cmtCnt > 0}"><%--댓글개수--%>
(<c:out value="${resultList.cmtCnt}"/>)
</c:if>
</td>
<td><c:out value="${ resultList.registDt }"/></td>
<td><fmt:formatNumber value="${resultList.inqireCnt}" pattern="#,##0"/></td>
<c:if test = "${resultMap.bbsInfo.bbsTyCd ne '02'}">
<td>
<c:choose>
<c:when test = "${resultList.answAt eq 'Y'}">
<button type="button" class="btn xsm outline primary" dv="complete" onclick = "fn_update_answ_sttus(this,'<c:out value="${resultList.bbscttInnb}"/>');" ${isStrDis}>답변완료</button>
</c:when>
<c:otherwise>
<button type="button" class="btn xsm outline primary" dv ="return" onclick = "fn_update_answ_sttus(this,'<c:out value="${resultList.bbscttInnb}"/>');" ${isStrDis}>답변대기</button>
</c:otherwise>
</c:choose>
</td>
</c:if>
<td>
<c:choose>
<c:when test = "${resultList.expsrAt eq 'Y'}">
<button type="button" class="btn xsm outline" onclick="fn_update_expsr_at('<c:out value="${resultList.bbscttInnb}"/>','N')" ${isStr}>노출</button>
</c:when>
<c:otherwise>
<button type="button" class="btn xsm outline" onclick="fn_update_expsr_at('<c:out value="${resultList.bbscttInnb}"/>','Y')" ${isStr}>미노출</button>
</c:otherwise>
</c:choose>
</td>
<td>
<div class="manage-btn-container" ${isStrAtNotice}>
<c:if test="${ resultList.useAt eq 'Y' and ((resultList.regusr eq resultMap.bbsctt.regusr) or (resultMap.bbsctt.tentGroup eq '01')) }">
<button type="button" class="btn xsm outline primary"
onclick="fn_select_bbsctt_update_pop('<c:out value="${ resultList.bbscttInnb }"/>','<c:out value="${ resultList.bbsId }"/>','');">
<spring:message code="button.update"/>
</button>
<button class="btn xsm dark" type="button"
onclick="fn_delete_bbsctt('<c:out value="${ resultList.bbscttInnb }"/>');">
<spring:message code="button.delete"/>
</button>
</c:if>
</div>
</td>
</tr>
<c:if test="${resultList.rnum > 0}">
<c:set var="rnumAt" value="true" scope="page"/>
</c:if>
</c:forEach>
<c:if test="${not rnumAt}"><%--조회된 데이터 없을 시 데이터 없음 노출--%>
<tr>
<td colspan="100%"><spring:message code="common.nodata"/></td>
</tr>
</c:if>
</c:when>
<c:otherwise>
<tr>
<td colspan="100%"><spring:message code="common.nodata"/></td>
</tr>
</c:otherwise>
</c:choose>
</tbody>
</table>
</div>
</form>
</section>
<input type="hidden" id="pageIndex" name="pageIndex" value="<c:out value = '${resultMap.bbsctt.pageIndex}'/>"/>
<div class="pagination__container">
<ui:pagination paginationInfo="${resultMap.paginationInfo}" type="image" jsFunction="fn_select_bbsctt_list"/>
</div>
</html>

View File

@@ -0,0 +1,356 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ page import="java.util.Date" %>
<%@ 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 : GnrlBbscttRegistPopupC.jsp
Description : 일반 게시글 등록 팝업
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-01-08 김혜지 최초 생성
2024-03-22 김혜인 수정
--%>
<div id="board-list-registration" class="modal" style="max-width: 1400px;">
<div class="modal-header">
<h4>게시글 등록</h4>
</div>
<c:set value="${resultMap.regusrInfo}" var="regusrInfo"/>
<c:set value="${resultMap.bbsInfo}" var="bbsInfo"/>
<c:set value="${resultMap.qesitmList.qesitmList}" var="qesitmList"/>
<c:set value="${resultMap.qesitmList.itmCnList}" var="itmCnList"/>
<c:set value="${resultMap.itmList}" var="itmList"/>
<br>
<div class="modal-content">
<div class="form-control-container mb-10">
<div class="left">
</div>
<div class="center">
</div>
<div class="right">
</div>
</div>
<form id="bbsRegForm">
<input type="hidden" name="sknTyCd" value="<c:out value="${bbsInfo.sknTyCd}"/>">
<input type="hidden" name="bbsId" value="<c:out value="${bbsInfo.bbsId}"/>"/>
<input type="hidden" name="ip" value="<c:out value="${ip}"/>">
<input type="hidden" name="filPermFilExtsn" value="<c:out value='${bbsInfo.filPermFilExtsn}'/>">
<input type="hidden" name="sopmalCd" value="<c:out value='${resultMap.bbsInfo.sopmalCd}'/>">
<div class=" table-wrapper mb-40">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 15%;">
<col style="width: 35%;">
<col style="width: 15%;">
<col style="width: 35%;">
</colgroup>
<tbody>
<tr>
<th>작성자</th>
<td colspan="3">
<div class="td-inner">
<c:out value="${resultMap.bbscttVO.regusrNm}"/>(IP:<c:out value="${ip}"/>)
</div>
</td>
</tr><!-- tr내 내용 없을 시 tr nonvisible(상품q&a노출,공지없음)1 -->
<tr class="visibleAt">
<c:if test="${bbsInfo.bbsTyCd eq '02'}">
<th>공지 기간 제한<br><span class="fs-13">(공지글 여부)</span></th>
<td>
<div class="td-inner vertical pdDiv">
<div class="input-container">
<div class="b-checkbox-container mr-15">
<label class="b-checkbox checkbox">
<input type="checkbox" name="ntcAt" value="Y"
onclick="fn_readOnly_set(this);">
<span class="check"></span>
<span class="control-label">공지글 등록</span>
</label>
</div>
<div class="custom-radio-container pdRadio">
<div class="custom-radio">
<input type="radio" id="ntcPdSetupAtYC" name="ntcPdSetupAt" value="Y"
onclick="fn_readOnly_Pd(this)" disabled>
<label for="ntcPdSetupAtYC">기본</label>
</div>
<div class="custom-radio">
<input type="radio" class="pdRadioN" id="ntcPdSetupAtNC"
name="ntcPdSetupAt"
value="N" onclick="fn_readOnly_Pd(this)" disabled>
<label for="ntcPdSetupAtNC">상시</label>
</div>
</div>
</div>
<div class="input-container pdDate">
<input type="text" name="ntcBgnDe" id="ntcBgnDe"
class="datepicker ntcDate chkDate"
title="시작 날짜 선택" autocomplete="off" disabled>
<span class="tilde">~</span>
<input type="text" name="ntcEndDe" id="ntcEndDe"
class="datepicker ntcDate chkDate"
title="종료 날짜 선택" autocomplete="off" disabled>
</div>
</div>
</td>
</c:if>
<c:if test="${bbsInfo.bbsTyCd eq '02'}">
<th>팝업 기간 제한<br><span class="fs-13">(팝업 여부)</span></th>
<td>
<div class="td-inner vertical pdDiv">
<div class="input-container">
<div class="b-checkbox-container mr-15">
<label class="b-checkbox checkbox">
<input type="checkbox" name="popupAt" value="Y"
onclick="fn_readOnly_set(this);">
<span class="check"></span>
<span class="control-label">팝업 등록</span>
</label>
</div>
<div class="custom-radio-container pdRadio">
<div class="custom-radio">
<input type="radio" id="popPdSetupAtYC" name="popupPdSetupAt" value="Y"
onclick="fn_readOnly_Pd(this)" disabled>
<label for="popPdSetupAtYC">기본</label>
</div>
<div class="custom-radio">
<input type="radio" id="popPdSetupAtNC" class="pdRadioN"
name="popupPdSetupAt"
value="N" onclick="fn_readOnly_Pd(this)" disabled>
<label for="popPdSetupAtNC">상시</label>
</div>
</div>
</div>
<div class="input-container pdDate">
<input type="text" name="popupExpsrBgnDt" id="popBgnDe"
class="datepicker popDate chkDate"
title="시작 날짜 선택" autocomplete="off" disabled>
<span class="tilde">~</span>
<input type="text" name="popupExpsrEndDt" id="popEndDe"
class="datepicker popDate chkDate"
title="종료 날짜 선택" autocomplete="off" disabled>
</div>
</div>
</td>
</c:if>
</tr>
<c:if test = "${bbsInfo.bbsId eq 'logistics_req'}"><%--물류관련오쳥만--%>
<tr>
<th>문의 유형 및 담당자</th>
<td>
<div class="td-inner">
<div class="select-box">
<select title="문의 유형 및 담당자" name="writeDvCd" onchange="fn_get_sv_admin_data('reg');" id="reg_ask_kind">
<option value="" selected="selected" >- 유형선택 -</option>
<c:forEach var = "writeDv" items = "${resultMap.writeDv}">
<option value="<c:out value="${writeDv.cd}"/>"><c:out value="${writeDv.cdNm}"/></option>
</c:forEach>
</select>
</div>
<div class="select-box" style="display: none;" id="reg_sv_admin_dv">
<select name="svInnb" id="reg_sv_admin">
<option value="" selected="selected">- 담당자선택 -</option>
</select>
</div>
</div>
</td>
</tr>
</c:if>
<c:if test="${not empty qesitmList}">
<tr>
<th>추가 입력 항목</th>
<td colspan="3">
<div class="td-inner" id="boardFormItmC">
<table class="table">
<colgroup>
<col style="width: 10%;">
<col style="width: auto;">
</colgroup>
<tbody>
<c:forEach items="${ qesitmList }" var="qesitmList" varStatus="status">
<tr>
<td>
<c:out value="${ qesitmList.qesitmNm }"/><c:if
test="${ qesitmList.qesitmEssntlAt eq 'Y'}"><span
class="red-7">*</span></c:if>
</td>
<td>
<c:if test="${ qesitmList.itmTyCd eq '01'}">
<div class="custom-radio-container">
<div class="custom-radio">
<input type="hidden" name="qesitmEssntlAtArr[]"
value="${ qesitmList.qesitmEssntlAt}">
<input type="hidden" name="qesitmNmArr[]"
value="${ qesitmList.qesitmNm}">
<input type="hidden" name="qesitmAtArr[]"
class="answRadioAt" value="N">
<input type="hidden" name="qesitmInnbArr[]"
class="answRadio"
value="${ qesitmList.qesitmInnb }"
disabled>
<input type="hidden" name="answCnArr[]"
class="answRadio"
disabled>
<input type="hidden" name="itmInnbArr[]"
class="answRadio"
disabled>
<c:forEach items="${itmCnList}" var="itmCnList1"
varStatus="status">
<c:if test="${itmCnList1.qesitmInnb eq qesitmList.qesitmInnb}">
<input type="radio" id="answCn${ status.index }"
class="answRadioC"
qesitm-innb='${itmCnList1.qesitmInnb}'
name="itmInnbArr${ qesitmList.qesitmInnb}[]"
value="${itmCnList1.itmInnb}"
itm-cn="${itmCnList1.itmCn}">
<label for="answCn${ status.index }">${ itmCnList1.itmCn }</label>
</c:if>
</c:forEach>
</div>
</div>
</c:if>
<c:if test="${ qesitmList.itmTyCd eq '02'}">
<div class="select-box">
<input type="hidden" name="qesitmEssntlAtArr[]"
value="${ qesitmList.qesitmEssntlAt }">
<input type="hidden" name="qesitmNmArr[]"
value="${ qesitmList.qesitmNm }">
<input type="hidden" name="qesitmAtArr[]"
class="answSelectAt"
value="N">
<input type="hidden" name="qesitmInnbArr[]"
class="answSelect"
value="${ qesitmList.qesitmInnb }" disabled>
<input type="hidden" name="answCnArr[]" class="answSelect"
disabled>
<select class="md answSelectC" name="itmInnbArr[]">
<option value="">전체</option>
<c:forEach items="${itmCnList}" var="itmCnList2">
<c:if test="${itmCnList2.qesitmInnb eq qesitmList.qesitmInnb}">
<option value="${ itmCnList2.itmInnb }"
itm-cn="${ itmCnList2.itmCn}"
qesitm-innb='${itmCnList2.qesitmInnb}'>${ itmCnList2.itmCn }</option>
</c:if>
</c:forEach>
</select>
</div>
</c:if>
<c:if test="${ qesitmList.itmTyCd eq '03' }">
<input type="hidden" name="qesitmEssntlAtArr[]"
value="${ qesitmList.qesitmEssntlAt }">
<input type="hidden" name="qesitmNmArr[]"
value="${ qesitmList.qesitmNm }">
<input type="hidden" name="qesitmAtArr[]" class="answChkAt"
value="N">
<c:forEach items="${itmCnList}" var="itmCnList3">
<c:if test="${itmCnList3.qesitmInnb eq qesitmList.qesitmInnb}">
<div class="input-container">
<label class="b-checkbox checkbox">
<input type="hidden" class="answChk"
name="qesitmInnbArr[]"
value="${ qesitmList.qesitmInnb }"
disabled>
<input type="hidden" class="answChk"
name="answCnArr[]"
value="${ itmCnList3.itmCn }" disabled>
<input type="checkbox" class="answChkC"
name="itmInnbArr[]"
value="${ itmCnList3.itmInnb }">
<span class="check"></span>
<span class="control-label">${ itmCnList3.itmCn }</span>
</label>
</div>
</c:if>
</c:forEach>
</c:if>
<c:if test="${ qesitmList.itmTyCd eq '04' }">
<c:forEach items="${itmCnList}" var="itmCnList4">
<c:if test="${itmCnList4.qesitmInnb eq qesitmList.qesitmInnb}">
<div class="input-container">
<input type="hidden" name="qesitmEssntlAtArr[]"
value="${ qesitmList.qesitmEssntlAt }">
<input type="hidden" name="qesitmNmArr[]"
value="${ qesitmList.qesitmNm }">
<input type="hidden" name="qesitmAtArr[]"
class="answTxtAt" value="N">
<input type="hidden" class="answTxt"
name="qesitmInnbArr[]"
value="${ qesitmList.qesitmInnb }" disabled>
<input type="text" class="input-text mm answTxtC"
name="answCnArr[]" title="추가문항답변"
placeholder="${ itmCnList4.itmCn }"
maxlength="666">
<input type="hidden" class="answTxt"
name="itmInnbArr[]"
value="${ itmCnList4.itmInnb }" disabled>
</div>
<br>
</c:if>
</c:forEach>
</c:if>
</td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
</td>
</tr>
</c:if>
<tr>
<th>제목<span class="red-7">*</span></th>
<td colspan="3">
<div class="td-inner">
<input class="input-text full" type="text" title="해당 인풋에 대한 설명"
placeholder="제목을 입력해주세요." name="sj" maxlength="50">
</div>
</td>
</tr>
<tr>
<th>내용<span class="red-7">*</span></th>
<td colspan="3">
<div class="td-inner">
<textarea class="textarea" title="에디터 입력" rows="10" id="cnBbsReg"></textarea>
</div>
</td>
</tr>
<tr>
<th>파일첨부</th>
<td colspan="3">
<div class="uploadList">
<div class="uploadList__top">
<div>
<button type="button" class="uploadList__removeAll" id = "removeAllBtn" style="display: none">전체 삭제</button>
<button type="button" class="uploadList__removeAll" id = "multiFilBtn">파일 첨부</button>
</div>
<span class="uploadList__allSize" id = "allSize">0.00 KB</span>
</div>
<div style="display: none">
<input type="file" id="fileUploadM" name="files" title="파일첨부"
multiple="multiple" accept="<c:out value='${bbsInfo.filPermFilExtsn}'/>"/>
<label for="fileUploadM"></label>
</div>
<div class="uploadList__body" id = "fileUploadMDiv" style="display: none">
<ul class="uploadList__list" id = "fileUploadMUl"><%--ul영역 (li)--%>
</ul>
</div>
</div>
<input type = "hidden" name = "filDvCd" value = "02"/>
</td>
</tr>
</tbody>
</table>
</form>
</div>
<div class="modal-footer">
<a href="#" id="btn_close_modal_bbsC" rel="modal:close" class="btn outline">취소</a>
<button class="btn primary" onclick="fn_regist_bbsctt();"><spring:message code="button.insert"/></button>
</div>
<a href="#close-modal" rel="modal:close" class="close-modal ">Close</a>
</div>
<script src="/admin/js/script.js" defer=""></script>

View File

@@ -0,0 +1,481 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ page import="java.util.Date" %>
<%@ 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 : GnrlBbscttRegistPopupC.jsp
Description : 일반 게시글 등록 팝업
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-01-08 김혜지 최초 생성
2024-03-22 김혜인 수정
--%>
<div id="board-list-update" class="modal" style="max-width: 1400px;">
<div class="modal-header">
<h4>게시글 수정</h4>
</div>
<%--게시판 설정--%>
<c:set value="${resultMap.bbsInfo}" var="bbsInfo"/>
<%--게시글 정보--%>
<c:set value="${resultMap.bbscttInfo.bbscttInfo}" var="bbscttInfo"/>
<%--게시글 VO--%>
<c:set value="${resultMap.bbscttVO}" var="bbscttVO"/>
<%--게시글 추가문항답변--%>
<c:set value="${resultMap.bbscttInfo.qesitmAnswList}" var="qesitmAnswList"/>
<%--게시글 첨부파일--%>
<c:set value="${resultMap.bbscttInfo.fileInfoGson}" var="fileInfoGson"/><%--드롭존 용--%>
<c:set value="${resultMap.bbscttInfo.fileInfo}" var="fileInfo"/><%--일반 파일 첨부 용--%>
<%--게시글 상품--%>
<c:set value="${resultMap.bbscttInfo.goods}" var="goods"/>
<%--게시글 분류--%>
<c:set value="${resultMap.itmList}" var="itmList"/>
<%--게시글 추가입력항목--%>
<c:set value="${resultMap.qesitmList.qesitmList}" var="qesitmList"/>
<%--게시글 추가입력항목 항목--%>
<c:set value="${resultMap.qesitmList.itmCnList}" var="itmCnList"/>
<br>
<div class="modal-content">
<div class="form-control-container mb-10">
<div class="left">
</div>
<div class="center">
</div>
<div class="right">
</div>
</div>
<form id="bbsUpdtForm">
<input type="hidden" name="sknTyCd" value="<c:out value="${bbsInfo.sknTyCd}"/>">
<input type="hidden" name="bbsId" value="${bbsInfo.bbsId }"/>
<input type="hidden" id="btInnb" name="bbscttInnb" value="${ bbscttInfo.bbscttInnb }"/>
<input type="hidden" id="extFiles" name="extFiles" value=""/>
<input type="hidden" id="filesInfo" name="filesInfo"/>
<input type = "hidden" name = "sopmalCd" value = "${bbscttVO.sopmalCd}"/>
<div class=" table-wrapper mb-40">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 15%;">
<col style="width: 35%;">
<col style="width: 15%;">
<col style="width: 35%;">
</colgroup>
<tbody>
<tr>
<th>작성자</th>
<td colspan="3">
<div class="td-inner">
${bbscttInfo.regusrNm}(IP:<c:out value="${bbscttInfo.ip}"/>)
</div>
</td>
</tr>
<tr>
<c:if test="${bbsInfo.bbsTyCd eq '02'}">
<th>공지 기간 제한<br><span class="fs-13">(공지글 여부)</span></th>
<td>
<div class="td-inner vertical pdDiv">
<div class="input-container">
<div class="b-checkbox-container mr-15">
<label class="b-checkbox checkbox">
<input type="checkbox" name="ntcAt" value="Y" onclick="fn_readOnly_set(this);"
<c:if test = "${bbscttInfo.ntcAt eq 'Y'}">checked = "checked"</c:if>>
<span class="check"></span>
<span class="control-label">공지글 등록</span>
</label>
</div>
<div class="custom-radio-container pdRadio">
<div class="custom-radio">
<input type="radio" id="ntcPdSetupAtYC" name="ntcPdSetupAt" value="Y" onclick="fn_readOnly_ntcPd(this)"
<c:choose>
<c:when test = "${bbscttInfo.ntcAt eq 'Y' && bbscttInfo.ntcPdSetupAt eq 'Y'}">
checked = "checked"
</c:when>
<c:when test = "${bbscttInfo.ntcAt eq 'N'}">
disabled = "disabled"
</c:when>
</c:choose>>
<label for="ntcPdSetupAtYC">기본</label>
</div>
<div class="custom-radio">
<input type="radio" class="pdRadioN" id="ntcPdSetupAtNC" name="ntcPdSetupAt" value="N" onclick="fn_readOnly_ntcPd(this)"
<c:choose>
<c:when test = "${bbscttInfo.ntcAt eq 'Y' && bbscttInfo.ntcPdSetupAt eq 'N'}">
checked = "checked"
</c:when>
<c:when test = "${bbscttInfo.ntcAt eq 'N'}">
disabled = "disabled"
</c:when>
</c:choose>>
<label for="ntcPdSetupAtNC">상시</label>
</div>
</div>
</div>
<div class="input-container pdDate">
<input type="text" name="ntcBgnDe" id = "ntcBgnDe" class="datepicker ntcDate chkDate" title="시작 날짜 선택" autocomplete="off"
<c:choose>
<c:when test = "${bbscttInfo.ntcAt eq 'Y' && bbscttInfo.ntcPdSetupAt eq 'Y'}">
value="${bbscttInfo.ntcBgnDe}"
</c:when>
<c:when test = "${bbscttInfo.ntcAt eq 'N'||bbscttInfo.ntcAt eq 'Y'&& bbscttInfo.ntcPdSetupAt eq 'N'}">
disabled = "disabled"
</c:when>
</c:choose>>
<span class="tilde">~</span>
<input type="text" name="ntcEndDe" id = "ntcEndDe" class="datepicker ntcDate chkDate" title="종료 날짜 선택" autocomplete="off"
<c:choose>
<c:when test = "${bbscttInfo.ntcAt eq 'Y' && bbscttInfo.ntcPdSetupAt eq 'Y'}">
value="${bbscttInfo.ntcEndDe}"
</c:when>
<c:when test = "${bbscttInfo.ntcAt eq 'N'||bbscttInfo.ntcAt eq 'Y' && bbscttInfo.ntcPdSetupAt eq 'N'}">
disabled = "disabled"
</c:when>
</c:choose>>
</div>
</div>
</td>
</c:if>
<c:if test="${bbsInfo.bbsTyCd eq '02'}">
<th>팝업 기간 제한<br><span class="fs-13">(팝업 여부)</span></th>
<td>
<div class="td-inner vertical pdDiv">
<div class="input-container">
<div class="b-checkbox-container mr-15">
<label class="b-checkbox checkbox">
<input type="checkbox" name="popupAt" value="Y"
onclick="fn_readOnly_set(this);"
<c:if test = "${bbscttInfo.popupAt eq 'Y'}">checked = "checked"</c:if>>
<span class="check"></span>
<span class="control-label">팝업 등록</span>
</label>
</div>
<div class="custom-radio-container pdRadio">
<div class="custom-radio">
<input type="radio" id="popPdSetupAtYC" name="popupPdSetupAt" value="Y"
onclick="fn_readOnly_Pd(this)"
<c:choose>
<c:when test = "${bbscttInfo.popupAt eq 'Y' && bbscttInfo.popupPdSetupAt eq 'Y'}">
checked = "checked"
</c:when>
<c:when test = "${bbscttInfo.popupAt eq 'N'}">
disabled = "disabled"
</c:when>
</c:choose>>
<label for="popPdSetupAtYC">기본</label>
</div>
<div class="custom-radio">
<input type="radio" id="popPdSetupAtNC" class="pdRadioN"
name="popupPdSetupAt"
value="N" onclick="fn_readOnly_Pd(this)"
<c:choose>
<c:when test="${bbscttInfo.popupAt eq 'Y' && bbscttInfo.popupPdSetupAt eq 'N'}">
checked="checked"
</c:when>
<c:when test="${bbscttInfo.popupAt eq 'N'}">
disabled="disabled"
</c:when>
</c:choose>>
<label for="popPdSetupAtNC">상시</label>
</div>
</div>
</div>
<div class="input-container pdDate">
<input type="text" name="popupExpsrBgnDt" id="popBgnDe"
class="datepicker popDate chkDate"
title="시작 날짜 선택" autocomplete="off"
<c:choose>
<c:when test="${bbscttInfo.popupAt eq 'Y' && bbscttInfo.popupPdSetupAt eq 'Y'}">
value="${bbscttInfo.popupExpsrBgnDt}"
</c:when>
<c:when test="${bbscttInfo.popupAt eq 'N'||bbscttInfo.popupAt eq 'Y'&& bbscttInfo.popupPdSetupAt eq 'N'}">
disabled="disabled"
</c:when>
</c:choose>>
<span class="tilde">~</span>
<input type="text" name="popupExpsrEndDt" id="popEndDe"
class="datepicker popDate chkDate"
title="종료 날짜 선택" autocomplete="off"
<c:choose>
<c:when test="${bbscttInfo.popupAt eq 'Y' && bbscttInfo.popupPdSetupAt eq 'Y'}">
value="${bbscttInfo.popupExpsrEndDt}"
</c:when>
<c:when test="${bbscttInfo.popupAt eq 'N'||bbscttInfo.popupAt eq 'Y' && bbscttInfo.popupPdSetupAt eq 'N'}">
disabled="disabled"
</c:when>
</c:choose>>
</div>
</div>
</td>
</c:if>
</tr>
<c:if test = "${bbsInfo.bbsId eq 'logistics_req'}"><%--물류관련오쳥만--%>
<tr>
<th>문의 유형 및 담당자</th>
<td>
<div class="td-inner">
<div class="select-box">
<select title="문의 유형 및 담당자" name="writeDvCd" onchange="fn_get_sv_admin_data('updt');" id="updt_ask_kind">
<option value="" selected="selected" >- 유형선택 -</option>
<c:forEach var = "writeDv" items = "${resultMap.writeDv}">
<option value="<c:out value="${writeDv.cd}"/>" ${f:setSelected(writeDv.cd,bbscttInfo.writeDvCd)}><c:out value="${writeDv.cdNm}"/></option>
</c:forEach>
</select>
</div>
<div class="select-box " style="display: none;" id="updt_sv_admin_dv">
<select name="svInnb" id="updt_sv_admin">
<option value="" selected="selected">- 담당자선택 -</option>
</select>
</div>
</div>
</td>
</tr>
</c:if>
<c:if test="${not empty qesitmList}">
<tr>
<th>추가 입력 항목</th>
<td colspan="3">
<div class="td-inner" id="boardFormItmC">
<table class="table">
<colgroup>
<col style="width: 10%;">
<col style="width: auto;">
</colgroup>
<tbody>
<c:forEach items="${ qesitmList }" var="qesitmList" varStatus="status">
<tr>
<td>
<c:out value="${ qesitmList.qesitmNm }"/><c:if
test="${ qesitmList.qesitmEssntlAt eq 'Y'}"><span class="red-7">*</span></c:if>
</td>
<td>
<c:if test="${ qesitmList.itmTyCd eq '01'}">
<div class="custom-radio-container">
<div class="custom-radio">
<input type="hidden" name="qesitmEssntlAtArr[]"
value="${ qesitmList.qesitmEssntlAt}">
<input type="hidden" name="qesitmNmArr[]"
value="${ qesitmList.qesitmNm}">
<input type="hidden" name="qesitmAtArr[]"
class="answRadioAt" value="N">
<input type="hidden" name="qesitmInnbArr[]"
class="answRadio"
value="${ qesitmList.qesitmInnb }" disabled>
<input type="hidden" name="answCnArr[]"
class="answRadio" disabled>
<input type="hidden" name="itmInnbArr[]"
class="answRadio" disabled>
<c:forEach items="${itmCnList}" var="itmCnList1"
varStatus="status">
<c:if test="${itmCnList1.qesitmInnb eq qesitmList.qesitmInnb}">
<input type="radio" id="answCn${ status.index }"
class="answRadioC"
qesitm-innb='${itmCnList1.qesitmInnb}'
name="itmInnbArr${ qesitmList.qesitmInnb}[]"
value="${ itmCnList1.itmInnb}"
itm-cn="${ itmCnList1.itmCn }"
<c:forEach var="qesitmAnswList1"
items="${qesitmAnswList}">
<c:if test="${qesitmAnswList1.itmTyCd eq '01'}">
<c:if test="${qesitmAnswList1.itmInnb eq itmCnList1.itmInnb}">checked</c:if>
</c:if>
</c:forEach>>
<label for="answCn${ status.index }">${ itmCnList1.itmCn }</label>
</c:if>
</c:forEach>
</div>
</div>
</c:if>
<c:if test="${ qesitmList.itmTyCd eq '02'}">
<div class="select-box">
<input type="hidden" name="qesitmEssntlAtArr[]"
value="${qesitmList.qesitmEssntlAt}">
<input type="hidden" name="qesitmNmArr[]"
value="${qesitmList.qesitmNm}">
<input type="hidden" name="qesitmAtArr[]" class="answSelectAt"
value="N">
<input type="hidden" name="qesitmInnbArr[]"
class="answSelect"
value="${qesitmList.qesitmInnb}" disabled>
<input type="hidden" name="answCnArr[]" class="answSelect"
disabled>
<select class="md answSelectC" name="itmInnbArr[]">
<option value="">전체</option>
<c:forEach items="${itmCnList}" var="itmCnList2">
<c:if test="${itmCnList2.qesitmInnb eq qesitmList.qesitmInnb}">
<c:set var="selected" value=""/>
<c:forEach var="qesitmAnswList2"
items="${qesitmAnswList}">
<c:if test="${qesitmAnswList2.itmInnb eq itmCnList2.itmInnb}">
<c:set var="selected" value="selected"/>
</c:if>
</c:forEach>
<option value="${itmCnList2.itmInnb}"
itm-cn="${itmCnList2.itmCn}"
qesitm-innb="${itmCnList2.qesitmInnb}" ${selected}>
${itmCnList2.itmCn}
</option>
</c:if>
</c:forEach>
</select>
</div>
</c:if>
<c:if test="${ qesitmList.itmTyCd eq '03' }">
<input type="hidden" name="qesitmEssntlAtArr[]"
value="${ qesitmList.qesitmEssntlAt }">
<input type="hidden" name="qesitmNmArr[]"
value="${ qesitmList.qesitmNm }">
<input type="hidden" name="qesitmAtArr[]"
class="answChkAt" value="N">
<c:forEach items="${itmCnList}" var="itmCnList3">
<c:if test="${itmCnList3.qesitmInnb eq qesitmList.qesitmInnb}">
<div class="input-container">
<label class="b-checkbox checkbox">
<input type="hidden" class="answChk"
name="qesitmInnbArr[]"
value="${ qesitmList.qesitmInnb }"
disabled>
<input type="hidden" class="answChk"
name="answCnArr[]"
value="${ itmCnList3.itmCn }" disabled>
<input type="checkbox" class="answChkC"
name="itmInnbArr[]"
value="${ itmCnList3.itmInnb }"
itm-cn="${ itmCnList3.itmCn }"
qesitm-innb="${itmCnList3.qesitmInnb}"
<c:forEach var="qesitmAnswList3"
items="${qesitmAnswList}">
<c:if test="${qesitmAnswList3.itmInnb eq itmCnList3.itmInnb}">checked</c:if>
</c:forEach>>
<span class="check"></span>
<span class="control-label">${ itmCnList3.itmCn }</span>
</label>
</div>
</c:if>
</c:forEach>
</c:if>
<c:if test="${ qesitmList.itmTyCd eq '04' }">
<c:forEach items="${itmCnList}" var="itmCnList4">
<c:if test="${itmCnList4.qesitmInnb eq qesitmList.qesitmInnb}">
<div class="input-container">
<input type="hidden" name="qesitmEssntlAtArr[]"
value="${ qesitmList.qesitmEssntlAt }">
<input type="hidden" name="qesitmNmArr[]"
value="${ qesitmList.qesitmNm }">
<input type="hidden" name="qesitmAtArr[]"
class="answTxtAt"
value="N">
<input type="hidden" class="answTxt"
name="qesitmInnbArr[]"
value="${ qesitmList.qesitmInnb }" disabled>
<input type="text" class="input-text mm answTxtC"
name="answCnArr[]"
title="추가문항답변"
placeholder="${ itmCnList4.itmCn }"
maxlength="666"
itm-cn="${ itmCnList4.itmCn }"
qesitm-innb="${itmCnList4.qesitmInnb}"
itm-innb="${itmCnList4.itmInnb}"
<c:forEach var="qesitmAnswList4"
items="${qesitmAnswList}">
<c:if test="${qesitmAnswList4.itmInnb eq itmCnList4.itmInnb}">
value="<c:out value = '${qesitmAnswList4.answCn}'/>"
</c:if>
</c:forEach>>
<input type="hidden" class="answTxt"
name="itmInnbArr[]"
value="${ itmCnList4.itmInnb }" disabled>
</div>
<br>
</c:if>
</c:forEach>
</c:if>
</td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
</td>
</tr>
</c:if>
<tr>
<th>제목<span class="red-7">*</span></th>
<td colspan="3">
<div class="td-inner">
<input class="input-text full" type="text" title="해당 인풋에 대한 설명" placeholder="제목을 입력해주세요." name="sj" maxlength="50" value = "${bbscttInfo.sj}">
</div>
</td>
</tr>
<tr>
<th>내용<span class="red-7">*</span></th>
<td colspan="3">
<div class="td-inner">
<textarea class="textarea" title="에디터 입력" rows="10" id="cnBbsUpdt"><c:out value = "${bbscttInfo.cn}" escapeXml="false"/></textarea>
</div>
</td>
</tr>
<tr>
<th>파일 첨부</th>
<td colspan="03">
<div class="uploadList">
<div class="uploadList__top">
<div>
<button type="button" class="uploadList__removeAll" id="removeAllBtn"
<c:if test="${empty fileInfo}">style="display: none"</c:if>>
전체 삭제
</button>
<button type="button" class="uploadList__uploadFiles" id="multiFilBtn">
파일 첨부
</button>
</div>
<span class="uploadList__allSize" id="allSize">0.00 KB</span>
</div>
<div style="display: none">
<input type="file" id="fileUploadM" name="files" title="파일첨부"
multiple="multiple"
accept="<c:out value='${bbsInfo.filPermFilExtsn}'/>"/>
<label for="fileUploadM"></label>
</div>
<div class="uploadList__body" id="fileUploadMDiv" <c:if test="${empty fileInfo}">style="display: none"</c:if>>
<ul class="uploadList__list" id="fileUploadMUl"><%--ul영역 (li)--%>
<c:if test="${not empty fileInfo}">
<c:forEach var="file" items="${fileInfo}">
<li class="uploadList__item" id="<c:out value="${file.bbscttAtchmnfilInnb}"/>">
<button type = "button" class="uploadList__itemText" onclick="deleteFile(this,'<c:out value="${bbscttVO.sopmalCd}"/>','ITRB',1,fn_execute_delete_file);">
<span class="uploadList__itemName">
<c:out value="${file.orginlFilNm}"/></span>
<span class="uploadList__itemSize">
(<c:out value="${file.filMg}"/>KB)</span>
</button>
<input type="hidden" class="filsSize"
value="${file.filMg}"/>
<button type = "button" class="uploadList__removeBtn"
onclick="deleteFile(this,'<c:out value="${bbscttVO.sopmalCd}"/>','ITRB',1,fn_execute_delete_file);">
<span class="visually-hidden">삭제</span></button>
</li>
</c:forEach>
</c:if>
</ul>
</div>
<input type = "hidden" name = "filDvCd" value="02"/> <%--파일 구분--%>
<input type = "hidden" name = "dropzoneAt" value="N"/> <%--드롭존 존재 여부--%>
<input type = "hidden" name = "filPermFilExtsn" value="<c:out value="${bbsInfo.filPermFilExtsn}"/>"/> <%--드롭존 존재 여부--%>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</form>
</div>
<div class="modal-footer">
<a href="#" id="btn_close_modal_bbsU" rel="modal:close" class="btn outline"><spring:message code="button.cancel"/></a>
<button class="btn primary" onclick="fn_update_bbsctt('<c:out value="${ bbsInfo.bbsId }"/>','<c:out value="${ bbscttInfo.bbscttInnb }"/>','<c:out value="${dtlPop}"/>');"><spring:message code="button.update"/></button>
</div>
<a href="#close-modal" rel="modal:close" class="close-modal ">Close</a>
</div>
<script src="/admin/js/script.js" defer=""></script>

View File

@@ -0,0 +1,306 @@
<%@ 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 : ItrntBbsListR.jsp
Description : 인트라넷 게시글 목록 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-03-26 이운산 최초 생성(퍼블리싱 적용)
--%>
<!DOCTYPE html>
<html lang="ko">
<style>
.replyCm::before {
content: "";
display: inline-block;
width: 8px;
height: 8px;
border-left: 2px solid #979b9d;
border-bottom: 2px solid #979b9d;
top: 6px;
left: 0;
}
</style>
<%--댓글 수--%>
<c:set value="${resultMap.cmList.cmCnt}" var="cmCnt"/>
<%--댓글 목록--%>
<c:set value="${resultMap.cmList.cmList}" var="cmList"/>
<%--작성자 정보 추출--%>
<c:set value="${resultMap.cmList.wrterList}" var="wrterList"/>
<%--작성자 정보 추출--%>
<c:set value="${resultMap.regusrInfo}" var="regusrInfo"/>
<%--게시글 정보 --%>
<c:set value="${resultMap.cmVO}" var="cmVO"/>
<%--게시판 설정 --%>
<c:set value="${resultMap.bbsInfo}" var="bbsInfo"/>
<%-- 게시글 댓글 목록 START --%>
<p id="comment_container"></p>
<input type="hidden" id="cmCntInfo" value="<c:out value = "${ resultMap.paginationInfo.totalRecordCount }"/>">
<input type="hidden" id="mbrInnb" value="<c:out value = "${ resultMap.user.userInnb}"/>">
<div class="form-control-container mb-10 dtlCmDiv">
<div class="left">
<span class="fs-16 fw-500" id="cmCnt">댓글(<fmt:formatNumber value="${cmCnt}" pattern="#,###"/>)</span>
</div>
<div class="center">
</div>
<div class="right">
<button type="button" class="btn xsm dark"
onclick="fn_delete_cm('', '<c:out value="${cmVO.bbscttInnb}"/>', 'many','<c:out
value="${cmVO.bbsId}"/>')">선택 <spring:message code="button.delete"/></button>
</div>
</div>
<div class="table-wrapper mb-40 dtlCmDiv">
<table class="table vertical tight">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 60px;">
<col style="width: 15%;">
<col style="width: auto;">
<col style="width: 10%;">
<col style="width: 14%;">
</colgroup>
<thead>
<tr>
<th>
<label class="b-checkbox checkbox is-medium check-all">
<input type="checkbox" value="" id="cmListChkA">
<span class="check"></span>
</label>
</th>
<th>작성자</th>
<th>내용</th>
<th>등록일</th>
<th>관리</th>
</tr>
</thead>
<%-- 댓글 목록 ajax START--%>
<tbody id="cmListDiv">
<c:choose>
<c:when test="${not empty cmList}">
<c:forEach items="${cmList}" var="cmList" varStatus="status">
<c:choose>
<c:when test = "${cmVO.strInnb eq cmList.regusr}">
<c:set var = "modifyAt" value = "Y"/>
</c:when>
<c:otherwise>
<c:set var = "modifyAt" value = "N"/>
</c:otherwise>
</c:choose>
<tr class="cmTr">
<td>
<c:if test="${cmList.useAt eq 'Y'}">
<label class="b-checkbox checkbox is-medium">
<input type="checkbox" value="${ cmList.cmInnb }" name="selectedCmRow"
class="cmListChk">
<span class="check"></span>
</label>
</c:if>
</td>
<td>
<span class="comment-id">
<i class="icon icon_comment-user"></i>
<span class="comment-id__name">
<c:out value="${cmList.regusrNm}"/>
</span>
<c:if test="${ cmList.newAt eq 'Y' }"><i
class="icon icon_new-badge"></i></c:if>
<c:if test="${ cmList.secretBbscttAt eq 'Y' }"><i class="icon icon_lock"></i></c:if>
<span class="comment-id__ip"><c:if
test="${ not empty cmList.ip }">(IP:<c:out value="${ cmList.ip}"/>)</c:if></span>
</span>
</td>
<td class="text-left cmListCn">
<c:choose><%--비밀댓글 분기처리--%>
<c:when test="${cmList.secretBbscttAt eq 'Y'}">
<c:choose>
<c:when test="${cmList.regusr eq cmVO.strInnb || resultMap.cmVO.tentGroup eq '01'}"> <%--작성자 본인이거나 본사일경우--%>
<c:set value="true" var="cmCnSecretAt"/>
</c:when>
<c:otherwise>
<c:set value="false" var="cmCnSecretAt"/>
</c:otherwise>
</c:choose>
</c:when>
<c:otherwise>
<c:set value="true" var="cmCnSecretAt"/>
</c:otherwise>
</c:choose>
<div class="comment-write-container reply <c:if test = "${cmList.secretBbscttAt eq 'Y'}">gray-7</c:if>" style="white-space: pre-wrap"><c:choose><c:when test = "${cmCnSecretAt}"><c:out value="${cmList.cn}"/></c:when><c:otherwise>비밀댓글입니다</c:otherwise></c:choose></div>
</td>
<td><c:out value="${ cmList.registDt }"/><br></td>
<c:set var="displaynone" value='style="display:none"'/>
<c:if test="${ cmList.useAt eq 'Y' }">
<c:set var="displaynone" value=""/>
</c:if>
<td>
<div class="manage-btn-container dtlCmBtnDiv">
<c:if test="${cmList.useAt eq 'Y'}">
<c:choose>
<c:when test = "${modifyAt eq 'Y'}">
<button type="button" class="btn xsm dark"
onclick="fn_delete_cm('<c:out value="${ cmList.cmInnb }"/>', '<c:out
value="${ cmList.bbscttInnb }"/>', this,'<c:out
value="${ cmList.bbsId}"/>');">
<spring:message code="button.delete"/>
</button>
<button type="button" class="btn xsm outline primary" secret-at = "<c:out value="${ cmList.secretBbscttAt }"/>" cm-innb = "<c:out value="${ cmList.cmInnb }"/>" onclick="fn_select_update_cm(this, 'u');">
<spring:message code = "button.update"/>
</button>
</c:when>
<c:otherwise>
<button type="button" style="width: 115px" disabled> </button>
</c:otherwise>
</c:choose>
<button type="button" class="btn xsm primary closeBtn" cm-innb = "<c:out value="${ cmList.cmInnb }"/>" onclick="fn_select_regist_cm_answ(this, 'open');">댓글</button>
</c:if>
</div>
</td>
</tr>
<c:if test="${not empty resultMap.cmList.cmAnswList}">
<c:forEach var="item" items="${resultMap.cmList.cmAnswList}" varStatus="status1">
<c:if test="${cmList.cmInnb eq item.parntsCmInnb}">
<c:choose>
<c:when test="${cmVO.strInnb eq item.regusr}">
<c:set var="modifyAt2" value="Y"/>
</c:when>
<c:otherwise>
<c:set var="modifyAt2" value="N"/>
</c:otherwise>
</c:choose>
<tr class = "cmAnswTr">
<td>
<c:if test="${item.useAt eq 'Y'}">
<label class="b-checkbox checkbox is-medium">
<input type="checkbox" value="${ item.cmInnb }" name="selectedCmRow"
class="itemChk">
<span class="check"></span>
</label>
</c:if>
</td>
<td>
<span class="comment-id">
<span class="comment-id__name replyCm"><c:out value="${item.regusrNm}"/></span>
<c:if test="${ item.newAt eq 'Y' }"><i class="icon icon_new-badge"></i></c:if>
<c:if test="${ item.secretBbscttAt eq 'Y' }"><i class="icon icon_lock"></i></c:if>
<span class="comment-id__ip"><c:if
test="${ not empty item.ip }">(IP:<c:out value="${item.ip}"/>)</c:if></span>
</span>
</td>
<td class="text-left cmListCn">
<c:choose><%--비밀댓글 분기처리--%>
<c:when test="${item.secretBbscttAt eq 'Y'}">
<c:choose>
<c:when test="${item.regusr eq resultMap.cmVO.regusr || resultMap.cmVO.tentGroup eq '01'}"> <%--작성자 본인이거나 본사일경우--%>
<c:set value="true" var="cmCnSecretAt"/>
</c:when>
<c:otherwise>
<c:set value="false" var="cmCnSecretAt"/>
</c:otherwise>
</c:choose>
</c:when>
<c:otherwise>
<c:set value="true" var="cmCnSecretAt"/>
</c:otherwise>
</c:choose>
<div class="comment-write-container reply <c:if test = "${item.secretBbscttAt eq 'Y'}">gray-7</c:if>" style="white-space: pre-wrap"><c:choose><c:when test = "${cmCnSecretAt}"><c:out value="${item.cn}"/></c:when><c:otherwise>비밀댓글입니다</c:otherwise></c:choose></div>
</td>
<td><c:out value="${ item.registDt }"/><br></td>
<td>
<div class="manage-btn-container dtlCmBtnDiv">
<c:if test = "${item.useAt eq 'Y' and modifyAt2 eq 'Y'}">
<button type="button" class="btn xsm dark" onclick="fn_delete_cm('<c:out value="${ item.cmInnb }"/>', '<c:out value="${ item.bbscttInnb }"/>', this,'<c:out value="${ item.bbsId}"/>');">
<spring:message code="button.delete"/>
</button>
<button type="button" class="btn xsm outline primary cmAnswUpdt"
secret-at="<c:out value="${ item.secretBbscttAt }"/>"
cm-innb="<c:out value="${ item.cmInnb }"/>"
onclick="fn_select_update_cm_answ(this, 'u');">
<spring:message code="button.update"/></button>
<button type="button" class="btn xsm primary" style="visibility:hidden">버튼</button>
</c:if>
</div>
</td>
</tr>
</c:if>
</c:forEach>
</c:if>
<%--댓글 답변 등록 START--%>
<tr class="cmFormTr" style="display:none;">
<td colspan="5">
<table class="box" style="width:100%">
<colgroup>
<col>
<col width="1">
</colgroup>
<tbody>
<tr>
<td colspan="5" class="">
<div class="comment-write-container reply">
<span class="comment-id">
<i class="icon icon_comment-user"></i>
<span class="comment-id__name"><c:out
value="${regusrInfo.regusrNm}"/></span>
<span class="comment-id__id">( <c:out
value="${regusrInfo.regusrId}"/> )</span>
<span class="comment-id__ip">(IP: <c:out value="${ip}"/>)</span>
</span>
<div class="comment-write">
<input type="hidden" name="bbscttInnb"
value="<c:out value ='${cmList.bbscttInnb}'/>"/>
<input type="hidden" name="bbsId"
value="<c:out value ='${resultMap.bbsInfo.bbsId}'/>"/>
<input type="hidden" name="cmInnb"
value="<c:out value ='${cmList.cmInnb}'/>"/>
<div class="comment-write__textarea-container">
<textarea class="comment-write__textarea" rows="5"
placeholder="댓글을 입력하세요." title="댓글 입력"
name="cn"></textarea>
</div>
<button class="comment-write__button"
onclick="fn_regist_cm('re', this);"><spring:message code = "button.insert"/></button>
</div>
<div class="b-checkbox-container">
<label class="b-checkbox checkbox">
<input type="checkbox" name="secretBbscttAt" value="N"
onclick="fn_check_secret_cm(this);">
<span class="check"></span>
<span class="control-label">비밀 댓글</span>
</label>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
<%--댓글 답변 등록 END--%>
<%--댓글 목록 ajax END--%>
</c:forEach>
</c:when>
<c:otherwise>
<tr>
<td colspan="100%"><spring:message code="common.nodata"/></td>
</tr>
</c:otherwise>
</c:choose>
</tbody>
</table>
</div>
<input type="hidden" id="cmPageIndex" name="pageIndex" value="${cmVO.pageIndex}"/>
<div class="pagination__container mb-40">
<ui:pagination paginationInfo="${ resultMap.paginationInfo }" type="image" jsFunction="fn_make_cm" />
</div>
<%-- 게시글 댓글 START --%>
<script src="/mngr/js/script.js" defer=""></script>
<div id = "cm"></div>
</html>

View File

@@ -0,0 +1,133 @@
<%@ 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 : ItrntBbsListR.jsp
Description : 인트라넷 게시글 목록 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-03-26 이운산 최초 생성(퍼블리싱 적용)
--%>
<!DOCTYPE html>
<html lang="ko">
<div class="modal-header">
<h4>물류게시판 관리자등록</h4>
</div>
<div class="modal-content">
<div class="form-control-container mb-10">
<div class="left">
</div>
<div class="center">
</div>
<div class="right">
</div>
</div>
<div class="table-wrapper mb-40">
<form id="svRegistForm">
<table class="table vertical">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 10%;">
<col style="width: 15%;">
<col style="width: 10%;">
<col style="width: auto;">
<col style="width: 10%;">
<col style="width: auto;">
</colgroup>
<tbody>
<tr>
<th>담당 카테고리</th>
<td>
<div class="td-inner">
<div class="select-box">
<select title="문의 유형 및 담당자" name="svWriteDvCd" id="svWriteDvCd">
<c:forEach var = "writeDv" items = "${resultMap.writeDv}">
<option value="<c:out value="${writeDv.cd}"/>"><c:out value="${writeDv.cdNm}"/></option>
</c:forEach>
</select>
</div>
</div>
</td>
<th>이름</th>
<td>
<div class="td-inner">
<input class="input-text full" type="text" title="해당 인풋에 대한 설명"
placeholder="이름을 입력해주세요." name="mngrNm">
</div>
</td>
<th>휴대폰번호</th>
<td>
<div class="td-inner">
<input class="input-text full" type="text" title="해당 인풋에 대한 설명" id="mngrMbtlnb"
placeholder="'-'를 제외한 휴대폰번호" name="mngrMbtlnb" oninput="fn_set_event('#mngrMbtlnb','input',fn_fmt_telno)">
</div>
</td>
</tr>
<tr>
<td colspan="6" style="text-align: center; vertical-align: middle;">
<div class="td-inner center" style="display: inline-block;">
<button class="btn primary" type="button" onclick="fn_regist_sv();">
<spring:message code="button.insert"/>
</button>
</div>
</td>
</tr>
</tbody>
</table>
</form>
</div>
<hr class="spacing"/>
<div class="table-wrapper">
<table class="table vertical">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 15%;">
<col style="width: 15%;">
<col style="width: auto;">
<col style="width: auto;">
<col style="width: 10%;">
</colgroup>
<tbody>
<tr>
<th>담당 카테고리</th>
<th>이름</th>
<th>휴대폰번호</th>
<th>등록일</th>
<th>관리</th>
</tr>
<c:choose>
<c:when test="${not empty resultMap.svList}">
<c:forEach var="svList" items="${resultMap.svList}">
<tr>
<td><c:out value="${svList.svWriteDvCdNm}"/></td>
<td><c:out value="${svList.mngrNm}"/></td>
<td class="mngrMbtlnb"><c:out value="${svList.mngrMbtlnb}"/></td>
<td><c:out value="${svList.registDt}"/></td>
<td>
<button type="button" class="btn xsm dark" onclick="fn_delete_sv(this)"
value="<c:out value="${svList.svInnb}"/>">삭제
</button>
</td>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
<tr>
<td colspan="100%"><spring:message code="common.nodata"/></td>
</tr>
</c:otherwise>
</c:choose>
</tbody>
</table>
</div>
</div>
<div class="modal-footer">
<a href="#" rel="modal:close" class="btn outline" id="svCloseBtn"><spring:message code="button.close"/></a>
</div>
</html>

View File

@@ -0,0 +1,86 @@
<%@ 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"%>
<%--
Class Name : ItrntCnsltDtlUpdtPopupU.jsp
Description : 매장 상담 상세 팝업
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-12-09 김혜인 최초 생성
--%>
<!-- 상담 내역 수정 팝업 -->
<div id="cntmrCnsltDtlPopup" class="modal">
<div class="modal-header">
<h4>상담 내역 수정</h4>
</div>
<form id="cnsltPopupForm" name="cnsltPopupForm" method="post">
<div class="modal-content">
<div class="table-wrapper mb-40">
<table class="table">
<caption>상담 내역</caption>
<colgroup>
<col style="width: 25%;">
<col>
</colgroup>
<tbody>
<tr>
<th>상담번호</th>
<td>
<div class="td-inner">
<input type="text" id="strCnsltDtlsInnb" name="strCnsltDtlsInnb" value="<c:out value="${resultMap.cnsltVO.strCnsltDtlsInnb}"/>" readonly/>
</div>
</td>
</tr>
<tr>
<th>상담자</th>
<td>
<div class="td-inner">
<c:out value="${resultMap.cnsltVO.regusrnm}"/>
</div>
</td>
</tr>
<tr>
<th>처리상태</th>
<td>
<div class="td-inner">
<div class="select-box">
<select id="procsSttusCdUpdt" name="procsSttus" title="처리상태">
<c:forEach var="codeList" items="${resultMap.procsSttusCdList}" varStatus="">
<option value="<c:out value="${codeList.cd}"/>" <c:if test="${codeList.cd eq resultMap.cnsltVO.procsSttusCd}">selected="selected"</c:if>>
<c:out value="${ codeList.cdNm }"/>
</option>
</c:forEach>
</select>
</div>
</div>
</td>
</tr>
<tr>
<th colspan="2" class="text-center">상담내용</th>
</tr>
<tr>
<td colspan="2" class="border-left border-right">
<textarea class="textarea" id="cnsltCn" name="cnsltCn" title="상담내용" cols="30" rows="10"><c:out value="${ resultMap.cnsltVO.cnsltCn }"/></textarea>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</form>
<div class="modal-footer">
<a href="#" rel="modal:close" class="btn outline">취소</a>
<button class="btn primary" type="button" onclick="fn_updt_cnslt(); return false;"><spring:message code="button.update"/></button>
</div>
</div>
<script>
$("#procsSttusCdUpdt").niceSelect();
</script>

View File

@@ -0,0 +1,119 @@
<%@ 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"%>
<%--
Class Name : ItrntCnsltDtlsR.jsp
Description : CRM 상담 내역 jsp
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-02-16 추지훈 최초 생성
--%>
<script>
$(document).ready(function() {
$("#cnsltPageUnit").niceSelect();
fn_set_date();
});
</script>
<section class="content-section">
<div class="form-control-container">
<div class="left">
<div class="search-number">
<span class="search-number__text">총 <strong><c:out value="${ resultMap.paginationInfo.totalRecordCount }"/></strong>건</span>
</div>
</div>
<div class="center">
</div>
<div class="right">
<div class="select-box">
<select id="cnsltPageUnit" name="pageUnit" title="페이지당 출력될 목록건수" onchange="console.log('test'); fn_select_crm_cnslt_list('1');">
<c:forEach items="${ resultMap.paginationInfo.pageUnitArr }" var="pageUnit" varStatus="pageUnitStatus">
<option value="<c:out value="${ pageUnit }"/>" <c:if test="${ resultMap.paginationInfo.recordCountPerPage eq pageUnit}">selected="selected"</c:if>><c:out value="${ pageUnit }"/>개씩</option>
</c:forEach>
</select>
</div>
</div>
</div>
<hr class="spacing">
<div class="table-wrapper">
<table class="table vertical">
<caption>해당 테이블에 대한 설명</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 6%;">
<col style="width: auto;">
<col style="width: 13%;">
<col style="width: 13%;">
<col style="width: 7%">
</colgroup>
<thead>
<tr>
<th>번호</th>
<th>상담내용</th>
<th>상담일시</th>
<th>처리여부</th>
<th>관리</th>
</tr>
</thead>
<tbody>
<c:choose>
<c:when test="${ not empty resultMap.resultList && fn:length(resultMap.resultList) > 0 }">
<c:forEach items="${ resultMap.resultList }" var="cnsltList" varStatus="status">
<tr>
<td>
<c:out value="${ resultMap.paginationInfo.totalRecordCount - cnsltList.rnum + 1 }" />
<input type="hidden" id="strCnsltDtlsInnb" name="strCnsltDtlsInnb" value="<c:out value="${ cnsltList.strCnsltDtlsInnb }" />"/>
</td>
<td class="text-left">
<span class="under-line" onclick="fn_open_modal_cnslt_dtl_popup('#cnsltDtlPopupDiv', '#cntmrCnsltDtlPopup', '<c:url value="/itrnt/crm/cnslt/selectCnsltDtlUpdtInqirePopup"/>', '<c:out value="${ cnsltList.strCnsltDtlsInnb }"/>' ); return false;">
<c:out value="${ cnsltList.cnsltCn }"/>
</span>
</td>
<td>
<c:out value="${ cnsltList.registDt }"/>
</td>
<td>
<c:choose>
<c:when test="${cnsltList.procsSttus eq '03'}">
<c:out value="${ cnsltList.procsSttusCd}"/><br>
<c:out value="${ cnsltList.procsDeCty}"/>
</c:when>
<c:otherwise>
<c:out value="${ cnsltList.procsSttusCd}"/>
</c:otherwise>
</c:choose>
</td>
<td>
<button type="button" class="btn xsm dark" onclick="fn_delete_cnslt('<c:out value="${ cnsltList.strCnsltDtlsInnb}"/>');">
<spring:message code="button.delete"/>
</button>
</td>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
<tr>
<td colspan="100%" ><spring:message code="common.nodata"/></td>
</tr>
</c:otherwise>
</c:choose>
</tbody>
</table>
</div>
</section>
<div class="pagination__container">
<ui:pagination paginationInfo="${resultMap.paginationInfo}" type="image" jsFunction="fn_select_crm_cnslt_list" />
</div>

View File

@@ -0,0 +1,294 @@
<%@ 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"%>
<%--
Class Name : ItrntCnsltDtlsRForm.jsp
Description : CRM 상담 내역 jsp
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-02-19 추지훈 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%@include file="/WEB-INF/views/comm/crm/Include.jsp" %>
<script>
$(document).ready(function() {
//crm 정보 조회
fn_get_itrnt_crm_info($("#leftMbrInnb").val(), $("#leftMbrDvCd").val(),$("#leftSopmalCd").val());
fn_display_start();
fn_select_crm_cnslt_list(1);
});
/********************************************************
* 시작 화면 제어 함수
* ******************************************************/
const fn_display_start = function() {
fn_set_date('srchStartDate','srchEndDate','srchEndDate');
$('#listForm').on('keydown', function(e) {
if (e.keyCode == 13) {
e.preventDefault();
$('#searchBtn').trigger("click");
}
});
$('#allDays').on('click', function() {
$('#srchStartDate, #srchEndDate').val('');
});
let cnsltDtlsInnb = '<c:out value="${ resultMap.paramVO.strCnsltDtlsInnb}"/>';
if (!fn_is_empty(cnsltDtlsInnb)) { //상담 내역 고유번호로 들어 올 경우(활동정보 > 상담고유번호 클릭 시)
fn_open_modal_cnslt_dtl_popup('#cnsltDtlPopupDiv', '#cntmrCnsltDtlPopup', '<c:url value="/itrnt/crm/cnslt/selectCnsltDtlUpdtInqirePopup"/>', cnsltDtlsInnb );
}
$("#srchProcsSttusAll").click();
}
/*초기화시 상태 세팅*/
const fn_set_form = () => {
$("#srchProcsSttusAll").click();
}
/************************************************
* 상담 상세 조회 모달
*************************************************/
const fn_open_modal_cnslt_dtl_popup = function(modalDivSltr, modalSlrt, url, param, callback) {
var cnsltDtlsInnb = param;
console.log("innhb 확인 ", cnsltDtlsInnb);
$.ajax({
type: 'post',
url: url,
data: {
strCnsltDtlsInnb : cnsltDtlsInnb
},
success: function (data) {
$(modalSlrt).remove();
$(modalDivSltr).html(data);
$(modalSlrt).modal();
}
});
};
/******************************************************
* CRM 상담 목록 조회
*******************************************************/
const fn_select_crm_cnslt_list = function(pageIndex, pageUnit) {
let dataStr;
if(!pageIndex) {
$('#pageIndex').val(1);
} else {
$('#pageIndex').val(pageIndex);
}
if(!pageUnit) {
dataStr = $('#listForm').serialize();
} else {
if($('#cnsltPageUnit').length){
$('#cnsltPageUnit').val(pageUnit);
dataStr = $('#listForm').serialize();
} else {
dataStr = $('#listForm').serialize()+'&pageUnit='+pageUnit;
}
}
$('#pageIndex').val(pageIndex);
$.ajax({
type: "post",
url : "<c:url value="/itrnt/crm/cnslt/selectCnsltDtlsInqire"/>",
data : dataStr,
success:function(resultHtml) {
$('#pageDiv').html(resultHtml);
}
});
};
/************************************************
* 삼당 수정
*************************************************/
const fn_updt_cnslt = function() {
let data = $('#cnsltPopupForm').serialize();
if (confirm('상담 내역을 <spring:message code="confirm.common.update"/>')) {
$.ajax({
type: 'post',
url: "/itrnt/crm/cnslt/updateCnsltUpdt",
data: data,
success: function (result) {
fn_close_modal('cntmrCnsltDtlPopup');
result = JSON.parse(result.resBody.result);
result = result.result;
if (result === 'success') {
alert('<spring:message code="success.common.update"/>');
fn_select_crm_cnslt_list(1);
}else{
alert('<spring:message code="fail.common.update"/>');
}
}
});
};
};
/************************************************
* 삼당 삭제
*************************************************/
const fn_delete_cnslt = function(innb) {
if (confirm('상담 내역을 <spring:message code="confirm.common.delete"/>')) {
$.ajax({
type: 'post',
url: "/itrnt/crm/cnslt/deleteCnsltDel",
data: {strCnsltDtlsInnb:innb},
success: function (result) {
fn_close_modal('cntmrCnsltDtlPopup');
result = JSON.parse(result.resBody.result);
result = result.result;
if (result === 'success') {
alert('<spring:message code="success.common.delete"/>');
fn_select_crm_cnslt_list(1);
}else{
alert('<spring:message code="fail.common.delete"/>');
}
}
});
};
};
</script>
</head>
<body>
<%@ include file="/WEB-INF/views/comm/itrnt/crm/Header.jsp"%>
<main class="main">
<%-- CRM left 공통 --%>
<%@ include file="/WEB-INF/views/comm/itrnt/crm/Left.jsp"%>
<div class="content">
<div class="content__inner">
<button class="side-nav__fold"><span class="visually-hidden">좌측메뉴 펼치기/닫기</span></button>
<div class="page-title">
<h2 class="page-title__title">상담</h2>
<div class="page-title__btn-container">
</div>
</div>
<form id="listForm" name="listForm" method="post">
<input type="hidden" id="cnsltDtlsInnb" name="cnsltDtlsInnb"/>
<input type="hidden" id="pageIndex" name="pageIndex" value="<c:out value="${ resultMap.paramVO.pageIndex }"/>"/>
<input type="hidden" id="recordCountPerPage" name="recordCountPerPage" value="<c:out value="${ resultMap.paramVO.recordCountPerPage }"/> "/>
<input type="hidden" id="mbrInnb" name="mbrInnb" value="<c:out value="${ resultMap.paramVO.mbrInnb}"/>"/>
<input type="hidden" id="mbrDvCd" name="mbrDvCd" value="<c:out value="${ resultMap.paramVO.mbrDvCd}"/>"/>
<section class="content-section" id="crmCnsltSrchSection">
<div class="table-wrapper">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 12%;">
<col style="width: auto;">
</colgroup>
<tbody>
<tr>
<th>등록일</th>
<td>
<div class="td-inner">
<div class="select-box">
<select id="srchDtDv" name="srchDtDv" title="해당 셀렉트에 대한 설명">
<option value="cnstlDt">상담일</option>
<option value="procsDt">처리일</option>
</select>
</div>
<div class="input-container">
<input type="text" name="srchStartDate" id="srchStartDate" class="datepicker" title="시작 날짜 선택" autocomplete="off" pattern="yyyy-MM-dd">
<span class="tilde">~</span>
<input type="text" name="srchEndDate" id="srchEndDate" class="datepicker" title="종료 날짜 선택" autocomplete="off" pattern="yyyy-MM-dd">
</div>
<div class="dateRange-btnContainer">
<button type="button" class="dateRange-btn" id="yesterday" onclick="fn_set_date('srchStartDate','srchEndDate','srchEndDate','1D')">어제</button>
<button type="button" class="dateRange-btn" id="today" onclick="fn_set_date('srchStartDate','srchEndDate','srchEndDate','0')">오늘</button>
<button type="button" class="dateRange-btn" id="threeDays" onclick="fn_set_date('srchStartDate','srchEndDate','srchEndDate','3D')">3일간</button>
<button type="button" class="dateRange-btn" id="sevenDays" onclick="fn_set_date('srchStartDate','srchEndDate','srchEndDate','7D')">일주일</button>
<button type="button" class="dateRange-btn" id="oneMonth" onclick="fn_set_date('srchStartDate','srchEndDate','srchEndDate','1M')">1개월</button>
<button type="button" class="dateRange-btn" id="threeMonth" onclick="fn_set_date('srchStartDate','srchEndDate','srchEndDate','3M')">3개월</button>
<button type="button" class="dateRange-btn" id="sixMonth" onclick="fn_set_date('srchStartDate','srchEndDate','srchEndDate','6M')">6개월</button>
<button type="button" class="dateRange-btn" id="oneYear" onclick="fn_set_date('srchStartDate','srchEndDate','srchEndDate','1Y')">1년</button>
<button type="button" class="dateRange-btn selected" id="allDays">전체</button>
</div>
</div>
</td>
</tr>
<tr>
<th>처리 상태</th>
<td>
<div class="td-inner">
<div class="b-checkbox-container" id="srchProcsSttusCdDiv">
<label class="b-checkbox checkbox check-all">
<input type="checkbox" id="srchProcsSttusAll" value="" >
<span class="check"></span>
<span class="control-label">전체</span>
</label>
<c:forEach var="codeList" items="${ resultMap.procsSttusCdList }" varStatus="">
<label class="b-checkbox checkbox">
<input type="checkbox" class="procsSttusCdCheckbox" name="srchProcsSttusCd" value="<c:out value="${ codeList.cd }"/>"
onchange="fn_ctr_pCheckbox('#srchProcsSttusAll', '.procsSttusCdCheckbox');"
<c:if test="${ resultMap.paramVO.srchProcsSttusCd eq codeList.cd }">checked="checked"</c:if>>
<span class="check"></span>
<span class="control-label"><c:out value="${ codeList.cdNm }"/></span>
</label>
</c:forEach>
</div>
</div>
</td>
</tr>
<tr>
<th>상담내용</th>
<td>
<div class="td-inner">
<input class="input-text xl" type="text" id="srchCnsltCn" name="srchCnsltCn" title="검색할 상담 내용">
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="form-control-container">
<div class="left"></div>
<div class="center">
<button class="btn outline" id="resetBtn" type="button" onclick="fn_reset_form('crmCnsltSrchSection'); fn_set_form(); return false;">초기화</button>
<button class="btn primary" id="searchBtn" type="button" onclick="fn_select_crm_cnslt_list(1); return false;">검색</button>
</div>
<div class="right">
</div>
</div>
</section>
<%-- 상담 목록 DIV --%>
<div id="pageDiv">
</div>
<%-- 상담 내역 수정 팝업 DIV --%>
<div id="cnsltDtlPopupDiv">
</div>
</form>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
<%-- CRM right 공통 --%>
<%@ include file="/WEB-INF/views/comm/itrnt/crm/Right.jsp"%>
</div>
</main>
</body>
</html>

View File

@@ -0,0 +1,62 @@
<%@ 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"%>
<%--
Class Name : ItrntCnsltRegistPopupC.jsp
Description : CRM 상담 등록 우층 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-01-26 추지훈 최초 생성
--%>
<script>
$(document).ready(function() {
$('.cnsltRegistSelect').niceSelect();
//전화번호 set
$("#telnb").val($("#leftMbtlnb").val());
});
</script>
<form id="registForm" name="registForm">
<input type="hidden" name="mbrInnb" value="<c:out value="${cnsltVO.mbrInnb}"/>"/>
<input type="hidden" name="mbrDvCd" value="<c:out value="${cnsltVO.mbrDvCd}"/>"/>
<aside class="crm-right">
<div class="crm-right__content">
<h5 class="crm-right__title">상담관리</h5>
<div class="crm-right__inner">
<div class="crm-right__row">
<div class="crm-right__th">처리상태</div>
<div class="crm-right__td">
<div class="select-box">
<select class="cnsltRegistSelect" id="procsSttusCd" name="procsSttus" title="처리상태">
<c:forEach var="codeList" items="${ resultMap.procsSttusCdList }" varStatus="">
<option value="<c:out value="${ codeList.cd }"/>" <c:if test="${ codeList.cd eq resultMap.cnsltVO.procsSttusCd }">selected="selected"</c:if>>
<c:out value="${ codeList.cdNm }"/>
</option>
</c:forEach>
</select>
</div>
</div>
</div>
</div>
<div class="crm-right__textarea-container">
<textarea class="textarea" cols="30" rows="6" placeholder="상담내용을 등록하세요." id="cnsltCn" name="cnsltCn"
title="상담내용"></textarea>
</div>
<div class="crm-right__btn-container">
<button class="btn primary" type="button" onclick="fn_regist(); return false;"><spring:message code="button.insert"/>하기</button>
</div>
</div>
</aside>
</form>

View File

@@ -0,0 +1,170 @@
<%@ 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"%>
<%--
Class Name : CouponInfoInqirePopupR.jsp
Description : 쿠폰 발급 정보 popup jsp
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
since : 2023.12.14 추지훈 최초 생성
--%>
<div id="couponInfoPopup" class="modal" style="max-width: 400px;">
<div class="modal-header">
<h4>쿠폰 정보</h4>
</div>
<div class="modal-content">
<div class="table-wrapper">
<table class="table">
<caption>쿠폰 정보 조회 팝업</caption>
<colgroup>
<col style="width: 20%;">
<col>
</colgroup>
<tbody>
<tr>
<th>쿠폰명</th>
<td><c:out value="${ resultMap.dwldCouponVO.coupNm }"/></td>
</tr>
<tr>
<th>혜택(부담비율)</th>
<td><%-- 5,000KRW 할인
<br>중복할인
<br>(% vs 0%) --%>
<c:choose>
<c:when test="${ resultMap.dwldCouponVO.bnefDv eq '01' || resultMap.dwldCouponVO.bnefDv eq '03' }">
<span class="fw-500">
<c:out value="${ resultMap.dwldCouponVO.aditDscntAmt }"/> <c:out value="${ resultMap.dwldCouponVO.goodsDscntDvNm }"/> 할인
</span><br/>
<c:if test="${ '01' eq resultMap.dwldCouponVO.goodsDscntDv }">
<span class="gray-8">최대 <c:out value="${ resultMap.dwldCouponVO.dscntMxmmAmt }"/>원 할인</span>
</c:if>
</c:when>
<c:when test="${ resultMap.dwldCouponVO.bnefDv eq '02' }">
<span class="fw-500">
<c:if test="${ '01' eq resultMap.dwldCouponVO.dlvyAmtDscntDv }">기본배송비 무료,
</span>
<br>
<span class="gray-8">
최대 <c:out value="${ resultMap.dwldCouponVO.dlvyAmtMxmmDscntAmt }"/>원 할인</c:if>
</span>
<span class="fw-500">
<c:if test="${ '02' eq resultMap.dwldCouponVO.dlvyAmtDscntDv }">배송비 <c:out value="${ resultMap.dwldCouponVO.dlvyAmtDscntAmt }"/>원 할인</c:if>
</span>
</c:when>
<c:otherwise>
</c:otherwise>
</c:choose>
</td>
</tr>
<tr>
<th>유효기간</th>
<td>
<c:choose>
<c:when test="${ resultMap.dwldCouponVO.validpdKndCd eq '01' }">
<c:out value="${ resultMap.dwldCouponVO.validpdBgnDt }"/> ~ <c:out value="${ resultMap.dwldCouponVO.validpdEndDt }"/><c:if test="${ 0 lt resultMap.dwldCouponVO.validpdDay }">(<c:out value="${ resultMap.dwldCouponVO.validpdDay }"/>일 남음)</c:if>
</c:when>
<c:when test="${ resultMap.dwldCouponVO.validpdKndCd eq '02' }">
<c:out value="${ resultMap.dwldCouponVO.validpdKndCdNm }"/> <c:out value="${ resultMap.dwldCouponVO.validpdDeCnt }"/> 일
</c:when>
<c:otherwise>
<c:out value="${ resultMap.dwldCouponVO.validpdBgnDt }"/> ~ <c:out value="${ resultMap.dwldCouponVO.validpdEndDt }"/><c:if test="${ 0 lt resultMap.dwldCouponVO.validpdDay }">(<c:out value="${ resultMap.dwldCouponVO.validpdDay }"/>일 남음)</c:if>
</c:otherwise>
</c:choose>
</td>
</tr>
<tr>
<th colspan="2">사용제한</th>
</tr>
<tr>
<td colspan="2">
<%-- 사용환경 --%>
<c:if test="${ not empty resultMap.dwldCouponVO.useEnvrnCd }">
<c:choose>
<c:when test="${resultMap.dwldCouponVO.useEnvrnCd eq '01' }">
<p class="fyi gray-7">온라인 쿠폰</p>
</c:when>
<c:when test="${ resultMap.dwldCouponVO.useEnvrnCd eq '02' }">
<p class="fyi gray-7">오프라인 쿠폰</p>
</c:when>
<c:when test="${ resultMap.dwldCouponVO.useEnvrnCd eq '03' }">
<p class="fyi gray-7">온/오프라인 쿠폰</p>
</c:when>
</c:choose>
</c:if>
<%-- 타 쿠폰 동시사용여부 --%>
<c:if test="${ not empty resultMap.dwldCouponVO.otrCouponSmtmUseAt }">
<c:choose>
<c:when test="${resultMap.dwldCouponVO.otrCouponSmtmUseAt eq 'Y' }">
<p class="fyi gray-7">다른 쿠폰과 동시 사용 불가</p>
</c:when>
<c:when test="${ resultMap.dwldCouponVO.otrCouponSmtmUseAt eq 'N' }">
<p class="fyi gray-7">다른 쿠폰과 동시 사용 가능</p>
</c:when>
</c:choose>
</c:if>
<%-- 사용가능금액(제품) --%>
<c:if test="${ not empty resultMap.dwldCouponVO.usePosblAmt && 0 ne fn:replace(resultMap.dwldCouponVO.usePosblAmt, ',', '') }">
<p class="fyi gray-7"><c:out value="${ resultMap.dwldCouponVO.usePosblAmt }"/>원 이상 구매 시</p>
</c:if>
<%-- 사용가능금액(대상제품 포함 구매제품 총합) --%>
<c:if test="${ not empty resultMap.dwldCouponVO.usePosblAllAmt && 0 ne fn:replace(resultMap.dwldCouponVO.usePosblAllAmt, ',', '') && resultMap.dwldCouponVO.usePosblAllAmtUseAt eq 'Y' }">
<p class="fyi gray-7"><c:out value="${ resultMap.dwldCouponVO.usePosblAllAmt }"/>원 이상 구매 시</p>
</c:if>
<%-- 중복다운로드 여부 --%>
<c:if test="${ not empty resultMap.dwldCouponVO.dplctDwldAt}">
<c:choose>
<c:when test="${resultMap.dwldCouponVO.dplctDwldAt eq 'N' }">
<p class="fyi gray-7">중복 다운로드 불가</p>
</c:when>
<c:when test="${ resultMap.dwldCouponVO.dplctDwldAt eq 'Y' }">
<p class="fyi gray-7">중복 다운로드 가능</p>
</c:when>
</c:choose>
</c:if>
<%-- 중복할인여부 --%>
<c:if test="${ not empty resultMap.dwldCouponVO.dplctDscntAt}">
<c:choose>
<c:when test="${resultMap.dwldCouponVO.dplctDscntAt eq 'N' }">
<p class="fyi gray-7">중복 할인 불가</p>
</c:when>
<c:when test="${ resultMap.dwldCouponVO.dplctDscntAt eq 'Y' }">
<p class="fyi gray-7">중복 할인 가능</p>
</c:when>
</c:choose>
</c:if>
<%-- 적용상품선정기준 --%>
<c:if test="${ not empty resultMap.dwldCouponVO.goodsApplcDvCd }">
<c:choose>
<c:when test="${resultMap.dwldCouponVO.goodsApplcDvCd eq '01' }">
<p class="fyi gray-7">모든 상품에 사용가능</p>
</c:when>
<c:when test="${ resultMap.dwldCouponVO.goodsApplcDvCd eq '02' }">
<p class="fyi gray-7">특정 카테고리에 사용가능</p>
</c:when>
<c:when test="${ resultMap.dwldCouponVO.goodsApplcDvCd eq '03' }">
<p class="fyi gray-7">특정 상품에 사용가능</p>
</c:when>
<c:when test="${ resultMap.dwldCouponVO.goodsApplcDvCd eq '04' }">
<p class="fyi gray-7">특정 카테고리 외 사용가능</p>
</c:when>
<c:when test="${ resultMap.dwldCouponVO.goodsApplcDvCd eq '05' }">
<p class="fyi gray-7">특정 상품 외 사용가능</p>
</c:when>
</c:choose>
</c:if>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>

View File

@@ -0,0 +1,163 @@
<%@ 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"%>
<%--
Class Name : CnsltDtlsRForm.jsp
Description : CRM 상담 내역 jsp
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-02-19 추지훈 최초 생성
--%>
<script>
$(document).ready(function() {
});
</script>
<form id="dwldListForm">
<input type="hidden" id="pageIndexDwld" name="pageIndex" value="<c:out value="${ resultMapDwld.paramVO.pageIndex }"/>"/>
<input type="hidden" id="recordCountPerPageDwld" name="recordCountPerPage" value="<c:out value="${ resultMapDwld.paramVO.recordCountPerPage }"/> "/>
<div class="tab-box__content">
<div class="form-control-container">
<div class="left">
<div class="search-number">
<span class="search-number__text">총 <strong><c:out value="${ resultMapDwld.paginationInfo.totalRecordCount }"/></strong>건</span>
</div>
</div>
<div class="center">
</div>
<div class="right">
<div class="select-box">
<select id="pageUnitDwld" name="pageUnit" title="페이지당 출력될 목록건수" onchange="console.log('test'); fn_select_dwld_coupon_list('1');">
<c:forEach items="${ resultMapDwld.paginationInfo.pageUnitArr }" var="pageUnit" varStatus="pageUnitStatus">
<option value="<c:out value="${ pageUnit }"/>" <c:if test="${ resultMapDwld.paginationInfo.recordCountPerPage eq pageUnit}">selected="selected"</c:if>><c:out value="${ pageUnit }"/>개씩</option>
</c:forEach>
</select>
</div>
</div>
</div>
<hr class="spacing">
<div class="table-wrapper">
<table class="table vertical tight">
<caption>해당 테이블에 대한 설명</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 6%;">
<col style="width: auto;">
<col style="width: 16%;">
<col style="width: 16%;">
<col style="width: 10%;">
<col style="width: 10%;">
</colgroup>
<thead>
<tr>
<th>번호</th>
<th>쿠폰명</th>
<th>혜택</th>
<th>유효기간</th>
<th>다운로드기간</th>
<th>조건</th>
</tr>
</thead>
<tbody>
<c:choose>
<c:when test="${ not empty resultMapDwld.resultList && fn:length(resultMapDwld.resultList) > 0 }">
<c:forEach items="${ resultMapDwld.resultList }" var="couponList" varStatus="status">
<tr>
<td>
<c:out value="${ resultMapDwld.paginationInfo.totalRecordCount - couponList.rnum + 1 }" />
<input type="hidden" id="dwldCouponInnb" name="dwldCouponInnb" value="<c:out value="${ couponList.dwldCouponInnb }" />"/>
</td>
<td class="text-left">
<c:out value="${ couponList.coupNm }"/>
</td>
<td>
<c:choose>
<c:when test="${ couponList.bnefDvCd eq '01' || couponList.bnefDvCd eq '03' }">
<span class="fw-500">
<fmt:formatNumber value="${ couponList.aditDscntAmt }" pattern="#,###" />
<c:if test="${ '01' eq couponList.aditDscntCd }">% 할인</c:if>
<c:if test="${ '02' eq couponList.aditDscntCd }">원 할인</c:if>
</span><br/>
<c:if test="${ '01' eq couponList.aditDscntCd }">
<span class="gray-8">최대 <fmt:formatNumber value="${ couponList.dscntMxmmAmt }" pattern="#,###" />원 할인</span>
</c:if>
</c:when>
<c:when test="${ couponList.bnefDvCd eq '02' }">
<span class="fw-500">
<c:if test="${ '01' eq couponList.dlvyAmtDscntDvCd }">기본배송비 무료,
</span>
<br>
<span class="gray-8">
최대 <fmt:formatNumber value="${ couponList.dlvyAmtMxmmDscntAmt }" pattern="#,###" />원 할인</c:if>
</span>
<span class="fw-500">
<c:if test="${ '02' eq couponList.dlvyAmtDscntDvCd }">배송비 <fmt:formatNumber value="${ couponList.dlvyAmtDscntAmt }" pattern="#,###" />원 할인</c:if>
</span>
</c:when>
<c:otherwise>
</c:otherwise>
</c:choose>
</td>
<td>
<c:choose>
<c:when test="${ '01' eq couponList.validpdKndCd }">
<c:out value="${couponList.registDe}" />
<br><c:out value="${couponList.validpdEndDt}" />
</c:when>
<c:when test="${ '02' eq couponList.validpdKndCd }">
발급일로부터 <c:out value="${couponList.validpdDeCnt}" /> 일
</c:when>
</c:choose>
</td>
<td>
<c:choose>
<c:when test="${ 'Y' eq couponList.dwldPdLmttAt }">
<c:out value="${couponList.dwldBgnDt}" />
<br><c:out value="${couponList.dwldEndDt}" />
</c:when>
<c:otherwise>
제한없음
</c:otherwise>
</c:choose>
</td>
<td>
<div class="manage-btn-container">
<button id="coupon-info-pop-trigger"
class="btn xsm outline"
onclick="fn_open_modal_coupon_dtl('#modalDivCouponInfo', '#couponInfoPopup', '<c:out value="/itrnt/crm/coupon/selectDwldYCouponInfoInqirePopup"/>', '<c:out value="${ couponList.couponInnb }"/>', '<c:out value="${ couponList.sopmalCd }"/>'); return false;"
>
상세
</button>
</div>
</td>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
<tr>
<td colspan="100%" ><spring:message code="common.nodata"/></td>
</tr>
</c:otherwise>
</c:choose>
</tbody>
</table>
</div>
</div>
<div class="pagination__container">
<ui:pagination paginationInfo="${resultMapDwld.paginationInfo}" type="image" jsFunction="fn_select_dwld_coupon_list" />
</div>
</form>

View File

@@ -0,0 +1,172 @@
<%@ 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() {
fn_set_datepicker('.datepicker');
fn_set_date('validpdBgnDt','validpdEndDt','validpdEndDt');
});
</script>
<div id="coupon-info-pop" class="modal" style="max-width: 540px;">
<div class="modal-header">
<h4>쿠폰 정보</h4>
</div>
<div class="modal-content">
<div class="table-wrapper">
<form id="validpdDtUpdtForm" name="validpdDtUpdtForm">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 24%;">
<col>
</colgroup>
<tbody>
<tr>
<th>쿠폰명</th>
<td>
<div class="td-inner">
<c:out value="${ resultMap.dwldCouponVO.coupNm }"/>
</div>
</td>
</tr>
<tr>
<th>혜택<br>(부담비율)</th>
<td>
<div class="td-inner">
<c:choose>
<c:when test="${ resultMap.dwldCouponVO.bnefDv eq '01' || resultMap.dwldCouponVO.bnefDv eq '03' }">
<span class="fw-500">
<c:out value="${ resultMap.dwldCouponVO.aditDscntAmt }"/> <c:out value="${ resultMap.dwldCouponVO.goodsDscntDvNm }"/> 할인
</span><br/>
<c:if test="${ '01' eq resultMap.dwldCouponVO.goodsDscntDv }">
<span class="gray-8">최대 <c:out value="${ resultMap.dwldCouponVO.dscntMxmmAmt }"/>원 할인</span>
</c:if>
</c:when>
<c:when test="${ resultMap.dwldCouponVO.bnefDv eq '02' }">
<span class="fw-500">
<c:if test="${ '01' eq resultMap.dwldCouponVO.dlvyAmtDscntDv }">기본배송비 무료,
</span>
<br>
<span class="gray-8">
최대 <c:out value="${ resultMap.dwldCouponVO.dlvyAmtMxmmDscntAmt }"/>원 할인</c:if>
</span>
<span class="fw-500">
<c:if test="${ '02' eq resultMap.dwldCouponVO.dlvyAmtDscntDv }">배송비 <c:out value="${ resultMap.dwldCouponVO.dlvyAmtDscntAmt }"/>원 할인</c:if>
</span>
</c:when>
<c:otherwise>
</c:otherwise>
</c:choose>
</div>
</td>
</tr>
<input type="hidden" name="dwldCouponInnb" value="<c:out value="${ resultMap.dwldCouponVO.dwldCouponInnb}"/>"/>
<tr>
<th>유효기간</th>
<td>
<div class="td-inner">
<input type="text" id="validpdBgnDt" name="validpdBgnDt" class="datepicker" value="<c:out value="${ resultMap.dwldCouponVO.validpdBgnDt }"/>" title="시작 날짜 선택" readonly>
<span class="tilde">~</span>
<input type="text" id="validpdEndDt" name="validpdEndDt" class="datepicker" value="<c:out value="${ resultMap.dwldCouponVO.validpdEndDt }"/>" title="종료 날짜 선택" readonly>
</div>
</td>
</tr>
<tr>
<th>사용제한</th>
<td>
<div class="td-inner vertical">
<%-- 사용환경 --%>
<c:if test="${ not empty resultMap.dwldCouponVO.useEnvrnCd }">
<c:choose>
<c:when test="${resultMap.dwldCouponVO.useEnvrnCd eq '01' }">
<p class="fyi gray-7">온라인 쿠폰</p>
</c:when>
<c:when test="${ resultMap.dwldCouponVO.useEnvrnCd eq '02' }">
<p class="fyi gray-7">오프라인 쿠폰</p>
</c:when>
<c:when test="${ resultMap.dwldCouponVO.useEnvrnCd eq '03' }">
<p class="fyi gray-7">온/오프라인 쿠폰</p>
</c:when>
</c:choose>
</c:if>
<%-- 타 쿠폰 동시사용여부 --%>
<c:if test="${ not empty resultMap.dwldCouponVO.otrCouponSmtmUseAt }">
<c:choose>
<c:when test="${resultMap.dwldCouponVO.otrCouponSmtmUseAt eq 'Y' }">
<p class="fyi gray-7">다른 쿠폰과 동시 사용 불가</p>
</c:when>
<c:when test="${ resultMap.dwldCouponVO.otrCouponSmtmUseAt eq 'N' }">
<p class="fyi gray-7">다른 쿠폰과 동시 사용 가능</p>
</c:when>
</c:choose>
</c:if>
<%-- 사용가능금액 --%>
<c:if test="${ not empty resultMap.dwldCouponVO.usePosblAmt || 0 ne resultMap.dwldCouponVO.usePosblAmt }">
<p class="fyi gray-7"><c:out value="${ resultMap.dwldCouponVO.usePosblAmt }"/>원 이상 구매 시</p>
</c:if>
<%-- 중복다운로드 여부 --%>
<c:if test="${ not empty resultMap.dwldCouponVO.dplctDwldAt}">
<c:choose>
<c:when test="${resultMap.dwldCouponVO.dplctDwldAt eq 'N' }">
<p class="fyi gray-7">중복 다운로드 불가</p>
</c:when>
<c:when test="${ resultMap.dwldCouponVO.dplctDwldAt eq 'Y' }">
<p class="fyi gray-7">중복 다운로드 가능</p>
</c:when>
</c:choose>
</c:if>
<%-- 중복할인여부 --%>
<c:if test="${ not empty resultMap.dwldCouponVO.dplctDscntAt}">
<c:choose>
<c:when test="${resultMap.dwldCouponVO.dplctDscntAt eq 'N' }">
<p class="fyi gray-7">중복 할인 불가</p>
</c:when>
<c:when test="${ resultMap.dwldCouponVO.dplctDscntAt eq 'Y' }">
<p class="fyi gray-7">중복 할인 가능</p>
</c:when>
</c:choose>
</c:if>
<%-- 적용상품선정기준 --%>
<c:if test="${ not empty resultMap.dwldCouponVO.goodsApplcDvCd }">
<c:choose>
<c:when test="${resultMap.dwldCouponVO.goodsApplcDvCd eq '01' }">
<p class="fyi gray-7">모든 상품에 사용가능</p>
</c:when>
<c:when test="${ resultMap.dwldCouponVO.goodsApplcDvCd eq '02' }">
<p class="fyi gray-7">특정 카테고리에 사용가능</p>
</c:when>
<c:when test="${ resultMap.dwldCouponVO.goodsApplcDvCd eq '03' }">
<p class="fyi gray-7">특정 상품에 사용가능</p>
</c:when>
<c:when test="${ resultMap.dwldCouponVO.goodsApplcDvCd eq '04' }">
<p class="fyi gray-7">특정 카테고리 외 사용가능</p>
</c:when>
<c:when test="${ resultMap.dwldCouponVO.goodsApplcDvCd eq '05' }">
<p class="fyi gray-7">특정 상품 외 사용가능</p>
</c:when>
</c:choose>
</c:if>
</div>
</td>
</tr>
</tbody>
</table>
</form>
</div>
</div>
<div class="modal-footer">
<a href="#" rel="modal:close" class="btn outline">닫기</a>
</div>
</div>

View File

@@ -0,0 +1,223 @@
<%@ 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"%>
<%--
Class Name : CnsltDtlsRForm.jsp
Description : CRM 상담 내역 jsp
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-02-19 추지훈 최초 생성
--%>
<script>
$(document).ready(function() {
fn_set_date();
});
</script>
<form id="holdListForm">
<input type="hidden" id="pageIndex" name="pageIndex" value="<c:out value="${ resultMap.paramVO.pageIndex }"/>"/>
<input type="hidden" id="recordCountPerPage" name="recordCountPerPage" value="<c:out value="${ resultMap.paramVO.recordCountPerPage }"/> "/>
<div class="tab-box__content">
<div class="form-control-container">
<div class="left">
<div class="search-number">
<span class="search-number__text">총 <strong><c:out value="${ resultMap.paginationInfo.totalRecordCount }"/></strong>건</span>
</div>
</div>
<div class="center">
</div>
<div class="right">
<div class="select-box">
<select id="pageUnit" name="pageUnit" title="페이지당 출력될 목록건수" onchange="console.log('test'); fn_select_hold_coupon_list('1');">
<c:forEach items="${ resultMap.paginationInfo.pageUnitArr }" var="pageUnit" varStatus="pageUnitStatus">
<option value="<c:out value="${ pageUnit }"/>" <c:if test="${ resultMap.paginationInfo.recordCountPerPage eq pageUnit}">selected="selected"</c:if>><c:out value="${ pageUnit }"/>개씩</option>
</c:forEach>
</select>
</div>
</div>
</div>
<hr class="spacing">
<div class="table-wrapper">
<table class="table vertical tight">
<caption>해당 테이블에 대한 설명</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 6%;">
<col style="width: 10%;">
<col style="width: auto;">
<col style="width: 16%;">
<col style="width: 11%;">
<col style="width: 11%;">
<col style="width: 8%;">
<col style="width: 10%;">
</colgroup>
<thead>
<tr>
<th>번호</th>
<th>발급일</th>
<th>쿠폰명</th>
<th>혜택</th>
<th>유효기간</th>
<th>남은일자</th>
<th>사용여부</th>
<th>조건</th>
</tr>
</thead>
<tbody>
<c:choose>
<c:when test="${ not empty resultMap.resultList && fn:length(resultMap.resultList) > 0 }">
<c:forEach items="${ resultMap.resultList }" var="couponList" varStatus="status">
<tr
<c:choose>
<c:when test="${ couponList.couponSttusCd eq '03' }">
class="gray-4"
</c:when>
<c:when test="${ couponList.couponSttusCd eq '02' && couponList.validpdEndDt ge date }">
</c:when>
<c:when test="${ couponList.couponSttusCd eq '02' && couponList.validpdEndDt lt date }">
class="gray-4"
</c:when>
<c:when test="${ couponList.couponSttusCd eq '04' }">
class="gray-4"
</c:when>
</c:choose>
>
<td>
<c:out value="${ resultMap.paginationInfo.totalRecordCount - couponList.rnum + 1 }" />
<input type="hidden" id="dwldCouponInnb" name="dwldCouponInnb" value="<c:out value="${ couponList.dwldCouponInnb }" />"/>
</td>
<td>
<c:out value="${ couponList.registDe }"/>
</td>
<td class="text-left">
<c:out value="${ couponList.coupNm }"/>
</td>
<td>
<c:choose>
<c:when test="${ couponList.bnefDvCd eq '01' || couponList.bnefDvCd eq '03' }">
<span class="fw-500">
<fmt:formatNumber value="${ couponList.aditDscntAmt }" pattern="#,###" />
<c:if test="${ '01' eq couponList.aditDscntCd }">% 할인</c:if>
<c:if test="${ '02' eq couponList.aditDscntCd }">원 할인</c:if>
</span><br/>
<c:if test="${ '01' eq couponList.aditDscntCd }">
<span class="gray-8">최대 <fmt:formatNumber value="${ couponList.dscntMxmmAmt }" pattern="#,###" />원 할인</span>
</c:if>
</c:when>
<c:when test="${ couponList.bnefDvCd eq '02' }">
<span class="fw-500">
<c:if test="${ '01' eq couponList.dlvyAmtDscntDvCd }">기본배송비 무료,
</span>
<br>
<span
<c:choose>
<c:when test="${ couponList.couponSttusCd eq '03' }">
class="gray-4"
</c:when>
<c:when test="${ couponList.couponSttusCd eq '02' && couponList.validpdEndDt ge date }">
class="gray-8"
</c:when>
<c:when test="${ couponList.couponSttusCd eq '02' && couponList.validpdEndDt lt date }">
class="gray-4"
</c:when>
<c:when test="${ couponList.couponSttusCd eq '04' }">
class="gray-4"
</c:when>
</c:choose>
>
최대 <fmt:formatNumber value="${ couponList.dlvyAmtMxmmDscntAmt }" pattern="#,###" />원 할인</c:if>
</span>
<span class="fw-500">
<c:if test="${ '02' eq couponList.dlvyAmtDscntDvCd }">배송비 <fmt:formatNumber value="${ couponList.dlvyAmtDscntAmt }" pattern="#,###" />원 할인</c:if>
</span>
</c:when>
<c:otherwise>
</c:otherwise>
</c:choose>
</td>
<td>
<c:out value="${ couponList.validpdBgnDt }"/><br>
<c:out value="${ couponList.validpdEndDt }"/>
</td>
<td id="dayCalcTd">
<c:set var="today" value="<%=new java.util.Date()%>" />
<c:set var="date"><fmt:formatDate value="${today}" pattern="yyyy-MM-dd" /></c:set>
<c:choose>
<c:when test="${ couponList.validpdEndDt gt date }">
<c:out value="${ couponList.validpdDay }"/> 일 남음
</c:when>
<c:when test="${ couponList.validpdEndDt lt date}">
<c:out value="${ couponList.validpdDay }"/> 일 지남
</c:when>
<c:when test="${ couponList.validpdEndDt eq date}">
오늘까지
</c:when>
</c:choose>
</td>
<td>
<%-- <c:choose>--%>
<%-- <c:when test="${couponList.couponUseAt eq 'Y'}">--%>
<%-- <span class="blue-7 fw-500">사용함</span>--%>
<%-- </c:when>--%>
<%-- <c:when test="${couponList.couponUseAt eq 'N'}">--%>
<%-- <span class="red-7 fw-500">미사용</span>--%>
<%-- </c:when>--%>
<%-- </c:choose>--%>
<c:set var="today" value="<%=new java.util.Date()%>" />
<c:set var="date"><fmt:formatDate value="${today}" pattern="yyyy-MM-dd HH:mm" /></c:set>
<c:choose>
<c:when test="${ couponList.couponSttusCd eq '03' }">
<span class="couponList__date" style="color: blue"><strong>사용함</strong></span>
</c:when>
<c:when test="${ couponList.couponSttusCd eq '02' && couponList.validpdEndDt ge date }">
<span class="couponList__date" style="color: red"><strong>미사용</strong></span>
</c:when>
<c:when test="${ couponList.couponSttusCd eq '02' && couponList.validpdEndDt lt date }">
<span class="couponList__date" style="color: gray"><strong>소멸함</strong></span>
</c:when>
<c:when test="${ couponList.couponSttusCd eq '04' }">
<span class="couponList__date" style="color: gray"><strong>회수</strong></span>
</c:when>
</c:choose>
</td>
<td>
<div class="manage-btn-container">
<button id="coupon-info-pop-trigger"
class="btn xsm outline"
onclick="fn_open_modal_dwldcoupon_dtl('#modalDiv', '#coupon-info-pop', '/itrnt/crm/coupon/selectItrntHoldCouponDtlPopupForm', '<c:out value="${ couponList.dwldCouponInnb }"/>'); return false;"
>
상세
</button>
</div>
</td>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
<tr>
<td colspan="100%" ><spring:message code="common.nodata"/></td>
</tr>
</c:otherwise>
</c:choose>
</tbody>
</table>
</div>
</div>
<div class="pagination__container">
<ui:pagination paginationInfo="${resultMap.paginationInfo}" type="image" jsFunction="fn_select_hold_coupon_list" />
</div>
</form>

View File

@@ -0,0 +1,274 @@
<%@ 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"%>
<%--
Class Name : HoldCouponDtlsForm.jsp
Description : CRM 쿠폰 내역 jsp
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-02-19 추지훈 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%@include file="/WEB-INF/views/comm/crm/Include.jsp" %>
<script>
$(document).ready(function() {
//crm 정보 조회
fn_get_itrnt_crm_info($("#leftMbrInnb").val(), $("#leftMbrDvCd").val(),$("#leftSopmalCd").val());
let pageIndexHold = '<c:out value="${ resultMap.paramVO.pageIndex }"/>';
let pageUnitHold = '<c:out value="${ resultMap.paramVO.pageUnit }"/>';
let pageIndexDwld = '<c:out value="${ resultMapDwld.paramVO.pageIndex }"/>';
let pageUnitDwld = '<c:out value="${ resultMapDwld.paramVO.pageUnit }"/>';
console.log("pageIndex, pageUnit : ", pageIndexHold, pageUnitHold);
console.log("pageIndex, pageUnit : ", pageIndexDwld, pageUnitDwld);
fn_select_hold_coupon_list(pageIndexHold, pageUnitHold);
//fn_select_dwld_coupon_list(pageIndexDwld, pageUnitDwld);
fn_start_display();
fn_add_crm_menu_class("leftCoupon");
});
/************************************************
* 보유 쿠폰 목록 조회
*************************************************/
const fn_select_hold_coupon_list = function(pageIndex, pageUnit) {
console.log("pageIndex : ", pageIndex);
console.log("pageUnit : ", pageUnit);
let dataStr;
if(!pageIndex) {
$('#pageIndex').val(1);
} else {
$('#pageIndex').val(pageIndex);
}
if(!pageUnit) {
console.log("pageUnit1", pageUnit);
dataStr = $('#holdListForm').serialize();
} else {
if($('#pageUnit').length){
$('#pageUnit').val(pageUnit);
dataStr = $('#holdListForm').serialize();
} else {
dataStr = $('#holdListForm').serialize()+'&pageUnit='+pageUnit;
}
}
let listFormData = $('#leftForm').serialize();
dataStr = dataStr + '&' + listFormData;
$('#pageIndex').val(pageIndex);
console.log("dataStr", dataStr);
$.ajax({
type: "post",
url : "<c:url value="/itrnt/crm/coupon/selectHoldCouponDtlsInqire"/>",
data : dataStr,
success:function(resultHtml) {
console.log(" 보유쿠폰 성공 확인");
$('#holdCouponListDiv').html(resultHtml);
$('#pageUnit').niceSelect();
}
});
}
/************************************************
* 다운로드 가능 쿠폰 목록 조회
*************************************************/
const fn_select_dwld_coupon_list = function(pageIndexDwld, pageUnitDwld) {
console.log("pageIndexDwld : ", pageIndexDwld);
console.log("pageUnitDwld : ", pageUnitDwld);
let dataStr;
if(!pageIndexDwld) {
$('#pageIndexDwld').val(1);
} else {
$('#pageIndexDwld').val(pageIndexDwld);
}
if(!pageUnitDwld) {
console.log("pageUnitDwld", pageUnitDwld);
dataStr = $('#dwldListForm').serialize();
} else {
if($('#pageUnitDwld').length){
$('#pageUnitDwld').val(pageUnitDwld);
dataStr = $('#dwldListForm').serialize();
} else {
dataStr = $('#dwldListForm').serialize()+'&pageUnitDwld='+pageUnitDwld;
}
}
let listFormData = $('#leftForm').serialize();
dataStr = dataStr + '&' + listFormData;
$('#pageIndexDwld').val(pageIndexDwld);
console.log("dataStr", dataStr);
$.ajax({
type: "post",
url : "<c:url value="/itrnt/crm/coupon/selectDwldPosblCouponDtlsInqire"/>",
data : dataStr,
success:function(resultHtml) {
$('#holdCouponListDiv').html(resultHtml);
$('#pageUnitDwld').niceSelect();
}
});
}
/* ********************************************************
* 시작 화면 제어 함수
******************************************************** */
const fn_start_display = function() {
// 시작, 종료 날짜 제어
fn_set_date('validpdBgnDt','validpdEndDt','validpdEndDt');
}
/************************************************
* 쿠폰 상세 정보 조회 팝업 : 이미 다운로드 된 쿠폰
*************************************************/
const fn_open_modal_dwldcoupon_dtl = function(modalDivSltr, modalSlrt, url, param, callback){
var dwldCouponInnb = param
console.log("dwldCouponInnb : ", dwldCouponInnb);
$.ajax({
type: 'post',
url: url,
data: {
dwldCouponInnb : dwldCouponInnb
},
success: function (data) {
console.log(data);
//callback함수가 없을 경우 default로 지정된 영역에 모달팝업 화면을 교체하고 화면 로딩
if(!callback) {
$(modalSlrt).remove();
$(modalDivSltr).html(data);
$(modalSlrt).modal();
} else {
callback(data);
}
}
});
};
/************************************************
* 쿠폰 상세 정보 조회 팝업 : 다운로드 가능 쿠폰
*************************************************/
const fn_open_modal_coupon_dtl = function(modalDivSltr, modalSlrt, url, param, sopmalCd, callback){
var couponInnb = param
console.log("couponInnb : ", couponInnb);
$.ajax({
type: 'post',
url: url,
data: {
couponInnb : couponInnb,
sopmalCd : sopmalCd
},
success: function (data) {
//callback함수가 없을 경우 default로 지정된 영역에 모달팝업 화면을 교체하고 화면 로딩
if(!callback) {
$(modalSlrt).remove();
$(modalDivSltr).html(data);
$(modalSlrt).modal();
} else {
callback(data);
}
}
});
};
/************************************************
* 쿠폰 유효기간 수정
*************************************************/
const fn_updt_coupon_validpd = function() {
const data = $('#validpdDtUpdtForm').serialize();
console.log("data : ", data);
if (confirm('쿠폰 유효기간을 <spring:message code="confirm.common.update"/>')) {
$.ajax({
type: 'post',
url: '<c:out value="/itrnt/crm/coupon/updateCouponPdUpdt"/>',
data: data,
success: function (result) {
console.log("result : ", result.resBody);
fn_close_modal('coupon-info-pop');
fn_select_hold_coupon_list(1);
alert('<spring:message code="success.common.update"/>');
}
});
};
};
</script>
</head>
<body>
<%@ include file="/WEB-INF/views/comm/itrnt/crm/Header.jsp"%>
<main class="main">
<%-- CRM left 공통 --%>
<%@ include file="/WEB-INF/views/comm/itrnt/crm/Left.jsp"%>
<div class="content">
<div class="content__inner">
<button class="side-nav__fold"><span class="visually-hidden">좌측메뉴 펼치기/닫기</span></button>
<div class="page-title">
<h2 class="page-title__title">쿠폰</h2>
<div class="page-title__btn-container">
</div>
</div>
<section class="content-section">
<div class="tab-box">
<button class="tab-box__btn current" onclick="fn_select_hold_coupon_list(); return false;">보유한 쿠폰(<c:out value="${ not empty resultMap.usePosblCouponCnt ? resultMap.usePosblCouponCnt : '0' }"/>/<c:out value="${ not empty resultMap.usePosblCouponUseAtIsYCnt ? resultMap.usePosblCouponUseAtIsYCnt : '0' }"/>)</button>
<button class="tab-box__btn" onclick="fn_select_dwld_coupon_list(); return false;">다운로드 가능쿠폰(<c:out value="${ not empty resultMap.dwldPosblCouponCnt ? resultMap.dwldPosblCouponCnt : '0' }"/>)</button>
</div>
<%-- 보유한 쿠폰 내역 --%>
<div id="holdCouponListDiv">
</div>
<%-- 다운로드 가능쿠폰 내역 --%>
<div id="dwldCouponListDiv">
</div>
</section>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
<%-- CRM right 공통 --%>
<%@ include file="/WEB-INF/views/comm/itrnt/crm/Right.jsp"%>
</div>
</main>
<!-- 쿠폰정보 모달 보유한 쿠폰 -->
<div id="modalDiv">
</div>
<!-- 쿠폰정보 모달 다운로드 가능 쿠폰 -->
<div id="modalDivCouponInfo">
</div>
</body>
</html>

View File

@@ -0,0 +1,391 @@
<%@ 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"%>
<%--
Class Name : ItrntCstmrInfoInqireR.jsp
Description : CRM 고객 정보 jsp
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-02-19 추지훈 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%@include file="/WEB-INF/views/comm/crm/Include.jsp" %>
<script>
$(document).ready(function () {
//crm 정보 조회
fn_get_itrnt_crm_info($("#leftMbrInnb").val(), $("#leftMbrDvCd").val(),$("#leftSopmalCd").val());
//휴대폰 번호 포매팅
if (!fn_is_empty($("#mbtlnb").text())) {
$("#mbtlnb").text(fn_format_mbtlnb($("#mbtlnb").text().trim()));
}
});
/******************************************************
* 마일리지 조회
*******************************************************/
const fn_move_mlg_dtls = function() {
$('#leftForm').attr('action', '<c:url value="/itrnt/crm/mlg/selectMlgDtlsForm"/>');
$('#leftForm').attr('method', 'post');
$('#leftForm').submit();
};
const fn_move_coupon_dtls = function() {
$('#leftForm').attr('action', '<c:url value="/itrnt/crm/coupon/selectHoldCouponDtlsForm"/>');
$('#leftForm').attr('method', 'post');
$('#leftForm').submit();
};
</script>
</head>
<body>
<%@ include file="/WEB-INF/views/comm/itrnt/crm/Header.jsp"%>
<main class="main">
<%@ include file="/WEB-INF/views/comm/itrnt/crm/Left.jsp"%>
<div class="content">
<div class="content__inner">
<button class="side-nav__fold"><span class="visually-hidden">좌측메뉴 펼치기/닫기</span></button>
<div class="page-title">
<h2 class="page-title__title">회원 정보</h2>
<div class="page-title__btn-container">
</div>
</div>
<section class="content-section">
<h3 class="content-section__title">고객 정보</h3>
<form id="mbrDataForm">
<input type="hidden" id="mbrInnb" name="mbrInnb" value="<c:out value="${ resultMap.result.mbrInnb }"/>"/>
<input type="hidden" id="mbrDvCd" name="mbrDvCd" value="<c:out value="${ resultMap.result.mbrDvCd }"/>"/>
<input type="hidden" id="actionId" value=""/>
<div class="table-wrapper">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 12%;">
<col style="width: 38%;">
<col style="width: 12%;">
<col style="width: 38%;">
</colgroup>
<tbody>
<tr>
<th>가입경로</th>
<td>
<div class="td-inner">
<a href="https://<c:url value='${resultMap.result.inflowCoursDomn}'/>" target="_blank" class="blue-7">
<c:url value='${resultMap.result.inflowCoursDomn}'/>
</a>
</div>
</td>
<th>가입환경</th>
<td>
<div class="td-inner">
<c:forEach var = "joinEnvrn" items = "${resultMap.joinEnvrn}">
<c:if test = "${joinEnvrn.cd eq resultMap.result.joinEnvrnCd}"><c:out value="${joinEnvrn.cdNm}"/></c:if>
</c:forEach>
</div>
</td>
</tr>
<tr>
<th>가입일</th>
<td>
<div class="td-inner">
<c:out value="${ resultMap.result.registDt }"/>
</div>
</td>
<th>등급</th>
<td>
<div class="td-inner">
<c:out value="${ resultMap.result.mbrGradNm }"/>
</div>
</td>
</tr>
<tr>
<th>아이디</th>
<td>
<div class="td-inner">
<c:choose>
<c:when test="${resultMap.result.joinMthCd eq 'kakao'}"><%--kakao--%>
<i class="icon icon_word-badge_kakao"></i>
</c:when>
<c:when test="${resultMap.result.joinMthCd eq 'naver'}"><%--naver--%>
<i class="icon icon_word-badge08"></i>
</c:when>
<c:when test="${resultMap.result.joinMthCd eq 'pos'}"><%--pos--%>
<i class="icon icon_word-badge_pos"></i><c:out
value="${resultMap.result.mbrId}"/>
</c:when>
<c:otherwise>
<c:out value="${resultMap.result.mbrId}"/>
</c:otherwise>
</c:choose>
</div>
</td>
<th>이름</th>
<td>
<div class="td-inner">
<c:out value="${ resultMap.result.mbrNm }"/>
</div>
</td>
</tr>
<tr>
<th>휴대폰</th>
<td>
<div class="td-inner">
<button type="button" id="mbtlnb">
<c:out value="${ resultMap.result.mbtlnb }"/>
</button>
</div>
</td>
<th>이메일</th>
<td>
<div class="td-inner">
<button type="button">
<c:out value="${ resultMap.result.email }"/>
</button>
</div>
</td>
</tr>
<tr>
<th>생년월(나이)</th>
<td>
<div class="td-inner">
<c:choose>
<c:when test = "${not empty resultMap.result.age}">
<c:set var="birthDate" value="${resultMap.result.brthDe}"/>
<c:set var="year" value="${fn:substring(birthDate, 0, 4)}"/>
<c:set var="month" value="${fn:substring(birthDate, 4, 6)}"/>
<c:set var="formattedDate" value="${year}${month}"/>
<c:out value="${formattedDate}"/>
(<fmt:formatNumber value="${resultMap.result.age}" pattern="###"/>)
</c:when>
<c:otherwise>
없음
</c:otherwise>
</c:choose>
</div>
</td>
<th>성별</th>
<td>
<div class="td-inner">
<c:forEach var = "sex" items = "${resultMap.sex}">
<c:if test = "${sex.cd eq resultMap.result.sex}"><c:out value="${sex.cdNm}"/></c:if>
</c:forEach>
</div>
</td>
</tr>
<tr>
<th>광고수신동의</th>
<td>
<div class="td-inner">
<c:choose>
<c:when test = "${resultMap.result.marktRecptnAgreAt eq 'Y'}">
동의
</c:when>
<c:otherwise>
거부
</c:otherwise>
</c:choose>
<span class="stone-7"><c:out value="(최종 수정일 : ${resultMap.result.marktRecptnAgreUpdtDt})"/></span>
</div>
</td>
<th>관리매장 <a class="under-line url" onclick="fn_move_menu(this);" url="/itrnt/crm/mbr/selectMbrInfoUpdtInqire">(변경)</a></th>
<td>
<div class="td-inner">
<c:out value="${resultMap.pos.strNm}"/>
</div>
</td>
</tr>
<tr>
<th>주소</th>
<td colspan="3">
<div class="td-inner">
<c:choose>
<c:when test = "${not empty resultMap.result.zip}">
(<c:out value="${ resultMap.result.zip }"/>)
<c:choose>
<c:when test="${ resultMap.result.adresDv eq '01'}">
<c:out value="${ resultMap.result.rnmAdres }"/>
</c:when>
<c:when test="${ resultMap.result.adresDv eq '02'}">
<c:out value="${ resultMap.result.lnbAdres }"/>
</c:when>
</c:choose>
<c:out value="${resultMap.result.dtlAdres}"/>
</c:when>
<c:otherwise>
없음
</c:otherwise>
</c:choose>
</div>
</td>
</tr>
<tr>
<th>기본배송지</th>
<td colspan="3">
<div class="td-inner">
<c:choose>
<c:when test = "${not empty resultMap.result.dftDlvyAdresDv}">
(<c:out value="${ resultMap.result.dftDlvyZip }"/>)
<c:choose>
<c:when test="${ resultMap.result.dftDlvyAdresDv eq '01'}">
<c:out value="${ resultMap.result.dftDlvyRnmAdres }"/>
</c:when>
<c:when test="${ resultMap.result.dftDlvyAdresDv eq '02'}">
<c:out value="${ resultMap.result.dftDlvyLnbAdres }"/>
</c:when>
</c:choose>
<c:out value="${ resultMap.result.dftDlvyDtlAdres }"/>
</c:when>
<c:otherwise>
설정 안함
</c:otherwise>
</c:choose>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</form>
</section>
<section class="content-section">
<h3 class="content-section__title">활동 정보</h3>
<form id="listForm">
<div class="table-wrapper">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 10%;">
<col style="width: 15%;">
<col style="width: 10%;">
<col style="width: 15%;">
<col style="width: 10%;">
<col style="width: 15%;">
<col style="width: 10%;">
<col style="width: 15%;">
</colgroup>
<tbody>
<tr>
<th>마일리지</th>
<td>
<div class="td-inner">
<button type="button" class="blue-7 comma" onclick="fn_move_mlg_dtls();">
<c:choose>
<c:when test="${ not empty resultMap.actData.blceSum }">
<fmt:formatNumber value="${resultMap.actData.blceSum}" pattern="#,###"/>
</c:when>
<c:otherwise>
0
</c:otherwise>
</c:choose>
</button><span class="blue-7">원</span>
</div>
</td>
<th>쿠폰</th>
<td>
<div class="td-inner">
<button type="button" class="blue-7 comma" onclick="fn_move_coupon_dtls();">
<c:choose>
<c:when test="${ not empty resultMap.actData.dwldCouponInnbCnt }">
<c:out value=" ${ resultMap.actData.dwldCouponInnbCnt }"/>
</c:when>
<c:otherwise>
0
</c:otherwise>
</c:choose>
</button>
</div>
</td>
<th>방문수</th>
<td colspan="3">
<div class="td-inner">
<span class="comma">
<c:choose>
<c:when test="${ not empty resultMap.actData.conectLogInnbCnt }">
<c:out value=" ${ resultMap.actData.conectLogInnbCnt }"/>
</c:when>
<c:otherwise>
0
</c:otherwise>
</c:choose>
</span>회
</div>
</td>
</tr>
<tr>
<th>누적 실결제금액</th>
<td>
<div class="td-inner">
<span class="comma">
<c:choose>
<c:when test="${ not empty resultMap.actData.rlSetleAmtSum }">
<c:out value=" ${ resultMap.actData.rlSetleAmtSum }"/>
</c:when>
<c:otherwise>
0
</c:otherwise>
</c:choose>
</span>원
</div>
</td>
<th>누적 주문수</th>
<td>
<div class="td-inner">
<span class="comma">
<c:choose>
<c:when test="${ not empty resultMap.actData.ordrInnbCnt }">
<c:out value=" ${ resultMap.actData.ordrInnbCnt }"/>
</c:when>
<c:otherwise>
0
</c:otherwise>
</c:choose>
</span>회
</div>
</td>
<th>최근 로그인</th>
<td>
<div class="td-inner">
<p>
<c:out value=" ${ resultMap.actData.recentLoginDt }"/>
<br>
<span class="stone-7">
IP : <c:out value=" ${ resultMap.actData.conectIp }"/>
</span>
</p>
</div>
</td>
<th>최근 수정일</th>
<td>
<div class="td-inner">
<c:out value=" ${ resultMap.actData.updtDt }"/>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</form>
</section>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
<%-- CRM right 공통 --%>
<%@ include file="/WEB-INF/views/comm/itrnt/crm/Right.jsp" %>
</div>
</main>
<!-- 관리매장 변경 모달 -->
<div id="modalDiv">
</div>
</body>
</html>

View File

@@ -0,0 +1,101 @@
<%@ 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"%>
<%--
Class Name : ItrntCnsltDtlsRForm.jsp
Description : CRM 상담 내역 jsp
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-02-19 추지훈 최초 생성
--%>
<script>
$(document).ready(function() {
let selText = $('select[name="strInnb"] option:selected').text();
$('#strNmCheck').val(selText);
$('select[name="strInnb"]').change(function() {
var selectedOption = $(this).find('option:selected');
var selectedText = selectedOption.text();
$('.strNmCheck').val(selectedText);
});
});
</script>
<!-- 관리매장 변경 모달 -->
<div id="store-change-pop" class="modal" style="max-width: 600px; max-height: 1200px;">
<div class="modal-header">
<h4>관리매장 변경</h4>
</div>
<div class="modal-content" style="height: 300px;">
<div class="table-wrapper">
<form id="manageStrUpdtFrom">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 24%;">
<col>
</colgroup>
<tbody>
<tr>
<th>매장 변경</th>
<td>
<div class="td-inner vertical">
<div class="select-box">
<select title="해당 셀렉트에 대한 설명" id="selectStrInnb" onchange="fn_change_str_change();">
<c:choose>
<c:when test="${ not empty resultMap.mbrPosStr}">
<option value="">쇼핑몰[PC]</option>
<c:forEach var="list" items="${ resultMap.resultList }" varStatus="status">
<c:choose>
<c:when test="${ list.strInnb eq resultMap.mbrPosStr.strInnb }">
<option value="<c:out value="${ list.strInnb }"/>" selected="selected">${ list.tentcpnNm }</option>
</c:when>
<c:otherwise>
<option value="<c:out value="${ list.strInnb }"/>">${ list.tentcpnNm }</option>
</c:otherwise>
</c:choose>
</c:forEach>
</c:when>
<c:otherwise>
<option value="">쇼핑몰[PC]</option>
<c:forEach var="list" items="${ resultMap.resultList }" varStatus="status">
<option value="<c:out value="${ list.strInnb }"/>">${ list.tentcpnNm }</option>
</c:forEach>
</c:otherwise>
</c:choose>
</select>
</div>
<input class="input-text full strNmCheck" type="text" title="해당 인풋에 대한 설명" placeholder="" name="strNm" value="" readonly>
<input type="hidden" name="mbrInnb" value="<c:out value="${ resultMap.paramVO.mbrInnb }"/>"/>
<input type="hidden" name="mbrDvCd" value="<c:out value="${ resultMap.paramVO.mbrDvCd }"/>"/>
<input type="hidden" name="beforeStrNm" value="<c:out value="${ resultMap.mbrPosStr.strNm}"/>"/>
<input type="hidden" name="extrlIntrlckSnb" value="<c:out value="${ resultMap.mbrPosStr.extrlIntrlckSnb}"/>"/>
</div>
</td>
</tr>
</tbody>
</table>
</form>
</div>
</div>
<div class="modal-footer">
<a href="#" rel="modal:close" class="btn outline" id="StrCloseBtn">닫기</a>
<button class="btn outline primary" type="button" onclick="fn_manage_str_change();" >적용</button>
</div>
</div>

View File

@@ -0,0 +1,228 @@
<%@ 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"%>
<%--
Class Name : ItrntMbrActInfoInqireR.jsp
Description : CRM 회원 활동 정보 jsp
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-02-19 추지훈 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%@include file="/WEB-INF/views/comm/crm/Include.jsp" %>
<script>
$(document).ready(function() {
//crm 정보 조회
fn_get_itrnt_crm_info($("#leftMbrInnb").val(), $("#leftMbrDvCd").val(),$("#leftSopmalCd").val());
fn_add_crm_menu_class("leftActInfo");
});
</script>
</head>
<body>
<%@ include file="/WEB-INF/views/comm/itrnt/crm/Header.jsp"%>
<main class="main">
<%-- CRM left 공통 --%>
<%@ include file="/WEB-INF/views/comm/itrnt/crm/Left.jsp"%>
<div class="content">
<div class="content__inner">
<button class="side-nav__fold"><span class="visually-hidden">좌측메뉴 펼치기/닫기</span></button>
<div class="page-title">
<h2 class="page-title__title">활동 정보</h2>
<div class="page-title__btn-container">
</div>
</div>
<section class="content-section">
<h3 class="content-section__title">활동 정보</h3>
<form id="listForm">
<input type="hidden" id="mbrInnb" name="mbrInnb" value="<c:out value="${cnsltVO.mbrInnb}"/>"/>
<input type="hidden" id="mbrDvCd" name="mbrDvCd" value="<c:out value="${cnsltVO.mbrDvCd}"/>"/>
<div class="table-wrapper">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 10%;">
<col style="width: 15%;">
<col style="width: 10%;">
<col style="width: 15%;">
<col style="width: 10%;">
<col style="width: 15%;">
<col style="width: 10%;">
<col style="width: 15%;">
</colgroup>
<tbody>
<tr>
<th>마일리지</th>
<td>
<div class="td-inner">
<button type="button" class="blue-7 comma" onclick="fn_move_mlg_dtls();">
<c:choose>
<c:when test="${ not empty resultMap.result.blceSum }">
<fmt:formatNumber value="${resultMap.result.blceSum}" pattern="#,###"/>
</c:when>
<c:otherwise>
0
</c:otherwise>
</c:choose>
</button><span class="blue-7">원</span>
</div>
</td>
<th>쿠폰</th>
<td>
<div class="td-inner">
<button type="button" class="blue-7 comma" onclick="fn_move_coupon_dtls();">
<c:choose>
<c:when test="${ not empty resultMap.result.dwldCouponInnbCnt }">
<c:out value=" ${ resultMap.result.dwldCouponInnbCnt }"/>
</c:when>
<c:otherwise>
0
</c:otherwise>
</c:choose>
</button>
</div>
</td>
<th>방문수</th>
<td colspan="3">
<div class="td-inner">
<span class="comma">
<c:choose>
<c:when test="${ not empty resultMap.result.conectLogInnbCnt }">
<c:out value=" ${ resultMap.result.conectLogInnbCnt }"/>
</c:when>
<c:otherwise>
0
</c:otherwise>
</c:choose>
</span>회
</div>
</td>
</tr>
<tr>
<th>누적 실결제금액</th>
<td>
<div class="td-inner">
<span class="comma">
<c:choose>
<c:when test="${ not empty resultMap.result.rlSetleAmtSum }">
<c:out value=" ${ resultMap.result.rlSetleAmtSum }"/>
</c:when>
<c:otherwise>
0
</c:otherwise>
</c:choose>
</span>원
</div>
</td>
<th>누적 주문수</th>
<td>
<div class="td-inner">
<span class="comma">
<c:choose>
<c:when test="${ not empty resultMap.result.ordrInnbCnt }">
<c:out value=" ${ resultMap.result.ordrInnbCnt }"/>
</c:when>
<c:otherwise>
0
</c:otherwise>
</c:choose>
</span>회
</div>
</td>
<th>최근 로그인</th>
<td>
<div class="td-inner">
<p>
<c:out value=" ${ resultMap.result.recentLoginDt }"/>
<br>
<span class="stone-7">
IP : <c:out value=" ${ resultMap.result.conectIp }"/>
</span>
</p>
</div>
</td>
<th>최근 수정일</th>
<td>
<div class="td-inner">
<c:out value=" ${ resultMap.result.updtDt }"/>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</form>
</section>
<div class="content-section__col-5-container">
<section class="content-section" style="grid-column: 1 / span 2;">
<h3 class="content-section__title">고객 데이터
</h3>
<div class="table-wrapper">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 50%;">
<col>
<col style="width: 20%;">
</colgroup>
<tbody>
<tr>
<th>장바구니에 담은 상품</th>
<td class="text-center border-right">
<c:out value="${ resultMap.acttData.cartCnt }"/>건
</td>
<td>
<div class="manage-btn-container">
<button type="button" class="btn xsm gray" onclick="fn_select_cart_list();">조회</button>
</div>
</td>
</tr>
<tr>
<th>위시리스트에 담은 상품</th>
<td class="text-center border-right">
<c:out value="${ resultMap.acttData.wishListCnt }"/>건
</td>
<td>
<div class="manage-btn-container">
<button type="button" class="btn xsm gray" onclick="fn_select_wish_list();">조회</button>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</section>
<section class="content-section" style="grid-column: 3 / span 3;" >
<div id="mbrDataDiv">
</div>
</section>
</div>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
<%-- CRM right 공통 --%>
<%@ include file="/WEB-INF/views/comm/itrnt/crm/Right.jsp"%>
</div>
</main>
</body>
</html>

View File

@@ -0,0 +1,259 @@
<%@ 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="ui" uri="http://www.winbit.kr/ctl/ui" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ page import="java.util.Date" %>
<%--
Class Name : ItrntMbrCrmInfoPopupR.jsp
Description :
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-02-19 추지훈
--%>
<script>
$(document).ready(function() {
fn_add_crm_menu_class("leftLog");
$("#crmMbtlnb").text(fn_format_mbtlnb($("#crmMbtlnb").text()));
});
/*상담*/
if (typeof fn_move_cnslt === 'undefined') {
function fn_move_cnslt () {
$("#crmInfoForm").attr("action", "/itrnt/crm/mbr/selectCstmrInfoInqire");
fn_open_window();
}
}
/*새창으로 submit*/
if (typeof fn_open_window === 'undefined') {
function fn_open_window () {
const form = $("#crmInfoForm");
const url = form.attr('action');
const formData = form.serialize(); // 폼 데이터 직렬화
// 새 창 생성
const newWindow = window.open('', '_blank');
// 새 창에서 폼 데이터를 제출
const newForm = $('<form>', {
action: url,
method: form.attr('method'),
target: '_self',
});
// 직렬화된 데이터를 숨은 입력 필드로 변환
formData.split('&').forEach(pair => {
const [name, value] = pair.split('=');
$('<input>', {
type: 'hidden',
name: decodeURIComponent(name),
value: decodeURIComponent(value)
}).appendTo(newForm);
});
// 새 창의 문서에 폼 추가 및 제출
$(newWindow.document.body).append(newForm);
newForm.submit();
}
}
</script>
<!-- 고객 CRM 정보 -->
<!-- 버튼의 data-info값과 id를 통일시켜야함 -->
<div id="info01" class="mini-info-content" style="width: 450px; ">
<div class="mini-info-content__header">
<h5 class="mini-info-content__title">고객 CRM</h5>
<button type = "button" class="mini-info-content__close" onclick="$('#info01').hide();"><span class="visually-hidden">닫기</span></button>
</div>
<div class="mini-info-content__content">
<form id="crmInfoForm">
<input type="hidden" id="mbrInnb" name="mbrInnb" value="<c:out value="${resultMap.paramVO.mbrInnb}"/>"/>
<input type="hidden" id="mbrDvCd" name="mbrDvCd" value="<c:out value="${resultMap.paramVO.mbrDvCd}"/>"/>
<input type="hidden" id="sopmalCd" name="sopmalCd" value=""/>
</form>
<div class="table-wrapper">
<table class="table vertical">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 26%;">
<col style="width: 24%;">
<col style="width: 25%;">
<col style="width: 25%;">
</colgroup>
<tbody>
<tr>
<th>이름</th>
<td><c:out value="${resultMap.result.mbrNm}"/></td>
<th>아이디</th>
<td>
<c:choose>
<c:when test="${resultMap.result.joinMthCd eq 'kakao'}"><%--kakao--%>
<i class="icon icon_word-badge_kakao"></i>
</c:when>
<c:when test="${resultMap.result.joinMthCd eq 'naver'}"><%--naver--%>
<i class="icon icon_word-badge08"></i>
</c:when>
<c:when test="${resultMap.result.joinMthCd eq 'pos'}"><%--pos--%>
<i class="icon icon_word-badge_pos"></i>
<span class="fw-500 blue-7">
<c:out value="${resultMap.result.mbrId}"/>
</span>
</c:when>
<c:otherwise>
<span><c:out value="${resultMap.result.mbrId}"/></span>
</c:otherwise>
</c:choose>
</td>
</tr>
<tr>
<th>핸드폰번호</th>
<td colspan="3" id="crmMbtlnb"><c:out value="${resultMap.result.mbtlnb}"/></td>
</tr>
<tr>
<th>이메일</th>
<td colspan="3"><c:out value="${resultMap.result.email}"/></td>
</tr>
<c:if test="${resultMap.shopInfo.ordrSetupInfo.cashAt eq 'Y'}">
<tr>
<th>GC머니</th>
<td colspan="3">
<c:out value="${resultMap.result.mbrCashAmt}"/>
</td>
</tr>
</c:if>
<tr>
<th>마일리지</th>
<td>
<c:choose>
<c:when test="${ not empty resultMap.result.blceSum}">
<fmt:formatNumber value="${resultMap.result.blceSum}" pattern="#,###"/>
</c:when>
<c:otherwise>
0
</c:otherwise>
</c:choose>
</td>
<th>입금대기</th>
<td>
<c:choose>
<c:when test="${ not empty resultMap.acttData.resultCnt.unprocessedDeposit }">
<c:out value=" ${ resultMap.acttData.resultCnt.unprocessedDeposit }"/>
</c:when>
<c:otherwise>
0
</c:otherwise>
</c:choose>
</td>
</tr>
<tr>
<th>쿠폰</th>
<td>
<c:choose>
<c:when test="${ not empty resultMap.result.dwldCouponInnbCnt }">
<c:out value=" ${ resultMap.result.dwldCouponInnbCnt }"/>
</c:when>
<c:otherwise>
0
</c:otherwise>
</c:choose>
장
</td>
<th>미처리 출고</th>
<td>
<c:choose>
<c:when test="${ not empty resultMap.acttData.resultCnt.unprocessedRelease }">
<c:out value=" ${ resultMap.acttData.resultCnt.unprocessedRelease }"/>
</c:when>
<c:otherwise>
0
</c:otherwise>
</c:choose>
</td>
</tr>
<tr>
<th>미처리 상담</th>
<td>
<c:choose>
<c:when test="${ not empty resultMap.acttData.resultCnt.unprocessedCnslt }">
<c:out value=" ${ resultMap.acttData.resultCnt.unprocessedCnslt }"/>
</c:when>
<c:otherwise>
0
</c:otherwise>
</c:choose>
</td>
<th>미처리 반품/환불(취소)</th>
<td>
<c:choose>
<c:when test="${ not empty resultMap.acttData.resultCnt.unprocessedRefund }">
<c:out value=" ${ resultMap.acttData.resultCnt.unprocessedRefund }"/>
</c:when>
<c:otherwise>
0
</c:otherwise>
</c:choose>
</td>
</tr>
<tr>
<th>사용중인 SNS 또는 POS</th>
<td>
<c:choose>
<c:when test="${not empty resultMap.sns}">
<c:forEach var="sms" items="${resultMap.sns}">
<c:if test="${sms.extrlIntrlckDvCd eq '01'}">
<c:set var = "kakao" value = "true"/>
</c:if>
<c:if test="${sms.extrlIntrlckDvCd eq '02'}">
<c:set var = "naver" value = "true"/>
</c:if>
<c:if test="${sms.extrlIntrlckDvCd eq '03'}">
<c:set var = "pos" value = "true"/>
</c:if>
</c:forEach>
</c:when>
<c:otherwise>
<c:set var = "none" value = "없음"/>
</c:otherwise>
</c:choose>
<c:if test="${kakao eq 'true'}">
<i class="icon icon_word-badge_kakao"></i>
</c:if>
<c:if test="${naver eq 'true'}">
<i class="icon icon_word-badge_naver"></i>
</c:if>
<c:if test="${pos eq 'true'}">
<i class="icon icon_word-badge_pos"></i>
</c:if>
<c:out value="${none}"/>
</td>
<th>
미처리 상품문의
</th>
<td>
<c:choose>
<c:when test="${ not empty resultMap.acttData.resultCnt.unprocessedQna }">
<c:out value=" ${ resultMap.acttData.resultCnt.unprocessedQna }"/>
</c:when>
<c:otherwise>
0
</c:otherwise>
</c:choose>
</td>
</tr>
</tbody>
</table>
</div>
<div class="form-control-container">
<div class="left"></div>
<div class="center">
<button type="button" class="btn primary" onclick="fn_move_cnslt('<c:out value="${resultMap.paramVO.mbrInnb}"/>','<c:out value="${resultMap.paramVO.mbrDvCd}"/>','<c:out value="${cnsltVO.tentGroup}"/>');">CRM 이동</button>
</div>
<div class="right">
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,400 @@
<%@ 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"%>
<%--
Class Name : ItrntMbrInfoUpdtU.jsp
Description : 회원 수정 jsp
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-12-09 김혜인 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%@include file="/WEB-INF/views/comm/crm/Include.jsp" %>
<script>
$(document).ready(function () {
//crm 정보 조회
fn_get_itrnt_crm_info($("#leftMbrInnb").val(), $("#leftMbrDvCd").val(),$("#leftSopmalCd").val());
//휴대폰 포매팅
$("#mbtlnb").val(fn_format_mbtlnb($("#mbtlnb").val()));
});
/* ********************************************************
* 회원 정보 수정
******************************************************** */
const fn_update = function () {
const data = $('#mbrInfoUpdtForm').serialize();
if (confirm('회원 정보를 <spring:message code="confirm.common.update"/>')) {
$.ajax({
type: 'post',
url: '<c:url value="/itrnt/crm/mbr/updateMbrInfoUpdt"/>',
data: data,
success: function (result) {
alert('<spring:message code="success.common.update"/>');
fn_move_crm_mbr_update();
}
});
}
}
/* ********************************************************
* CRM 회원 정보 수정 이동
******************************************************** */
const fn_move_crm_mbr_update = function () {
$('#mbrInfoUpdtForm').attr('action', '<c:url value="/itrnt/crm/mbr/selectCstmrInfoInqire"/>');
$('#mbrInfoUpdtForm').attr('method', 'post');
$('#mbrInfoUpdtForm').submit();
}
/**************************************************************
* 모달팝업 열기
****************************************************************/
const fn_open_modal_str_change = function () {
const modalDivSltr = '#modalDiv';
const modalSlrt = '#store-change-pop';
const url = '<c:out value="/itrnt/crm/mbr/selectManageStrChngPopupForm"/>';
$.ajax({
type: "POST",
url: url,
data: {
mbrInnb: $("#leftMbrInnb").val(),
mbrDvCd: $("#leftMbrDvCd").val(),
sopmalCd: $("#leftSopmalCd").val()
},
success: function (data) {
$(modalSlrt).remove();
$(modalDivSltr).html(data);
$(modalSlrt).modal();
fn_set_niceSelect_datePicker("#store-change-pop");
}
});
}
/*************************************************
* 관리 매장 변경
* ***********************************************/
const fn_manage_str_change = function (modalId) {
//값 set
$("#strNmCheck").val($("#selectStrInnb :selected").text());
$("#afterStrInnb").val($("#selectStrInnb").val())
$("#StrCloseBtn").click();
}
const fn_change_str_change = function () {
//값 set
$(".strNmCheck").val($("#selectStrInnb :selected").text());
}
/* ********************************************************
* 휴대폰 인증 카운터
******************************************************** */
let seconds;
let countdown;
let timerRunning = false;
const fn_set_timeOut = function () {
if (seconds >= 0) {
const minutes = Math.floor(seconds / 60).toString().padStart(2, '0');
const remainingSeconds = (seconds % 60).toString().padStart(2, '0');
$('#timer').text(minutes + ":" + remainingSeconds);
seconds--;
} else {
fn_stop_timer();
fn_alert_show('인증번호 유효시간이 만료되었습니다.');
}
}
/* ********************************************************
* 휴대폰 인증 번호 발송
******************************************************** */
first = 0;
mbtlCert = '';
const fn_sending_number = function (reAt) {
$("#mbtlCert").val("");
if(fn_is_empty($("#mbtlnb").val())){
alert("핸드폰번호를 입력해주세요");
$("#mbtlnb").focus();
return false;
}
if (timerRunning && reAt !== 'Y' && reAt < 2) {
return;
}
if (mbtlCert === $('#mbtlnb').val()) {
first++;
} else {
first = 0;
}
mbtlCert = $('#mbtlnb').val();
let mbrNm = $('#mbrNm').val();
let mbtlnb = $('#mbtlnb').val().trim().replace(/-/g, '');
let params = {
'mbrNm': mbrNm,
'mbtlnb': mbtlnb,
'sopmalCd': $("#leftSopmalCd").val()
};
$.ajax({
type: 'post',
url: '<c:url value="/itrnt/crm/mbr/insertPhoneAuth"/>',
data: params,
success: function (Data) {
let result = JSON.parse(Data.resBody.result);
if (result.result == "success") {
if (reAt !== 'Y') {
$("#mbtlnbAuthBtn").click();
$("#mbtlnbTxt").text(fn_format_mbtlnb($("#mbtlnb").val()));
first++;
} else {
alert("재전송되었습니다.");
}
$('#sndngInnb').val(result.sndngInnb);
} else {
alert("인증번호 발송에 실패했습니다.");
fn_stop_timer();
return;
}
}
});
clearInterval(countdown);
seconds = 180;
fn_set_timeOut();
countdown = setInterval(fn_set_timeOut, 1000);
timerRunning = true;
}
/* ********************************************************
* 타이머 정지 함수
******************************************************** */
const fn_stop_timer = function () {
if (timerRunning) {
clearInterval(countdown);
$('#timer').text('03:00');
$('#mbtlCert').val('');
timerRunning = false;
}
}
/* ********************************************************
* 휴대폰 인증 확인
******************************************************** */
let isChkd_own = false;
const fn_confim_own = function () {
if (first <= 0) return;
let sndngInnb = $('#sndngInnb').val();
let mbtlnb = $('#mbtlnb').val().trim().replace(/-/g, '');
let crtnb = $('#mbtlCert').val();
fn_stop_timer();
let params = {
'sndngInnb': sndngInnb,
'mbtlnb': mbtlnb,
'crtnb': crtnb
};
$.ajax({
type: 'post',
url: '<c:url value="/itrnt/crm/mbr/selectPhoneAuth"/>',
data: params,
success: function (Data) {
let result = JSON.parse(Data.resBody.result);
if (result.result == "success") {
isChkd_own = true;
alert('인증되었습니다.');
$("#authClose").click();
$("#auth").hide();
$("#updt").show();
} else {
alert('인증번호가 일치하지 않습니다.');
return;
}
}
});
}
const fn_reset_own = () => {
const tentGroup = '<c:out value="${cnsltVO.tentGroup}"/>';
if(tentGroup === '02'){
$("#auth").show();
$("#updt").hide();
isChkd_own = false;
}
}
</script>
</head>
<!-- 핸드폰 인증(입력) 모달 -->
<div id="phone-auth-02" class="modal" style="max-width: 480px;">
<div class="modal-header">
<h4>핸드폰 인증</h4>
</div>
<div class="modal-content" style="height: 220px;">
<div class="phoneAuth">
<p class="phoneAuth__text"><span id="mbtlnbTxt"></span>로 인증번호가 전송되었습니다.</p>
<div class="phoneAuth__inputBox input-container gap-4">
<input class="input-text text-left" type="number" title="해당 인풋에 대한 설명" placeholder="인증번호" id="mbtlCert">
<button class="btn sm primary" onclick="fn_confim_own();"><spring:message code="button.ok"/></button>
<a href="#" rel="modal:close" id="authClose"></a>
</div>
<input type = "hidden" id = "sndngInnb"/>
<div class="phoneAuthTimer">
<div class="phoneAuthTimer__left">
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none">
<path
d="M12 0C5.38125 0 0 5.38125 0 12C0 18.6187 5.38125 24 12 24C18.6187 24 24 18.6187 24 12C24 5.38125 18.6187 0 12 0ZM17.4422 13.6547H11.7656C11.7563 13.6547 11.7422 13.6547 11.7328 13.6547C11.7234 13.6547 11.7094 13.6547 11.7 13.6547C11.1422 13.6547 10.6875 13.2 10.6875 12.6422V4.39219C10.6875 3.83437 11.1422 3.37969 11.7 3.37969C12.2578 3.37969 12.7125 3.83437 12.7125 4.39219V11.625H17.4469C18.0047 11.625 18.4594 12.0797 18.4594 12.6375C18.4594 13.1953 18 13.6547 17.4422 13.6547Z"
fill="#D4D4D4" />
</svg>
<span class="phoneAuthTimer__title">남은시간</span>
<span class="phoneAuthTimer__time" id ="timer">00:00</span>
</div>
<button type="button" class="phoneAuthTimer__resend" onclick="fn_sending_number('Y');">재전송</button>
</div>
</div>
</div>
</div>
<body>
<%@ include file="/WEB-INF/views/comm/itrnt/crm/Header.jsp"%>
<main class="main">
<%-- CRM left 공통 --%>
<%@ include file="/WEB-INF/views/comm/itrnt/crm/Left.jsp"%>
<div class="content">
<div class="content__inner">
<button class="side-nav__fold"><span class="visually-hidden">좌측메뉴 펼치기/닫기</span></button>
<div class="page-title">
<h2 class="page-title__title">회원 정보 수정</h2>
<div class="page-title__btn-container">
<c:choose>
<c:when test = "${cnsltVO.tentGroup eq '02' and itrntDv ne '02'}">
<a href="#phone-auth-02" rel="modal:open" id="mbtlnbAuthBtn"></a>
<button class="btn sm primary" id="auth" onclick="fn_sending_number();">휴대폰 인증</button>
<button class="btn sm primary" id="updt" onclick="fn_update();" style="display: none"><spring:message code="button.update"/></button>
</c:when>
<c:otherwise><%--관리자페이지에서 로그인 시--%>
<button class="btn sm primary" id="updt" onclick="fn_update();"><spring:message code="button.update"/></button>
</c:otherwise>
</c:choose>
</div>
</div>
<form id="mbrInfoUpdtForm" name="mbrInfoUpdtForm">
<input type="hidden" id="mbrInnb" name="mbrInnb" value="<c:out value="${ resultMap.result.mbrInnb }"/>" />
<input type="hidden" id="mbrDvCd" name="mbrDvCd" value="<c:out value="${ resultMap.result.mbrDvCd }"/>" />
<input type="hidden" id="sexdstn" name="sex" value="<c:out value="${ resultMap.result.sex }"/>" />
<input type="hidden" id="email" name="email" value="<c:out value="${ resultMap.result.email }"/>" />
<input type="hidden" name="beforeMarktRecptnAgreAt" value="<c:out value="${ resultMap.result.marktRecptnAgreAt }"/>" />
<input type="hidden" name="marktRecptnAgreAt" value="<c:out value="${ resultMap.result.marktRecptnAgreAt }"/>" />
<input type="hidden" name="extrlIntrlckSnb" value="<c:out value="${ resultMap.pos.extrlIntrlckSnb}"/>" />
<input type="hidden" id="sopmalCd" name="sopmalCd" value="<c:out value="${cnsltVO.sopmalCd}"/>" />
<section class="content-section">
<h3 class="content-section__title">
개인 정보
</h3>
<div class="table-wrapper">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 15%;">
<col>
</colgroup>
<tbody>
<tr>
<th>관리매장</th>
<td>
<div class="td-inner">
<c:set var = "strNm" value = '없음'/>
<c:if test = "${not empty resultMap.pos.strNm}">
<c:set var = "strNm" value = '${resultMap.pos.strNm}'/>
</c:if>
<input class="input-text lg" id = "strNmCheck" type="text" title="해당 인풋에 대한 설명" value="${strNm}" name="strNm" readonly>
<button type="button" onclick="fn_open_modal_str_change();" class="btn outline xsm">관리매장 변경</button>
</div>
</td>
<input type="hidden" name="beforeStrNm" value="<c:out value="${resultMap.pos.strNm}"/>"/>
<input type="hidden" name="strInnb" id="afterStrInnb" value="<c:out value="${resultMap.pos.strInnb}"/>"/>
<input type="hidden" name="extrlIntrlckSnb" value="<c:out value="${resultMap.pos.extrlIntrlckSnb}"/>"/>
</tr>
<tr>
<th>이름</th>
<td>
<div class="td-inner">
<input class="input-text sm" type="text" id="mbrNm" name="mbrNm" title="회원명" value="<c:out value="${ resultMap.result.mbrNm }"/>">
</div>
</td>
</tr>
<tr>
<th>핸드폰</th>
<td>
<div class="td-inner">
<input class="input-text" type="text" id="mbtlnb" name="mbtlnb" title="휴대폰번호" oninput="fn_fmt_telno($(this)); fn_reset_own();" value="<c:out value="${ resultMap.result.mbtlnb }"/>" maxlength="13">
</div>
</td>
</tr>
<tr>
<th>생일</th>
<td>
<div class="td-inner">
<div class="select-box" id="selectBoxDiv" >
<jsp:useBean id="now" class="java.util.Date" />
<fmt:formatDate var="year" value="${now}" pattern="yyyy" />
<select id="birthdayYear" name="brthDe">
<c:forEach var="i" begin="0" end="101" >
<c:choose>
<c:when test="${ (year-i) eq fn:substring( resultMap.result.brthDe,0, 4 ) }">
<option value="<c:out value="${ year-i }"/>" selected="selected"><c:out value="${ year-i }"/></option>
</c:when>
<c:otherwise>
<option value="<c:out value="${ year-i }"/>"><c:out value="${ year-i }"/></option>
</c:otherwise>
</c:choose>
</c:forEach>
</select>
</div>
<span class="mr-10">년</span>
<div class="select-box">
<select class="short2" id="birthdayMonth" name="brthDe" title="시간설정 셀렉트박스">
<c:forEach var="month" begin="1" end="12" >
<c:choose>
<c:when test="${ month eq fn:substring( resultMap.result.brthDe,4, 6 ) }">
<option value="<c:if test="${ month lt 10 }">0</c:if><c:out value="${ month }"/>" selected="selected"><c:if test="${ month lt 10 }">0</c:if><c:out value="${ month }"/></option>
</c:when>
<c:otherwise>
<option value="<c:if test="${ month lt 10 }">0</c:if><c:out value="${ month }"/>"><c:if test="${ month lt 10 }">0</c:if><c:out value="${ month }"/></option>
</c:otherwise>
</c:choose>
</c:forEach>
</select>
</div>
<span>월</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</section>
</form>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
<%-- CRM right 공통 --%>
<%@ include file="/WEB-INF/views/comm/itrnt/crm/Right.jsp"%>
</div>
<div id ="modalDiv"></div>
</main>
</html>

View File

@@ -0,0 +1,138 @@
<%@ 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"%>
<%--
Class Name : ItrntMlgDtlsRForm.jsp
Description : CRM 마일리지 내역 jsp
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-02-19 추지훈 최초 생성
--%>
<script>
$(document).ready(function() {
fn_set_date();
});
</script>
<section class="content-section">
<div class="form-control-container">
<div class="left">
<div class="search-number">
<span class="search-number__text">총 <strong><c:out value="${ resultMap.paginationInfo.totalRecordCount }"/></strong>건</span>
</div>
</div>
<div class="center">
</div>
<div class="right">
<div class="select-box">
<select id="pageUnit" name="pageUnit" title="페이지당 출력될 목록건수" onchange="fn_select_crm_mlg_list(1);">
<c:forEach items="${ resultMap.paginationInfo.pageUnitArr }" var="pageUnit" varStatus="pageUnitStatus">
<option value="<c:out value="${ pageUnit }"/>" <c:if test="${ resultMap.paginationInfo.recordCountPerPage eq pageUnit}">selected="selected"</c:if>><c:out value="${ pageUnit }"/>개씩</option>
</c:forEach>
</select>
</div>
</div>
</div>
<hr class="horizontal-line">
<div class="form-control-container">
<div class="left">
<div class="gray-10">
<span><c:out value="${resultMap.mbrInfo.mbrNm}"/></span>님의 보유 GC 머니
<span class="blue-7 comma">
<c:if test="${!empty resultMap.blce}">
<fmt:formatNumber value="${resultMap.blce}" maxFractionDigits="0"/>
</c:if>
<c:if test="${empty resultMap.blce}">
<fmt:formatNumber value="0" maxFractionDigits="0"/>
</c:if>
</span>원
</div>
</div>
<div class="center">
</div>
<div class="right">
</div>
</div>
<hr class="spacing">
<div class="table-wrapper overflow-x-auto">
<table class="table vertical tight">
<caption>해당 테이블에 대한 설명</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 5%;">
<col style="width: auto;">
<col style="width: auto;">
<col style="width: auto;">
<col style="width: auto;">
<col style="width: auto;">
<col style="width: auto;">
</colgroup>
<thead>
<tr>
<th>번호</th>
<th>브랜드</th>
<th>지급/차감 금액</th>
<th>잔액</th>
<th>사유</th>
<th>내역</th>
<th>등록일</th>
</tr>
</thead>
<tbody id="mlgListBody">
<c:choose>
<c:when test="${!empty resultMap.cashList}">
<c:forEach var="crmMlg" items="${ resultMap.cashList }" varStatus="status">
<tr>
<td><c:out value="${ resultMap.paginationInfo.totalRecordCount - crmMlg.rnum + 1 }"/></td>
<td><c:out value="${ crmMlg.sopmalNm }"/></td>
<td>
<span class="comma">
<fmt:formatNumber value="${crmMlg.accmlmnyAmt}"
maxFractionDigits="0"/>
</span>
</td>
<td>
<span class="comma fw-500">
<fmt:formatNumber value="${crmMlg.blce}"
maxFractionDigits="0"/>
</span>
</td>
<td><c:out value="${crmMlg.mlgApplcResn}"/></td>
<td>
<button class="blue-6 fw-500" type="button"
onclick="fn_go_ordr_dtl('<c:out value="${ crmMlg.ordrInnb }"/>');">
<c:out value="${ crmMlg.ordrInnb }"/></button>
</td>
<td>
<fmt:parseDate value="${crmMlg.registDt}" pattern="yyyy-MM-dd'T'HH:mm:ss"
var="registDt"/>
<fmt:formatDate value="${registDt }" var="formattedRegistDt"
pattern="yyyy-MM-dd HH:mm:ss"/>
<c:out value="${ formattedRegistDt }"/>
</td>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
<tr>
<td class="row-no-data" colspan="12">조회된 데이터가 없습니다.</td>
</tr>
</c:otherwise>
</c:choose>
</tbody>
</table>
</div>
</section>
<div class="pagination__container">
<ui:pagination paginationInfo="${resultMap.paginationInfo}" type="image" jsFunction="fn_select_crm_mlg_list"/>
</div>
<div id = "mlgManagePopupDiv"></div>
<script src="/admin/js/script.js" defer=""></script>

View File

@@ -0,0 +1,189 @@
<%@ 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"%>
<%--
Class Name : ItrntMlgDtlsRForm.jsp
Description : CRM 마일리지 내역 jsp
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-02-19 추지훈 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%@include file="/WEB-INF/views/comm/crm/Include.jsp" %>
<script>
$(document).ready(function() {
fn_set_date('srchStartDate','srchEndDate','srchEndDate');
$('#listForm').on('keydown', function(e) {
if (e.keyCode == 13) {
e.preventDefault();
$('#searchBtn').trigger("click");
}
});
//crm 정보 조회
fn_get_itrnt_crm_info($("#leftMbrInnb").val(), $("#leftMbrDvCd").val(),$("#leftSopmalCd").val());
let pageIndex = '<c:out value="${ resultMap.paramVO.pageIndex }"/>';
let pageUnit = '<c:out value="${ resultMap.paramVO.pageUnit }"/>';
console.log("pageIndex, pageUnit : ", pageIndex, pageUnit);
fn_select_crm_mlg_list(pageIndex, pageUnit);
$('#allDays').on('click', function() {
$('#srchStartDate, #srchEndDate').val('');
});
fn_add_crm_menu_class("leftMlg");
});
/******************************************************
* 마일리지 목록 조회
*******************************************************/
const fn_select_crm_mlg_list = function(pageIndex, pageUnit) {
let dataStr;
if(!pageIndex) {
$('#pageIndex').val(1);
} else {
$('#pageIndex').val(pageIndex);
}
if(!pageUnit) {
dataStr = $('#listForm').serialize();
} else {
if($('#pageUnit').length){
$('#pageUnit').val(pageUnit);
dataStr = $('#listForm').serialize();
} else {
dataStr = $('#listForm').serialize()+'&pageUnit='+pageUnit;
}
}
$('#pageIndex').val(pageIndex);
$.ajax({
type: "post",
url : "<c:url value="/itrnt/crm/mlg/selectCashDtlsInqire"/>",
data : dataStr,
success:function(resultHtml) {
$('#pageDiv').html(resultHtml);
$('#pageUnit').niceSelect();
}
});
};
</script>
</head>
<body>
<%@ include file="/WEB-INF/views/comm/itrnt/crm/Header.jsp"%>
<main class="main">
<%-- CRM left 공통 --%>
<%@ include file="/WEB-INF/views/comm/itrnt/crm/Left.jsp"%>
<div class="content">
<div class="content__inner">
<button class="side-nav__fold"><span class="visually-hidden">좌측메뉴 펼치기/닫기</span></button>
<div class="page-title">
<h2 class="page-title__title"> GC 머니 내역</h2>
<div class="page-title__btn-container">
</div>
</div>
<form id="listForm">
<input type="hidden" name="mbrInnb" id="mbrInnb" value="<c:out value='${ resultMap.paramVO.mbrInnb }'/>">
<input type="hidden" name="mbrDvCd" id="mbrDvCd" value="<c:out value='${ resultMap.paramVO.mbrDvCd }'/>">
<input type="hidden" name="sopmalCd" id="sopmalCd" value="<c:out value='${ resultMap.paramVO.sopmalCd }'/>">
<input type="hidden" id="pageIndex" name="pageIndex" value="<c:out value="${ resultMap.paramVO.pageIndex }"/>"/>
<section class="content-section" id="mlgSrchSection">
<div class="table-wrapper">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 12%;">
<col style="width: auto;">
</colgroup>
<tbody>
<tr>
<th>날짜</th>
<td>
<div class="td-inner">
<div class="input-container">
<input type="text" name="srchStartDate" id="srchStartDate" class="datepicker" title="시작 날짜 선택" autocomplete="off" pattern="yyyy-MM-dd">
<span class="tilde">~</span>
<input type="text" name="srchEndDate" id="srchEndDate" class="datepicker" title="종료 날짜 선택" autocomplete="off" pattern="yyyy-MM-dd">
</div>
<div class="dateRange-btnContainer">
<button type="button" class="dateRange-btn" id="yesterday" onclick="fn_set_date('srchStartDate','srchEndDate','srchEndDate','1D')">어제</button>
<button type="button" class="dateRange-btn" id="today" onclick="fn_set_date('srchStartDate','srchEndDate','srchEndDate','0')">오늘</button>
<button type="button" class="dateRange-btn" id="threeDays" onclick="fn_set_date('srchStartDate','srchEndDate','srchEndDate','3D')">3일간</button>
<button type="button" class="dateRange-btn" id="sevenDays" onclick="fn_set_date('srchStartDate','srchEndDate','srchEndDate','7D')">일주일</button>
<button type="button" class="dateRange-btn" id="oneMonth" onclick="fn_set_date('srchStartDate','srchEndDate','srchEndDate','1M')">1개월</button>
<button type="button" class="dateRange-btn" id="threeMonth" onclick="fn_set_date('srchStartDate','srchEndDate','srchEndDate','3M')">3개월</button>
<button type="button" class="dateRange-btn" id="sixMonth" onclick="fn_set_date('srchStartDate','srchEndDate','srchEndDate','6M')">6개월</button>
<button type="button" class="dateRange-btn" id="oneYear" onclick="fn_set_date('srchStartDate','srchEndDate','srchEndDate','1Y')">1년</button>
<button type="button" class="dateRange-btn selected" id="allDays">전체</button>
</div>
</div>
</td>
</tr>
<tr>
<th>구분</th>
<td>
<div class="td-inner">
<div class="select-box">
<select class="md" title="해당 셀렉트에 대한 설명"
name="srchMlgAccmlDvCd">
<option value="">전체</option>
<c:forEach var="cdList" items="${ resultMap.mlgAccmlDv }"
varStatus="status">
<c:if test="${cdList.cd eq 'add' || cdList.cd eq 'dn'}">
<option value="<c:out value="${ cdList.cd }"/>">
<c:out value="${ cdList.cdNm }"/></option>
</c:if>
</c:forEach>
</select>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="form-control-container">
<div class="left"></div>
<div class="center">
<button class="btn outline" id="resetBtn" type="button" onclick="fn_reset_form('mlgSrchSection'); return false;">초기화</button>
<button class="btn primary" id="searchBtn" type="button" onclick="fn_select_crm_mlg_list(1); return false;">검색</button>
</div>
<div class="right">
</div>
</div>
</section>
<div id="pageDiv">
</div>
</form>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
<%-- CRM right 공통 --%>
<%@ include file="/WEB-INF/views/comm/itrnt/crm/Right.jsp"%>
</div>
</main>
</body>
</html>

View File

@@ -0,0 +1,167 @@
<%@ 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"%>
<%--
Class Name : ItrntMlgDtlsRForm.jsp
Description : CRM 마일리지 내역 jsp
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-02-19 추지훈 최초 생성
--%>
<script>
$(document).ready(function() {
fn_set_date();
});
</script>
<section class="content-section">
<div class="form-control-container">
<div class="left">
<div class="search-number">
<span class="search-number__text">총 <strong><c:out value="${ resultMap.paginationInfo.totalRecordCount }"/></strong>건</span>
</div>
</div>
<div class="center">
</div>
<div class="right">
<div class="select-box">
<select id="pageUnit" name="pageUnit" title="페이지당 출력될 목록건수" onchange="fn_select_crm_mlg_list(1);">
<c:forEach items="${ resultMap.paginationInfo.pageUnitArr }" var="pageUnit" varStatus="pageUnitStatus">
<option value="<c:out value="${ pageUnit }"/>" <c:if test="${ resultMap.paginationInfo.recordCountPerPage eq pageUnit}">selected="selected"</c:if>><c:out value="${ pageUnit }"/>개씩</option>
</c:forEach>
</select>
</div>
</div>
</div>
<hr class="horizontal-line">
<div class="form-control-container">
<div class="left">
<div class="gray-10">
<span><c:out value="${resultMap.mbrInfo.mbrNm}"/></span>님의 보유 마일리지
<span class="blue-7 comma">
<c:if test="${!empty resultMap.blceSum}">
<fmt:formatNumber value="${resultMap.blceSum}" maxFractionDigits="0" />
</c:if>
<c:if test="${empty resultMap.blceSum}">
<fmt:formatNumber value="0" maxFractionDigits="0" />
</c:if>
</span>원, 30일 이내 소멸(예정) 마일리지
<span
class="red-7 comma">
<c:if test="${!empty resultMap.endInMnthBlceSum}">
<fmt:formatNumber value="${resultMap.endInMnthBlceSum}" maxFractionDigits="0" />
</c:if>
<c:if test="${empty resultMap.endInMnthBlceSum}">
<fmt:formatNumber value="0" maxFractionDigits="0" />
</c:if>
</span>원
</div>
</div>
<div class="center">
</div>
<div class="right">
</div>
</div>
<hr class="spacing">
<div class="table-wrapper overflow-x-auto">
<table class="table vertical tight">
<caption>해당 테이블에 대한 설명</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 5%;">
<col style="width: 10%;">
<col style="width: 12%;">
<col style="width: 7%;">
<col style="width: 7%;">
<col style="width: auto;">
<col style="width: 12%;">
<col style="width: 11%;">
<col style="width: 6%;">
<col style="width: 14%;">
</colgroup>
<thead>
<tr>
<th>번호</th>
<th>브랜드</th>
<th>매장</th>
<th>지급/차감 금액</th>
<th>잔액</th>
<th>사유</th>
<th>내역</th>
<th>지급일</th>
<th>자동/수동</th>
<th>유효기간</th>
</tr>
</thead>
<tbody id="mlgListBody">
<c:if test="${!empty resultMap.resultList}">
<c:forEach var="crmMlg" items="${ resultMap.resultList }" varStatus="status">
<tr>
<td><c:out value="${ resultMap.paginationInfo.totalRecordCount - crmMlg.rnum + 1 }" /></td>
<td><c:out value="${ crmMlg.sopmalNm }"/></td>
<td><c:out value="${ crmMlg.strnm }"/></td>
<td>
<c:if test="${ crmMlg.mlgAccmlDvCd eq 'use' or crmMlg.mlgAccmlDvCd eq '_add' or crmMlg.mlgAccmlDvCd eq 'dn'}">
<span class="stone-8">(-)</span>
</c:if>
<c:if test="${ crmMlg.mlgAccmlDvCd eq 'add' or crmMlg.mlgAccmlDvCd eq '_use' or crmMlg.mlgAccmlDvCd eq 'up'}">
<span class="stone-8">(+)</span>
</c:if>
<span class="comma">
<fmt:formatNumber value="${crmMlg.accmlmnyAmt}" maxFractionDigits="0" />
</span>
</td>
<td>
<span class="comma fw-500">
<fmt:formatNumber value="${crmMlg.blce}" maxFractionDigits="0" />
</span>
</td>
<td><c:out value="${ crmMlg.mlgApplcResn }"/></td>
<td>
<button class="blue-6 fw-500" type="button" onclick="fn_go_ordr_dtl('<c:out value="${ crmMlg.ordrInnb }"/>');">
<c:out value="${ crmMlg.ordrInnb }"/></button>
</td>
<td>
<fmt:parseDate value="${crmMlg.registDt}" pattern="yyyy-MM-dd'T'HH:mm:ss" var="registDt"/>
<fmt:formatDate value="${registDt }" var="formattedRegistDt" pattern="yyyy-MM-dd HH:mm:ss"/>
<c:out value="${ formattedRegistDt }"/>
</td>
<td>
<c:choose>
<c:when test="${crmMlg.mlgAccmlDvCd eq 'up' or crmMlg.mlgAccmlDvCd eq 'dn'}">
수동
</c:when>
<c:otherwise>
자동
</c:otherwise>
</c:choose>
<td>
<fmt:parseDate value="${crmMlg.usePosblEndDt}" pattern="yyyy-MM-dd HH:mm:ss" var="usePosblEndDt"/>
<fmt:formatDate value="${usePosblEndDt }" var="formattedUsePosblEndDt" pattern="yyyy-MM-dd"/>
<c:out value="${ formattedUsePosblEndDt }"/>
</td>
</tr>
</c:forEach>
</c:if>
<c:if test="${empty resultMap.resultList}">
<tr>
<td class="row-no-data" colspan="12">조회된 데이터가 없습니다.</td>
</tr>
</c:if>
</tbody>
</table>
</div>
</section>
<div class="pagination__container">
<ui:pagination paginationInfo="${resultMap.paginationInfo}" type="image" jsFunction="fn_select_crm_mlg_list"/>
</div>
<div id = "mlgManagePopupDiv"></div>
<script src="/admin/js/script.js" defer=""></script>

View File

@@ -0,0 +1,184 @@
<%@ 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"%>
<%--
Class Name : ItrntMlgDtlsRForm.jsp
Description : CRM 마일리지 내역 jsp
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-02-19 추지훈 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%@include file="/WEB-INF/views/comm/crm/Include.jsp" %>
<script>
$(document).ready(function() {
fn_set_date('srchStartDate','srchEndDate','srchEndDate');
$('#listForm').on('keydown', function(e) {
if (e.keyCode == 13) {
e.preventDefault();
$('#searchBtn').trigger("click");
}
});
//crm 정보 조회
fn_get_itrnt_crm_info($("#leftMbrInnb").val(), $("#leftMbrDvCd").val(),$("#leftSopmalCd").val());
let pageIndex = '<c:out value="${ resultMap.paramVO.pageIndex }"/>';
let pageUnit = '<c:out value="${ resultMap.paramVO.pageUnit }"/>';
console.log("pageIndex, pageUnit : ", pageIndex, pageUnit);
fn_select_crm_mlg_list(pageIndex, pageUnit);
$('#allDays').on('click', function() {
$('#srchStartDate, #srchEndDate').val('');
});
fn_add_crm_menu_class("leftMlg");
});
/******************************************************
* 마일리지 목록 조회
*******************************************************/
const fn_select_crm_mlg_list = function(pageIndex, pageUnit) {
let dataStr;
if(!pageIndex) {
$('#pageIndex').val(1);
} else {
$('#pageIndex').val(pageIndex);
}
if(!pageUnit) {
dataStr = $('#listForm').serialize();
} else {
if($('#pageUnit').length){
$('#pageUnit').val(pageUnit);
dataStr = $('#listForm').serialize();
} else {
dataStr = $('#listForm').serialize()+'&pageUnit='+pageUnit;
}
}
$('#pageIndex').val(pageIndex);
$.ajax({
type: "post",
url : "<c:url value="/itrnt/crm/mlg/selectMlgDtlsInqire"/>",
data : dataStr,
success:function(resultHtml) {
$('#pageDiv').html(resultHtml);
$('#pageUnit').niceSelect();
}
});
};
</script>
</head>
<body>
<%@ include file="/WEB-INF/views/comm/itrnt/crm/Header.jsp"%>
<main class="main">
<%-- CRM left 공통 --%>
<%@ include file="/WEB-INF/views/comm/itrnt/crm/Left.jsp"%>
<div class="content">
<div class="content__inner">
<button class="side-nav__fold"><span class="visually-hidden">좌측메뉴 펼치기/닫기</span></button>
<div class="page-title">
<h2 class="page-title__title">마일리지 내역</h2>
<div class="page-title__btn-container">
</div>
</div>
<form id="listForm">
<input type="hidden" name="mbrInnb" id="mbrInnb" value="<c:out value='${ resultMap.paramVO.mbrInnb }'/>">
<input type="hidden" name="mbrDvCd" id="mbrDvCd" value="<c:out value='${ resultMap.paramVO.mbrDvCd }'/>">
<input type="hidden" name="sopmalCd" id="sopmalCd" value="<c:out value='${ resultMap.paramVO.sopmalCd }'/>">
<input type="hidden" id="pageIndex" name="pageIndex" value="<c:out value="${ resultMap.paramVO.pageIndex }"/>"/>
<section class="content-section" id="mlgSrchSection">
<div class="table-wrapper">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 12%;">
<col style="width: auto;">
</colgroup>
<tbody>
<tr>
<th>날짜</th>
<td>
<div class="td-inner">
<div class="input-container">
<input type="text" name="srchStartDate" id="srchStartDate" class="datepicker" title="시작 날짜 선택" autocomplete="off" pattern="yyyy-MM-dd">
<span class="tilde">~</span>
<input type="text" name="srchEndDate" id="srchEndDate" class="datepicker" title="종료 날짜 선택" autocomplete="off" pattern="yyyy-MM-dd">
</div>
<div class="dateRange-btnContainer">
<button type="button" class="dateRange-btn" id="yesterday" onclick="fn_set_date('srchStartDate','srchEndDate','srchEndDate','1D')">어제</button>
<button type="button" class="dateRange-btn" id="today" onclick="fn_set_date('srchStartDate','srchEndDate','srchEndDate','0')">오늘</button>
<button type="button" class="dateRange-btn" id="threeDays" onclick="fn_set_date('srchStartDate','srchEndDate','srchEndDate','3D')">3일간</button>
<button type="button" class="dateRange-btn" id="sevenDays" onclick="fn_set_date('srchStartDate','srchEndDate','srchEndDate','7D')">일주일</button>
<button type="button" class="dateRange-btn" id="oneMonth" onclick="fn_set_date('srchStartDate','srchEndDate','srchEndDate','1M')">1개월</button>
<button type="button" class="dateRange-btn" id="threeMonth" onclick="fn_set_date('srchStartDate','srchEndDate','srchEndDate','3M')">3개월</button>
<button type="button" class="dateRange-btn" id="sixMonth" onclick="fn_set_date('srchStartDate','srchEndDate','srchEndDate','6M')">6개월</button>
<button type="button" class="dateRange-btn" id="oneYear" onclick="fn_set_date('srchStartDate','srchEndDate','srchEndDate','1Y')">1년</button>
<button type="button" class="dateRange-btn selected" id="allDays">전체</button>
</div>
</div>
</td>
</tr>
<tr>
<th>구분</th>
<td>
<div class="td-inner">
<div class="select-box">
<select class="md" title="해당 셀렉트에 대한 설명" name="srchMlgAccmlDvCd">
<option value="">전체</option>
<c:forEach var="cdList" items="${ resultMap.mlgAccmlDv }" varStatus="status">
<option value="<c:out value="${ cdList.cd }"/>"><c:out value="${ cdList.cdNm }"/></option>
</c:forEach>
</select>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="form-control-container">
<div class="left"></div>
<div class="center">
<button class="btn outline" id="resetBtn" type="button" onclick="fn_reset_form('mlgSrchSection'); return false;">초기화</button>
<button class="btn primary" id="searchBtn" type="button" onclick="fn_select_crm_mlg_list(1); return false;">검색</button>
</div>
<div class="right">
</div>
</div>
</section>
<div id="pageDiv">
</div>
</form>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
<%-- CRM right 공통 --%>
<%@ include file="/WEB-INF/views/comm/itrnt/crm/Right.jsp"%>
</div>
</main>
</body>
</html>

View File

@@ -0,0 +1,219 @@
<%@ 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="ui" uri="http://www.winbit.kr/ctl/ui"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%--
Class Name : ItrntMbrOrdrListInqireRForm.jsp
Description : 회원 주문 조회 jsp
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
since : 2024.02.19 김혜인 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<div class="table-wrapper">
<table class="table order-section vertical">
<colgroup>
<col style="width: 5%">
<col style="width: 12%;">
<col style="width: 12%;">
<col style="width: auto">
<col style="width: 6%;">
<%-- <col style="width: 6%;"> --%>
<col style="width: 10%;">
<col style="width: 10%;">
<col style="width: 6%;">
<col style="width: 6%;">
</colgroup>
<thead>
<tr>
<th>번호</th>
<th>주문일시</th>
<th>주문번호</th>
<th>주문상품</th>
<th>수(종)</th>
<%-- <th>출고</th> --%>
<th>받는분/주문자</th>
<th>결제수단/일시</th>
<th>결제금액</th>
<th>처리상태</th>
</tr>
</thead>
<tbody>
<c:choose>
<c:when test="${not empty resultMap.allOrdrList}">
<c:set var="totalRow" value="${resultMap.paginationInfo.totalRecordCount - ((resultMap.paginationInfo.currentPageNo -1) * resultMap.paginationInfo.recordCountPerPage) + 2}"/>
<c:forEach items="${resultMap.allOrdrList}" var="ordr" varStatus="status">
<c:set var="totalRow" value="${totalRow - 1}"/>
<c:if test="${ordr.ordrSttusCd != resultMap.allOrdrList[status.index - 1].ordrSttusCd}">
<tr class="order-section__header">
<td colspan="11" class="order-search__tab-title">
<div class="order-step__wrapper">
<div class="order-step order-status-badge <c:choose><c:when test = "${ordr.ordrSttusCd eq '15'}">recept</c:when>
<c:when test = "${ordr.ordrSttusCd eq '25'}">confirm</c:when>
<c:when test = "${ordr.ordrSttusCd eq '35'}">prep</c:when>
<c:when test = "${ordr.ordrSttusCd eq '50' || ordr.ordrSttusCd eq '55'}">export</c:when>
<c:when test = "${ordr.ordrSttusCd > 84 && ordr.ordrSttusCd < 100}">gray</c:when>
<c:when test = "${ordr.ordrSttusCd eq '60' || ordr.ordrSttusCd eq '65'}">delivery</c:when>
<c:otherwise>complete</c:otherwise></c:choose>">
<c:if test="${(ordr.ordrSttusCd > 14 && ordr.ordrSttusCd < 36) || (ordr.ordrSttusCd > 84 && ordr.ordrSttusCd < 100)}">(출고 전) </c:if>
<c:if test="${ordr.ordrSttusCd > 59 && ordr.ordrSttusCd < 76}">(출고 후) </c:if>
<em><c:out value="${ordr.ordrSttusNm}"/></em>
</div>
</div>
</td>
</tr>
</c:if>
<tr>
<td><c:out value="${totalRow - 1}"/></td>
<td><c:out value="${ordr.ordrRceptDt}"/></td>
<td>
<input type="hidden" class="sopmalCd" value="<c:out value="${ordr.sopmalCd}"/>"/>
<input type="hidden" class="ordrInnb" value="<c:out value="${ordr.ordrInnb}"/>"/>
<a id="btnOrdrDtl" class="blue-7"><c:out value="${ordr.ordrInnb}"/></a>
</td>
<td>
<div class="order-section__product">
<div class="order-section__product-info">
<span class="order-section__product-productTitle"><c:out value="${ordr.goodsNm}"/></span>
<span class="option-text"><span class="option-badge">옵션</span> <c:out value="${ordr.optns}"/></span>
</div>
</div>
</td>
<td><c:out value="${ordr.orderCnt += '(' += ordr.itemCnt += '종)'}"/></td>
<%-- <td></td> --%>
<td>
<c:if test="${not empty ordr.recpntNm}">
<span class="gray-12"><c:out value="${ordr.recpntNm}"/></span>
<br/>
</c:if>
<c:choose>
<c:when test="${not empty ordr.mbrId}">
<span class="gray-12"><c:out value="${ordr.mbrNm}"/></span>
(<span class="fw-500 blue-7"><c:out value="${ordr.mbrId}"/></span>/<span class="fw-500 green-8"><c:out value="${ordr.gradNm}"/></span>)
<%-- <button type="button" class="mini-info-btn" data-info="info01">?</button> --%>
</c:when>
<c:otherwise>
<span class="gray-12"><c:out value="${ordr.mbrNm += '(비회원)'}"/></span>
</c:otherwise>
</c:choose>
</td>
<td class="text-right">
<c:if test="${not empty ordr.setlerNm}">
<span class="${ordr.mbrNm == ordr.setlerNm ? 'stone-8' : 'blue-7'}"><c:out value="${ordr.setlerNm}"/></span>
</c:if>
<c:if test="${not empty ordr.pgCmpnyNm}">
<c:if test="${not empty ordr.setleTyCd && ordr.setleTyCd ne '02'}">
<c:choose>
<c:when test="${'npay' eq ordr.pgCmpnyNm}">
<i class="icon icon_word-badge_naver"></i>
</c:when>
<c:when test="${'kcp' eq ordr.pgCmpnyNm}">
<i class="icon icon_word-badge_kcp"></i>
</c:when>
<c:when test="${'pos' eq ordr.pgCmpnyNm}">
<i class="icon icon_word-badge_pos"></i>
</c:when>
<c:when test="${'payco' eq ordr.pgCmpnyNm}">
<i class="icon icon_word-badge_payco"></i>
</c:when>
<c:when test="${'tosspay' eq ordr.pgCmpnyNm}">
<i class="icon icon_word-badge_toss"></i>
</c:when>
<c:when test="${'toss' eq ordr.pgCmpnyNm}">
<i class="icon icon_word-badge_toss"></i>
</c:when>
<c:when test="${'gcpay' eq ordr.pgCmpnyNm}">
<i class="icon icon_word-badge_gcpay"></i>
</c:when>
<c:otherwise>
<span class="stone-8 fw-500">${ordr.pgCmpnyNm}</span>
</c:otherwise>
</c:choose>
</c:if>
</c:if>
<c:if test="${not empty ordr.rcpmnyerNm}">
<span class="blue-7"><c:out value="${ordr.rcpmnyerNm}"/></span>
</c:if>
<c:if test="${not empty ordr.setleTyCd}">
<c:choose>
<c:when test="${'01' eq ordr.setleTyCd}"><!-- 카드 -->
<i class="icon icon_word-badge04"></i>
</c:when>
<c:when test="${'02' eq ordr.setleTyCd}"><!-- 무통장 -->
<i class="icon icon_word-badge03"></i>
</c:when>
<c:when test="${'03' eq ordr.setleTyCd}"><!-- 계좌 -->
<i class="icon icon_word-badge13"></i>
</c:when>
<c:when test="${'04' eq ordr.setleTyCd}"><!-- 가상계좌 -->
<i class="icon icon_word-badge06"></i>
</c:when>
<c:when test="${'05' eq ordr.setleTyCd}"><!-- 가상계좌 에스크로 -->
<i class="icon icon_word-badge07"></i>
</c:when>
<c:when test="${'06' eq ordr.setleTyCd}"><!-- 가상계좌에스크로 -->
<i class="icon icon_word-badge07"></i>
</c:when>
<c:when test="${'07' eq ordr.setleTyCd}"><!-- 핸드폰 -->
<i class="icon icon_word-badge05"></i>
</c:when>
<c:when test="${'08' eq ordr.setleTyCd}"><!-- 마일리지 -->
<i class="icon icon_word-badge12"></i>
</c:when>
<c:when test="${'09' eq ordr.setleTyCd}"><!-- 포스 -->
<i class="icon icon_word-badge_pos"></i>
</c:when>
<c:when test="${'10' eq ordr.setleTyCd}"><!-- 페이코 -->
<i class="icon icon_word-badge_payco"></i>
</c:when>
<c:when test="${'11' eq ordr.setleTyCd}"><!-- 복합 -->
<i class="icon icon_word-badge14"></i>
</c:when>
<c:when test="${'12' eq ordr.setleTyCd}"><!-- 충전식마일리지 -->
<i class="icon icon_word-badge16"></i>
</c:when>
</c:choose>
</c:if>
<c:if test="${not empty ordr.bnnkNm}">
<span class="stone-8 fw-500"><c:out value="${ordr.bnnkNm}"/></span>
</c:if>
<c:if test="${not empty ordr.setleDt}">
<br/><span class="gray-12"><c:out value="${ordr.setleDt}"/></span>
</c:if>
</td>
<td>${ordr.setleAmt}</td>
<td><c:out value="${ordr.ordrSttusNm}"/></td>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
<tr>
<td colspan="100%"><spring:message code="common.nodata"/></td>
</tr>
</c:otherwise>
</c:choose>
</tbody>
</table>
</div>
</section>
<div class="pagination__container">
<ui:pagination paginationInfo="${resultMap.paginationInfo}" type="image" jsFunction="fn_get_ordr_list"/>
</div>
</html>

View File

@@ -0,0 +1,285 @@
<%@ 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="ui" uri="http://www.winbit.kr/ctl/ui"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld"%>
<%--
Class Name : ItrntMbrOrdrListInqireRForm.jsp
Description : 회원 주문 조회 폼 jsp
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
since : 2024.02.19 김혜인 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%@include file="/WEB-INF/views/comm/crm/Include.jsp" %>
</head>
<script>
$(document).ready(function() {
fn_add_crm_menu_class("leftOrdr");
$('#btnResetForm').trigger('click');
//crm 정보 조회
fn_get_itrnt_crm_info($("#leftMbrInnb").val(), $("#leftMbrDvCd").val(),$("#leftSopmalCd").val());
fn_get_ordr_list(1);
});
/* 전체주문 목록 조회 */
const fn_get_ordr_list = function(pageIndex) {
console.log("fn_get_ordr_list()");
$('#pageIndex').val(pageIndex);
let data = $('#condForm').serialize();
console.log(data);
$.ajax({
type: 'POST',
url: '<c:url value="/itrnt/crm/ordr/selectMbrOrdrListInqire"/>',
data: data,
success: function (html) {
console.log('success');
$('#pageDiv').html(html);
}
});
}
/*
* 검색조건 > 날짜 구간 버튼 클릭 이벤트
*/
$(document).on('click', '.dateRange-btn', function() {
const date = $(this).attr('id');
if ('allDays' === date) {
$('#srchStartDate, #srchEndDate').val('');
$('#srchDatePeriod').val(date);
return false;
}
fn_set_date('srchStartDate', 'srchEndDate', 'srchEndDate', date);
$('#srchDatePeriod').val(date);
$(this).closest('div').find('.dateRange-btn').removeClass('selected')
$(this).addClass('selected')
return false;
});
/*
* 검색조건 > 주문상태 체크박스 클릭 이벤트
*/
$(document).on('change', '.check_ordr_sttus_cd', function() {
let td = $(this).closest('td');
const checboxCnt = $(td).find('input[name="srchOrdrSttusCds"]').length;
const checedCnt = $(td).find('input[name="srchOrdrSttusCds"]:checked').length;
$(td).find('.check_all_item').prop('checked', checboxCnt === checedCnt);
});
/*
* 검색조건 > 초기화 버튼 클릭 이벤트
*/
$(document).on('click', '#btnResetForm', function() {
fn_reset_form('condForm');
$('#1M').trigger("click"); // 날짜 설정
});
/*
* 검색조건 > 결제유형 전체 체크박스 클릭 이벤트
*/
$(document).on('click', '.check_all_item', function () {
let checkbox = $(this).closest('td').find('input[name="srchOrdrSttusCds"]');
$(checkbox).prop('checked', false);
$(checkbox).prop('checked', $(this).is(':checked'));
});
/*
* 검색조건 > 검색 버튼 선택 이벤트
*/
$(document).on('click', '#btnSearch', function() {
fn_get_ordr_list(1);
});
</script>
<body>
<%@ include file="/WEB-INF/views/comm/itrnt/crm/Header.jsp"%>
<main class="main">
<%@ include file="/WEB-INF/views/comm/itrnt/crm/Left.jsp"%>
<div class="content">
<div class="content__inner">
<button class="side-nav__fold"><span class="visually-hidden">좌측메뉴 펼치기/닫기</span></button>
<div class="page-title">
<h2 class="page-title__title">주문</h2>
<div class="page-title__btn-container">
</div>
</div>
<form id="condForm">
<input type="hidden" id="sopmalCd" name="sopmalCd" value="${cnsltVO.sopmalCd}"/>
<input type="hidden" id="mbrInnb" name="mbrInnb" value="${cnsltVO.mbrInnb}" />
<input type="hidden" id="mbrDvCd" name="mbrDvCd" value="${cnsltVO.mbrDvCd}" />
<section>
<div class="content-section">
<div class="table-wrapper">
<table class="table">
<colgroup>
<col style="width: 12%;">
<col style="width: auto;">
<col style="width: 12%;">
<col style="width: 12%;">
<col style="width: 23%;">
</colgroup>
<tbody>
<tr class="search-hide">
<th>주문일</th>
<td colspan="4">
<div class="td-inner">
<input type = "hidden" name = "srchDateDv" value = "ordrDt"/>
<div class="input-container">
<input type="text" name="srchStartDate" id="srchStartDate" class="datepicker" title="시작 날짜 선택" autocomplete="off">
<span class="tilde">~</span>
<input type="text" name="srchEndDate" id="srchEndDate" class="datepicker" title="종료 날짜 선택" autocomplete="off" pattern="yyyy-MM-dd">
<input type="hidden" id="srchDatePeriod" name="srchDatePeriod" value=""/>
</div>
<div class="dateRange-btnContainer">
<button class="dateRange-btn" id="1D">어제</button>
<button class="dateRange-btn" id="0">오늘</button>
<button class="dateRange-btn" id="3D">3일간</button>
<button class="dateRange-btn" id="7D">일주일</button>
<button class="dateRange-btn" id="1M">1개월</button>
<button class="dateRange-btn" id="3M">3개월</button>
<button class="dateRange-btn" id="6M">6개월</button>
<button class="dateRange-btn" id="1Y">1년</button>
<button class="dateRange-btn" id="allDays">전체</button>
</div>
</div>
</td>
</tr>
<tr class="search-hide">
<th>주문상태 (출고전)</th>
<td colspan="4">
<div class="td-inner">
<div class="b-checkbox-container order-status-badge-container">
<c:forEach items="${cond.ordrSttusCdList}" var="ordrSttusCd" varStatus="status">
<c:if test="${(ordrSttusCd.cd > 14 && ordrSttusCd.cd < 36) || (ordrSttusCd.cd > 84 && ordrSttusCd.cd < 100)}">
<label class="b-checkbox checkbox">
<input type="checkbox" name="srchOrdrSttusCds" class="check_ordr_sttus_cd" value="${ordrSttusCd.cd}"/>
<span class="check"></span>
<span class="control-label">
<c:choose>
<c:when test="${ordrSttusCd.cd eq 15 }">
<span class="order-status-badge recept">${ordrSttusCd.cdNm}</span>
</c:when>
<c:when test="${ordrSttusCd.cd eq 25 }">
<span class="order-status-badge confirm">${ordrSttusCd.cdNm}</span>
</c:when>
<c:when test="${ordrSttusCd.cd eq 35 }">
<span class="order-status-badge prep">${ordrSttusCd.cdNm}</span>
</c:when>
<c:otherwise>
<span class="order-status-badge gray">${ordrSttusCd.cdNm}</span>
</c:otherwise>
</c:choose>
</span>
</label>
</c:if>
</c:forEach>
<label class="b-checkbox checkbox">
<input type="checkbox" class="check_all_item">
<span class="check"></span>
<span class="control-label">전체</span>
</label>
</div>
</div>
</td>
</tr>
<tr class="search-hide">
<th>주문상태 (출고후)</th>
<td colspan="4">
<div class="td-inner">
<div class="b-checkbox-container order-status-badge-container">
<c:forEach items="${cond.ordrSttusCdList}" var="ordrSttusCd" varStatus="status">
<c:if test="${ordrSttusCd.cd > 49 && ordrSttusCd.cd < 76}">
<label class="b-checkbox checkbox">
<input type="checkbox" name="srchOrdrSttusCds" class="check_ordr_sttus_cd" value="${ordrSttusCd.cd}"/>
<span class="check"></span>
<span class="control-label">
<c:choose>
<c:when test="${ordrSttusCd.cd eq 50 || ordrSttusCd.cd eq 55}">
<span class="order-status-badge export">${ordrSttusCd.cdNm}</span>
</c:when>
<c:when test="${ordrSttusCd.cd eq 60 || ordrSttusCd.cd eq 65}">
<span class="order-status-badge delivery">${ordrSttusCd.cdNm}</span>
</c:when>
<c:when test="${ordrSttusCd.cd eq 70 || ordrSttusCd.cd eq 75}">
<span class="order-status-badge complete">${ordrSttusCd.cdNm}</span>
</c:when>
</c:choose>
</span>
</label>
</c:if>
</c:forEach>
<label class="b-checkbox checkbox">
<input type="checkbox" class="check_all_item">
<span class="check"></span>
<span class="control-label">전체</span>
</label>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="form-control-container">
<div class="left"></div>
<div class="center">
<button type="button" class="btn outline" id="btnResetForm">초기화</button>
<button type="button" class="btn primary" id="btnSearch">검색</button>
</div>
<div class="right"></div>
</div>
</div>
</section>
</form>
<!-- // 검색 끝 -->
<div id = "pageDiv">
</div>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
<%@ include file="/WEB-INF/views/comm/itrnt/crm/Right.jsp"%>
</div>
</main>
</body>
</html>

View File

@@ -0,0 +1,223 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<%@ 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"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%--
Class Name : ItrntBbsListR.jsp
Description : 인트라넷 게시글 목록 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-03-26 이운산 최초 생성(퍼블리싱 적용)
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@ include file="/WEB-INF/views/comm/itrnt/Include.jsp"%>
</head>
<body>
<script>
$(document).ready(function(){
// 팝업 창 오픈
openPopup();
});
// 팝업 창 열기
function openPopup() {
let popupId;
$('.main-popup').each(function () {
popupId = $(this).attr('id');
let popupFlag = getCookie(popupId);
if (popupFlag) {
$('#' + popupId).css('display', 'none');
} else {
$('#' + popupId).css('display', 'block');
}
});
}
// 쿠키 불러오기
function getCookie(name) {
const cookies = document.cookie.split(';')
for (let i = 0; i < cookies.length; i++) {
let cookie = cookies[i].trim();
if (cookie.startsWith(name + '=')) {
return true;
}
}
return false;
}
// 쿠키 설정 expiredays 후의 클릭한 시간까지
function setCookie24(name, value, expiredays) {
var todayDate = new Date();
todayDate.setDate(todayDate.getDate() + expiredays);
document.cookie = name + "=" + escape(value) + "; path=/; expires=" + todayDate.toGMTString() + ";";
}
// 팝업 닫기
function closePopup(ele) {
$(ele).closest('.main-popup').css('display', 'none');
let cookieName = $(ele).closest('.main-popup').attr('id');
let checkFlag = $(ele).closest('.main-popup').find('input[name="checked"]').is(':checked');
// 체크가 되어 있으면
if (checkFlag) {
setCookie24(cookieName, 'Y', 1);
}
}
</script>
<%@include file ="/WEB-INF/views/comm/itrnt/Header.jsp" %>
<main class="main main--dashboard">
<div class="content">
<div class="content__inner">
<section class="content-section">
<h4 class="page-title__title">${nm}님 인트라넷 페이지에 접속하셨습니다.</h4>
</section>
</div>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</main>
<script>
// 주요지표 탭
$('.dashboardInfoTab__btn').on('click', function () {
var idx = $(this).index();
$('.dashboardInfoTab__btn').removeClass('current');
$(this).addClass('current');
$('.dashboardInfoTab__content').removeClass('current');
$('.dashboardInfoTab__content').eq(idx).addClass('current');
});
</script>
<!-- 모달 -->
<!-- 메인 팝업-->
<c:if test="${ !empty resultMap.popup }">
<c:forEach items="${ resultMap.popup }" var="popup" varStatus="status">
<div class="main-popup" id="main-popup-${ popup.bbscttInnb }" style="top:100px; left:60px; z-index: ${ status.index +1};">
<div class="main-popup-content" style=" width:500px; height:600px;">
<div class="table-wrapper">
<table class="table">
<colgroup>
<col style="width: 12%;">
<col style="width: 38%;">
<col style="width: 12%;">
<col style="width: auto;">
</colgroup>
<tr>
<th colspan="4"><h1>공지사항</h1></th>
</tr>
<tr>
<th>등록일</th>
<td><c:out value="${popup.registDt}"/></td>
<th>조회수</th>
<td><c:out value="${popup.inqireCnt}"/></td>
</tr>
<tr>
<td colspan="4">
<div class="td-inner popup-td" style="width: 100%; max-height: 480px; overflow: auto;" id="popupContent">
<c:out value="${popup.cn}" escapeXml="false"/>
</div>
</td>
</tr>
</table>
</div>
</div>
<div class="main-popup-footer">
<label class="b-checkbox checkbox is-small">
<input type="checkbox" name="checked" value="false">
<span class="check"></span>
<span class="control-label">오늘 하루 팝업 창 닫기</span>
</label>
<a href="javascript:void(0);" class="main-popup-btn" onclick="closePopup(this)">닫기</a>
</div>
</div>
</c:forEach>
</c:if>
<style>
.popup-td img {
max-width: 100%; /* 부모 요소 크기를 벗어나지 않음 */
max-height: 100%; /* 너무 큰 이미지 제한 */
display: block; /* 인라인 이미지가 공간을 차지하지 않도록 */
margin: auto; /* 중앙 정렬 */
}
.main-popup {
display: none;
max-width: 520px;
position: absolute;
border-radius: 24px;
overflow: hidden;
background: #fff;
box-sizing: border-box;
}
.main-popup-footer {
display: flex;
justify-content: space-between;
padding: 4px 8px;
}
.main-popup-footer label {
margin-left: 12px;
color: #16191d
}
.main-popup-btn {
height: 28px;
font-size: 14px;
background-color: transparent;
color: #16191d;
display: inline-flex;
align-items: center;
justify-content: center;
padding: 0 18px;
}
.main-popup-btn:hover {
text-decoration: underline;
}
.main-popup-time {
position: absolute;
bottom: 0;
left: 0;
width: 100%;
height: 30px;
background-color: black;
opacity: 0.6;
z-index: 1;
text-align: center;
display: flex;
justify-content: center;
}
.main-popup-time span {
/* width:100%; */
text-align: center;
color: white;
display: inline-flex;
align-items: center;
justify-content: center;
}
</style>
</body>
</html>

View File

@@ -0,0 +1,166 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<%@ 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"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%--
Class Name : ItrntMbrListR.jsp
Description : 인트라넷 회원 목록 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-12-18 김혜인 최초 생성
--%>
<div class="form-control-container">
<div class="left">
<div class="search-number">
<span class="search-number__text">총 <strong><fmt:formatNumber value="${resultMap.paginationInfo.totalRecordCount}" pattern="#,###"/></strong>건</span>
</div>
</div>
<div class="center">
</div>
<div class="right">
<div class="select-box">
<select title="정렬 조건" id = "orderCnd" onchange="fn_select_mbr_list('1');">
<option value="recent" ${f:setSelected(resultMap.vo.orderCnd, 'recent')}>최근 가입순</option>
<option value="mlgUp" ${f:setSelected(resultMap.vo.orderCnd, 'mlgUp')}>마일리지 많은순</option>
<option value="mlgDn" ${f:setSelected(resultMap.vo.orderCnd, 'mlgDn')}>마일리지 적은순</option>
<option value="amtUp" ${f:setSelected(resultMap.vo.orderCnd, 'amtUp')}>구매금액 많은순</option>
<option value="amtDn" ${f:setSelected(resultMap.vo.orderCnd, 'amtDn')}>구매금액 적은순</option>
<option value="cntUp" ${f:setSelected(resultMap.vo.orderCnd, 'cntUp')}>주문수 많은순</option>
<option value="cntDn" ${f:setSelected(resultMap.vo.orderCnd, 'cntDn')}>주문수 적은순</option>
</select>
</div>
<div class="select-box">
<select id="pageUnit" name="pageUnit" title="페이지당 출력될 목록건수" onchange="fn_select_mbr_list('1');">
<c:forEach items="${ resultMap.paginationInfo.pageUnitArr }" var="pageUnit" varStatus="pageUnitStatus">
<option value="<c:out value="${ pageUnit }"/>" <c:if test="${ resultMap.paginationInfo.recordCountPerPage eq pageUnit }">selected="selected"</c:if>><c:out value="${pageUnit}"/>개씩</option>
</c:forEach>
</select>
</div>
</div>
</div>
<hr class="horizontal-line">
<hr class="spacing">
<div class="table-wrapper table-wrapper--scroll">
<table class="table vertical">
<caption>해당 테이블에 대한 설명</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 80px;">
<col style="width: auto;">
<col style="width: auto;">
<col style="width: 110px;">
<col style="width: auto;">
<col style="width: 160px;">
<col style="width: 160px;">
<col style="width: 160px;">
<col style="width: 160px;">
<c:if test="${resultMap.shopInfo.ordrSetupInfo.cashAt eq 'Y'}">
<col style="width: 160px;">
</c:if>
<col style="width: 90px;">
</colgroup>
<thead>
<tr>
<th>번호</th>
<th>가입점</th>
<th>아이디</th>
<th>이름</th>
<th>핸드폰</th>
<th>가입일</th>
<th>최종구매일</th>
<th>구매금액</th>
<th>마일리지</th>
<c:if test="${resultMap.shopInfo.ordrSetupInfo.cashAt eq 'Y'}">
<th>GC머니</th>
</c:if>
<th>관리</th>
</tr>
</thead>
<tbody>
<c:choose>
<c:when test = "${not empty resultMap.resultList}">
<c:forEach var = "resultList" items = "${resultMap.resultList}">
<tr>
<td>
<c:out value="${resultMap.paginationInfo.totalRecordCount - resultList.rnum+1}" />
</td>
<td>
<c:out value="${resultList.tentcpnNm}"/>
</td>
<td>
<c:choose>
<c:when test="${resultList.joinMthCd eq 'kakao'}"><%--kakao--%>
<i class="icon icon_word-badge_kakao"></i>
</c:when>
<c:when test="${resultList.joinMthCd eq 'naver'}"><%--naver--%>
<i class="icon icon_word-badge_naver"></i>
</c:when>
<c:when test="${resultList.joinMthCd eq 'pos'}"><%--pos--%>
<i class="icon icon_word-badge_pos"></i>
<span class="fw-500 blue-7">
<c:out value="${resultList.mbrId}"/>
</span>
</c:when>
<c:otherwise>
<span class="fw-500 blue-7">
<c:out value="${resultList.mbrId}"/>
</span>
</c:otherwise>
</c:choose>
</td>
<td>
<c:out value="${resultList.mbrNm}"/>
</td>
<td class="mbtlnb">
<c:out value="${resultList.mbtlnb}"/>
</td>
<td>
<c:out value="${resultList.registDt}"/>
</td>
<td>
<c:out value="${resultList.lastPurchsDt}"/>
</td>
<td>
<span class="comma"><fmt:formatNumber value="${resultList.totOrdrAmt}" pattern="#,###"/></span>
</td>
<td>
<span class="comma"><fmt:formatNumber value="${resultList.mileage}" pattern="#,###"/></span>
</td>
<c:if test="${resultMap.shopInfo.ordrSetupInfo.cashAt eq 'Y'}">
<td>
<span class="comma"><c:out value="${resultList.mbrCashAmt}"/></span>
</td>
</c:if>
<td>
<div class="manage-btn-container">
<button type="button" data-info="info01" class="btn xsm outline"
id="itrnt${resultList.mbrInnb}"
onclick = "fn_select_crm_mini_info(this,'<c:out value='${resultList.mbrInnb}'/>','<c:out value='${resultList.mbrDvCd}'/>','#modalDiv')">
상세
</button>
</div>
</td>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
<tr>
<td colspan="10"><spring:message code="common.nodata"/></td>
</tr>
</c:otherwise>
</c:choose>
</tbody>
</table>
</div>
<div class="pagination__container">
<ui:pagination paginationInfo="${resultMap.paginationInfo}" type="image" jsFunction="fn_select_mbr_list"/>
</div>

View File

@@ -0,0 +1,778 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<%@ 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"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%--
Class Name : ItrntMbrListRForm.jsp
Description : 인트라넷 회원 목록 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-04-16 유재현 최초 생성(퍼블리싱 적용)
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@ include file="/WEB-INF/views/comm/itrnt/Include.jsp"%>
<script>
$(document).ready(function () {
fn_set_dateRange_function("#registDtBtn", "srchStrtRegistDt", "srchEndRegistDt", "srchStrtRegistDt");
fn_set_dateRange_function("#purchsDtBtn", "srchStrtLastPurchsDt", "srchEndLastPurchsDt", "srchStrtLastPurchsDt");
//검색 엔터시 리스트 조회
$('#search-section').on('keydown', function (event) {
if (event.keyCode === 13) {
event.preventDefault();
$("#srchBtn").click();
}
});
//타 매장 회원 체크박스 이벤트
$("#srchOtherMbr").click(function(){
if($(this).is(":checked")){ //체크시 검색어 제외 검색조건 disable 처리
$(".tgtMbrTr").hide();
if($("#srchStdrCnd").is(":checked")){
$("#srchStdrCnd").click();
}
if($("#srchCmprCnd").is(":checked")){
$("#srchCmprCnd").click();
}
fn_ctrl_disable(['.tgtMbrTr'],'');
}else{
$(".tgtMbrTr").show();
fn_ctrl_disable('',['.tgtMbrTr']);
}
});
//기준조건 적용 체크박스 이벤트
$("#srchStdrCnd").click(function(){
if($(this).is(":checked")){//체크시 기준 검색 조건 disable 해체 처리
$(".tgtStdrCndTr").show();
fn_ctrl_disable('',['.tgtStdrCndTr']);
$("#cmprChkbox").show();
}else{
$(".tgtStdrCndTr").hide();
fn_ctrl_disable(['.tgtStdrCndTr'],'');
$("#cmprChkbox").hide();
}
});
//비교조건 적용 체크박스 이벤트
$("#srchCmprCnd").click(function(){
if($(this).is(":checked")){//체크시 비교 검색 조건 disable 해제 처리
$(".tgtCmprCndTr").show();
fn_ctrl_disable('',['.tgtCmprCndTr']);
}else{
$(".tgtCmprCndTr").hide();
fn_ctrl_disable(['.tgtCmprCndTr'],'');
}
});
//검색 버튼 이벤트
$("#srchBtn").click(function(){
fn_select_mbr_list(1);
});
})
/*검색 초기화*/
const fn_reset = () =>{
//초기화전 체크 됐는지 확인 후 리셋
let srchOtherMbrAt = $("#srchOtherMbr").is(":checked");
let srchStdrCndAt = $("#srchStdrCnd").is(":checked");
let srchCmprCndAt = $("#srchCmprCnd").is(":checked");
fn_reset_form('search-section');
if(srchOtherMbrAt){
$("#srchOtherMbr").click();
}
if(srchStdrCndAt){
$("#srchStdrCnd").click();
}
if(srchCmprCndAt){
$("#srchCmprCnd").click();
}
}
/************************************************************
검색조건 정합성 검사
*********************************************************/
//
const fn_check_srchOtherMbr = () => {
let hasValue = true;
if($("#srchOtherMbr").is(":checked")){
if(fn_is_empty($("#srchKeyword").val())){
alert("검색어는 필수 값입니다.");
return false;
hasValue = false;
}
console.log($("#srchDv").val());
if ($("#srchDv").val() !== 'mbtlnb'){
alert("검색구분은 휴대전화만 가능합니다.");
return false;
hasValue = false;
}
}
return hasValue;
}
// 구매기준, 구매비교 정합성 검사
const fn_check_srchPurch = () => {
var stdrStrtPurchsPd = $('input[name="stdrStrtPurchsPd"]').val();
var stdrEndPurchsPd = $('input[name="stdrEndPurchsPd"]').val();
var cmprStrtPurchsPd = $('input[name="cmprStrtPurchsPd"]').val();
var cmprEndPurchsPd = $('input[name="cmprEndPurchsPd"]').val();
// 구매 기준 그룹
var stdrGroup = [
$('input[name="stdrStrtPurchsAmt"]').val(), $('input[name="stdrEndPurchsAmt"]').val(),
$('input[name="stdrStrtPurchsCnt"]').val(), $('input[name="stdrEndPurchsCnt"]').val(),
$('input[name="stdrGoodsNm"]').val()
];
// 구매 비교 그룹
var cmprGroup = [
$('input[name="cmprStrtPurchsAmt"]').val(), $('input[name="cmprEndPurchsAmt"]').val(),
$('input[name="cmprStrtPurchsCnt"]').val(), $('input[name="cmprEndPurchsCnt"]').val(),
$('input[name="cmprGoodsNm"]').val()
];
// ----- 조건 검사 -----
let hasValue = true;
// 1-1. stdrGroup 중 하나라도 값이 있는데 stdrStrtPurchsPd, stdrEndPurchsPd 값이 없을 때 ok
// 1-2 stdrStrtPurchsPd, stdrEndPurchsPd 값이 모두 있어야 함 ok
if ($("#srchStdrCnd").is(":checked") && ((stdrGroup.some(val => val && val.trim() !== '') && (!stdrStrtPurchsPd || !stdrEndPurchsPd)) ||(!stdrStrtPurchsPd || !stdrEndPurchsPd))) {
alert('구매기간(기준) 시작일, 종료일은 필수 값입니다.');
hasValue = false;
return false;
}
// 2. cmprGroup 중 하나라도 값이 있는데 cmprStrtPurchsPd, cmprEndPurchsPd 값이 없을 때
// 2-1 cmprStrtPurchsPd, cmprEndPurchsPd 중 한개라도 값이 없을 때
if ($("#srchCmprCnd").is(":checked") && ((cmprGroup.some(val => val && val.trim() !== '') && (!cmprStrtPurchsPd || !cmprEndPurchsPd)) || (!cmprStrtPurchsPd || !cmprEndPurchsPd))) {
alert('구매기간(비교) 시작일, 종료일은 필수 값입니다.');
hasValue = false;
return false;
}
//3. 구매기간 기준,비교 값 중복 체크
// 배열에 저장
var values = [stdrStrtPurchsPd, stdrEndPurchsPd, cmprStrtPurchsPd, cmprEndPurchsPd];
// 중복 값 검사
var duplicates = values.filter((val, index) => val && values.indexOf(val) !== index);
// 중복이 있으면 alert
if (duplicates.length > 0) {
alert('구매기간 기준날짜와 비교날짜가 중복되어 있습니다.');
hasValue = false;
return false;
}
return hasValue;
}
//통합,기본 검색조건 정합성 검사
const fn_check_srchDft = () => {
var hasValue = true;
// srchUnity 클래스에 값이 있는지 검사
if(fn_is_empty($("#srchKeyword").val())){
hasValue = false;
}
// srchDft 클래스에 값이 있는지 검사 (hasValue가 false일 때만 검사)
if (!hasValue) {
$('.srchDft').each(function () {
var $el = $(this);
// 라디오 버튼인 경우 체크된 값만 검사
if ($el.is(':radio')) {
var radioName = $el.attr('name');
if (!fn_is_empty($('input[name="' + radioName + '"]:checked').val())) {
hasValue = true;
}
}
// 일반 input, select 검사
else if ($el.val() && $el.val().trim() !== '') {
hasValue = true;
}
});
}
if (!hasValue) {
alert('검색어 또는 검색조건을 추가해주세요');
}
return hasValue;
}
//정합성 통합
const fn_validate = () => {
let hasValue = true;
//타회원 포함일시 검색어 정합성 검사
const chk1 = fn_check_srchOtherMbr();
if (!chk1) {
console.log("1");
hasValue = false;
}
if(!$("#srchOtherMbr").is(":checked")){
//통합,기본 검색조건 정합성 검사
const chk2 = fn_check_srchDft();
if (!chk2) {
console.log("2");
hasValue = false;
}
//구매기준, 구매비교 정합성 검사
const chk3 = fn_check_srchPurch();
if (!chk3) {
console.log("3");
hasValue = false;
}
}
return hasValue;
}
/* ********************************************************
* 회원 조회
******************************************************** */
const fn_select_mbr_list = function(pageIndex, pageUnit) {
$('#info01').hide();
//정합성 검사
if(!fn_validate()){
return false;
}
if(pageIndex == undefined) {
$("#pageIndex").val('1');
} else {
$("#pageIndex").val(pageIndex);
}
let params = $('#search-section').serialize() + "&orderCnd="+$("#orderCnd").val();
if(pageUnit != undefined) {
params += '&pageUnit=' + pageUnit;
} else {
params += '&pageUnit=' + $('#pageUnit').val();
}
$.ajax({
type : 'post',
url : '<c:url value="/itrnt/mbr/selectItrntMbrList"/>',
data : params,
success : function(data) {
$('#pageDiv').html(data);
$('#pageUnit').niceSelect();
$('#orderCnd').niceSelect();
if(!fn_is_empty($(".mbtlnb"))){
$(".mbtlnb").each(function () {
let $this = $(this);
let text = $this.text().trim();
if (text.length > 0) {
let mbtlnb = fn_format_mbtlnb(text.replace(/\s+/g, ''));
mbtlnb = mbtlnb.replace(/(\d{3})-(\d{4})-(\d{4})/, "$1-****-$3");
$(this).text(mbtlnb);
}
});
}
}
});
}
/* ********************************************************
* 회원가입 (대표브랜드 쇼핑몰 회원가입으로 이동)
******************************************************** */
const fn_select_join_gate = function () {
//대표브랜드 pc도메인주소 get
$.ajax({
type: 'post',
url: "/itrnt/mbr/getPcUrl",
success: function (data) {
let sopmalInfo = data.resBody.result;
sopmalInfo = JSON.parse(sopmalInfo);
let pcDomnAdres = sopmalInfo.sopmalInfo.pcDomnAdres;
window.open(pcDomnAdres + "/sopmal/mbr/selectJoinGuidance", "_blank");
}
});
}
</script>
</head>
<body>
<%@ include file="/WEB-INF/views/comm/itrnt/Header.jsp"%>
<main class="main">
<%@ include file="/WEB-INF/views/comm/itrnt/Left.jsp"%>
<div class="content">
<div class="content__inner">
<button class="side-nav__fold"><span class="visually-hidden">좌측메뉴 펼치기/닫기</span></button>
<div class="page-title">
<h2 class="page-title__title">회원 리스트</h2>
<div class="page-title__btn-container">
<button class="btn outline" type="button" onclick="fn_select_left('itrnt_1','itrnt_10','itrnt_1', '/itrnt/ntcn/mssage/selectItrntMssagePassivSndngManage');">SMS 수동발송</button>
<button class="btn primary" onclick="fn_select_join_gate()">회원가입</button>
</div>
</div>
<section class="content-section">
<form id="search-section">
<input type="hidden" id="pageIndex" name="pageIndex" value="<c:out value = '${resultMap.vo.pageIndex}'/>"/>
<div class="table-wrapper">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 12%;">
<col style="width: 23%;">
<col style="width: 12%;">
<col style="width: 25%;">
<col style="width: 12%;">
<col style="width: auto;">
<col style="width: 10%;">
<col style="width: auto;">
</colgroup>
<tbody>
<tr>
<th>검색어</th>
<td colspan="5">
<div class="td-inner">
<div class="select-box">
<select title="검색어 구분" name="srchDv" id="srchDv">
<option value="mbtlnb" >휴대전화</option>
<option value="mbrNm" class="tgtDsb">이름</option>
<option value="mbrId" class="tgtDsb">아이디</option>
<option value="email" class="tgtDsb">이메일</option>
</select>
</div>
<input class="input-text xl srchUnity" type="text" title="검색 키워드" id="srchKeyword" name="srchKeyword" placeholder="검색어를 입력해 주십시요.">
<c:choose>
<c:when test = "${resultMap.tentGroup eq '02'}">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox blue-7">
<input type="checkbox" value="Y" name="srchOtherMbr" id="srchOtherMbr">
<span class="check"></span>
<span class="control-label">타 매장 회원 포함(일치)</span>
</label>
</div>
</c:when>
<c:otherwise>
<input type = "hidden" name = "srchOtherMbr" value = "Y" id = "" class = ""/>
</c:otherwise>
</c:choose>
</div>
</td>
</tr>
<c:if test = "${resultMap.tentGroup eq '02'}">
<tr class="tgtMbrTr">
<th>가입일</th>
<td colspan="5">
<div class="td-inner">
<div class="input-container">
<input type="text" id="srchStrtRegistDt" class="datepicker srchDft" name="srchStrtRegistDt"
title="시작 날짜 선택" autocomplete="off">
<span class="tilde">~</span>
<input type="text" id="srchEndRegistDt" class="datepicker srchDft" name="srchEndRegistDt"
title="종료 날짜 선택" autocomplete="off">
</div>
<div class="dateRange-btnContainer" id="registDtBtn">
<button class="dateRange-btn">어제</button>
<button class="dateRange-btn">오늘</button>
<button class="dateRange-btn">3일간</button>
<button class="dateRange-btn">일주일</button>
<button class="dateRange-btn">1개월</button>
<button class="dateRange-btn">3개월</button>
<button class="dateRange-btn">6개월</button>
<button class="dateRange-btn">1년</button>
<button class="dateRange-btn selected">전체</button>
</div>
</div>
</td>
</tr>
<tr class="tgtMbrTr">
<th>최종 구매일</th>
<td colspan="5">
<div class="td-inner">
<div class="input-container">
<input type="text" id="srchStrtLastPurchsDt" class="datepicker srchDft" name="srchStrtLastPurchsDt"
title="시작 날짜 선택" autocomplete="off">
<span class="tilde">~</span>
<input type="text" id="srchEndLastPurchsDt" class="datepicker srchDft" name="srchEndLastPurchsDt"
title="종료 날짜 선택" autocomplete="off">
</div>
<div class="dateRange-btnContainer" id="purchsDtBtn">
<button class="dateRange-btn">어제</button>
<button class="dateRange-btn">오늘</button>
<button class="dateRange-btn">3일간</button>
<button class="dateRange-btn">일주일</button>
<button class="dateRange-btn">1개월</button>
<button class="dateRange-btn">3개월</button>
<button class="dateRange-btn">6개월</button>
<button class="dateRange-btn">1년</button>
<button class="dateRange-btn selected">전체</button>
</div>
</div>
</td>
</tr>
<tr class="tgtMbrTr">
<th>생년</th>
<td>
<div class="td-inner">
<div class="select-box">
<jsp:useBean id="now" class="java.util.Date"/>
<fmt:formatDate var="year" value="${now}" pattern="yyyy"/>
<select title="생년 셀렉트" name="srchStrtBrthYear" id = "srchStrtBrthYear" class="srchDft">
<option value="">시작 연도</option>
<c:forEach var="i" begin="0" end="101" >
<c:choose>
<c:when test="${ (year-i) eq fn:substring( resultMap.result.brthDe,0, 4 ) }">
<option value="<c:out value="${ year-i }"/>" selected="selected"><c:out value="${ year-i }"/>년</option>
</c:when>
<c:otherwise>
<option value="<c:out value="${ year-i }"/>"><c:out value="${ year-i }"/>년</option>
</c:otherwise>
</c:choose>
</c:forEach>
</select>
</div>
<span class="tilde">~</span>
<div class="select-box">
<select title="생년 셀렉트" name="srchEndBrthYear" id = "srchEndBrthYear" class="srchDft">
<option value="">종료 연도</option>
<c:forEach var="i" begin="0" end="101" >
<c:choose>
<c:when test="${ (year-i) eq fn:substring( resultMap.result.brthDe,0, 4 ) }">
<option value="<c:out value="${ year-i }"/>" selected="selected"><c:out value="${ year-i }"/>년</option>
</c:when>
<c:otherwise>
<option value="<c:out value="${ year-i }"/>"><c:out value="${ year-i }"/>년</option>
</c:otherwise>
</c:choose>
</c:forEach>
</select>
</div>
</div>
</td>
<th>생월</th>
<td>
<div class="td-inner">
<div class="input-container gap-4">
<div class="select-box">
<select title="생월 셀렉트" name="srchStrtBrthMonth" id = "srchStrtBrthMonth" class="srchDft">
<option value="">시작 월</option>
<c:forEach var="month" begin="1" end="12" >
<c:choose>
<c:when test="${ month eq fn:substring( resultMap.result.brthDe,4, 6 ) }">
<option value="<c:if test="${ month lt 10 }">0</c:if><c:out value="${ month }"/>" selected="selected"><c:if test="${ month lt 10 }">0</c:if><c:out value="${ month }"/>월</option>
</c:when>
<c:otherwise>
<option value="<c:if test="${ month lt 10 }">0</c:if><c:out value="${ month }"/>"><c:if test="${ month lt 10 }">0</c:if><c:out value="${ month }"/>월</option>
</c:otherwise>
</c:choose>
</c:forEach>
</select>
</div>
1일
<span class="tilde">~</span>
<div class="select-box">
<select title="생월 셀렉트" name="srchEndBrthMonth" id = "srchEndBrthMonth" class="srchDft">
<option value="">종료 월</option>
<c:forEach var="month" begin="1" end="12" >
<c:choose>
<c:when test="${ month eq fn:substring( resultMap.result.brthDe,4, 6 ) }">
<option value="<c:if test="${ month lt 10 }">0</c:if><c:out value="${ month }"/>" selected="selected"><c:if test="${ month lt 10 }">0</c:if><c:out value="${ month }"/>월</option>
</c:when>
<c:otherwise>
<option value="<c:if test="${ month lt 10 }">0</c:if><c:out value="${ month }"/>"><c:if test="${ month lt 10 }">0</c:if><c:out value="${ month }"/>월</option>
</c:otherwise>
</c:choose>
</c:forEach>
</select>
</div>
1일
</div>
</div>
</td>
</tr>
<tr class="tgtMbrTr">
<th>성별</th>
<td>
<div class="td-inner">
<div class="custom-radio-container">
<div class="custom-radio">
<input type="radio" id="sexA" checked="" name="srchSex" class="srchDft" value="">
<label for="sexA">전체</label>
</div>
<c:if test = "${not empty resultMap.sex}">
<c:forEach var = "sex" items = "${resultMap.sex}">
<div class="custom-radio">
<input type="radio" id="sex${sex.cd}" name="srchSex" class="srchDft" value="${sex.cd}">
<label for="sex${sex.cd}">${sex.cdNm}</label>
</div>
</c:forEach>
</c:if>
</div>
</div>
</td>
<th>마케팅 수신 동의</th>
<td colspan="2">
<div class="td-inner">
<div class="custom-radio-container">
<div class="custom-radio">
<input type="radio" id="marktAgreA" name="srchMarktRecptnAgreAt" checked="" value="">
<label for="marktAgreA">전체</label>
</div>
<div class="custom-radio">
<input type="radio" id="marktAgreY" name="srchMarktRecptnAgreAt" class="srchDft" value="Y">
<label for="marktAgreY">동의</label>
</div>
<div class="custom-radio">
<input type="radio" id="r-3" name="srchMarktRecptnAgreAt" class="srchDft" value="N">
<label for="r-3">거부</label>
</div>
</div>
</div>
</td>
</tr>
<tr class="tgtMbrTr">
<th>등급</th>
<td>
<div class="td-inner">
<div class="select-box">
<select title="해당 셀렉트에 대한 설명" name="srchGrad" class="srchDft">
<option value="">전체</option>
<c:if test="${not empty resultMap.grad}">
<c:forEach var = "grad" items = "${resultMap.grad}">
<option value="<c:out value="${grad.mbrGradInnb}"/>"><c:out value="${grad.mbrGradNm}"/></option>
</c:forEach>
</c:if>
</select>
</div>
</div>
</td>
<th>마일리지</th>
<td>
<div class="td-inner">
<div class="input-container">
<input type="text" class="input-text sm right srchDft" name="srchStrtMlg"
title="해당 인풋에 대한 설명">
<span class="input-unit-text">원</span>
<span class="tilde">~</span>
<input type="text" class="input-text sm right srchDft" name="srchEndMlg"
title="해당 인풋에 대한 설명">
<span class="input-unit-text">원</span>
</div>
</div>
</td>
</tr>
<tr class="tgtMbrTr">
<th colspan="7" style="height: 30px;">
<label class="b-checkbox checkbox">
<span class="control-label">구매조건 검색</span>&nbsp;
<input type="checkbox" value="Y" id="srchStdrCnd">
<span class="check"></span>
&nbsp;<span class="blue-7">*조건 검색시 구매기간은 필수값입니다.</span>
</label>
<label class="b-checkbox checkbox" style="display: none" id="cmprChkbox">
<span class="control-label">비교조건 포함</span>&nbsp;
<input type="checkbox" value="Y" id="srchCmprCnd">
<span class="check"></span>
</label>
</th>
</tr>
<tr class="tgtStdrCndTr" style="display: none;">
<th>구매기간(기준)</th>
<td>
<div class="td-inner">
<div class="input-container">
<input type="text" id="stdrStrtPurchsPd" class="datepicker srchDft" name="stdrStrtPurchsPd"
title="시작 날짜 선택" autocomplete="off" disabled>
<span class="tilde">~</span>
<input type="text" id="stdrEndPurchsPd" class="datepicker srchDft" name="stdrEndPurchsPd"
title="종료 날짜 선택" autocomplete="off" disabled>
</div>
</div>
</td>
<th>품목명(기준)</th>
<td>
<div class="td-inner">
<input type="text" class="input-text srchDft" value="" title="해당 인풋에 대한 설명" name="stdrGoodsNm" disabled>
</div>
</td>
</tr>
<tr class="tgtStdrCndTr" style="display: none;">
<th>구매금액(기준)</th>
<td>
<div class="td-inner">
<div class="input-container">
<input type="text" class="input-text sm right srchDft" name="stdrStrtPurchsAmt"
title="구매금액(기준) 시작" disabled>
<span class="input-unit-text">원</span>
<span class="tilde">~</span>
<input type="text" class="input-text sm right srchDft" name="stdrEndPurchsAmt"
title="구매금액(기준) 종료" disabled>
<span class="input-unit-text">원</span>
</div>
</div>
</td>
<th>구매횟수(기준)</th>
<td>
<div class="td-inner">
<div class="input-container">
<input type="text" class="input-text sm right srchDft" name="stdrStrtPurchsCnt"
title="해당 인풋에 대한 설명" disabled>
<span class="input-unit-text">번</span>
<span class="tilde">~</span>
<input type="text" class="input-text sm right srchDft" name="stdrEndPurchsCnt"
title="해당 인풋에 대한 설명" disabled>
<span class="input-unit-text">번</span>
</div>
</div>
</td>
</tr>
<tr class="tgtCmprCndTr" style="display: none;">
<th>구매기간(비교)</th>
<td>
<div class="td-inner">
<div class="input-container">
<input type="text" id="cmprStrtPurchsPd" class="datepicker srchDft" name="cmprStrtPurchsPd"
title="시작 날짜 선택" autocomplete="off" disabled>
<span class="tilde">~</span>
<input type="text" id="cmprEndPurchsPd" class="datepicker srchDft" name="cmprEndPurchsPd"
title="종료 날짜 선택" autocomplete="off">
</div>
</div>
</td>
<th>품목명(비교)</th>
<td>
<div class="td-inner">
<input type="text" class="input-text srchDft" value="" title="품목명(비교)" name="cmprGoodsNm" disabled>
</div>
</td>
</tr>
<tr class="tgtCmprCndTr" style="display: none;">
<th>구매금액(비교)</th>
<td>
<div class="td-inner">
<div class="input-container">
<input type="text" class="input-text sm right srchDft" name="cmprStrtPurchsAmt"
title="구매금액(비교) 시작" disabled>
<span class="input-unit-text">원</span>
<span class="tilde">~</span>
<input type="text" class="input-text sm right srchDft" name="cmprEndPurchsAmt"
title="구매금액(비교) 종료" disabled>
<span class="input-unit-text">원</span>
</div>
</div>
</td>
<th>구매횟수(비교)</th>
<td>
<div class="td-inner">
<div class="input-container">
<input type="text" class="input-text sm right srchDft" name="cmprStrtPurchsCnt"
title="구매횟수(비교) 시작" disabled>
<span class="input-unit-text">번</span>
<span class="tilde">~</span>
<input type="text" class="input-text sm right srchDft" name="cmprEndPurchsCnt"
title="구매횟수(비교) 종료" disabled>
<span class="input-unit-text">번</span>
</div>
</div>
</td>
</tr>
</c:if>
</tbody>
</table>
</div>
<div class="form-control-container">
<div class="left">
</div>
<div class="center">
<button class="btn outline" type="button"
onclick="fn_reset();">
<spring:message code="button.init"/></button>
<button class="btn primary" type="button" id="srchBtn">
<spring:message code="button.search"/></button>
</div>
<div class="right">
</div>
</div>
</form>
</section>
<section class="content-section">
<div id="pageDiv">
<div class="form-control-container">
<div class="left">
<div class="search-number">
<span class="search-number__text">총 <strong>0</strong>건</span>
</div>
</div>
<div class="center">
</div>
<div class="right">
<div class="select-box">
<select title="정렬 조건" id = "orderCnd">
<option value="recent">최근 가입순</option>
<option value="mlgUp">마일리지 많은순</option>
<option value="mlgDn">마일리지 적은순</option>
<option value="amtUp">구매금액 많은순</option>
<option value="amtDn">구매금액 적은순</option>
<option value="cntUp">주문수 많은순</option>
<option value="cntDn">주문수 적은순</option>
</select>
</div>
<div class="select-box">
<select id="pageUnit" name="pageUnit" title="페이지당 출력될 목록건수" onchange="fn_select_mbr_list('1');">
<c:forEach items="${ resultMap.paginationInfo.pageUnitArr }" var="pageUnit" varStatus="pageUnitStatus">
<option value="<c:out value="${ pageUnit }"/>" <c:if test="${ resultMap.paginationInfo.recordCountPerPage eq pageUnit }">selected="selected"</c:if>><c:out value="${ pageUnit }"/>개씩</option>
</c:forEach>
</select>
</div>
</div>
</div>
<hr class="horizontal-line">
<hr class="spacing">
<div class="table-wrapper table-wrapper--scroll">
<table class="table vertical">
<caption>해당 테이블에 대한 설명</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 80px;">
<col style="width: auto;">
<col style="width: auto;">
<col style="width: 110px;">
<col style="width: auto;">
<col style="width: 160px;">
<col style="width: 160px;">
<col style="width: 100px;">
<col style="width: 100px;">
<col style="width: 100px;">
<col style="width: 90px;">
</colgroup>
<thead>
<tr>
<th>번호</th>
<th>가입점</th>
<th>아이디</th>
<th>이름</th>
<th>이메일/핸드폰</th>
<th>가입일</th>
<th>최종구매일</th>
<th>구매금액</th>
<th>마일리지</th>
<c:if test="${resultMap.shopInfo.ordrSetupInfo.cashAt eq 'Y'}">
<th>GC머니</th>
</c:if>
<th>관리</th>
</tr>
</thead>
<tbody>
<tr>
<td colspan="10"><spring:message code="common.nodata"/></td>
</tr>
</tbody>
</table>
</div>
</div>
</section>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</div>
</main>
<div id="modalDiv"></div>
</body>
</html>

View File

@@ -0,0 +1,191 @@
<%@ 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="ui" uri="http://www.winbit.kr/ctl/ui" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld"%>
<%@ page import="java.util.Date" %>
<%--
Class Name : MbrSrchPopupR.jsp
Description : 회원 조회 목록 (팝업)
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-06-27 김혜인 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<div class="form-control-container">
<div class="left">
<div class="search-number">
<span class="search-number__text">총 <strong><fmt:formatNumber value="${resultMap.paginationInfo.totalRecordCount}" pattern="#,###"/></strong>건</span>
</div>
</div>
<div class="center">
</div>
<div class="right">
<div class="select-box">
<select title="정렬 조건" id = "orderCndPop" onchange="fn_select_mbr_list_pop('1');">
<option value="recent" ${f:setSelected(resultMap.vo.orderCnd, 'recent')}>최근 가입순</option>
<option value="mlgUp" ${f:setSelected(resultMap.vo.orderCnd, 'mlgUp')}>마일리지 많은순</option>
<option value="mlgDn" ${f:setSelected(resultMap.vo.orderCnd, 'mlgDn')}>마일리지 적은순</option>
<option value="amtUp" ${f:setSelected(resultMap.vo.orderCnd, 'amtUp')}>구매금액 많은순</option>
<option value="amtDn" ${f:setSelected(resultMap.vo.orderCnd, 'amtDn')}>구매금액 적은순</option>
<option value="cntUp" ${f:setSelected(resultMap.vo.orderCnd, 'cntUp')}>주문수 많은순</option>
<option value="cntDn" ${f:setSelected(resultMap.vo.orderCnd, 'cntDn')}>주문수 적은순</option>
</select>
</div>
<div class="select-box">
<select id="pageUnitPop" name="pageUnit" title="페이지당 출력될 목록건수" onchange="fn_select_mbr_list_pop('1');">
<c:forEach items="${ resultMap.paginationInfo.pageUnitArr }" var="pageUnit" varStatus="pageUnitStatus">
<option value="<c:out value="${ pageUnit }"/>" <c:if test="${ resultMap.paginationInfo.recordCountPerPage eq pageUnit }">selected="selected"</c:if>><c:out value="${pageUnit}"/>개씩</option>
</c:forEach>
</select>
</div>
</div>
</div>
<hr class="horizontal-line">
<hr class="spacing">
<div class="table-wrapper table-wrapper--scroll">
<table class="table vertical">
<caption>해당 테이블에 대한 설명</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 5%;">
<col style="width: 5%;">
<col style="width: 15%;">
<col style="width: 10%;">
<col style="width: 7%;">
<col style="width: 13%">
<col style="width: auto;">
<col style="width: auto;">
<col style="width: auto;">
<col style="width: auto;">
<col style="width: auto;">
</colgroup>
<thead>
<tr>
<th>
<label class="b-checkbox checkbox is-medium check-all" >
<input type="checkbox" value="" id = "chkA">
<span class="check"></span>
</label>
</th>
<th>번호</th>
<th>가입점</th>
<th>아이디</th>
<th>이름</th>
<th>핸드폰</th>
<th>가입일</th>
<th>최종구매일</th>
<th>구매금액</th>
<th>마일리지</th>
<c:if test="${resultMap.shopInfo.ordrSetupInfo.cashAt eq 'Y'}">
<th>GC 머니</th>
</c:if>
</tr>
</thead>
<tbody>
<c:choose>
<c:when test = "${not empty resultMap.resultList}">
<c:forEach var = "resultList" items = "${resultMap.resultList}">
<tr>
<td>
<input type = "hidden" value = "<c:out value = "${resultList.mbrNm}"/>" class = "recpntNm"/>
<input type = "hidden" value = "<c:out value = "${resultList.mbrDvCd}"/>" class = "mbrDvCd"/>
<input type = "hidden" value = "<c:out value = "${resultList.mbtlnb}"/>" class = "sndngInfo"/>
<input type = "hidden" value = "<c:out value = "${resultList.mbtlnb}"/>" class = "sndngMbtlnb"/>
<label class="b-checkbox checkbox is-medium">
<input type="checkbox" value="<c:out value='${resultList.mbrInnb}' />" name = "mbrInnb" class = "mbrInnbPop">
<span class="check"></span>
</label>
</td>
<td>
<c:out value="${resultMap.paginationInfo.totalRecordCount - resultList.rnum+1}" />
</td>
<td>
<c:out value="${resultList.tentcpnNm}"/>
</td>
<td>
<c:choose>
<c:when test="${resultList.joinMthCd eq 'kakao'}"><%--kakao--%>
<i class="icon icon_word-badge_kakao"></i>
</c:when>
<c:when test="${resultList.joinMthCd eq 'naver'}"><%--naver--%>
<i class="icon icon_word-badge_naver"></i>
</c:when>
<c:when test="${resultList.joinMthCd eq 'pos'}"><%--pos--%>
<i class="icon icon_word-badge_pos"></i>
<span class="fw-500 blue-7">
<c:out value="${resultList.mbrId}"/>
</span>
</c:when>
<c:otherwise>
<span class="fw-500 blue-7">
<c:out value="${resultList.mbrId}"/>
</span>
</c:otherwise>
</c:choose>
</td>
<td>
<c:out value="${resultList.mbrNm}"/>
</td>
<td class="mbtlnbPop">
<c:out value="${resultList.mbtlnb}"/>
</td>
<td>
<c:out value="${resultList.registDt}"/>
</td>
<td>
<c:out value="${resultList.lastPurchsDt}"/>
</td>
<td>
<span class="comma"><fmt:formatNumber value="${resultList.totOrdrAmt}" pattern="#,###"/></span>
</td>
<td>
<span class="comma"><fmt:formatNumber value="${resultList.mileage}" pattern="#,###"/></span>
</td>
<c:if test = "${resultMap.shopInfo.ordrSetupInfo.cashAt eq 'Y'}">
<td>
<span class="comma"><c:out value="${resultList.mbrCashAmt}"/></span>
</td>
</c:if>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
<tr>
<td colspan="100%"><spring:message code="common.nodata"/></td>
</tr>
</c:otherwise>
</c:choose>
</tbody>
</table>
</div>
<div class="pagination__container">
<ui:pagination paginationInfo="${resultMap.paginationInfo}" type="image" jsFunction="fn_select_mbr_list_pop"/>
</div>
<script>
/*테이블 체크박스 전체 선택*/
$("#chkA").on("click",function () {
if($(this).is(':checked')){
$(".chk").prop('checked', true);
}else{
$(".chk").prop('checked', false);
}
});
// 목록에서 체크 해제시 전체 체크박스 해제 및 목록 항목 전체 체크 시 전체체크 버튼 true
$(".chk").on("click", function () {
let length = $(".chk").length;
let chcedLen = $(".chk:checked").length;
if (length == chcedLen) {
$("#chkA").prop('checked', true);
}else{
$("#chkA").prop('checked', false);
}
});
</script>
</html>

View File

@@ -0,0 +1,815 @@
<%@ 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="ui" uri="http://www.winbit.kr/ctl/ui" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ page import="java.util.Date" %>
<%--
Class Name : MarktMbrSrchPopupR.jsp
Description : 이메일 수동 발송
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-01-23 김혜인 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<script>
$(document).ready(function () {
fn_set_dateRange_function("#registDtBtnPop", "srchStrtRegistDtPop", "srchEndRegistDtPop", "srchStrtRegistDtPop");
fn_set_dateRange_function("#purchsDtBtnPop", "srchStrtLastPurchsDtPop", "srchEndLastPurchsDtPop", "srchStrtLastPurchsDtPop");
//검색 엔터시 리스트 조회
$('#search-sectionPop').on('keydown', function (event) {
if (event.keyCode === 13) {
event.preventDefault();
$("#srchBtnPop").click();
}
});
//타 매장 회원 체크박스 이벤트
$("#srchOtherMbrPop").click(function(){
if($(this).is(":checked")){ //체크시 검색어 제외 검색조건 disable 처리
$(".tgtMbrTrPop").hide();
if($("#srchStdrCndPop").is(":checked")){
$("#srchStdrCndPop").click();
}
if($("#srchCmprCndPop").is(":checked")){
$("#srchCmprCndPop").click();
}
fn_ctrl_disable(['.tgtMbrTrPop'],'');
}else{
$(".tgtMbrTrPop").show();
fn_ctrl_disable('',['.tgtMbrTrPop']);
}
});
//기준조건 적용 체크박스 이벤트
$("#srchStdrCndPop").click(function(){
if($(this).is(":checked")){//체크시 기준 검색 조건 disable 해체 처리
$(".tgtStdrCndTrPop").show();
fn_ctrl_disable('',['.tgtStdrCndTrPop']);
$("#cmprChkboxPop").show();
}else{
$(".tgtStdrCndTrPop").hide();
fn_ctrl_disable(['.tgtStdrCndTrPop'],'');
$("#cmprChkboxPop").hide();
}
});
//비교조건 적용 체크박스 이벤트
$("#srchCmprCndPop").click(function(){
if($(this).is(":checked")){//체크시 비교 검색 조건 disable 해제 처리
$(".tgtCmprCndTrPop").show();
fn_ctrl_disable('',['.tgtCmprCndTrPop']);
}else{
$(".tgtCmprCndTrPop").hide();
fn_ctrl_disable(['.tgtCmprCndTrPop'],'');
}
});
//검색 버튼 이벤트
$("#srchBtnPop").click(function(){
fn_select_mbr_list_pop(1);
});
/*검색 회원 적용 클릭*/
$("#srchMbrBtn").on("click", function () {
fn_apply_mbr();
});
/*선택 회원 적용 클릭*/
$("#selectMbrBtn").on("click",function(){
fn_select_mbr();
});
})
/*검색 초기화*/
if (typeof fn_reset_pop === 'undefined') {
function fn_reset_pop () {
//초기화전 체크 됐는지 확인 후 리셋
let srchOtherMbrAt = $("#srchOtherMbrPop").is(":checked");
let srchStdrCndAt = $("#srchStdrCndPop").is(":checked");
let srchCmprCndAt = $("#srchCmprCndPop").is(":checked");
fn_reset_form('search-sectionPop');
if(srchOtherMbrAt){
$("#srchOtherMbrPop").click();
}
if(srchStdrCndAt){
$("#srchStdrCndPop").click();
}
if(srchCmprCndAt){
$("#srchCmprCndPop").click();
}
}
}
/************************************************************
검색조건 정합성 검사
*********************************************************/
//
if (typeof fn_check_srchOtherMbr_pop === 'undefined') {
function fn_check_srchOtherMbr_pop() {
let hasValue = true;
if($("#srchOtherMbrPop").is(":checked")){
if(fn_is_empty($("#srchKeywordPop").val())){
alert("검색어는 필수 값입니다.");
return false;
hasValue = false;
}
if ($("#srchDvPop").val() !== 'mbtlnb'){
alert("검색구분은 휴대전화만 가능합니다.");
return false;
hasValue = false;
}
}
return hasValue;
}
}
// 구매기준, 구매비교 정합성 검사
if (typeof fn_check_srchPurch_pop === 'undefined') {
function fn_check_srchPurch_pop () {
var stdrStrtPurchsPd = $('input[name="stdrStrtPurchsPd"]').val();
var stdrEndPurchsPd = $('input[name="stdrEndPurchsPd"]').val();
var cmprStrtPurchsPd = $('input[name="cmprStrtPurchsPd"]').val();
var cmprEndPurchsPd = $('input[name="cmprEndPurchsPd"]').val();
// 구매 기준 그룹
var stdrGroup = [
$('input[name="stdrStrtPurchsAmt"]').val(), $('input[name="stdrEndPurchsAmt"]').val(),
$('input[name="stdrStrtPurchsCnt"]').val(), $('input[name="stdrEndPurchsCnt"]').val(),
$('input[name="stdrGoodsNm"]').val()
];
// 구매 비교 그룹
var cmprGroup = [
$('input[name="cmprStrtPurchsAmt"]').val(), $('input[name="cmprEndPurchsAmt"]').val(),
$('input[name="cmprStrtPurchsCnt"]').val(), $('input[name="cmprEndPurchsCnt"]').val(),
$('input[name="cmprGoodsNm"]').val()
];
// ----- 조건 검사 -----
let hasValue = true;
// 1-1. stdrGroup 중 하나라도 값이 있는데 stdrStrtPurchsPd, stdrEndPurchsPd 값이 없을 때 ok
// 1-2 stdrStrtPurchsPd, stdrEndPurchsPd 값이 모두 있어야 함 ok
if ($("#srchStdrCndPop").is(":checked") && ((stdrGroup.some(val => val && val.trim() !== '') && (!stdrStrtPurchsPd || !stdrEndPurchsPd)) ||(!stdrStrtPurchsPd || !stdrEndPurchsPd))) {
alert('구매기간(기준) 시작일, 종료일은 필수 값입니다.');
hasValue = false;
return false;
}
// 2. cmprGroup 중 하나라도 값이 있는데 cmprStrtPurchsPd, cmprEndPurchsPd 값이 없을 때
// 2-1 cmprStrtPurchsPd, cmprEndPurchsPd 중 한개라도 값이 없을 때
if ($("#srchCmprCndPop").is(":checked") && ((cmprGroup.some(val => val && val.trim() !== '') && (!cmprStrtPurchsPd || !cmprEndPurchsPd)) || (!cmprStrtPurchsPd || !cmprEndPurchsPd))) {
alert('구매기간(비교) 시작일, 종료일은 필수 값입니다.');
hasValue = false;
return false;
}
//3. 구매기간 기준,비교 값 중복 체크
// 배열에 저장
var values = [stdrStrtPurchsPd, stdrEndPurchsPd, cmprStrtPurchsPd, cmprEndPurchsPd];
// 중복 값 검사
var duplicates = values.filter((val, index) => val && values.indexOf(val) !== index);
// 중복이 있으면 alert
if (duplicates.length > 0) {
alert('구매기간 기준날짜와 비교날짜가 중복되어 있습니다.');
hasValue = false;
return false;
}
return hasValue;
}
}
//통합,기본 검색조건 정합성 검사
if (typeof fn_check_srchDft_pop === 'undefined') {
function fn_check_srchDft_pop () {
var hasValue = true;
// srchUnity 클래스에 값이 있는지 검사
if(fn_is_empty($("#srchKeywordPop").val())){
hasValue = false;
}
// srchDft 클래스에 값이 있는지 검사 (hasValue가 false일 때만 검사)
if (!hasValue) {
$('.srchDftPop').each(function () {
var $el = $(this);
// 라디오 버튼인 경우 체크된 값만 검사
if ($el.is(':radio')) {
var radioName = $el.attr('name');
if (!fn_is_empty($('input[name="' + radioName + '"]:checked').val())) {
hasValue = true;
}
}
// 일반 input, select 검사
else if ($el.val() && $el.val().trim() !== '') {
hasValue = true;
}
});
}
if (!hasValue) {
alert('검색어 또는 검색조건을 추가해주세요');
}
return hasValue;
}
}
//정합성 통합
if (typeof fn_validate_pop === 'undefined') {
function fn_validate_pop () {
let hasValue = true;
//타회원 포함일시 검색어 정합성 검사
const chk1 = fn_check_srchOtherMbr_pop();
if (!chk1) {
hasValue = false;
}
if(!$("#srchOtherMbrPop").is(":checked")){
//구매기준, 구매비교 정합성 검사
const chk3 = fn_check_srchPurch_pop();
if (!chk3) {
hasValue = false;
}
}
return hasValue;
}
}
/* ********************************************************
* 회원 조회
******************************************************** */
if (typeof fn_select_mbr_list_pop === 'undefined') {
function fn_select_mbr_list_pop (pageIndex, pageUnit) {
//정합성 검사
if(!fn_validate_pop()){
return false;
}
if (!pageIndex) {
$('#pageIndexPop').val(1);
} else {
$('#pageIndexPop').val(pageIndex);
}
let params = $('#search-sectionPop').serialize() + "&orderCnd="+$("#orderCndPop").val();
if (pageUnit != undefined) {
params += '&pageUnit=' + pageUnit + '&pageIndex' + pageIndex;
} else {
params += '&pageUnit=' + $('#pageUnitPop').val() + '&pageIndex' + $("#pageIndexPop").val();
}
$.ajax({
type : 'post',
url : '<c:url value="/itrnt/mbr/selectItrntMbrPopList"/>',
data : params,
success : function(data) {
$('#pageDivPop').html(data);
$('#pageUnitPop').niceSelect();
$('#orderCndPop').niceSelect();
if(!fn_is_empty($(".mbtlnbPop"))){
$(".mbtlnbPop").each(function () {
let $this = $(this);
let text = $this.text().trim();
if (text.length > 0) {
let mbtlnb = fn_format_mbtlnb(text.replace(/\s+/g, ''));
mbtlnb = mbtlnb.replace(/(\d{3})-(\d{4})-(\d{4})/, "$1-****-$3");
$(this).text(mbtlnb);
}
});
}
}
});
}
}
//검색 회원 적용
if (typeof fn_apply_mbr === 'undefined') {
function fn_apply_mbr () {
//정합성 검사
if(!fn_validate_pop()){
return false;
}
let params = $('#search-sectionPop').serialize();
$.ajax({
type: "post",
url: "<c:url value='/itrnt/mbr/selectItrntMbrPopListAjax'/>",
data: params,
success: function (data) {
let resultArr = data.resBody.result;
resultArr = JSON.parse(resultArr);
let tot = resultArr.result.mbrInfoCnt;
resultArr = resultArr.result.mbrInfo;
$(".srchMbrCnt").text(tot);
$(".mbrInfo").val(resultArr).trigger("change");
$("#sndngTrgetParam").val(JSON.stringify(resultArr));
fn_close_modal("member-search");
}
});
}
}
//선택 회원 적용
if (typeof fn_select_mbr === 'undefined') {
function fn_select_mbr (pageIndex, pageUnit) {
const chkedMbrInnb = $(".mbrInnbPop:checked");
if (chkedMbrInnb.length > 0) {
/*결과를 저장할 배열*/
let resultArr = [];
// 회원 고유 번호(공통)
const mbrInnbArr = [];
chkedMbrInnb.each(function () {
mbrInnbArr.push($(this).val());
});
// 회원 명
const recpntNmArr = [];
chkedMbrInnb.closest("td").find(".recpntNm").each(function () {
recpntNmArr.push($(this).val());
});
//회원구분코드
const mbrDvCdArr = [];
chkedMbrInnb.closest("td").find(".mbrDvCd").each(function () {
mbrDvCdArr.push($(this).val());
});
// 해당 필요 정보(이메일주소 혹은 전화번호)
const sndngInfoArr = [];
chkedMbrInnb.closest("td").find(".sndngInfo").each(function () {
sndngInfoArr.push($(this).val());
});
// 해당 필요 정보(전화번호)
const sndngMbtlnbArr = [];
chkedMbrInnb.closest("td").find(".sndngMbtlnb").each(function () {
sndngMbtlnbArr.push($(this).val());
});
// 배열을 순회하며 객체로 변환
for (let i = 0; i < mbrInnbArr.length; i++) {
resultArr.push({
mbrInnb: mbrInnbArr[i],
recpntNm: recpntNmArr[i],
sndngInfo: sndngInfoArr[i],
mbrDvCd: mbrDvCdArr[i],
sndngMbtlnb: sndngMbtlnbArr[i]
});
}
$(".srchMbrCnt").text(resultArr.length);
$(".mbrInfo").val(JSON.stringify(resultArr)).trigger("change");
fn_close_modal("member-search");
} else {
//회원이 체크되지 않으면 안내 문구 호출
alert("적용할 회원이 없습니다.");
}
}
}
</script>
<div id="member-search" class="modal" style="max-width: 1200px;">
<div class="modal-header">
<h4 id="title">회원 검색</h4>
</div>
<div class="modal-content">
<form id="search-sectionPop">
<input type="hidden" id="pageIndexPop" name="pageIndex" value="<c:out value = '${resultMap.vo.pageIndex}'/>"/>
<input type="hidden" name="srchMarktRecptnAgreAt" value="Y"/>
<div class="table-wrapper">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 12%;">
<col style="width: 28%;">
<col style="width: 12%;">
<col style="width: 30%;">
<col style="width: 12%;">
<col style="width: auto;">
<col style="width: 10%;">
<col style="width: auto;">
</colgroup>
<tbody>
<tr>
<th>검색어</th>
<td colspan="5">
<div class="td-inner">
<div class="select-box">
<select title="검색어 구분" name="srchDv" id="srchDvPop">
<option value="mbtlnb" >휴대전화</option>
<option value="mbrNm" class="tgtDsb">이름</option>
<option value="mbrId" class="tgtDsb">아이디</option>
<option value="email" class="tgtDsb">이메일</option>
</select>
</div>
<input class="input-text xl srchUnity" type="text" title="검색 키워드" id="srchKeywordPop" name="srchKeyword" placeholder="검색어를 입력해 주십시요.">
<c:if test = "${resultMap.tentGroup eq '02'}">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox blue-7">
<input type="checkbox" value="Y" name="srchOtherMbr" id="srchOtherMbrPop">
<span class="check"></span>
<span class="control-label">타 매장 회원 포함(일치)</span>
</label>
</div>
</c:if>
</div>
</td>
</tr>
<c:if test = "${resultMap.tentGroup eq '02'}">
<tr class="tgtMbrTrPop">
<th>가입일</th>
<td colspan="5">
<div class="td-inner">
<div class="input-container">
<input type="text" id="srchStrtRegistDtPop" class="datepicker srchDftPop" name="srchStrtRegistDt"
title="시작 날짜 선택" autocomplete="off">
<span class="tilde">~</span>
<input type="text" id="srchEndRegistDtPop" class="datepicker srchDftPop" name="srchEndRegistDt"
title="종료 날짜 선택" autocomplete="off">
</div>
<div class="dateRange-btnContainer" id="registDtBtnPop">
<button class="dateRange-btn">어제</button>
<button class="dateRange-btn">오늘</button>
<button class="dateRange-btn">3일간</button>
<button class="dateRange-btn">일주일</button>
<button class="dateRange-btn">1개월</button>
<button class="dateRange-btn">3개월</button>
<button class="dateRange-btn">6개월</button>
<button class="dateRange-btn">1년</button>
<button class="dateRange-btn selected">전체</button>
</div>
</div>
</td>
</tr>
<tr class="tgtMbrTrPop">
<th>최종 구매일</th>
<td colspan="5">
<div class="td-inner">
<div class="input-container">
<input type="text" id="srchStrtLastPurchsDtPop" class="datepicker srchDftPop" name="srchStrtLastPurchsDt"
title="시작 날짜 선택" autocomplete="off">
<span class="tilde">~</span>
<input type="text" id="srchEndLastPurchsDtPop" class="datepicker srchDftPop" name="srchEndLastPurchsDt"
title="종료 날짜 선택" autocomplete="off">
</div>
<div class="dateRange-btnContainer" id="purchsDtBtnPop">
<button class="dateRange-btn">어제</button>
<button class="dateRange-btn">오늘</button>
<button class="dateRange-btn">3일간</button>
<button class="dateRange-btn">일주일</button>
<button class="dateRange-btn">1개월</button>
<button class="dateRange-btn">3개월</button>
<button class="dateRange-btn">6개월</button>
<button class="dateRange-btn">1년</button>
<button class="dateRange-btn selected">전체</button>
</div>
</div>
</td>
</tr>
<tr class="tgtMbrTrPop">
<th>생년</th>
<td>
<div class="td-inner">
<div class="select-box">
<jsp:useBean id="now" class="java.util.Date"/>
<fmt:formatDate var="year" value="${now}" pattern="yyyy"/>
<select title="생년 셀렉트" name="srchStrtBrthYear" id = "srchStrtBrthYearPop" class="srchDftPop">
<option value="">시작 연도</option>
<c:forEach var="i" begin="0" end="101" >
<c:choose>
<c:when test="${ (year-i) eq fn:substring( resultMap.result.brthDe,0, 4 ) }">
<option value="<c:out value="${ year-i }"/>" selected="selected"><c:out value="${ year-i }"/>년</option>
</c:when>
<c:otherwise>
<option value="<c:out value="${ year-i }"/>"><c:out value="${ year-i }"/>년</option>
</c:otherwise>
</c:choose>
</c:forEach>
</select>
</div>
<span class="tilde">~</span>
<div class="select-box">
<select title="생년 셀렉트" name="srchEndBrthYear" id = "srchEndBrthYearPop" class="srchDftPop">
<option value="">종료 연도</option>
<c:forEach var="i" begin="0" end="101" >
<c:choose>
<c:when test="${ (year-i) eq fn:substring( resultMap.result.brthDe,0, 4 ) }">
<option value="<c:out value="${ year-i }"/>" selected="selected"><c:out value="${ year-i }"/>년</option>
</c:when>
<c:otherwise>
<option value="<c:out value="${ year-i }"/>"><c:out value="${ year-i }"/>년</option>
</c:otherwise>
</c:choose>
</c:forEach>
</select>
</div>
</div>
</td>
<th>생월</th>
<td colspan="2">
<div class="td-inner">
<div class="input-container">
<div class="select-box">
<select title="생월 셀렉트" name="srchStrtBrthMonth" id = "srchStrtBrthMonthPop" class="srchDftPop">
<option value="">시작 월</option>
<c:forEach var="month" begin="1" end="12" >
<c:choose>
<c:when test="${ month eq fn:substring( resultMap.result.brthDe,4, 6 ) }">
<option value="<c:if test="${ month lt 10 }">0</c:if><c:out value="${ month }"/>" selected="selected"><c:if test="${ month lt 10 }">0</c:if><c:out value="${ month }"/>월</option>
</c:when>
<c:otherwise>
<option value="<c:if test="${ month lt 10 }">0</c:if><c:out value="${ month }"/>"><c:if test="${ month lt 10 }">0</c:if><c:out value="${ month }"/>월</option>
</c:otherwise>
</c:choose>
</c:forEach>
</select>
</div>
&nbsp;1일
<span class="tilde">~</span>
<div class="select-box">
<select title="생월 셀렉트" name="srchEndBrthMonth" id = "srchEndBrthMonthPop" class="srchDftPop">
<option value="">종료 월</option>
<c:forEach var="month" begin="1" end="12" >
<c:choose>
<c:when test="${ month eq fn:substring( resultMap.result.brthDe,4, 6 ) }">
<option value="<c:if test="${ month lt 10 }">0</c:if><c:out value="${ month }"/>" selected="selected"><c:if test="${ month lt 10 }">0</c:if><c:out value="${ month }"/>월</option>
</c:when>
<c:otherwise>
<option value="<c:if test="${ month lt 10 }">0</c:if><c:out value="${ month }"/>"><c:if test="${ month lt 10 }">0</c:if><c:out value="${ month }"/>월</option>
</c:otherwise>
</c:choose>
</c:forEach>
</select>
</div>
&nbsp;1일
</div>
</div>
</td>
</tr>
<tr class="tgtMbrTrPop">
<th>성별</th>
<td>
<div class="td-inner">
<div class="custom-radio-container">
<div class="custom-radio">
<input type="radio" id="sexAPop" checked="" name="srchSex" class="srchDftPop" value="">
<label for="sexAPop">전체</label>
</div>
<c:if test = "${not empty resultMap.sex}">
<c:forEach var = "sex" items = "${resultMap.sex}">
<div class="custom-radio">
<input type="radio" id="sex${sex.cd}Pop" name="srchSex" class="srchDftPop" value="${sex.cd}">
<label for="sex${sex.cd}Pop">${sex.cdNm}</label>
</div>
</c:forEach>
</c:if>
</div>
</div>
</td>
<th>등급</th>
<td>
<div class="td-inner">
<div class="select-box">
<select title="해당 셀렉트에 대한 설명" name="srchGrad" class="srchDftPop">
<option value="">전체</option>
<c:if test="${not empty resultMap.grad}">
<c:forEach var="grad" items="${resultMap.grad}">
<option value="<c:out value="${grad.mbrGradInnb}"/>"><c:out
value="${grad.mbrGradNm}"/></option>
</c:forEach>
</c:if>
</select>
</div>
</div>
</td>
</tr>
<tr class="tgtMbrTrPop">
<th>마일리지</th>
<td>
<div class="td-inner">
<div class="input-container">
<input type="text" class="input-text sm right srchDftPop" name="srchStrtMlg"
title="해당 인풋에 대한 설명">
<span class="input-unit-text">원</span>
<span class="tilde">~</span>
<input type="text" class="input-text sm right srchDftPop" name="srchEndMlg"
title="해당 인풋에 대한 설명">
<span class="input-unit-text">원</span>
</div>
</div>
</td>
</tr>
<tr class="tgtMbrTrPop">
<th colspan="7" style="height: 30px;">
<label class="b-checkbox checkbox">
<span class="control-label">구매조건 검색</span>&nbsp;
<input type="checkbox" value="Y" id="srchStdrCndPop">
<span class="check"></span>
&nbsp;<span class="blue-7">*조건 검색시 구매기간은 필수값입니다.</span>
</label>
<label class="b-checkbox checkbox" style="display: none" id="cmprChkboxPop">
<span class="control-label">비교조건 포함</span>&nbsp;
<input type="checkbox" value="Y" id="srchCmprCndPop">
<span class="check"></span>
</label>
</th>
</tr>
<tr class="tgtStdrCndTrPop" style="display: none;">
<th>구매기간(기준)</th>
<td>
<div class="td-inner">
<div class="input-container">
<input type="text" id="stdrStrtPurchsPdPop" class="datepicker srchDftPop" name="stdrStrtPurchsPd"
title="시작 날짜 선택" autocomplete="off" disabled>
<span class="tilde">~</span>
<input type="text" id="stdrEndPurchsPdPop" class="datepicker srchDftPop" name="stdrEndPurchsPd"
title="종료 날짜 선택" autocomplete="off" disabled>
</div>
</div>
</td>
<th>품목명(기준)</th>
<td>
<div class="td-inner">
<input type="text" class="input-text srchDftPop" value="" title="해당 인풋에 대한 설명" name="stdrGoodsNm" disabled>
</div>
</td>
</tr>
<tr class="tgtStdrCndTrPop" style="display: none;">
<th>구매금액(기준)</th>
<td>
<div class="td-inner">
<div class="input-container">
<input type="text" class="input-text sm right srchDftPop" name="stdrStrtPurchsAmt"
title="구매금액(기준) 시작" disabled>
<span class="input-unit-text">원</span>
<span class="tilde">~</span>
<input type="text" class="input-text sm right srchDftPop" name="stdrEndPurchsAmt"
title="구매금액(기준) 종료" disabled>
<span class="input-unit-text">원</span>
</div>
</div>
</td>
<th>구매횟수(기준)</th>
<td>
<div class="td-inner">
<div class="input-container">
<input type="text" class="input-text sm right srchDftPop" name="stdrStrtPurchsCnt"
title="해당 인풋에 대한 설명" disabled>
<span class="input-unit-text">번</span>
<span class="tilde">~</span>
<input type="text" class="input-text sm right srchDftPop" name="stdrEndPurchsCnt"
title="해당 인풋에 대한 설명" disabled>
<span class="input-unit-text">번</span>
</div>
</div>
</td>
</tr>
<tr class="tgtCmprCndTrPop" style="display: none;">
<th>구매기간(비교)</th>
<td>
<div class="td-inner">
<div class="input-container">
<input type="text" id="cmprStrtPurchsPdPop" class="datepicker srchDftPop" name="cmprStrtPurchsPd"
title="시작 날짜 선택" autocomplete="off" disabled>
<span class="tilde">~</span>
<input type="text" id="cmprEndPurchsPdPop" class="datepicker srchDftPop" name="cmprEndPurchsPd"
title="종료 날짜 선택" autocomplete="off">
</div>
</div>
</td>
<th>품목명(비교)</th>
<td>
<div class="td-inner">
<input type="text" class="input-text srchDftPop" value="" title="품목명(비교)" name="cmprGoodsNm" disabled>
</div>
</td>
</tr>
<tr class="tgtCmprCndTrPop" style="display: none;">
<th>구매금액(비교)</th>
<td>
<div class="td-inner">
<div class="input-container">
<input type="text" class="input-text sm right srchDftPop" name="cmprStrtPurchsAmt"
title="구매금액(비교) 시작" disabled>
<span class="input-unit-text">원</span>
<span class="tilde">~</span>
<input type="text" class="input-text sm right srchDftPop" name="cmprEndPurchsAmt"
title="구매금액(비교) 종료" disabled>
<span class="input-unit-text">원</span>
</div>
</div>
</td>
<th>구매횟수(비교)</th>
<td>
<div class="td-inner">
<div class="input-container">
<input type="text" class="input-text sm right srchDftPop" name="cmprStrtPurchsCnt"
title="구매횟수(비교) 시작" disabled>
<span class="input-unit-text">번</span>
<span class="tilde">~</span>
<input type="text" class="input-text sm right srchDftPop" name="cmprEndPurchsCnt"
title="구매횟수(비교) 종료" disabled>
<span class="input-unit-text">번</span>
</div>
</div>
</td>
</tr>
</c:if>
</tbody>
</table>
</div>
<div class="form-control-container">
<div class="left">
</div>
<div class="center">
<button class="btn outline" type="button"
onclick="fn_reset_pop();">
<spring:message code="button.init"/></button>
<button class="btn primary" type="button" id="srchBtnPop">
<spring:message code="button.search"/></button>
</div>
<div class="right">
</div>
</div>
</form>
<section class="content-section">
<div id="pageDivPop">
<div class="form-control-container">
<div class="left">
<div class="search-number">
<span class="search-number__text">총 <strong>0</strong>건</span>
</div>
</div>
<div class="center">
</div>
<div class="right">
<div class="select-box">
<select title="정렬 조건" id = "orderCndPop">
<option value="recent">최근 가입순</option>
<option value="mlgUp">마일리지 많은순</option>
<option value="mlgDn">마일리지 적은순</option>
<option value="amtUp">구매금액 많은순</option>
<option value="amtDn">구매금액 적은순</option>
<option value="cntUp">주문수 많은순</option>
<option value="cntDn">주문수 적은순</option>
</select>
</div>
<div class="select-box">
<select id="pageUnitPop" name="pageUnit" title="페이지당 출력될 목록건수" onchange="fn_select_mbr_list_pop('1');">
<c:forEach items="${ resultMap.paginationInfo.pageUnitArr }" var="pageUnit" varStatus="pageUnitStatus">
<option value="<c:out value="${ pageUnit }"/>" <c:if test="${ resultMap.paginationInfo.recordCountPerPage eq pageUnit }">selected="selected"</c:if>><c:out value="${ pageUnit }"/>개씩</option>
</c:forEach>
</select>
</div>
</div>
</div>
<hr class="horizontal-line">
<hr class="spacing">
<div class="table-wrapper table-wrapper--scroll">
<table class="table vertical">
<caption>해당 테이블에 대한 설명</caption>
<!-- 각 열 width 설정 -->
<thead>
<tr>
<th>
<label class="b-checkbox checkbox is-medium check-all" >
<input type="checkbox" value="" id = "chkA">
<span class="check"></span>
</label>
</th>
<th>번호</th>
<th>가입점</th>
<th>아이디</th>
<th>이름</th>
<th>핸드폰</th>
<th>가입일</th>
<th>최종구매일</th>
<th>구매금액</th>
<th>마일리지</th>
<c:if test = "${resultMap.shopInfo.ordrSetupInfo.cashAt eq 'Y'}">
<th>GC머니</th>
</c:if>
</tr>
</thead>
<tbody>
<tr>
<td colspan="10"><spring:message code="common.nodata"/></td>
</tr>
</tbody>
</table>
</div>
</div>
</section>
</div>
<div class="modal-footer">
<button type = "button" class="btn primary" id="selectMbrBtn">선택한 회원 <spring:message code="button.apply"/> </button>
<button type = "button" class="btn primary" id="srchMbrBtn">검색한 회원 <spring:message code="button.apply"/></button>
<a rel="modal:close" class="btn outline"><spring:message code="button.close"/></a>
</div>
</div>
<script>
$( document ).ready(function() {
// 모달이 닫힐 때 이벤트를 감지하는 함수
$('#member-search').on('hidden.bs.modal', function (e) {
alert('모달이 닫혔습니다.');
// 추가로 필요한 동작을 여기에 작성
});
});
</script>
<script src="/admin/js/script.js" defer=""></script>
</html>

View File

@@ -0,0 +1,145 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<%@ 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"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%--
Class Name : MbrJoinForm.jsp
Description : 포스 회원 가입 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-12-19 이운산 최초 생성(퍼블리싱 적용)
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<c:import url="/comm/itrnt/include"/>
<script>
$(document).ready(function () {
$("#posMbrSend").on("click", function(){
const params = $('#posMbrForm').serialize();
$.ajax({
type : "post",
url : "/itrnt/ntcn/mssage/insertPosMbrSend",
data : params,
success : function(data) {
const result = JSON.parse(data.resBody.result);
if(result.message === 'success') {
alert("발송되었습니다.");
}
}
})
})
})
</script>
<style>
.form-content {
max-width: 560px;
margin-inline: auto;
padding-top: 20px;
}
.form-page {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
}
.form-box {
width: 480px;
height: 408px;
padding: 30px 36px;
background-color: #ffffff;
border-radius: 10px;
box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1);
}
</style>
</head>
<body>
<main class="form-page">
<section class="form-box">
<section class="form-content">
<form id="posMbrForm">
<input type="hidden" name="strInnb" title="매장번호" value="${resultMap.strInnb}"/>
<input type="hidden" name="storeCode" value="${storeCode}"/>
<div class="">
고객이름과 휴대전화를 입력 후 [전송] 버튼을 누르시면,
회원 가입을 위한 링크가 안내 문자로 고객님께 전송되며,
고객님께서 직접 회원 가입을 진행하시면 됩니다.
</div>
<hr class="spacing">
<div class="table-wrapper">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 10%;">
<col style="width: 23%;">
<col style="width: 10%;">
<col style="width: 23%;">
<col style="width: 10%;">
<col style="width: 23%;">
</colgroup>
<tbody>
<tr>
<th>가입매장</th>
<td colspan="5">
<div class="td-inner">
<c:out value="${resultMap.tentcpnNm}"/>
</div>
</td>
</tr>
<tr>
<th>고객이름</th>
<td colspan="5">
<div class="td-inner">
<input class="input-text xl" type="text" name="cstmrNm" title="고객이름"
placeholder="고객이름">
</div>
</td>
</tr>
<tr>
<th>휴대전화</th>
<td colspan="5">
<div class="td-inner">
<input class="input-text xl" type="text" name="recptnNb" title="휴대전화"
placeholder="휴대전화">
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="form-control-container">
<div class="left">
</div>
<div class="center">
<button type="button" class="btn primary" id="posMbrSend">전송</button>
</div>
<div class="right">
</div>
</div>
</form>
</section>
</section>
</main>
</body>
</html>

View File

@@ -0,0 +1,520 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<%@ 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"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%--
Class Name : ItrntMngrDtlFormR.jsp
Description : 인트라넷 관리자 상세 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-03-18 유재현 최초 생성(퍼블리싱 적용)
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@ include file="/WEB-INF/views/comm/itrnt/Include.jsp"%>
<script>
/**********************************************
* 인트라넷 관리자 목록 화면 이동
***********************************************/
const fn_move_itrnMngrList = function () {
location.href='/itrnt/mngr/selectItrntMngrList';
}
/**********************************************
* 인트라넷 관리자 저장
***********************************************/
const fn_update_itrntMngr = function() {
//비밀번호 입력되었는지 확인
const tentcpnPassword = $('#tentcpnPassword').val();
const tentcpnPasswordChk = $('#tentcpnPasswordChk').val();
const pwdChangeChk = $('#pwdChangeChk:checked')
if(pwdChangeChk < 1 && (tentcpnPassword < 1 || tentcpnPasswordChk < 1)){
alert('비밀번호를 입력해 주세요');
return;
}else if(pwdChangeChk < 1 && (tentcpnPassword !== tentcpnPasswordChk)){
alert('비밀번호가 일치하지 않습니다');
return;
}
//비밀번호 정규식 확인
const pwdChkNoticeResult = $('#pwdChkNoticeRs').val();
if(pwdChangeChk < 1 && (pwdChkNoticeResult !=='Y')){
alert('비밀번호 조합 조건을 확인해 주세요')
return;
}
const url = '<c:url value="/itrnt/mngr/updateItrntMngrUptDtl"/>';
const saveForm = $('#itrntMngrDtlUptForm');
const formData = new FormData();
saveForm.serializeArray().forEach(function(item) {
formData.append(item.name,item.value);
});
if(confirm('관리자를 <spring:message code="confirm.common.insert"/>')) {
$.ajax({
type : 'post',
url : url,
data : formData,
processData: false,
contentType: false,
success : function(result) {
console.log(result.toString())
if (JSON.parse(result.resBody.result).message ==='success') {
alert('<spring:message code="success.common.insert"/>');
location.href='/itrnt/mngr/selectItrntMngrList';
}else if(JSON.parse(result.resBody.result).message ==='pwdNotMatch'){
alert('현재 로그인된 비밀번호가 일치하지 않습니다');
$('#currentPassword').val('');
$('#tentcpnPassword').val('');
$('#tentcpnPasswordChk').val('');
$('#currentPassword').focus();
} else {
alert('<spring:message code="fail.common.insert"/>');
}
}
});
}
}
$(document).ready(function() {
//비밀번호 정규식 확인
const pwdChk = $('#tentcpnPasswordChk').on('propertychange change keyup paste input', function () {
const pwdRegex = /^(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[!#$%&()*+-\/:<>?@\[\\\]^_{|}~]).{10,20}$/;
let tentcpnPassword = $('#tentcpnPassword').val().trim();
let tentcpnPasswordChk = $('#tentcpnPasswordChk').val().trim();
let pwdChkNotice = $('#pwdChkNotice');
let pwdChkNoticeResult = $('#pwdChkNoticeRs')
if (pwdRegex.test(tentcpnPassword) === false
|| pwdRegex.test(tentcpnPasswordChk) === false) {
pwdChkNotice.attr('value', '비밀번호 조합 조건을 확인해 주세요.');
pwdChkNotice.attr('type', 'text').css('visibility', 'visible');
pwdChkNotice.css('pointer-events','none'); //클릭 방지
pwdChkNoticeResult.attr('value', 'N')
} else if(tentcpnPassword === tentcpnPasswordChk){
pwdChkNotice.attr('value', '사용 가능한 비밀번호 입니다')
pwdChkNotice.attr('type', 'text').css('visibility', 'visible')
pwdChkNotice.css('pointer-events','none');
pwdChkNoticeResult.attr('value', 'Y')
}else{
pwdChkNotice.attr('value', '입력하신 비밀번호가 일치하지 않습니다.')
pwdChkNotice.attr('type', 'text').css('visibility', 'visible')
pwdChkNotice.css('pointer-events','none');
pwdChkNoticeResult.attr('value', 'N')
}
});
setTimeout(pwdChk, 3000);
//관리자 권한 표시
//관리자 쓰기 권한
const adminWriteInput = $('.adminWrite');
adminWriteInput.each(function(){
if($(this).children('input').val() !=='Y'){
$(this).siblings('span.stone-7').remove()
$(this).remove()
}
});
//관리자 권한
const adminCategoryInput = $('.adminCategory');
adminCategoryInput.each(function(){
if($(this).children('input').val() !=='Y'){
$(this).remove()
}
});
//관리자 권한 / 쓰기권한 모두 없을 경우 div 삭제
const checkboxContainer = $('.b-checkbox-container');
checkboxContainer.each(function () {
if($(this).find('input').length === 0){
$(this).remove()
}
})
// 비밀번호 변경 창 OnOff
$('#pwdChangeChk').on("click",function(){
if($(this).attr("checked")){
$(".pwdChangeDiv").hide();
$(this).removeAttr('checked', false)
}else{
$(".pwdChangeDiv").show();
$(this).attr('checked', true)
}
});
});
</script>
</head>
<body>
<%@ include file="/WEB-INF/views/comm/itrnt/Header.jsp"%>
<main class="main">
<%@ include file="/WEB-INF/views/comm/itrnt/Left.jsp"%>
<div class="content">
<div class="content__inner">
<button class="side-nav__fold"><span class="visually-hidden">좌측메뉴 펼치기/닫기</span></button>
<div class="page-title">
<h2 class="page-title__title">관리자 정보</h2>
<div class="page-title__btn-container">
<button type="button" class="btn outline" onclick="fn_move_itrnMngrList();"> <spring:message code="button.list"/> </button>
<button type="button" class="btn primary" onclick="fn_update_itrntMngr();"> <spring:message code="button.save"/> </button>
</div>
</div>
<section class="content-section">
<form id="itrntMngrDtlUptForm" name="itrntMngrDtlUptForm">
<div class="table-wrapper">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 12%;">
<col>
</colgroup>
<tbody>
<c:if test="${not empty resultMap.result}"/>
<input type="hidden" name="strInnb" value="${resultMap.result.strInnb}"/>
<tr>
<th>최근접속일</th>
<td>
<div class="td-inner">
<p><c:out value="${resultMap.result.lastLoginDt}"/></p>
</div>
</td>
<th>등록일</th>
<td>
<div class="td-inner">
<p><c:out value="${resultMap.result.registDt}"/></p>
</div>
</td>
</tr>
<tr>
<th>관리자 구분</th>
<td>
<c:if test="${resultMap.result.reprsntMngrAt == 'Y'}">
<div class="td-inner">
<p><c:out value="대표운영자" default="부운영자"/></p>
</div>
</c:if>
</td>
</tr>
<tr>
<th>관리자 ID</th>
<td>
<div class="td-inner">
<p><c:out value="${resultMap.result.tentcpnId}"/></p>
</div>
</td>
</tr>
<tr>
<th>비밀번호
<div class="b-checkbox-container">
<label class="b-checkbox checkbox">
<input type="checkbox" id="pwdChangeChk">
<span class="check"></span>
<span class="control-label"> 변경</span>
</label>
</div>
</th>
<td colspan="3">
<div class="td-inner">
<div class="table-wrapper w-100 pwdChangeDiv" style="width: 800px; display: none">
<table class="table transparent">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 20%;">
<col>
</colgroup>
<tbody>
<tr>
<th class="text-left">현재 비밀번호</th>
<td class="w-25">
<div class="td-inner">
<input type="password" class="input-text" value="" id="currentPassword" name="currentPassword" autocomplete="new-password"
title="해당 인풋에 대한 설명">
</div>
</td>
</tr>
<tr>
<th class="text-left">비밀번호 변경</th>
<td class="w-25">
<div class="td-inner">
<input type="password" class="input-text" value="" id="tentcpnPassword" name="tentcpnPassword" autocomplete="new-password"
title="해당 인풋에 대한 설명">
<p class="fyi fs-13 gray-7 ml-4">10-20자, 영문 대소문자
또는
숫자,
특수문자 중 2가지 이상 조합</p>
</div>
</td>
</tr>
<tr>
<th class="text-left">비밀번호 변경 확인</th>
<td class="w-25">
<div class="td-inner">
<input type="password" class="input-text" value="" id="tentcpnPasswordChk" autocomplete="new-password"
title="해당 인풋에 대한 설명">
<p class="fyi fs-13 gray-7 ml-4">사용가능 특수문자 : ! #
$ %
&amp; ( ) * + - / : &lt; =
&gt; ? @ [ \ ] ^ _ { | } ~</p>
<input type="hidden" class="fyi fs-13 gray-7 ml-4 w-full" id="pwdChkNotice" tabindex="-1" readonly />
<input type="hidden" id="pwdChkNoticeRs" />
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</td>
</tr>
<tr>
<th>관리자 명</th>
<td>
<div class="td-inner">
<input class="input-text md" type="text" title="해당 인풋에 대한 설명" name="tentcpnNm" value="<c:out value="${resultMap.result.tentcpnNm}"/>" />
</div>
</td>
</tr>
</tbody>
</table>
</div>
</form>
</section>
<section class="content-section">
<div class="form-control-container mb-10">
<div class="left">
<h3 class="delivery-info__title">
관리자 권한
</h3>
</div>
<div class="center">
</div>
</div>
<div class="table-wrapper">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 12%;">
<col>
</colgroup>
<tbody>
<c:choose>
<c:when test="${ not empty resultMap.result.mngrAuthor}">
<tr>
<th>매출분석</th>
<td>
<div class="td-inner">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox adminCategory">
<input type="hidden" id="daily_revenue" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.dailyRevenue}"/>">
<span class="check"></span>
<span class="control-label">일별매출</span>
</label>
<label class="b-checkbox checkbox adminCategory">
<input type="hidden" id="weekly_revenue" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.weeklyRevenue}"/>">
<span class="check"></span>
<span class="control-label">주별매출</span>
</label>
<label class="b-checkbox checkbox adminCategory">
<input type="hidden" id="monthly_revenue" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.monthlyRevenue}"/>">
<span class="check"></span>
<span class="control-label">월별매출</span>
</label>
</div>
</div>
</td>
</tr>
<tr>
<th>판매분석</th>
<td>
<div class="td-inner">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox adminCategory">
<input type="hidden" id="daily_static" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.dailyStatic}"/>">
<span class="check"></span>
<span class="control-label">금일 판매내역</span>
</label>
<label class="b-checkbox checkbox adminCategory">
<input type="hidden" id="weekly_static" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.weeklyStatic}"/>">
<span class="check"></span>
<span class="control-label">주간 판매내역</span>
</label>
<label class="b-checkbox checkbox adminCategory">
<input type="hidden" id="monthly_static" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.monthlyStatic}"/>">
<span class="check"></span>
<span class="control-label">월간 판매내역</span>
</label>
<label class="b-checkbox checkbox adminCategory">
<input type="hidden" id="revenue_static" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.revenueStatic}"/>">
<span class="check"></span>
<span class="control-label">판매 상품 순위</span>
</label>
</div>
</div>
</td>
</tr>
<tr>
<th>마이페이지</th>
<td>
<div class="td-inner">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox adminCategory">
<input type="hidden" id="catalog" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.catalog}"/>">
<span class="check"></span>
<span class="control-label">회원리스트</span>
</label>
<label class="b-checkbox checkbox adminCategory">
<input type="hidden" id="member_sms" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.memberSns}"/>">
<span class="check"></span>
<span class="control-label">SMS발송관리</span>
</label>
</div>
</div>
</td>
</tr>
<tr>
<th>관리자</th>
<td>
<div class="td-inner vertical gap-15">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox adminCategory">
<input type="hidden" id="gs_seller_notice" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.gsSellerNotice}"/>">
<span class="check"></span>
<span class="control-label">공지사항</span>
</label>
<span class="stone-7">→</span>
<label class="b-checkbox checkbox adminWrite" disabled>
<input disabled type="hidden" id="gs_seller_notice_act" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.gsSellerNoticeAct}"/>">
<span class="check"></span>
<span class="control-label">쓰기/삭제</span>
</label>
</div>
<div class="b-checkbox-container">
<label class="b-checkbox checkbox adminCategory">
<input type="hidden" id="shop_education" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.shopEducation}"/>">
<span class="check"></span>
<span class="control-label">교육자료</span>
</label>
<span class="stone-7">→</span>
<label class="b-checkbox checkbox adminWrite" disabled>
<input disabled type="hidden" id="shop_education_act" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.shopEducationAct}"/>">
<span class="check"></span>
<span class="control-label">쓰기/삭제</span>
</label>
</div>
<div class="b-checkbox-container">
<label class="b-checkbox checkbox adminCategory">
<input type="hidden" id="member_edit_req" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.memberEditReq}"/>">
<span class="check"></span>
<span class="control-label">회원정보수정요청</span>
</label>
<span class="stone-7">→</span>
<label class="b-checkbox checkbox adminWrite" disabled>
<input disabled type="hidden" id="member_edit_req_act" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.memberEditReqAct}"/>">
<span class="check"></span>
<span class="control-label">쓰기/삭제</span>
</label>
</div>
<div class="b-checkbox-container">
<label class="b-checkbox checkbox adminCategory">
<input type="hidden" id="point_edit_req" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.pointEditReq}"/>">
<span class="check"></span>
<span class="control-label">마일리지(포인트)수정요청</span>
</label>
<span class="stone-7">→</span>
<label class="b-checkbox checkbox adminWrite" disabled>
<input disabled type="hidden" id="point_edit_req_act" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.pointEditReqAct}"/>">
<span class="check"></span>
<span class="control-label">쓰기/삭제</span>
</label>
</div>
<div class="b-checkbox-container">
<label class="b-checkbox checkbox adminCategory">
<input type="hidden" id="logistics_req" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.logisticsReq}"/>">
<span class="check"></span>
<span class="control-label">물류관련요청</span>
</label>
<span class="stone-7">→</span>
<label class="b-checkbox checkbox adminWrite" disabled>
<input disabled type="hidden" id="logistics_req_act" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.logisticsReqAct}"/>">
<span class="check"></span>
<span class="control-label">쓰기/삭제</span>
</label>
</div>
<div class="b-checkbox-container">
<label class="b-checkbox checkbox adminCategory">
<input type="hidden" id="shop_edit_req" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.shopEditReq}"/>">
<span class="check"></span>
<span class="control-label">매장정보변경</span>
</label>
<span class="stone-7">→</span>
<label class="b-checkbox checkbox adminWrite" disabled>
<input disabled type="hidden" id="shop_edit_req_act" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.shopEditReqAct}"/>">
<span class="check"></span>
<span class="control-label">쓰기/삭제</span>
</label>
</div>
<div class="b-checkbox-container">
<label class="b-checkbox checkbox adminCategory">
<input type="hidden" id="family_qna_edit_req" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.familyQnaEditReq}"/>">
<span class="check"></span>
<span class="control-label">가맹점 Q&A</span>
</label>
<span class="stone-7">→</span>
<label class="b-checkbox checkbox adminWrite" disabled>
<input disabled type="hidden" id="family_qna_edit_req_act" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.familyQnaEditReqAct}"/>">
<span class="check"></span>
<span class="control-label">쓰기/삭제</span>
</label>
</div>
<div class="b-checkbox-container">
<label class="b-checkbox checkbox adminCategory">
<input type="hidden" id="admin_list" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.adminList}"/>">
<span class="check"></span>
<span class="control-label">관리자 리스트</span>
</label>
</div>
</div>
</td>
</tr>
</c:when>
<c:otherwise>
<tr>
<td class="row-no-data" colspan="8">조회된 관리자 권한이 없습니다.</td>
</tr>
</c:otherwise>
</c:choose>
</tbody>
</table>
</div>
</section>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</div>
</main>
</body>
</html>

View File

@@ -0,0 +1,540 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<%@ 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"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%--
Class Name : ItrntMngrFormR.jsp
Description : 인트라넷 관리자 등록 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-03-18 유재현 최초 생성(퍼블리싱 적용)
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@ include file="/WEB-INF/views/comm/itrnt/Include.jsp"%>
<script>
/* ********************************************************
* 시작 화면 조작 함수
******************************************************** */
$(document).ready(function(){
let urlParams = new URLSearchParams(window.location.search);
});
/**********************************************
* 인트라넷 관리자 목록 화면 이동
***********************************************/
const fn_move_itrnMngrList = function () {
location.href='/itrnt/mngr/selectItrntMngrList';
}
/**********************************************
* 등록
***********************************************/
const fn_regist_itrntMngr = function() {
//비밀번호 입력되었는지 확인
const tentcpnPassword = $('#tentcpnPassword');
const tentcpnPasswordChk = $('#tentcpnPasswordChk');
if(tentcpnPassword.val() < 1 || tentcpnPasswordChk.val() < 1){
alert('비밀번호를 입력해 주세요');
tentcpnPassword.val('');
tentcpnPasswordChk.val('');
tentcpnPassword.focus();
return;
}else if(tentcpnPassword.val() !== tentcpnPasswordChk.val()){
alert('비밀번호가 일치하지 않습니다');
tentcpnPassword.val('');
tentcpnPasswordChk.val('');
tentcpnPassword.focus();
return;
}
//비밀번호 정규식 확인
const pwdChkNoticeResult = $('#pwdChkNoticeRs').val();
if(pwdChkNoticeResult !=='Y'){
alert('비밀번호 조합 조건을 확인해 주세요')
tentcpnPassword.val('');
tentcpnPasswordChk.val('');
tentcpnPassword.focus();
return;
}
//아이디 중복 확인 하였는지 확인
let idChk = $('#idChk').val();
if(idChk !=='Y'){
alert('아이디 중복 확인을 해주세요');
return;
}
const url = '<c:url value="/itrnt/mngr/insertItrntMngr"/>';
const saveForm = $('#itrntMngrRegFrom');
let formData = new FormData();
saveForm.serializeArray().forEach(function(item) {
formData.append(item.name,item.value);
});
//관리자 권한 배열에 담기
let mngrAuthor = '';
$('input:checkbox[name=mngrAuthor]').each(function(index, item){
if ($(item).is(':checked')) {
mngrAuthor += $(item).attr("id") +'='+ 'Y' + '||';
} else {
mngrAuthor += $(item).attr("id") +'='+ 'N' + '||';
}
});
const manager_act = $('#manager_act');
mngrAuthor += manager_act.attr("id") +'='+ manager_act.val() + '||';
formData.append("mngrAuthor",mngrAuthor);
if(confirm('관리자를 <spring:message code="confirm.common.insert"/>')) {
$.ajax({
type : 'post',
url : url,
data : formData,
processData: false,
contentType: false,
success : function(result) {
if (JSON.parse(result.resBody.result).message ==='success') {
alert('<spring:message code="success.common.insert"/>');
location.href='/itrnt/mngr/selectItrntMngrList';
} else {
alert('<spring:message code="fail.common.insert"/>');
}
}
});
}
}
/**********************************************
* 아이디 중복 확인
***********************************************/
const fm_idchk_itrntMngr = function (){
const tentcpnId = $('#tentcpnId');
const idRegex = /^[a-zA-Z][a-zA-Z0-9]{4,16}$/;
if(!idRegex.test(tentcpnId.val().trim())){
alert("아이디 입력 조건을 확인하여 다시 입력 해주세요")
tentcpnId.val('');
tentcpnId.focus();
return;
}
const url = '<c:url value="/itrnt/mngr/selectItrntMngrIdChk"/>';
$.ajax({
type : 'post',
url : url,
data : {'tentcpnId' : tentcpnId.val().trim()},
success : function(result) {
if (JSON.parse(result.resBody.result).message ==='notExist') {
alert(tentcpnId.val().trim() + '은(는) 사용 가능합니다.');
$('#idChk').attr('value', 'Y');
} else {
alert(tentcpnId.val().trim() + '은(는) 이미 사용중입니다.');
$('#idChk').attr('value', 'N');
}
}
});
}
$(document).ready(function() {
// 관리자 권한 전체 체크
let adminAuthCheckAll = $('#adminAuthCheckAll');
let adminCategory = $('.adminCategory');
let adminCategoryCheck = $('.adminCategory > input');
let adminWrite = $('.adminWrite');
let adminWriteCheck = $('.adminWrite > input');
adminAuthCheckAll.click( function () {
if ($(this).hasClass('checked')) {
adminCategoryCheck.prop('checked', false);
$(this).removeClass('checked');
isCategoryChecked();
} else {
adminCategoryCheck.prop('checked', true);
$(this).addClass('checked');
isCategoryChecked();
}
});
adminCategoryCheck.click(function () {
isCategoryChecked();
});
function isCategoryChecked() {
$('.adminCategory').each(function () {
if ($(this).find('input').prop('checked')) {
$(this).closest('.b-checkbox-container').find(adminWrite).removeAttr('disabled');
$(this).closest('.b-checkbox-container').find(adminWriteCheck).removeAttr('disabled');
$(this).closest('.b-checkbox-container').find(adminWriteCheck).prop('checked', true);
} else {
$(this).closest('.b-checkbox-container').find(adminWrite).attr('disabled', 'disabled');
$(this).closest('.b-checkbox-container').find(adminWriteCheck).attr('disabled', 'disabled');
$(this).closest('.b-checkbox-container').find(adminWriteCheck).prop('checked', false);
}
});
}
//비밀번호 정규식 확인
const pwdChk = $('#tentcpnPasswordChk').on('propertychange change keyup paste input', function () {
const pwdRegex = /^(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[!#$%&()*+-\/:<>?@\[\\\]^_{|}~]).{10,20}$/;
let tentcpnPassword = $('#tentcpnPassword').val().trim();
let tentcpnPasswordChk = $('#tentcpnPasswordChk').val().trim();
let pwdChkNotice = $('#pwdChkNotice');
let pwdChkNoticeResult = $('#pwdChkNoticeRs')
if (pwdRegex.test(tentcpnPassword) === false
|| pwdRegex.test(tentcpnPasswordChk) === false) {
pwdChkNotice.attr('value', '비밀번호 조합 조건을 확인해 주세요.');
pwdChkNotice.attr('type', 'text').css('visibility', 'visible');
pwdChkNotice.css('pointer-events','none'); //클릭 방지
pwdChkNoticeResult.attr('value', 'N')
} else if(tentcpnPassword === tentcpnPasswordChk){
pwdChkNotice.attr('value', '사용 가능한 비밀번호 입니다')
pwdChkNotice.attr('type', 'text').css('visibility', 'visible')
pwdChkNotice.css('pointer-events','none');
pwdChkNoticeResult.attr('value', 'Y')
}else{
pwdChkNotice.attr('value', '입력하신 비밀번호가 일치하지 않습니다.')
pwdChkNotice.attr('type', 'text').css('visibility', 'visible')
pwdChkNotice.css('pointer-events','none');
pwdChkNoticeResult.attr('value', 'N')
}
});
setTimeout(pwdChk, 3000);
});
</script>
</head>
<body>
<%@ include file="/WEB-INF/views/comm/itrnt/Header.jsp"%>
<main class="main">
<%@ include file="/WEB-INF/views/comm/itrnt/Left.jsp"%>
<div class="content">
<div class="content__inner">
<button class="side-nav__fold"><span class="visually-hidden">좌측메뉴 펼치기/닫기</span></button>
<div class="page-title">
<h2 class="page-title__title">관리자 정보</h2>
<div class="page-title__btn-container">
<button class="btn outline" onclick="fn_move_itrnMngrList();"> <spring:message code="button.list"/> </button>
<button class="btn primary" onclick="fn_regist_itrntMngr();" > <spring:message code="button.save"/> </button>
</div>
</div>
<section class="content-section">
<form id="itrntMngrRegFrom" name="itrntMngrRegFrom">
<div class="table-wrapper">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 12%;">
<col>
</colgroup>
<tbody>
<tr>
<th>아이디</th>
<td>
<div class="td-inner">
<input class="input-text" type="text" title="해당 인풋에 대한 설명" id="tentcpnId" name="tentcpnId" autocomplete="username">
<input type="hidden" title="해당 인풋에 대한 설명" id="idChk">
<button class="btn sm gray" onclick="fm_idchk_itrntMngr(); return false;"><spring:message code="button.duplication"/> </button>
<p class="fyi fs-13 gray-7 ml-4">4-16자, 첫 글자 영문, 영문 대소문자 또는 숫자</p>
</div>
</td>
</tr>
<tr>
<th>비밀번호</th>
<td>
<div class="td-inner">
<div class="table-wrapper" style="width: 800px;">
<table class="table transparent">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 14%;">
<col>
</colgroup>
<tbody>
<tr>
<th class="text-right">비밀번호</th>
<td>
<div class="td-inner">
<input type="password" class="input-text" value="" id="tentcpnPassword" name="tentcpnPassword" autocomplete="new-password"
title="해당 인풋에 대한 설명">
<p class="fyi fs-13 gray-7 ml-4">10-20자, 영문 대소문자
또는
숫자,
특수문자 중 2가지 이상 조합</p>
</div>
</td>
</tr>
<tr>
<th class="text-right">비밀번호 확인</th>
<td>
<div class="td-inner">
<input type="password" class="input-text" value="" id="tentcpnPasswordChk" autocomplete="new-password"
title="해당 인풋에 대한 설명">
<p class="fyi fs-13 gray-7 ml-4">사용가능 특수문자 : ! #
$ %
&amp; ( ) * + - / : &lt; =
&gt; ? @ [ \ ] ^ _ { | } ~</p>
</div>
<input type="hidden" class="fyi fs-13 gray-7 ml-4 w-full" id="pwdChkNotice" tabindex="-1" readonly />
<input type="hidden" id="pwdChkNoticeRs" />
</td>
</tr>
</tbody>
</table>
</div>
</div>
</td>
</tr>
<tr>
<th>관리자 명</th>
<td>
<div class="td-inner">
<input class="input-text md" type="text" title="해당 인풋에 대한 설명" name="tentcpnNm">
</div>
</td>
</tr>
</tbody>
</table>
</div>
</form>
</section>
<section class="content-section">
<div class="form-control-container mb-10">
<div class="left">
<h3 class="delivery-info__title">
관리자 권한
</h3>
</div>
<div class="center">
</div>
<div class="right">
<button id="adminAuthCheckAll" class="btn sm primary outline">전체체크</button>
</div>
</div>
<div class="table-wrapper">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 12%;">
<col>
</colgroup>
<tbody>
<tr>
<th>매출분석</th>
<td>
<input type="hidden" id="manager_act" name="mngrAuthor" value="<c:out value="${resultMap.result.reprsntMngrAt}" default="N"/>" >
<div class="td-inner">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="daily_revenue" name="mngrAuthor" value="Y">
<span class="check"></span>
<span class="control-label">일별매출</span>
</label>
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="weekly_revenue" name="mngrAuthor" value="Y">
<span class="check"></span>
<span class="control-label">주별매출</span>
</label>
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="monthly_revenue" name="mngrAuthor" value="Y">
<span class="check"></span>
<span class="control-label">월별매출</span>
</label>
</div>
</div>
</td>
</tr>
<tr>
<th>판매분석</th>
<td>
<div class="td-inner">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="daily_static" name="mngrAuthor" value="Y">
<span class="check"></span>
<span class="control-label">금일 판매내역</span>
</label>
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="weekly_static" name="mngrAuthor" value="Y">
<span class="check"></span>
<span class="control-label">주간 판매내역</span>
</label>
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="monthly_static" name="mngrAuthor" value="Y">
<span class="check"></span>
<span class="control-label">월간 판매내역</span>
</label>
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="revenue_static" name="mngrAuthor" value="Y">
<span class="check"></span>
<span class="control-label">판매 상품 순위</span>
</label>
</div>
</div>
</td>
</tr>
<tr>
<th>마이페이지</th>
<td>
<div class="td-inner">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="catalog" name="mngrAuthor" value="Y">
<span class="check"></span>
<span class="control-label">회원리스트</span>
</label>
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="member_sms" name="mngrAuthor" value="Y">
<span class="check"></span>
<span class="control-label">SMS발송관리</span>
</label>
</div>
</div>
</td>
</tr>
<tr>
<th>관리자</th>
<td>
<div class="td-inner vertical gap-15">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="gs_seller_notice" name="mngrAuthor" value="Y">
<span class="check"></span>
<span class="control-label">공지사항</span>
</label>
<span class="stone-7">→</span>
<label class="b-checkbox checkbox adminWrite" disabled>
<input disabled type="checkbox" id="gs_seller_notice_act" name="mngrAuthor" value="Y">
<span class="check"></span>
<span class="control-label">쓰기/삭제</span>
</label>
</div>
<div class="b-checkbox-container">
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="shop_education" name="mngrAuthor" value="Y">
<span class="check"></span>
<span class="control-label">교육자료</span>
</label>
<span class="stone-7">→</span>
<label class="b-checkbox checkbox adminWrite" disabled>
<input disabled type="checkbox" id="shop_education_act" name="mngrAuthor" value="Y">
<span class="check"></span>
<span class="control-label">쓰기/삭제</span>
</label>
</div>
<div class="b-checkbox-container">
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="member_edit_req" name="mngrAuthor" value="Y">
<span class="check"></span>
<span class="control-label">회원정보수정요청</span>
</label>
<span class="stone-7">→</span>
<label class="b-checkbox checkbox adminWrite" disabled>
<input disabled type="checkbox" id="member_edit_req_act" name="mngrAuthor" value="Y">
<span class="check"></span>
<span class="control-label">쓰기/삭제</span>
</label>
</div>
<div class="b-checkbox-container">
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="point_edit_req" name="mngrAuthor" value="Y">
<span class="check"></span>
<span class="control-label">마일리지(포인트)수정요청</span>
</label>
<span class="stone-7">→</span>
<label class="b-checkbox checkbox adminWrite" disabled>
<input disabled type="checkbox" id="point_edit_req_act" name="mngrAuthor" value="Y">
<span class="check"></span>
<span class="control-label">쓰기/삭제</span>
</label>
</div>
<div class="b-checkbox-container">
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="logistics_req" name="mngrAuthor" value="Y">
<span class="check"></span>
<span class="control-label">물류관련요청</span>
</label>
<span class="stone-7">→</span>
<label class="b-checkbox checkbox adminWrite" disabled>
<input disabled type="checkbox" id="logistics_req_act" name="mngrAuthor" value="Y">
<span class="check"></span>
<span class="control-label">쓰기/삭제</span>
</label>
</div>
<div class="b-checkbox-container">
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="shop_edit_req" name="mngrAuthor" value="Y">
<span class="check"></span>
<span class="control-label">매장정보변경</span>
</label>
<span class="stone-7">→</span>
<label class="b-checkbox checkbox adminWrite" disabled>
<input disabled type="checkbox" id="shop_edit_req_act" name="mngrAuthor" value="Y">
<span class="check"></span>
<span class="control-label">쓰기/삭제</span>
</label>
</div>
<div class="b-checkbox-container">
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="family_qna_edit_req" name="mngrAuthor" value="Y">
<span class="check"></span>
<span class="control-label">가맹점 Q&A</span>
</label>
<span class="stone-7">→</span>
<label class="b-checkbox checkbox adminWrite" disabled>
<input disabled type="checkbox" id="family_qna_edit_req_act" name="mngrAuthor" value="Y">
<span class="check"></span>
<span class="control-label">쓰기/삭제</span>
</label>
</div>
<div class="b-checkbox-container">
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="admin_list" name="mngrAuthor" value="Y">
<span class="check"></span>
<span class="control-label">관리자 리스트</span>
</label>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</section>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</div>
</main>
</body>
</html>

View File

@@ -0,0 +1,228 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<%@ 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"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%--
Class Name : ItrntMngrListR.jsp
Description : 인트라넷 관리자 목록 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-03-18 유재현 최초 생성(퍼블리싱 적용)
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@ include file="/WEB-INF/views/comm/itrnt/Include.jsp"%>
<script>
/**********************************************
* 인트라넷 관리자 등록 화면 이동
***********************************************/
const fn_move_itrnMngrRegist = function () {
location.href='/itrnt/mngr/selectItrntMngrForm';
}
/**********************************************
* 인트라넷 관리자 상세 화면 이동
***********************************************/
const fn_move_ItrntMngrDtl = function (strInnb) {
location.href='/itrnt/mngr/selectItrntMngrDtlForm?strInnb='+strInnb;
}
/**********************************************
* 인트라넷 관리자 목록 재 조회(행 재설정시)
***********************************************/
const fm_chk_select = function () {
const recordSelector = $('#recordSelector > option:selected').val();
$('#recordCountPerPage').attr('value', recordSelector);
const url = '<c:url value="/itrnt/mngr/selectItrntMngrList"/>';
const form = $('#ItrntMngrListReload');
form.attr('action', url);
form.attr('method', 'post');
form.submit();
}
/**********************************************
* 인트라넷 관리자 수정화면 조회
***********************************************/
const fm_move_ItrntMngrTentcpnDtl = function (strInnb) {
location.href='/itrnt/mngr/selectItrntMngrTentcpnDtlForm?strInnb='+strInnb;
}
/**********************************************
* 인트라넷 관리자 삭제
***********************************************/
const fm_del_ItrntMngr = function () {
let strInnbArr = '';
const length = $('.adminDeleteChk:checked').length-1;
if(length < 0){
alert("삭제할 관리자를 선택해주세요")
return false;
}
$('.adminDeleteChk:checked').each(function (index) {
if(length===index){
strInnbArr += this.value
}else{
strInnbArr += this.value +','
}
})
const url = '<c:url value="/itrnt/mngr/deleteItrntMngrDel"/>';
if(confirm('관리자를 <spring:message code="confirm.common.delete"/>')) {
$.ajax({
type : 'post',
url : url,
data : {'strInnb': strInnbArr},
success : function(result) {
if (JSON.parse(result.resBody.result).message ==='success') {
alert('<spring:message code="success.common.delete"/>');
location.reload()
} else {
alert('<spring:message code="fail.common.delete"/>');
}
}
});
}
}
</script>
</head>
<body>
<%@ include file="/WEB-INF/views/comm/itrnt/Header.jsp"%>
<main class="main">
<%@ include file="/WEB-INF/views/comm/itrnt/Left.jsp"%>
<div class="content">
<div class="content__inner">
<button class="side-nav__fold"><span class="visually-hidden">좌측메뉴 펼치기/닫기</span></button>
<div class="page-title">
<h2 class="page-title__title">관리자 리스트</h2>
<div class="page-title__btn-container">
<button type="button" class="btn dark" onclick="fm_del_ItrntMngr();"> 삭제 </button>
<button class="btn primary" onclick="fn_move_itrnMngrRegist();"> 관리자 등록 </button>
</div>
</div>
<section class="content-section">
<div class="form-control-container">
<div class="left">
<div class="search-number">
<span class="search-number__text">총 <strong><c:out value="${resultMap.paramVO.paginationInfo.totalRecordCount}" default="0"/></strong>건</span>
</div>
</div>
<div class="center">
</div>
<form name="ItrntMngrListReload" id="ItrntMngrListReload">
<div class="right">
<div class="select-box">
<select id="recordSelector" onchange="fm_chk_select();" title="해당 셀렉트에 대한 설명">
<option value="10">10개씩</option>
<option value="50">50개씩</option>
<option value="100">100개씩</option>
<option value="200">200개씩</option>
</select>
<input type="hidden" name="recordCountPerPage" id="recordCountPerPage">
</div>
</div>
</form>
</div>
<hr class="spacing">
<div class="table-wrapper">
<table class="table vertical">
<caption>해당 테이블에 대한 설명</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 80px;">
<col style="width: 14%">
<col style="width: auto;">
<col style="width: 14%;">
<col style="width: 14%;">
<col style="width: 14%;">
<col style="width: 10%;">
</colgroup>
<thead>
<c:choose>
<c:when test="${ not empty resultMap.resultList }">
<c:forEach var="list" items="${resultMap.resultList }" varStatus="status">
<tr>
<th>
<label class="b-checkbox checkbox is-medium check-all">
<input type="checkbox" >
<span class="check"></span>
</label>
</th>
<th>관리자 구분</th>
<th>관리자 ID (접속허용 IP설정)</th>
<th>관리자명</th>
<th>최근 접속일</th>
<th>등록일</th>
<th>관리</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<label class="b-checkbox checkbox is-medium">
<input type="checkbox" class="adminDeleteChk" value="<c:out value="${list.strInnb}"/>" >
<span class="check"></span>
</label>
</td>
<td>
<c:if test="${list.reprsntMngrAt == 'Y' }">
<p><c:out value="대표관리자" default="부운영자"/></p>
</c:if>
</td>
<td>
<button type="button" onclick="fn_move_ItrntMngrDtl(${list.strInnb});" class="blue-6"><c:out value="${list.tentcpnId}"/></button>
(<c:out value="${list.accesLmttIp}" default="미설정"/>)
</td>
<td>
<c:out value="${list.tentcpnNm}"/>
</td>
<td>
<c:out value="${list.lastLoginDt}"/>
</td>
<td>
<c:out value="${list.registDt}"/>
</td>
<td>
<div class="manage-btn-container">
<button class="btn xsm primary outline" onclick="fm_move_ItrntMngrTentcpnDtl(${list.strInnb});">수정</button>
</div>
</td>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
<tr>
<td class="row-no-data" colspan="8">조회된 데이터가 없습니다.</td>
</tr>
</c:otherwise>
</c:choose>
</tbody>
</table>
</div>
</section>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</div>
</main>
</body>
</html>

View File

@@ -0,0 +1,582 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<%@ 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"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%--
Class Name : ItrntMngrTentcpnDtlFormR.jsp
Description : 인트라넷 관리자 입점사 상세 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-03-18 유재현 최초 생성(퍼블리싱 적용)
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@ include file="/WEB-INF/views/comm/itrnt/Include.jsp"%>
<script>
/* ********************************************************
* 시작 화면 조작 함수
******************************************************** */
$(document).ready(function(){
let urlParams = new URLSearchParams(window.location.search);
});
/**********************************************
* 인트라넷 관리자 목록 화면 이동
***********************************************/
const fn_move_itrnMngrList = function () {
location.href='/itrnt/mngr/selectItrntMngrList';
}
/**********************************************
* 관리자 입점사 수정
***********************************************/
const fn_update_itrntMngrTentcpn = function() {
//비밀번호 입력되었는지 확인
const tentcpnPassword = $('#tentcpnPassword').val();
const tentcpnPasswordChk = $('#tentcpnPasswordChk').val();
const pwdChangeChk = $('#pwdChangeChk:checked')
if(pwdChangeChk < 1 && (tentcpnPassword < 1 || tentcpnPasswordChk < 1)){
alert('비밀번호를 입력해 주세요');
return;
}else if(pwdChangeChk < 1 && (tentcpnPassword !== tentcpnPasswordChk)){
alert('비밀번호가 일치하지 않습니다');
return;
}
//비밀번호 정규식 확인
const pwdChkNoticeResult = $('#pwdChkNoticeRs').val();
if(pwdChangeChk < 1 && (pwdChkNoticeResult !=='Y')){
alert('비밀번호 조합 조건을 확인해 주세요')
return;
}
const url = '<c:url value="/itrnt/mngr/updateItrntMngrTentcpnDtlForm"/>';
const saveForm = $('#itrntMngrTentcpnDtlUptFrom');
let formData = new FormData();
saveForm.serializeArray().forEach(function(item) {
formData.append(item.name,item.value);
});
//관리자 권한 배열에 담기
let mngrAuthor = '';
$('input:checkbox[name=mngrAuthor]').each(function(index, item){
if ($(item).is(':checked')) {
mngrAuthor += $(item).attr("id") +'='+ 'Y' + '||';
} else {
mngrAuthor += $(item).attr("id") +'='+ 'N' + '||';
}
});
const manager_act = $('#manager_act');
mngrAuthor += manager_act.attr("id") +'='+ manager_act.val() + '||';
formData.append("mngrAuthor",mngrAuthor);
if(confirm('관리자를 <spring:message code="confirm.common.insert"/>')) {
$.ajax({
type : 'post',
url : url,
data : formData,
processData: false,
contentType: false,
success : function(result) {
if (JSON.parse(result.resBody.result).message ==='success') {
alert('<spring:message code="success.common.insert"/>');
location.href='/itrnt/mngr/selectItrntMngrList';
} else {
alert('<spring:message code="fail.common.insert"/>');
}
}
});
}
}
$(document).ready(function () {
// 관리자 권한 전체 체크
const adminAuthCheckAll = $('#adminAuthCheckAll');
const adminCategory = $('.adminCategory');
const adminCategoryCheck = $('.adminCategory > input');
const adminWrite = $('.adminWrite');
const adminWriteCheck = $('.adminWrite > input');
adminAuthCheckAll.on('click', function () {
if ($(this).hasClass('checked')) {
adminCategoryCheck.prop('checked', false);
$(this).removeClass('checked');
isCategoryChecked();
} else {
adminCategoryCheck.prop('checked', true);
$(this).addClass('checked');
isCategoryChecked();
}
});
adminCategoryCheck.on('click', function () {
isCategoryChecked();
});
function isCategoryChecked() {
$('.adminCategory').each(function () {
if ($(this).find('input').prop('checked')) {
$(this).closest('.b-checkbox-container').find(adminWrite).removeAttr('disabled');
$(this).closest('.b-checkbox-container').find(adminWriteCheck).removeAttr('disabled');
$(this).closest('.b-checkbox-container').find(adminWriteCheck).prop('checked', true);
} else {
$(this).closest('.b-checkbox-container').find(adminWrite).attr('disabled', 'disabled');
$(this).closest('.b-checkbox-container').find(adminWriteCheck).attr('disabled', 'disabled');
$(this).closest('.b-checkbox-container').find(adminWriteCheck).prop('checked', false);
}
});
}
//비밀번호 정규식 확인
const pwdChk = $('#tentcpnPasswordChk').on('propertychange change keyup paste input', function () {
const pwdRegex = /^(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[!#$%&()*+-\/:<>?@\[\\\]^_{|}~]).{10,20}$/;
let tentcpnPassword = $('#tentcpnPassword').val().trim();
let tentcpnPasswordChk = $('#tentcpnPasswordChk').val().trim();
let pwdChkNotice = $('#pwdChkNotice');
let pwdChkNoticeResult = $('#pwdChkNoticeRs')
if (pwdRegex.test(tentcpnPassword) === false
|| pwdRegex.test(tentcpnPasswordChk) === false) {
pwdChkNotice.attr('value', '비밀번호 조합 조건을 확인해 주세요.');
pwdChkNotice.attr('type', 'text').css('visibility', 'visible');
pwdChkNotice.css('pointer-events','none'); //클릭 방지
pwdChkNoticeResult.attr('value', 'N')
} else if(tentcpnPassword === tentcpnPasswordChk){
pwdChkNotice.attr('value', '사용 가능한 비밀번호 입니다')
pwdChkNotice.attr('type', 'text').css('visibility', 'visible')
pwdChkNotice.css('pointer-events','none');
pwdChkNoticeResult.attr('value', 'Y')
}else{
pwdChkNotice.attr('value', '입력하신 비밀번호가 일치하지 않습니다.')
pwdChkNotice.attr('type', 'text').css('visibility', 'visible')
pwdChkNotice.css('pointer-events','none');
pwdChkNoticeResult.attr('value', 'N')
}
});
setTimeout(pwdChk, 3000);
//관리자 권한 표시
//관리자 쓰기 권한
const adminWriteInput = $('.adminWrite');
adminWriteInput.each(function(){
if($(this).children('input').val() ==='Y'){
$(this).removeAttr('disabled')
$(this).children('input').prop('checked', true)
$(this).children('input').removeAttr('disabled')
}
});
//관리자 권한
const adminCategoryInput = $('.adminCategory');
adminCategoryInput.each(function(){
if($(this).children('input').val() ==='Y'){
$(this).children('input').prop('checked', true)
}
});
// 비밀번호 변경 창 OnOff
$('#pwdChangeChk').on("click",function(){
if($(this).attr("checked")){
$(".pwdChangeDiv").hide();
$(this).removeAttr('checked', false)
}else{
$(".pwdChangeDiv").show();
$(this).attr('checked', true)
}
});
})
</script>
</head>
<body>
<%@ include file="/WEB-INF/views/comm/itrnt/Header.jsp"%>
<main class="main">
<%@ include file="/WEB-INF/views/comm/itrnt/Left.jsp"%>
<div class="content">
<div class="content__inner">
<button class="side-nav__fold"><span class="visually-hidden">좌측메뉴 펼치기/닫기</span></button>
<div class="page-title">
<h2 class="page-title__title">관리자 정보</h2>
<div class="page-title__btn-container">
<button type="button" class="btn outline" onclick="fn_move_itrnMngrList();"> <spring:message code="button.list"/> </button>
<button type="button" class="btn primary" onclick="fn_update_itrntMngrTentcpn();"> <spring:message code="button.save"/> </button>
</div>
</div>
<section class="content-section">
<form id="itrntMngrTentcpnDtlUptFrom" name="itrntMngrTentcpnDtlUptFrom">
<div class="table-wrapper">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 12%;">
<col>
</colgroup>
<tbody>
<c:if test="${not empty resultMap.result}"/>
<tr>
<th>최초입점일</th>
<td>
<div class="td-inner">
<p><c:out value="${resultMap.result.registDt}"/></p>
</div>
</td>
<th>최근접속일</th>
<td>
<div class="td-inner">
<p><c:out value="${resultMap.result.lastLoginDt}"/></p>
</div>
</td>
<th style="width: 13%">최근 변경(정상/종료)일</th>
<td>
<div class="td-inner">
<p><c:out value="${resultMap.result.updtDt}"/></p>
</div>
</td>
</tr>
<tr>
<th>구분</th>
<td>
<div class="td-inner">
<%-- TODO : as-is{? c.__FROMHEAD__ === true}매장{:}본사{/}
to-be tentGroup 으로 구분여부 (확인 필요)
--%>
<c:choose>
<c:when test="${resultMap.result.tentGroup == '01'}">
<p><c:out value="본사" default="매장"/></p>
</c:when>
<c:otherwise>
<p><c:out value="매장"/></p>
</c:otherwise>
</c:choose>
</div>
</td>
<th>매장(업체)명</th>
<td>
<div class="td-inner">
<p><c:out value="${resultMap.result.tentcpnNm}"/></p>
</div>
</td>
</tr>
<tr>
<th>매장ID</th>
<td>
<div class="td-inner">
<p><c:out value="${resultMap.result.tentcpnId}"/></p>
</div>
</td>
</tr>
<tr>
<th>매장 비밀번호
<div class="b-checkbox-container">
<label class="b-checkbox checkbox">
<input type="checkbox" id="pwdChangeChk">
<span class="check"></span>
<span class="control-label"> 변경</span>
</label>
</div>
</th>
<td colspan="3">
<div class="td-inner">
<div class="table-wrapper pwdChangeDiv" style="width: 800px; display: none" >
<table class="table transparent">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 18%;">
<col>
</colgroup>
<tbody>
<tr>
<th class="text-left">현재 비밀번호</th>
<td>
<div class="td-inner">
<input type="password" class="input-text" value="" id="currentPassword" name="currentPassword" autocomplete="new-password"
title="해당 인풋에 대한 설명">
</div>
</td>
</tr>
<tr>
<th class="text-left">비밀번호 변경</th>
<td>
<div class="td-inner">
<input type="password" class="input-text" value="" id="tentcpnPassword" name="tentcpnPassword" autocomplete="new-password"
title="해당 인풋에 대한 설명">
<p class="fyi fs-13 gray-7 ml-4">10-20자, 영문 대소문자
또는
숫자,
특수문자 중 2가지 이상 조합</p>
</div>
</td>
</tr>
<tr>
<th class="text-left">비밀번호 변경 확인</th>
<td>
<div class="td-inner">
<input type="password" class="input-text" value="" id="tentcpnPasswordChk" autocomplete="new-password"
title="해당 인풋에 대한 설명">
<p class="fyi fs-13 gray-7 ml-4">사용가능 특수문자 : ! #
$ %
&amp; ( ) * + - / : &lt; =
&gt; ? @ [ \ ] ^ _ { | } ~</p>
</div>
<input type="hidden" class="fyi fs-13 gray-7 ml-4 w-full" id="pwdChkNotice" tabindex="-1" readonly />
<input type="hidden" id="pwdChkNoticeRs" />
</td>
</tr>
</tbody>
</table>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</form>
</section>
<section class="content-section">
<div class="form-control-container mb-10">
<div class="left">
<h3 class="delivery-info__title">
관리자 권한
</h3>
</div>
<div class="center">
</div>
<div class="right">
<button id="adminAuthCheckAll" class="btn sm primary outline">전체체크</button>
</div>
</div>
<div class="table-wrapper">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 12%;">
<col>
</colgroup>
<c:choose>
<c:when test="${ not empty resultMap.result.mngrAuthor}">
<tr>
<th>매출분석</th>
<td>
<input type="hidden" id="manager_act" name="mngrAuthor" value="<c:out value="${resultMap.result.reprsntMngrAt}" default="N"/>" >
<div class="td-inner">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="daily_revenue" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.dailyRevenue}"/>">
<span class="check"></span>
<span class="control-label">일별매출</span>
</label>
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="weekly_revenue" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.weeklyRevenue}"/>">
<span class="check"></span>
<span class="control-label">주별매출</span>
</label>
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="monthly_revenue" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.monthlyRevenue}"/>">
<span class="check"></span>
<span class="control-label">월별매출</span>
</label>
</div>
</div>
</td>
</tr>
<tr>
<th>판매분석</th>
<td>
<div class="td-inner">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="daily_static" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.dailyStatic}"/>">
<span class="check"></span>
<span class="control-label">금일 판매내역</span>
</label>
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="weekly_static" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.weeklyStatic}"/>">
<span class="check"></span>
<span class="control-label">주간 판매내역</span>
</label>
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="monthly_static" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.monthlyStatic}"/>">
<span class="check"></span>
<span class="control-label">월간 판매내역</span>
</label>
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="revenue_static" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.revenueStatic}"/>">
<span class="check"></span>
<span class="control-label">판매 상품 순위</span>
</label>
</div>
</div>
</td>
</tr>
<tr>
<th>마이페이지</th>
<td>
<div class="td-inner">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="catalog" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.catalog}"/>">
<span class="check"></span>
<span class="control-label">회원리스트</span>
</label>
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="member_sms" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.memberSns}"/>">
<span class="check"></span>
<span class="control-label">SMS발송관리</span>
</label>
</div>
</div>
</td>
</tr>
<tr>
<th>관리자</th>
<td>
<div class="td-inner vertical gap-15">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="gs_seller_notice" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.gsSellerNotice}"/>">
<span class="check"></span>
<span class="control-label">공지사항</span>
</label>
<span class="stone-7">→</span>
<label class="b-checkbox checkbox adminWrite" disabled>
<input disabled type="checkbox" id="gs_seller_notice_act" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.gsSellerNoticeAct}"/>">
<span class="check"></span>
<span class="control-label">쓰기/삭제</span>
</label>
</div>
<div class="b-checkbox-container">
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="shop_education" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.shopEducation}"/>">
<span class="check"></span>
<span class="control-label">교육자료</span>
</label>
<span class="stone-7">→</span>
<label class="b-checkbox checkbox adminWrite" disabled>
<input disabled type="checkbox" id="shop_education_act" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.shopEducationAct}"/>">
<span class="check"></span>
<span class="control-label">쓰기/삭제</span>
</label>
</div>
<div class="b-checkbox-container">
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="member_edit_req" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.memberEditReq}"/>">
<span class="check"></span>
<span class="control-label">회원정보수정요청</span>
</label>
<span class="stone-7">→</span>
<label class="b-checkbox checkbox adminWrite" disabled>
<input disabled type="checkbox" id="member_edit_req_act" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.memberEditReqAct}"/>">
<span class="check"></span>
<span class="control-label">쓰기/삭제</span>
</label>
</div>
<div class="b-checkbox-container">
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="point_edit_req" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.pointEditReq}"/>">
<span class="check"></span>
<span class="control-label">마일리지(포인트)수정요청</span>
</label>
<span class="stone-7">→</span>
<label class="b-checkbox checkbox adminWrite" disabled>
<input disabled type="checkbox" id="point_edit_req_act" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.pointEditReqAct}"/>">
<span class="check"></span>
<span class="control-label">쓰기/삭제</span>
</label>
</div>
<div class="b-checkbox-container">
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="logistics_req" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.logisticsReq}"/>">
<span class="check"></span>
<span class="control-label">물류관련요청</span>
</label>
<span class="stone-7">→</span>
<label class="b-checkbox checkbox adminWrite" disabled>
<input disabled type="checkbox" id="logistics_req_act" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.logisticsReqAct}"/>">
<span class="check"></span>
<span class="control-label">쓰기/삭제</span>
</label>
</div>
<div class="b-checkbox-container">
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="shop_edit_req" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.shopEditReq}"/>">
<span class="check"></span>
<span class="control-label">매장정보변경</span>
</label>
<span class="stone-7">→</span>
<label class="b-checkbox checkbox adminWrite" disabled>
<input disabled type="checkbox" id="shop_edit_req_act" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.shopEditReqAct}"/>">
<span class="check"></span>
<span class="control-label">쓰기/삭제</span>
</label>
</div>
<div class="b-checkbox-container">
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="family_qna_edit_req" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.familyQnaEditReq}"/>">
<span class="check"></span>
<span class="control-label">가맹점 Q&A</span>
</label>
<span class="stone-7">→</span>
<label class="b-checkbox checkbox adminWrite" disabled>
<input disabled type="checkbox" id="family_qna_edit_req_act" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.familyQnaEditReqAct}"/>">
<span class="check"></span>
<span class="control-label">쓰기/삭제</span>
</label>
</div>
<div class="b-checkbox-container">
<label class="b-checkbox checkbox adminCategory">
<input type="checkbox" id="admin_list" name="mngrAuthor" value="<c:out value="${resultMap.result.mngrAuthor.adminList}"/>">
<span class="check"></span>
<span class="control-label">관리자 리스트</span>
</label>
</div>
</div>
</td>
</tr>
</c:when>
<c:otherwise>
<tr>
<td class="row-no-data" colspan="8">조회된 관리자 권한이 없습니다.</td>
</tr>
</c:otherwise>
</c:choose>
</tbody>
</table>
</div>
</section>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</div>
</main>
</body>
</html>

View File

@@ -0,0 +1,184 @@
<%@ 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="ui" uri="http://www.winbit.kr/ctl/ui" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ page import="java.util.Date" %>
<%--
Class Name : MssageAditPopupC.jsp
Description : SMS 추가 팝업
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024.04.04 이운산 최초 생성
--%>
<script>
$(document).ready(function() {
/**********************************
* 바이트 계산
**********************************/
fn_count_byte("#addMsg", ".number", 2000);
/**********************************
* 나이스 셀렉트
**********************************/
$("select").niceSelect();
/**************************************************************
* 자주쓰는 메시지 등록
****************************************************************/
$("#insertBtn").on("click", function() {
const ctgy = $("[name=category]").val();
const newCtgy = $("#addCtgyNm").val();
console.log(ctgy, newCtgy);
if(ctgy == "" && newCtgy == "") {
alert("카테고리가 선택되지 않았습니다.")
return false;
}
if($("[name=msg]").val() == "") {
alert("메세지가 작성되지 않았습니다.")
return false;
}
const dataStr = $("#mssageAditForm").serializeArray();
//카테고리 추가입력 여부 확인
const isAddInput = $("#addCtgy").css("display") !== 'none';
$.each(dataStr, function(index, item){
if(($("#addCtgyNm").val() != "" || $("#addCtgyNm").val() != null)
&& isAddInput && item.name == "category") {
item.value = $("#addCtgyNm").val();
}
})
$.ajax({
type: "post",
url: "<c:url value="/mngr/ntcn/mssage/insertMssageAditRegist"/>",
data: dataStr,
success:function(data) {
const str = JSON.parse(data.resBody.result);
if(str.result == "success") {
alert('<spring:message code="success.common.insert"/>');
fn_close_modal("mssageAditPopup");
if(!newCtgy == '') {
fn_select_album(newCtgy);
} else {
fn_select_album(ctgy);
}
}
}
})
})
/**************************************************************
* 카테고리 추가
****************************************************************/
$("#addCtgyBtn").on("click", function(){
if($("#addCtgy").css("display") == 'none') {
$("#addCtgy").show();
} else {
$("#addCtgy").hide();
}
})
/**************************************************************
* 카테고리 삭제
****************************************************************/
$("#delCtgyBtn").on("click", function(){
if($("[name=category]").val() != null) {
const category = $("[name=category]").val();
console.log(category)
$.ajax({
type: "post",
url: "<c:url value="/mngr/ntcn/mssage/deleteMssageAditCtgy"/>",
data: { category },
success:function(data) {
const str = JSON.parse(data.resBody.result);
if(str.result == "success") {
alert('<spring:message code="success.common.insert"/>');
fn_close_modal("mssageAditPopup");
fn_select_album();
}
}
})
}
})
/**************************************************************
* 초기화
****************************************************************/
$("#resetAddBtn").on("click", function(){
$("[name=category]").val("");
$("[name=category]").niceSelect("update");
$("#addMsg").val("");
})
})
</script>
<div id="mssageAditPopup" class="modal" style="max-width: 380px;">
<div class="modal-header">
<h4>SMS 추가</h4>
</div>
<div class="modal-content">
<div class="tab-box__content">
<form id="mssageAditForm">
<div class="">
<div class="template-message">
<div class="template-message__header">
<div class="select-box">
<select class="short" title="카테고리" name="category">
<option value="">선택</option>
<c:forEach var="list" items="${resultMap.boAlbumMap.ctgyList}" varStatus="status">
<option value="${list.category}"><c:out value="${list.category}"/></option>
</c:forEach>
</select>
</div>
<div id="addCtgy" class="mb-10" style="display:none">
<input class="input-text" type="text" title="해당 인풋에 대한 설명" placeholder="" id="addCtgyNm">
</div>
<div>
<button class="btn sm dark" id="addCtgyBtn" type="button">
카테고리 추가
</button>
<button class="btn sm dark" id="delCtgyBtn" type="button">
카테고리 삭제
</button>
</div>
</div>
<div class="template-message__body">
<div class="sms-manage">
<textarea class="textarea" title="sms 입력" id="addMsg" name="msg"></textarea>
<div class="sms-manage__byte">
<span class="number">0</span>
<span class="text">byte</span>
</div>
</div>
</div>
</div>
</div>
</form>
</div>
<div class="table-wrapper">
<div class="form-control-container mt-10">
<div class="left"></div>
<div class="center">
<button class="btn outline" id="resetAddBtn" type="button">초기화</button>
<button class="btn primary" id="insertBtn" type="button">적용</button>
</div>
<div class="right"></div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,266 @@
<%@ 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="ui" uri="http://www.winbit.kr/ctl/ui" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ page import="java.util.Date" %>
<%--
Class Name : MbrListInqireR.jsp
Description : 회원 조회 목록
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-01-15 김혜인 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<section class="content-section">
<div class="form-control-container">
<div class="left">
<div class="search-number">
<span class="search-number__text">총 <strong><c:out value="${ resultListMap.paginationInfo.totalRecordCount }"/></strong>건</span>
</div>
</div>
<div class="center">
</div>
<div class="right">
<div class="select-box">
<select title="정렬순" name = "sortDv" id = "sortDv" onchange = "fn_select_list(1);return false;">
<option value="recent" <c:if test="${mbrSrchVO.sortDv eq 'recent'}">selected="selected"</c:if>>최근 가입순</option>
<option value="mlgDesc" <c:if test="${mbrSrchVO.sortDv eq 'mlgDesc'}">selected="selected"</c:if>>마일리지 많은순</option>
<option value="mlgAsc" <c:if test="${mbrSrchVO.sortDv eq 'mlgAsc'}">selected="selected"</c:if>>마일리지 적은순</option>
</select>
</div>
<!-- 코드 사용 -->
<div class="select-box">
<select title="페이지당 출력될 목록건수" name = "pageUnit" id ="pageUnit" onchange = "fn_select_list(1);return false;">
<c:forEach items="${ resultListMap.paginationInfo.pageUnitArr }" var="pageUnit" varStatus="pageUnitStatus">
<option value="<c:out value="${ pageUnit }"/>" <c:if test="${ resultListMap.paginationInfo.recordCountPerPage eq pageUnit}">selected="selected"</c:if>><c:out value="${ pageUnit }"/>개씩</option>
</c:forEach>
</select>
</div>
</div>
</div>
<hr class="horizontal-line">
<div class="form-control-container">
<div class="left">
<c:forEach var="appnDv" items="${resultListMap.appen}">
<c:if test="${appnDv.cd eq '02'}">
<button type="button" class="btn sm dark rslrAppn"
value="<c:out value = "${appnDv.cd}"/>"
appn-nm ="<c:out value = "${appnDv.cdNm}"/>">
<c:out value="${appnDv.cdNm}"/>지정
</button>
</c:if>
</c:forEach>
<c:forEach var="appnDv" items="${resultListMap.appen}">
<c:if test="${appnDv.cd eq '01' || appnDv.cd eq '03'}">
<button type="button" class="btn outline sm rslrAppn"
value="<c:out value = "${appnDv.cd}"/>"
appn-nm ="<c:out value = "${appnDv.cdNm}"/>">
<c:out value="${appnDv.cdNm}"/>지정
</button>
</c:if>
</c:forEach>
</div>
<div class="center">
</div>
<div class="right">
<button type = "button" class="btn outline sm emailSndngBtn">
이메일 발송
</button>
<button type = "button" class="btn outline sm smsSndngBtn">
SMS 발송
</button>
</div>
</div>
<hr class="spacing">
<div class="table-wrapper">
<table class="table vertical" id = "mbrList">
<caption>회원 목록</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 4%;">
<col style="width: 6%;">
<col style="width: 4%;">
<col style="width: 10%;">
<col style="width: 8%;">
<col style="width: auto">
<col style="width: auto;">
<col style="width: 6%;">
<col style="width: 6%;">
<col style="width: 6%;">
<col style="width: 10%;">
<col style="width: 10%">
</colgroup>
<thead>
<tr>
<th>
<label class="b-checkbox checkbox is-medium check-all" id="chkALabel">
<input type="checkbox" value="" id="chkA">
<span class="check"></span>
</label>
</th>
<th>번호</th>
<th>유입</th>
<th>아이디</th>
<th>이름</th>
<th>이메일</th>
<th>핸드폰번호</th>
<th>광고수신동의</th>
<th>등급</th>
<th>마일리지</th>
<th>가입일</th>
<th>최종방문 일시</th>
</tr>
</thead>
<tbody>
<c:choose>
<c:when test="${not empty resultListMap.resultMap.resultList}">
<c:forEach var="resultList" items="${resultListMap.resultMap.resultList}">
<tr>
<td>
<label class="b-checkbox checkbox is-medium">
<input type="checkbox" value="<c:out value='${resultList.mbrInnb}' />"
class = "chk"
name="mbrInnb">
<span class="check"></span>
</label>
<input type="hidden" value="<c:out value='${resultList.appnDvCd}' />"
name="appnDvCd">
<input type="hidden" value="<c:out value='${resultList.appnInnb}' />"
name="appnInnb">
<input type="hidden" value="<c:out value='${resultList.mbrDvCd}' />"
name="mbrDvCd">
</td>
<td><c:out value="${resultListMap.paginationInfo.totalRecordCount - resultList.rnum+1}"/></td>
<td>
<a href="<c:out value="${resultList.inflowCoursDown}${resultList.inflowCoursUrl}"/>" target="_blank">
<span class="blue-8 fw-500" title="<c:out value="${resultList.inflowCoursDown}"/>">
<c:out value="${resultList.sumInfowCours}"/>
</span>
</a>
</td>
<td><%--블랙리스트화이트리스트지정--%>
<c:if test="${resultList.appnDvCd eq '02'}">
<span class="black-list">
B<span class="visually-hidden">블랙리스트</span>
</span>
</c:if>
<c:if test="${resultList.appnDvCd eq '03'}">
<span class="white-list">
W<span class="visually-hidden">화이트리스트</span>
</span>
</c:if>
<button type="button" class="blue-6 fw-500 crmBtn" data-info="info01"
onclick = "fn_select_crm_mini_info(this,'<c:out value="${resultList.mbrInnb}"/>',
'<c:out value="${resultList.mbrDvCd}"/>','#modalDiv');">
<c:choose>
<c:when test = "${resultList.joinMthCd eq 'kakao'}"><%--kakao--%>
<i class="icon icon_word-badge_kakao"></i>
</c:when>
<c:when test = "${resultList.joinMthCd eq 'naver'}"><%--naver--%>
<i class="icon icon_word-badge_naver"></i>
</c:when>
<c:when test = "${resultList.joinMthCd eq 'pos'}"><%--pos--%>
<i class="icon icon_word-badge_pos"></i><c:out value="${resultList.mbrId}"/>
</c:when>
<c:otherwise>
<c:out value="${resultList.mbrId}"/>
</c:otherwise>
</c:choose>
</button>
</td>
<td>
<c:out value="${resultList.mbrNm}"/>
<input type = "hidden" name= "mbrNm" class = "mbrNm" value = "<c:out value="${resultList.mbrNm}"/>"/>
</td>
<!-- 이메일 발송 url -->
<td>
<button type="button" class="blue-6 fw-500 indvlEmailSndngBtn">
<c:out value="${resultList.maskingEmail}"/>
</button>
</td>
<!-- sms 발송 url -->
<td>
<button type="button" class="blue-6 fw-500 indvlSmsSndngBtn mbtlnbAtag">
<c:out value="${resultList.mbtlnb}"/>
</button>
</td>
<td>
<c:choose>
<c:when test = "${resultList.marktRecptnAgreAt eq 'Y'}">
동의
</c:when>
<c:otherwise>
미동의
</c:otherwise>
</c:choose>
</td>
<td><c:out value="${resultList.mbrGradNm}"/></td>
<td>
<button type="button" class="under-line"
onclick="fn_move_mlgManagePopup('<c:out value='${resultList.mbrInnb}'/>','<c:out value='${resultList.mbrDvCd}'/>')">
<c:choose>
<c:when test="${resultList.mileage > 0}">
<fmt:formatNumber value="${resultList.mileage}" pattern="#,###"/>
</c:when>
<c:otherwise>
0
</c:otherwise>
</c:choose>
</button>
</td>
<td><c:out value="${resultList.registDt}"/></td>
<td><c:out value="${resultList.lastLoginDt}"/></td>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
<tr>
<td colspan="100%"><spring:message code="common.nodata"/></td>
</tr>
</c:otherwise>
</c:choose>
</tbody>
</table>
<div id = "modalDv">
</div>
<hr class="spacing">
<hr class="spacing">
<div class="form-control-container">
<div class="left"></div>
<div class="center">
</div>
<div class="right">
<button type = "button" class="btn dark no-min" id = "withdrawal">탈퇴</button>
</div>
</div>
</div>
</section>
<div class="pagination__container mt-30">
<input type="hidden" id="pageIndex" name="pageIndex" value="${ mbrSrchVO.pageIndex}"/>
<ui:pagination paginationInfo="${resultListMap.paginationInfo}" type="image" jsFunction="fn_select_list"/>
</div>
<!-- 리셀러 해제, 등록, 탈퇴 사유 모달 -->
<div id="resnModal" class="modal" style="max-width: 500px;">
<div class="modal-header">
<h4>사유 작성</h4>
</div>
<div class="modal-content">
<div class="table-wrapper">
<textarea id = "resnTextArea"class="textarea" title="리셀러 해제, 등록, 탈퇴 사유" rows="10"></textarea>
</div>
<input type = "hidden" id = "resnDv">
<input type = "hidden" id = "appenDvCdNm">
<input type = "hidden" id = "appnDvCd">
</div>
<div class="modal-footer">
<a href="#" rel="modal:close" class="btn outline"><spring:message code="button.cancel"/></a>
<button class="btn primary outline" id = "registBtn" ><spring:message code="button.insert"/></button>
</div>
</div>
</html>

View File

@@ -0,0 +1,402 @@
<%@ 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="ui" uri="http://www.winbit.kr/ctl/ui" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ page import="java.util.Date" %>
<%--
Class Name : MssageMbrSrchPopupRForm.jsp
Description : 메시지 발송 회원 조회 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-07-01 이운산 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<div id="member-search" class="modal" style="max-width: 1200px;">
<div class="modal-header">
<h4 id="title">회원 검색</h4>
</div>
<div class="modal-content">
<form id="mbrSrchForm">
<section class="content-section" id="mbrSrchSection">
<span>
<c:choose>
<c:when test="${not empty mbrSrchVO.actionDv}">
<c:choose>
<c:when test="${ mbrSrchVO.actionDv eq 'sms'}"><%--sms인 경우--%>
<span class="red-7">광고 수신 및 SMS 수신에 동의한 회원만 검색됩니다.</span>
</c:when>
<c:otherwise>
<span class="red-7">광고 수신 및 이메일 수신에 동의한 회원만 검색됩니다.</span><%--email인 경우--%>
</c:otherwise>
</c:choose>
<span class="red-7">(검색어는 정확하게 입력해주세요.)</span>
</c:when>
<c:otherwise><%--쿠폰인 경우--%>
<span class="red-7">검색어는 정확하게 입력해주세요.</span>
</c:otherwise>
</c:choose>
</span>
<div class="table-wrapper">
<table class="table">
<caption>회원 검색</caption>
<colgroup>
<col style="width: 12%;">
<col>
</colgroup>
<tr>
<th>이름</th>
<td>
<div class="td-inner">
<input class="input-text xl" type="text" title="검색 키워드"
name="srchMbrNm" placeholder="이름">
</div>
</td>
<th>아이디</th>
<td>
<div class="td-inner">
<input class="input-text xl" type="text" title="검색 키워드"
name="srchKywordID" placeholder="아이디">
</div>
</td>
</tr>
<tr>
<th>이메일</th>
<td>
<div class="td-inner">
<input class="input-text xl" type="text" title="검색 키워드"
name="srchKywordEmail" placeholder="이메일">
</div>
</td>
<th>휴대폰번호</th>
<td>
<div class="td-inner">
<input class="input-text xl" type="text" title="검색 키워드" id="srchKywordMb"
name="srchKywordMb" placeholder="휴대폰번호('-'없이 입력)">
</div>
</td>
</tr>
</table>
</div>
<div class="form-control-container">
<div class="center">
<button type="button" class="btn outline" id="btnResetForm"><spring:message
code="button.init"/></button>
<button type="button" class="btn primary" id="srchBtn"><spring:message
code="button.search"/></button>
</div>
</div>
</section>
<input type = "hidden" id = "actionDv" name = "actionDv" value = "<c:out value = '${resultMap.boMbrSrchVO.actionDv}'/>"/>
<div id="mbrListDiv">
<%--임시 section--%>
<section class="content-section">
<div class="form-control-container">
<div class="left">
<div class="search-number">
<span class="search-number__text">
총
<strong>
<fmt:formatNumber value="${ resultMap.paginationInfo.totalRecordCount }" pattern="#,###"/>
</strong>건
</span>
</div>
</div>
<div class="center">
</div>
<div class="right">
<div class="select-box">
<select title="정렬순">
<option>최근 가입순</option>
<option>마일리지 많은순</option>
<option>마일리지 적은순</option>
</select>
</div>
<!-- 코드 사용 -->
<div class="select-box">
<select title="페이지당 출력될 목록건수" name="pageUnit" id="pageUnit"
onchange="fn_select_list(1);return false;">
<c:forEach items="${ resultMap.paginationInfo.pageUnitArr }" var="pageUnit"
varStatus="pageUnitStatus">
<option value="<c:out value="${ pageUnit }"/>"
<c:if test="${ resultMap.paginationInfo.recordCountPerPage eq pageUnit}">selected="selected"</c:if>>
<c:out value="${ pageUnit }"/>개씩
</option>
</c:forEach>
</select>
</div>
</div>
</div>
<hr class="horizontal-line">
<hr class="spacing">
<div class="table-wrapper">
<table class="table vertical" id="mbrList">
<caption>회원 목록</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 4%;">
<col style="width: 6%;">
<col style="width: 10%;">
<col style="width: 8%;">
<col style="width: auto">
<col style="width: auto;">
<col style="width: 6%;">
<col style="width: 6%;">
<col style="width: 10%;">
<col style="width: 10%">
</colgroup>
<thead>
<tr>
<th>
<label class="b-checkbox checkbox is-medium check-all">
<input type="checkbox" value="" id="chkA">
<span class="check"></span>
</label>
</th>
<th>번호</th>
<th>아이디</th>
<th>이름</th>
<th>이메일</th>
<th>핸드폰번호</th>
<th>등급</th>
<th>마일리지</th>
<th>가입일</th>
<th>최종방문 일시</th>
</tr>
</thead>
<tbody>
<tr>
<td colspan="100%"><spring:message code="common.nodata"/></td>
</tr>
</tbody>
</table>
<div id="modalDv">
</div>
<hr class="spacing">
<hr class="spacing">
<div class="form-control-container">
<div class="left"></div>
<div class="center">
</div>
<div class="right">
</div>
</div>
</div>
</section>
</div>
</form>
</div>
<div class="modal-footer">
<button type = "button" class="btn primary" id="selectMbrBtn">선택한 회원 <spring:message code="button.apply"/> </button>
<button type = "button" class="btn primary" id="srchMbrBtn">검색한 회원 <spring:message code="button.apply"/></button>
<a rel="modal:close" class="btn outline"><spring:message code="button.close"/></a>
</div>
</div>
<script>
$(document).ready(function(){
$(document).on('keydown', function(event) {
// Enter 키(13)를 감지하여 동작을 막음
if(event.keyCode === 13) {
event.preventDefault();
$("#srchBtn").click();
}
});
});
/*******************************************
검색 조건 이벤트 설정
********************************************/
/*niceSelector먹이기*/
fn_set_niceSelect_datePicker("#mbrListDiv");
/*검색조건 > 초기화 버튼 클릭 이벤트*/
$('#btnResetForm').on('click', function(){
fn_reset_form('mbrSrchSection');
});
/*검색 버튼(검색어 지정 안할 시 검색 안됨)*/
$("#srchBtn").on('click',function(){
let valList = [];
$('#mbrSrchSection').find('input').each(function(){
let value = $(this).val();
if(value !== ''){
valList.push(value);
}
});
if(valList.length === 0) {
alert("검색어를 입력해주세요");
}else{
fn_select_mbr_list(1);
}
});
/*검색어 휴대폰 번호 숫자만허용*/
$("#srchKywordMb").on('input',function(){
$("#srchKywordMb").val($("#srchKywordMb").val().replace(/[^0-9]/g, ""));
});
/*선택 회원 적용 클릭*/
$("#selectMbrBtn").on("click",function(){
if ($('input[name=mbrInnb]:checked').length > 0) {
// 회원 고유 번호
const mbrInnbArr = [];
$('input[name=mbrInnb]:checked').each(function() {
mbrInnbArr.push($(this).val());
});
// 회원 구분 코드
const mbrDvCdArr = [];
$('input[name=mbrInnb]:checked').closest("td").find(".mbrDvCd").each(function() {
mbrDvCdArr.push($(this).val());
});
// 회원명
const mbrNmArr = [];
$('input[name=mbrInnb]:checked').closest("tr").find('td:nth-of-type(4)').each(function() {
mbrNmArr.push($(this).text().replace(/[\n\t\r]+/g, '').trim());
});
// 회원 전화 번호
const mbtlnbArr = [];
$('input[name=mbrInnb]:checked').closest("td").siblings(".mbtlnb").each(function() {
mbtlnbArr.push($(this).text());
});
// 결과를 저장할 배열
let resultArr = [];
// 두 배열을 순회하며 객체로 변환
for (let i = 0; i < mbrInnbArr.length; i++) {
resultArr.push({
mbrInnb: mbrInnbArr[i],
mbrDvCd: mbrDvCdArr[i],
mbrNm: mbrNmArr[i],
recptnNb: mbtlnbArr[i]
});
}
// 결과 출력
const actionDv = $("#actionDv").val();
if(actionDv){//sms, email인 경우
const srchMbrCnt = parseInt($(".srchMbrCnt").text()) + resultArr.length;
$(".srchMbrCnt").text(srchMbrCnt);
}
$(".mbrInfo").val(JSON.stringify(resultArr)).trigger('change');
fn_close_modal("member-search");
} else {
//회원이 체크되지 않으면 안내 문구 호출
alert("적용할 회원이 없습니다.");
}
});
/*검색 회원 적용 클릭*/
$("#srchMbrBtn").on("click", function () {
let valList = [];
/*검색어 값 여부 */
$('#mbrSrchSection').find('input').each(function () {
let value = $(this).val();
if (value !== '') {
valList.push(value);
}
});
/*검색어 입력 여부에 따른 분기 처 리*/
if (valList.length > 0) {
let dataStr = $("#mbrSrchSection").find("input").serialize();
const actionDv = $("#actionDv").val();
if(actionDv){
dataStr = dataStr+"&actionDv="+actionDv;
}
$.ajax({
type: "post",
url: "<c:url value='/mngr/mbr/selectSndngTargtMbr'/>",
data: dataStr,
success: function (data) {
let resultArr = data.resBody.result;
resultArr = JSON.parse(resultArr);
let tot = resultArr.result.mbrInfoCnt;
resultArr = resultArr.result.mbrInfo;
// 결과 출력
const actionDv = $("#actionDv").val();
// 결과를 저장할 배열
let resultTotArr = [];
let tempResultArr = JSON.parse(resultArr);
$.each(tempResultArr, function(index, item) {
resultTotArr.push({
mbrInnb:item.mbrInnb,
mbrNm: item.recpntNm,
recptnNb: item.sndngInfo
})
});
if(actionDv){//sms, email인 경우
$(".srchMbrCnt").text(tot+" 명");
}
$(".mbrInfo").val(JSON.stringify(resultTotArr)).trigger('change');
fn_close_modal("member-search");
}
});
} else {
alert("적용할 회원이 없습니다.");
}
});
/* ********************************************************
* 목록 조회 function
******************************************************** */
//회원 목록 조회(ajax)
if(typeof fn_select_mbr_list === 'undefined'){
function fn_select_mbr_list (pageIndex, pageUnit) {
let dataStr;
if(!pageIndex) {
$('#pageIndex').val(1);
} else {
$('#pageIndex').val(pageIndex);
}
if(!pageUnit) {
dataStr = $('#mbrSrchForm').serialize();
} else {
if($('#pageUnit').length){
$('#pageUnit').val(pageUnit);
dataStr = $('#mbrSrchForm').serialize();
} else {
dataStr = $('#mbrSrchForm').serialize()+'&pageUnit='+pageUnit;
}
}
$.ajax({
type: "post",
url : "<c:url value='/itrnt/ntcn/mssage/selectItrntMbrList'/>",
data : dataStr,
success:function(resultHtml) {
$('#mbrListDiv').html(resultHtml);
fn_set_niceSelect_datePicker('#mbrListDiv');
$(".mbtlnb").each(function(){
let mbtlnb = $(this).text().replace(/\s+/g, '');
mbtlnb = fn_format_mbtlnb(mbtlnb);
$(this).text(mbtlnb);
});
}
});
}
}
</script>
</html>

View File

@@ -0,0 +1,639 @@
<%@ 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="ui" uri="http://www.winbit.kr/ctl/ui" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ page import="java.util.Date" %>
<%--
Class Name : MssagePassivSndngC.jsp
Description : 메시지 수동 발송 폼
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-02-28 리브가 최초 생성
2024-04-04 이운산 수정
--%>
<script>
$(document).ready(function () {
//메세지 기본 세팅
const sopmalNm = $("#sopmalNm").val();
const addTitle = '(광고)' + sopmalNm;
$("#head").val(addTitle).trigger("change");
const rejectTelnb = $("#rejectTelnb").val();
let tail = $("#tail").val();
const strFreedeny = '무료수신거부 : ' + rejectTelnb;
$("#tail").val(strFreedeny).trigger("change");
//url 정보
const urlParams = new URLSearchParams(window.location.search);
if (urlParams.has('mbrInfo')) {
$('.mbrInfo').val(urlParams.get('mbrInfo')).trigger("change");
const srchMbrCnt = parseInt($('.srchMbrCnt').text()) + parseInt(urlParams.get('sndngCnt'));
$('.srchMbrCnt').text(srchMbrCnt)
const mbrInfo = JSON.parse($(".mbrInfo").val());
const directDiv = $("#directDiv");
mbrInfo.forEach((item, index) => {
const divCnt = directDiv.children("div").length + 1;
const newDiv = $("<div></div>")
.text(`[\${divCnt}] \${item.mbtlnb} \${item.mbrNm}`);
const delBtn = $("<button>삭제</button>")
.attr("type", "button")
.addClass("btn xsm gray btn_del")
.on("click", function () {
$(this).parent().remove();
});
newDiv.append(delBtn).append("<br>");
// Append the new div to directDiv
directDiv.append(newDiv);
});
}
//나이스 셀렉터 설정
$('.select-box select').niceSelect();
//데이트 피커
fn_set_datepicker("#datepicker_1");
//? 버튼 처리
$(".mini-info-btn").on("click", function (event){
event.preventDefault();
const info = $(this).data("info");
$("#" + info).css({
top: $(this).offset().top,
left: $(this).offset().left,
});
if ($(this).offset().left > 1000) {
$("#" + info).css({
left: $(this).offset().left - $("#" + info).width() - 10,
});
}
$("#" + info).show();
})
$('input').on('keydown', function(e) {
if (e.keyCode == 13) {
e.preventDefault();
}
});
fn_preview();
/**************************************************************
* 바이트 수 체크
****************************************************************/
$("#cn, #head, #tail").on("keyup change", function(){
const headStr = $("#head").val();
const cnStr= $("#cn").val();
const tailStr = $("#tail").val();
const str = headStr + cnStr + tailStr;
const str_len = headStr.length + cnStr.length + tailStr.length;
let rbyte = 0;
let rlen = 0;
let one_char = "";
//byte수 세기
for (let i = 0; i < str_len; i++) {
one_char = str.charAt(i);
if (escape(one_char).length > 4) {
//한글3Byte
rbyte += 3;
} else {
//영문 등 나머지 1Byte
rbyte++;
}
}
//바이트 표시
$('.byteCnt').text(rbyte);
if(rbyte > 90) {
$('.sndng-type').text("(LMS)")
} else {
$('.sndng-type').text("(SMS)")
}
});
//고객센터 버튼
$('#auto-callback').click(function() {
const sopmalNm = $("#sopmalNm").val();
const cscTelnb = $("#cscTelnb").val();
const addTitle = '(광고)' + sopmalNm;
$("#head").val(addTitle).trigger("change");
//내용
let sndngCn = $("#cn").val();
const strCall = '■ 고객센터 : ' + cscTelnb;
const iVal = sndngCn.indexOf(strCall);
if (iVal == -1) {
sndngCn = sndngCn + '\r\n\r\n' + strCall;
}
$("#cn").val(sndngCn).trigger("change");
});
$('#auto-freedeny').click(function() {
const rejectTelnb = $("#rejectTelnb").val();
let tail = $("#tail").val();
const strFreedeny = '무료수신거부 : ' + rejectTelnb;
const iVal = tail.indexOf(strFreedeny);
if(iVal == -1) {
$("#tail").val(strFreedeny).trigger("change");
}
});
//특수문자 버튼
$("#special_cont").click(function(){
if($("#special_view").css("display")=='none') $("#special_view").show();
else $("#special_view").hide();
});
//특수문자 css
$("#special_view").find("td").css({
"height" : "0px"
})
//특수문자 입력
$(".special_char").click(function(){
const str = $("#cn").val();
$("#cn").val(str+$(this).attr('conts'));
});
/* ********************************************************
* 회원검색 윈도우
*********************************************************/
$("#mbrSrchBtn").on("click",function(){
fn_open_modal('#modalDiv','#member-search','/itrnt/mbr/selectItrntMbrListPopForm');
});
/**
* 회원 검색시 입력
*/
$(".mbrInfo").on("change", function(){
const mbrInfo = JSON.parse($(this).val());
const directDiv = $("#directDiv");
mbrInfo.forEach((item, index) => {
const divCnt = directDiv.children("div").length + 1;
const newDiv = $("<div><span></span></div>");
newDiv.find("span").text(`[\${divCnt}] \${item.sndngMbtlnb} \${item.recpntNm}`);
const delBtn = $("<button>삭제</button>")
.attr("type", "button")
.addClass("btn xsm gray btn_del")
.on("click", function () {
$(this).parent().remove();
});
newDiv.append(delBtn).append("<br>");
directDiv.append(newDiv);
});
//건수 설정
reset_to_list();
});
$('#addBtn').on('click', function () {
// 텍스트에어리어에서 데이터 가져오기
const input = $('#inputData').val();
// 줄 바꿈으로 나누기
const lines = input.split('\n').filter(line => $.trim(line) !== '');
// JSON 객체 배열 생성
const jsonArray = lines.map((line, index) => {
const parts = line.trim().split(/\s+/);
return {
to: parts [0], // 고유 ID (선택 사항)
name: parts[1] || ""// 줄 내용을 객체에 저장
};
});
// 결과 출력
const result = JSON.stringify(jsonArray, null, 4);
const directDiv = $("#directDiv");
//중복확인
let isDuplicate = false;
directDiv.children("div").each(function (){
let currentText = $(this).text().trim();
jsonArray.forEach(function (item){
if(currentText.includes(item.to)) {
isDuplicate = true;
return false;
}
})
});
if(isDuplicate) {
alert("전화번호가 이미 입력되어 있습니다.")
return ;
}
jsonArray.forEach((item, index) => {
const divCnt = directDiv.children("div").length + 1;
const newDiv = $("<div><span></span></div>");
newDiv.find("span").text(`[\${divCnt}] \${item.to} \${item.name}`);
const delBtn = $("<button>삭제</button>")
.attr("type", "button")
.addClass("btn xsm gray btn_del")
.on("click", function () {
$(this).parent().remove();
});
newDiv.append(delBtn).append("<br>");
directDiv.append(newDiv);
});
});
});
/* ********************************************************
* 대상 정보 정리
******************************************************** */
function reset_to_list(){
// 번호 재설정
var no = 1;
$("#div_to_list li .str_no").each(function(){
$(this).html("["+no+"]");
no++;
});
// 건 수
$("#r_to_cnt").html($("#div_to_list li").length);
}
/**
* 직접 입력 삭제
*/
$(".btn_del").css("cursor", "pointer");
$("#div_to_list").on("click", ".btn_del", function(){
$(this).closest("li").remove();
reset_to_list();
})
/**
* css 조절
*/
/**
* 이미지 최대 높이
*/
$(".img").css("max-height", "100px");
$(".img").css("width", "30%");
/**
* 텍스트 에어리어 최대 넓이
*/
$("#cn").css("max-width", "600px");
</script>
<section class="content-section">
<form id="passiveMssageSndngForm">
<input type="hidden" id="smsAtmcSndngLmttBgntme" value="<c:out value='${resultMap.storeInfoMap.smsAtmcSndngLmttBgntme}'/>"/>
<input type="hidden" id="smsAtmcSndngLmttEndtme" value="<c:out value='${resultMap.storeInfoMap.smsAtmcSndngLmttEndtme}'/>"/>
<input type="hidden" id="sopmalCd" name="sopmalCd" value="<c:out value='${resultMap.storeInfoMap.sopmalCd}'/>"/>
<input type="hidden" id="sopmalNm" value="<c:out value='${resultMap.storeInfoMap.sopmalNm}'/>"/>
<input type="hidden" id="cscTelnb" value="<c:out value='${resultMap.storeInfoMap.cscTelnb}'/>"/>
<input type="hidden" id="rejectTelnb" value="<c:out value='${resultMap.storeInfoMap.rejectTelnb}'/>"/>
<input type="hidden" id="strInnb" name="strInnb" value="<c:out value='${resultMap.storeInfoMap.strInnb}'/>"/>
<input type="hidden" id="strNm" name="strNm" value="<c:out value='${resultMap.storeInfoMap.tentcpnNm}'/>"/>
<input type="hidden" id="strDv" name="strDv" value="<c:out value='${resultMap.storeInfoMap.strOperDv}'/>"/>
<h3 class="content-section__title">메시지</h3>
<div class="table-wrapper">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 12%;">
<col>
</colgroup>
<tbody>
<tr>
<th>보내는 사람</th>
<td>
<div class="td-inner" id="sndngNb">
<c:choose>
<c:when test="${not empty resultMap.storeInfoMap.chrDsptchNb }">
<c:out value="${ resultMap.storeInfoMap.chrDsptchNb }"/>
</c:when>
<c:otherwise>
<c:out value="${ resultMap.storeInfoMap.smsAtmcSndngDsptchNb }"/>
</c:otherwise>
</c:choose>
<input type="hidden" name="sndngNb" value="${ resultMap.storeInfoMap.smsAtmcSndngDsptchNb }"/>
</div>
</td>
</tr>
<tr>
<th>받는 사람(검색)</th>
<td>
<div class="td-inner">
<div class="" id="srchInput">
<span class="fw-500 fs-15 ml-5 srchMbrCnt">0</span> 명
<input type="hidden" class="mbrInfo"/>
<button type="button" id="mbrSrchBtn" class="btn xsm primary" title="회원 검색">회원검색
</button>
</div>
</div>
</td>
</tr>
<tr>
<th>받는 사람</th>
<td>
<textarea id="inputData" rows="5" cols="30" style="overflow:scroll; width:500px;"></textarea>
<button type="button" class="btn xsm gray" id="addBtn">대상추가</button>
</td>
</tr>
<tr>
<th>대상</th>
<td>
<div class="td-inner">
<div id="directDiv" style="overflow:scroll; width:500px; height:150px; padding:10px; font-size: 12px;">
</div>
</div>
</td>
</tr>
<tr>
<th>첨부이미지</th>
<td>
<div class="td-inner">
<div class="">
<button type="button" class="btn xsm primary" title="이미지첨부"
onclick="fn_open_modal('#mssagePassivSndngImgPopupDiv',
'#mssagePassivSndngImgPopup',
'<c:url value="/itrnt/ntcn/mssage/selectBOItrntMssagePassivSndngImgPopupForm"/>',
{'providerSeq' : '<c:out value="${resultMap.storeInfoMap.strInnb}"/>'
, 'sopmalCd' : '<c:out value="${resultMap.storeInfoMap.sopmalCd}"/>'}); return false;"
>이미지첨부
</button>
</div>
<ul id="add_file_list" style="display: block;">
</ul>
</div>
</td>
</tr>
<tr>
<th>내용</th>
<td>
<div class="td-inner">
<div class="message-send">
<div class="message-send__left">
<div class="form-control-container">
<div class="left">
<h3 class="content-section__inner-title mb-0">내용입력
</h3>
</div>
<div class="center">
</div>
<div class="right">
<button type="button" class="btn xsm outline" id="auto-callback" type="button">고객센터 추가</button>
<button type="button" class="btn xsm outline" id="auto-freedeny" type="button">수신거부 추가</button>
<button class="btn xsm gray" id="special_cont" type="button">특수문자</button>
<%-- <button type="button" class="btn xsm primary outline"--%>
<%-- onclick="fn_open_modal('#registMssagePopupDiv','#registMssagePopup',--%>
<%-- '<c:url value="/itrnt/ntcn/mssage/selectItrntRegistMssagePopup"/>'); return false;">SMS--%>
<%-- 불러오기</button>--%>
<div id="special_view" style="position: absolute; z-index: 100; margin-left: 880px; margin-top: -250px; border: 2px solid rgb(170, 170, 170); padding: 3px; background-color: rgb(255, 255, 255); display: none;">
<table cellpadding="5" cellspacing="1" border="0" width="100%">
<tbody>
<tr>
<td align="center"><span class="special_char" conts="#" style="font-size:10px;cursor:pointer;">#</span></td>
<td align="center"><span class="special_char" conts="&" style="font-size:10px;cursor:pointer;">&</span></td>
<td align="center"><span class="special_char" conts="*" style="font-size:10px;cursor:pointer;">*</span></td>
<td align="center"><span class="special_char" conts="@" style="font-size:10px;cursor:pointer;">@</span></td>
<td align="center"><span class="special_char" conts="§" style="font-size:10px;cursor:pointer;">§</span></td>
<td align="center"><span class="special_char" conts="※" style="font-size:10px;cursor:pointer;">※</span></td>
<td align="center"><span class="special_char" conts="☆" style="font-size:10px;cursor:pointer;">☆</span></td>
<td align="center"><span class="special_char" conts="★" style="font-size:10px;cursor:pointer;">★</span></td>
<td align="center"><span class="special_char" conts="○" style="font-size:10px;cursor:pointer;">○</span></td>
<td align="center"><span class="special_char" conts="●" style="font-size:10px;cursor:pointer;">●</span></td>
<td align="center"><span class="special_char" conts="◎" style="font-size:10px;cursor:pointer;">◎</span></td>
<td align="center"><span class="special_char" conts="◇" style="font-size:10px;cursor:pointer;">◇</span></td>
<td align="center"><span class="special_char" conts="◆" style="font-size:10px;cursor:pointer;">◆</span></td>
<td align="center"><span class="special_char" conts="□" style="font-size:10px;cursor:pointer;">□</span></td>
</tr>
<tr>
<td align="center"><span class="special_char" conts="■" style="font-size:10px;cursor:pointer;">■</span></td>
<td align="center"><span class="special_char" conts="△" style="font-size:10px;cursor:pointer;">△</span></td>
<td align="center"><span class="special_char" conts="▲" style="font-size:10px;cursor:pointer;">▲</span></td>
<td align="center"><span class="special_char" conts="▽" style="font-size:10px;cursor:pointer;">▽</span></td>
<td align="center"><span class="special_char" conts="▼" style="font-size:10px;cursor:pointer;">▼</span></td>
<td align="center"><span class="special_char" conts="→" style="font-size:10px;cursor:pointer;">→</span></td>
<td align="center"><span class="special_char" conts="←" style="font-size:10px;cursor:pointer;">←</span></td>
<td align="center"><span class="special_char" conts="↑" style="font-size:10px;cursor:pointer;">↑</span></td>
<td align="center"><span class="special_char" conts="↓" style="font-size:10px;cursor:pointer;">↓</span></td>
<td align="center"><span class="special_char" conts="↔" style="font-size:10px;cursor:pointer;">↔</span></td>
<td align="center"><span class="special_char" conts="〓" style="font-size:10px;cursor:pointer;">〓</span></td>
<td align="center"><span class="special_char" conts="◁" style="font-size:10px;cursor:pointer;">◁</span></td>
<td align="center"><span class="special_char" conts="◀" style="font-size:10px;cursor:pointer;">◀</span></td>
<td align="center"><span class="special_char" conts="▷" style="font-size:10px;cursor:pointer;">▷</span></td>
<td align="center"><span class="special_char" conts="▶" style="font-size:10px;cursor:pointer;">▶</span></td>
</tr>
<tr>
<td align="center"><span class="special_char" conts="♤" style="font-size:10px;cursor:pointer;">♤</span></td>
<td align="center"><span class="special_char" conts="♠" style="font-size:10px;cursor:pointer;">♠</span></td>
<td align="center"><span class="special_char" conts="♡" style="font-size:10px;cursor:pointer;">♡</span></td>
<td align="center"><span class="special_char" conts="♥" style="font-size:10px;cursor:pointer;">♥</span></td>
<td align="center"><span class="special_char" conts="♧" style="font-size:10px;cursor:pointer;">♧</span></td>
<td align="center"><span class="special_char" conts="♣" style="font-size:10px;cursor:pointer;">♣</span></td>
<td align="center"><span class="special_char" conts="⊙" style="font-size:10px;cursor:pointer;">⊙</span></td>
<td align="center"><span class="special_char" conts="◈" style="font-size:10px;cursor:pointer;">◈</span></td>
<td align="center"><span class="special_char" conts="▣" style="font-size:10px;cursor:pointer;">▣</span></td>
<td align="center"><span class="special_char" conts="◐" style="font-size:10px;cursor:pointer;">◐</span></td>
<td align="center"><span class="special_char" conts="◑" style="font-size:10px;cursor:pointer;">◑</span></td>
<td align="center"><span class="special_char" conts="▒" style="font-size:10px;cursor:pointer;">▒</span></td>
<td align="center"><span class="special_char" conts="▤" style="font-size:10px;cursor:pointer;">▤</span></td>
<td align="center"><span class="special_char" conts="▥" style="font-size:10px;cursor:pointer;">▥</span></td>
<td align="center"><span class="special_char" conts="▨" style="font-size:10px;cursor:pointer;">▨</span></td>
</tr>
<tr>
<td align="center"><span class="special_char" conts="▧" style="font-size:10px;cursor:pointer;">▧</span></td>
<td align="center"><span class="special_char" conts="▦" style="font-size:10px;cursor:pointer;">▦</span></td>
<td align="center"><span class="special_char" conts="▩" style="font-size:10px;cursor:pointer;">▩</span></td>
<td align="center"><span class="special_char" conts="♨" style="font-size:10px;cursor:pointer;">♨</span></td>
<td align="center"><span class="special_char" conts="☏" style="font-size:10px;cursor:pointer;">☏</span></td>
<td align="center"><span class="special_char" conts="☎" style="font-size:10px;cursor:pointer;">☎</span></td>
<td align="center"><span class="special_char" conts="☜" style="font-size:10px;cursor:pointer;">☜</span></td>
<td align="center"><span class="special_char" conts="☞" style="font-size:10px;cursor:pointer;">☞</span></td>
<td align="center"><span class="special_char" conts="¶" style="font-size:10px;cursor:pointer;">¶</span></td>
<td align="center"><span class="special_char" conts="†" style="font-size:10px;cursor:pointer;">†</span></td>
<td align="center"><span class="special_char" conts="‡" style="font-size:10px;cursor:pointer;">‡</span></td>
<td align="center"><span class="special_char" conts="↕" style="font-size:10px;cursor:pointer;">↕</span></td>
<td align="center"><span class="special_char" conts="↗" style="font-size:10px;cursor:pointer;">↗</span></td>
<td align="center"><span class="special_char" conts="↙" style="font-size:10px;cursor:pointer;">↙</span></td>
<td align="center"><span class="special_char" conts="↖" style="font-size:10px;cursor:pointer;">↖</span></td>
</tr>
<tr>
<td align="center"><span class="special_char" conts="↘" style="font-size:10px;cursor:pointer;">↘</span></td>
<td align="center"><span class="special_char" conts="♭" style="font-size:10px;cursor:pointer;">♭</span></td>
<td align="center"><span class="special_char" conts="♩" style="font-size:10px;cursor:pointer;">♩</span></td>
<td align="center"><span class="special_char" conts="♪" style="font-size:10px;cursor:pointer;">♪</span></td>
<td align="center"><span class="special_char" conts="♬" style="font-size:10px;cursor:pointer;">♬</span></td>
<td align="center"><span class="special_char" conts="㉿" style="font-size:10px;cursor:pointer;">㉿</span></td>
<td align="center"><span class="special_char" conts="㈜" style="font-size:10px;cursor:pointer;">㈜</span></td>
<td align="center"><span class="special_char" conts="№" style="font-size:10px;cursor:pointer;">№</span></td>
<td align="center"><span class="special_char" conts="㏇" style="font-size:10px;cursor:pointer;">㏇</span></td>
<td align="center"><span class="special_char" conts="™" style="font-size:10px;cursor:pointer;">™</span></td>
<td align="center"><span class="special_char" conts="㏂" style="font-size:10px;cursor:pointer;">㏂</span></td>
<td align="center"><span class="special_char" conts="㏘" style="font-size:10px;cursor:pointer;">㏘</span></td>
<td align="center"><span class="special_char" conts="℡" style="font-size:10px;cursor:pointer;">℡</span></td>
<td align="center"><span class="special_char" conts="?" style="font-size:10px;cursor:pointer;">?</span></td>
<td align="center"><span class="special_char" conts="ª" style="font-size:10px;cursor:pointer;">ª</span></td>
</tr>
<tr>
<td align="center"><span class="special_char" conts="º" style="font-size:10px;cursor:pointer;">º</span></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<input type="text" class="input-text xl" name="head" id="head"/>
<textarea class="textarea" title="에디터 입력" cols="30" id="cn" name="cn"
rows="10"></textarea>
<input type="text" class="input-text xl" name="tail" id="tail"/>
<div class="sms-manage__byte">
<span class="byteCnt">0</span><span> / 2000</span>
<span class="gray-10 sndng-type">(SMS)</span>
</div>
</div>
<div class="message-send__right">
<div class="form-control-container">
<div class="left">
<h3 class="content-section__inner-title mb-0">미리보기</h3>
</div>
<div class="center">
</div>
<div class="right">
</div>
</div>
<textarea class="textarea" title="에디터 입력" cols="30" rows="10" id="previewCn"
readonly></textarea>
</div>
</div>
<div class="gray-7">
<p class="fyi">‘정보통신망이용 촉진 및 정보 보호 등의 관한 법률 및 시행령’에 따라 광고 전송
시
제목에 (광고)를 표시해주세요.
<button type="button" class="mini-info-btn mb-3" data-info="info01">?</button>
</p>
</div>
</div>
</td>
</tr>
</tbody>
</table>
<!-- <div class="gray-7 mt-5">
<p class="fyi">받는 사람이 1,000명 이상 시 받는 사람을 엑셀로 다운로드 받아 대량 SMS 발송 기능으로 SMS를 보내주세요.
</p>
</div> -->
</div>
<h3 class="content-section__title">발송 시간</h3>
<div class="table-wrapper">
<table class="table">
<caption>발송 시간 설정</caption>
<colgroup>
<col style="width: 12%;">
<col>
</colgroup>
<tbody>
<tr>
<th>발송 시간 설정
<button type="button" class="mini-info-btn mb-3" data-info="info01">?</button>
</th>
<td>
<div class="td-inner">
<div class="custom-radio-container">
<div class="custom-radio">
<input type="radio" id="imdtl" name="sndngDtDv" value="imdtl">
<label for="imdtl">즉시 발송
</label>
</div>
<div class="custom-radio inner-input">
<input type="radio" id="resve" name="sndngDtDv" value="resve">
<label for="resve">예약 발송
</label>
<div class="input-container gap-4 ml-10">
<input type="text" id="datepicker_1" class="datepicker"
title="시작 날짜 선택" autocomplete="off">
<input type="hidden" id="resveDt" name="resveDt"/>
<div class="select-box">
<select class="short" title="시" id="resveHour">
<option value="8">8시</option>
<option value="9">9시</option>
<option value="10">10시</option>
<option value="11">11시</option>
<option value="12">12시</option>
<option value="13">13시</option>
<option value="14">14시</option>
<option value="15">15시</option>
<option value="16">16시</option>
<option value="17">17시</option>
<option value="18">18시</option>
<option value="19">19시</option>
<option value="20">20시</option>
</select>
</div>
<div class="select-box">
<select class="short" title="분" id="resveMinute">
<option value="00">00분</option>
<option value="10">10분</option>
<option value="20">20분</option>
<option value="30">30분</option>
<option value="40">40분</option>
<option value="50">50분</option>
</select>
</div>
</div>
</div>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</form>
</section>
<div id="modalDiv"></div>

View File

@@ -0,0 +1,187 @@
<%@ 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="ui" uri="http://www.winbit.kr/ctl/ui" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ page import="java.util.Date" %>
<%--
Class Name : MssagePassivSndngDtlPopupR.jsp
Description : 메시지 수동 발송 내역 상세
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024.02.27 리브가 최초 생성
2024.04.04 이운산 수정
--%>
<style>
.scroll-box {
width: 300px; /* 너비 지정 */
max-height: 200px; /* 최대 높이 지정 */
overflow-y: auto; /* 세로 스크롤 자동 추가 */
padding: 10px;
}
.cnt {
text-align: center;
}
</style>
<script>
$(document).ready(function () {
const headStr = $("#dtl-head").val();
const cnStr= $("#dtl-cn").val();
const tailStr = $("#dtl-tail").val();
const str = headStr + "\n" + cnStr + "\n" +tailStr;
const str_len = str.length;
let rbyte = 0;
let one_char = "";
//byte수 세기
for (let i = 0; i < str_len; i++) {
one_char = str.charAt(i);
if (escape(one_char).length > 4) {
//한글3Byte
rbyte += 3;
} else {
//영문 등 나머지 1Byte
rbyte++;
}
}
//바이트 표시
$('.byteCnt').text(rbyte);
if(rbyte > 90) {
$('.sndng-type').text("(LMS)")
} else {
$('.sndng-type').text("(SMS)")
}
});
</script>
<div id="mssagePassivSndngDtlPopup" class="modal" style="max-width: 1024px;">
<div class="modal-header">
<h4>문자 발송 정보</h4>
</div>
<div class="modal-content">
<div class="table-wrapper">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 25%;">
<col>
</colgroup>
<tbody>
<tr>
<th>보내는 사람</th>
<td>
<div class="td-inner" id="sndngNb">
<c:out value="${resultMap.boItrntMssageDtlMap.sndngDtlInfo.sndngNb}"/>
</div>
</td>
</tr>
<tr>
<th>대상</th>
<td>
<div class="scroll-box">
<c:if test="${not empty resultMap.boItrntMssageDtlMap.sndngDtlInfoList}">
<c:forEach items="${ resultMap.boItrntMssageDtlMap.sndngDtlInfoList}" var="list" varStatus="status">
<div>
<span>[${status.count}]</span>
<span>
<c:choose>
<c:when test="${list.sttus eq 'REG'}">
등록
</c:when>
<c:when test="${list.sttus eq 'BAD'}">
불량
</c:when>
<c:when test="${list.sttus eq 'WAIT'}">
대기
</c:when>
<c:when test="${list.sttus eq 'SEND'}">
전송
</c:when>
<c:when test="${list.sttus eq 'CAN'}">
취소
</c:when>
<c:when test="${list.sttus eq 'FAIL'}">
실패
</c:when>
<c:when test="${list.sttus eq 'OK'}">
성공
</c:when>
</c:choose>
</span>
<span>${list.recptnNb}</span>
<span>${list.cstmrNm}</span>
</div>
</c:forEach>
</c:if>
</div>
</td>
</tr>
<tr>
<th>내용</th>
<td>
<div class="td-inner">
<input type="text" class="input-text xl" name="head" id="dtl-head"
value="${resultMap.boItrntMssageDtlMap.sndngDtlInfo.head}" readonly/>
<textarea class="textarea" title="에디터 입력" cols="30" id="dtl-cn" name="cn"
rows="10" style="max-width: 600px;" readonly>${resultMap.boItrntMssageDtlMap.sndngDtlInfo.cn}</textarea>
<input type="text" class="input-text xl" name="tail" id="dtl-tail"
value="${resultMap.boItrntMssageDtlMap.sndngDtlInfo.tail}" readonly/>
<div class="sms-manage__byte">
<span class="byteCnt">0</span><span> / 2000</span>
<span class="gray-10 sndng-type">(SMS)</span>
</div>
</div>
</td>
</tr>
<tr>
<th>
상태
</th>
<td>
<div class="td-inner">
<table>
<thead>
<tr>
<th>대상</th>
<th>불량</th>
<th>대기</th>
<th>전송</th>
<th>실패</th>
<th>성공</th>
</tr>
</thead>
<tbody>
<tr class="cnt">
<td>${resultMap.boItrntMssageDtlMap.sndngDtlInfo.trgterCnt}</td>
<td>${resultMap.boItrntMssageDtlMap.sndngDtlInfo.badnCnt}</td>
<td>${resultMap.boItrntMssageDtlMap.sndngDtlInfo.waitCnt}</td>
<td>${resultMap.boItrntMssageDtlMap.sndngDtlInfo.trnsmisCnt}</td>
<td>${resultMap.boItrntMssageDtlMap.sndngDtlInfo.failrCnt}</td>
<td>${resultMap.boItrntMssageDtlMap.sndngDtlInfo.succesCnt}</td>
</tr>
</tbody>
</table>
</div>
</td>
</tr>
<tr>
<th>
발송시간
</th>
<td>
${resultMap.boItrntMssageDtlMap.sndngDtlInfo.sndngDt}
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>

View File

@@ -0,0 +1,268 @@
<%@ 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="ui" uri="http://www.winbit.kr/ctl/ui" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ page import="java.util.Date" %>
<%--
Class Name : MssagePassivSndngImgPopupC.jsp
Description : 메시지 수동 발송 이미지 첨부
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024.02.27 리브가 최초 생성
2024.04.04 이운산 수정
--%>
<script>
$(document).ready(function () {
/* ********************************************************
* 첨부파일 발송 화면에 입력
******************************************************** */
const fn_select_file = function() {
const selectFile = $("[name=fSeq]:checked");
if(selecFile == undefined || selecFile == null) {
alert("목록에서 이미지를 선택해주세요!");
return false;
}
const tr = selectFile.closet("tr");
const fileName = tr.find("td.fileName").text();
const src = tr.find("img").attr("src");
$("#sndngImg img").attr("src", src);
$("#imgFileNm").text(fileName);
}
/* ********************************************************
* 첨부파일 발송 화면에 입력
******************************************************** */
$("#selectFileBtn").on("click", function(){
const fSeq = $("[name=selectedImg]:checked").val();
if(fSeq == "" || fSeq == undefined) {
alert("목록에서 이미지를 선택해주세요!");
return false;
}
const selectedTr = $("[name=selectedImg]:checked").closest("tr");
const img = selectedTr.find("img");
const fileName = selectedTr.find(".fileName").text();
//TODO:추후 소스 위치 변경 필요
const imgDiv = $("<div>").addClass("img").append($("<img>").attr("src", img[0].src));
const imgNameDiv = $("<div>").append($("<span>").text(fileName));
const btnDiv = $("<div>").append($("<button>")
.addClass("btn xsm primary")
.attr("type", "button")
.attr("name", "imgDelBtn")
.text("삭제"));
const fSeqInput = $("<input>").attr("type", "hidden")
.attr("name", "fSeq")
.attr("value", fSeq);
const newAddDiv = $("<div>").append(imgDiv)
.append(imgNameDiv)
.append(btnDiv)
.append(fSeqInput);
const newAddLi = $("<li>").append(newAddDiv);
$("#add_file_list").append(newAddLi)
alert("추가되었습니다.");
})
/* ********************************************************
* 파일 이미지 등록
******************************************************** */
$("#fileRegBtn").on("click", function(){
const formData = new FormData($("#itrntSmsFileForm")[0]);
const files = $("#fileUpload")[0].files;
$.each(files, function(i, file) {
//이미지 너비 및 높이 구하기
const img = $('<img>', { src: URL.createObjectURL(file), style: 'display:none;' });
img.on('load', function() {
const width = this.width;
const height = this.height;
formData.append("fWidth", width);
formData.append("fHeight", height);
URL.revokeObjectURL(this.src); // 메모리 해제
$(this).remove();
$.ajax({
type :"post",
url : "<c:url value="/itrnt/ntcn/mssage/insertIntrntSndngImg"/>",
data: formData,
processData: false,
contentType: false,
success:function(data) {
const str = JSON.parse(data.resBody.result);
if (str.result == 'success') {
alert('<spring:message code="success.common.insert"/>');
//no-data 행있는 경우 제거
$("tbody tr").has("td.row-no-data").remove();
//새행 추가
const newRow = $("<tr>").attr("data-fseq", str.fSeq);
//인풋 추가
const newInput = $("<input>").attr("type", "radio")
.attr("id", str.fSeq)
.attr("name", "selectedImg")
.attr("value" , str.fSeq);
//레이블 추가
const newLabel = $("<label>").attr("for", str.fSeq);
//div 추가
const newRadioDiv = $("<div>").addClass("custom-radio")
.append(newInput)
.append(newLabel);
//td 추가
const newRadioTd = $("<td>").append(newRadioDiv);
//행에 td 추가
newRow.append(newRadioTd);
const newImg = $("<img>").attr("id", "registImg")
.attr("src", $("#cdnurl").val() + "/" + str.fCourse + str.fName);
newRow.append($("<td>").append(newImg));
newRow.append($("<td>").addClass("fileName").text(file.name));
//버튼추가
const newBtn = $("<button>").addClass("btn xsm primary")
.attr("type", "button")
.attr("name", "itrntImgDelBtn")
.text("삭제");
//행에 버튼 추가
newRow.append($("<td>").append(newBtn));
$("#itrntImgTable tbody").append(newRow);
}
}
})
})
})
})
/* ********************************************************
* 파일 이미지 삭제
******************************************************** */
$("#itrntImgTable").on("click", "[name=itrntImgDelBtn]",function(){
if (confirm("파일을 삭제하시겠습니까?")) {
const row = $(this).closest("tr");
const fileKey = row.data("fseq");
const menuGb = "SMSI";
const shopCd = "<c:out value='${resultMap.sopmalCd}'/>"
ajaxFileDelete($(this).closest("tr"), fileKey, shopCd, menuGb, 1, null, row);
}
});
/* ********************************************************
* 메인페이지 - 첨부이미지 삭제 (화면만 삭제함)
******************************************************** */
$("#add_file_list").on("click", "[name=imgDelBtn]", function(){
const li = $(this).closest("li");
li.remove();
})
});
</script>
<div id="mssagePassivSndngImgPopup" class="modal" style="max-width: 480px;">
<div class="modal-header">
<h4>MMS 이미지 추가</h4>
</div>
<div class="modal-content">
<div class="table-wrapper">
<p>■ 등록된 이미지목록 - 항목을 선택하여 MMS로 첨부합니다.</p>
<table class="table vertical" id="itrntImgTable">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 25%;">
<col>
</colgroup>
<thead>
<tr>
<th>선택</th>
<th>이미지</th>
<th>파일명</th>
<th>관리</th>
</tr>
</thead>
<tbody>
<c:if test="${!empty resultMap.itrntFileList}">
<c:forEach var="itrntImg" items="${resultMap.itrntFileList}" varStatus="status">
<tr data-fseq="${itrntImg.fSeq}">
<td>
<div class="custom-radio">
<input type="radio" id="${itrntImg.fSeq}" name="selectedImg" value="${itrntImg.fSeq}">
<label for="${itrntImg.fSeq}"></label>
</div>
</td>
<td>
<spring:eval expression="@environment.getProperty('mngrfo.common.fileupload.cdnurl')" var="cdnurl"/>
<input type="hidden" id="cdnurl" name="cdnurl" value="${cdnurl}">
<img class="registImg" src="<c:out value="${cdnurl}${itrntImg.fCourse}${itrntImg.fName}"/>"
onerror="this.src='<c:url value="/itrnt/images/image_placeholder.png"/>'"
alt="${itrntImg.fName}" width="65" height="65">
</td>
<td class="fileName"><c:out value="${itrntImg.fNameOrg}"/></td>
<td><button type="button" class="btn xsm primary" name="itrntImgDelBtn">삭제</button></td>
</tr>
</c:forEach>
</c:if>
<c:if test="${empty resultMap.itrntFileList}">
<tr>
<td class="row-no-data" colspan="4">조회된 데이터가 없습니다.</td>
</tr>
</c:if>
</tbody>
</table>
<div class="mt-10">
<button type="button" class="btn xsm primary" title="" id="selectFileBtn">
선택항목 MMS 이미지로 첨부하기
</button>
</div>
<div class="mt-10">
<p>■ 이미지등록 - 새로운 이미지를 목록에 추가합니다.</p>
<div class="info">
<div style="background-color:#eee; border:dashed 1px #ddd; padding:5px;">
<h2>※이미지등록 시 유의사항</h2>
<ul>
<li><strong>이미지 형식 : </strong>.jpg 파일만 가능</li>
<li><strong>해상도 (가로 x 세로) : </strong>1000px x 1000px 이하</li>
<li><strong>파일용량 : </strong>300kb 이하 권장</li>
<li><strong>파일이름 : </strong>30자 이내, (공백, 영문, 숫자, 한글, -, _) 이 외에 특수문자는 되도록 넣지 말아주세요!</li>
</ul>
<p>※MMS 발송전 테스트를 먼저 해보시기 바랍니다.</p>
</div>
</div>
<div class="mt-10">
<form id="itrntSmsFileForm" enctype="multipart/form-data">
<spring:eval expression="@environment.getProperty('mngrfo.common.fileupload.extensions.images')" var="acceptFileExtensions"/>
<input type="file" accept="<c:out value="${acceptFileExtensions}"/>" name="files" id="fileUpload"
multiple="multiple" onchange="addFiles(event, 1);">
<input type="hidden" name="providerSeq"
value="<c:out value='${resultMap.providerSeq}'/>" >
<input type="hidden" name="sopmalCd"
value="<c:out value='${resultMap.sopmalCd}'/>" >
<%-- <input type="hidden" name="sopmalCd" value="<c:out value="${ resultMap.sopmalCd }"/>"/>--%>
<button type="button" class="btn xsm primary" title="" id="fileRegBtn">등록</button>
</form>
</div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,150 @@
<%@ 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="ui" uri="http://www.winbit.kr/ctl/ui" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ page import="java.util.Date" %>
<%--
Class Name : MssagePassivSndngListInqireR.jsp
Description : 메시지 발송 내역 리스트
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-02-28 리브가 최초 생성
2024-04-04 이운산 수정
--%>
<script>
$(document).ready(function () {
});
</script>
<section class="content-section">
<div class="form-control-container">
<div class="left">
<div class="search-number">
<span class="search-number__text">총
<strong>
<fmt:formatNumber value="${ resultMap.paginationInfo.totalRecordCount }" pattern="#,###" />
</strong>건
<span>
(성공
<em>
<c:if test="${empty resultMap.boItrntMssageMap.rsltSttusCnt.okcnt}">0</c:if>
<fmt:formatNumber value="${ resultMap.boItrntMssageMap.rsltSttusCnt.okcnt }" pattern="#,###" />건
</em>,
실패
<em>
<c:if test="${empty resultMap.boItrntMssageMap.rsltSttusCnt.failcnt}">0</c:if>
<fmt:formatNumber value="${ resultMap.boItrntMssageMap.rsltSttusCnt.failcnt }" pattern="#,###" />건
</em>)
</span>
</span>
</div>
</div>
<div class="center">
</div>
<div class="right">
<div class="select-box">
<select id="mssagePageUnit" name="pageUnit" title="페이지당 출력될 목록건수" onchange="fn_select_list_mssage(1);">
<c:forEach items="${ resultMap.paginationInfo.pageUnitArr }" var="pageUnit" varStatus="pageUnitStatus">
<option value="<c:out value="${ pageUnit }"/>" <c:if test="${ resultMap.paginationInfo.recordCountPerPage eq pageUnit}">selected="selected"</c:if>><c:out value="${ pageUnit }"/>개씩</option>
</c:forEach>
</select>
</div>
</div>
</div>
<hr class="spacing">
<div class="table-wrapper">
<table class="table vertical">
<caption>해당 테이블에 대한 설명</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 6%;">
<col style="width: 8%;">
<col style="width: 12%;">
<col style="width: 12%;">
<col style="width: auto;">
<col style="width: 8%;">
</colgroup>
<thead>
<tr>
<th>번호</th>
<th>유형</th>
<th>등록시간</th>
<th>발송시간</th>
<th>발송내용</th>
<th>현재상태</th>
</tr>
</thead>
<tbody>
<c:if test="${!empty resultMap.boItrntMssageMap.smsSndngList}">
<c:forEach var="smsSndlng" items="${resultMap.boItrntMssageMap.smsSndngList }" varStatus="status">
<tr>
<td><c:out value="${smsSndlng.rnum }"/></td>
<td>
<c:if test="${smsSndlng.dv eq 'SMS'}">
SMS
</c:if>
<c:if test="${smsSndlng.dv eq 'LMS'}">
LMS/MMS
</c:if>
</td>
<td>
<c:out value="${smsSndlng.registDt }"/>
</td>
<td>
<c:out value="${smsSndlng.sndngDt }"/>
</td>
<td class="left">
<c:out value="${smsSndlng.head }"/>
<c:out value="${smsSndlng.cn }"/>
<c:out value="${smsSndlng.tail }"/>
</td>
<td>
<a class="under-line blue-7" onclick="fn_open_modal('#mssagePassivSndngDtlPopupDiv',
'#mssagePassivSndngDtlPopup',
'<c:url value="/itrnt/ntcn/mssage/selectItrntMssagePassivSndngDtlPopupInqire"/>',
{'srchStrInnb' : '<c:out value="${ smsSndlng.strInnb }"/>',
'srchSmsInnb' : '<c:out value="${ smsSndlng.smsInnb }"/>',
'sopmalCd' : '<c:out value="${ smsSndlng.sopmalCd }"/>'}); return false;">
<c:choose>
<c:when test="${smsSndlng.chrSttus eq 'REG'}">
등록
</c:when>
<c:when test="${smsSndlng.chrSttus eq 'BAD'}">
불량
</c:when>
<c:when test="${smsSndlng.chrSttus eq 'WAIT'}">
대기
</c:when>
<c:when test="${smsSndlng.chrSttus eq 'SEND'}">
전송
</c:when>
<c:when test="${smsSndlng.chrSttus eq 'CAN'}">
취소
</c:when>
<c:when test="${smsSndlng.chrSttus eq 'FAIL'}">
실패
</c:when>
<c:when test="${smsSndlng.chrSttus eq 'OK'}">
성공
</c:when>
</c:choose>
</a>
</td>
</tr>
</c:forEach>
</c:if>
<c:if test="${empty resultMap.boItrntMssageMap.smsSndngList }">
<tr>
<td class="row-no-data" colspan="12">조회된 데이터가 없습니다.</td>
</tr>
</c:if>
</table>
</div>
</section>
<div class="pagination__container">
<input type="hidden" id="msssagePageIndex" name="pageIndex" value="${ resultMap.boItrntMssageVO.pageIndex }"/>
<ui:pagination paginationInfo="${resultMap.paginationInfo}" type="image" jsFunction="fn_select_list_mssage"/>
</div>

View File

@@ -0,0 +1,251 @@
<%@ 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="ui" uri="http://www.winbit.kr/ctl/ui" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ page import="java.util.Date" %>
<%--
Class Name : MssagePassivSndngListInqireRForm.jsp
Description : 메시지 발송 내역 폼
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-02-28 리브가 최초 생성
2024-04-04 이운산 수정
--%>
<script>
$(document).ready(function () {
$("#info01").hide();
let pageIndex = '<c:out value="${ resultMap.pageIndex }"/>';
let pageUnit = '<c:out value="${ resultMap.pageUnit }"/>';
//url 정보
const urlParams = new URLSearchParams(window.location.search);
if(urlParams.has("mbrInfo")) {
const mbrInfo = JSON.parse($(".mbrInfo").val());
$("#srchRecptnNb").val(mbrInfo[0].sndngInfo);
$("#srchMbrInnb").val(mbrInfo[0].mbrInnb)
}
//초기 날짜 세팅
const date = new Date(); // 현재 날짜
const formattedDate = date.toISOString().split('T')[0];
$('#srchStrtSndngDt').val(formattedDate);
$('#srchEndSndngDt').val(formattedDate);
$('#today').addClass("selected")
//목록 조회
fn_select_list_mssage(pageIndex, pageUnit);
//데이트 피커
fn_set_niceSelect_datePicker("#listForm");
//날짜 선택 버튼 선택 처리
$(".dateRange-btnContainer").on("click", ".dateRange-btn", function(){
const dateId = $(this).attr("id");
$(".dateRange-btn").removeClass('selected');
$("#" + dateId).addClass("selected");
})
fn_set_dateRange_function('.dateRange-btnContainer', 'srchStrtSndngDt','srchEndSndngDt');
//검색 조건 종류 항목 체크 여부에 따른 체크 해제
$(".kindChk").on("click",function(){
fn_ctr_pCheckbox("#kindChkAll",".kindChk");
});
//검색 조건 상태 항목 체크 여부에 따른 체크 해제
$(".sttusChk").on("click",function(){
fn_ctr_pCheckbox("#sttusChkAll",".sttusChk");
});
/* ********************************************************
* 카테고리 체크버튼 이벤트
******************************************************** */
// "전체 선택" 체크박스를 클릭했을 때
$('#kindChkAll').on('click', function() {
// 현재 체크 상태를 가져옴
const isChecked = $(this).is(':checked');
// 다른 체크박스들을 모두 체크 또는 해제
$('.kindChk').prop('checked', isChecked);
});
// 개별 체크박스를 클릭했을 때 "전체 선택" 체크박스 상태를 동기화
$('.kindChk').on('click', function() {
const total = $('.kindChk').length;
const checked = $('.kindChk:checked').length;
// 모든 항목이 체크되었으면 "전체 선택"도 체크, 그렇지 않으면 해제
$('#kindChkAll').prop('checked', total === checked);
});
// "전체 선택" 체크박스를 클릭했을 때
$('#sttusChkAll').on('click', function() {
// 현재 체크 상태를 가져옴
const isChecked = $(this).is(':checked');
// 다른 체크박스들을 모두 체크 또는 해제
$('.sttusChk').prop('checked', isChecked);
});
// 개별 체크박스를 클릭했을 때 "전체 선택" 체크박스 상태를 동기화
$('.sttusChk').on('click', function() {
const total = $('.sttusChk').length;
const checked = $('.sttusChk:checked').length;
// 모든 항목이 체크되었으면 "전체 선택"도 체크, 그렇지 않으면 해제
$('#sttusChkAll').prop('checked', total === checked);
});
/****************
* 검색 폼 엔터 방지
*****************/
$("#srchSndngCn").keydown(function(event) {
if(event.keyCode === 13) {
event.preventDefault();
return false;
}
})
});
</script>
<section class="content-section" id="search-section">
<h3 class="content-section__title">SMS 발송 메시지</h3>
<form id="listForm">
<input type="hidden" value="" name="srchRecptnNb" id="srchRecptnNb">
<input type="hidden" value="" name="srchMbrInnb" id="srchMbrInnb">
<div class="table-wrapper">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 12%;">
<col style="width: 38%;">
<col style="width: 12%;">
<col style="width: 38%;">
</colgroup>
<tbody>
<tr>
<th>검색 내용</th>
<td colspan="3">
<div class="td-inner">
<div class="select-box">
<select title="검색내용조건" id="srchType" name="srchType">
<!-- <select title="검색내용조건" id="srchNbDv" name="srchNbDv"> -->
<option value="cn">발송 내용
</option>
<option value="recpntNb">수신 번호
</option>
<option value="sndngNb">회신 번호
</option>
<option value="cstmrIdnb">수신자명
</option>
</select>
</div>
<input class="input-text xl" type="text" title="검색어" id="srchStr" name="srchStr">
</div>
</td>
</tr>
<tr>
<th>조회 기간</th>
<td colspan="3">
<div class="td-inner">
<div class="select-box">
<select title="조회기간조건" name="srchDtDv" id="srchDtDv">
<option value="sndngDt">발송일
</option>
<option value="registDt">등록일
</option>
</select>
</div>
<div class="input-container">
<input type="text" id="srchStrtSndngDt" name="srchStrtSndngDt" class="datepicker"
title="시작 날짜 선택" autocomplete="off">
<span class="tilde">~</span>
<input type="text" id="srchEndSndngDt" name="srchEndSndngDt" class="datepicker"
title="종료 날짜 선택" autocomplete="off">
</div>
<div class="dateRange-btnContainer">
<button type="button" class="dateRange-btn" id="yesterday">어제</button>
<button type="button" class="dateRange-btn" id="today">오늘</button>
<button type="button" class="dateRange-btn" id="threeDays">3일간</button>
<button type="button" class="dateRange-btn" id="sevenDays">일주일</button>
<button type="button" class="dateRange-btn" id="oneMonth" >1개월</button>
<button type="button" class="dateRange-btn" id="threeMonth">3개월</button>
</div>
</div>
</td>
</tr>
<tr>
<th>종류</th>
<td>
<div class="td-inner">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox check-all">
<input type="checkbox" value="" id = "kindChkAll">
<span class="check"></span>
<span class="control-label">전체</span>
</label>
<label class="b-checkbox checkbox">
<input type="checkbox" value="SMS" class = "kindChk" name="srchDv">
<!-- <input type="checkbox" value="S" class = "kindChk" name="srchDv"> -->
<span class="check"></span>
<span class="control-label">SMS</span>
</label>
<label class="b-checkbox checkbox">
<input type="checkbox" value="LMS" class = "kindChk" name="srchDv">
<!-- <input type="checkbox" value="M" class = "kindChk" name="srchDv"> -->
<span class="check"></span>
<span class="control-label">LMS/MMS</span>
</label>
<!-- <label class="b-checkbox checkbox">
<input type="checkbox" value="AT" class = "kindChk" name="srchDv">
<span class="check"></span>
<span class="control-label">알림톡</span>
</label> -->
</div>
</div>
</td>
<th>발송상태</th>
<td>
<div class="td-inner">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox check-all">
<input type="checkbox" value="" id = "sttusChkAll">
<span class="check"></span>
<span class="control-label">전체</span>
</label>
<c:forEach items="${ resultMap.sttus }" var="sttus"
varStatus="status">
<label class="b-checkbox checkbox">
<input type="checkbox" class="sttusChk" name="srchSttus" value="<c:out value="${ sttus.cd }"/>">
<span class="check"></span>
<span class="control-label"><c:out value="${ sttus.cdNm }"/></span>
</label>
</c:forEach>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="form-control-container">
<div class="left"></div>
<div class="center">
<button class="btn outline" id="resetBtn" type="button" onclick="fn_reset_form('search-section'); return false;">초기화</button>
<button class="btn primary" id="searchBtn" type="button" onclick="fn_select_list_mssage(1); return false;">검색</button>
</div>
<div class="right"></div>
</div>
</section>
<div id="pageDiv">
</div>
</form>

View File

@@ -0,0 +1,480 @@
<%@ 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="ui" uri="http://www.winbit.kr/ctl/ui" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ page import="java.util.Date" %>
<%--
Class Name : MessagePassivSndngManage.jsp
Description : 메시지 발송 관리
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-02-28 리브가 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@ include file="/WEB-INF/views/comm/itrnt/Include.jsp"%>
<script src="<c:url value='/js/fileupload_comm.js'/>"></script>
</head>
<script>
$(document).ready(function () {
/**********************
* 엔터 키 입력 처리
***********************/
$("input").keydown(function(event) {
if(event.key === "Enter" || event.keyCode === 13) {
event.preventDefault();
}
})
fn_select_Sndng();
});
/* ********************************************************
* 메시지 수동 발송 TAB
******************************************************** */
const fn_select_Sndng = function () {
$.ajax({
type: 'post',
url: '/itrnt/ntcn/mssage/selectItrntMssagePassivSndng',
success: function (resultHtml) {
$("#selectListInqireFormBtn").removeClass("active");
$("#selectListInqireForm").removeClass("active");
$(".page-title__btn-container").show();
$("#selectSndngBtn").addClass("active");
$("#selectSndng").addClass("active");
$('#selectSndng').html(resultHtml);
}
});
}
/* ********************************************************
* 메시지 발송 내역 TAB
******************************************************** */
const fn_select_listForm = function () {
$.ajax({
type: 'post',
url: '/itrnt/ntcn/mssage/selectItrntMssagePassivSndngListInqireRForm',
success: function (resultHtml) {
$("#selectSndngBtn").removeClass("active");
$("#selectSndng").removeClass("active");
$(".page-title__btn-container").hide();
$("#selectListInqireFormBtn").addClass("active");
$("#selectListInqireForm").addClass("active");
$('#selectListInqireForm').html(resultHtml);
}
});
}
/* ********************************************************
* 메시지 발송 내역 TAB _ 리스트 조회
******************************************************** */
const fn_select_list_mssage = function(pageIndex, pageUnit) {
let dataStr = null;
if(!pageIndex || pageIndex === '') {
$('#mssagePageIndex').val(1);
} else {
$('#mssagePageIndex').val(pageIndex);
}
pageUnit = $("#mssagePageUnit").val();
if(!pageUnit) {
dataStr = $('#listForm').serialize();
} else {
if($('#mssagePageUnit').length){
$('#mssagePageUnit').val(pageUnit);
dataStr = $('#listForm').serialize() + '&pageIndex=' + pageIndex + '&pageUnit='+pageUnit;
} else {
dataStr = $('#listForm').serialize() + '&pageIndex=' + pageIndex;
}
}
$.ajax({
type: "post",
url : "<c:url value='/itrnt/ntcn/mssage/selectItrntMssagePassivSndngListInqire'/>",
data : dataStr,
success:function(resultHtml) {
$('#pageDiv').html(resultHtml);
$('#mssagePageUnit').niceSelect();
}
});
}
const isEmptyObject = function (obj) {
// null인지 먼저 체크
if (obj === null || obj === undefined) {
return true;
}
// 비어있는 객체인지 확인
return Object.keys(obj).length === 0;
}
/* ********************************************************
* 메시지 발송
******************************************************** */
const fn_sndng_sms = function() {
let recptnTrgtList = [];
const directDiv = $("#directDiv");
directDiv.find("span").each(function (){
const line = $(this).text();
const parts = line.trim().split(' ');
let item = {
recptnNb : parts[1] || '',
mbrNm : parts[2] || '',
// mbrInnb : mbrInnb,
// mbrDvCd : mbrDvCd
}
recptnTrgtList.push(item);
});
console.log(recptnTrgtList)
if(recptnTrgtList.length == 0) {
alert("발송 대상이 지정되지 않았습니다.");
return false;
}
if($("#cn").val() == "") {
alert("내용을 입력해 주세요.")
return false;
}
if($("[name=sndngDtDv]:checked").val() == null) {
alert("발송시간을 설정해주세요.");
return false;
}
const now = new Date();
const currentHour = now.getHours();
const currentMinute = now.getMinutes();
//현재 시간
const currentTme = (currentHour < 10 ? '0' : '') + currentHour
+ (currentMinute < 10 ? '0' : '') + currentMinute;
//발송 가능 시간
const bgntme = $("#smsAtmcSndngLmttBgntme").val()
const endtme = $("#smsAtmcSndngLmttEndtme").val()
const bgntmeNum = parseInt(bgntme, 10)
const endtmeNum = parseInt(endtme, 10);
if($("#resve").is(":checked")) {
const resveHour = $("#resveHour").val();
const resveMinute = $("#resveMinute").val();
//예약시간
const resveTme = (resveHour < 10 ? '0' : '') + resveHour
+ resveMinute;
const resveTmeNum = parseInt(resveTme, 10);
if(resveTmeNum >= bgntmeNum && resveTmeNum <= endtmeNum) {
} else {
alert("발송 시간이 아닙니다.");
return false;
}
} else {
const currentTmeNum = parseInt(currentTme, 10);
if(currentTmeNum >= bgntmeNum && currentTmeNum <= endtmeNum) {
} else {
alert("발송 시간이 아닙니다.");
return false;
}
}
let formData = $("#passiveMssageSndngForm").serializeArray();
let filteredForm;
//즉시 발송인 경우 예약날짜 제거
if($("[name=sndngDtDv]:checked").val() == "imdtl") {
filteredForm = formData.filter(item => item.name !== "resveDt");
} else {
filteredForm = formData;
}
$.each(filteredForm, function(index, item){
if(item.name === 'resveDt') {
const resveDate = $("#datepicker_1").val();
const resveHour = $("#resveHour").val();
const resveMin = $("#resveMinute").val();
$("#resveDt").val(resveDate + " " + resveHour + ":" + resveMin + ":00");
const date = new Date($("#resveDt").val());
item.value = date;
}
})
filteredForm.push({name:'recptnTrgtList', value: JSON.stringify(recptnTrgtList)})
const dataStr = $.param(filteredForm);
$.ajax({
type: "post",
url : "<c:url value="/itrnt/ntcn/mssage/insertItrntMssageSndng"/>",
data : dataStr,
success:function(data) {
const str = JSON.parse(data.resBody.result);
const smsRslt = isEmptyObject(str.messageRslt);
const sureRlst = isEmptyObject(str.messageSureInsert);
const lotteRlst = isEmptyObject(str.mssageLotteInsert);
//발송, 대상 등록 실패시
if(!smsRslt && str.messageRslt.status == "1") {
alert('<spring:message code="fail.common.insert"/>');
return false;
}
if(!sureRlst) {
//슈어 등록 실패시
if(str.messageSureInsert.status == "1") {
alert('<spring:message code="fail.common.insert"/>');
return false;
} else {
//슈어 등록 성공시
alert('<spring:message code="success.common.insert"/>');
}
}
if(!lotteRlst > 0) {
//롯데 등록 실패시
if(str.mssageLotteInsert.status == "1") {
alert('<spring:message code="fail.common.insert"/>');
return false;
} else {
//롯데 등록 성공시
alert('<spring:message code="success.common.insert"/>');
}
}
}
});
};
/* ********************************************************
* 직접 수신번호 입력
******************************************************** */
const fn_add_num = function() {
const to = $("#inputTo").val();
const name = $("#inputName").val();
if(to == "") {
return af("추가하실 휴대전화번호를 입력하세요.", $("#inputTo"));
}
if(get_str_to(to) == "") {
return af("휴대전화번호가 올바르지 않습니다.", $(".input_to"));
}
if(name == "") {
return af("추가하실 이름을 입력하세요.", $("#inputName"));
}
//목록 배열
let hp_list = [];
//기존 목록 조회후 배열에 입력
$("#div_to_list li").each(function () {
const to_seq = $(this).attr("to_seq");
const r_to = $(this).find(".str_to").text();
const r_name = $(this).find(".str_name").text();
hp_list.push(r_to);
});
//입력
add_to({r_useq:'', r_to:to, r_name:name}, hp_list,"N");
//입력값 초기화
$("#inputTo").val("").focus();
$("#inputName").val("");
//건수 설정
reset_to_list();
}
/* ********************************************************
* 동의여부 체크
******************************************************** */
const agree_yn_check = function (){
const agree_text = "";
if($("input[name='agree_yn']").attr("checked")){
agree_text= "위 내용에 대하여 {=date('Y년m월d일 H시i분s초')}에 {managerInfo.mname}({managerInfo.manager_id})께서 동의하셨습니다.";
$("#agree_text").show();
}else{
$("#agree_text").hide();
}
$("#agree_text").html(agree_text);
}
/***********************************************************
* 미리보기
* *********************************************************/
const fn_preview = function() {
//keyup 이벤트
$("#cn, #head, #tail").keyup(function() {
const str = $("#head").val() + '\n\n' + $("#cn").val() + '\n\n' + $("#tail").val();
$("#previewCn").html(str);
});
//change 이벤트
$("#cn, #head, #tail").on("change", function() {
const str = $("#head").val() + '\n\n' + $("#cn").val() + '\n\n' + $("#tail").val();
$("#previewCn").html(str);
});
}
/* ********************************************************
* 모달 이벤트 시작
******************************************************** */
/**************************************************************
* 바이트 수 체크
****************************************************************/
const fn_count_btye_show = function() {
let numberArr = [];
$(".sms-manage .textarea").each(function() {
const msgStr = $(this).val();
const msgStrLen = msgStr.length;
let rbyte = 0;
let rlen = 0;
let one_char = "";
for (let i = 0; i < msgStrLen; i++) {
one_char = msgStr.charAt(i);
if (escape(one_char).length > 4) {
//한글3Byte
rbyte += 3;
} else {
//영문 등 나머지 1Byte
rbyte++;
}
}
numberArr.push(rbyte);
})
$(".number").each(function(){
$(this).text(numberArr.shift());
})
}
/* ********************************************************
* 자주쓰는 메시지 조회
******************************************************** */
const fn_select_album = function(category) {
if(category == undefined) {
category = "";
}
$.ajax({
type: "post",
url: "<c:url value='/itrnt/ntcn/mssage/selectItrntRegistMssagePopup'/>",
data: { category },
success:function(data) {
const tabBox = $(data).find(".tab-box");
const templateList = $(data).find(".template-message__container");
$(".tab-box").html(tabBox.html());
$(".template-message__container").html(templateList.html());
fn_count_btye_show();
$(".tab-box__btn").removeClass("current");
$(".tab-box__btn").each(function(){
if($(this).text().trim() === category) {
$(this).addClass("current");
}
})
}
})
}
</script>
<body>
<%-- 상단메뉴 공통화 적용 : 2023-11-30 / 박철민 추가 --%>
<%@ include file="/WEB-INF/views/comm/itrnt/Header.jsp"%>
<main class="main">
<%-- 좌측메뉴 공통화 적용 : 2023-11-30 / 박철민 추가 --%>
<%@ include file="/WEB-INF/views/comm/itrnt/Left.jsp"%>
<div class="content">
<div class="content__inner">
<button class="side-nav__fold"><span class="visually-hidden">좌측메뉴 펼치기/닫기</span></button>
<div class="page-title">
<h2 class="page-title__title">메시지 발송 관리</h2>
<div class="page-title__btn-container">
<button class="btn primary" type="button" onclick="fn_sndng_sms()">발송하기</button>
</div>
</div>
<div class="content-tab">
<button class="content-tab__btn active" id="selectSndngBtn" onclick="fn_select_Sndng()">메시지 수동 발송</button>
<button class="content-tab__btn" id="selectListInqireFormBtn" onclick="fn_select_listForm()">메시지 발송 내역</button>
</div>
<div class="content-tab__content active" id="selectSndng">
<%--메시지 수동 발송--%>
</div>
<div class="content-tab__content" id="selectListInqireForm">
<%--메시지 발송 내역--%>
</div>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</div>
</main>
<!-- 툴팁 클릭 컨텐츠 -->
<!-- 버튼의 data-info값과 id를 통일시켜야함 -->
<div id="info01" class="mini-info-content" style="width: 280px;">
<div class="mini-info-content__header">
<h5 class="mini-info-content__title">정보통신망 이용촉진 및 정보보호 등에 관한 법률</h5>
<button class="mini-info-content__close"><span class="visually-hidden">닫기</span></button>
</div>
<div class="mini-info-content__content">
<p>
<a href="https://www.lawnb.com/lawinfo/contents_view.asp?cid=00EB2355AF5D4259BD60F91473F0232C">제50조 (영리목적의 광고성 정보 전송 제한)</a>
<p>
<p>
<a href="https://www.lawnb.com/lawinfo/contents_view.asp?cid=00EB2355AF5D4259BD60F91473F0232C">제76조 (과태료)</a>
</p>
</div>
<br>
<div class="mini-info-content__header">
<h5 class="mini-info-content__title">한국인터넷진흥원 (KISA)</h5>
</div>
<div class="mini-info-content__content">
<p>
<a href="https://spam.kisa.or.kr/kor/rule/rule03.jsp">광고정보 전송 시 준수사항</a>
<p>
<p>
<a href="https://spam.kisa.or.kr/kor/way/way04.jsp">광고전송가이드</a>
</p>
</div>
</div>
<!-- 메세지 수동 발송 - sms 불러오기 팝업 -->
<div id="registMssagePopupDiv"></div>
<!-- 메세지 수동 발송 - sms 불러오기 - sms 추가 팝업 -->
<div id="mssageAditPopupDiv"></div>
<!-- 메세지 발송 내역 - 상세 조회 팝업 -->
<div id="mssagePassivSndngDtlPopupDiv"></div>
<!--이미지 첨부 -->
<div id="mssagePassivSndngImgPopupDiv"></div>
</body>
</html>

View File

@@ -0,0 +1,472 @@
<%@ 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="ui" uri="http://www.winbit.kr/ctl/ui" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ page import="java.util.Date" %>
<%--
Class Name : ItrntMssageSndngPopupC.jsp
Description : 인트라넷 메시지 발송 관리 팝업
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2025-01-16 이운산 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<%-- 공통 include --%>
<%@include file ="/WEB-INF/views/comm/mngr/Include.jsp" %>
</head>
<script>
$(document).ready(function () {
fn_preview();
fn_select_Sndng();
//특수문자 버튼
$("#special_cont").click(function(){
if($("#special_view").css("display")=='none') $("#special_view").show();
else $("#special_view").hide();
});
//특수문자 css
$("#special_view").find("td").css({
"height" : "0px"
})
//특수문자 입력
$(".special_char").click(function(){
const str = $("#sndngCn").val();
$("#sndngCn").val(str+$(this).attr('conts'));
});
//팝업 윈도우 사이드바 공백 제거 처리
$(".content").css({
"padding-left":"0px"
})
});
/* ********************************************************
* 메시지 수동 발송 TAB
******************************************************** */
const fn_select_Sndng = function () {
$.ajax({
type: 'post',
url: '/itrnt/ntcn/mssage/selectItrntMssagePassivSndng',
success: function (resultHtml) {
$("#selectListInqireFormBtn").removeClass("active");
$("#selectListInqireForm").removeClass("active");
$(".page-title__btn-container").show();
$("#selectSndngBtn").addClass("active");
$("#selectSndng").addClass("active");
$('#selectSndng').html(resultHtml);
}
});
}
/* ********************************************************
* 메시지 발송 내역 TAB
******************************************************** */
const fn_select_listForm = function () {
$.ajax({
type: 'post',
url: '/itrnt/ntcn/mssage/selectItrntMssagePassivSndngListInqireRForm',
success: function (resultHtml) {
$("#selectSndngBtn").removeClass("active");
$("#selectSndng").removeClass("active");
$(".page-title__btn-container").hide();
$("#selectListInqireFormBtn").addClass("active");
$("#selectListInqireForm").addClass("active");
$('#selectListInqireForm').html(resultHtml);
}
});
}
/* ********************************************************
* 메시지 발송 내역 TAB _ 리스트 조회
******************************************************** */
const fn_select_list_mssage = function(pageIndex, pageUnit) {
let dataStr;
if(!pageIndex) {
$('#pageIndex').val(1);
} else {
$('#pageIndex').val(pageIndex);
}
pageUnit = $("#pageUnit").val();
if(!pageUnit) {
dataStr = $('#listForm').serialize();
} else {
if($('#pageUnit').length){
dataStr = $('#listForm').serialize() + '&pageIndex='+pageIndex +'&pageUnit='+pageUnit;
} else {
dataStr = $('#listForm').serialize() + '&pageIndex='+pageIndex;
}
}
$.ajax({
type: "post",
url : "<c:url value="/itrnt/ntcn/mssage/selectItrntMssagePassivSndngListInqire"/>",
data : dataStr,
success:function(resultHtml) {
$('#pageDiv').html(resultHtml);
$('#mssagePageUnit').niceSelect();
}
});
}
const isEmptyObject = function (obj) {
// null인지 먼저 체크
if (obj === null || obj === undefined) {
return true;
}
// 비어있는 객체인지 확인
return Object.keys(obj).length === 0;
}
/* ********************************************************
* 메시지 발송
******************************************************** */
const fn_sndng_sms = function() {
let to_arr = [];
let name_arr = [];
let recptnTrgtList = [];
const directDiv = $("#directDiv");
directDiv.children("div").each(function (){
const line = $(this).text();
const parts = line.trim().split(' ');
let item = {
recptnNb : parts[1] || '',
mbrNm : parts[2] || '',
// mbrInnb : mbrInnb,
// mbrDvCd : mbrDvCd
}
recptnTrgtList.push(item);
});
if(recptnTrgtList.length == 0) {
alert("발송 대상이 지정되지 않았습니다.");
return false;
}
if($("#cn").val() == "") {
alert("내용을 입력해 주세요.")
return false;
}
if($("[name=sndngDtDv]:checked").val() == null) {
alert("발송시간을 설정해주세요.");
return false;
}
const now = new Date();
const currentHour = now.getHours();
const currentMinute = now.getMinutes();
//현재 시간
const currentTme = (currentHour < 10 ? '0' : '') + currentHour
+ (currentMinute < 10 ? '0' : '') + currentMinute;
//발송 가능 시간
const bgntme = $("#smsAtmcSndngLmttBgntme").val()
const endtme = $("#smsAtmcSndngLmttEndtme").val()
const bgntmeNum = parseInt(bgntme, 10)
const endtmeNum = parseInt(endtme, 10);
if($("#resve").is(":checked")) {
const resveHour = $("#resveHour").val();
const resveMinute = $("#resveMinute").val();
//예약시간
const resveTme = (resveHour < 10 ? '0' : '') + resveHour
+ resveMinute;
const resveTmeNum = parseInt(resveTme, 10);
if(resveTmeNum >= bgntmeNum && resveTmeNum <= endtmeNum) {
} else {
alert("발송 시간이 아닙니다.");
return false;
}
} else {
const currentTmeNum = parseInt(currentTme, 10);
if(currentTmeNum >= bgntmeNum && currentTmeNum <= endtmeNum) {
} else {
alert("발송 시간이 아닙니다.");
return false;
}
}
let formData = $("#passiveMssageSndngForm").serializeArray();
let filteredForm;
//즉시 발송인 경우 예약날짜 제거
if($("[name=sndngDtDv]:checked").val() == "imdtl") {
filteredForm = formData.filter(item => item.name !== "resveDt");
} else {
filteredForm = formData;
}
$.each(filteredForm, function(index, item){
if(item.name === 'resveDt') {
const resveDate = $("#datepicker_1").val();
const resveHour = $("#resveHour").val();
const resveMin = $("#resveMinute").val();
$("#resveDt").val(resveDate + " " + resveHour + ":" + resveMin + ":00");
const date = new Date($("#resveDt").val());
item.value = date;
}
})
filteredForm.push({name:'recptnTrgtList', value: JSON.stringify(recptnTrgtList)})
const dataStr = $.param(filteredForm);
$.ajax({
type: "post",
url : "<c:url value="/itrnt/ntcn/mssage/insertItrntMssageSndng"/>",
data : dataStr,
success:function(data) {
const str = JSON.parse(data.resBody.result);
const smsRslt = isEmptyObject(str.messageRslt);
const sureRlst = isEmptyObject(str.messageSureInsert);
const lotteRlst = isEmptyObject(str.mssageLotteInsert);
//발송, 대상 등록 실패시
if(!smsRslt && str.messageRslt.status == "1") {
alert('<spring:message code="fail.common.insert"/>');
return false;
}
if(!sureRlst) {
//슈어 등록 실패시
if(str.messageSureInsert.status == "1") {
alert('<spring:message code="fail.common.insert"/>');
return false;
} else {
//슈어 등록 성공시
alert('<spring:message code="success.common.insert"/>');
}
}
if(!lotteRlst > 0) {
//롯데 등록 실패시
if(str.mssageLotteInsert.status == "1") {
alert('<spring:message code="fail.common.insert"/>');
return false;
} else {
//롯데 등록 성공시
alert('<spring:message code="success.common.insert"/>');
}
}
}
});
};
/* ********************************************************
* 직접 수신번호 입력
******************************************************** */
const fn_add_num = function() {
const to = $("#inputTo").val();
const name = $("#inputName").val();
if(to == "") {
return af("추가하실 휴대전화번호를 입력하세요.", $("#inputTo"));
}
if(get_str_to(to) == "") {
return af("휴대전화번호가 올바르지 않습니다.", $(".input_to"));
}
if(name == "") {
return af("추가하실 이름을 입력하세요.", $("#inputName"));
}
let hp_list = [];
$("#div_to_list li").each(function () {
const to_seq = $(this).attr("to_seq");
const r_to = $(this).find(".str_to").text();
const r_name = $(this).find(".str_name").text();
hp_list.push(r_to);
});
add_to({r_useq:'', r_to:to, r_name:name}, hp_list,"N");
$("#inputTo").val("").focus();
$("#inputName").val("");
reset_to_list();
}
/***********************************************************
* 미리보기
* *********************************************************/
const fn_preview = function() {
//keyup 이벤트
$("#cn, #head, #tail").keyup(function() {
const str = $("#head").val() + '\n\n' + $("#cn").val() + '\n\n' + $("#tail").val();
$("#previewCn").html(str);
});
//change 이벤트
$("#cn, #head, #tail").on("change", function() {
const str = $("#head").val() + '\n\n' + $("#cn").val() + '\n\n' + $("#tail").val();
$("#previewCn").html(str);
});
}
/***********************************************************
* 추가 팝업 닫기
* *********************************************************/
/* ********************************************************
* 모달 이벤트 시작
******************************************************** */
/**************************************************************
* 바이트 수 체크
****************************************************************/
const fn_count_btye_show = function() {
let numberArr = [];
$(".sms-manage .textarea").each(function() {
const msgStr = $(this).val();
const msgStrLen = msgStr.length;
let rbyte = 0;
let rlen = 0;
let one_char = "";
for (let i = 0; i < msgStrLen; i++) {
one_char = msgStr.charAt(i);
if (escape(one_char).length > 4) {
//한글3Byte
rbyte += 3;
} else {
//영문 등 나머지 1Byte
rbyte++;
}
}
numberArr.push(rbyte);
})
$(".number").each(function(){
$(this).text(numberArr.shift());
})
}
/* ********************************************************
* 자주쓰는 메시지 조회
******************************************************** */
const fn_select_album = function(category) {
if(category == undefined) {
category = "공통";
}
$.ajax({
type: "post",
url: "<c:url value='/itrnt/ntcn/mssage/selectItrntRegistMssagePopup'/>",
data: { category },
success:function(data) {
const tabBox = $(data).find(".tab-box");
const templateList = $(data).find(".template-message__container");
$(".tab-box").html(tabBox.html());
$(".template-message__container").html(templateList.html());
fn_count_btye_show();
$(".tab-box__btn").removeClass("current");
$(".tab-box__btn").each(function(){
if($(this).text().trim() === category) {
$(this).addClass("current");
}
})
}
})
}
</script>
<body>
<main class="main">
<div class="content">
<div class="content__inner">
<div class="page-title">
<h2 class="page-title__title">메시지 발송 관리</h2>
<div class="page-title__btn-container">
<button class="btn primary" type="button" id="sndngBtn" onclick="fn_sndng_sms()">발송하기</button>
</div>
</div>
<div class="content-tab">
<button class="content-tab__btn active" id="selectSndngBtn" onclick="fn_select_Sndng()">메시지 수동 발송</button>
<button class="content-tab__btn" id="selectListInqireFormBtn" onclick="fn_select_listForm()">메시지 발송 내역</button>
</div>
<div class="content-tab__content active" id="selectSndng">
<%--메시지 수동 발송--%>
</div>
<div class="content-tab__content" id="selectListInqireForm">
<%--메시지 발송 내역--%>
</div>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</div>
</main>
<!-- 툴팁 클릭 컨텐츠 -->
<!-- 버튼의 data-info값과 id를 통일시켜야함 -->
<div id="info01" class="mini-info-content" style="width: 280px;">
<div class="mini-info-content__header">
<h5 class="mini-info-content__title">정보통신망 이용촉진 및 정보보호 등에 관한 법률</h5>
<button class="mini-info-content__close"><span class="visually-hidden">닫기</span></button>
</div>
<div class="mini-info-content__content">
<p>
<a href="https://www.lawnb.com/lawinfo/contents_view.asp?cid=00EB2355AF5D4259BD60F91473F0232C">제50조 (영리목적의 광고성 정보 전송 제한)</a>
<p>
<p>
<a href="https://www.lawnb.com/lawinfo/contents_view.asp?cid=00EB2355AF5D4259BD60F91473F0232C">제76조 (과태료)</a>
</p>
</div>
<br>
<div class="mini-info-content__header">
<h5 class="mini-info-content__title">한국인터넷진흥원 (KISA)</h5>
</div>
<div class="mini-info-content__content">
<p>
<a href="https://spam.kisa.or.kr/kor/rule/rule03.jsp">광고정보 전송 시 준수사항</a>
<p>
<p>
<a href="https://spam.kisa.or.kr/kor/way/way04.jsp">광고전송가이드</a>
</p>
</div>
</div>
<!-- 메세지 수동 발송 - sms 불러오기 팝업 -->
<div id="registMssagePopupDiv"></div>
<!-- 메세지 수동 발송 - sms 불러오기 - sms 추가 팝업 -->
<div id="mssageAditPopupDiv"></div>
<!-- 메세지 발송 내역 - 상세 조회 팝업 -->
<div id="mssagePassivSndngDtlPopupDiv"></div>
<!--이미지 첨부 -->
<div id="mssagePassivSndngImgPopupDiv"></div>
</body>
</body>
</html>

View File

@@ -0,0 +1,281 @@
<%@ 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="ui" uri="http://www.winbit.kr/ctl/ui" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ page import="java.util.Date" %>
<%--
Class Name : RegistMssagePopupR.jsp
Description : SMS 불러오기 팝업
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024.04.04 이운산 최초 생성
--%>
<script>
$(document).ready(function() {
const tabBoxBtn = $(".tab-box__btn");
tabBoxBtn.eq(0).addClass("current");
const firstBtn = tabBoxBtn.eq(0).text().trim()
fn_select_album(firstBtn);
/**************************************************************
* 단일 바이트 수 체크
****************************************************************/
const fn_count_byte_one = function(msgStr){
let number = 0;
const msgStrLen = msgStr.length;
let rbyte = 0;
let rlen = 0;
let one_char = "";
for (let i = 0; i < msgStrLen; i++) {
one_char = msgStr.charAt(i);
if (escape(one_char).length > 4) {
//한글3Byte
rbyte += 3;
} else {
//영문 등 나머지 1Byte
rbyte++;
}
}
//numberArr.push(rbyte);
return rbyte;
}
/**************************************************************
* 선택 메시지 내용 모달 -> 본화면
****************************************************************/
let textStr = null;
$(".template-message__container").on("focus", ".textarea", function(){
textStr =$(this).select();
})
$("#applyBtn").on("click", function(){
if(textStr == null) {
alert("메시지가 선택되지 않았습니다.")
} else {
$("#cn").val(textStr.text());
fn_close_modal("registMssagePopup")
}
})
/**************************************************************
* 텍스트 바이트 계산
****************************************************************/
$(".template-message__container").on("focus", ".textarea", function(){
$(this).on("keyup", function(){
let byteNum = fn_count_byte_one($(this).val());
$(this).next("div").find(".number").text(byteNum);
})
})
/**************************************************************
* 검색하기
****************************************************************/
// 공통 검색 처리
const srchAlbum = function(){
const msg = $("#srchStr").val();
if(msg === '') {
const tabBoxBtn = $(".tab-box__btn");
const firstBtn = tabBoxBtn.eq(0).text().trim()
fn_select_album(firstBtn);
return false;
}
$.ajax({
type: "post",
url: "<c:url value='/itrnt/ntcn/mssage/selectItrntRegistMssagePopup'/>",
data: { msg },
success:function(data) {
const templateList = $(data).find(".template-message__container");
$(".template-message__container").html(templateList.html());
fn_count_btye_show();
$(".tab-box__btn").removeClass("current")
}
})
}
$("#srchBtn").on("click", function(){
srchAlbum();
})
/**********************
* 검색 엔터 키 입력 처리
***********************/
$("#srchStr").keydown(function(event) {
if(event.key === "Enter" || event.keyCode === 13) {
event.preventDefault();
srchAlbum();
}
})
/**********************
* 탭 ui
***********************/
const tab_Box = $(".tab-box");
const tab_BoxBtn = $(".tab-box__btn");
tab_Box.on("click", ".tab-box__btn", function (e) {
e.preventDefault();
const index = $(this).index();
$(this).closest(tab_Box).find(tab_BoxBtn).removeClass("current");
$(this).addClass("current");
let category = $(this).text().trim();
fn_select_album(category);
});
/**************************************************************
* 자주쓰는 메시지 삭제
****************************************************************/
$(".template-message__container").on("click" , "[name=delBtn]", function(){
const target = $(event.target);
const btn = target;
const btnCon = btn.closest('.template-message__footer');
const textBody = btnCon.siblings('.template-message__body');
const smsAlbumInnb = textBody.find("[name=smsAlbumInnb]").val();
const currentTabTxt = $(".tab-box__btn.current").text().trim();
$.ajax({
type: "post",
url: "<c:url value='/mngr/ntcn/mssage/deleteMssageAdit'/>",
data: { smsAlbumInnb },
success:function(data) {
const str = JSON.parse(data.resBody.result);
if(str.result == "success") {
alert('<spring:message code="success.common.delete"/>');
const remainMsgCnt = $(".template-message__container").find(".template-message").length;
let tabTxt = null;
//삭제 시 남아있던 메시지가 1개였을 경우
if(remainMsgCnt == 1) {
$(".tab-box__btn.current").remove();
tabTxt = "공통";
} else {
tabTxt = currentTabTxt;
}
fn_select_album(tabTxt);
}
}
})
})
});
/**************************************************************
* 자주쓰는 메시지 수정
****************************************************************/
$(".template-message__container").on("click" , "[name=updtBtn]", function(){
const target = $(event.target);
const btn = target;
const btnCon = btn.closest('.template-message__footer');
const textBody = btnCon.siblings('.template-message__body');
const smsAlbumInnb = textBody.find("[name=smsAlbumInnb]").val();
const msg = textBody.find('.textarea').val();
$.ajax({
type: "post",
url: "<c:url value='/mngr/ntcn/mssage/updateMssageAditUpdt'/>",
data: { smsAlbumInnb, msg },
success:function(data) {
const str = JSON.parse(data.resBody.result);
if(str.result == "success") {
alert('<spring:message code="success.common.update"/>');
}
}
})
})
</script>
<div id="registMssagePopup" class="modal" style="max-width: 800px;">
<div class="modal-header">
<h4>SMS 불러오기</h4>
</div>
<div class="modal-content">
<div class="form-control-container">
<div class="left">
<input class="input-text" type="text" title="검색어" id="srchStr" name="srchStr">
<button class="btn xsm primary" type="button" id="srchBtn">검색하기</button>
</div>
<div class="center"></div>
<div class="right">
<button class="btn xsm primary" type="button" onclick="fn_open_modal('#mssageAditPopupDiv','#mssageAditPopup','<c:url value="/mngr/ntcn/mssage/selectMssageAditPopupForm"/>'); return false;">
SMS 추가
</button>
</div>
</div>
<div class="tab-box mt-10">
<c:forEach var="category" items="${resultMap.boCtrlMap.albumCtgyList}" varStatus="status">
<button class="tab-box__btn" type="button">
<c:out value="${category.category}"/>
</button>
</c:forEach>
</div>
<div class="tab-box__content">
<div class="template-message__container">
<c:if test="${!empty resultMap.boCtrlMap.registMssageList}">
<c:forEach var="album" items="${resultMap.boCtrlMap.registMssageList}" varStatus="status">
<div class="template-message">
<!-- <div class="template-message__header">
SMS 충전 안내
<span class="btn gray ml-2 xxsm">알림톡 X</span>
</div> -->
<div class="template-message__body">
<div class="sms-manage">
<input type="hidden" name="smsAlbumInnb" value="${ album.smsAlbumInnb }">
<textarea class="textarea" title="sms 입력" id="msg${ status.index }" name="msg"><c:out value="${album.msg}"/></textarea>
<div class="sms-manage__byte">
<span class="number">0</span>
<span class="text">byte</span>
</div>
</div>
</div>
<div class="template-message__footer">
<div class="manage-btn-container">
<button class="btn sm dark" type="button" name="updtBtn">
수정
</button>
<button class="btn sm dark" type="button" name="delBtn">
삭제
</button>
</div>
</div>
</div>
</c:forEach>
</c:if>
<c:if test="${empty resultMap.boCtrlMap.registMssageList }">
<p>조회된 데이터가 없습니다.</p>
</c:if>
</div>
</div>
<div class="table-wrapper">
<div class="form-control-container mt-10">
<div class="left"></div>
<div class="center">
<button class="btn primary" id="applyBtn" type="button">적용</button>
</div>
<div class="right"></div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,163 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<%@ 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"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%--
Class Name : ItrntStlMssageListR.jsp.jsp
Description : 인트라넷 정산 목록 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-12-18 김혜인 최초 생성
--%>
<div class="form-control-container">
<div class="left">
<div class="search-number">
<span class="search-number__text">총 <strong><fmt:formatNumber value="${resultMap.paginationInfo.totalRecordCount}" pattern="#,###"/></strong>건</span>
</div>
<div>
<button type="button" class="btn outline sm excelDwld" id="excelDwld">
<i class="icon icon_excel"></i>정산다운로드
</button>
</div>
</div>
<div class="center">
</div>
<div class="right">
<div class="select-box">
</div>
<div class="select-box">
<select id="pageUnit" name="pageUnit" title="페이지당 출력될 목록건수" onchange="fn_select_mbr_list('1');">
<c:forEach items="${ resultMap.paginationInfo.pageUnitArr }" var="pageUnit" varStatus="pageUnitStatus">
<option value="<c:out value="${ pageUnit }"/>" <c:if test="${ resultMap.paginationInfo.recordCountPerPage eq pageUnit }">selected="selected"</c:if>><c:out value="${pageUnit}"/>개씩</option>
</c:forEach>
</select>
</div>
</div>
</div>
<hr class="horizontal-line">
<hr class="spacing">
<div class="table-wrapper table-wrapper--scroll">
<table class="table vertical">
<caption>해당 테이블에 대한 설명</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 5%;">
<col style="width: 10%;">
<col style="width: 25%;">
<col style="width: auto;">
<col style="width: auto;">
<col style="width: auto;">
<col style="width: auto;">
<col style="width: auto;">
<col style="width: auto;">
<col style="width: 12%;">
</colgroup>
<thead>
<tr>
<th>번호</th>
<th>년월</th>
<th>매장</th>
<th>SMS</th>
<th>LMS</th>
<th>MMS</th>
<th>알림톡</th>
<th>친구톡(TXT)</th>
<th>친구톡(TXT+IMG)</th>
<th>금액</th>
</tr>
</thead>
<tbody>
<c:choose>
<c:when test = "${not empty resultMap.strInfo.chargeList}">
<c:forEach var = "chargeList" items = "${resultMap.strInfo.chargeList}" varStatus="status">
<tr>
<td>
${status.count}
</td>
<td>
<!-- 년월 -->
<%-- <c:out value="${resultList.tentcpnNm}"/>--%>
</td>
<td>
<!-- 매장 -->
<c:choose>
<c:when test="${chargeList.regusr eq '02'}">
관리자
</c:when>
<c:when test="${chargeList.regusr eq '03'}">
시스템
</c:when>
<c:when test="${chargeList.regusr eq 'event'}">
광고
</c:when>
<c:otherwise>
<c:out value="${chargeList.regusr}"/>
</c:otherwise>
</c:choose>
</td>
<td class="mbtlnb">
<!-- SMS -->
<c:out value="${chargeList.sms}"/> 건
</td>
<td>
<!-- LMS -->
<c:out value="${chargeList.lms}"/> 건
</td>
<td>
<!-- MMS -->
<c:out value="${chargeList.mms}"/> 건
</td>
<td>
<!-- 알림톡 -->
<c:out value="${chargeList.at}"/> 건
</td>
<td>
<!-- 친구톡 -->
<c:out value="${chargeList.ft}"/> 건
<%-- <span class="comma"><fmt:formatNumber value="${resultList.totOrdrAmt}" pattern="#,###"/></span>--%>
</td>
<td>
<!-- 친구톡 -->
<c:out value="${chargeList.fti}"/> 건
<%-- <span class="comma"><fmt:formatNumber value="${resultList.mileage}" pattern="#,###"/></span>--%>
</td>
<td>
<!-- 금액 -->
<c:out value="${chargeList.totCost}"/> 원
</td>
</tr>
</c:forEach>
<tr>
<td></td>
<td></td>
<td>합계 :</td>
<td> <c:out value="${resultMap.strInfo.totSmsCnt}"/> 건</td>
<td> <c:out value="${resultMap.strInfo.totLmsCnt}"/> 건</td>
<td> <c:out value="${resultMap.strInfo.totMmsCnt}"/> 건</td>
<td> <c:out value="${resultMap.strInfo.totAtCnt}"/> 건</td>
<td> <c:out value="${resultMap.strInfo.totFtCnt}"/> 건</td>
<td> <c:out value="${resultMap.strInfo.totFtiCnt}"/> 건</td>
<td> <c:out value="${resultMap.strInfo.totSumCost}"/> 원</td>
</tr>
</c:when>
<c:otherwise>
<tr>
<td colspan="10"><spring:message code="common.nodata"/></td>
</tr>
</c:otherwise>
</c:choose>
</tbody>
</table>
</div>
<div class="pagination__container">
<ui:pagination paginationInfo="${resultMap.paginationInfo}" type="image" jsFunction="fn_select_mbr_list"/>
</div>

View File

@@ -0,0 +1,311 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<%@ 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"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%--
Class Name : ItrntStlMssageListRForm.jsp
Description : 인트라넷 정산 목록 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2025-01-09 이운산 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@ include file="/WEB-INF/views/comm/itrnt/Include.jsp"%>
<script>
$(document).ready(function () {
/* ********************************************************
* 정산 내역 조회
******************************************************** */
$("#searchBtn").on("click", function (){
fn_select_stl_list(1);
})
const fn_select_stl_list = function(pageIndex, pageUnit) {
let dataStr = null;
if(!pageIndex || pageIndex === '') {
$('#pageIndex').val(1);
} else {
$('#pageIndex').val(pageIndex);
}
pageUnit = $("#pageUnit").val();
if(!pageUnit) {
dataStr = $('#listForm').serialize();
} else {
if($('#pageUnit').length){
$('#pageUnit').val(pageUnit);
dataStr = $('#listForm').serialize() + '&pageIndex=' + pageIndex + '&pageUnit='+pageUnit;
} else {
dataStr = $('#listForm').serialize() + '&pageIndex=' + pageIndex;
}
}
$.ajax({
type: "post",
url : "<c:url value="/itrnt/ntcn/stl/selectItrntStlMssageList"/>",
data : dataStr,
success:function(resultHtml) {
$('#pageDiv').html(resultHtml);
$('#pageUnit').niceSelect();
}
});
}
let pageIndex = '<c:out value="${ resultMap.pageIndex }"/>';
let pageUnit = '<c:out value="${ resultMap.pageUnit }"/>';
fn_select_stl_list(pageIndex, pageUnit);
<%-- fn_set_dateRange_function('.dateRange-btnContainer', 'srchStrtSndngDt','srchEndSndngDt');--%>
<%-- //검색 조건 종류 항목 체크 여부에 따른 체크 해제--%>
<%-- $(".kindChk").on("click",function(){--%>
<%-- fn_ctr_pCheckbox("#kindChkAll",".kindChk");--%>
<%-- });--%>
<%-- //검색 조건 상태 항목 체크 여부에 따른 체크 해제--%>
<%-- $(".sttusChk").on("click",function(){--%>
<%-- fn_ctr_pCheckbox("#sttusChkAll",".sttusChk");--%>
<%-- });--%>
<%-- /**********************--%>
<%-- * 엔터 키 입력 처리--%>
<%-- ***********************/--%>
<%-- $("input").keydown(function(event) {--%>
<%-- if(event.key === "Enter" || event.keyCode === 13) {--%>
<%-- event.preventDefault();--%>
<%-- fn_select_stl_list(1);--%>
<%-- }--%>
<%-- })--%>
<%--})--%>
<%--/*검색 초기화*/--%>
const fn_reset = () => {
//초기화전 체크 됐는지 확인 후 리셋
let srchOtherMbrAt = $("#srchOtherMbr").is(":checked");
let srchStdrCndAt = $("#srchStdrCnd").is(":checked");
let srchCmprCndAt = $("#srchCmprCnd").is(":checked");
fn_reset_form('search-section');
if (srchOtherMbrAt) {
$("#srchOtherMbr").click();
}
if (srchStdrCndAt) {
$("#srchStdrCnd").click();
}
if (srchCmprCndAt) {
$("#srchCmprCnd").click();
}
}
})
</script>
</head>
<body>
<%@ include file="/WEB-INF/views/comm/itrnt/Header.jsp"%>
<main class="main">
<%@ include file="/WEB-INF/views/comm/itrnt/Left.jsp"%>
<div class="content">
<div class="content__inner">
<button class="side-nav__fold"><span class="visually-hidden">좌측메뉴 펼치기/닫기</span></button>
<div class="page-title">
<h2 class="page-title__title">SMS 정산내역</h2>
</div>
<section class="content-section">
<form id="listForm">
<input type="hidden" id="pageIndex" name="pageIndex" value="<c:out value = '${resultMap.vo.pageIndex}'/>"/>
<div class="table-wrapper">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 12%;">
<col style="width: 23%;">
<col style="width: 12%;">
<col style="width: 25%;">
<col style="width: 12%;">
<col style="width: auto;">
<col style="width: 10%;">
<col style="width: auto;">
</colgroup>
<tbody>
<c:if test = "${resultMap.tentGroup eq '01'}">
<tr>
<th>매장</th>
<td colspan="5">
<div class="td-inner">
<div class="select-box">
<select title="검색어 구분" name="regusrDv" id="regusrDv">
<option value="">사용자구분</option>
<c:forEach var="regusrDv" items="${resultMap.regusrDv}" varStatus="status">
<option value="${regusrDv.cd}" class="tgtDsb">${regusrDv.cdNm}</option>
</c:forEach>
</select>
</div>
<div class="select-box">
<select title="검색어 구분" name="strDv" id="strDv">
<option value="">전체</option>
<c:forEach var="strDv" items="${resultMap.strDv}" varStatus="status">
<option value="${strDv.cd}" class="tgtDsb">${strDv.cdNm}</option>
</c:forEach>
</select>
</div>
<div class="select-box">
<select title="검색어 구분" name="srchDv">
<option value="">전체</option>
<c:forEach var="store" items="${resultMap.storeList}" varStatus="status">
<option value="${store.strInnb}" class="tgtDsb">
${store.tentcpnNm}(${store.tentcpnId})
</option>
</c:forEach>
</select>
</div>
</div>
</td>
</tr>
<tr>
<th>법인</th>
<td>
<div class="td-inner">
<div class="select-box">
<select title="조회기간조건" name="srchCrp" id="srchCrp">
<option value="gcbio">지씨바이오</option>
<option value="tradithbio">트래디스바이오</option>
<option value="divinebio">디바인바이오</option>
<option value="slbiotech">에스엘바이오텍</option>
<option value="cosnature">코스네이처</option>
<option value="naturefull">네이처풀</option>
<option value="inssoft">아이엔에스소프트</option>
</select>
</div>
</div>
</td>
</tr>
</c:if>
<tr>
<th>검색 기간</th>
<td colspan="5">
<div class="td-inner">
<div class="select-box">
<select title="조회기간조건" name="srchYear" id="srchYear">
<c:forEach var="year" begin="2010" end="${resultMap.currentYear}">
<option value="${year}">${year}</option>
</c:forEach>
</select>
</div>
<c:if test = "${resultMap.tentGroup eq '01'}">
<div class="select-box">
<select title="조회기간달" name="srchMnt" id="srchMnt">
<c:forEach var="mnt" begin="1" end="12">
<option value="${mnt}">${mnt}</option>
</c:forEach>
</select>
</div>
</c:if>
</div>
</td>
</tr>
<tr>
<th>검색 조건</th>
<td colspan="5">
<div class="td-inner">
<div class="select-box">
<select title="검색 조건" name="srchDv">
<option value="">상태</option>
<option value="mbrNm" class="tgtDsb">청구</option>
<option value="mbrId" class="tgtDsb">납부</option>
</select>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="form-control-container">
<div class="left">
</div>
<div class="center">
<button class="btn outline" type="button"
onclick="fn_reset();">
<spring:message code="button.init"/></button>
<button class="btn primary" type="button" id="searchBtn">
<spring:message code="button.search"/></button>
</div>
<div class="right">
</div>
</div>
</form>
</section>
<section class="content-section">
<div id="pageDiv">
<div class="form-control-container">
<div class="left">
<div class="search-number">
<span class="search-number__text">총 <strong>0</strong>건</span>
</div>
</div>
<div class="center">
</div>
<div class="right">
<div class="select-box">
<select id="pageUnit" name="pageUnit" title="페이지당 출력될 목록건수" onchange="fn_select_mbr_list('1');">
<c:forEach items="${ resultMap.paginationInfo.pageUnitArr }" var="pageUnit" varStatus="pageUnitStatus">
<option value="<c:out value="${ pageUnit }"/>" <c:if test="${ resultMap.paginationInfo.recordCountPerPage eq pageUnit }">selected="selected"</c:if>><c:out value="${ pageUnit }"/>개씩</option>
</c:forEach>
</select>
</div>
</div>
</div>
<hr class="horizontal-line">
<hr class="spacing">
<div class="table-wrapper table-wrapper--scroll">
<table class="table vertical">
<caption>해당 테이블에 대한 설명</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 1%;">
<col style="width: 10%;">
<col style="width: 30%;">
<col style="width: 10%;">
<col style="width: 5%;">
<col style="width: 5%;">
<col style="width: 10%;">
<col style="width: 20%;">
</colgroup>
<thead>
<tr>
<th>번호</th>
<th>년월</th>
<th>매장</th>
<th>횟수</th>
<th>SMS</th>
<th>LMS</th>
<th>금액</th>
<th>상태</th>
</tr>
</thead>
<tbody>
<tr>
<td colspan="10"><spring:message code="common.nodata"/></td>
</tr>
</tbody>
</table>
</div>
</div>
</section>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</div>
</main>
<div id="modalDiv"></div>
</body>
</html>

View File

@@ -0,0 +1,275 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<%@ 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"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%--
Class Name : DailySelR.jsp
Description : 금일 판매 조회 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-03-19 이운산 최초 생성(퍼블리싱 적용)
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@ include file="/WEB-INF/views/comm/itrnt/Include.jsp"%>
<script>
</script>
</head>
<body>
<%@ include file="/WEB-INF/views/comm/itrnt/Header.jsp"%>
<main class="main">
<%@ include file="/WEB-INF/views/comm/itrnt/Left.jsp"%>
<div class="content">
<div class="content__inner">
<button class="side-nav__fold"><span class="visually-hidden">좌측메뉴 펼치기/닫기</span></button>
<div class="page-title">
<h2 class="page-title__title">상품 판매분석</h2>
<div class="page-title__btn-container">
</div>
</div>
<section class="content-section">
<form>
<div class="table-wrapper">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 12%;">
<col style="width: 38%;">
<col style="width: 12%;">
<col style="width: 38%;">
</colgroup>
<tbody>
<tr>
<th>판매환경</th>
<td>
<div class="td-inner">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox">
<input type="checkbox" value="">
<span class="check"></span>
<span class="control-label">가맹</span>
</label>
<label class="b-checkbox checkbox">
<input type="checkbox" value="">
<span class="check"></span>
<span class="control-label">직영</span>
</label>
<label class="b-checkbox checkbox">
<input type="checkbox" value="">
<span class="check"></span>
<span class="control-label">유통</span>
</label>
<label class="b-checkbox checkbox check-all">
<input type="checkbox" value="">
<span class="check"></span>
<span class="control-label">전체</span>
</label>
</div>
</div>
</td>
<th>날짜</th>
<td>
<div class="td-inner">
<div class="input-container">
<input type="text" id="datepicker_1" class="datepicker"
title="시작 날짜 선택" autocomplete="off">
<span class="tilde">~</span>
<input type="text" id="datepicker_2" class="datepicker"
title="종료 날짜 선택" autocomplete="off">
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="form-control-container">
<div class="left"></div>
<div class="center">
<button class="btn outline">초기화</button>
<button class="btn primary">검색</button>
</div>
<div class="right"></div>
</div>
</form>
</section>
<section class="content-section">
<div class="form-control-container">
<div class="left">
</div>
<div class="center">
</div>
<div class="right">
<button class="btn outline sm">
<i class="icon icon_excel"></i>
다운로드
</button>
</div>
</div>
<hr class="spacing">
<div id='my-spreadsheet'></div>
</section>
<div class="pagination__container">
<div class="pagination">
<button disabled="" class="pagination__item first"><span class="visually-hidden">첫
페이지로</span></button>
<button disabled="" class="pagination__item prev"><span class="visually-hidden">이전
페이지로</span></button>
<ol class="pagination__number-group">
<li><button class="pagination__item active"><span>1</span></button></li>
<li><button class="pagination__item"><span>2</span></button></li>
<li><button class="pagination__item"><span>3</span></button></li>
<li><button class="pagination__item"><span>4</span></button></li>
<li><button class="pagination__item"><span>5</span></button></li>
<li><button class="pagination__item"><span>6</span></button></li>
<li><button class="pagination__item"><span>7</span></button></li>
<li><button class="pagination__item"><span>8</span></button></li>
<li><button class="pagination__item"><span>9</span></button></li>
<li><button class="pagination__item"><span>10</span></button></li>
</ol>
<button class="pagination__item next"><span class="visually-hidden">다음 페이지로</span></button>
<button class="pagination__item last"><span class="visually-hidden">마지막 페이지로</span></button>
</div>
</div>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</div>
</main>
<script>
// 차트
const chart1 = document.getElementById('barGraph');
new Chart(chart1, {
type: 'bar',
data: {
labels: Array.from({ length: 31 }, (_, i) => i + 1),
datasets: [{
label: '거래액',
data: [39, 41, 44, 20, 2, 27, 90, 7, 91, 98, 50, 13, 79, 69, 78, 63, 95, 21, 46, 56, 76, 90, 49, 26, 70, 98, 65, 73, 66, 89, 53],
borderWidth: 2,
borderColor: '#36A2EB',
backgroundColor: '#9BD0F5',
order: 1
},
{
label: '매출이익',
data: [20, 22, 24, 10, 12, 17, 80, 5, 81, 88, 40, 8, 70, 60, 70, 50, 90, 15, 36, 46, 60, 80, 40, 20, 60, 90, 50, 60, 55, 80, 40],
borderWidth: 2,
borderColor: '#FF6384',
backgroundColor: '#FFB1C1',
order: 1
},
{
label: '순이익',
data: [10, 12, 14, 5, 8, 12, 50, 3, 52, 58, 25, 5, 40, 35, 45, 30, 60, 8, 18, 25, 35, 50, 25, 15, 45, 65, 35, 40, 35, 50, 25],
type: 'line',
borderColor: '#4bc0c0',
backgroundColor: '#4bc0c0',
order: 0
}]
},
options: {
scales: {
y: {
beginAtZero: true,
}
},
plugins: {
title: {
display: true,
text: '차트 제목',
font: {
size: 20,
weight: 'bold'
}
},
legend: {
display: true
},
},
maintainAspectRatio: false,
},
});
// 데이터 테이블
var data1 = [
['2024-03-01', 10000000, 5000000, 100000, 20000, 5000, 1000000, 800000, 500000, 2000000, 1000000, 500000, 5000000, 1000000, 500000, 200000, 400000, 500000, 200000, 400000],
['2024-03-02', 15000000, 10000000, 200000, 30000, 10000, 1500000, 1200000, 600000, 2500000, 1200000, 600000, 6000000, 1200000, 600000, 250000, 500000, 500000, 200000, 400000],
['2024-03-03', 20000000, 15000000, 300000, 40000, 15000, 2000000, 1600000, 700000, 3000000, 1400000, 700000, 7000000, 1400000, 700000, 300000, 600000, 500000, 200000, 400000],
['2024-03-04', 25000000, 20000000, 400000, 50000, 20000, 2500000, 2000000, 800000, 3500000, 1600000, 800000, 8000000, 1600000, 800000, 350000, 700000, 500000, 200000, 400000],
['2024-03-05', 30000000, 25000000, 500000, 60000, 25000, 3000000, 2400000, 900000, 4000000, 1800000, 900000, 9000000, 1800000, 900000, 400000, 800000, 500000, 200000, 400000],
['2024-03-06', 35000000, 30000000, 600000, 70000, 30000, 3500000, 2800000, 1000000, 4500000, 2000000, 1000000, 10000000, 2000000, 1000000, 450000, 900000, 500000, 200000, 400000],
['2024-03-07', 40000000, 35000000, 700000, 80000, 35000, 4000000, 3200000, 1100000, 5000000, 2200000, 1100000, 11000000, 2200000, 1100000, 500000, 1000000, 500000, 200000, 400000],
['2024-03-08', 45000000, 40000000, 800000, 90000, 40000, 4500000, 3600000, 1200000, 5500000, 2400000, 1200000, 12000000, 2400000, 1200000, 550000, 1100000, 500000, 200000, 400000],
];
var SUMCOL = function (instance, columnId) {
var total = 0;
for (var j = 0; j < instance.options.data.length; j++) {
if (Number(instance.records[j][columnId].innerHTML)) {
total += Number(instance.records[j][columnId].innerHTML);
}
}
return total;
}
jspreadsheet(document.getElementById('my-spreadsheet'), {
data: data1,
defaultColWidth: 120,
columns: [
{ title: '매출일', width: 160 },
{ title: '주문수' },
{ title: '판매수' },
{ title: '거래액' },
{ title: '환불금액' },
{ title: '할인' },
{ title: '매출액' },
{ title: '순매출' },
{ title: '매입원가' },
{ title: '매출이익' },
{ title: '객단가' },
{ title: '임대료' },
{ title: '관리비' },
{ title: '로열티' },
{ title: '시스템사용료' },
{ title: '직원인건비' },
{ title: '카드수수료' },
{ title: '홍보비' },
{ title: '매장운영비' },
{ title: '순이익' }
],
footers: generateFooters(data1),
editable: false,
contextMenu: false,
});
// 합계
function generateFooters(data) {
var footers = [['합계']];
for (var i = 1; i < data[0].length; i++) {
var formula = '=SUMCOL(TABLE(), ' + i + ')';
footers[0].push(formula);
}
return footers;
}
</script>
</body>
</html>

View File

@@ -0,0 +1,275 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<%@ 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"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%--
Class Name : MnthlySelR.jsp
Description : 월일 판매 조회 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-04-06 이운산 최초 생성(퍼블리싱 적용)
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@ include file="/WEB-INF/views/comm/itrnt/Include.jsp"%>
<script>
</script>
</head>
<body>
<%@ include file="/WEB-INF/views/comm/itrnt/Header.jsp"%>
<main class="main">
<%@ include file="/WEB-INF/views/comm/itrnt/Left.jsp"%>
<div class="content">
<div class="content__inner">
<button class="side-nav__fold"><span class="visually-hidden">좌측메뉴 펼치기/닫기</span></button>
<div class="page-title">
<h2 class="page-title__title">상품 판매분석</h2>
<div class="page-title__btn-container">
</div>
</div>
<section class="content-section">
<form>
<div class="table-wrapper">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 12%;">
<col style="width: 38%;">
<col style="width: 12%;">
<col style="width: 38%;">
</colgroup>
<tbody>
<tr>
<th>판매환경</th>
<td>
<div class="td-inner">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox">
<input type="checkbox" value="">
<span class="check"></span>
<span class="control-label">가맹</span>
</label>
<label class="b-checkbox checkbox">
<input type="checkbox" value="">
<span class="check"></span>
<span class="control-label">직영</span>
</label>
<label class="b-checkbox checkbox">
<input type="checkbox" value="">
<span class="check"></span>
<span class="control-label">유통</span>
</label>
<label class="b-checkbox checkbox check-all">
<input type="checkbox" value="">
<span class="check"></span>
<span class="control-label">전체</span>
</label>
</div>
</div>
</td>
<th>날짜</th>
<td>
<div class="td-inner">
<div class="input-container">
<input type="text" id="datepicker_1" class="datepicker"
title="시작 날짜 선택" autocomplete="off">
<span class="tilde">~</span>
<input type="text" id="datepicker_2" class="datepicker"
title="종료 날짜 선택" autocomplete="off">
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="form-control-container">
<div class="left"></div>
<div class="center">
<button class="btn outline">초기화</button>
<button class="btn primary">검색</button>
</div>
<div class="right"></div>
</div>
</form>
</section>
<section class="content-section">
<div class="form-control-container">
<div class="left">
</div>
<div class="center">
</div>
<div class="right">
<button class="btn outline sm">
<i class="icon icon_excel"></i>
다운로드
</button>
</div>
</div>
<hr class="spacing">
<div id='my-spreadsheet'></div>
</section>
<div class="pagination__container">
<div class="pagination">
<button disabled="" class="pagination__item first"><span class="visually-hidden">첫
페이지로</span></button>
<button disabled="" class="pagination__item prev"><span class="visually-hidden">이전
페이지로</span></button>
<ol class="pagination__number-group">
<li><button class="pagination__item active"><span>1</span></button></li>
<li><button class="pagination__item"><span>2</span></button></li>
<li><button class="pagination__item"><span>3</span></button></li>
<li><button class="pagination__item"><span>4</span></button></li>
<li><button class="pagination__item"><span>5</span></button></li>
<li><button class="pagination__item"><span>6</span></button></li>
<li><button class="pagination__item"><span>7</span></button></li>
<li><button class="pagination__item"><span>8</span></button></li>
<li><button class="pagination__item"><span>9</span></button></li>
<li><button class="pagination__item"><span>10</span></button></li>
</ol>
<button class="pagination__item next"><span class="visually-hidden">다음 페이지로</span></button>
<button class="pagination__item last"><span class="visually-hidden">마지막 페이지로</span></button>
</div>
</div>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</div>
</main>
<script>
// 차트
const chart1 = document.getElementById('barGraph');
new Chart(chart1, {
type: 'bar',
data: {
labels: Array.from({ length: 31 }, (_, i) => i + 1),
datasets: [{
label: '거래액',
data: [39, 41, 44, 20, 2, 27, 90, 7, 91, 98, 50, 13, 79, 69, 78, 63, 95, 21, 46, 56, 76, 90, 49, 26, 70, 98, 65, 73, 66, 89, 53],
borderWidth: 2,
borderColor: '#36A2EB',
backgroundColor: '#9BD0F5',
order: 1
},
{
label: '매출이익',
data: [20, 22, 24, 10, 12, 17, 80, 5, 81, 88, 40, 8, 70, 60, 70, 50, 90, 15, 36, 46, 60, 80, 40, 20, 60, 90, 50, 60, 55, 80, 40],
borderWidth: 2,
borderColor: '#FF6384',
backgroundColor: '#FFB1C1',
order: 1
},
{
label: '순이익',
data: [10, 12, 14, 5, 8, 12, 50, 3, 52, 58, 25, 5, 40, 35, 45, 30, 60, 8, 18, 25, 35, 50, 25, 15, 45, 65, 35, 40, 35, 50, 25],
type: 'line',
borderColor: '#4bc0c0',
backgroundColor: '#4bc0c0',
order: 0
}]
},
options: {
scales: {
y: {
beginAtZero: true,
}
},
plugins: {
title: {
display: true,
text: '차트 제목',
font: {
size: 20,
weight: 'bold'
}
},
legend: {
display: true
},
},
maintainAspectRatio: false,
},
});
// 데이터 테이블
var data1 = [
['2024-03-01', 10000000, 5000000, 100000, 20000, 5000, 1000000, 800000, 500000, 2000000, 1000000, 500000, 5000000, 1000000, 500000, 200000, 400000, 500000, 200000, 400000],
['2024-03-02', 15000000, 10000000, 200000, 30000, 10000, 1500000, 1200000, 600000, 2500000, 1200000, 600000, 6000000, 1200000, 600000, 250000, 500000, 500000, 200000, 400000],
['2024-03-03', 20000000, 15000000, 300000, 40000, 15000, 2000000, 1600000, 700000, 3000000, 1400000, 700000, 7000000, 1400000, 700000, 300000, 600000, 500000, 200000, 400000],
['2024-03-04', 25000000, 20000000, 400000, 50000, 20000, 2500000, 2000000, 800000, 3500000, 1600000, 800000, 8000000, 1600000, 800000, 350000, 700000, 500000, 200000, 400000],
['2024-03-05', 30000000, 25000000, 500000, 60000, 25000, 3000000, 2400000, 900000, 4000000, 1800000, 900000, 9000000, 1800000, 900000, 400000, 800000, 500000, 200000, 400000],
['2024-03-06', 35000000, 30000000, 600000, 70000, 30000, 3500000, 2800000, 1000000, 4500000, 2000000, 1000000, 10000000, 2000000, 1000000, 450000, 900000, 500000, 200000, 400000],
['2024-03-07', 40000000, 35000000, 700000, 80000, 35000, 4000000, 3200000, 1100000, 5000000, 2200000, 1100000, 11000000, 2200000, 1100000, 500000, 1000000, 500000, 200000, 400000],
['2024-03-08', 45000000, 40000000, 800000, 90000, 40000, 4500000, 3600000, 1200000, 5500000, 2400000, 1200000, 12000000, 2400000, 1200000, 550000, 1100000, 500000, 200000, 400000],
];
var SUMCOL = function (instance, columnId) {
var total = 0;
for (var j = 0; j < instance.options.data.length; j++) {
if (Number(instance.records[j][columnId].innerHTML)) {
total += Number(instance.records[j][columnId].innerHTML);
}
}
return total;
}
jspreadsheet(document.getElementById('my-spreadsheet'), {
data: data1,
defaultColWidth: 120,
columns: [
{ title: '매출일', width: 160 },
{ title: '주문수' },
{ title: '판매수' },
{ title: '거래액' },
{ title: '환불금액' },
{ title: '할인' },
{ title: '매출액' },
{ title: '순매출' },
{ title: '매입원가' },
{ title: '매출이익' },
{ title: '객단가' },
{ title: '임대료' },
{ title: '관리비' },
{ title: '로열티' },
{ title: '시스템사용료' },
{ title: '직원인건비' },
{ title: '카드수수료' },
{ title: '홍보비' },
{ title: '매장운영비' },
{ title: '순이익' }
],
footers: generateFooters(data1),
editable: false,
contextMenu: false,
});
// 합계
function generateFooters(data) {
var footers = [['합계']];
for (var i = 1; i < data[0].length; i++) {
var formula = '=SUMCOL(TABLE(), ' + i + ')';
footers[0].push(formula);
}
return footers;
}
</script>
</body>
</html>

View File

@@ -0,0 +1,285 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<%@ 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"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%--
Class Name : SelGoodsRankR.jsp
Description : 판매 상품 순위 조회 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-03-19 이운산 최초 생성(퍼블리싱 적용)
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@ include file="/WEB-INF/views/comm/itrnt/Include.jsp"%>
<script>
</script>
</head>
<body>
<%@ include file="/WEB-INF/views/comm/itrnt/Header.jsp"%>
<main class="main">
<%@ include file="/WEB-INF/views/comm/itrnt/Left.jsp"%>
<div class="content">
<div class="content__inner">
<button class="side-nav__fold"><span class="visually-hidden">좌측메뉴 펼치기/닫기</span></button>
<div class="page-title">
<h2 class="page-title__title">판매 상품순위</h2>
<div class="page-title__btn-container">
</div>
</div>
<section class="content-section">
<form>
<div class="table-wrapper">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 12%;">
<col style="width: 38%;">
<col style="width: 12%;">
<col style="width: 38%;">
</colgroup>
<tbody>
<tr>
<th>판매환경</th>
<td>
<div class="td-inner">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox">
<input type="checkbox" value="">
<span class="check"></span>
<span class="control-label">가맹</span>
</label>
<label class="b-checkbox checkbox">
<input type="checkbox" value="">
<span class="check"></span>
<span class="control-label">직영</span>
</label>
<label class="b-checkbox checkbox">
<input type="checkbox" value="">
<span class="check"></span>
<span class="control-label">유통</span>
</label>
<label class="b-checkbox checkbox check-all">
<input type="checkbox" value="">
<span class="check"></span>
<span class="control-label">전체</span>
</label>
</div>
</div>
</td>
<th>날짜</th>
<td>
<div class="td-inner">
<div class="input-container">
<input type="text" id="datepicker_1" class="datepicker"
title="시작 날짜 선택" autocomplete="off">
<span class="tilde">~</span>
<input type="text" id="datepicker_2" class="datepicker"
title="종료 날짜 선택" autocomplete="off">
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="form-control-container">
<div class="left"></div>
<div class="center">
<button class="btn outline">초기화</button>
<button class="btn primary">검색</button>
</div>
<div class="right"></div>
</div>
</form>
</section>
<section class="content-section">
<div class="pieGraph__container" id="pieGraph-container">
<div class="pieGraph__wrapper">
<canvas id="pieGraph"></canvas>
</div>
<div class="pieGraph__wrapper">
<canvas id="pieGraph2"></canvas>
</div>
</div>
</section>
<section class="content-section">
<div class="table-wrapper">
<table class="table vertical">
<caption>해당 테이블에 대한 설명</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 7%;">
<col style="width: auto;">
<col style="width: 12%;">
<col style="width: 12%;">
<col style="width: 12%;">
<col style="width: 12%;">
<col style="width: 12%;">
<col style="width: 12%;">
</colgroup>
<thead>
<tr>
<th>순위</th>
<th>상품명</th>
<th>상품가</th>
<th>판매수량</th>
<th>환불수량</th>
<th>판매가 합계</th>
<th>할인 합계</th>
<th>판매가합계-할인합계</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td class="text-left">
<div class="product-search-box__product">
<img src="../resources/images/상품이미지01.png" width="64" alt="상품이미지">
초임계 식물성 알티지 오메가
</div>
</td>
<td>
<span class="comma">29000</span>
</td>
<td>
<span class="comma">1121</span>
</td>
<td>
<span class="comma">77</span>
</td>
<td>
<span class="comma">106145600</span>
</td>
<td>
<span class="comma">11882743</span>
</td>
<td>
<span class="comma">94262857</span>
</td>
</tr>
<tr>
<td>1</td>
<td class="text-left">
<div class="product-search-box__product">
<img src="../resources/images/image_placeholder.png" width="64" alt="상품이미지">
초임계 식물성 알티지 오메가
</div>
</td>
<td>
<span class="comma">29000</span>
</td>
<td>
<span class="comma">1121</span>
</td>
<td>
<span class="comma">77</span>
</td>
<td>
<span class="comma">106145600</span>
</td>
<td>
<span class="comma">11882743</span>
</td>
<td>
<span class="comma">94262857</span>
</td>
</tr>
</tbody>
</table>
</div>
</section>
<div class="pagination__container">
<div class="pagination">
<button disabled="" class="pagination__item first"><span class="visually-hidden">첫
페이지로</span></button>
<button disabled="" class="pagination__item prev"><span class="visually-hidden">이전
페이지로</span></button>
<ol class="pagination__number-group">
<li><button class="pagination__item active"><span>1</span></button></li>
<li><button class="pagination__item"><span>2</span></button></li>
<li><button class="pagination__item"><span>3</span></button></li>
<li><button class="pagination__item"><span>4</span></button></li>
<li><button class="pagination__item"><span>5</span></button></li>
<li><button class="pagination__item"><span>6</span></button></li>
<li><button class="pagination__item"><span>7</span></button></li>
<li><button class="pagination__item"><span>8</span></button></li>
<li><button class="pagination__item"><span>9</span></button></li>
<li><button class="pagination__item"><span>10</span></button></li>
</ol>
<button class="pagination__item next"><span class="visually-hidden">다음 페이지로</span></button>
<button class="pagination__item last"><span class="visually-hidden">마지막 페이지로</span></button>
</div>
</div>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</div>
</main>
<script>
// 데이터 테이블
var data1 = [
['2024-03-01', 10000000, 5000000, 100000, '매출', 5000, 1000000, 800000, 500000, 2000000, 1000000],
['2024-03-02', 10000000, 5000000, 100000, '매출', 5000, 1000000, 800000, 500000, 2000000, 1000000],
];
var SUMCOL = function (instance, columnId) {
var total = 0;
for (var j = 0; j < instance.options.data.length; j++) {
if (Number(instance.records[j][columnId].innerHTML)) {
total += Number(instance.records[j][columnId].innerHTML);
}
}
return total;
}
jspreadsheet(document.getElementById('my-spreadsheet'), {
data: data1,
defaultColWidth: 120,
columns: [
{ title: '매출일' },
{ title: '구분 - 매장코드 - 포스코드 - 영수번호', width: 240 },
{ title: '주문번호', width: 240 },
{ title: '결제시간', width: 240 },
{ title: '매출 및 반품' },
{ title: '정가' },
{ title: '에누리' },
{ title: '결제금액' },
{ title: '포인트', width: 200 },
{ title: '이름', width: 160 },
{ title: '아이디', width: 200 },
],
footers: generateFooters(data1),
editable: false,
contextMenu: false,
});
// 합계
function generateFooters(data) {
var footers = [['합계']];
for (var i = 1; i < data[0].length; i++) {
var formula = '=SUMCOL(TABLE(), ' + i + ')';
footers[0].push(formula);
}
return footers;
}
</script>
</body>
</html>

View File

@@ -0,0 +1,275 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<%@ 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"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%--
Class Name : WklySelR.jsp
Description : 주별 판매 조회 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-04-06 이운산 최초 생성(퍼블리싱 적용)
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@ include file="/WEB-INF/views/comm/itrnt/Include.jsp"%>
<script>
</script>
</head>
<body>
<%@ include file="/WEB-INF/views/comm/itrnt/Header.jsp"%>
<main class="main">
<%@ include file="/WEB-INF/views/comm/itrnt/Left.jsp"%>
<div class="content">
<div class="content__inner">
<button class="side-nav__fold"><span class="visually-hidden">좌측메뉴 펼치기/닫기</span></button>
<div class="page-title">
<h2 class="page-title__title">상품 판매분석</h2>
<div class="page-title__btn-container">
</div>
</div>
<section class="content-section">
<form>
<div class="table-wrapper">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 12%;">
<col style="width: 38%;">
<col style="width: 12%;">
<col style="width: 38%;">
</colgroup>
<tbody>
<tr>
<th>판매환경</th>
<td>
<div class="td-inner">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox">
<input type="checkbox" value="">
<span class="check"></span>
<span class="control-label">가맹</span>
</label>
<label class="b-checkbox checkbox">
<input type="checkbox" value="">
<span class="check"></span>
<span class="control-label">직영</span>
</label>
<label class="b-checkbox checkbox">
<input type="checkbox" value="">
<span class="check"></span>
<span class="control-label">유통</span>
</label>
<label class="b-checkbox checkbox check-all">
<input type="checkbox" value="">
<span class="check"></span>
<span class="control-label">전체</span>
</label>
</div>
</div>
</td>
<th>날짜</th>
<td>
<div class="td-inner">
<div class="input-container">
<input type="text" id="datepicker_1" class="datepicker"
title="시작 날짜 선택" autocomplete="off">
<span class="tilde">~</span>
<input type="text" id="datepicker_2" class="datepicker"
title="종료 날짜 선택" autocomplete="off">
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="form-control-container">
<div class="left"></div>
<div class="center">
<button class="btn outline">초기화</button>
<button class="btn primary">검색</button>
</div>
<div class="right"></div>
</div>
</form>
</section>
<section class="content-section">
<div class="form-control-container">
<div class="left">
</div>
<div class="center">
</div>
<div class="right">
<button class="btn outline sm">
<i class="icon icon_excel"></i>
다운로드
</button>
</div>
</div>
<hr class="spacing">
<div id='my-spreadsheet'></div>
</section>
<div class="pagination__container">
<div class="pagination">
<button disabled="" class="pagination__item first"><span class="visually-hidden">첫
페이지로</span></button>
<button disabled="" class="pagination__item prev"><span class="visually-hidden">이전
페이지로</span></button>
<ol class="pagination__number-group">
<li><button class="pagination__item active"><span>1</span></button></li>
<li><button class="pagination__item"><span>2</span></button></li>
<li><button class="pagination__item"><span>3</span></button></li>
<li><button class="pagination__item"><span>4</span></button></li>
<li><button class="pagination__item"><span>5</span></button></li>
<li><button class="pagination__item"><span>6</span></button></li>
<li><button class="pagination__item"><span>7</span></button></li>
<li><button class="pagination__item"><span>8</span></button></li>
<li><button class="pagination__item"><span>9</span></button></li>
<li><button class="pagination__item"><span>10</span></button></li>
</ol>
<button class="pagination__item next"><span class="visually-hidden">다음 페이지로</span></button>
<button class="pagination__item last"><span class="visually-hidden">마지막 페이지로</span></button>
</div>
</div>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</div>
</main>
<script>
// 차트
const chart1 = document.getElementById('barGraph');
new Chart(chart1, {
type: 'bar',
data: {
labels: Array.from({ length: 31 }, (_, i) => i + 1),
datasets: [{
label: '거래액',
data: [39, 41, 44, 20, 2, 27, 90, 7, 91, 98, 50, 13, 79, 69, 78, 63, 95, 21, 46, 56, 76, 90, 49, 26, 70, 98, 65, 73, 66, 89, 53],
borderWidth: 2,
borderColor: '#36A2EB',
backgroundColor: '#9BD0F5',
order: 1
},
{
label: '매출이익',
data: [20, 22, 24, 10, 12, 17, 80, 5, 81, 88, 40, 8, 70, 60, 70, 50, 90, 15, 36, 46, 60, 80, 40, 20, 60, 90, 50, 60, 55, 80, 40],
borderWidth: 2,
borderColor: '#FF6384',
backgroundColor: '#FFB1C1',
order: 1
},
{
label: '순이익',
data: [10, 12, 14, 5, 8, 12, 50, 3, 52, 58, 25, 5, 40, 35, 45, 30, 60, 8, 18, 25, 35, 50, 25, 15, 45, 65, 35, 40, 35, 50, 25],
type: 'line',
borderColor: '#4bc0c0',
backgroundColor: '#4bc0c0',
order: 0
}]
},
options: {
scales: {
y: {
beginAtZero: true,
}
},
plugins: {
title: {
display: true,
text: '차트 제목',
font: {
size: 20,
weight: 'bold'
}
},
legend: {
display: true
},
},
maintainAspectRatio: false,
},
});
// 데이터 테이블
var data1 = [
['2024-03-01', 10000000, 5000000, 100000, 20000, 5000, 1000000, 800000, 500000, 2000000, 1000000, 500000, 5000000, 1000000, 500000, 200000, 400000, 500000, 200000, 400000],
['2024-03-02', 15000000, 10000000, 200000, 30000, 10000, 1500000, 1200000, 600000, 2500000, 1200000, 600000, 6000000, 1200000, 600000, 250000, 500000, 500000, 200000, 400000],
['2024-03-03', 20000000, 15000000, 300000, 40000, 15000, 2000000, 1600000, 700000, 3000000, 1400000, 700000, 7000000, 1400000, 700000, 300000, 600000, 500000, 200000, 400000],
['2024-03-04', 25000000, 20000000, 400000, 50000, 20000, 2500000, 2000000, 800000, 3500000, 1600000, 800000, 8000000, 1600000, 800000, 350000, 700000, 500000, 200000, 400000],
['2024-03-05', 30000000, 25000000, 500000, 60000, 25000, 3000000, 2400000, 900000, 4000000, 1800000, 900000, 9000000, 1800000, 900000, 400000, 800000, 500000, 200000, 400000],
['2024-03-06', 35000000, 30000000, 600000, 70000, 30000, 3500000, 2800000, 1000000, 4500000, 2000000, 1000000, 10000000, 2000000, 1000000, 450000, 900000, 500000, 200000, 400000],
['2024-03-07', 40000000, 35000000, 700000, 80000, 35000, 4000000, 3200000, 1100000, 5000000, 2200000, 1100000, 11000000, 2200000, 1100000, 500000, 1000000, 500000, 200000, 400000],
['2024-03-08', 45000000, 40000000, 800000, 90000, 40000, 4500000, 3600000, 1200000, 5500000, 2400000, 1200000, 12000000, 2400000, 1200000, 550000, 1100000, 500000, 200000, 400000],
];
var SUMCOL = function (instance, columnId) {
var total = 0;
for (var j = 0; j < instance.options.data.length; j++) {
if (Number(instance.records[j][columnId].innerHTML)) {
total += Number(instance.records[j][columnId].innerHTML);
}
}
return total;
}
jspreadsheet(document.getElementById('my-spreadsheet'), {
data: data1,
defaultColWidth: 120,
columns: [
{ title: '매출일', width: 160 },
{ title: '주문수' },
{ title: '판매수' },
{ title: '거래액' },
{ title: '환불금액' },
{ title: '할인' },
{ title: '매출액' },
{ title: '순매출' },
{ title: '매입원가' },
{ title: '매출이익' },
{ title: '객단가' },
{ title: '임대료' },
{ title: '관리비' },
{ title: '로열티' },
{ title: '시스템사용료' },
{ title: '직원인건비' },
{ title: '카드수수료' },
{ title: '홍보비' },
{ title: '매장운영비' },
{ title: '순이익' }
],
footers: generateFooters(data1),
editable: false,
contextMenu: false,
});
// 합계
function generateFooters(data) {
var footers = [['합계']];
for (var i = 1; i < data[0].length; i++) {
var formula = '=SUMCOL(TABLE(), ' + i + ')';
footers[0].push(formula);
}
return footers;
}
</script>
</body>
</html>

View File

@@ -0,0 +1,255 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<%@ 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"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%--
Class Name : DailySelngR.jsp
Description : 일별 매출 조회 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-03-19 이운산 최초 생성(퍼블리싱 적용)
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@ include file="/WEB-INF/views/comm/itrnt/Include.jsp"%>
<script>
/* ********************************************************
* 매출분석 - 일별 이동
******************************************************** */
const fn_move_selng_daily = function() {
let dataStr = "";
$.ajax({
type: 'get',
url : '/itrnt/selng/selectDailySelng',
data : dataStr,
success:function(data) {
}
})
}
/* ********************************************************
* 매출분석 - 주별 이동
******************************************************** */
const fn_move_selng_wkly = function() {
let dataStr = "";
$.ajax({
type: 'get',
url : '/itrnt/selng/selectWklySelng',
data : dataStr,
success:function(data) {
}
})
}
/* ********************************************************
* 매출분석 - 월별 이동
******************************************************** */
const fn_move_selng_mnthly = function() {
let dataStr = "";
$.ajax({
type: 'get',
url : '/itrnt/selng/selectMnthlySelng',
data : dataStr,
success:function(data) {
}
})
}
</script>
</head>
<body>
<%@ include file="/WEB-INF/views/comm/itrnt/Header.jsp"%>
<main class="main">
<%@ include file="/WEB-INF/views/comm/itrnt/Left.jsp"%>
<div class="content">
<div class="content__inner">
<button class="side-nav__fold"><span class="visually-hidden">좌측메뉴 펼치기/닫기</span></button>
<div class="page-title">
<h2 class="page-title__title">매출 분석 - 일별</h2>
<div class="page-title__btn-container">
</div>
</div>
<section class="content-section">
<form id="search-section">
<div class="table-wrapper">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 12%;">
<col>
</colgroup>
<tbody>
<tr>
<th>날짜</th>
<td>
<div class="td-inner">
<div class="dateRange-btnContainer dateRange-btnContainer--md">
<button class="dateRange-btn selected" onclick="fn_move_selng_daily();">일별</button>
<button class="dateRange-btn" onclick="fn_move_selng_wkly();">주별</button>
<button class="dateRange-btn" onclick="fn_move_selng_mnthly();">월별</button>
</div>
<div class="input-container gap-4">
<div class="select-box">
<select title="해당 셀렉트에 대한 설명">
<option value="">2023년</option>
</select>
</div>
<div class="select-box">
<select title="해당 셀렉트에 대한 설명">
<option value="">12월</option>
</select>
</div>
</div>
</div>
</td>
</tr>
<tr>
<th>판매환경</th>
<td>
<div class="td-inner">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox">
<input type="checkbox" value="">
<span class="check"></span>
<span class="control-label">TM주문</span>
</label>
<label class="b-checkbox checkbox">
<input type="checkbox" value="">
<span class="check"></span>
<span class="control-label">TM출고</span>
</label>
<label class="b-checkbox checkbox">
<input type="checkbox" value="">
<span class="check"></span>
<span class="control-label">TM결제</span>
</label>
<label class="b-checkbox checkbox">
<input type="checkbox" value="">
<span class="check"></span>
<span class="control-label">가맹(POS)</span>
</label>
<label class="b-checkbox checkbox">
<input type="checkbox" value="">
<span class="check"></span>
<span class="control-label">직영(POS)</span>
</label>
<label class="b-checkbox checkbox">
<input type="checkbox" value="">
<span class="check"></span>
<span class="control-label">유통(POS)</span>
</label>
<label class="b-checkbox checkbox check-all">
<input type="checkbox" value="">
<span class="check"></span>
<span class="control-label">전체</span>
</label>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="form-control-container">
<div class="left"></div>
<div class="center">
<button class="btn outline" type="button" onclick="fn_reset_form('search-section'); return false;">초기화</button>
<button class="btn primary" type="button">검색</button>
</div>
<div class="right"></div>
</div>
</form>
</section>
<section class="content-section">
<div id="barGraph-container">
<div class="barGraph__wrapper">
<canvas id="barGraph"></canvas>
</div>
</div>
</section>
<section class="content-section">
<div class="form-control-container">
<div class="left">
</div>
<div class="center">
</div>
<div class="right">
<button class="btn outline sm">
<i class="icon icon_excel"></i>
다운로드
</button>
</div>
</div>
<hr class="spacing">
<div id='my-spreadsheet'></div>
</section>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</div>
</main>
<script>
// 데이터 테이블
var data1 = [
['유기농산양유WPC유청단백질', 10000000, 5000000, 100000, '매출', 5000, 1000000],
['여성을 위한 유산균 이너 프로바이오틱스', 10000000, 5000000, 100000, '매출', 5000, 1000000],
['(골드)프로스랩 패밀리', 10000000, 5000000, 100000, '매출', 5000, 1000000],
];
var SUMCOL = function (instance, columnId) {
var total = 0;
for (var j = 0; j < instance.options.data.length; j++) {
if (Number(instance.records[j][columnId].innerHTML)) {
total += Number(instance.records[j][columnId].innerHTML);
}
}
return total;
}
jspreadsheet(document.getElementById('my-spreadsheet'), {
data: data1,
defaultColWidth: 120,
columns: [
{ title: '상품명', width: 240 },
{ title: '상품가' },
{ title: '판매수량' },
{ title: '환불수량' },
{ title: '판매가합계' },
{ title: '할인합계' },
{ title: '판매가합계-할인합계' },
],
footers: generateFooters(data1),
editable: false,
contextMenu: false,
});
// 합계
function generateFooters(data) {
var footers = [['합계']];
for (var i = 1; i < data[0].length; i++) {
var formula = '=SUMCOL(TABLE(), ' + i + ')';
footers[0].push(formula);
}
return footers;
}
</body>
</html>

View File

@@ -0,0 +1,211 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<%@ 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"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%--
Class Name : MnthlySelngR.jsp
Description : 월별 매출 조회 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-04-06 이운산 최초 생성(퍼블리싱 적용)
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@ include file="/WEB-INF/views/comm/itrnt/Include.jsp"%>
<script>
</script>
</head>
<body>
<%@ include file="/WEB-INF/views/comm/itrnt/Header.jsp"%>
<main class="main">
<%@ include file="/WEB-INF/views/comm/itrnt/Left.jsp"%>
<div class="content">
<div class="content__inner">
<button class="side-nav__fold"><span class="visually-hidden">좌측메뉴 펼치기/닫기</span></button>
<div class="page-title">
<h2 class="page-title__title">매출 분석 - 월별</h2>
<div class="page-title__btn-container">
</div>
</div>
<section class="content-section">
<form id="search-section">
<div class="table-wrapper">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 12%;">
<col>
</colgroup>
<tbody>
<tr>
<th>날짜</th>
<td>
<div class="td-inner">
<div class="dateRange-btnContainer dateRange-btnContainer--md">
<button class="dateRange-btn selected" onclick="fn_move_selng_daily();">일별</button>
<button class="dateRange-btn" onclick="fn_move_selng_wkly();">주별</button>
<button class="dateRange-btn" onclick="fn_move_selng_mnthly();">월별</button>
</div>
<div class="input-container gap-4">
<div class="select-box">
<select title="해당 셀렉트에 대한 설명">
<option value="">2023년</option>
</select>
</div>
<div class="select-box">
<select title="해당 셀렉트에 대한 설명">
<option value="">12월</option>
</select>
</div>
</div>
</div>
</td>
</tr>
<tr>
<th>판매환경</th>
<td>
<div class="td-inner">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox">
<input type="checkbox" value="">
<span class="check"></span>
<span class="control-label">TM주문</span>
</label>
<label class="b-checkbox checkbox">
<input type="checkbox" value="">
<span class="check"></span>
<span class="control-label">TM출고</span>
</label>
<label class="b-checkbox checkbox">
<input type="checkbox" value="">
<span class="check"></span>
<span class="control-label">TM결제</span>
</label>
<label class="b-checkbox checkbox">
<input type="checkbox" value="">
<span class="check"></span>
<span class="control-label">가맹(POS)</span>
</label>
<label class="b-checkbox checkbox">
<input type="checkbox" value="">
<span class="check"></span>
<span class="control-label">직영(POS)</span>
</label>
<label class="b-checkbox checkbox">
<input type="checkbox" value="">
<span class="check"></span>
<span class="control-label">유통(POS)</span>
</label>
<label class="b-checkbox checkbox check-all">
<input type="checkbox" value="">
<span class="check"></span>
<span class="control-label">전체</span>
</label>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="form-control-container">
<div class="left"></div>
<div class="center">
<button class="btn outline" type="button" onclick="fn_reset_form('search-section'); return false;">초기화</button>
<button class="btn primary" type="button">검색</button>
</div>
<div class="right"></div>
</div>
</form>
</section>
<section class="content-section">
<div id="barGraph-container">
<div class="barGraph__wrapper">
<canvas id="barGraph"></canvas>
</div>
</div>
</section>
<section class="content-section">
<div class="form-control-container">
<div class="left">
</div>
<div class="center">
</div>
<div class="right">
<button class="btn outline sm">
<i class="icon icon_excel"></i>
다운로드
</button>
</div>
</div>
<hr class="spacing">
<div id='my-spreadsheet'></div>
</section>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</div>
</main>
<script>
// 데이터 테이블
var data1 = [
['유기농산양유WPC유청단백질', 10000000, 5000000, 100000, '매출', 5000, 1000000],
['여성을 위한 유산균 이너 프로바이오틱스', 10000000, 5000000, 100000, '매출', 5000, 1000000],
['(골드)프로스랩 패밀리', 10000000, 5000000, 100000, '매출', 5000, 1000000],
];
var SUMCOL = function (instance, columnId) {
var total = 0;
for (var j = 0; j < instance.options.data.length; j++) {
if (Number(instance.records[j][columnId].innerHTML)) {
total += Number(instance.records[j][columnId].innerHTML);
}
}
return total;
}
jspreadsheet(document.getElementById('my-spreadsheet'), {
data: data1,
defaultColWidth: 120,
columns: [
{ title: '상품명', width: 240 },
{ title: '상품가' },
{ title: '판매수량' },
{ title: '환불수량' },
{ title: '판매가합계' },
{ title: '할인합계' },
{ title: '판매가합계-할인합계' },
],
footers: generateFooters(data1),
editable: false,
contextMenu: false,
});
// 합계
function generateFooters(data) {
var footers = [['합계']];
for (var i = 1; i < data[0].length; i++) {
var formula = '=SUMCOL(TABLE(), ' + i + ')';
footers[0].push(formula);
}
return footers;
}
</body>
</html>

View File

@@ -0,0 +1,236 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<%@ 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"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%--
Class Name : StrSelngR.jsp
Description : 매장 매출 조회 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-03-19 이운산 최초 생성(퍼블리싱 적용)
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@ include file="/WEB-INF/views/comm/itrnt/Include.jsp"%>
<script>
</script>
</head>
<body>
<%@ include file="/WEB-INF/views/comm/itrnt/Header.jsp"%>
<main class="main">
<%@ include file="/WEB-INF/views/comm/itrnt/Left.jsp"%>
<div class="content">
<div class="content__inner">
<button class="side-nav__fold"><span class="visually-hidden">좌측메뉴 펼치기/닫기</span></button>
<div class="page-title">
<h2 class="page-title__title">매장별 매출</h2>
<div class="page-title__btn-container">
</div>
</div>
<section class="content-section">
<form>
<div class="table-wrapper">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 12%;">
<col style="width: 38%;">
<col style="width: 12%;">
<col style="width: 38%;">
</colgroup>
<tbody>
<tr>
<th>검색어</th>
<td>
<div class="td-inner">
<div class="select-box">
<select class="md" title="해당 셀렉트에 대한 설명">
<option value="" disabled selected>매장 선택</option>
<option value="">뉴트리코어 화명점</option>
</select>
</div><input class="input-text md" type="text" title="해당 인풋에 대한 설명"
placeholder="">
</div>
</td>
<th>날짜</th>
<td>
<div class="td-inner">
<div class="input-container">
<input type="text" id="datepicker_1" class="datepicker"
title="시작 날짜 선택" autocomplete="off">
<span class="tilde">~</span>
<input type="text" id="datepicker_2" class="datepicker"
title="종료 날짜 선택" autocomplete="off">
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="form-control-container">
<div class="left"></div>
<div class="center">
<button class="btn outline">초기화</button>
<button class="btn primary">검색</button>
</div>
<div class="right"></div>
</div>
</form>
</section>
<section class="content-section">
<div class="form-control-container">
<div class="left">
</div>
<div class="center">
</div>
<div class="right">
<button class="btn outline sm">
<i class="icon icon_excel"></i>
다운로드
</button>
</div>
</div>
<hr class="spacing">
<div id='my-spreadsheet'></div>
</section>
<div class="pagination__container">
<div class="pagination">
<button disabled="" class="pagination__item first"><span class="visually-hidden">첫
페이지로</span></button>
<button disabled="" class="pagination__item prev"><span class="visually-hidden">이전
페이지로</span></button>
<ol class="pagination__number-group">
<li><button class="pagination__item active"><span>1</span></button></li>
<li><button class="pagination__item"><span>2</span></button></li>
<li><button class="pagination__item"><span>3</span></button></li>
<li><button class="pagination__item"><span>4</span></button></li>
<li><button class="pagination__item"><span>5</span></button></li>
<li><button class="pagination__item"><span>6</span></button></li>
<li><button class="pagination__item"><span>7</span></button></li>
<li><button class="pagination__item"><span>8</span></button></li>
<li><button class="pagination__item"><span>9</span></button></li>
<li><button class="pagination__item"><span>10</span></button></li>
</ol>
<button class="pagination__item next"><span class="visually-hidden">다음 페이지로</span></button>
<button class="pagination__item last"><span class="visually-hidden">마지막 페이지로</span></button>
</div>
</div>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</div>
</main>
<script>
// 파이 차트
Chart.register(ChartDataLabels);
const chart1 = document.getElementById('pieGraph');
new Chart(chart1, {
type: 'pie',
data: {
labels: ['면역&그린 프로폴리스', '프리미엄(30포)', '쏘팔메토 옥타코사놀', '여성을 위한 유산균 이너 프로바이오틱스', '순캔디 120g', '키즈 멑티비타민 미네랄'],
datasets: [{
data: [39, 41, 44, 20, 24, 27],
borderWidth: 2,
order: 1
}]
},
options: {
scales: {
y: {
display: false,
},
},
plugins: {
title: {
display: true,
text: '판매가격 순위 Top 10',
font: {
size: 20,
weight: 'bold'
}
},
legend: {
display: true,
position: 'top'
},
datalabels: {
color: '#fff',
font: {
weight: '500',
size: 15,
},
formatter: (value, ctx) => {
return value + '%';
}
}
},
maintainAspectRatio: false,
},
});
const chart2 = document.getElementById('pieGraph2');
new Chart(chart2, {
type: 'pie',
data: {
labels: ['면역&그린 프로폴리스', '프리미엄(30포)', '쏘팔메토 옥타코사놀', '여성을 위한 유산균 이너 프로바이오틱스', '순캔디 120g', '키즈 멑티비타민 미네랄'],
datasets: [{
data: [20, 39, 24, 27, 41, 44],
borderWidth: 2,
order: 1
}]
},
options: {
scales: {
y: {
display: false,
}
},
plugins: {
title: {
display: true,
text: '판매수량 순위 Top 10',
font: {
size: 20,
weight: 'bold'
}
},
legend: {
display: true,
position: 'top'
},
datalabels: {
color: '#fff',
font: {
weight: '500',
size: 15,
},
formatter: (value, ctx) => {
return value + '%';
}
}
},
maintainAspectRatio: false,
},
});
</script>
</body>
</html>

View File

@@ -0,0 +1,255 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %>
<%@ 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"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<%--
Class Name : WklySelngR.jsp
Description : 주별 매출 조회 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-04-06 이운산 최초 생성(퍼블리싱 적용)
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@ include file="/WEB-INF/views/comm/itrnt/Include.jsp"%>
<script>
/* ********************************************************
* 매출분석 - 일별 이동
******************************************************** */
const fn_move_selng_daily = function() {
let dataStr = "";
$.ajax({
type: 'get'
url : '<c:url value="/itrnt/selng/selectDailySelng"/>',
data : dataStr,
success:function(data) {
}
})
}
/* ********************************************************
* 매출분석 - 주별 이동
******************************************************** */
const fn_move_selng_wkly = function() {
let dataStr = "";
$.ajax({
type: 'get'
url : '<c:url value="/itrnt/selng/selectWklySelng"/>',
data : dataStr,
success:function(data) {
}
})
}
/* ********************************************************
* 매출분석 - 월별 이동
******************************************************** */
const fn_move_selng_mnthly = function() {
let dataStr = "";
$.ajax({
type: 'get'
url : '<c:url value="/itrnt/selng/selectMntlySelng"/>',
data : dataStr,
success:function(data) {
}
})
}
</script>
</head>
<body>
<%@ include file="/WEB-INF/views/comm/itrnt/Header.jsp"%>
<main class="main">
<%@ include file="/WEB-INF/views/comm/itrnt/Left.jsp"%>
<div class="content">
<div class="content__inner">
<button class="side-nav__fold"><span class="visually-hidden">좌측메뉴 펼치기/닫기</span></button>
<div class="page-title">
<h2 class="page-title__title">매출 분석 - 주별</h2>
<div class="page-title__btn-container">
</div>
</div>
<section class="content-section">
<form>
<div class="table-wrapper">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 12%;">
<col>
</colgroup>
<tbody>
<tr>
<th>날짜</th>
<td>
<div class="td-inner">
<div class="dateRange-btnContainer dateRange-btnContainer--md">
<button class="dateRange-btn selected" onclick="fn_move_selng_daily();">일별</button>
<button class="dateRange-btn" onclick="fn_move_selng_wkly();">주별</button>
<button class="dateRange-btn" onclick="fn_move_selng_mnthly();">월별</button>
</div>
<div class="input-container gap-4">
<div class="select-box">
<select title="해당 셀렉트에 대한 설명">
<option value="">2023년</option>
</select>
</div>
<div class="select-box">
<select title="해당 셀렉트에 대한 설명">
<option value="">12월</option>
</select>
</div>
</div>
</div>
</td>
</tr>
<tr>
<th>판매환경</th>
<td>
<div class="td-inner">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox">
<input type="checkbox" value="">
<span class="check"></span>
<span class="control-label">TM주문</span>
</label>
<label class="b-checkbox checkbox">
<input type="checkbox" value="">
<span class="check"></span>
<span class="control-label">TM출고</span>
</label>
<label class="b-checkbox checkbox">
<input type="checkbox" value="">
<span class="check"></span>
<span class="control-label">TM결제</span>
</label>
<label class="b-checkbox checkbox">
<input type="checkbox" value="">
<span class="check"></span>
<span class="control-label">가맹(POS)</span>
</label>
<label class="b-checkbox checkbox">
<input type="checkbox" value="">
<span class="check"></span>
<span class="control-label">직영(POS)</span>
</label>
<label class="b-checkbox checkbox">
<input type="checkbox" value="">
<span class="check"></span>
<span class="control-label">유통(POS)</span>
</label>
<label class="b-checkbox checkbox check-all">
<input type="checkbox" value="">
<span class="check"></span>
<span class="control-label">전체</span>
</label>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="form-control-container">
<div class="left"></div>
<div class="center">
<button class="btn outline" type="button" onclick="fn_reset_form('search-section'); return false;">초기화</button>
<button class="btn primary" type="button">검색</button>
</div>
<div class="right"></div>
</div>
</form>
</section>
<section class="content-section">
<div id="barGraph-container">
<div class="barGraph__wrapper">
<canvas id="barGraph"></canvas>
</div>
</div>
</section>
<section class="content-section">
<div class="form-control-container">
<div class="left">
</div>
<div class="center">
</div>
<div class="right">
<button class="btn outline sm">
<i class="icon icon_excel"></i>
다운로드
</button>
</div>
</div>
<hr class="spacing">
<div id='my-spreadsheet'></div>
</section>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</div>
</main>
<script>
// 데이터 테이블
var data1 = [
['유기농산양유WPC유청단백질', 10000000, 5000000, 100000, '매출', 5000, 1000000],
['여성을 위한 유산균 이너 프로바이오틱스', 10000000, 5000000, 100000, '매출', 5000, 1000000],
['(골드)프로스랩 패밀리', 10000000, 5000000, 100000, '매출', 5000, 1000000],
];
var SUMCOL = function (instance, columnId) {
var total = 0;
for (var j = 0; j < instance.options.data.length; j++) {
if (Number(instance.records[j][columnId].innerHTML)) {
total += Number(instance.records[j][columnId].innerHTML);
}
}
return total;
}
jspreadsheet(document.getElementById('my-spreadsheet'), {
data: data1,
defaultColWidth: 120,
columns: [
{ title: '상품명', width: 240 },
{ title: '상품가' },
{ title: '판매수량' },
{ title: '환불수량' },
{ title: '판매가합계' },
{ title: '할인합계' },
{ title: '판매가합계-할인합계' },
],
footers: generateFooters(data1),
editable: false,
contextMenu: false,
});
// 합계
function generateFooters(data) {
var footers = [['합계']];
for (var i = 1; i < data[0].length; i++) {
var formula = '=SUMCOL(TABLE(), ' + i + ')';
footers[0].push(formula);
}
return footers;
}
</body>
</html>

View File

@@ -0,0 +1,437 @@
<%@ 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 : ItrntBbscttListR.jsp
Description : 인트라넷 게시판 목록 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-03-26 이운산 최초 생성(퍼블리싱 적용)
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@ include file="/WEB-INF/views/comm/itrnt/Include.jsp" %>
</head>
<script>
$("header").ready(function () {
$("#unfold").click();
});
$(document).ready(function (){
// 본부 선택
$("#goodsPosHdqrtrsCd").on("change", function () {
document.location.href = "/itrnt/stock/selectStockIngire?srchGoodsPosHdqrtrsCd=" + $(this).val();
});
// 매장 선택
$("#srchStrPosCd").on("change", function () {
document.location.href = "/itrnt/stock/selectStockIngire?srchGoodsPosHdqrtrsCd=" + $("#goodsPosHdqrtrsCd").val() + "&srchStrPosCd=" + $(this).val();
});
// 분류 선택
$("select.sc_select").on("change", function () {
// 대분류 선택 -> 중/소분류 리셋
if ($(this).attr("id") == "sc_grp_1") {
$("#sc_grp_2").val("");
$("#sc_grp_3").val("");
}
// 중분류 선택 -> 소분류 리셋
if ($(this).attr("id") == "sc_grp_2") {
$("#sc_grp_3").val("");
}
// 분류 옵션 설정
set_sc_grp();
});
// 검색어 입력
$("input.sc_input").on("change", function () {
$(this).val($(this).val().trim());
// 필터 적용
set_filter();
});
// 제품 선택
$("#tbl_data td.td_menuname").on("click", function () {
var tr = $(this).closest("tr");
if (tr.hasClass("chk_goods"))
tr.removeClass("chk_goods");
else
tr.addClass("chk_goods");
});
// 선택한 제품만 표시
$("#onlyGoods").on("click", function () {
if ($(this).prop("checked"))
$("#tbl_data tbody tr").addClass("chk_goods_only");
else
$("#tbl_data tbody tr").removeClass("chk_goods_only");
// 필터 적용
set_filter();
});
// 선택한 매장만 표시
$("#onlyStore").on("click", function () {
if ($(this).prop("checked")) {
if ($(".chk_store:checked").length > 0) {
$("#tbl_data td.td_store").hide();
$("#tbl_data td.td_qty").hide();
$("#tbl_data td.td_avg").hide();
$("#tbl_data td.td_store.my").show();
$("#tbl_data td.td_qty.my").show();
$("#tbl_data td.td_avg.my").show();
$(".chk_store").each(function () {
if ($(this).prop("checked")) {
var str_cd = $(this).val();
var tdElement = $("#tbl_data td[str_cd='" + str_cd + "']");
if (tdElement.length) { // Check if the element exists
tdElement.show();
}
}
});
}
} else {
$("#tbl_data td.td_store").show();
$("#tbl_data td.td_qty").show();
$("#tbl_data td.td_avg").show();
}
});
// 전체 선택한 매장 해제
$("#btn_chk_store_clear").on("click", function () {
$(".chk_store").prop("checked", false);
if ($("#onlyStore").prop("checked")) {
$("#onlyStore").prop("checked", false);
$("#tbl_data td.td_store").show();
$("#tbl_data td.td_qty").show();
$("#tbl_data td.td_avg").show();
}
});
// 전체 선택한 제품 해제
$("#btn_chk_goods_clear").on("click", function () {
$("#onlyGoods").prop("checked", false);
$("#tbl_data tbody tr").removeClass("chk_goods_only");
$("#tbl_data tbody tr").removeClass("chk_goods");
// 필터 적용
set_filter();
});
});
// 필터 적용
function set_filter(){
var grp_1 = $("#sc_grp_1").val();
var grp_2 = $("#sc_grp_2").val();
var grp_3 = $("#sc_grp_3").val();
var menuname = $("#sc_menuname").val();
var barcode = $("#sc_barcode").val();
var chk_goods_only = $("#onlyGoods").prop("checked"); // 선택한 제품만 표시
// 1. 검색어 적용
console.log("menuname : ", menuname);
console.log("barcode : ", barcode);
$(".td_goods").each(function(){
var chk = true;
if(menuname != "" && $(this).find(".td_menuname").attr("title").indexOf(menuname) == -1)
chk = false;
if(barcode != "" && $(this).find(".td_barcode").attr("title").indexOf(barcode) == -1)
chk = false;
if(chk_goods_only && !$(this).hasClass("chk_goods"))
chk = false;
if(chk)
$(this).addClass("sc");
else
$(this).removeClass("sc");
});
// 2. 분류 적용
$(".td_goods").hide();
if(grp_3 != "")
$(".td_goods.sc[grpcd_1='" + grp_1 + "'][grpcd_2='" + grp_2 + "'][grpcd_3='" + grp_3 + "']").show();
else if(grp_2 != "")
$(".td_goods.sc[grpcd_1='" + grp_1 + "'][grpcd_2='" + grp_2 + "']").show();
else if(grp_1 != "")
$(".td_goods.sc[grpcd_1='" + grp_1 + "']").show();
else
$(".td_goods.sc").show();
$(".no_hover").show();
}
// 분류 옵션 설정
function set_sc_grp(){
var grp_1 = $("#sc_grp_1").val();
var grp_2 = $("#sc_grp_2").val();
var grp_3 = $("#sc_grp_3").val();
let grp_2_arr = '<c:out value="${resultMap.stockData.itm_2_json}" escapeXml="false"/>';
grp_2_arr = JSON.parse(grp_2_arr);
let grp_3_arr = '<c:out value="${resultMap.stockData.itm_3_json}" escapeXml="false"/>';
grp_3_arr = JSON.parse(grp_3_arr);
// 중분류
$("#sc_grp_2 option[value != '']").remove();
if (grp_1 != "") {
$.each(grp_2_arr, function (index, item) {
if(item.grpCd1 === $("#sc_grp_1").val()){
$("#sc_grp_2").append("<option value='" + item.grpCd2 + "'>" + item.grpNm + "</option>");
}
});
$("#sc_grp_2").niceSelect('update');
}
$("#sc_grp_3 option[value != '']").remove();
if(grp_2 != ""){
//중분류 셀렉트
$("#sc_grp_2").val(grp_2).prop("selected", true);
$("#sc_grp_2").niceSelect('update');
//옵션 값 부여
$.each(grp_3_arr, function(index, item){
if(item.grpCd1+item.grpCd2 === $("#sc_grp_1").val()+$("#sc_grp_2").val()){
$("#sc_grp_3").append("<option value='" + item.grpCd3 + "'>" + item.grpNm + "</option>");
}
});
$("#sc_grp_3").niceSelect('update');
}
if(grp_3 != "") {
$("#sc_grp_3").val(grp_3).prop("selected", true);
$("#sc_grp_3").niceSelect('update');
}
// 필터 적용
set_filter();
}
</script>
<style>
#tbl_data { table-layout: auto; /* 자동 레이아웃 */
width: 100%; /* 테이블 너비 */}
#tbl_data tr { display: table-row;}
#tbl_data td { display: table-cell; border-bottom:1px;}
#tbl_data td.td_grpnm_1 { min-width:90px; max-width:90px; background-color:#ffffff; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
#tbl_data td.td_grpnm_2 { min-width:90px; max-width:90px; background-color:#ffffff; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
#tbl_data td.td_grpnm_3 { min-width:100px; max-width:100px; background-color:#ffffff; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
#tbl_data td.td_menuname { position:sticky; left:0px; cursor:pointer; font-weight:bold; }
#tbl_data td.td_store { min-width:100px; max-width:100px; }
#tbl_data td.td_qty {background-color:#eeeeee; }
#tbl_data td.td_store.my { background-color:#ffffff; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; position:sticky; left:215px; }
#tbl_data td.td_qty.my { background-color:#eeeeee; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; position:sticky; left:215px; }
#tbl_data td.td_avg.my { background-color:#ffffff; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; position:sticky; left:265px; }
#tbl_data td.my { font-weight:bold; }
#tbl_data td.plus { color:blue; }
#tbl_data td.minus { color:red; }
#tbl_data tbody { display: table-row-group; }
#tbl_data tbody tr:not(.no_hover):hover td {background-color: #F5FF82;}
#tbl_data tbody tr.chk_goods td { background-color:#00eeee; }
#tbl_data tbody tr.chk_goods:hover td { background-color:#90ee90; }
#tbl_data tbody tr.chk_goods_only { display:none; }
#tbl_data tbody tr.chk_goods.chk_goods_only { display:table-row; }
</style>
<body>
<%@include file="/WEB-INF/views/comm/itrnt/Header.jsp" %>
<main class="main">
<%@include file="/WEB-INF/views/comm/itrnt/Left.jsp" %>
<div class="content">
<div class="content__inner">
<button class="side-nav__fold" id = "unfold"><span class="visually-hidden">좌측메뉴 펼치기/닫기</span></button>
<div class="page-title">
<h2 class="page-title__title">재고관리</h2>
</div>
<section class="content-section">
<div class="table-wrapper" style="margin-bottom: 0px;">
<table class="table">
<caption>재고관리 검색 조건</caption>
<colgroup>
<col style="width: 25%;">
<col style="width: auto;">
<col style="width: auto;">
<col style="width: auto;">
</colgroup>
<tbody>
<tr>
<td>
<div class="td-inner">
<div class="select-box">
<select title="상품포스본부코드" name="srchGoodsPosHdqrtrsCd" id="goodsPosHdqrtrsCd">
<option value="">*본부*</option>
<c:forEach var="posHdqrtrsList" items="${resultMap.posHdqrtrsList}">
<option value="${posHdqrtrsList.cd}" ${f:setSelected(resultMap.vo.srchGoodsPosHdqrtrsCd,posHdqrtrsList.cd)}>${posHdqrtrsList.cd}</option>
</c:forEach>
</select>
</div>
<div class="select-box">
<select title="매장포스코드" name="srchStrPosCd" id="srchStrPosCd">
<option value="">*매장*</option>
<c:forEach var="strList" items="${resultMap.stockData.strList}">
<option value="${strList.strPosCd}" ${f:setSelected(resultMap.vo.srchStrPosCd,strList.strPosCd)}>${strList.strNm}</option>
</c:forEach>
</select>
</div>
<div class="b-checkbox-container" style="margin-left: 20px;">
<label class="b-checkbox checkbox">
<input type="checkbox" id="onlyGoods">
<span class="check"></span>
<span class="control-label">선택한 제품만 표시</span>
</label>
<button type="button" class="btn outline" id="btn_chk_goods_clear">선택 제품 전체해제</button>
</div>
<div class="b-checkbox-container" style="margin-left: 20px;">
<label class="b-checkbox checkbox">
<input type="checkbox" id="onlyStore">
<span class="check"></span>
<span class="control-label">선택한 매장만 표시</span>
</label>
<button type="button" class="btn outline" id="btn_chk_store_clear">선택 매장 전체해제</button>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</section>
<section class="content-section">
<div class="table-wrapper" style="margin-bottom: 0px; overflow-x: auto; height: 600px; overflow-y: auto; white-space: nowrap;">
<table class="table vertical" style="width: 100%; border-collapse: collapse;" id = "tbl_data">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 100px;">
<col style="width: 100px;">
<col style="width: 100px;">
<col style="width: 100px;">
<col style="width: 200px;">
<c:forEach var = "strList" items = "${resultMap.stockData.strList}">
<col style="width : auto;">
<col style="width : auto;">
</c:forEach>
</colgroup>
<tbody>
<tr class="no_hover">
<td>
대분류
</td>
<td>
중분류
</td>
<td>
소분류
</td>
<td>
바코드
</td>
<td>
제품명
</td>
<c:forEach var = "strList" items = "${resultMap.stockData.strList}">
<td colspan="2" class="td_store <c:if test = "${strList.isMy eq '1'}">my</c:if>" str_cd ="<c:out value="${strList.strIdntfcCd}"/>">
<div class="b-checkbox-container" style="">
<label class="b-checkbox checkbox">
<c:if test = "${strList.isMy ne '1'}">
<input type="checkbox" class="chk_store" value = "${strList.strIdntfcCd}">
<span class="check"></span>
</c:if>
<span class="control-label">${strList.strNm}</span>
</label>
</div>
</td>
</c:forEach>
</tr>
<tr class="no_hover">
<td>
<div class="select-box">
<select title="대분류" name="grpCd1" class="sc_select" id="sc_grp_1">
<option value="">*대분류*</option>
<c:forEach var="itmList" items="${resultMap.stockData.itm_1_List}">
<option value="${itmList.grpCd1}">${itmList.grpNm}</option>
</c:forEach>
</select>
</div>
</td>
<td>
<div class="select-box">
<select title="중분류" name="grpCd2" class="sc_select" id="sc_grp_2">
<option value="">*중분류*</option>
</select>
</div>
</td>
<td>
<div class="select-box">
<select title="소분류" name="grpCd3" class="sc_select" id="sc_grp_3">
<option value="">*소분류*</option>
</select>
</div>
</td>
<td class="">
<input class="input-text xl sc_input" type="text" id="sc_barcode">
</td>
<td class="">
<input class="input-text xl sc_input" type="text" id="sc_menuname">
</td>
<c:forEach var = "strList" items = "${resultMap.stockData.strList}">
<td class="td_qty <c:if test = "${strList.isMy eq '1'}">my</c:if>" str_cd="<c:out value="${strList.strIdntfcCd}"/>">
재고
</td>
<td class="td_avg <c:if test = "${strList.isMy eq '1'}">my</c:if>" str_cd="<c:out value="${strList.strIdntfcCd}"/>">
평균
</td>
</c:forEach>
</tr>
<c:set var = "data" value = "${resultMap.stockData.data}"/>
<c:choose>
<c:when test = "${not empty resultMap.stockData.stockList}">
<c:forEach var="item" items="${resultMap.stockData.goodsList}">
<tr itm_id="${item.goodsIdntfcCd}" grpcd_1="${item.grpCd1}" grpcd_2="${item.grpCd2}" grpcd_3="${item.grpCd3}" class="td_goods">
<td class="td_grpnm_1" title="${item.grpnm_1}">${item.grpCdNm1}</td>
<td class="td_grpnm_2" title="${item.grpnm_2}">${item.grpCdNm2}</td>
<td class="td_grpnm_3" title="${item.grpnm_3}">${item.grpCdNm3}</td>
<td class="td_barcode" title="${item.goodsBrcd}">${item.goodsBrcd}</td>
<td class="td_menuname" title="${item.goodsNm}">${item.goodsNm}</td>
<c:if test="${not empty resultMap.stockData.strList}">
<c:forEach var="store" items="${resultMap.stockData.strList}">
<c:set var = "goodsIdntfcCd" value = "${item.goodsIdntfcCd}"/>
<c:set var = "strIdntfcCd" value = "${store.strIdntfcCd}"/>
<c:choose>
<c:when test="${not empty data.get(goodsIdntfcCd).get(strIdntfcCd).status}">
<c:set var = "status" value = "${data.get(goodsIdntfcCd).get(strIdntfcCd).status}"/>
</c:when>
<c:otherwise>
<c:set var = "status" value = "plus"/>
</c:otherwise>
</c:choose>
<td str_cd="${store.strIdntfcCd}" class="td_qty ${store.isMy eq '1' ? 'my' : ''} ${status}">
${data.get(goodsIdntfcCd).get(strIdntfcCd).invntryQy}
</td>
<td str_cd="${store.strIdntfcCd}" class="td_avg ${store.isMy eq '1' ? 'my' : ''}">
${data.get(goodsIdntfcCd).get(strIdntfcCd).pdAvrgQy}
</td>
</c:forEach>
</c:if>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
<tr colspan = "100%"><spring:message code="common.nodata"/></tr>
</c:otherwise>
</c:choose>
</tbody>
</table>
</div>
</section>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</div>
</main>
</body>
</html>