초기소스

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,30 @@
<?xml version="1.0" encoding="UTF-8"?>
<taglib version="3.0" xmlns="https://jakarta.ee/xml/ns/jakartaee" xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-jsptaglibrary_3_0.xsd ">
<tlib-version>3.0</tlib-version>
<short-name>f</short-name>
<function>
<name>setChecked</name>
<function-class> com.wb.domainserver.util.util.Util</function-class>
<function-signature>
java.lang.String setChecked(java.lang.String,java.lang.String)
</function-signature>
</function>
<function>
<name>setSelected</name>
<function-class> com.wb.domainserver.util.util.Util</function-class>
<function-signature>
java.lang.String setSelected(java.lang.String,java.lang.String)
</function-signature>
</function>
<function>
<name>setCheckedArray</name>
<function-class> com.wb.domainserver.util.util.Util</function-class>
<function-signature>
java.lang.String setCheckedArray(java.lang.String[], java.lang.String)
</function-signature>
</function>
</taglib>

View File

@@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>ui</short-name>
<uri>http://www.winbit.kr/ctl/ui</uri>
<display-name>UI</display-name>
<description>UI Tag Library</description>
<tag>
<name>pagination</name>
<tag-class> com.wb.domainserver.common.mvc.tags.ui.PaginationTag</tag-class>
<body-content>empty</body-content>
<description>Pagination Tag</description>
<attribute>
<name>paginationInfo</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>type</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>jsFunction</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>

View File

@@ -0,0 +1,79 @@
<%@ 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" %>
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<title>Welcome nutricore</title>
</head>
<body>
<h1>사용자 인덱스 화면 Today : <%= new Date()%></h1>
<button style="padding: 10px 30px; background-color: #ffc9c9;" type="button" onclick="location.href='/index'">pc</button>
<button style="padding: 10px 30px; background-color: #5ac5d4;" type="button" onclick="location.href='/mobileIndex'">mobile</button>
<br><br>
고객센터,서브페이지(/sopmal/csc) >
<br><br>
<button type="button" onclick="location.href='/sopmal/csc/selectCscMainForm'">고객센터 메인</button>
<button type="button" onclick="location.href='/sopmal/csc/selectBbscttAuth?authDv=REDNG&reqUrl=subPage&bbsId=magazine'">매거진</button>
<button type="button" onclick="location.href='/sopmal/csc/selectBbscttAuth?authDv=REDNG&reqUrl=subPage&bbsId=Event_board'">이벤트</button>
<button type="button" onclick="location.href='/sopmal/csc/selectBbscttAuth?authDv=REDNG&reqUrl=subPage&bbsId=Event_result'">당첨자발표</button>
<button type="button" onclick="location.href='/sopmal/csc/selectBbscttAuth?authDv=REDNG&reqUrl=subPage&bbsId=test_bbs'">일반게시판(리스트)</button>
<button type="button" onclick="location.href='/sopmal/csc/selectBbscttAuth?authDv=REDNG&reqUrl=subPage&bbsId=influencer'">일반게시판(갤러리)</button>
<button type="button" onclick="location.href='/sopmal/csc/selectBbscttAuth?authDv=REDNG&reqUrl=subPage&bbsId=faq'">일반게시판(아코디언)</button>
<hr><br>
메인 (/sopmal/main) >
<br><br>
<button type="button" onclick="location.href='/sopmal/main/selectStrListForm'">매장안내 이동</button>
<hr><br>
마이페이지 활동 (/sopmal/mpage/act) >
<br><br>
<button type="button" onclick="location.href='/sopmal/mpage/act/selectGoodsQnaInqire?bbsId=goods_qna'">상품Q&A조회</button>
<button type="button" onclick="location.href='/sopmal/mpage/act/selectMyRvwInqireForm'">나의리뷰조회</button>
<hr><br>
마이페이지 혜택 (/sopmal/mpage/bnef) >
<br><br>
<button type="button" onclick="location.href='/sopmal/mpage/bnef/selectMbrGradInqire'">회원 등급 이동</button>
<button type="button" onclick="location.href='/sopmal/mpage/bnef/selectMlgDtlsInqireForm'">마일리지 이동</button>
<button type="button" onclick="location.href='/sopmal/mpage/bnef/selectCouponDtlsForm'">쿠폰 내역 이동</button>
<hr><br>
마이페이지 정보 (/sopmal/mpage/mbr) >
<br><br>
<button type="button" onclick="location.href='/sopmal/mpage/mbr/selectDlvylcManagePopupForm'">배송지 관리</button>
<button type="button" onclick="location.href='/sopmal/mpage/mbr/selectMbrInfoUpdtPasswordCnfirmForm'">회원 정보 수정 비밀번호 확인 이동</button>
<button type="button" onclick="location.href='/sopmal/mpage/mbr/selectMbrInfoUpdtForm'">회원 정보 수정 이동</button>
<button type="button" onclick="location.href='/sopmal/mpage/mbr/selectMbrSecsnForm'">회원 탈퇴 이동</button>
<hr><br>
마이페이지 쇼핑(/sopmal/mpage/ordr) >
<br><br>
<button type="button" onclick="location.href='/sopmal/mpage/ordr/selectWslistInqireForm'">위시리스트 이동</button>
<button type="button" onclick="location.href='/sopmal/mpage/ordr/selectRtngudCanclRefndForm'">반품/환불 목록 이동</button>
<hr><br>
구매(/sopmal/ordr) >
<br><br>
<button type="button" onclick="location.href='/sopmal/ordr/selectMbrPurchsForm'">회원구매(배송지관리팝업)</button>
<hr><br>
상품(/sopmal/goods) >
<br><br>
<button type="button" onclick="location.href='/sopmal/goods/selectGoodsSrchForm'">상품 검색</button>
<button type="button" onclick="location.href='/sopmal/goods/selectGoodsListForm'">상품 목록</button>
<button type="button" onclick="location.href='/sopmal/goods/selectGoodsDtl?goodsInnb=59&sopmalCd=NC'">상품 상세</button>
</body>
<script>
</script>
</html>

View File

@@ -0,0 +1,56 @@
<%@ 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" %>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<%-- <title>GC ONE 통합 관리자</title>--%>
<%-- 공통 include --%>
<%@include file ="/WEB-INF/views/comm/admin/Include.jsp" %>
</head>
<style>
.page-title {
background-color: #ffffff;
box-shadow: 0 1px 6px 0 rgba(0, 0, 0, 0.1);
padding: 12px 24px;
justify-content: flex-start;
}
</style>
<script>
$(document).ready(function () {
});
</script>
<body>
<%@include file ="/WEB-INF/views/comm/admin/Header.jsp" %>
<main class="main">
<%@include file ="/WEB-INF/views/comm/admin/Left.jsp" %>
<div class="content">
<div class="content__inner">
<button class="side-nav__fold"><span class="visually-hidden">좌측메뉴 펼치기/닫기</span></button>
<div class="page-title">
<h3 class="page-title__title">${resultMap.access.mngrId}</h3>
<h4>님 GCONE 통합관리자 페이지에 접속하셨습니다.</h4>
<div class="page-title__btn-container">
</div>
</div>
<section class="content-section">
마지막 접속 시간은 [${resultMap.access.lastConectDt}] 입니다.
</section>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</div>
</main>
</body>
</html>

View File

@@ -0,0 +1,88 @@
<%@ 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 : maItcSleHistInfoInqireR.jsp
Description : 부정 판매 대상자 상세화면 > 지정 이력 목록
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2023-01-29 김혜인 최초생성
--%>
<form id = "histForm">
<section class="content-section">
<h3 class="content-section__title">부정판매 설정 이력</h3>
<div class="form-control-container">
<div class="left">
<div class="search-number">
<span class="search-number__text">총 <strong><c:out value="${ resultFO3.paginationInfo.totalRecordCount }"/></strong>건</span>
</div>
</div>
<div class="center">
</div>
<div class="right">
<div class="select-box">
<select id="histPageUnit" name="pageUnit" title="페이지당 출력될 목록건수" onchange="fn_select_histList(1);">
<c:forEach items="${ resultFO3.paginationInfo.pageUnitArr }" var="pageUnit" varStatus="pageUnitStatus">
<option value="<c:out value="${ pageUnit }"/>" <c:if test="${ resultFO3.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>
<colgroup>
<col style="width: 4%;">
<col style="width: 12%;">
<col style="width: 12%;">
<col style="width: 12%;">
<col style="width: 12%;">
<col style="width: auto;">
</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 resultFO3.histInfo }">
<c:forEach items="${ resultFO3.histInfo }" var="list" varStatus="status">
<tr>
<td><c:out value="${resultFO3.paginationInfo.totalRecordCount - list.rnum + 1 }" /></td>
<td><c:out value="${list.registDt}"/></td>
<td><c:out value="${list.sopmalNm}"/></td>
<td><c:out value="${list.appnDvCdNm}"/></td>
<td><c:out value="${list.mngrId}"/></td>
<td><c:out value="${list.appnMemo}"/></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 class="pagination__container">
<ui:pagination paginationInfo="${resultFO3.paginationInfo}" type="image" jsFunction="fn_select_histList"/>
</div>
<input type = "hidden" id = "histPageIndex" name = "pageIndex" value = "<c:out value ='${resultFO3.boMaMtngVO.pageIndex}'/>">
</section>
</form>

View File

@@ -0,0 +1,181 @@
<%@ 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 : maItcSleMtngDtlInqireR.jsp
Description : 부정 판매 대상자 상세
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2023-01-29 김혜인 최초생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@include file ="/WEB-INF/views/comm/admin/Include.jsp" %>
</head>
<script>
$(document).ready(function(){
// 지정 이력 목록 조회
let histPageIndex = '<c:out value="${ resultFO3.boMaMtngVO.pageIndex }"/>';
let histpageUnit = '<c:out value="${ resultFO3.boMaMtngVO.pageUnit }"/>';
fn_select_histList(histPageIndex, histpageUnit);
// 주문 이력 목록 조회
let ordrPageIndex = '<c:out value="${ resultFO2.boMaMtngVO.pageIndex }"/>';
let ordrpageUnit = '<c:out value="${ resultFO2.boMaMtngVO.pageUnit }"/>';
fn_select_ordrList(ordrPageIndex, ordrpageUnit);
});
// 지정 이력 목록 조회
fn_select_histList = function (pageIndex, pageUnit) {
let dataStr;
const idntfcInfo = $("#idntfcInfo").val();
if(!pageIndex) {
$('#histPageIndex').val(1);
} else {
$('#histPageIndex').val(pageIndex);
}
if(!pageUnit) {
dataStr = $('#histForm').serialize();
} else {
if($('#histPageUnit').length){
$('#histPageUnit').val(pageUnit);
dataStr = $('#histForm').serialize();
} else {
dataStr = $('#histForm').serialize()+'&pageUnit='+pageUnit;
}
}
//idntfcInfo param 넘기기
dataStr = dataStr+'&idntfcInfo='+idntfcInfo;
$.ajax({
type: "post",
url : "<c:url value="/admin/instcSle/mtng/selectItcSleHistInfoInqire"/>",
data : dataStr,
success:function(resultHtml) {
$('#histDiv').html(resultHtml);
$('#histPageUnit').niceSelect();
}
});
}
// 주문 이력 목록 조회
fn_select_ordrList = function (pageIndex, pageUnit) {
let dataStr;
const idntfcInfo = $("#idntfcInfo").val();
const mbrDvCd = $("#mbrDvCd").val();
if(!pageIndex) {
$('#ordrPageIndex').val(1);
} else {
$('#ordrPageIndex').val(pageIndex);
}
if(!pageUnit) {
dataStr = $('#ordrForm').serialize();
} else {
if($('#ordrPageUnit').length){
$('#ordrPageUnit').val(pageUnit);
dataStr = $('#ordrForm').serialize();
} else {
dataStr = $('#ordrForm').serialize()+'&pageUnit='+pageUnit;
}
}
//idntfcInfo param 넘기기
dataStr = dataStr+'&idntfcInfo='+idntfcInfo+'&mbrDvCd='+mbrDvCd;
$.ajax({
type: "post",
url : "<c:url value="/admin/instcSle/mtng/selectItcSleOrdrInfoInqire"/>",
data : dataStr,
success:function(resultHtml) {
$('#ordrDiv').html(resultHtml);
$('#ordrPageUnit').niceSelect();
}
});
}
/* ********************************************************
* 부정판매 대상자 목록 조회 이동
******************************************************** */
const fn_move_dtl_page = function() {
const url = '<c:url value="/admin/instcSle/mtng/selectItcSleMtngListInqireForm"/>';
$('#srchCndForm').attr('action', url);
$('#srchCndForm').attr('method', 'post');
$('#srchCndForm').submit();
}
</script>
<body>
<%@include file ="/WEB-INF/views/comm/admin/Header.jsp" %>
<main class="main">
<%@include file ="/WEB-INF/views/comm/admin/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" id = "listBtn" class="btn outline" onclick = "fn_move_dtl_page()">목록</button>
</div>
</div>
<section class="content-section" id="search-section">
<div class="table-wrapper">
<table class="table vertical">
<caption>사업자 조회</caption>
<colgroup>
<col style="width: 12%;">
<col style="width: auto;">
<col style="width: 12%;">
<col style="width: 21%;">
<col style="width: 12%;">
<col style="width: 21%;">
</colgroup>
<tbody>
<tr>
<th>사용자 명</th>
<td>
<div class="td-inner">
<c:out value = "${resultFO1.mbrInfo.mbrNm}"/>
</div>
</td>
<th>아이디</th>
<td>
<div class="td-inner">
<c:out value = "${resultFO1.mbrInfo.mbrId}"/>
</div>
</td>
<th>등급</th>
<td>
<div class="td-inner">
<c:out value = "${resultFO1.mbrInfo.mbrGradNm}"/>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</section>
<div id="histDiv">
</div>
<div id="ordrDiv">
</div>
<input type = "hidden" value = "${maMtngSrchVO.idntfcInfo}" name = "idntfcInfo" id = "idntfcInfo"/>
<input type = "hidden" value = "${maMtngSrchVO.mbrDvCd}" name = "mbrDvCd" id = "mbrDvCd"/>
<%--목록 이동시 검색 조건 유지--%>
<form id = "srchCndForm">
<input type = "hidden" value = "${maMtngSrchVO.pageIndex}" name = "pageIndex" id = "pageIndex"/>
<input type = "hidden" value = "${maMtngSrchVO.srchType}" name = "srchType" id = "srchType"/>
<input type = "hidden" value = "${maMtngSrchVO.srchStr}" name = "srchStr" id = "srchStr"/>
<input type = "hidden" value = "${maMtngSrchVO.srchShop}" name = "srchShop" id = "srchShop"/>
<input type = "hidden" value = "${maMtngSrchVO.srchAppn}" name = "srchAppn" id = "srchAppn"/>
<input type = "hidden" value = "${maMtngSrchVO.srchStrtRegDt}" name = "srchStrtRegDt" id = "srchStrtRegDt"/>
<input type = "hidden" value = "${maMtngSrchVO.srchEndRegDt}" name = "srchEndRegDt" id = "srchEndRegDt"/>
<c:forEach var = "srchIdntfcDvCd" items = "${maMtngSrchVO.srchIdntfcDvCd}">
<input type = "hidden" value = "${srchIdntfcDvCd}" name = "srchIdntfcDvCd" id = "srchIdntfcDvCd"/>
</c:forEach>
<input type = "hidden" value = "${maMtngSrchVO.pageUnit}" name = "pageUnit" id = "pageUnit"/>
</form>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</div>
</main>
</body>
</html>

View File

@@ -0,0 +1,198 @@
<%@ 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 : MaItcSleMtngListInqireRForm.jsp
Description : 부정 판매 대상자 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2023-01-29 김혜인 최초생성
--%>
<script>
$(document).ready(function(){
$(".mbtlnb").each(function(){
console.log($(this).text().trim());
$(this).text(fn_format_mbtlnb($(this).text().trim()));
});
});
</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="${ resultListMap.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_list(1);">
<c:forEach items="${ resultListMap.paginationInfo.pageUnitArr }" var="pageUnit" varStatus="pageUnitStatus">
<option value="<c:out value="${ pageUnit }"/>" ${f:setSelected(resultListMap.paginationInfo.recordCountPerPage, pageUnit) }><c:out value="${ pageUnit }"/>개씩</option>
</c:forEach>
</select>
</div>
</div>
</div>
<hr class="horizontal-line">
<div class="form-control-container">
<div class="left">
</div>
<div class="center">
</div>
<div class="right">
<button class="btn outline sm" type = "button" id = "excelDwldBtn" onclick = "fn_excel_download()">
<i class="icon icon_excel"></i>다운로드
</button>
</div>
</div>
<hr class="spacing">
<div class="table-wrapper">
<table class="table vertical">
<caption>부정판매 대상자 목록</caption>
<colgroup>
<col style="width: 5%;">
<col style="width: 11%;">
<col style="width: auto;">
<col style="width: 8%;">
<col style="width: 8%;">
<col style="width: 11%;">
<col style="width: 12%;">
<col style="width: 7%">
<col style="width: 16%;">
</colgroup>
<thead>
<tr>
<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 }">
<c:forEach items="${ resultListMap.resultMap }" var="list" varStatus="status">
<tr>
<td><c:out value="${resultListMap.paginationInfo.totalRecordCount - list.rnum + 1 }" /></td>
<td><c:out value="${list.idntfcStdrCdNm}"/></td>
<td class="<c:if test = "${list.idntfcStdrCd eq 'order_mbtlnb'}">mbtlnb</c:if>">
<c:choose>
<c:when test = "${list.idntfcStdrCd eq 'mbr_innb'}">
<c:out value="${list.mbrId}"/>
</c:when>
<c:otherwise>
<c:out value="${list.idntfcInfo}"/>
</c:otherwise>
</c:choose>
</td>
<td><c:out value="${list.originDvCdNm}"/></td>
<td>
<c:choose>
<c:when test = "${list.sopmalCd eq 'CM'}">
공통
</c:when>
<c:otherwise>
<c:out value="${list.sopmalNm}"/>
</c:otherwise>
</c:choose>
</td>
<td><c:out value="${list.appnDvCdNm}"/></td>
<td><c:out value="${list.registDt}"/></td>
<td>
<c:if test = "${list.idntfcStdrCd eq 'mbr_innb'}">
<button type = "button" class="btn xsm outline primary dtlBtn" value = "<c:out value="${list.idntfcInfo}"/>">조회</button>
<input type = "hidden" name = "mbrDvCd" value = "<c:out value="${list.mbrDvCd}"/>">
<input type = "hidden" name = "sopmalCd" value = "<c:out value="${list.sopmalCd}"/>">
</c:if>
</td>
<td>
<c:if test="${ list.originDvCd ne '03' }">
<c:choose>
<%-- <c:when test="${ list.appnDvCd eq '01' }"> --%>
<%-- <button class="origin_btn btn sm dark" onclick="fn_update_MbrRslrList('${list.mbrIdntfcInfo}', '02', this); return false;">블랙리스트</button> --%>
<%-- <button class="origin_btn btn outline sm" onclick="fn_update_MbrRslrList('${list.mbrIdntfcInfo}', '03', this); return false;">화이트리스트</button> --%>
<%-- </c:when> --%>
<%-- <c:when test="${ list.appnDvCd eq '02' }"> --%>
<%-- <button class="origin_btn btn outline sm" onclick="fn_update_MbrRslrList('${list.mbrIdntfcInfo}', '01', this); return false;">일반</button> --%>
<%-- <button class="origin_btn btn outline sm" onclick="fn_update_MbrRslrList('${list.mbrIdntfcInfo}', '03', this); return false;">화이트리스트</button> --%>
<%-- </c:when> --%>
<%-- <c:when test="${ list.appnDvCd eq '03' }"> --%>
<%-- <button class="origin_btn btn outline sm" onclick="fn_update_MbrRslrList('${list.mbrIdntfcInfo}', '01', this); return false;">일반</button> --%>
<%-- <button class="origin_btn btn sm dark" onclick="fn_update_MbrRslrList('${list.mbrIdntfcInfo}', '02', this); return false;">블랙리스트</button> --%>
<%-- </c:when> --%>
<c:when test="${ list.appnDvCd eq '01' }">
<button class="origin_btn btn sm dark" onclick="fn_open_appn_dv_modal('${list.mbrIdntfcInfo}', '02', this.innerText, '${list.sopmalCd}'); return false;">블랙리스트</button>
<button class="origin_btn btn outline sm" onclick="fn_open_appn_dv_modal('${list.mbrIdntfcInfo}', '03', this.innerText, '${list.sopmalCd}'); return false;">화이트리스트</button>
</c:when>
<c:when test="${ list.appnDvCd eq '02' }">
<button class="origin_btn btn outline sm" onclick="fn_open_appn_dv_modal('${list.mbrIdntfcInfo}', '01', this.innerText, '${list.sopmalCd}'); return false;">일반</button>
<button class="origin_btn btn outline sm" onclick="fn_open_appn_dv_modal('${list.mbrIdntfcInfo}', '03', this.innerText, '${list.sopmalCd}'); return false;">화이트리스트</button>
</c:when>
<c:when test="${ list.appnDvCd eq '03' }">
<button class="origin_btn btn outline sm" onclick="fn_open_appn_dv_modal('${list.mbrIdntfcInfo}', '01', this.innerText, '${list.sopmalCd}'); return false;">일반</button>
<button class="origin_btn btn sm dark" onclick="fn_open_appn_dv_modal('${list.mbrIdntfcInfo}', '02', this.innerText, '${list.sopmalCd}'); return false;">블랙리스트</button>
</c:when>
</c:choose>
</c:if>
</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 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 = "mbrIdntfcInfo">
<input type = "hidden" id = "appnDvCd">
<input type = "hidden" id = "appnDvCdNm">
<input type = "hidden" id = "sopmalCd">
</div>
<div class="modal-footer">
<a href="#" rel="modal:close" class="btn outline" id="closeBtn"><spring:message code="button.cancel"/></a>
<button class="btn primary outline" id = "registBtn" ><spring:message code="button.insert"/></button>
</div>
</div>
</section>
<div class="pagination__container">
<ui:pagination paginationInfo="${resultListMap.paginationInfo}" type="image" jsFunction="fn_select_list"/>
</div>

View File

@@ -0,0 +1,431 @@
<%@ 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 : MaItcSleMtngListInqireRForm.jsp
Description : 부정 판매 대상자 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2023-01-29 김혜인 최초생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@include file ="/WEB-INF/views/comm/admin/Include.jsp" %>
</head>
<script>
$(document).ready(function () {
//검색폼 데이트피커 제어
fn_set_dateRange_function("#dateRange","srchStrtRegDt","srchEndRegDt","srchStrtRegDt");
/*전체 체크박스 클릭시 체크박스 전체 체크*/
$("#idntfcStdrA").on("click", function () {
if ($(this).is(":checked")) {
$("input[name='srchIdntfcDvCd']").each(function () {
$(this).prop("checked", true);
});
} else {
$("input[name='srchIdntfcDvCd']").each(function () {
$(this).prop("checked", false);
});
}
});
/* 체크박스 클릭 시 전체 체크박스 체크 해제 */
$("input[name='srchIdntfcDvCd']").on("click", function () {
// 현재 체크된 상태를 기준으로 전체 체크 여부 확인
let allChecked = $("input[name='srchIdntfcDvCd']").length === $("input[name='srchIdntfcDvCd']:checked").length;
// 만약 모든 체크박스가 체크되지 않았으면, 전체 선택 체크박스 해제
if (!allChecked) {
$("#idntfcStdrA").prop("checked", false);
}else{
$("#idntfcStdrA").prop("checked", true);
}
});
/*식별기준 vo에 없을시 전체 체크*/
let srchIdntfcDvCd = '<c:out value="${resultSrchMap.boMaMtngSrchVO.srchIdntfcDvCd}"/>';
if (srchIdntfcDvCd === '') {
$("#idntfcStdrA").click();
}
/*초기화시 식별기준 전체 체크*/
$("#resetBtn").on("click",function(){
$("#idntfcStdrA").click();
});
/*지정일 vo에 없을시 전체 버튼 클릭*/
let srchStrtRegDt = '<c:out value="${resultSrchMap.boMaMtngSrchVO.srchStrtRegDt}"/>';
let srchEndRegDt = '<c:out value="${resultSrchMap.boMaMtngSrchVO.srchEndRegDt}"/>';
if (srchStrtRegDt === '' && srchEndRegDt === '') {
$(".dateRange-btn").last().click();
}
let pageIndex = '<c:out value="${ resultSrchMap.boMaMtngSrchVO.pageIndex }"/>';
let pageUnit = '<c:out value="${ resultSrchMap.boMaMtngSrchVO.pageUnit }"/>';
fn_select_list(pageIndex, pageUnit);
//검색 엔터 클릭시 목록 조회
$('#srchStr').on('keydown', function(event) {
if (event.keyCode === 13) {
event.preventDefault();
fn_select_list('1');
}
});
//버튼 클릭시 상세 조회 이동
$(document).on('click','.dtlBtn',function(){
const targetTd = $(this).closest("td");
/*회원 고유번호*/
const idntfcInfo = $(this).val();
/*회원 구분 코드*/
const mbrDvCd = targetTd.find("input[name='mbrDvCd']").val();
/*쇼핑몰 코드*/
const sopmalCd = targetTd.find("input[name='sopmalCd']").val();
fn_move_dtl_page(idntfcInfo,mbrDvCd,sopmalCd);
});
});
/**********************************************************
* 검색 조건 이벤트 설정
***********************************************************/
/*
* 검색조건 > 날짜 전체 클릭 시 날짜 설정 초기화
*/
const fn_reset_date = function (strtDate, endDate) {
$('#' + strtDate).datepicker().datepicker("setDate", '');
$('#' + endDate).datepicker().datepicker("setDate", '');
}
/* ********************************************************
* 목록 조회
******************************************************** */
const fn_select_list = function(pageIndex, pageUnit) {
if(!pageIndex) {
$('#pageIndex').val(1);
} else {
$('#pageIndex').val(pageIndex);
}
let dataStr = $('#listForm').serialize();
if(!pageUnit){
dataStr += '&pageUnit=' + $('#pageUnit').val();
} else {
dataStr += '&pageUnit=' + pageUnit;
}
$.ajax({
type: "post",
url : "<c:url value='/admin/instcSle/mtng/selectItcSleMtngListInqire'/>",
data : dataStr,
success:function(resultHtml) {
$('#pageDiv').empty();
$('#pageDiv').html(resultHtml);
$('#pageUnit').niceSelect();
}
});
}
/* ********************************************************
* 부정판매 대상자 이력조회 이동
******************************************************** */
const fn_move_dtl_page = function(idntfcInfo,mbrDvCd,sopmalCd) {
let form = $('<form></form>').attr({
method: 'post',
action: '<c:url value="/admin/instcSle/mtng/selectItcSleMtngDtlInqire"/>'
});
/*회원고유번호*/
fn_create_input('idntfcInfo',idntfcInfo,form);
/*회원구분코드*/
fn_create_input('mbrDvCd',mbrDvCd,form);
/*쇼핑몰코드*/
fn_create_input('sopmalCd',sopmalCd,form);
/*pageUnit*/
fn_create_input('pageUnit', $("#pageUnit").val(),form);
/*pageIndex*/
fn_create_input('pageIndex',$("#pageIndex").val(),form);
/*검색폼 데이터 유지 값 form에 set*/
$("#search-section").find("input,select").each(function(){
const tag = this.tagName.toLowerCase();
if(tag === 'input'){
const type = $(this).attr("type");
if(type !== 'radio'){ //라디오를 제외한 input 값
if($(this).val()){
fn_create_input($(this).attr("name"),$(this).val(),form);
}
}else{
if($(this).prop("checked")){//라디오 체크 값
fn_create_input($(this).attr("name"),$(this).val(),form);
}
}
}else{//셀렉트 값
fn_create_input($(this).attr("name"),$(this).val(),form);
}
});
form.appendTo('body').submit();
}
/*input 생성 함수*/
const fn_create_input = (name, value, form) => {
$('<input>').attr({
type: 'hidden',
name: name,
value: value
}).appendTo(form);
}
/*********************************************************
* 엑셀 다운로드
*********************************************************/
const fn_excel_download = function() {
$('#listForm').attr('action', '<c:url value="/admin/instcSle/mtng/selectItcSleMtngListExcelDwld"/>');
$('#listForm').attr('method', 'post');
$('#listForm').submit();
}
history.replaceState({}, null, location.pathname);
/**
* mbrIdntfcInfo : 회원식별
* appnDvCd : 출처구분
* ele : this
*/
const fn_update_MbrRslrList = function(mbrIdntfcInfo, appnDvCd, ele, test) {
let pageIndex = $('#pageIndex').val();
let alertMessage = ele.innerText;
if(confirm(alertMessage+"(으)로 바꾸시겠습니까?") ) {
$.ajax({
type: "post",
url : '/admin/instcSle/mtng/updateMbrRslrList',
data : {
mbrIdntfcInfo : mbrIdntfcInfo
,appnDvCd : appnDvCd
},
success:function(result) {
alert('<spring:message code="success.common.update"/>');
fn_select_list(pageIndex);
}
});
}
}
/**
* mbrIdntfcInfo : 회원식별
* appnDvCd : 출처구분
* ele : this
*/
const fn_open_appn_dv_modal = function(mbrIdntfcInfo, appnDvCd, appnDvCdNm, sopmalCd) {
$('#resnTextArea').val('');
$('#mbrIdntfcInfo').val('');
$('#appnDvCd').val('');
$('#appnDvCdNm').val('');
$('#sopmalCd').val('');
$("#resnModal").modal("show");
$('#mbrIdntfcInfo').val(mbrIdntfcInfo);
$('#appnDvCd').val(appnDvCd);
$('#appnDvCdNm').val(appnDvCdNm);
$('#sopmalCd').val(sopmalCd);
}
$(document).on("click", "#registBtn", function(e) {
let resnTextArea = $('#resnTextArea').val();
let mbrIdntfcInfo = $('#mbrIdntfcInfo').val();
let appnDvCd = $('#appnDvCd').val();
let appnDvCdNm = $('#appnDvCdNm').val();
let pageIndex = $('#pageIndex').val();
let sopmalCd = $('#sopmalCd').val();
if(confirm(appnDvCdNm+"(으)로 바꾸시겠습니까?") ) {
$.ajax({
type: "post",
url : '/admin/instcSle/mtng/updateMbrRslrList',
data : {
mbrIdntfcInfo : mbrIdntfcInfo,
appnDvCd : appnDvCd,
appnMemo : resnTextArea,
sopmalCd : sopmalCd,
},
success:function(result) {
alert('<spring:message code="success.common.update"/>');
$('#closeBtn').click();
$("#resnModal").remove();
fn_select_list(pageIndex);
}
});
}
});
</script>
<body>
<%@include file ="/WEB-INF/views/comm/admin/Header.jsp" %>
<main class="main">
<%@include file ="/WEB-INF/views/comm/admin/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>
<form id='listForm' name="listForm" method="post" action="<c:url value="/admin/instcSle/mtng/selectItcSleMtngListInqireForm"/>">
<input type="hidden" id="pageIndex" name="pageIndex" value="${ resultSrchMap.boMaMtngSrchVO.pageIndex }"/>
<section class="content-section" id="search-section">
<div class="table-wrapper">
<table class="table">
<caption>부정판매 대상자 조회</caption>
<colgroup>
<col style="width: 12%;">
<col style="width: 50%;">
<col style="width: 12%;">
<col>
</colgroup>
<tbody>
<tr>
<th>검색어</th>
<td>
<div class="td-inner">
<div class="select-box">
<select title="검색타입" id="srchType" name="srchType" >
<option value="ID" ${f:setSelected(resultSrchMap.boMaMtngSrchVO.srchType, 'ID')}>아이디</option>
<option value="NAME" ${f:setSelected(resultSrchMap.boMaMtngSrchVO.srchType, 'NAME')}>이름</option>
<option value="EMAIL" ${f:setSelected(resultSrchMap.boMaMtngSrchVO.srchType, 'ADRES')}>주소</option>
<option value="AGENT" ${f:setSelected(resultSrchMap.boMaMtngSrchVO.srchType, 'AGENT')}>AGENT</option>
<option value="MBTLNB" ${f:setSelected(resultSrchMap.boMaMtngSrchVO.srchType, 'MBTLNB')}>주문자 휴대번호('-'미포함)</option>
</select>
</div>
<input class="input-text md" type="text" title="검색어" id="srchStr" name="srchStr" placeholder="검색어를 입력해 주십시요."
value="<c:out value="${ resultSrchMap.boMaMtngSrchVO.srchStr }" />" >
</div>
</td>
<th>쇼핑몰</th>
<td>
<div class="td-inner">
<div class="select-box">
<select title="쇼핑몰" id="srchShop" name="srchShop">
<option value="">전체</option>
<c:forEach var = "brand" items = "${resultSrchMap.brand}">
<option value="${brand.sopmalCd}" ${f:setSelected(resultSrchMap.boMaMtngSrchVO.srchShop, brand.sopmalCd)}><c:out value = '${brand.sopmalNm}'/></option>
</c:forEach>
<option value="CM" ${f:setSelected(resultSrchMap.boMaMtngSrchVO.srchShop, 'CM')}>ERP</option>
</select>
</div>
</div>
</td>
</tr>
<tr>
<th>구분</th>
<td>
<div class="td-inner">
<div class="custom-radio-container">
<div class="custom-radio">
<input type="radio" id="appenA" name="srchAppn" value = "" checked>
<label for="appenA">전체</label>
</div>
<c:forEach var = "appn" items = "${resultSrchMap.appen}">
<div class="custom-radio">
<input type="radio" id="${appn.cd}" name="srchAppn" value="${appn.cd}" ${f:setChecked(resultSrchMap.boMaMtngSrchVO.srchAppn,appn.cd)}/>
<label for="${appn.cd}">${appn.cdNm}</label>
</div>
</c:forEach>
</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" name="" class="idntfcStdr" id="idntfcStdrA" ${f:setChecked(fn:length(resultSrchMap.boMaMtngSrchVO.srchIdntfcDvCd),4)}>
<span class="check"></span>
<span class="control-label">전체</span>
</label>
<c:forEach var = "idntfcStdr" items = "${resultSrchMap.idntfcStdr}">
<label class="b-checkbox checkbox">
<input type="checkbox" class="idntfcStdr" name="srchIdntfcDvCd" value="<c:out value="${idntfcStdr.cd}"/>"
<c:forEach var = "srchIdntfcDvCd" items = "${resultSrchMap.boMaMtngSrchVO.srchIdntfcDvCd}">
${f:setChecked(srchIdntfcDvCd,idntfcStdr.cd)}
</c:forEach>>
<span class="check"></span>
<span class="control-label"><c:out value="${idntfcStdr.cdNm}"/></span>
</label>
</c:forEach>
</div>
</div>
</td>
</tr>
<tr>
<th>지정일</th>
<td colspan = "2">
<div class="td-inner">
<div class="input-container">
<input type="text" id="srchStrtRegDt" class="datepicker" title="시작 날짜 선택" name = "srchStrtRegDt" value="${resultSrchMap.boMaMtngSrchVO.srchStrtRegDt}"
autocomplete="off" >
<span class="tilde">~</span>
<input type="text" id="srchEndRegDt" class="datepicker" title="종료 날짜 선택" name = "srchEndRegDt" value="${resultSrchMap.boMaMtngSrchVO.srchEndRegDt}"
autocomplete="off" >
</div>
<div class="dateRange-btnContainer" id = "dateRange">
<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">전체</button>
</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(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>
</div>
</main>
</body>
</html>

View File

@@ -0,0 +1,105 @@
<%@ 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 : maItcSleOrdrInfoInqireR.jsp
Description : 부정 판매 대상자 상세화면 > 주문 목록
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2022-01-29 김혜인 최초생성
--%>
<form id="ordrForm">
<section class="content-section">
<h2 class="content-section__title">구매 이력</h2>
<div class="form-control-container">
<div class="left">
<div class="search-number">
<span class="search-number__text">총 <strong><c:out
value="${resultFO2.paginationInfo.totalRecordCount}"/></strong>건</span>
</div>
</div>
<div class="center">
</div>
<div class="right">
<div class="select-box">
<select id="ordrPageUnit" name="pageUnit" title="페이지당 출력될 목록건수" onchange="fn_select_ordrList(1);">
<c:forEach items="${ resultFO2.paginationInfo.pageUnitArr }" var="pageUnit"
varStatus="pageUnitStatus">
<option value="<c:out value="${ pageUnit }"/>"
<c:if test="${resultFO2.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: 4%;">
<col style="width: 12%;">
<col style="width: 12%;">
<col style="width: 7%;">
<col style="width: auto;">
<col style="width: 8%">
<col style="width: 8%">
<col style="width: 8%">
</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 resultFO2.ordrInfo }">
<c:forEach items="${ resultFO2.ordrInfo }" var="list" varStatus="status">
<tr>
<td><c:out value="${resultFO2.paginationInfo.totalRecordCount - list.rnum + 1 }"/></td>
<td><c:out value="${list.ordrRceptDt}"/></td>
<td><c:out value="${list.sopmalNm}"/></td>
<td><c:out value="${list.sleEnvrnNm}"/></td>
<td><c:out value="${list.goodsNm}"/><c:if test="${list.cnt > 1}">외 <c:out
value="${list.minusCnt}"/>종</c:if>
<br>
(<c:out value="${list.ordrInnb}"/>)
</td>
<td><c:out value="${list.goodsSum}"/>(<c:out value="${list.cnt}"/>종)</td>
<td><fmt:formatNumber value="${list.setleAmt}" pattern="#,###"/></td>
<td><c:out value="${list.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>
<div class="pagination__container">
<ui:pagination paginationInfo="${resultFO2.paginationInfo}" type="image" jsFunction="fn_select_ordrList"/>
</div>
<input type="hidden" id="ordrPageIndex" name="pageIndex"
value="<c:out value ='${resultFO2.boMaMtngVO.pageIndex}'/>">
</section>
</form>

View File

@@ -0,0 +1,353 @@
<%@ 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 : MaAtmcSndngListR.jsp
Description : 자동 발송 관리 > 자동 발송 관리
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-10-29 이운산 최초 생성
--%>
<style>
.nice-select {
max-width: 128px !important;
min-width: 10px !important;
}
option {
overflow: hidden;
}
.td-inner{
justify-content: flex-start;
}
.td-inner .item1 {
text-align: left;
flex-basis: 100%;
}
</style>
<script>
$(document).ready(function () {
//알림톡, 문자 체크박스 라디오버튼처럼 처리
$(".radio-checkbox").each(function () {
$(this).on("change", function () {
if($(this).is(":checked")) {
//선택 체크박스
const checkBox = $(this).closest("tr").find(".radio-checkbox");
//선택 체크박스 Y 처리
checkBox.find('.useAtChk').val("Y");
//선택하지 않은 체크박스
const otherCheckBox = checkBox.not(this);
//체크 해제
otherCheckBox.prop("checked", false);
//선택하지 않은 체크박스 N 처리
otherCheckBox.closest('td').find('.useAtChk').val("N")
}
})
})
/* 자동발송 사용여부 체크박스 */
const checkboxContainers = $('.b-checkbox-container');
checkboxContainers.each(function() {
const checkbox = $(this).find('input[type="checkbox"]');
const checkboxVal = $(this).prev('input[type="hidden"]');
checkbox.change(function() {
if ($(this).prop('checked')) {
checkboxVal.val('Y');
} else {
checkboxVal.val('N');
}
});
});
$("#atmcTable tr").each(function () {
let content9 = $(this).find("td:eq(9)").text().trim();
let content7 = $(this).find("td:eq(7)").text().trim();
content7 = content7.replace(/\n/g, '<br>'); // \n을 <br>로 변환
content9 = content9.replace(/\n/g, '<br>'); // \n을 <br>로 변환
$(this).find("td:eq(7)").html(content7);
$(this).find("td:eq(9)").html(content9);
})
});
$(".select-box > select").niceSelect();
// 마케팅 사용 체크에 따른 화면 처리
$(".marktAt").each(function(){
const checkboxVal = $(this);
checkboxVal.change(function(){
const isChecked = $(this).is(':checked') ? 'Y' : 'N';
// 체크박스에서 가장 가까운 <label>을 찾고, 그 다음에 오는 <input>을 선택
const outerInput = $(this).closest('label').next('input');
// 외부 입력 필드의 값을 'Y' 또는 'N'으로 설정
outerInput.val(isChecked);
})
});
// 모든 select 요소에 대해 disabled 속성 다시 적용
$('select:disabled').each(function() {
$(this).next('.nice-select').addClass('disabled');
});
</script>
<section class="content-section">
<div class="form-control-container">
<div class="left">
<h3 class="content-section__title">자동 발송 관리</h3>
</div>
<div class="center">
</div>
<div class="right">
<div class="select-box">
<select title="쇼핑몰" name = "sopmalCd" id = "sopmalCd" onchange = "fn_select_AtmcSndng();return false;">
<c:forEach var="sopmal" items="${ sopmal }" varStatus="status">
<option value="<c:out value="${ sopmal.sopmalCd }"/>"
<c:if test="${ bOAtmcSndngVO.sopmalCd eq sopmal.sopmalCd}">selected="selected"</c:if>>
<c:out value="${ sopmal.sopmalNm }"/>
</option>
</c:forEach>
</select>
</div>
</div>
</div>
<hr class="horizontal-line">
<hr class="spacing">
<div class="table-wrapper">
<table class="table vertical" id="atmcTable">
<caption>해당 테이블에 대한 설명</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 5%;">
<col style="width: 11%;">
<col style="width: 2%;">
<col style="width: 2%;">
<col style="width: 2%;">
<col style="width: 2%;">
<col style="width: 1%;">
<col style="width: 10%;">
<col style="width: 2%;">
<col style="width: 5%;">
<col style="width: 1%;">
<col style="width: 2%;">
<col style="width: 2%;">
</colgroup>
<thead>
<tr>
<th>양식구분</th>
<th>종류</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>
<input type="hidden" id="atmcSndngList" name="atmcSndngList" value=''>
<input type="hidden" name="pageIndex" value='0'>
<c:choose>
<c:when test="${ not empty resultListMap}">
<c:forEach items="${ resultListMap }" var="list" varStatus="status">
<tr>
<td>
<c:out value="${list.groupCdNm}"/>
<input type="hidden" id="formDvCd" name="formDvCd" value='<c:out value="${list.formDvCd}"/>'>
</td>
<td>
<c:out value="${list.cdNm}"/>
<input type="hidden" id="formDtlDvCd" name="formDtlDvCd" value='<c:out value="${list.formDtlDvCd}"/>'>
</td>
<td class="text-center">
<div class="input-container">
<div class="select-box">
<select class="" name="useAt" title="해당 셀렉트에 대한 설명">
<option value="Y" <c:if test="${list.useAt eq 'Y'}">selected</c:if>>사용함</option>
<option value="N" <c:if test="${list.useAt ne 'Y'}">selected</c:if>>사용안함</option>
</select>
</div>
</div>
</td>
<td class="text-center">
<div class="manage-btn-container gap-10">
<input type="hidden" class="useAtChk" name="ntcntalkUseAt" value="<c:out value="${list.ntcntalkUseAt}"/>">
<c:if test="${not empty list.ntcntalkSndngFormInnb}">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox">
<input type="checkbox" class="radio-checkbox" value="" <c:if test="${list.ntcntalkUseAt eq 'Y'}">checked</c:if>>
<span class="check"></span>
<span class="control-label">발송</span>
</label>
</div>
<a href="/admin/ntcn/tmplt/selectAtmcSndngTmplatManage?ntcntalkChange=${list.formDvCd}" class="btn xsm gray">보기</a>
</c:if>
<c:if test="${empty list.ntcntalkSndngFormInnb}">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox">
<input type="checkbox" value="" onclick="fn_click_NoTemplate()" <c:if test="${list.ntcntalkUseAt eq 'Y'}">checked</c:if>>
<span class="check"></span>
<span class="control-label">발송</span>
</label>
</div>
<span class="btn xsm" style="border: 1px solid;">미정</span>
</c:if>
</div>
</td>
<td>
<div class="manage-btn-container gap-10">
<input type="hidden" class="useAtChk" name="smsUseAt" value="<c:out value="${list.smsUseAt}"/>">
<c:if test="${not empty list.smsSndngFormInnb}">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox">
<input type="checkbox" class="radio-checkbox" value="" <c:if test="${list.smsUseAt eq 'Y'}">checked</c:if>>
<span class="check"></span>
<span class="control-label">발송</span>
</label>
</div>
<a href="/admin/ntcn/tmplt/selectAtmcSndngTmplatManage?mssageChange=${list.formDvCd}" class="btn xsm gray">보기</a>
</c:if>
<c:if test="${empty list.smsSndngFormInnb}">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox">
<input type="checkbox" value="" onclick="fn_click_NoTemplate()" <c:if test="${list.smsUseAt eq 'Y'}">checked</c:if>>
<span class="check"></span>
<span class="control-label">발송</span>
</label>
</div>
<span class="btn xsm" style="border: 1px solid;">미정</span>
</c:if>
</div>
</td>
<td>
<div class="manage-btn-container gap-10">
<input type="hidden" name="emailUseAt" value="<c:out value="${list.emailUseAt}"/>">
<c:if test="${not empty list.emailSndngFormInnb}">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox">
<input type="checkbox" value="" <c:if test="${list.emailUseAt eq 'Y'}">checked</c:if>>
<span class="check"></span>
<span class="control-label">발송</span>
</label>
</div>
<a href="/admin/ntcn/tmplt/selectAtmcSndngTmplatManage?emailChange=${list.formDvCd}%26${list.formDtlDvCd}" class="btn xsm gray">보기</a>
</c:if>
<c:if test="${empty list.emailSndngFormInnb}">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox">
<input type="checkbox" value="" onclick="fn_click_NoTemplate()" <c:if test="${list.emailUseAt eq 'Y'}">checked</c:if>>
<span class="check"></span>
<span class="control-label">발송</span>
</label>
</div>
<span class="btn xsm" style="border: 1px solid;">미정</span>
</c:if>
</div>
</td>
<td class="">
<label class="b-checkbox checkbox is-medium">
<input type="checkbox" class="marktAt" value=""
<c:if test="${list.marktAt == 'Y'}">
checked
</c:if>
onclick="return false;"
>
<span class="check"></span>
</label>
<input type="hidden" name="marktAt" value="<c:out value="${list.marktAt}"/>">
</td>
<td class="">
<c:out value="${list.colctPd}"/>
</td>
<td>
<c:choose>
<c:when test="${not empty list.sndngStdrDe}">
<div class="input-container">
<div class="select-box">
<select name="sndngStdrDe" title="발송기준일자">
<c:forEach var="i" begin="0"
end="30">
<option value="<fmt:formatNumber value="${i}" pattern="0"/>"
<c:if test="${list.sndngStdrDe eq i}">selected</c:if>>
<fmt:formatNumber value="${i}" pattern="0"/>
</option>
</c:forEach>
</select>
</div>
</div>
</c:when>
<c:otherwise>
</c:otherwise>
</c:choose>
</td>
<td class=text-center">
<c:out value="${list.suffcnStdr}"/>
</td>
<td class="text-center">
<c:choose>
<c:when test="${list.dplctSndngAt eq 'N'}">
불가
</c:when>
<c:otherwise>
가능
</c:otherwise>
</c:choose>
</td>
<td class="text-center">
<c:out value="${list.sndngDc}"/>
</td>
<td class="text-center">
<c:choose>
<c:when test="${list.marktAt == 'Y'}">
<div class="input-container">
<div class="select-box">
<select name="sndngStdrTme" title="발송시간">
<c:forEach var="i" begin="${shopAtmcSndntTme.smsAtmcSndngLmttBgntme}"
end="${shopAtmcSndntTme.smsAtmcSndngLmttEndtme}">
<option value="<fmt:formatNumber value="${i}" pattern="00"/>"
<c:if test="${list.sndngStdrTme eq i}">selected</c:if>>
<fmt:formatNumber value="${i}" pattern="00"/>
</option>
</c:forEach>
</select>
</div>
</div>
</c:when>
<c:otherwise>
</c:otherwise>
</c:choose>
</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>

View File

@@ -0,0 +1,157 @@
<%@ 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 : MaAtmcSndngManage.jsp
Description : 자동 발송 관리
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-03-04 리브가 최초 생성
2024-05-01 이대환 내용 수정
--%>
<!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/admin/Include.jsp" %>
</head>
<script>
$(document).ready(function () {
fn_select_AtmcSndng() ;
$('#listForm').on('keydown', function(e) {
if (e.keyCode == 13) {
e.preventDefault();
$('#searchBtn').click();
}
});
});
/* ********************************************************
* 자동 발송 관리 TAB
******************************************************** */
const fn_select_AtmcSndng = function () {
const sopmalCd = $("#sopmalCd").val();
$.ajax({
type: 'post',
url: '/admin/ntcn/atmcsndng/selectAtmcSndngManageListInqire',
data: {
'sopmalCd' : sopmalCd
},
success: function (resultHtml) {
$("#selectMssageAtmcSndngBtn").removeClass("active");
$("#selectEmailAtmcSndngBtn").removeClass("active");
$("#selectNtcntalkAtmcSndngBtn").removeClass("active");
$("#selectListInqireForm").removeClass("active");
$("#selectAtmcSndngBtn").addClass("active");
$("#selectAtmcSndng").addClass("active");
$('#selectAtmcSndng').html(resultHtml);
$("#atmcSndngUpdateBtn").css("display" ,"block");
}
});
}
/* ********************************************************
* 자동 발송 템플릿 미존재 알림
******************************************************** */
const fn_click_NoTemplate = function () {
event.preventDefault();
alert('정의되지 않은 템플릿입니다.');
}
/**********************************************
* 자동 발송 관리 수정
***********************************************/
const fn_update_AtmcSndng = function() {
if (confirm('자동 발송 관리를 <spring:message code="confirm.common.update"/>')) {
let dataArr = [];
$("tr").each(function () {
let dataObj = {};
$(this).find("input, select").each(function(){
const name = $(this).attr("name");
const value = $(this).val();
if(name) {
dataObj[name] = value;
}
dataArr.push(dataObj);
})
})
const atmcSndngList = JSON.stringify(dataArr);
$("#atmcSndngList").val(atmcSndngList);
$.ajax({
type : 'post',
url : '/admin/ntcn/atmcsndng/updateAtmcSndngManage',
data : $('form').serialize(),
// dataType: 'text',
success : function(data) {
const str = JSON.parse(data.resBody.result);
if (str.status === '0') {
alert('<spring:message code="success.common.update"/>');
} else {
alert('<spring:message code="fail.common.update"/>');
}
}
});
}
}
</script>
<body>
<%-- 상단메뉴 공통화 적용 : 2023-11-30 / 박철민 추가 --%>
<%@include file ="/WEB-INF/views/comm/admin/Header.jsp" %>
<main class="main">
<%-- 좌측메뉴 공통화 적용 : 2023-11-30 / 박철민 추가 --%>
<%@include file ="/WEB-INF/views/comm/admin/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" onclick="fn_update_AtmcSndng()" id="atmcSndngUpdateBtn">저장하기
</button>
</div>
</div>
<%-- <div class="content-tab">--%>
<%-- <button class="content-tab__btn active" id="selectAtmcSndngBtn" onclick="fn_select_AtmcSndng()">자동 발송 관리</button>--%>
<%-- <button class="content-tab__btn" id="selectMssageAtmcSndngBtn" onclick="fn_select_MssageAtmcSndng()">메시지 발송 내역</button>--%>
<%-- <button class="content-tab__btn" id="selectEmailAtmcSndngBtn" onclick="fn_select_EmailAtmcSndng()">이메일 발송 내역</button>--%>
<%-- <button class="content-tab__btn" id="selectNtcntalkAtmcSndngBtn" onclick="fn_select_NtcntalkAtmcSndng()">알림톡 발송 내역</button>--%>
<%-- </div>--%>
<form>
<div class="content-tab__content active" id="selectAtmcSndng">
<%--자동 발송 관리--%>
</div>
</form>
<form id='listForm' name="listForm">
<input type="hidden" id="pageIndex" name="pageIndex"/>
<div class="content-tab__content" id="selectListInqireForm">
<%--자동 발송 내역--%>
</div>
</form>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</div>
</main>
<div id="MessageAtmcSndngDtlDiv"></div>
<div id="EmailAtmcSndngDtlDiv"></div>
</body>
</html>

View File

@@ -0,0 +1,413 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%-- <link rel="stylesheet" href="<c:url value='/daumeditor/css/content_view.css'/>"> --%>
<%-- <link rel="stylesheet" href="<c:url value='/daumeditor/css/content_wysiwyg.css'/>"> --%>
<%-- <link rel="stylesheet" href="<c:url value='/daumeditor/css/editor.css'/>"> --%>
<%-- <link rel="stylesheet" href="<c:url value='/daumeditor/css/popup.css'/>"> --%>
<style>
#tx_horizontalrule_menu a{
width: 150px; height: 29px;
}
</style>
<!-- <div class="body"> -->
<!-- 에디터 시작 -->
<!--
@decsription
등록하기 위한 Form으로 상황에 맞게 수정하여 사용한다. Form 이름은 에디터를 생성할 때 설정값으로 설정한다.
-->
<!-- <form name="tx_editor_form" id="tx_editor_form" action="http://posttestserver.com/post.php" method="post" accept-charset="utf-8"> -->
<!-- 에디터 컨테이너 시작 -->
<div id="tx_trex_container" class="tx-editor-container" style="width: 100%">
<!-- 툴바 - 기본 시작 -->
<!--
@decsription
툴바 버튼의 그룹핑의 변경이 필요할 때는 위치(왼쪽, 가운데, 오른쪽) 에 따라 <li> 아래의 <div>의 클래스명을 변경하면 된다.
tx-btn-lbg: 왼쪽, tx-btn-bg: 가운데, tx-btn-rbg: 오른쪽, tx-btn-lrbg: 독립적인 그룹
드롭다운 버튼의 크기를 변경하고자 할 경우에는 넓이에 따라 <li> 아래의 <div>의 클래스명을 변경하면 된다.
tx-slt-70bg, tx-slt-59bg, tx-slt-42bg, tx-btn-43lrbg, tx-btn-52lrbg, tx-btn-57lrbg, tx-btn-71lrbg
tx-btn-48lbg, tx-btn-48rbg, tx-btn-30lrbg, tx-btn-46lrbg, tx-btn-67lrbg, tx-btn-49lbg, tx-btn-58bg, tx-btn-46bg, tx-btn-49rbg
-->
<div id="tx_toolbar_basic" class="tx-toolbar tx-toolbar-basic"><div class="tx-toolbar-boundary">
<ul class="tx-bar tx-bar-left">
<li class="tx-list">
<div id="tx_fontfamily" unselectable="on" class="tx-slt-70bg tx-fontfamily">
<a href="javascript:;" title="글꼴">굴림</a>
</div>
<div id="tx_fontfamily_menu" class="tx-fontfamily-menu tx-menu" unselectable="on"></div>
</li>
</ul>
<ul class="tx-bar tx-bar-left">
<li class="tx-list">
<div unselectable="on" class="tx-slt-42bg tx-fontsize" id="tx_fontsize">
<a href="javascript:;" title="글자크기">9pt</a>
</div>
<div id="tx_fontsize_menu" class="tx-fontsize-menu tx-menu" unselectable="on"></div>
</li>
</ul>
<ul class="tx-bar tx-bar-left tx-group-font">
<li class="tx-list">
<div unselectable="on" class=" tx-btn-lbg tx-bold" id="tx_bold">
<a href="javascript:;" class="tx-icon" title="굵게 (Ctrl+B)">굵게</a>
</div>
</li>
<li class="tx-list">
<div unselectable="on" class=" tx-btn-bg tx-underline" id="tx_underline">
<a href="javascript:;" class="tx-icon" title="밑줄 (Ctrl+U)">밑줄</a>
</div>
</li>
<li class="tx-list">
<div unselectable="on" class=" tx-btn-bg tx-italic" id="tx_italic">
<a href="javascript:;" class="tx-icon" title="기울임 (Ctrl+I)">기울임</a>
</div>
</li>
<li class="tx-list">
<div unselectable="on" class=" tx-btn-bg tx-strike" id="tx_strike">
<a href="javascript:;" class="tx-icon" title="취소선 (Ctrl+D)">취소선</a>
</div>
</li>
<li class="tx-list">
<div unselectable="on" class=" tx-slt-tbg tx-forecolor" id="tx_forecolor">
<a href="javascript:;" class="tx-icon" title="글자색">글자색</a>
<a href="javascript:;" class="tx-arrow" title="글자색 선택">글자색 선택</a>
</div>
<div id="tx_forecolor_menu" class="tx-menu tx-forecolor-menu tx-colorpallete"
unselectable="on"></div>
</li>
<li class="tx-list">
<div unselectable="on" class=" tx-slt-brbg tx-backcolor" id="tx_backcolor">
<a href="javascript:;" class="tx-icon" title="글자 배경색">글자 배경색</a>
<a href="javascript:;" class="tx-arrow" title="글자 배경색 선택">글자 배경색 선택</a>
</div>
<div id="tx_backcolor_menu" class="tx-menu tx-backcolor-menu tx-colorpallete"
unselectable="on"></div>
</li>
</ul>
<ul class="tx-bar tx-bar-left tx-group-align">
<li class="tx-list">
<div unselectable="on" class=" tx-btn-lbg tx-alignleft" id="tx_alignleft">
<a href="javascript:;" class="tx-icon" title="왼쪽정렬 (Ctrl+,)">왼쪽정렬</a>
</div>
</li>
<li class="tx-list">
<div unselectable="on" class=" tx-btn-bg tx-aligncenter" id="tx_aligncenter">
<a href="javascript:;" class="tx-icon" title="가운데정렬 (Ctrl+.)">가운데정렬</a>
</div>
</li>
<li class="tx-list">
<div unselectable="on" class=" tx-btn-bg tx-alignright" id="tx_alignright">
<a href="javascript:;" class="tx-icon" title="오른쪽정렬 (Ctrl+/)">오른쪽정렬</a>
</div>
</li>
<li class="tx-list">
<div unselectable="on" class=" tx-btn-rbg tx-alignfull" id="tx_alignfull">
<a href="javascript:;" class="tx-icon" title="양쪽정렬">양쪽정렬</a>
</div>
</li>
</ul>
<ul class="tx-bar tx-bar-left tx-group-tab">
<li class="tx-list">
<div unselectable="on" class=" tx-btn-lbg tx-indent" id="tx_indent">
<a href="javascript:;" title="들여쓰기 (Tab)" class="tx-icon">들여쓰기</a>
</div>
</li>
<li class="tx-list">
<div unselectable="on" class=" tx-btn-rbg tx-outdent" id="tx_outdent">
<a href="javascript:;" title="내어쓰기 (Shift+Tab)" class="tx-icon">내어쓰기</a>
</div>
</li>
</ul>
<ul class="tx-bar tx-bar-left tx-group-list">
<li class="tx-list">
<div unselectable="on" class="tx-slt-31lbg tx-lineheight" id="tx_lineheight">
<a href="javascript:;" class="tx-icon" title="줄간격">줄간격</a>
<a href="javascript:;" class="tx-arrow" title="줄간격">줄간격 선택</a>
</div>
<div id="tx_lineheight_menu" class="tx-lineheight-menu tx-menu" unselectable="on"></div>
</li>
<li class="tx-list">
<div unselectable="on" class="tx-slt-31rbg tx-styledlist" id="tx_styledlist">
<a href="javascript:;" class="tx-icon" title="리스트">리스트</a>
<a href="javascript:;" class="tx-arrow" title="리스트">리스트 선택</a>
</div>
<div id="tx_styledlist_menu" class="tx-styledlist-menu tx-menu" unselectable="on"></div>
</li>
</ul>
<ul class="tx-bar tx-bar-left tx-group-etc">
<li class="tx-list">
<div unselectable="on" class=" tx-btn-lbg tx-emoticon" id="tx_emoticon">
<a href="javascript:;" class="tx-icon" title="이모티콘">이모티콘</a>
</div>
<div id="tx_emoticon_menu" class="tx-emoticon-menu tx-menu" unselectable="on"></div>
</li>
<li class="tx-list">
<div unselectable="on" class=" tx-btn-bg tx-link" id="tx_link">
<a href="javascript:;" class="tx-icon" title="링크 (Ctrl+K)">링크</a>
</div>
<div id="tx_link_menu" class="tx-link-menu tx-menu"></div>
</li>
<li class="tx-list">
<div unselectable="on" class=" tx-btn-bg tx-specialchar" id="tx_specialchar">
<a href="javascript:;" class="tx-icon" title="특수문자">특수문자</a>
</div>
<div id="tx_specialchar_menu" class="tx-specialchar-menu tx-menu"></div>
</li>
<li class="tx-list">
<div unselectable="on" class=" tx-btn-bg tx-table" id="tx_table">
<a href="javascript:;" class="tx-icon" title="표만들기">표만들기</a>
</div>
<div id="tx_table_menu" class="tx-table-menu tx-menu" unselectable="on">
<div class="tx-menu-inner">
<div class="tx-menu-preview"></div>
<div class="tx-menu-rowcol"></div>
<div class="tx-menu-deco"></div>
<div class="tx-menu-enter"></div>
</div>
</div>
</li>
<li class="tx-list">
<div unselectable="on" class=" tx-btn-rbg tx-horizontalrule" id="tx_horizontalrule">
<a href="javascript:;" class="tx-icon" title="구분선">구분선</a>
</div>
<div id="tx_horizontalrule_menu" class="tx-horizontalrule-menu tx-menu" unselectable="on"></div>
</li>
</ul>
<ul class="tx-bar tx-bar-left">
<li class="tx-list">
<div unselectable="on" class=" tx-btn-lbg tx-richtextbox" id="tx_richtextbox">
<a href="javascript:;" class="tx-icon" title="글상자">글상자</a>
</div>
<div id="tx_richtextbox_menu" class="tx-richtextbox-menu tx-menu">
<div class="tx-menu-header">
<div class="tx-menu-preview-area">
<div class="tx-menu-preview"></div>
</div>
<div class="tx-menu-switch">
<div class="tx-menu-simple tx-selected"><a><span>간단 선택</span></a></div>
<div class="tx-menu-advanced"><a><span>직접 선택</span></a></div>
</div>
</div>
<div class="tx-menu-inner">
</div>
<div class="tx-menu-footer">
<img class="tx-menu-confirm"
src="/daumeditor/images/icon/editor/btn_confirm.gif?rv=1.0.1" alt=""/>
<img class="tx-menu-cancel" hspace="3"
src="/daumeditor/images/icon/editor/btn_cancel.gif?rv=1.0.1" alt=""/>
</div>
</div>
</li>
<li class="tx-list">
<div unselectable="on" class=" tx-btn-bg tx-quote" id="tx_quote">
<a href="javascript:;" class="tx-icon" title="인용구 (Ctrl+Q)">인용구</a>
</div>
<div id="tx_quote_menu" class="tx-quote-menu tx-menu" unselectable="on"></div>
</li>
<li class="tx-list">
<div unselectable="on" class=" tx-btn-bg tx-background" id="tx_background">
<a href="javascript:;" class="tx-icon" title="배경색">배경색</a>
</div>
<div id="tx_background_menu" class="tx-menu tx-background-menu tx-colorpallete"
unselectable="on"></div>
</li>
<li class="tx-list">
<div unselectable="on" class=" tx-btn-rbg tx-dictionary" id="tx_dictionary">
<a href="javascript:;" class="tx-icon" title="사전">사전</a>
</div>
</li>
</ul>
<ul class="tx-bar tx-bar-left tx-group-undo">
<li class="tx-list">
<div unselectable="on" class=" tx-btn-lbg tx-undo" id="tx_undo">
<a href="javascript:;" class="tx-icon" title="실행취소 (Ctrl+Z)">실행취소</a>
</div>
</li>
<li class="tx-list">
<div unselectable="on" class=" tx-btn-rbg tx-redo" id="tx_redo">
<a href="javascript:;" class="tx-icon" title="다시실행 (Ctrl+Y)">다시실행</a>
</div>
</li>
</ul>
<ul class="tx-bar tx-bar-left">
<li class="tx-list">
<div unselectable="on" id="tx_image" class="tx-image tx-btn-trans">
<a href="javascript:;" title="사진" class="tx-text">사진</a>
</div>
</li>
</ul>
<ul class="tx-bar tx-bar-right">
<li class="tx-list">
<div unselectable="on" class="tx-btn-nlrbg tx-advanced" id="tx_advanced">
<a href="javascript:;" class="tx-icon" title="툴바 더보기">툴바 더보기</a>
</div>
</li>
</ul>
<ul class="tx-bar tx-bar-right">
<li class="tx-list">
<div unselectable="on" class="tx-btn-lrbg tx-fullscreen" id="tx_fullscreen">
<a href="javascript:;" class="tx-icon" title="넓게쓰기 (Ctrl+M)">넓게쓰기</a>
</div>
</li>
</ul>
<ul class="tx-bar tx-bar-right">
<li class="tx-list" style="padding-top: 0">
<div unselectable="on" class="tx-switchtoggle" id="tx_switchertoggle">
<a href="javascript:;" title="에디터 타입">에디터</a>
</div>
</li>
</ul>
</div></div>
<!-- 툴바 - 기본 끝 -->
<!-- 툴바 - 더보기 시작 -->
<div id="tx_toolbar_advanced" class="tx-toolbar tx-toolbar-advanced"><div class="tx-toolbar-boundary">
<ul class="tx-bar tx-bar-left">
<li class="tx-list">
<div class="tx-tableedit-title"></div>
</li>
</ul>
<ul class="tx-bar tx-bar-left tx-group-align">
<li class="tx-list">
<div unselectable="on" class="tx-btn-lbg tx-mergecells" id="tx_mergecells">
<a href="javascript:;" class="tx-icon2" title="병합">병합</a>
</div>
<div id="tx_mergecells_menu" class="tx-mergecells-menu tx-menu" unselectable="on"></div>
</li>
<li class="tx-list">
<div unselectable="on" class="tx-btn-bg tx-insertcells" id="tx_insertcells">
<a href="javascript:;" class="tx-icon2" title="삽입">삽입</a>
</div>
<div id="tx_insertcells_menu" class="tx-insertcells-menu tx-menu" unselectable="on"></div>
</li>
<li class="tx-list">
<div unselectable="on" class="tx-btn-rbg tx-deletecells" id="tx_deletecells">
<a href="javascript:;" class="tx-icon2" title="삭제">삭제</a>
</div>
<div id="tx_deletecells_menu" class="tx-deletecells-menu tx-menu" unselectable="on"></div>
</li>
</ul>
<ul class="tx-bar tx-bar-left tx-group-align">
<li class="tx-list">
<div id="tx_cellslinepreview" unselectable="on" class="tx-slt-70lbg tx-cellslinepreview">
<a href="javascript:;" title="선 미리보기"></a>
</div>
<div id="tx_cellslinepreview_menu" class="tx-cellslinepreview-menu tx-menu"
unselectable="on"></div>
</li>
<li class="tx-list">
<div id="tx_cellslinecolor" unselectable="on" class="tx-slt-tbg tx-cellslinecolor">
<a href="javascript:;" class="tx-icon2" title="선색">선색</a>
<div class="tx-colorpallete" unselectable="on"></div>
</div>
<div id="tx_cellslinecolor_menu" class="tx-cellslinecolor-menu tx-menu tx-colorpallete"
unselectable="on"></div>
</li>
<li class="tx-list">
<div id="tx_cellslineheight" unselectable="on" class="tx-btn-bg tx-cellslineheight">
<a href="javascript:;" class="tx-icon2" title="두께">두께</a>
</div>
<div id="tx_cellslineheight_menu" class="tx-cellslineheight-menu tx-menu"
unselectable="on"></div>
</li>
<li class="tx-list">
<div id="tx_cellslinestyle" unselectable="on" class="tx-btn-bg tx-cellslinestyle">
<a href="javascript:;" class="tx-icon2" title="스타일">스타일</a>
</div>
<div id="tx_cellslinestyle_menu" class="tx-cellslinestyle-menu tx-menu" unselectable="on"></div>
</li>
<li class="tx-list">
<div id="tx_cellsoutline" unselectable="on" class="tx-btn-rbg tx-cellsoutline">
<a href="javascript:;" class="tx-icon2" title="테두리">테두리</a>
</div>
<div id="tx_cellsoutline_menu" class="tx-cellsoutline-menu tx-menu" unselectable="on"></div>
</li>
</ul>
<ul class="tx-bar tx-bar-left">
<li class="tx-list">
<div id="tx_tablebackcolor" unselectable="on" class="tx-btn-lrbg tx-tablebackcolor"
style="background-color:#9aa5ea;">
<a href="javascript:;" class="tx-icon2" title="테이블 배경색">테이블 배경색</a>
</div>
<div id="tx_tablebackcolor_menu" class="tx-tablebackcolor-menu tx-menu tx-colorpallete"
unselectable="on"></div>
</li>
</ul>
<ul class="tx-bar tx-bar-left">
<li class="tx-list">
<div id="tx_tabletemplate" unselectable="on" class="tx-btn-lrbg tx-tabletemplate">
<a href="javascript:;" class="tx-icon2" title="테이블 서식">테이블 서식</a>
</div>
<div id="tx_tabletemplate_menu" class="tx-tabletemplate-menu tx-menu tx-colorpallete"
unselectable="on"></div>
</li>
</ul>
</div></div>
<!-- 툴바 - 더보기 끝 -->
<!-- 편집영역 시작 -->
<!-- 에디터 Start -->
<div id="tx_canvas" class="tx-canvas">
<div id="tx_loading" class="tx-loading"><div><img src="/daumeditor/images/icon/editor/loading2.png" width="113" height="21" align="absmiddle"/></div></div>
<div id="tx_canvas_wysiwyg_holder" class="tx-holder" style="display:block;">
<iframe id="tx_canvas_wysiwyg" name="tx_canvas_wysiwyg" allowtransparency="true" frameborder="0"></iframe>
</div>
<div class="tx-source-deco">
<div id="tx_canvas_source_holder" class="tx-holder">
<textarea id="tx_canvas_source" rows="30" cols="30"></textarea>
</div>
</div>
<div id="tx_canvas_text_holder" class="tx-holder">
<textarea id="tx_canvas_text" rows="30" cols="30"></textarea>
</div>
</div>
<!-- 높이조절 Start -->
<div id="tx_resizer" class="tx-resize-bar">
<div class="tx-resize-bar-bg"></div>
<img id="tx_resize_holder" src="/daumeditor/images/icon/editor/skin/01/btn_drag01.gif" width="58" height="12" unselectable="on" alt="" />
</div>
<!-- 편집영역 끝 -->
<!-- 첨부박스 시작 -->
<!-- 파일첨부박스 Start -->
<div id="tx_attach_div" class="tx-attach-div">
<div id="tx_attach_txt" class="tx-attach-txt">파일 첨부</div>
<div id="tx_attach_box" class="tx-attach-box">
<div class="tx-attach-box-inner">
<div id="tx_attach_preview" class="tx-attach-preview"><p></p><img src="/daumeditor/images/icon/editor/pn_preview.gif" width="147" height="108" unselectable="on"/></div>
<div class="tx-attach-main">
<div id="tx_upload_progress" class="tx-upload-progress"><div>0%</div><p>파일을 업로드하는 중입니다.</p></div>
<ul class="tx-attach-top">
<li id="tx_attach_delete" class="tx-attach-delete"><a>전체삭제</a></li>
<li id="tx_attach_size" class="tx-attach-size">
파일: <span id="tx_attach_up_size" class="tx-attach-size-up"></span>/<span id="tx_attach_max_size"></span>
</li>
<li id="tx_attach_tools" class="tx-attach-tools">
</li>
</ul>
<ul id="tx_attach_list" class="tx-attach-list"></ul>
</div>
</div>
</div>
</div>
<!-- 첨부박스 끝 -->
</div>
<!-- 에디터 컨테이너 끝 -->
<!-- </form> -->
<!-- </div> -->
<!-- 에디터 끝 -->
<script src="/daumeditor/js/editor_default_set.js">
// Editor.modify({
// "attachments": function () { /* 저장된 첨부가 있을 경우 배열로 넘김, 위의 부분을 수정하고 아래 부분은 수정없이 사용 */
// var allattachments = [];
// for (var i in attachments) {
// allattachments = allattachments.concat(attachments[i]);
// }
// return allattachments;
// }(),
// "content": document.getElementById("sample_contents_source") /* 내용 문자열, 주어진 필드(textarea) 엘리먼트 */
// });
</script>

View File

@@ -0,0 +1,130 @@
<%@ 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 : MaEmailSndngDtlPopupMbrTb.jsp
Description : 이메일 상세 조회 팝업 > 수신자 정보
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2023-01-29 김혜인 최초생성
2024-04-04 이대환 내용 수정
--%>
<script>
</script>
<hr class="horizontal-line">
<section class="content-section">
<h2 class="content-section__title">수신 내역</h2>
<div class="form-control-container">
<div class="left">
<div class="search-number">
<span class="search-number__text">총 <strong><c:out value="${ resultListMapMbr.paginationInfo.totalRecordCount }"/></strong>건</span>
</div>
</div>
<div class="center">
</div>
<div class="right">
<div class="select-box">
<select id="mbrPageUnit" name="pageUnit" title="페이지당 출력될 목록건수" onchange="fn_select_mbrInfo(1);">
<c:forEach items="${ resultListMapMbr.paginationInfo.pageUnitArr }" var="pageUnit" varStatus="pageUnitStatus">
<option value="<c:out value="${ pageUnit }"/>" <c:if test="${ resultListMapMbr.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>
<div class="center">
</div>
<div class="right">
</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: 15%;">
<col style="width: 15%;">
<col style="width: 20%;">
</colgroup>
<thead>
<tr>
<th>번호</th>
<th>수신주소</th>
<th>수신자명</th>
<th>수신상태</th>
<th>발송일자</th>
</tr>
</thead>
<tbody>
<c:choose>
<c:when test="${ not empty resultListMapMbr.boCtrlMap}">
<c:forEach items="${ resultListMapMbr.boCtrlMap }" var="list" varStatus="status">
<tr>
<td><c:out value="${resultListMapMbr.paginationInfo.totalRecordCount - list.rnum + 1 }" /></td>
<td>
<span class="table-ellipsis">
<c:out value = "${list.recpntEmail}"/>
</span>
</td>
<td>
<c:out value = "${list.recpntNm}"/>
</td>
<td>
<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 'FAIL'}">
실패
</c:when>
<c:when test="${list.sttus eq 'OK'}">
성공
</c:when>
<c:otherwise>
정의되지 않음
</c:otherwise>
</c:choose>
</td>
<td>
<c:out value = "${list.sndngDt}"/>
</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>
<input type = "hidden" id = "mbrPageIndex" name = "pageIndex" value = "${resultListMapMbr.bOMaEmailSrchVO.pageIndex}"/>
<input type = "hidden" id = "emailSndngInnb" name = "emailSndngInnb" value = "${resultListMapMbr.bOMaEmailSrchVO.emailSndngInnb}"/>
<div class="pagination__container">
<ui:pagination paginationInfo="${resultListMapMbr.paginationInfo}" type="image" jsFunction="fn_select_mbrInfo"/>
</div>

View File

@@ -0,0 +1,80 @@
<%@ 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 : MaEmailSndngDtlPopupR.jsp
Description : 이메일 상세 조회 팝업 (발신 정보)
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2023-01-29 김혜인 최초생성
2024-04-04 이대환 내용 수정
--%>
<script>
$(document).ready(function () {
let encodedCn = '${ resultMapDtl.boCtrlMap.cn }';
let decodedCn = $('<textarea/>').html(encodedCn).text();
$("#emailCn").html(decodedCn);
});
</script>
<!-- 이메일 본문 조회 모달 -->
<div id="email-check-pop" class="modal" style="max-width: 900px;">
<div class="modal-header">
<h4>이메일 본문 조회</h4>
</div>
<div class="modal-content">
<h2 class="content-section__title">발신 정보</h2>
<div class="table-wrapper">
<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>
<div class="td-inner">
<c:out value="${ resultMapDtl.boCtrlMap.snder }"/>
</div>
</td>
<th>발송일시</th>
<td>
<div class="td-inner">
<c:out value="${ resultMapDtl.boCtrlMap.registDt }"/>
</div>
</td>
</tr>
<tr>
<th>제목</th>
<td colspan="3">
<div class="td-inner">
<c:out value="${ resultMapDtl.boCtrlMap.sj }"/>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<h2 class="content-section__title">내용</h2>
<div class="table-wrapper overflow-y-auto" style = "height: 400px;" >
<div class="ck-content" id="emailCn" style="padding-left : 25px;">
<c:out value="${ resultMapDtl.boCtrlMap.cn }" escapeXml="false"/>
</div>
</div>
<!-- <hr class="spacing">
<form id = "popupForm">
<div id = "mbrInfoDiv"></div>
</form> -->
</div>
<div class="modal-footer">
<a href="#" rel="modal:close" class="btn outline">닫기</a>
</div>
</div>

View File

@@ -0,0 +1,126 @@
<%@ 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 : MaEmailSndngDtlsListInqireR.jsp
Description : 이메일 발송 내역 목록
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2023-01-29 김혜인 최초생성
2024-04-04 이대환 내용 수정
--%>
<script>
</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="${ resultListMap.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_list(1);">
<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">
</div>
<div class="center">
</div>
<div class="right">
<button class="btn outline sm" type = "button" id = "excelDwldBtn" onclick = "fn_excel_download()">
<i class="icon icon_excel"></i>
다운로드
</button>
</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: 15%;">
<col style="width: 15%;">
<%-- <col style="width: 6%;"> --%>
<col style="width: 14%;">
<col style="width: 12%;">
<col style="width: 8%;">
</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 resultListMap.boCtrlMap}">
<c:forEach items="${ resultListMap.boCtrlMap }" var="list" varStatus="status">
<tr>
<td><c:out value="${resultListMap.paginationInfo.totalRecordCount - list.rnum + 1 }" /></td>
<td class="left">
<span class="table-ellipsis">
<c:out value = "${list.sj}"/>
</span>
</td>
<td>
<c:out value = "${list.email}"/>
</td>
<td>
<c:out value = "${list.sndngEmail}"/>
</td>
<%-- <td>
<c:out value = "${list.sndngCnt}"/>명
</td> --%>
<td>
<c:out value = "${list.sopmalNm}"/>
</td>
<td>
<c:out value = "${list.registDt}"/>
</td>
<td>
<div class="manage-btn-container">
<button type = "button" class="btn xsm primary outline" onclick = "fn_move_dtl_page(<c:out value = "${list.emailLogInnb}"/>)">
조회
</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>
</section>
<div class="pagination__container">
<ui:pagination paginationInfo="${resultListMap.paginationInfo}" type="image" jsFunction="fn_select_list"/>
</div>

View File

@@ -0,0 +1,375 @@
<%@ 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 : MaEmailSndngDtlsListInqireRForm.jsp
Description : 이메일 발송 내역 목록 조회 검색 폼
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-02-01 김혜인 최초생성
2024-04-04 이대환 내용 수정
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@include file ="/WEB-INF/views/comm/admin/Include.jsp" %>
</head>
<script>
$(document).ready(function () {
//form메소드에서 pageIndex, pageUnit 갖고옴
let pageIndex = '<c:out value="${ resultListMap.bOMaEmailSrchVO.pageIndex }"/>';
let pageUnit = '<c:out value="${ resultListMap.bOMaEmailSrchVO.pageUnit }"/>';
//초기 날짜 세팅
const today = new Date();
$('#srchStrtSndngDt').datepicker().datepicker("setDate",today);
$('#srchEndSndngDt').datepicker().datepicker("setDate",today);
fn_select_list(pageIndex, pageUnit);
//지정일
// fn_set_date('srchStrtSndngDt','srchEndSndngDt','srchEndSndngDt');
fn_set_date_email('srchStrtSndngDt','srchEndSndngDt','srchEndSndngDt');
$('#listForm').on('keydown', function(e) {
if (e.keyCode == 13) {
e.preventDefault();
$('#searchBtn').click();
}
});
// 페이징 제자리 새로고침(Submit) 방지
$('body').on('click', 'button.pagination__item.active', function(event) {
event.preventDefault();
});
});
/**********************************************************
* 검색 조건 이벤트 설정
***********************************************************/
/*
* 검색조건 > 날짜 전체 클릭 시 날짜 설정 초기화
*/
const fn_reset_date = function(strtDate,endDate){
$('#'+strtDate).datepicker().datepicker("setDate",'');
$('#'+endDate).datepicker().datepicker("setDate",'');
}
/* ********************************************************
* 목록 조회
******************************************************** */
const fn_select_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;
}
}
$.ajax({
type: "post",
url : "<c:url value="/admin/ntcn/email/selectEmailSndngDtlsListInqire"/>",
data : dataStr,
success:function(resultHtml) {
$('#pageDiv').html(resultHtml);
$('#pageUnit').niceSelect();
}
});
}
/* ********************************************************
* 이메일 발송 상세조회
******************************************************** */
const fn_move_dtl_page = function(emailLogInnb) {
$.ajax({
type: "post",
url : '/admin/ntcn/email/selectEmailSndngDtlPopup',
data : {emailLogInnb : emailLogInnb},
success:function(resultHtml) {
fn_close_modal('email-check-pop');
$('#modalDiv').html(resultHtml);
//form메소드에서 pageIndex, pageUnit 갖고옴
/* let pageIndex = '<c:out value="${ resultListMapMbr.bOMaEmailSrchVO.pageIndex }"/>';
let pageUnit = '<c:out value="${ resultListMapMbr.bOMaEmailSrchVO.pageUnit }"/>';
fn_select_mbrInfo(pageIndex,pageUnit,emailLogInnb); */
$('#email-check-pop').modal();
}
});
}
/* ********************************************************
* 이메일 발송 상세조회 발신조회
******************************************************** */
const fn_select_mbrInfo = function(pageIndex, pageUnit,emailLogInnb) {
let dataStr;
if(!pageIndex) {
$('#mbrPageIndex').val(1);
} else {
$('#mbrPageIndex').val(pageIndex);
}
if(!pageUnit) {
dataStr = $('#popupForm').serialize();
} else {
if($('#mbrPageUnit').length){
$('#mbrPageUnit').val(pageUnit);
dataStr = $('#popupForm').serialize();
} else {
dataStr = $('#popupForm').serialize()+'&pageUnit='+pageUnit;
}
}
dataStr = dataStr+'&emailLogInnb='+emailLogInnb
$.ajax({
type: "post",
url : "<c:url value="/admin/ntcn/email/selectEmailSndngDtlPopupMbrTb"/>",
data : dataStr,
success:function(resultHtml) {
$('#mbrInfoDiv').html(resultHtml);
$('#mbrPageUnit').niceSelect();
}
});
}
/*********************************************************
* 엑셀 다운로드
*********************************************************/
const fn_excel_download = function() {
$('#listForm').attr('action', '<c:url value="/admin/ntcn/email/selectEmailSndngDtlsListExcelDwld"/>');
$('#listForm').attr('method', 'post');
$('#listForm').submit();
}
history.replaceState({}, null, location.pathname);
const fn_reset_form_email = function(formId){
if($('#'+formId)[0]){
const radioArr = [];
$('#'+formId).eq(0).find('input,select,textarea').each(function(){
let type = this.type;
let tag = this.tagName.toLowerCase();
let numberArr = $('#'+formId).find('.number'); //20240223수정
if (type === 'text') {
if(type === 'text' || tag === 'textarea'){
this.value = '';
}
if(numberArr.length > 0){//20240223수정
numberArr.each(function(idx){
numberArr.eq(idx).val('0');
});
}
} else if (type === 'checkbox') {
this.checked = false;
} else if (type === 'radio') {
this.checked = false;
if(!radioArr.includes($(this).prop('name'))) {
radioArr.push($(this).prop('name'));
radioArr.forEach((element) => $('input[name='+element+']').eq(0).prop('checked', 'checked'));
}
} else if (tag === 'select') {
this.selectedIndex = 0;//20240223수정
$(".select-box > select").niceSelect('update');
}
});
//20240418 기능추가=> 20240604코드 수정
/*버튼 초기화*/
let dateRangeBtn = $('#' + formId).find('.dateRange-btnContainer');
if (dateRangeBtn.length > 0) {
dateRangeBtn.each(function (idx) {
let notBtn = dateRangeBtn.eq(idx).find(".dateRange-btn");
notBtn.each(function (idx1) {
if (idx1 === 1) {
notBtn.eq(idx1).addClass("selected");
} else {
notBtn.eq(idx1).removeClass("selected");
}
});
});
}
//$('#'+formId)[0].reset();
}
}
/**************************************************************
* 검색 날짜 지정시 날짜 변경
* 파라미터 설명{
* fromObjId : 시작일
* toObjId : 종료일
* stdObjeId : 기준일(시작일'fromObjId' or 종료일'toObjId')
* date : 계산할 날짜 => '-(전) or +(후)' + '계산할 숫자' + 'D(일) or M(월) or Y(년)'
* Ex) 현재 날짜에서 하루 전(후) => -1D(+1D)
* 현재 날짜는 0
* }
****************************************************************/
const fn_set_date_email = function (fromObjId, toObjId, stdObjeId, date) {
/* fromObj, toObj 값 변경 시 일자선택 버튼 초기화 추가 */
$('#' + fromObjId).on('change', function () {
$(this).parent().parent().find('.dateRange-btn').each(function () {
$(this).removeClass('selected');
});
fn_check_fromTo('#' + fromObjId, '#' + toObjId, 'date');
});
$('#' + toObjId).on('change', function () {
$(this).parent().parent().find('.dateRange-btn').each(function () {
$(this).removeClass('selected');
});
fn_check_fromTo('#' + fromObjId, '#' + toObjId, 'date');
});
/* 기준일 기본값 설정(종료일이 기준일)
* ※toObjId or fromObjId로 설정 가능*/
if (!stdObjeId) {
stdObjeId = toObjId;
}
/* 계산할 숫자 기본값 설정(현재 날짜가 기본값) 및 date 유효성 검사*/
if (!date) {
/* onready시 전체 버튼 셀렉티드 class 부여*/
//date = '0';
$('#' + fromObjId).parent().parent().find('.dateRange-btn').eq(1).addClass("selected");
} else {
//date의 형태가 숫자+'D, M, Y'경우인지 확인
let regex = /^\d+[DMY]$/;
if (!regex.test(date)) {
date = '0';
}
}
if (date != null) {
/* 기준일을 현재 날짜로 설정*/
$('#' + stdObjeId).datepicker().datepicker("setDate", new Date());
/* 기준일에 따라 계산 방법 분기
stdObjeId = toObjId => '-'+date
= fromObjId => date*/
if (stdObjeId == toObjId) {
date = '-' + date;
$('#' + fromObjId).datepicker().datepicker("setDate", date);
} else {
$('#' + toObjId).datepicker().datepicker("setDate", date);
}
}
}
</script>
<body>
<%@include file ="/WEB-INF/views/comm/admin/Header.jsp" %>
<main class="main">
<%@include file ="/WEB-INF/views/comm/admin/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" action="<c:url value='/admin/ntcn/email/selectEmailSndngDtlsListInqire'/>">
<input type="hidden" id="pageIndex" name="pageIndex" value="${ resultSrchMap.bOMaEmailSrchVO.pageIndex }"/>
<section class="content-section">
<div class="table-wrapper">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 12%;">
<col style="width: auto;">
<col style="width: 12%;">
<col style="width: 25%;">
</colgroup>
<tr>
<th>검색어</th>
<td>
<div class="td-inner">
<div class="select-box">
<select title="검색 타입" name = "srchType">
<option value="">전체</option>
<option value="SJ">이메일 제목</option>
<option value="sndEml">발송주소</option>
<option value="rcvEml">수신주소</option>
</select>
</div>
<input class="input-text lg" type="text" title="검색어" name = "srchStr">
</div>
</td>
<th>쇼핑몰</th>
<td>
<div class="td-inner">
<div class="select-box">
<select title="쇼핑몰" id="srchShop" name="srchShop">
<option value="ALL">전체</option>
<c:forEach var = "brand" items = "${ resultSrchMap.code}">
<option value="${brand.sopmalCd}">${brand.sopmalNm}</option>
</c:forEach>
</select>
</div>
</div>
</td>
</tr>
<tr>
<th>발송일</th>
<td colspan="3">
<div class="td-inner">
<div class="input-container">
<input type="text" id="srchStrtSndngDt" class="datepicker" title="시작 날짜 선택" name = "srchStrtSndngDt"
autocomplete="off">
<span class="tilde">~</span>
<input type="text" id="srchEndSndngDt" class="datepicker" title="종료 날짜 선택" name = "srchEndSndngDt"
autocomplete="off">
</div>
<div class="dateRange-btnContainer" id = "searchDateRange">
<button type="button" class="dateRange-btn" id = "yesterday"
onclick = "fn_set_date_email('srchStrtSndngDt','srchEndSndngDt','srchEndSndngDt','1D')">어제</button>
<button type="button" class="dateRange-btn selected" id = "today"
onclick = "fn_set_date_email('srchStrtSndngDt','srchEndSndngDt','srchEndSndngDt','0')" >오늘</button>
<button type="button" class="dateRange-btn" id = "threeDays"
onclick = "fn_set_date_email('srchStrtSndngDt','srchEndSndngDt','srchEndSndngDt','3D')">3일간</button>
<button type="button" class="dateRange-btn" id = "sevenDays"
onclick = "fn_set_date_email('srchStrtSndngDt','srchEndSndngDt','srchEndSndngDt','7D')">일주일</button>
<button type="button" class="dateRange-btn" id = "oneMonth"
onclick = "fn_set_date_email('srchStrtSndngDt','srchEndSndngDt','srchEndSndngDt','1M')">1개월</button>
<button type="button" class="dateRange-btn" id = "threeMonth"
onclick = "fn_set_date_email('srchStrtSndngDt','srchEndSndngDt','srchEndSndngDt','3M')">3개월</button>
<button type="button" class="dateRange-btn" id = "sixMonth"
onclick = "fn_set_date_email('srchStrtSndngDt','srchEndSndngDt','srchEndSndngDt','6M')">6개월</button>
<button type="button" class="dateRange-btn" id = "year"
onclick = "fn_set_date_email('srchStrtSndngDt','srchEndSndngDt','srchEndSndngDt','1Y')">1년</button>
<button type="button" class="dateRange-btn"
onclick = "fn_reset_date('srchStrtSndngDt','srchEndSndngDt')">전체</button>
</div>
</div>
</td>
</tr>
</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_email('listForm'); return false;">초기화</button>
<button class="btn primary" id="searchBtn" type="button" onclick="fn_select_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>
</div>
<div id="modalDiv">
</div>
</main>
</body>
</html>

View File

@@ -0,0 +1,100 @@
<%@ 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" %>
<!DOCTYPE html>
<html>
<script>
$(document).ready(function () {
//전화번호 처리
$(".recptnNb").each(function () {
const recptnNbStr = $(this).text();
const recptnNb = fn_format_mbtlnb(recptnNbStr.replace(/\s+/g, ''));
$(this).text(recptnNb);
})
});
</script>
<!-- 문자메시지 조회 모달 -->
<div id="sms-check-pop" class="modal" style="max-width: 900px;">
<div class="modal-header">
<h4>문자메시지 조회</h4>
</div>
<div class="modal-content">
<h2 class="content-section__title">발신 정보</h2>
<div class="table-wrapper">
<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>
<div class="td-inner">
<c:out value="${ resultMap.mssageDtlMap.sndngNb }"/>
</div>
</td>
<th>수신번호</th>
<td>
<div class="td-inner recptnNb">
<c:out value="${ resultMap.mssageDtlMap.recptnNb }"/>
</div>
</td>
</tr>
<tr>
<th>발송상태</th>
<td>
<div class="td-inner">
<c:choose>
<c:when test="${resultMap.mssageDtlMap.sttus eq 'REG'}">
등록
</c:when>
<c:when test="${resultMap.mssageDtlMap.sttus eq 'BAD'}">
불량
</c:when>
<c:when test="${resultMap.mssageDtlMap.sttus eq 'WAIT'}">
대기
</c:when>
<c:when test="${resultMap.mssageDtlMap.sttus eq 'SEND'}">
전송
</c:when>
<c:when test="${resultMap.mssageDtlMap.sttus eq 'CAN'}">
취소
</c:when>
<c:when test="${resultMap.mssageDtlMap.sttus eq 'FAIL'}">
실패
</c:when>
<c:when test="${resultMap.mssageDtlMap.sttus eq 'OK'}">
성공
</c:when>
</c:choose>
</div>
</td>
<th>발송일시</th>
<td>
<div class="td-inner">
<c:out value="${ resultMap.mssageDtlMap.sndngDt }"/>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<h2 class="content-section__title">내용</h2>
<div class="table-wrapper overflow-y-auto" style = "height: 400px;" >
<pre><c:out value="${ resultMap.mssageDtlMap.head }"/></pre>
<pre><c:out value="${ resultMap.mssageDtlMap.cn }"/></pre>
<pre><c:out value="${ resultMap.mssageDtlMap.tail }"/></pre>
</div>
</div>
<div class="modal-footer">
<a href="#" rel="modal:close" class="btn outline">닫기</a>
</div>
</div>
</html>

View File

@@ -0,0 +1,195 @@
<%@ 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 : MaSmsSndngDtlsListInqireR.jsp
Description : 문자메시지 발송 내역 목록 조회
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-02-19 김혜인 최초생성
2024-06-20 이대환 내용수정
--%>
<style>
.table.vertical th.left, .table.vertical td.left {
white-space: normal;
max-width: 850px;
word-wrap: break-word;
}
</style>
<script>
$(document).ready(function () {
//전화번호 처리
$(".recptnNb").each(function () {
const recptnNbStr = $(this).text();
const recptnNb = fn_format_mbtlnb(recptnNbStr.replace(/\s+/g, ''));
$(this).text(recptnNb);
})
});
</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="${ resultListMap.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_list(1);">
<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">
</div>
<div class="center">
</div>
<div class="right">
<!-- <button class="btn outline sm" type = "button" id = "excelDwldBtn" onclick = "fn_excel_download()">
<i class="icon icon_excel"></i>
다운로드
</button> -->
</div>
</div>
<hr class="spacing">
<div class="table-wrapper">
<table class="table vertical">
<caption>해당 테이블에 대한 설명</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 1%;">
<col style="width: 8%;">
<col style="width: 8%;">
<col style="width: 5%;">
<col style="width: 8%;">
<col style="width: 50%">
<col style="width: 12%;">
<col style="width: 8%;">
</colgroup>
<thead>
<tr>
<th>번호</th>
<th>발송번호</th>
<th>수신번호</th>
<th>종류</th>
<th>쇼핑몰</th>
<th>내용요약</th>
<th>
등록일시
<br>
발송일시
</th>
<th>발송상태</th>
<th>결과코드</th>
<th>본문</th>
</tr>
</thead>
<tbody>
<c:if test="${ !empty resultListMap.mssageMap.smsSndngList}">
<c:forEach var="list" items="${ resultListMap.mssageMap.smsSndngList }" varStatus="status">
<tr>
<td><c:out value="${ list.rnum }"/></td>
<td>
<c:out value="${ list.sndngNb }"/>
</td>
<td class="recptnNb">
<c:out value="${ list.recptnNb }"/>
</td>
<td>
<c:choose>
<c:when test="${list.dv eq 'SMS'}">
SMS
</c:when>
<c:when test="${list.dv eq 'LMS' or list.dv eq 'MMS'}">
LMS/MMS
</c:when>
<c:when test="${list.dv eq 'AT'}">
알림톡
</c:when>
<c:when test="${list.dv eq 'AI'}">
알림톡
</c:when>
</c:choose>
</td>
<td>
<c:out value="${ list.sopmalNm }"/>
</td>
<td class="left">
<c:out value="${ list.cn }"/>
</td>
<td>
<c:out value="${ list.registDt }"/>
<br>
<c:out value="${ list.sndngDt}"/>
</td>
<td>
<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>
</td>
<td>
<c:out value="${ list.rsltCd }"/>
</td>
<td>
<div class="manage-btn-container">
<button type = "button" class="btn xsm primary outline"
onclick = "fn_move_dtl_page(
'<c:out value="${ list.sopmalCd }"/>',
'<c:out value="${ list.smsInnb }"/>',
'<c:out value="${ list.recptnNb }"/>',
'<c:out value="${ list.smsToInnb }"/>')">
조회
</button>
</div>
</td>
</tr>
</c:forEach>
</c:if>
<c:if test="${ empty resultListMap.mssageMap.smsSndngList }">
<tr>
<td class="row-no-data" colspan="12">조회된 데이터가 없습니다.</td>
</tr>
</c:if>
</tbody>
</table>
</div>
</section>
<div class="pagination__container">
<ui:pagination paginationInfo="${ resultListMap.paginationInfo}" type="image" jsFunction="fn_select_list"/>
</div>
<script src="/admin/js/script.js" defer=""></script>

View File

@@ -0,0 +1,380 @@
<%@ 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 : MaSmsSndngDtlsListInqireRForm.jsp
Description : 문자메시지 발송 내역 목록 조회 검색 폼
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-02-19 김혜인 최초생성
2024-06-20 이대환 내용수정
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@include file ="/WEB-INF/views/comm/admin/Include.jsp" %>
</head>
<script>
$(document).ready(function(){
//form메소드에서 pageIndex, pageUnit 갖고옴
let pageIndex = '<c:out value="${ resultListMap.bOMssageSrchVO.pageIndex }"/>';
let pageUnit = '<c:out value="${ resultListMap.bOMssageSrchVO.pageUnit }"/>';
//초기 날짜 세팅
const today = new Date();
$('#srchStrtSndngDt').datepicker().datepicker("setDate",today);
$('#srchEndSndngDt').datepicker().datepicker("setDate",today);
fn_select_list(pageIndex, pageUnit);
//검색 조건 발송일
// fn_set_date('srchStrtSndngDt','srchEndSndngDt','srchEndSndngDt');
fn_set_date_sms('srchStrtSndngDt','srchEndSndngDt','srchEndSndngDt');
//검색 조건 종류 항목 체크 여부에 따른 체크 해제
$(".tyChk").on("click",function(){
fn_ctr_pCheckbox("#tyChkAll",".tyChk");
});
//검색 조건 상태 항목 체크 여부에 따른 체크 해제
$(".sttusChk").on("click",function(){
fn_ctr_pCheckbox("#sttusChkAll",".sttusChk");
});
$('#listForm').on('keydown', function(e) {
if (e.keyCode == 13) {
e.preventDefault();
$('#searchBtn').click();
}
});
// 페이징 제자리 새로고침(Submit) 방지
$('body').on('click', 'button.pagination__item.active', function(event) {
event.preventDefault();
});
});
/**********************************************************
* 검색 조건 이벤트 설정
***********************************************************/
/*
* 검색조건 > 날짜 전체 클릭 시 날짜 설정 초기화
*/
const fn_reset_date = function(strtDate,endDate){
$('#'+strtDate).datepicker().datepicker("setDate",'');
$('#'+endDate).datepicker().datepicker("setDate",'');
}
/* ********************************************************
* 목록 조회
******************************************************** */
const fn_select_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;
}
}
$.ajax({
type: "post",
url : "/admin/ntcn/sms/selectSmsSndngDtlsListInqire",
data : dataStr,
success:function(resultHtml) {
$('#pageDiv').html(resultHtml);
$('#pageUnit').niceSelect();
}
});
}
/* ********************************************************
* 상세 조회
******************************************************** */
const fn_move_dtl_page = function(srchSopmalCd, srchSmsInnb, srchRecptnNb, srchSmsToInnb) {
$.ajax({
type: "post",
url : '/admin/ntcn/sms/selectSmsSndngDtlPopup',
data : {
srchSopmalCd : srchSopmalCd,
srchSmsInnb : srchSmsInnb,
srchRecptnNb : srchRecptnNb,
srchSmsToInnb : srchSmsToInnb
},
success:function(resultHtml) {
fn_close_modal('sms-check-pop');
$('#modalDiv').html(resultHtml);
//form메소드에서 pageIndex, pageUnit 갖고옴
$('#sms-check-pop').modal();
}
});
}
/*********************************************************
* 엑셀 다운로드
*********************************************************/
const fn_excel_download = function() {
$('#listForm').attr('action', '<c:url value="/admin/ntcn/sms/selectSmsSndngDtlsListExcelDwld"/>');
$('#listForm').attr('method', 'post');
$('#listForm').submit();
}
history.replaceState({}, null, location.pathname);
/**************************************************************
* 검색 날짜 지정시 날짜 변경
* 파라미터 설명{
* fromObjId : 시작일
* toObjId : 종료일
* stdObjeId : 기준일(시작일'fromObjId' or 종료일'toObjId')
* date : 계산할 날짜 => '-(전) or +(후)' + '계산할 숫자' + 'D(일) or M(월) or Y(년)'
* Ex) 현재 날짜에서 하루 전(후) => -1D(+1D)
* 현재 날짜는 0
* }
****************************************************************/
const fn_set_date_sms = function (fromObjId, toObjId, stdObjeId, date) {
/* fromObj, toObj 값 변경 시 일자선택 버튼 초기화 추가 */
$('#' + fromObjId).on('change', function () {
$(this).parent().parent().find('.dateRange-btn').each(function () {
$(this).removeClass('selected');
});
fn_check_fromTo('#' + fromObjId, '#' + toObjId, 'date');
});
$('#' + toObjId).on('change', function () {
$(this).parent().parent().find('.dateRange-btn').each(function () {
$(this).removeClass('selected');
});
fn_check_fromTo('#' + fromObjId, '#' + toObjId, 'date');
});
/* 기준일 기본값 설정(종료일이 기준일)
* ※toObjId or fromObjId로 설정 가능*/
if (!stdObjeId) {
stdObjeId = toObjId;
}
/* 계산할 숫자 기본값 설정(현재 날짜가 기본값) 및 date 유효성 검사*/
if (!date) {
/* onready시 전체 버튼 셀렉티드 class 부여*/
//date = '0';
$('#' + fromObjId).parent().parent().find('.dateRange-btn').eq(1).addClass("selected");
} else {
//date의 형태가 숫자+'D, M, Y'경우인지 확인
let regex = /^\d+[DMY]$/;
if (!regex.test(date)) {
date = '0';
}
}
if (date != null) {
/* 기준일을 현재 날짜로 설정*/
$('#' + stdObjeId).datepicker().datepicker("setDate", new Date());
/* 기준일에 따라 계산 방법 분기
stdObjeId = toObjId => '-'+date
= fromObjId => date*/
if (stdObjeId == toObjId) {
date = '-' + date;
$('#' + fromObjId).datepicker().datepicker("setDate", date);
} else {
$('#' + toObjId).datepicker().datepicker("setDate", date);
}
}
}
</script>
<body>
<%@include file ="/WEB-INF/views/comm/admin/Header.jsp" %>
<main class="main">
<%@include file ="/WEB-INF/views/comm/admin/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" action="<c:url value='selectSmsSndngDtlsListInqire'/>">
<input type="hidden" id="pageIndex" name="pageIndex" value="${ resultMap.bOSmsSrchVO.pageIndex }"/>
<section class="content-section" id="search-section">
<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>
<tr>
<th>검색어</th>
<td>
<div class="td-inner">
<div class="select-box">
<select title="해당 셀렉트에 대한 설명" name = "srchType">
<option value="cn">발송 내용
</option>
<option value="recpntNb">수신 번호
</option>
<option value="sndngNb">회신 번호
</option>
<option value="cstmrIdnb">수신자명
</option>
</select>
</div>
<input class="input-text md" type="text" title="해당 인풋에 대한 설명" name = "srchStr">
</div>
</td>
<th>쇼핑몰</th>
<td>
<div class="td-inner">
<div class="select-box">
<select title="해당 셀렉트에 대한 설명" name = "srchSopmalCd">
<c:forEach var = "brand" items = "${resultMap.brand}">
<option value="${brand.sopmalCd}"><c:out value = "${brand.sopmalNm}"/></option>
</c:forEach>
</select>
</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 = "tyChkAll">
<span class="check"></span>
<span class="control-label">전체</span>
</label>
<label class="b-checkbox checkbox">
<input type="checkbox" value="SMS" class = "tyChk" name="srchDv">
<span class="check"></span>
<span class="control-label">SMS</span>
</label>
<label class="b-checkbox checkbox">
<input type="checkbox" value="LMS" class = "tyChk" 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 = "tyChk" 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>
<label class="b-checkbox checkbox">
<input type="checkbox" class="sttusChk" name="srchSttus" value="ok">
<span class="check"></span>
<span class="control-label">성공</span>
</label>
<label class="b-checkbox checkbox">
<input type="checkbox" class="sttusChk" name="srchSttus" value="fail">
<span class="check"></span>
<span class="control-label">실패</span>
</label>
<label class="b-checkbox checkbox">
<input type="checkbox" class="sttusChk" name="srchSttus" value="reg">
<span class="check"></span>
<span class="control-label">등록</span>
</label>
<label class="b-checkbox checkbox">
<input type="checkbox" class="sttusChk" name="srchSttus" value="wait">
<span class="check"></span>
<span class="control-label">대기</span>
</label>
<label class="b-checkbox checkbox">
<input type="checkbox" class="sttusChk" name="srchSttus" value="send">
<span class="check"></span>
<span class="control-label">전송</span>
</label>
<label class="b-checkbox checkbox">
<input type="checkbox" class="sttusChk" name="srchSttus" value="bad">
<span class="check"></span>
<span class="control-label">불량</span>
</label>
</div>
</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"
onclick = "fn_set_date_sms('srchStrtSndngDt','srchEndSndngDt','srchEndSndngDt','1D')">어제</button>
<button type="button" class="dateRange-btn" id = "today"
onclick = "fn_set_date_sms('srchStrtSndngDt','srchEndSndngDt','srchEndSndngDt','0')">오늘</button>
<button type="button" class="dateRange-btn" id = "threeDays"
onclick = "fn_set_date_sms('srchStrtSndngDt','srchEndSndngDt','srchEndSndngDt','3D')">3일간</button>
<button type="button" class="dateRange-btn" id = "sevenDays"
onclick = "fn_set_date_sms('srchStrtSndngDt','srchEndSndngDt','srchEndSndngDt','7D')">일주일</button>
<button type="button" class="dateRange-btn" id = "oneMonth"
onclick = "fn_set_date_sms('srchStrtSndngDt','srchEndSndngDt','srchEndSndngDt','1M')">1개월</button>
<button type="button" class="dateRange-btn" id = "threeMonth"
onclick = "fn_set_date_sms('srchStrtSndngDt','srchEndSndngDt','srchEndSndngDt','3M')">3개월</button>
</div>
</div>
</td>
</tr>
</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(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>
</div>
<div id="modalDiv">
</div>
</main>
</body>
</html>

View File

@@ -0,0 +1,166 @@
<%@ 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 : MaStlMssageListInqireR.jsp.jsp
Description : 통합관리자 문자 정산 페이지
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-05-10 이운산 최초 생성
--%>
<script>
$('#excelDwld').on('click', function(){
$('#listForm').attr('action', '<c:url value="/admin/ntcn/stl/excelFileDownload"/>');
$('#listForm').attr('method', 'post');
$('#listForm').submit();
});
</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>
</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">
<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>
<%-- <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 colspan="3">합계 :</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>
</section>

View File

@@ -0,0 +1,243 @@
<%@ 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 : MaStlMssageListInqireRForm.jsp
Description : 정산 내역 폼
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-07-05 이운산 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@include file ="/WEB-INF/views/comm/admin/Include.jsp" %>
</head>
<script>
$(document).ready(function () {
/* ********************************************************
* 정산 내역 조회
******************************************************** */
$("#searchBtn").on("click", function (){
fn_select_stl_list(1);
})
const fn_select_stl_list = function(pageIndex, pageUnit) {
let dataStr = null;
console.log(pageIndex);
if(!pageIndex || pageIndex === '') {
$('#pageIndex').val(1);
} else {
$('#pageIndex').val(pageIndex);
}
pageUnit = $("#pageUnit").val();
console.log(pageUnit);
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="/admin/ntcn/stl/selectMaStlMssageListInqire"/>",
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_list_mssage(1);
}
})
<%--/**--%>
<%--* 매장 목록 처리--%>
<%-- */--%>
<%--const storeList = "${resultMap.storeList}";--%>
<%--console.log(storeList);--%>
<%--const jsonString = storeList.replace(/=/g, ':') // =을 :로 변환--%>
<%-- .replace(/(\w+):/g, '"$1":') // 키를 "키"로 변환--%>
<%-- .replace(/'/g, '"');--%>
<%--console.log(jsonString)--%>
<%--const jsonList = JSON.parse(jsonString)--%>
<%--console.log(jsonList)--%>
<%--$("#strDv").on("change", function () {--%>
<%-- const selectStrDv = $(this).val();--%>
<%-- console.log(selectStrDv)--%>
<%-- const listSelect = $("#storeList");--%>
<%-- console.log(listSelect)--%>
<%-- const filterdStoreList = storeList.filter(store => store)--%>
<%--})--%>
});
</script>
<body>
<%@include file ="/WEB-INF/views/comm/admin/Header.jsp" %>
<main class="main">
<%@include file ="/WEB-INF/views/comm/admin/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>
<section class="content-section" id="search-section">
<h3 class="content-section__title">메시지 정산</h3>
<form id="listForm">
<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="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="strInnb" id="storeList">
<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>
<tr>
<th>검색 기간</th>
<td colspan="3">
<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>
<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>
</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" id="resetBtn" type="button" onclick="fn_reset_form('search-section'); return false;">초기화</button>
<button class="btn primary" id="searchBtn" type="button">검색</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>
</div>
</main>

View File

@@ -0,0 +1,810 @@
<%@ 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 : MaAtmcSndngTmplatManage.jsp
Description : 자동발송 템플릿 관리
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-02-21 리브가 최초 생성
2024-04-17 이대환 Email>Manage 분리
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@include file ="/WEB-INF/views/comm/admin/Include.jsp" %>
<link rel="stylesheet" href="<c:url value='/daumeditor/css/editor.css'/>">
<script src="<c:url value='/daumeditor/js/editor_loader.js?environment=development'/>"></script>
</head>
<script>
//회원 검색 윈도우 팝업 화면중앙 열기
/* function PopupCenter(url, title, w, h) {
const dualScreenLeft = window.screenLeft != undefined ? window.screenLeft : screen.left;
const dualScreenTop = window.screenTop != undefined ? window.screenTop : screen.top;
width = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : screen.width;
height = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : screen.height;
const left = ((width / 2) - (w / 2)) + dualScreenLeft;
const top = ((height / 2) - (h / 2)) + dualScreenTop;
const newWindow = window.open(url, title, 'scrollbars=yes, width=' + w + ', height=' + h + ', top=' + top + ', left=' + left);
if (window.focus) {
newWindow.focus();
}
} */
$(document).ready(function () {
var urlParams = new URLSearchParams(window.location.search);
/* 자동발송관리 URL 파라미터 체크 */
if (urlParams.has('emailChange')) {
var paramValue = urlParams.get('emailChange');
fn_select_EmailTmplatForm(paramValue);
} else if (urlParams.has('mssageChange')) {
var paramValue = urlParams.get('mssageChange');
fn_select_MssageTmplatForm(paramValue);
} else if (urlParams.has('ntcntalkChange')) {
var paramValue = urlParams.get('ntcntalkChange');
fn_select_NtcntalkTmplatForm(paramValue);
} else {
let emailFormDvCd = $("[name='r-group01']:checked").val();
if(emailFormDvCd == null || emailFormDvCd == 'undefined') {
emailFormDvCd = 'FORM_DV_CMMN&01';
}
fn_select_EmailTmplatForm(emailFormDvCd);
}
fn_swith_CommonSubModal();
$('form').on('keydown', function(e) {
if (e.keyCode == 13) {
e.preventDefault();
}
});
$("#selectEmailTmplatBtn").on("click", function () {
fn_select_tmplat_sopmal();
})
$("#selectMssageTmplatBtn").on("click", function () {
fn_select_tmplat_sopmal();
})
$("#selectNtcntalkTmplatBtn").on("click", function () {
fn_select_tmplat_sopmal();
})
});
const fn_select_tmplat_sopmal = function () {
if($("#selectEmailTmplat").hasClass("active")) {
let emailFormDvCd = $("[name='r-group01']:checked").val();
if(emailFormDvCd == null || emailFormDvCd === undefined) {
emailFormDvCd = $("[name='r-group01']").first().val();
}
if(emailFormDvCd === undefined) {
emailFormDvCd = 'FORM_DV_CMMN';
}
fn_select_EmailTmplatForm(emailFormDvCd)
}
if($("#selectMssageTmplat").hasClass("active")) {
let mssageFormDvCd = $(".tab-box__btn.current").val();
if(mssageFormDvCd == null || mssageFormDvCd === undefined) {
mssageFormDvCd = $(".tab-box__btn").first().val();
}
if(mssageFormDvCd === undefined) {
mssageFormDvCd = 'FORM_DV_CMMN';
}
fn_select_MssageTmplatForm(mssageFormDvCd);
}
if($("#selectNtcntalkTmplat").hasClass("active")) {
let ntcnTalkFormDvCd = $(".tab-box__btn.current").val();
if(ntcnTalkFormDvCd == null || ntcnTalkFormDvCd === undefined) {
ntcnTalkFormDvCd = $(".tab-box__btn").first().val();
}
if(ntcnTalkFormDvCd === undefined) {
ntcnTalkFormDvCd = 'FORM_DV_CMMN';
}
fn_select_NtcntalkTmplatForm(ntcnTalkFormDvCd);
}
}
/* ********************************************************
* 이메일 템플릿 목록 TAB
******************************************************** */
let emailfirst = 0;
const fn_select_EmailTmplatForm = function (templatIndex) {
$("#selectMssageTmplatBtn").removeClass("active");
$("#selectNtcntalkTmplatBtn").removeClass("active");
$("#selectMssageTmplat").removeClass("active");
$("#selectNtcntalkTmplat").removeClass("active");
$("#selectEmailTmplatBtn").addClass("active");
$("#selectEmailTmplat").addClass("active");
$("#tmpltUpdateBtn").css("display" ,"block");
if(!emailfirst){
fn_select_AtmcSndngTmplat(templatIndex);
emailfirst = 1;
}else{
$('#formDvCd').val(templatIndex);
fn_select_EmailTmplat(templatIndex);
}
}
/* ********************************************************
* 메시지 템플릿 목록 TAB
******************************************************** */
const fn_select_MssageTmplatForm = function (templatDv) {
$("#selectEmailTmplatBtn").removeClass("active");
$("#selectNtcntalkTmplatBtn").removeClass("active");
$("#selectEmailTmplat").removeClass("active");
$("#selectNtcntalkTmplat").removeClass("active");
$("#selectMssageTmplatBtn").addClass("active");
$("#selectMssageTmplat").addClass("active");
$("#tmpltUpdateBtn").css("display" ,"block");
fn_select_AtmcSndngTmplat(templatDv);
}
/* ********************************************************
* 알림톡 템플릿 목록 TAB
******************************************************** */
const fn_select_NtcntalkTmplatForm = function (templatDv) {
$("#selectEmailTmplatBtn").removeClass("active");
$("#selectMssageTmplatBtn").removeClass("active");
$("#selectEmailTmplat").removeClass("active");
$("#selectMssageTmplat").removeClass("active");
$("#selectNtcntalkTmplatBtn").addClass("active");
$("#selectNtcntalkTmplat").addClass("active");
$("#tmpltUpdateBtn").css("display" ,"none");
fn_select_AtmcSndngTmplat(templatDv);
}
/* ********************************************************
* 자동발송 템플릿 목록 조회
******************************************************** */
const fn_select_AtmcSndngTmplat = function(templatIndex) {
let dataStr;
let url;
let target;
$('#formDvCd').val(templatIndex);
// dataStr = $('#formDvCd').serialize();
const sopmalCd = $("#sopmalCdList").val();
$('#srchFormDvCd').val(templatIndex);
$("#srchSopmalCd").val(sopmalCd);
dataStr = $("#listForm").serialize();
if ($('#selectEmailTmplat').hasClass('active')) {
//이메일 템플릿의 경우 단건 조회
url = '/admin/ntcn/tmplt/selectEmailAtmcSndngTmplatOneInqireForm';
target = $('#selectEmailTmplat');
} else if ($('#selectMssageTmplat').hasClass('active')) {
url = '/admin/ntcn/tmplt/selectMssageAtmcSndngTmplatInqireForm';
target = $('#selectMssageTmplat');
} else if ($('#selectNtcntalkTmplat').hasClass('active')) {
url = '/admin/ntcn/tmplt/selectNtcntalkAtmcSndngTmplatInqireForm';
target = $('#selectNtcntalkTmplat');
}
$.ajax({
type: 'post',
url : url,
data: dataStr,
success : function (resultHtml) {
target.html(resultHtml);
}
});
}
/**********************************************
* 자동발송 템플릿 수정
***********************************************/
const fn_update_AtmcSndngTmplatForm = function(formId) {
let confirmation;
let url;
let dataStr;
let dataArr = [];
let tmplatList = null;
if ($('#selectEmailTmplat').hasClass('active')) {
$("#emailCn").val(Editor.getContent());
confirmation = confirm('이메일 자동 발송 템플릿을 <spring:message code="confirm.common.update"/>');
url = '/admin/ntcn/tmplt/updateEmailAtmcSndngTmplatUpdt';
} else if ($('#selectMssageTmplat').hasClass('active')) {
confirmation = confirm('메시지 자동 발송 템플릿을 <spring:message code="confirm.common.update"/>');
url = '/admin/ntcn/tmplt/updateMssageAtmcSndngTmplatUpdt';
$(".sms-manage").each(function () {
let dataObj = {};
$(this).find("input, .textarea").each(function(){
const name = $(this).attr("name");
const value = $(this).val();
if(name) {
dataObj[name] = value;
}
})
dataArr.push(dataObj);
})
tmplatList = JSON.stringify(dataArr);
$("#tmplatList").val(tmplatList);
} else if ($('#selectNtcntalkTmplat').hasClass('active')) {
confirmation = confirm('알림톡 자동 발송 템플릿을 <spring:message code="confirm.common.update"/>');
url = '/admin/ntcn/tmplt/updateNtcntalkAtmcSndngTmplatUpdt';
$("#ntcntalkPopup").each(function () {
let dataObj = {};
$(this).find("input, .textarea, select").each(function(){
const name = $(this).attr("name");
const value = $(this).val();
if(name) {
dataObj[name] = value;
}
})
dataArr.push(dataObj);
})
tmplatList = JSON.stringify(dataArr);
$("#ntcntalkPopup").find("#ntcnTmplatList").val(tmplatList);
}
dataStr = formId ? $('#' + formId).serialize() : $('form').serialize();
if (confirmation) {
$.ajax({
type : 'post',
url : url,
data : dataStr,
success : function(data) {
alert('<spring:message code="success.common.update"/>');
if(formId){
location.replace('/admin/ntcn/tmplt/selectAtmcSndngTmplatManage?ntcntalkChange='+$('#formDvCd').val());
}
},
error : function(request, status, error) {
console.log(error)
}
});
}
}
/* ********************************************************
* 치환코드 팝업 내용 수정
******************************************************** */
const fn_swith_SubModal = function (substitutionList) {
$.each(substitutionList, function(index, value) {
switch (value) {
/* 템플릿 개별 치환코드(빈도 높음) */
case "sopmalCd":
substitutionList[index] = {cd : "{"+substitutionList[index]+"}", nm : "쇼핑몰코드"};
break;
case "shopName":
substitutionList[index] = {cd : "{"+substitutionList[index]+"}", nm : "쇼핑몰명"};
break;
case "bbsNm":
substitutionList[index] = {cd : "{"+substitutionList[index]+"}", nm : "게시판명"};
break;
case "userid":
substitutionList[index] = {cd : "{"+substitutionList[index]+"}", nm : "회원id"};
break;
case "user_name":
substitutionList[index] = {cd : "{"+substitutionList[index]+"}", nm : "회원명"};
break;
case "coupon_count":
substitutionList[index] = {cd : "{"+substitutionList[index]+"}", nm : "만료쿠폰 종수"};
break;
case "mypage_short_url":
substitutionList[index] = {cd : "{"+substitutionList[index]+"}", nm : "마이페이지 바로가기URL"};
break;
case "mileage_rest":
substitutionList[index] = {cd : "{"+substitutionList[index]+"}", nm : "소멸예정마일리지"};
break;
case "goodsNm":
substitutionList[index] = {cd : "{"+substitutionList[index]+"}", nm : "장바구니상품명 <br>→ 여러건일 경우 + \"외 xxx건\""};
break;
case "cscTelnb":
substitutionList[index] = {cd : "{"+substitutionList[index]+"}", nm : "고객센터전화번호"};
break;
case "rejectTelnb":
substitutionList[index] = {cd : "{"+substitutionList[index]+"}", nm : "수신거부전화번호"};
break;
case "ordrInnb":
substitutionList[index] = {cd : "{"+substitutionList[index]+"}", nm : "주문번호"};
break;
case "mbrgradNm":
substitutionList[index] = {cd : "{"+substitutionList[index]+"}", nm : "회원등급명"};
break;
case "coupNm":
substitutionList[index] = {cd : "{"+substitutionList[index]+"}", nm : "쿠폰명"};
break;
case "validpdBgnDt":
substitutionList[index] = {cd : "{"+substitutionList[index]+"}", nm : "쿠폰유효기간 시작일"};
break;
case "validpdEndDt":
substitutionList[index] = {cd : "{"+substitutionList[index]+"}", nm : "쿠폰유효기간 종료일"};
break;
case "shopDomain":
substitutionList[index] = {cd : "{"+substitutionList[index]+"}", nm : "도메인주소"};
break;
case "marktRecptnAgreAt":
substitutionList[index] = {cd : "{"+substitutionList[index]+"}", nm : "수신동의상태 (광고수신동의여부)"};
break;
case "marktRecptnAgreUpdtDt":
substitutionList[index] = {cd : "{"+substitutionList[index]+"}", nm : "수신동의일 (광고수신동의변경일시)"};
break;
case "Nm":
substitutionList[index] = {cd : "{"+substitutionList[index]+"}", nm : "이름"};
break;
case "agree_short_url":
substitutionList[index] = {cd : "{"+substitutionList[index]+"}", nm : "수신동의 URL"};
break;
case "ordno":
substitutionList[index] = {cd : "{"+substitutionList[index]+"}", nm : "주문번호"};
break;
case "go_Item":
substitutionList[index] = {cd : "{"+substitutionList[index]+"}", nm : "주문한 상품명 <br>→ 여러건일 경우 + \"외 xxx건\""};
break;
case "delivery_company":
substitutionList[index] = {cd : "{"+substitutionList[index]+"}", nm : "배송회사"};
break;
case "delivery_number":
substitutionList[index] = {cd : "{"+substitutionList[index]+"}", nm : "운송장번호"};
break;
case "order_user":
substitutionList[index] = {cd : "{"+substitutionList[index]+"}", nm : "주문자"};
break;
case "recipient_user":
substitutionList[index] = {cd : "{"+substitutionList[index]+"}", nm : "배송받는자"};
break;
case "passsword":
substitutionList[index] = {cd : "{"+substitutionList[index]+"}", nm : "비밀번호"};
break;
case "authnum":
substitutionList[index] = {cd : "{"+substitutionList[index]+"}", nm : "인증번호"};
break;
case "ord_Item":
substitutionList[index] = {cd : "{"+substitutionList[index]+"}", nm : "주문한 상품명 <br>→ 여러건일 경우 + \"외 xxx건\""};
break;
case "bank_Account":
substitutionList[index] = {cd : "{"+substitutionList[index]+"}", nm : "은행명+계좌번호+예금주명"};
break;
case "settleprice":
substitutionList[index] = {cd : "{"+substitutionList[index]+"}", nm : "결제금액"};
break;
case "orderUser":
substitutionList[index] = {cd : "{"+substitutionList[index]+"}", nm : "주문자"};
break;
case "ordDate":
substitutionList[index] = {cd : "{"+substitutionList[index]+"}", nm : "주문일"};
break;
case "ordPrice":
substitutionList[index] = {cd : "{"+substitutionList[index]+"}", nm : "결제금액"};
break;
case "withdrawalDt":
substitutionList[index] = {cd : "{"+substitutionList[index]+"}", nm : "탈퇴일시"};
break;
case "NONE":
substitutionList[index] = {cd : "{"+substitutionList[index]+"}", nm : "치환코드 미사용"};
break;
default:
if (!substitutionList[index].cd) {
substitutionList[index] = {cd : "{"+substitutionList[index]+"}" ,nm : "치환 내용"};
}
break;
}
});
var tableBody = $('#substitution-pop .modal-content .table-wrapper table tbody');
tableBody.empty();
if(substitutionList.length == 0){
var row = $('<tr></tr>');
row.append($('<td></td>').text('정의되지 않음'));
row.append($('<td></td>').text('치환코드 추가 예정'));
tableBody.append(row);
}else {
$.each(substitutionList, function(index, substitution) {
var row = $('<tr></tr>');
row.append($('<td></td>').text(substitution.cd));
row.append($('<td></td>').html(substitution.nm));
tableBody.append(row);
});
}
}
/* ********************************************************
* 공통치환코드 팝업 내용 수정
******************************************************** */
const fn_swith_CommonSubModal = function () {
let commonSubstitutionList = [];
/* 템플릿 공통 치환코드(빈도 낮음) */
commonSubstitutionList.push({cd : "{reprsntTelnb}", nm : "대표전화번호"});
commonSubstitutionList.push({cd : "{shopName}", nm : "쇼핑몰 이름"});
commonSubstitutionList.push({cd : "{shopDomain}", nm : "쇼핑몰 도메인"});
commonSubstitutionList.push({cd : "{reprsntEmail}", nm : "대표 이메일"});
commonSubstitutionList.push({cd : "{ascEntrpsNm}", nm : "AS센터 업체명"});
commonSubstitutionList.push({cd : "{ascWkdayWorkTme}", nm : "AS센터 평일근무시간"});
commonSubstitutionList.push({cd : "{ascLunchTme}", nm : "AS센터 점심시간"});
commonSubstitutionList.push({cd : "{ascZip}", nm : "AS센터 우편번호"});
commonSubstitutionList.push({cd : "{ascAdres}", nm : "AS센터 주소"});
commonSubstitutionList.push({cd : "{ascDtlAdres}", nm : "AS센터 상세 주소"});
commonSubstitutionList.push({cd : "{cscWkdayWorkTme}", nm : "고객센터 평일 근무시간"});
commonSubstitutionList.push({cd : "{cscLunchTme}", nm : "고객센터 점심시간"});
commonSubstitutionList.push({cd : "{cscRstde}", nm : "고객센터 휴무일"});
commonSubstitutionList.push({cd : "{cscTelnb}", nm : "고객센터 전화번호"});
commonSubstitutionList.push({cd : "{sleBsnmNm}", nm : "판매사 사업자명"});
commonSubstitutionList.push({cd : "{sleBizrnb}", nm : "판매사 사업자 등록번호"});
commonSubstitutionList.push({cd : "{sleMobDclNb}", nm : "판매사 통신판매업신고번호"});
commonSubstitutionList.push({cd : "{sleReprsntvnm}", nm : "판매사 대표자명"});
commonSubstitutionList.push({cd : "{sleIndvdlinfoPrtcRspnberNm}", nm : "판매사 개인정보보호책임자명"});
commonSubstitutionList.push({cd : "{sleTelnb}", nm : "판매사 전화번호"});
commonSubstitutionList.push({cd : "{sleFxnb}", nm : "판매사 팩스번호"});
commonSubstitutionList.push({cd : "{sleEmail}", nm : "판매사 이메일"});
commonSubstitutionList.push({cd : "{sleBsnDclNb}", nm : "판매사 영업신고번호"});
commonSubstitutionList.push({cd : "{sleZip}", nm : "판매사 우편번호"});
commonSubstitutionList.push({cd : "{sleLnbAdres}", nm : "판매사 지번주소"});
commonSubstitutionList.push({cd : "{sleRnmAdres}", nm : "판매사 도로명주소"});
commonSubstitutionList.push({cd : "{sleDtlAdres}", nm : "판매사 상세주소"});
commonSubstitutionList.push({cd : "{operBsnmNm}", nm : "운영사 사업자명"});
commonSubstitutionList.push({cd : "{operBizrnb}", nm : "운영사 사업자 등록번호"});
commonSubstitutionList.push({cd : "{operMobDclNb}", nm : "운영사 통신판매업신고번호"});
commonSubstitutionList.push({cd : "{operReprsntvnm}", nm : "운영사 대표자명"});
commonSubstitutionList.push({cd : "{operIndvdlinfoPrtcRspnberNm}", nm : "운영사 개인정보보호책임자명"});
commonSubstitutionList.push({cd : "{operTelnb}", nm : "운영사 전화번호"});
commonSubstitutionList.push({cd : "{operFxnb}", nm : "운영사 팩스번호"});
commonSubstitutionList.push({cd : "{operEmail}", nm : "운영사 이메일"});
commonSubstitutionList.push({cd : "{operBsnDclNb}", nm : "운영사 영업신고번호"});
commonSubstitutionList.push({cd : "{operZip}", nm : "운영사 우편번호"});
commonSubstitutionList.push({cd : "{operLnbAdres}", nm : "운영사 지번주소"});
commonSubstitutionList.push({cd : "{operRnmAdres}", nm : "운영사 도로명주소"});
commonSubstitutionList.push({cd : "{operDtlAdres}", nm : "운영사 상세주소"});
var tableBody = $('#common-substitution-pop .modal-content .table-wrapper table tbody');
$.each(commonSubstitutionList, function(index, commonSubstitution) {
var row = $('<tr></tr>');
row.append($('<td></td>').text(commonSubstitution.cd));
row.append($('<td></td>').html(commonSubstitution.nm));
tableBody.append(row);
});
}
/**********************************************
* 문자 기본 메시지
***********************************************/
const fn_set_defaultMessage = function(button, defaultText) {
var smsManage = $(button).closest('.template-message').find('.sms-manage');
smsManage.find('textarea[name="smsCn"]').val(defaultText);
smsManage.find('.number').text(byteCount(defaultText));
}
/**********************************************
* 알림톡 대체문자 사용여부
***********************************************/
const fn_switch_smsRplcAt = function(button) {
var ntcnTmplt = $(button).parent().parent();
var smsRplcAt = ntcnTmplt.find('input[name="smsRplcAt"]');
var smsRplcDiv = ntcnTmplt.find('.smsRplc');
if ($(button).hasClass('primary')) {
$(button).removeClass('primary').addClass('dark').text('문자 OFF');
smsRplcAt.val('N');
smsRplcDiv.css('background-color', '#f8f9fa');
} else {
$(button).removeClass('dark').addClass('primary').text('문자 ON');
smsRplcAt.val('Y');
smsRplcDiv.css('background-color', '');
}
var smsRplcCn = ntcnTmplt.find('textarea[name="smsRplcCn"]');
smsRplcCn.prop('readonly', !smsRplcCn.prop('readonly'));
smsRplcCn.css('cursor', smsRplcCn.css('cursor') === 'not-allowed' ? '' : 'not-allowed');
}
/**********************************************
* 알림톡 팝업 - 버튼 추가
***********************************************/
const fn_add_buttonRow = function() {
if($('.modal .message-edit__wrapper .talk-edit-row').length == 0){
var script = document.createElement('script');
script.src = '/admin/js/script.js';
document.body.appendChild(script);
}
if($('.modal .message-edit__wrapper .talk-edit-row').length < 5){
let rowLength = $('.modal .message-edit__wrapper .talk-edit-row').length + 1;
$('.modal .message-edit__wrapper .message-edit-preview__footer').append($('<a href="#" class="message-edit-preview__footer-item">버튼 링크</a>'));
$('.modal .message-edit__wrapper tbody').append($(
'<tr><td><div class="talk-edit-row">' +
'<div class="select-box select-show-trigger">' +
'<select name="btnType" title="해당 셀렉트에 대한 설명" style="display: none;">' +
'<option value="WL" selected="">버튼 링크</option>' +
'<option value="DS">배송 조회</option>' +
'</select>' +
'<div class="nice-select">' +
'<span class="current">버튼 링크</span>' +
'<ul class="list">' +
'<li data-value="WL" class="option selected">버튼 링크</li>' +
'<li data-value="DS" class="option">배송 조회</li>' +
'</ul>' +
'</div>' +
'</div>' +
'<input class="WL input-text" type="text" name="btnNm" title="해당 인풋에 대한 설명" placeholder="버튼명(최대 28자)" maxlength="28">' +
'<input class="WL input-text xl" type="text" name="btnPcUrl" title="해당 인풋에 대한 설명" placeholder="링크주소">' +
'<input class="WL input-text xl" type="text" name="btnMUrl" title="해당 인풋에 대한 설명" placeholder="모바일 링크주소">' +
'<span class="DS w-full" style="display: none;">배송조회는 버튼 링크를 포함하지 않습니다.</span>' +
'<button class="circle-btn delete" onclick="fn_remove_buttonRow(this)">' +
'<span class="visually-hidden">삭제</span>' +
'</button>' +
'</div></td></tr>'));
}else{
alert('버튼은 최대 5개까지 사용 가능합니다.');
}
}
/**********************************************
* 알림톡 팝업 - 버튼 타입 변경
***********************************************/
$(document).on('change', 'select[name="btnType"]', function() {
var count = 0;
$("select[name='btnType']").each(function() {
$(this).val()=='DS' ? count++ : count;
});
var tr = $(this).closest('tr');
if(count > 1){
alert('배송조회 버튼은 메세지당 한개만 가능합니다.');
$(this).val('WL');
tr.find('span.current').html('버튼 링크');
tr.find('li[data-value="WL"]').addClass('selected');
tr.find('li[data-value="DS"]').removeClass('selected');
}else{
var btnRow = $(this).closest('.talk-edit-row');
btnRow.find('.WL, .DS').hide();
btnRow.find('.' + $(this).val()).show();
var index = tr.index()-2;
var previewBtn = $('.modal .message-edit__wrapper .message-edit-preview__footer-item');
var btnNm = btnRow.find('input[name="btnNm"]').val();
previewBtn.eq(index).html($(this).val() == 'DS' ? '배송 조회' : (btnNm?btnNm:'버튼 링크'));
}
});
/**********************************************
* 알림톡 팝업 - 버튼 이름 변경(미리보기)
***********************************************/
$(document).on('change', 'input[name="btnNm"]', function() {
var btnNm = $(this).val();
var index = $(this).closest('tr').index()-2;
var previewBtn = $('.modal .message-edit__wrapper .message-edit-preview__footer-item');
previewBtn.eq(index).html(btnNm || "&nbsp;");
});
/**********************************************
* 알림톡 팝업 - 버튼 삭제(미리보기)
***********************************************/
const fn_remove_buttonRow = function(button) {
var index = $(button).closest('tr').index()-2;
var previewBtn = $('.modal .message-edit__wrapper .message-edit-preview__footer-item');
previewBtn.eq(index).remove();
}
/**********************************************
* 알림톡 미리보기 반영
***********************************************/
const updatePreview = function() {
$(".message-edit-preview__content textarea").val($(this).val());
};
/**********************************************
* 데이터 크기(byte) 계산
***********************************************/
const byteCount = function(text) {
return encodeURI(text).split(/%..|./).length - 1;
}
/**********************************************
* 데이터 크기(byte) 반영
***********************************************/
const updateByteCount = function() {
$(this).closest('.sms-manage').find('.number').text(byteCount($(this).val()));
if ($('#selectNtcntalkTmplat').hasClass('active')) {
//알림톡 수정 팝업화면의 경우 글자수 반영
$(this).closest('.sms-manage').find('.count').text($(this).val().length);
}
};
</script>
<body>
<%-- 상단메뉴 공통화 적용 : 2023-11-30 / 박철민 추가 --%>
<%@include file ="/WEB-INF/views/comm/admin/Header.jsp" %>
<main class="main">
<%-- 좌측메뉴 공통화 적용 : 2023-11-30 / 박철민 추가 --%>
<%@include file ="/WEB-INF/views/comm/admin/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="form-control-container" style="width:83%">
<div class="left">
</div>
<div class="center">
</div>
<div class="right">
<div class="select-box">
<select title="쇼핑몰" name = "sopmalCd" id = "sopmalCdList" onchange = "fn_select_tmplat_sopmal(); return false;">
<c:forEach var="sopmal" items="${ resultMap.sopmalCdList }" varStatus="status">
<option value="<c:out value="${ sopmal.sopmalCd }"/>"
<c:if test="${ boMaTmpltVo.sopmalCd eq sopmal.sopmalCd}">selected="selected"</c:if>>
<c:out value="${ sopmal.sopmalNm }"/>
</option>
</c:forEach>
</select>
</div>
</div>
</div>
<div class="page-title__btn-container">
<button class="btn primary" onclick="fn_update_AtmcSndngTmplatForm()" id="tmpltUpdateBtn">저장하기</button>
</div>
</div>
<div class="content-tab">
<button class="content-tab__btn active" id="selectEmailTmplatBtn">이메일</button>
<button class="content-tab__btn" id="selectMssageTmplatBtn">메시지</button>
<button class="content-tab__btn" id="selectNtcntalkTmplatBtn">알림톡</button>
</div>
<form id="listForm">
<input type="hidden" id="srchFormDvCd" name="formDvCd">
<input type="hidden" id="srchSopmalCd" name="sopmalCd">
</form>
<form id='tx_editor_form' name="tx_editor_form">
<input type="hidden" id="tmplatList" name="tmplatList">
<input type="hidden" id="formDvCd" name="formDvCd">
<div class="content-tab__content active" id="selectEmailTmplat">
<%--이메일 자동발송 템플릿--%>
</div>
<div class="content-tab__content" id="selectMssageTmplat">
<%--메시지 자동발송 템플릿--%>
</div>
<div class="content-tab__content" id="selectNtcntalkTmplat">
<%--알림톡 자동발송 템플릿--%>
</div>
</form>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</div>
</main>
<!-- 치환코드 모달 -->
<div id="substitution-pop" class="modal" style="max-width: 400px;">
<div class="modal-header">
<h4>사용 가능한 치환코드</h4>
</div>
<div class="modal-content">
<div class="table-wrapper">
<table class="table vertical tight">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 33%;">
<col>
</colgroup>
<thead>
<tr>
<th>치환코드</th>
<th>설명</th>
</tr>
</thead>
<tbody>
<!-- 치환코드 내용 삽입 -->
</tbody>
</table>
</div>
</div>
</div>
<!-- 공통치환코드 모달 -->
<div id="common-substitution-pop" class="modal" style="max-width: 400px;">
<div class="modal-header">
<h4>사용 가능한 치환코드</h4>
</div>
<div class="modal-content">
<div class="table-wrapper">
<table class="table vertical tight">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 33%;">
<col>
</colgroup>
<thead>
<tr>
<th>치환코드</th>
<th>설명</th>
</tr>
</thead>
<tbody>
<!-- 치환코드 내용 삽입 -->
</tbody>
</table>
</div>
</div>
</div>
<!-- 알림톡 메시지 수정 모달 -->
<div id="ntcntalkAtmcSndngTmplatUpdtPopupDiv">
</div>
<!-- 알림톡 치환코드 모달(모달속 모달) -->
<div id="substitution-talk-pop" class="modal" style="max-width: 400px;">
<div class="modal-header">
<h4>사용 가능한 치환코드</h4>
</div>
<div class="modal-content">
<div class="table-wrapper">
<table class="table vertical tight">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 33%;">
<col>
</colgroup>
<thead>
<tr>
<th>치환코드</th>
<th>설명</th>
</tr>
</thead>
<tbody>
<!-- 치환코드 내용 삽입 -->
</tbody>
</table>
</div>
</div>
</div>
<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>버튼명은 '배송 조회하기'로 자동 노출 됩니다.<p>
<p>알림톡 메시지 파싱을 통해 배송조회 링크가 자동 생성 됩니다.</p>
<p>지원 택배사 : CJ대한통운, FedEx, GTX로지스, KG로지스, 경동택배, 로젠택배, 우체국택배, 일양로지스, 한진택배, 합동택배, 롯데택배</p>
</div>
</div>
<div id="info02" class="modal" style="width: 280px;">
<div class="mini-info-content__header">
<h5 class="mini-info-content__title">버튼 안내</h5>
<a href="#" rel="modal:close" class="mini-info-content__close"><span class="visually-hidden">닫기</span></a>
</div>
<div class="mini-info-content__content">
<p>버튼명은 '배송 조회하기'로 자동 노출 됩니다.<p>
<p>알림톡 메시지 파싱을 통해 배송조회 링크가 자동 생성 됩니다.</p>
<p>지원 택배사 : CJ대한통운, FedEx, GTX로지스, KG로지스, 경동택배, 로젠택배, 우체국택배, 일양로지스, 한진택배, 합동택배, 롯데택배</p>
</div>
</div>
</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 : MaEmailAtmcSndngTmplatU.jsp
Description : 이메일 템플릿 관리
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-02-21 리브가 최초 생성
2024-04-17 이대환 Email>Email 분리
--%>
<script>
$(document).ready(function () {
fn_select_EmailTmplat($("#formDvCd").val());
/* 치환코드 하드코딩 */
var modalLink = $('a[href="#substitution-pop"]');
modalLink.click(function() {
var formDvCdValue = $("#srchFormDvCd").val();
var formDtlDvCd = parseInt(formDvCdValue.split("&")[1]);
switch(formDvCdValue.split("&")[0]){
case "FORM_DV_BBS":
fn_swith_SubModal(substitutionList[formDtlDvCdLength[0]+formDtlDvCd-1]);
break;
case "FORM_DV_CMMN":
fn_swith_SubModal(substitutionList[formDtlDvCdLength[1]+formDtlDvCd-1]);
break;
case "FORM_DV_DLVY":
fn_swith_SubModal(substitutionList[formDtlDvCdLength[2]+formDtlDvCd-1]);
break;
case "FORM_DV_MBR":
fn_swith_SubModal(substitutionList[formDtlDvCdLength[3]+formDtlDvCd-1]);
break;
case "FORM_DV_ORDR":
fn_swith_SubModal(substitutionList[formDtlDvCdLength[4]+formDtlDvCd-1]);
break;
case "FORM_DV_REMND":
fn_swith_SubModal(substitutionList[formDtlDvCdLength[5]+formDtlDvCd-1]);
break;
}
});
let substitutionList = [];
let formDtlDvCdLength = [];
/*게시판(FORM_DV_BBS)*/
formDtlDvCdLength.push(substitutionList.length);
//게시글 등록(01)
substitutionList.push(["sopmalCd", "shopName", "bbsNm"]);
//게시글 답변(02)
substitutionList.push(["sopmalCd", "shopName", "bbsNm"]);
/*공통(FORM_DV_CMMN)*/
formDtlDvCdLength.push(substitutionList.length);
//혜택 정보 수신동의 여부 확인(01)
substitutionList.push(["sopmalCd", "shopName", "shopDomain", "user_name", "marktRecptnAgreAt", "marktRecptnAgreUpdtDt", "cscTelnb", "rejectTelnb"]);
//혜택 정보 수신동의 변경 결과(02)
substitutionList.push(["sopmalCd", "shopName", "shopDomain", "user_name", "marktRecptnAgreAt", "marktRecptnAgreUpdtDt", "cscTelnb", "rejectTelnb"]);
//(비회원 구매자) 혜택 정보 수신동의 요청(03)
substitutionList.push(["sopmalCd", "shopName", "shopDomain", "Nm", "agree_short_url"]);
//(비회원 구매자) 혜택 정보 수신동의 결과(04)
substitutionList.push(["NONE"]);
/*배송(FORM_DV_DLVY)*/
formDtlDvCdLength.push(substitutionList.length);
//출고 완료(주문자)(01)
substitutionList.push(["sopmalCd", "shopName", "ordno", "go_Item", "delivery_company", "delivery_number", "order_user", "recipient_user"]);
//배송완료(주문자)(02)
substitutionList.push(["sopmalCd", "shopName", "ordno", "go_Item", "delivery_company", "delivery_number", "order_user", "recipient_user"]);
//출고 완료(받는분)(03)
substitutionList.push(["sopmalCd", "shopName", "ordno", "go_Item", "delivery_company", "delivery_number", "order_user", "recipient_user"]);
//배송완료(받는분)(04)
substitutionList.push(["sopmalCd", "shopName", "ordno", "go_Item", "delivery_company", "delivery_number", "order_user", "recipient_user"]);
/*회원(FORM_DV_MBR)*/
formDtlDvCdLength.push(substitutionList.length);
//회원 가입(01)
substitutionList.push(["sopmalCd", "shopName", "user_name", "userid"]);
//회원 탈퇴(02)
substitutionList.push(["sopmalCd", "shopName", "userid", "withdrawalDt"]);
//아이디 찾기(03)
substitutionList.push(["sopmalCd", "shopName", "userid"]);
//비밀번호 찾기(04)
substitutionList.push(["sopmalCd", "shopName", "passsword"]);
//개인인증번호 확인(05)
substitutionList.push(["sopmalCd", "shopName", "authnum"]);
//장기 미구매 고객 대상 쿠폰(06)
substitutionList.push(["NONE"]);
//생일 쿠폰(07)
substitutionList.push(["NONE"]);
/*주문(FORM_DV_ORDR)*/
formDtlDvCdLength.push(substitutionList.length);
//주문 접수(01)
substitutionList.push(["sopmalCd", "shopName", "ord_Item", "ordno", "bank_Account", "settleprice"]);
//결제 확인(02)
substitutionList.push(["sopmalCd", "shopName", "orderUser", "ord_Item", "ordno", "ordDate", "ordPrice"]);
//환불 완료(취소)(03)
substitutionList.push(["sopmalCd", "shopName"]);
//환불 완료(반품)(04)
substitutionList.push(["sopmalCd", "shopName"]);
//입금 요청(05)
substitutionList.push(["sopmalCd", "shopName", "ord_Item", "ordno", "bank_Account", "settleprice"]);
//선물하기 안내(06)
substitutionList.push(["NONE"]);
/*고객리마인드(FORM_DV_REMND)*/
formDtlDvCdLength.push(substitutionList.length);
//회원 멤버쉽 등급변경(01)
substitutionList.push(["shopName", "user_name", "mbrgradNm", "mypage_short_url", "cscTelnb", "rejectTelnb"]);
//상품 리뷰 작성 유도(02)
substitutionList.push(["shopName", "user_name", "ordrInnb", "goodsNm", "mypage_short_url", "cscTelnb", "rejectTelnb"]);
//만료 쿠폰(03)
substitutionList.push(["shopName", "userid", "user_name", "coupon_count", "mypage_short_url"]);
//소멸 예정 마일리지(04)
substitutionList.push(["shopName", "user_name", "mileage_rest", "mypage_short_url"]);
//생일 축하(05)
substitutionList.push(["shopName", "user_name", "coupNm", "validpdBgnDt", "validpdEndDt", "mypage_short_url", "cscTelnb", "rejectTelnb"]);
//장바구니 상품(06)
substitutionList.push(["shopName", "user_name", "goodsNm", "mypage_short_url", "cscTelnb", "rejectTelnb"]);
//정수기 필터 교체 알림(07)
substitutionList.push(["NONE"]);
//장바구니 타임세일(08)
substitutionList.push(["shopName", "user_name", "goodsNm", "mypage_short_url", "cscTelnb", "rejectTelnb"]);
});
const fn_select_EmailTmplat = function (templatIndex) {
$('#srchFormDvCd').val(templatIndex);
$('#srchSopmalCd').val($('#sopmalCdList').val());
/* 라디오버튼 임시방편 */
var radioButtons = $("input[name='r-group01']");
radioButtons.each(function() {
if ($(this).val() === $("#srchFormDvCd").val()) {
$(this).prop("checked", true);
}
});
$.ajax({
type: 'post',
url : '/admin/ntcn/tmplt/selectEmailAtmcSndngTmplatOne',
data: $("#listForm").serialize(),
success : function (Data) {
let boCtrlMap = JSON.parse(Data.resBody.result).boCtrlMap;
let dsptchAdres = JSON.parse(Data.resBody.result).dsptchAdres;
$('#dsptchAdres').text(dsptchAdres);
$('#emailSj').val(boCtrlMap.emailSj);
$('#emailCn').val((boCtrlMap.emailCn != null && boCtrlMap.emailCn.trim() != '') ? boCtrlMap.emailCn : ' ');
Editor.modify({
"content": document.getElementById("emailCn")
});
}
});
}
</script>
<section class="content-section">
<h3 class="content-section__title">이메일</h3>
<div class="table-wrapper">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 12%;">
<col style="width: 12%;">
<col>
</colgroup>
<tbody>
<c:choose>
<c:when test="${ not empty resultListMap.groupCd}">
<c:forEach items="${ resultListMap.groupCd }" var="list" varStatus="status">
<c:set var = "index" scope = "session" value = "${status.index}"/>
<tr>
<c:if test="${status.index == 0}">
<th rowspan="<c:out value="${fn:length(resultListMap.groupCd)}"/>" class="border-right">이메일 선택</th>
</c:if>
<c:if test="${list.groupCd eq 'FORM_DV'}">
<c:set var = "groupDtl" scope = "session" value = "${list.groupCd}_${list.cd}"/>
<th>
<c:out value="${list.cdNm}"/>
</th>
<td>
<div class="td-inner">
<div class="custom-radio-container">
<c:forEach items="${ resultListMap.formDvCd }" var="list" varStatus="status">
<c:if test="${list.groupCd eq groupDtl}">
<div class="custom-radio">
<input type="radio" id="r-${status.index}" name="r-group01" value="<c:out value="${list.groupCd}"/>&<c:out value="${list.cd}"/>" onchange="fn_select_EmailTmplat(this.value)">
<label for="r-${status.index}"><c:out value="${list.cdNm}"/></label>
</div>
</c:if>
</c:forEach>
</div>
</div>
</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>
<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 id="dsptchAdres" class="td-inner">
<c:out value = "${resultListMap.dsptchAdres}"/>
</div>
</td>
</tr>
<tr>
<th>제목</th>
<td>
<div class="td-inner">
<input class="input-text xl" type="text" title="이메일제목" id="emailSj" name="emailSj"
placeholder="" value="<c:out value = "${resultListMap.boCtrlMap.emailSj}"/>">
<a href="#substitution-pop" rel="modal:open"
class="btn sm outline">
<i class="icon icon_info"></i>
치환 코드
</a>
<a href="#common-substitution-pop" rel="modal:open"
class="btn sm outline">
<i class="icon icon_info"></i>
공통 치환 코드
</a>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<h3 class="content-section__title">내용</h3>
<%@ include file="../email/EmailPassivSndngEditor.jsp" %>
<textarea class="textarea" id="emailCn" name="emailCn" style="display: none"><c:out value = "${resultListMap.boCtrlMap.emailCn}"/></textarea>
</section>

View File

@@ -0,0 +1,278 @@
<%@ 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 : MaMssageAtmcSndngTmplatU.jsp
Description : 메시지 템플릿 관리
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-02-21 리브가 최초 생성
2024-04-17 이대환 Email>Mssage 분리
--%>
<script>
$(document).ready(function() {
$('.textarea').each(updateByteCount);
/* 탭 박스 임시방편 */
var formDvCd = $("#formDvCd").val();
var radioButtons = $(".tab-box__btn");
radioButtons.each(function() {
if ($(this).val() === formDvCd) {
$(this).addClass("current")
}else{
$(this).removeClass("current")
}
});
/* 치환코드 하드코딩 */
var modalLink = $('a[href="#substitution-pop"]');
modalLink.click(function() {
var formDtlDvCd = parseInt($(this).data('value'));
switch(formDvCd){
case "FORM_DV_BBS":
fn_swith_SubModal(substitutionList[formDtlDvCdLength[0]+formDtlDvCd-1]);
break;
case "FORM_DV_CMMN":
fn_swith_SubModal(substitutionList[formDtlDvCdLength[1]+formDtlDvCd-1]);
break;
case "FORM_DV_DLVY":
fn_swith_SubModal(substitutionList[formDtlDvCdLength[2]+formDtlDvCd-1]);
break;
case "FORM_DV_MBR":
fn_swith_SubModal(substitutionList[formDtlDvCdLength[3]+formDtlDvCd-1]);
break;
case "FORM_DV_ORDR":
fn_swith_SubModal(substitutionList[formDtlDvCdLength[4]+formDtlDvCd-1]);
break;
case "FORM_DV_REMND":
fn_swith_SubModal(substitutionList[formDtlDvCdLength[5]+formDtlDvCd-1]);
break;
}
});
/* 기본 메시지 버튼 */
var defaultButton = $('.template-message__footer .manage-btn-container button');
defaultButton.click(function() {
var formDtlDvCd = parseInt($(this).data('value'));
switch(formDvCd){
case "FORM_DV_BBS":
fn_set_defaultMessage($(this), defaultMsgList[formDtlDvCdLength[0]+formDtlDvCd-1]);
break;
case "FORM_DV_CMMN":
fn_set_defaultMessage($(this), defaultMsgList[formDtlDvCdLength[1]+formDtlDvCd-1]);
break;
case "FORM_DV_DLVY":
fn_set_defaultMessage($(this), defaultMsgList[formDtlDvCdLength[2]+formDtlDvCd-1]);
break;
case "FORM_DV_MBR":
fn_set_defaultMessage($(this), defaultMsgList[formDtlDvCdLength[3]+formDtlDvCd-1]);
break;
case "FORM_DV_ORDR":
fn_set_defaultMessage($(this), defaultMsgList[formDtlDvCdLength[4]+formDtlDvCd-1]);
break;
case "FORM_DV_REMND":
fn_set_defaultMessage($(this), defaultMsgList[formDtlDvCdLength[5]+formDtlDvCd-1]);
break;
}
});
let substitutionList = [];
let defaultMsgList = [];
let formDtlDvCdLength = [];
/*게시판(FORM_DV_BBS)*/
formDtlDvCdLength.push(substitutionList.length);
//게시글 등록(01)
substitutionList.push(["sopmalCd", "shopName", "bbsNm"]);
defaultMsgList.push("기본 메시지 정의되지 않음");
//게시글 답변(02)
substitutionList.push(["sopmalCd", "shopName", "bbsNm"]);
defaultMsgList.push("기본 메시지 정의되지 않음");
/*공통(FORM_DV_CMMN)*/
formDtlDvCdLength.push(substitutionList.length);
//혜택 정보 수신동의 여부 확인(01)
substitutionList.push(["sopmalCd", "shopName", "shopDomain", "user_name", "marktRecptnAgreAt", "marktRecptnAgreUpdtDt", "cscTelnb", "rejectTelnb"]);
defaultMsgList.push("기본 메시지 정의되지 않음");
//혜택 정보 수신동의 변경 결과(02)
substitutionList.push(["sopmalCd", "shopName", "shopDomain", "user_name", "marktRecptnAgreAt", "marktRecptnAgreUpdtDt", "cscTelnb", "rejectTelnb"]);
defaultMsgList.push("기본 메시지 정의되지 않음");
//(비회원 구매자) 혜택 정보 수신동의 요청(03)
substitutionList.push(["sopmalCd", "shopName", "shopDomain", "Nm", "agree_short_url"]);
defaultMsgList.push("기본 메시지 정의되지 않음");
//(비회원 구매자) 혜택 정보 수신동의 결과(04)
substitutionList.push(["NONE"]);
defaultMsgList.push("기본 메시지 정의되지 않음");
/*배송(FORM_DV_DLVY)*/
formDtlDvCdLength.push(substitutionList.length);
//출고 완료(주문자)(01)
substitutionList.push(["sopmalCd", "shopName", "ordno", "go_Item", "delivery_company", "delivery_number", "order_user", "recipient_user"]);
defaultMsgList.push("[{shopName}] 주문({ordno})하신 상품({go_item})이 발송({delivery_company} {delivery_number})되었습니다.");
//배송완료(주문자)(02)
substitutionList.push(["sopmalCd", "shopName", "ordno", "go_Item", "delivery_company", "delivery_number", "order_user", "recipient_user"]);
defaultMsgList.push("[{shopName}] 주문({ordno})하신 상품({go_item})이 배송되었습니다.");
//출고 완료(받는분)(03)
substitutionList.push(["sopmalCd", "shopName", "ordno", "go_Item", "delivery_company", "delivery_number", "order_user", "recipient_user"]);
defaultMsgList.push("[{shopName}]에서 {order_user}님이 {recipient_user}에게 주문한 상품이 발송되었습니다.");
//배송완료(받는분)(04)
substitutionList.push(["sopmalCd", "shopName", "ordno", "go_Item", "delivery_company", "delivery_number", "order_user", "recipient_user"]);
defaultMsgList.push("[{shopName}]에서 {order_user}님이 {recipient_user}에게 주문한 상품이 배송완료되었습니다.");
/*회원(FORM_DV_MBR)*/
formDtlDvCdLength.push(substitutionList.length);
//회원 가입(01)
substitutionList.push(["sopmalCd", "shopName", "user_name"]);
defaultMsgList.push("[{shopName}] 회원 가입을 환영합니다.");
//회원 탈퇴(02)
substitutionList.push(["sopmalCd", "shopName", "userid", "withdrawalDt"]);
defaultMsgList.push("[{shopName}] 회원 탈퇴가 처리되었습니다.");
//아이디 찾기(03)
substitutionList.push(["sopmalCd", "shopName", "userid"]);
defaultMsgList.push("[{shopName}] 문의하신 아이디는 {userid} 입니다.");
//비밀번호 찾기(04)
substitutionList.push(["sopmalCd", "shopName", "passsword"]);
defaultMsgList.push("[{shopName}] 요청하신 임시 비밀번호는 {password} 입니다.");
//개인인증번호 확인(05)
substitutionList.push(["sopmalCd", "shopName", "authnum"]);
defaultMsgList.push("기본 메시지 정의되지 않음");
//장기 미구매 고객 대상 쿠폰(06)
substitutionList.push(["NONE"]);
defaultMsgList.push("기본 메시지 정의되지 않음");
//생일 쿠폰(07)
substitutionList.push(["NONE"]);
defaultMsgList.push("기본 메시지 정의되지 않음");
/*주문(FORM_DV_ORDR)*/
formDtlDvCdLength.push(substitutionList.length);
//주문 접수(01)
substitutionList.push(["sopmalCd", "shopName", "ord_Item", "ordno", "bank_Account", "settleprice"]);
defaultMsgList.push("[{shopName}] {ord_item}의 주문({ordno})이 접수되었습니다."+"\n입금안내 : {bank_account} {settleprice}");
//결제 확인(02)
substitutionList.push(["sopmalCd", "shopName", "orderUser", "ord_Item", "ordno", "ordDate", "ordPrice"]);
defaultMsgList.push("[{shopName}] {ord_item}의 주문({ordno})이 결제확인({settle_kind} {settleprice})되었습니다.");
//환불 완료(취소)(03)
substitutionList.push(["sopmalCd", "shopName"]);
defaultMsgList.push("[{shopName}] 결제취소 상품({repay_item})이 취소되었습니다.");
//환불 완료(반품)(04)
substitutionList.push(["sopmalCd", "shopName"]);
defaultMsgList.push("[{shopName}] 반품 상품({repay_item})이 환불되었습니다.");
//입금 요청(05)
substitutionList.push(["sopmalCd", "shopName", "ord_Item", "ordno", "bank_Account", "settleprice"]);
defaultMsgList.push("기본 메시지 정의되지 않음");
//선물하기 안내(06)
substitutionList.push(["NONE"]);
defaultMsgList.push("기본 메시지 정의되지 않음");
/*고객리마인드(FORM_DV_REMND)*/
formDtlDvCdLength.push(substitutionList.length);
//회원 멤버쉽 등급변경(01)
substitutionList.push(["shopName", "user_name", "mbrgradNm", "mypage_short_url", "cscTelnb", "rejectTelnb"]);
defaultMsgList.push("기본 메시지 정의되지 않음");
//상품 리뷰 작성 유도(02)
substitutionList.push(["shopName", "user_name", "ordrInnb", "goodsNm", "mypage_short_url", "cscTelnb", "rejectTelnb"]);
defaultMsgList.push("기본 메시지 정의되지 않음");
//만료 쿠폰(03)
substitutionList.push(["shopName", "userid", "user_name", "coupon_count", "mypage_short_url"]);
defaultMsgList.push("기본 메시지 정의되지 않음");
//소멸 예정 마일리지(04)
substitutionList.push(["shopName", "user_name", "mileage_rest", "mypage_short_url"]);
defaultMsgList.push("기본 메시지 정의되지 않음");
//생일 축하(05)
substitutionList.push(["shopName", "user_name", "coupNm", "validpdBgnDt", "validpdEndDt", "mypage_short_url", "cscTelnb", "rejectTelnb"]);
defaultMsgList.push("기본 메시지 정의되지 않음");
//장바구니 상품(06)
substitutionList.push(["shopName", "user_name", "goodsNm", "mypage_short_url", "cscTelnb", "rejectTelnb"]);
defaultMsgList.push("기본 메시지 정의되지 않음");
//정수기 필터 교체 알림(07)
substitutionList.push(["NONE"]);
defaultMsgList.push("기본 메시지 정의되지 않음");
//장바구니 타임세일(08)
substitutionList.push(["shopName", "user_name", "goodsNm", "mypage_short_url", "cscTelnb", "rejectTelnb"]);
defaultMsgList.push("기본 메시지 정의되지 않음");
});
$('.textarea').on('input', updateByteCount);
</script>
<section class="content-section">
<div class="tab-box">
<c:choose>
<c:when test="${ not empty resultListMap.groupCd}">
<c:forEach items="${ resultListMap.groupCd }" var="list" varStatus="status">
<button type="button" class="tab-box__btn" onclick="fn_select_AtmcSndngTmplat(this.value)" value="<c:out value="${list.groupCd}"/>_<c:out value="${list.cd}"/>"><c:out value="${list.cdNm}"/></button>
</c:forEach>
</c:when>
<c:otherwise>
<tr>
<td colspan="100%"><spring:message code="common.nodata"/></td>
</tr>
</c:otherwise>
</c:choose>
<a href="#common-substitution-pop" rel="modal:open"
class="btn sm outline" style="margin-left: auto;">
<i class="icon icon_info"></i>
공통 치환 코드
</a>
</div>
<div class="tab-box__content">
<div class="template-message__container">
<c:choose>
<c:when test="${ not empty resultListMap.boCtrlMap}">
<c:forEach items="${ resultListMap.boCtrlMap }" var="list" varStatus="status">
<div class="template-message">
<div class="template-message__header">
<c:out value="${list.cdNm}"/>
<!-- <span class="btn gray ml-2 xxsm">알림톡 X</span> -->
</div>
<div class="template-message__body">
<div class="sms-manage">
<input type="hidden" name="formDtlDvCd" value="<c:out value="${list.formDtlDvCd}"/>">
<input type="hidden" name="formDvCd" value="<c:out value="${list.formDvCd}"/>">
<input type="hidden" name="sopmalCd" value="<c:out value="${list.sopmalCd}"/>">
<textarea class="default" title="sms 기본 메시지" style="display : none"><c:out value="${list.smsCn}"/></textarea>
<textarea class="textarea" title="sms 입력" name="smsCn"><c:out value="${list.smsCn}"/></textarea>
<div class="sms-manage__byte">
<span class="number">0</span>
<span class="text">byte</span>
</div>
</div>
<!-- <div class="b-checkbox-container justify-end mt-8 mb-5 mr-2">
<label class="b-checkbox checkbox">
<input type="checkbox" value="">
<span class="check"></span>
<span class="control-label">고객</span>
</label>
</div> -->
</div>
<div class="template-message__footer">
<div class="manage-btn-container">
<a href="#substitution-pop" rel="modal:open" class="btn sm outline" data-value="<c:out value="${list.formDtlDvCd}"/>">
<i class="icon icon_info"></i>
치환 코드
</a>
<button type="button" class="btn sm dark" data-value="<c:out value="${list.formDtlDvCd}"/>">
기본 메시지
</button>
</div>
</div>
</div>
</c:forEach>
</c:when>
<c:otherwise>
<tr>
<td colspan="100%"><spring:message code="common.nodata"/></td>
</tr>
</c:otherwise>
</c:choose>
</div>
</div>
</section>

View File

@@ -0,0 +1,104 @@
<%@ 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 : MaNtcntalkAtmcSndngTmplatU.jsp
Description : 알림톡 템플릿 관리
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-02-21 리브가 최초 생성
2024-05-07 이대환 Email>Ntcntalk 분리
--%>
<script>
$(document).ready(function() {
$('.textarea').each(updateByteCount);
/* 탭 박스 임시방편 */
var formDvCd = $("#formDvCd").val();
var radioButtons = $(".tab-box__btn");
radioButtons.each(function() {
if ($(this).val() === formDvCd) {
$(this).addClass("current")
}else{
$(this).removeClass("current")
}
});
});
$('.textarea').on('input', updateByteCount);
</script>
<section class="content-section">
<div class="tab-box">
<c:choose>
<c:when test="${ not empty resultListMap.groupCd}">
<c:forEach items="${ resultListMap.groupCd }" var="list" varStatus="status">
<button type="button" class="tab-box__btn" onclick="fn_select_AtmcSndngTmplat(this.value)" value="<c:out value="${list.groupCd}"/>_<c:out value="${list.cd}"/>"><c:out value="${list.cdNm}"/></button>
</c:forEach>
</c:when>
<c:otherwise>
<tr>
<td colspan="100%"><spring:message code="common.nodata"/></td>
</tr>
</c:otherwise>
</c:choose>
</div>
<div class="tab-box__content">
<div class="template-message__container">
<c:choose>
<c:when test="${ not empty resultListMap.boCtrlMap}">
<c:forEach items="${ resultListMap.boCtrlMap }" var="list" varStatus="status">
<div class="template-message">
<div class="template-message__header">
<c:out value="${list.cdNm}"/>
<%-- <c:if test="${list.smsRplcAt eq 'Y'}"><button type="button" class="btn primary outline ml-2 xxsm" onclick="fn_switch_smsRplcAt(this)">문자 ON</button></c:if>
<c:if test="${list.smsRplcAt ne 'Y'}"><button type="button" class="btn dark outline ml-2 xxsm" onclick="fn_switch_smsRplcAt(this)">문자 OFF</button></c:if> --%>
<c:if test="${list.smsRplcAt eq 'Y'}"><span class="btn primary outline ml-2 xxsm">문자 ON</span></c:if>
<c:if test="${list.smsRplcAt ne 'Y'}"><span class="btn dark outline ml-2 xxsm">문자 OFF</span></c:if>
</div>
<div class="template-message__body">
<div class="sms-manage">
<%-- <textarea class="textarea" title="알림톡 입력" name="msg"><c:out value="${list.msg}"/></textarea> --%>
<textarea class="textarea" title="알림톡 입력" name="msg" readonly><c:out value="${list.msg}"/></textarea>
</div>
<br>
알림톡 실패시 대체 SMS 사용
<%-- <div class="sms-manage smsRplc" <c:if test="${list.smsRplcAt ne 'Y'}">style="background-color : #f8f9fa"</c:if>> --%>
<div class="sms-manage smsRplc">
<%-- <textarea class="textarea" title="대체문자 입력" name="smsRplcCn" <c:if test="${list.smsRplcAt ne 'Y'}">style="cursor: not-allowed" readonly</c:if>><c:out value="${list.smsCn}"/></textarea> --%>
<textarea class="textarea" title="대체문자 입력" name="smsRplcCn" readonly><c:out value="${list.smsCn}"/></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">
<a class="btn sm dark" onclick="fn_open_modal('#ntcntalkAtmcSndngTmplatUpdtPopupDiv',
'#ntcntalkAtmcSndngTmplatUpdtPopup',
'/admin/ntcn/tmplt/selectNtcntalkAtmcSndngTmplatUpdtPopupForm',
'formDvCd=${list.formDvCd}&formDtlDvCd=${list.formDtlDvCd}&sopmalCd='+$('#srchSopmalCd').val()); return false;" style="cursor : pointer;">
<i class="icon icon_pencil"></i>
메시지 수정
</a>
</div>
</div>
</div>
</c:forEach>
</c:when>
<c:otherwise>
<tr>
<td colspan="100%"><spring:message code="common.nodata"/></td>
</tr>
</c:otherwise>
</c:choose>
</div>
</div>
</section>

View File

@@ -0,0 +1,316 @@
<%@ 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 : MaNtcntalkAtmcSndngTmplatUpdtPopupU.jsp
Description : 메시지 자동 발송 상세
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024.05.16 이대환 최초 생성
--%>
<script src="<c:url value='/mngr/js/script.js'/>" defer></script> <!-- MNGR 스크립트 함수 -->
<script src="<c:url value='/js/gcone.js'/>"></script> <!-- 공통 스크립트 함수 -->
<script>
$(document).ready(function() {
$('.textarea').each(updateByteCount);
$('textarea[name="msg"]').each(updatePreview);
/* 알림톡 대체문자 사용여부 체크박스 */
var checkboxContainer = $('.modal .b-checkbox-container');
var checkbox = checkboxContainer.find('input[type="checkbox"]');
var checkboxVal = checkboxContainer.find('input[type="hidden"]');
var smsRplcDiv = checkboxContainer.parent().find('.smsRplc');
checkbox.change(function() {
if ($(this).prop('checked')) {
checkboxVal.val('Y');
smsRplcDiv.css('background-color', '');
} else {
checkboxVal.val('N');
smsRplcDiv.css('background-color', '#f8f9fa');
}
var smsRplcCn = smsRplcDiv.find('textarea[name="smsCn"]');
smsRplcCn.prop('readonly', !smsRplcCn.prop('readonly'));
smsRplcCn.css('cursor', smsRplcCn.css('cursor') === 'not-allowed' ? '' : 'not-allowed');
});
/* 치환코드 하드코딩 */
var modalLink = $('a[href="#substitution-pop"]');
modalLink.click(function() {
var formDtlDvCd = parseInt($(this).data('value'));
switch($("#formDvCd").val()){
case "FORM_DV_BBS":
fn_swith_SubModal(substitutionList[formDtlDvCdLength[0]+formDtlDvCd-1]);
break;
case "FORM_DV_CMMN":
fn_swith_SubModal(substitutionList[formDtlDvCdLength[1]+formDtlDvCd-1]);
break;
case "FORM_DV_DLVY":
fn_swith_SubModal(substitutionList[formDtlDvCdLength[2]+formDtlDvCd-1]);
break;
case "FORM_DV_MBR":
fn_swith_SubModal(substitutionList[formDtlDvCdLength[3]+formDtlDvCd-1]);
break;
case "FORM_DV_ORDR":
fn_swith_SubModal(substitutionList[formDtlDvCdLength[4]+formDtlDvCd-1]);
break;
case "FORM_DV_REMND":
fn_swith_SubModal(substitutionList[formDtlDvCdLength[5]+formDtlDvCd-1]);
break;
}
});
let substitutionList = [];
let formDtlDvCdLength = [];
/*게시판(FORM_DV_BBS)*/
formDtlDvCdLength.push(substitutionList.length);
//게시글 등록(01)
substitutionList.push(["sopmalCd", "shopName", "bbsNm"]);
//게시글 답변(02)
substitutionList.push(["sopmalCd", "shopName", "bbsNm"]);
/*공통(FORM_DV_CMMN)*/
formDtlDvCdLength.push(substitutionList.length);
//혜택 정보 수신동의 여부 확인(01)
substitutionList.push(["sopmalCd", "shopName", "shopDomain", "user_name", "marktRecptnAgreAt", "marktRecptnAgreUpdtDt", "cscTelnb", "rejectTelnb"]);
//혜택 정보 수신동의 변경 결과(02)
substitutionList.push(["sopmalCd", "shopName", "shopDomain", "user_name", "marktRecptnAgreAt", "marktRecptnAgreUpdtDt", "cscTelnb", "rejectTelnb"]);
//(비회원 구매자) 혜택 정보 수신동의 요청(03)
substitutionList.push(["sopmalCd", "shopName", "shopDomain", "Nm", "agree_short_url"]);
//(비회원 구매자) 혜택 정보 수신동의 결과(04)
substitutionList.push(["NONE"]);
/*배송(FORM_DV_DLVY)*/
formDtlDvCdLength.push(substitutionList.length);
//출고 완료(주문자)(01)
substitutionList.push(["sopmalCd", "shopName", "ordno", "go_Item", "delivery_company", "delivery_number", "order_user", "recipient_user"]);
//배송완료(주문자)(02)
substitutionList.push(["sopmalCd", "shopName", "ordno", "go_Item", "delivery_company", "delivery_number", "order_user", "recipient_user"]);
//출고 완료(받는분)(03)
substitutionList.push(["sopmalCd", "shopName", "ordno", "go_Item", "delivery_company", "delivery_number", "order_user", "recipient_user"]);
//배송완료(받는분)(04)
substitutionList.push(["sopmalCd", "shopName", "ordno", "go_Item", "delivery_company", "delivery_number", "order_user", "recipient_user"]);
/*회원(FORM_DV_MBR)*/
formDtlDvCdLength.push(substitutionList.length);
//회원 가입(01)
substitutionList.push(["sopmalCd", "shopName", "user_name"]);
//회원 탈퇴(02)
substitutionList.push(["sopmalCd", "shopName", "userid", "withdrawalDt"]);
//아이디 찾기(03)
substitutionList.push(["sopmalCd", "shopName", "userid"]);
//비밀번호 찾기(04)
substitutionList.push(["sopmalCd", "shopName", "passsword"]);
//개인인증번호 확인(05)
substitutionList.push(["sopmalCd", "shopName", "authnum"]);
//장기 미구매 고객 대상 쿠폰(06)
substitutionList.push(["NONE"]);
//생일 쿠폰(07)
substitutionList.push(["NONE"]);
/*주문(FORM_DV_ORDR)*/
formDtlDvCdLength.push(substitutionList.length);
//주문 접수(01)
substitutionList.push(["sopmalCd", "shopName", "ord_Item", "ordno", "bank_Account", "settleprice"]);
//결제 확인(02)
substitutionList.push(["sopmalCd", "shopName", "orderUser", "ord_Item", "ordno", "ordDate", "ordPrice"]);
//환불 완료(취소)(03)
substitutionList.push(["sopmalCd", "shopName"]);
//환불 완료(반품)(04)
substitutionList.push(["sopmalCd", "shopName"]);
//입금 요청(05)
substitutionList.push(["sopmalCd", "shopName", "ord_Item", "ordno", "bank_Account", "settleprice"]);
//선물하기 안내(06)
substitutionList.push(["NONE"]);
/*고객리마인드(FORM_DV_REMND)*/
formDtlDvCdLength.push(substitutionList.length);
//회원 멤버쉽 등급변경(01)
substitutionList.push(["shopName", "user_name", "mbrgradNm", "mypage_short_url", "cscTelnb", "rejectTelnb"]);
//상품 리뷰 작성 유도(02)
substitutionList.push(["shopName", "user_name", "ordrInnb", "goodsNm", "mypage_short_url", "cscTelnb", "rejectTelnb"]);
//만료 쿠폰(03)
substitutionList.push(["shopName", "userid", "user_name", "coupon_count", "mypage_short_url"]);
//소멸 예정 마일리지(04)
substitutionList.push(["shopName", "user_name", "mileage_rest", "mypage_short_url"]);
//생일 축하(05)
substitutionList.push(["shopName", "user_name", "coupNm", "validpdBgnDt", "validpdEndDt", "mypage_short_url", "cscTelnb", "rejectTelnb"]);
//장바구니 상품(06)
substitutionList.push(["shopName", "user_name", "goodsNm", "mypage_short_url", "cscTelnb", "rejectTelnb"]);
//정수기 필터 교체 알림(07)
substitutionList.push(["NONE"]);
//장바구니 타임세일(08)
substitutionList.push(["shopName", "user_name", "goodsNm", "mypage_short_url", "cscTelnb", "rejectTelnb"]);
});
$('.textarea').on('input', updateByteCount);
$('textarea[name="msg"]').on('input', updatePreview);
$('select[name="btnType"]').trigger('change');
</script>
<div id="ntcntalkAtmcSndngTmplatUpdtPopup" class="modal" style="max-width: 960px;">
<div class="modal-header">
<h4>알림톡 메시지 수정</h4>
</div>
<div class="modal-content">
<div class="message-edit__wrapper">
<div class="table-wrapper">
<form id="ntcntalkPopup">
<input type="hidden" name="tmplatList" id="ntcnTmplatList" value=""/>
<input type="hidden" name="formDvCd" value="<c:out value="${resultMap.bOTmpltVO.formDvCd}"/>">
<input type="hidden" name="formDtlDvCd" value="<c:out value="${resultMap.bOTmpltVO.formDtlDvCd}"/>">
<input type="hidden" name="sopmalCd" value="<c:out value="${resultMap.bOTmpltVO.sopmalCd}"/>">
<table class="table vertical">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col>
</colgroup>
<thead>
<tr>
<th>
<c:set var="boCtrlMap" value="${resultMap.boCtrlMap}"/>
<c:out value="${boCtrlMap.cdNm}"/>
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<div class="form-control-container mb-5">
<div class="left">
<h3 class="content-section__inner-title mb-0">내용</h3>
</div>
<div class="center">
</div>
<div class="right">
<a href="#substitution-pop" rel="modal:open" class="btn sm outline" data-value="<c:out value="${resultMap.bOTmpltVO.formDtlDvCd}"/>">
<i class="icon icon_info"></i>
치환 코드
</a>
<a href="#common-substitution-pop" rel="modal:open"
class="btn sm outline">
<i class="icon icon_info"></i>
공통 치환 코드
</a>
</div>
</div>
<div class="sms-manage">
<textarea class="textarea" title="sms 입력" name="msg"><c:out value="${boCtrlMap.msg}"/></textarea>
<div class="d-flex justify-end gray-7">
<span class="count">0</span>
<span class="mx-4">/</span>
<span>1000</span>
<span class="ml-4">자</span>
</div>
</div>
<div class="b-checkbox-container mt-8 ml-2">
<label class="b-checkbox checkbox">
<input type="checkbox" value="" <c:if test="${boCtrlMap.smsRplcAt eq 'Y'}">checked</c:if>>
<span class="check"></span>
<span class="control-label">알림톡 실패시 대체 SMS 사용</span>
</label>
<input type="hidden" name="smsRplcAt" value="<c:out value="${boCtrlMap.smsRplcAt}"/>">
</div>
<div class="sms-manage smsRplc" <c:if test="${boCtrlMap.smsRplcAt ne 'Y'}">style="background-color : #f8f9fa"</c:if>>
<textarea class="textarea" title="대체문자 입력" name="smsCn" <c:if test="${boCtrlMap.smsRplcAt ne 'Y'}">style="cursor: not-allowed" readonly</c:if>><c:out value="${boCtrlMap.smsCn}"/></textarea>
<div class="sms-manage__byte">
<span class="number">0</span>
<span class="text">byte</span>
</div>
</div>
</td>
</tr>
<tr>
<td colspan="100%">
<div style="float : left; display: inline-block;">
<span>버튼은 최대 5개까지 사용 가능합니다.</span>
<!-- (modal:
<a href="#info02" rel="modal:open">
<i class="mini-info-btn mb-3" style="font-style: normal;">?</i>
</a>
info:
<button class="mini-info-btn mb-3" data-info="info01">?</button>
버튼안내 팝업 삭제) -->
</div>
<div style="float:right; display: inline-block;">
<button type="button" class="circle-btn add" onclick="fn_add_buttonRow()"><span class="visually-hidden">추가</span></button>
</div>
</td>
</tr>
<c:forEach var="i" begin="1" end="5">
<c:set var="btnType" value="btnType0${i}"/>
<c:set var="btnNm" value="btnNm0${i}"/>
<c:set var="btnUrl01" value="btn0${i}Url01"/>
<c:set var="btnUrl02" value="btn0${i}Url02"/>
<c:if test="${not empty boCtrlMap[btnType]}">
<tr>
<td>
<div class="talk-edit-row">
<div class="select-box select-show-trigger">
<select name="btnType" title="해당 셀렉트에 대한 설명">
<option value="WL" <c:if test="${boCtrlMap[btnType] eq 'WL'}">selected</c:if>>버튼 링크</option>
<option value="DS" <c:if test="${boCtrlMap[btnType] eq 'DS'}">selected</c:if>>배송 조회</option>
</select>
</div>
<input class="WL input-text" type="text" name="btnNm" title="해당 인풋에 대한 설명" placeholder="버튼명(최대 28자)" maxlength="28"
value="<c:out value="${boCtrlMap[btnNm]}"/>" <c:if test="${boCtrlMap[btnType] eq 'DS'}">style="display: none;"</c:if>>
<input class="WL input-text xl" type="text" name="btnPcUrl" title="해당 인풋에 대한 설명" placeholder="링크주소"
value="<c:out value="${boCtrlMap[btnUrl02]}"/>" <c:if test="${boCtrlMap[btnType] eq 'DS'}">style="display: none;"</c:if>>
<input class="WL input-text xl" type="text" name="btnMUrl" title="해당 인풋에 대한 설명" placeholder="모바일 링크주소"
value="<c:out value="${boCtrlMap[btnUrl01]}"/>" <c:if test="${boCtrlMap[btnType] eq 'DS'}">style="display: none;"</c:if>>
<span class="DS w-full" <c:if test="${boCtrlMap[btnType] eq 'WL'}">style="display: none;"</c:if>>배송조회는 버튼 링크를 포함하지 않습니다.</span>
<button class="circle-btn delete" onclick="fn_remove_buttonRow(this)"><span class="visually-hidden">삭제</span></button>
</div>
</td>
</tr>
</c:if>
</c:forEach>
</tbody>
</table>
</form>
</div>
<div class="message-edit__right">
<div class="message-edit-preview">
<div class="message-edit-preview__image">
<img src="/mngr/images/image_talk.jpg" alt="">
</div>
<div class="message-edit-preview__content">
<div class="message-edit-preview__header">알림톡 도착</div>
<div class="message-edit-preview__body">
<textarea title="알림톡 내용" readonly></textarea>
</div>
<div class="message-edit-preview__footer">
<c:forEach var="i" begin="1" end="5">
<c:set var="btnType" value="btnType0${i}"/>
<c:set var="btnNm" value="btnNm0${i}"/>
<c:if test="${not empty boCtrlMap[btnType]}">
<a href="#" class="message-edit-preview__footer-item">
<c:if test="${boCtrlMap[btnType] eq 'WL'}">
<c:if test="${not empty boCtrlMap[btnNm]}">
<c:out value="${boCtrlMap[btnNm]}"/>
</c:if>
<c:if test="${empty boCtrlMap[btnNm]}">버튼 링크</c:if>
</c:if>
<c:if test="${boCtrlMap[btnType] eq 'DS'}">배송 조회</c:if>
</a>
</c:if>
</c:forEach>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<a href="#" rel="modal:close" class="btn outline">취소</a>
<button class="btn primary" onclick="fn_update_AtmcSndngTmplatForm('ntcntalkPopup')">저장하기</button>
</div>
</div>

View File

@@ -0,0 +1,234 @@
<%@ 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" %>
<!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/admin/Include.jsp" %>
<script>
$(document).ready(function() {
fn_set_dateRange_function('#dataRangeBtn', 'srchStrtSndngDt','srchEndSndngDt', 'srchEndSndngDt');
fn_set_date('srchStrtSndngDt', 'srchEndSndngDt','srchEndSndngDt', '7D');
// 표 조회
fn_select_table_data(null, null);
// 날짜 검색
$("#srchBtn").on("click", function(){
fn_select_table_data(null, null);
});
// 표
// $("#").on("click", function() {
// fn_select_table_data(null, '', 'coupNm', 'ASC');
// });
// 페이징 제자리 새로고침(Submit) 방지
$('body').on('click', 'button.pagination__item.active', function(event) {
event.preventDefault();
});
});
/**
* 테이블 데이터 조회
* pageIndex
* unitFlag
* - 없음 : ''
*
* ordrStand
* - fn_select_ordrStandMapping() 참조
*
* ordrType
* - 오름차순 : 'ASC'
* - 내림차순 : 'DESC'
*/
let PordrStand;
let TordrType;
const fn_select_table_data = function(pageIndex, unitFlag, ordrStand, ordrType) {
// console.log("fn_select_table_data() sopmalCd : ", sopmalCdFlag);
const srchStrtSndngDt = $("#srchStrtSndngDt").val();
const srchEndSndngDt = $("#srchEndSndngDt").val();
const sopmalCdFlag = $('#select_box').val();
const pageUnit = $("#pageUnit").val();
const recordCountPerPage = '50';
if(!pageIndex) {
$('#pageIndex').val(1);
} else {
$('#pageIndex').val(pageIndex);
}
const pageIndexValue = $("#pageIndex").val();
if(!unitFlag) {
// if ($('#').hasClass('selected')) {
unitFlag = '';
// }
}
if(!pageIndex){
if (!ordrType && PordrStand == ordrStand) {
//정렬 방식 변경 (정렬 기준 파라미터가 이전과 동일)
TordrType = (TordrType == 'ASC') ? 'DESC' : 'ASC';
}else if(!ordrType){
//정렬 방식 기본값으로 지정 (정렬 기준 변경)
TordrType = 'ASC';
}else{
//정렬 방식 초기화 (표 조회)
TordrType = ordrType;
}
if(!ordrStand){
//정렬 기준 기본값으로 지정
PordrStand = 'couponNm';
}else{
//정렬 기준 변경
PordrStand = ordrStand;
}
}
const data = {
srchStrtSndngDt : srchStrtSndngDt,
srchEndSndngDt : srchEndSndngDt,
sopmalCd : sopmalCdFlag,
unitFlag : unitFlag,
pageUnit : pageUnit,
ordrStand : PordrStand,
ordrType : TordrType,
pageIndex : pageIndexValue,
recordCountPerPage : recordCountPerPage
}
$.ajax({
type: "POST",
url : "/admin/stats/marktAnals/selectAdminMbrNdMlgStatsTableInqire",
data : data,
success:function(resultHtml) {
// console.log('success');
$('#pageDiv').empty();
$('#pageDiv').html(resultHtml);
// $('.reorder_' + PordrStand).text(fn_select_ordrStandMapping()[PordrStand] + (TordrType === 'ASC' ? ' ▲' : ' ▼'));
}
});
}
/**
* 테이블 정렬 조건(행)
*/
const fn_select_ordrStandMapping = function() {
let ordrStandMapping;
ordrStandMapping = {
'couponNm': '쿠폰명',
'couponDv': '쿠폰구분',
'discountAmt': '쿠폰할인금액',
'couponDwldCnt': '발급건수',
'couponUseCnt': '사용건수(중복)',
'couponUseDcnt': '사용건수'
};
return ordrStandMapping;
}
</script>
</head>
<body>
<%@include file ="/WEB-INF/views/comm/admin/Header.jsp" %>
<main class="main">
<%@include file ="/WEB-INF/views/comm/admin/Left.jsp" %>
<div class="content">
<div class="content__inner">
<input type="hidden" id="pageIndex" value="${ resultMap.pageIndex }"/>
<input type="hidden" id="pageUnit" value="${ resultMap.pageUnit }"/>
<button class="side-nav__fold"><span class="visually-hidden">좌측메뉴 펼치기/닫기</span></button>
<div class="page-title">
<h3 class="page-title__title">회원 및 마일리지</h3>
</div>
<section class="content-section">
<div class="table-wrapper">
<table class="table dashboardSearch">
<tbody>
<tr>
<th>검색조건</th>
<td>
<div class="td-inner">
<div class="input-container">
<input type="text" class="datepicker"
id="srchStrtSndngDt" name="srchStrtSndngDt" title="시작 날짜 선택"
autocomplete="off">
<span class="tilde">~</span>
<input type="text" class="datepicker"
id="srchEndSndngDt" name="srchEndSndngDt" title="종료 날짜 선택"
autocomplete="off">
</div>
<div class="dateRange-btnContainer" id="dataRangeBtn">
<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 selected" id="sevenDays">일주일</button>
<button type="button" class="dateRange-btn" id="oneMonth">1개월</button>
<button type="button" class="dateRange-btn" id="threeMonth">3개월</button>
<button type="button" class="dateRange-btn" id="sixMonth">6개월</button>
<button type="button" class="dateRange-btn" id="year">1년</button>
</div>
<button class="btn sm primary ml-5" type="button" id="srchBtn">검색</button>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="table-wrapper">
<table class="table dashboardSearch">
<tbody>
<tr>
<td>
<div class="td-inner">
<div class="select-box">
<select id="select_box" title="" onchange="fn_select_table_data(null, null)">
<c:forEach items="${ cond.resultList }" var="list" varStatus="status">
<option value="${ list.sopmalCd }"> ${ list.sopmalNm } </option>
</c:forEach>
</select>
</div>
</div>
</td>
</tr>
</tbody>
</table>
<div id="pageDiv">
</div>
</div>
</section>
</div>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</main>
</body>
</html>

View File

@@ -0,0 +1,79 @@
<%@ 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="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="ui" uri="http://www.winbit.kr/ctl/ui" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<script>
$(document).ready(function() {
// $('th[class^="reorder_"]').click(function() {
// var className = $(this).attr('class');
// var ordrStand = className.replace('reorder_', '');
// fn_select_table_data(null, null, ordrStand);
// });
});
</script>
<style>
/*th[class^="reorder_"] {*/
/* cursor: pointer;*/
/*}*/
</style>
<section class="content-section">
<table class="table vertical">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: auto;">
</colgroup>
<thead id="tableHeader">
<tr>
<th class="reorder_t">gubun</th>
<th class="reorder_t">union_cust_cnt</th>
<th class="reorder_t">NC_CU_CNT</th>
<th class="reorder_t">CH_CU_CNT</th>
<th class="reorder_t">TZ_CU_CNT</th>
<th class="reorder_t">PL_CU_CNT</th>
<th class="reorder_t">NB_CU_CNT</th>
<th class="reorder_t">DT_CU_CNT</th>
<th class="reorder_t">DL_CU_CNT</th>
<th class="reorder_t">AF_CU_CNT</th>
<th class="reorder_t">BD_CU_CNT</th>
<th class="reorder_t">LF_CU_CNT</th>
<th class="reorder_t">JM_CU_CNT</th>
</tr>
</thead>
<tbody id="tableBody">
<c:if test="${ empty resultMap.resultList }">
<tr>
<td class="row-no-data" colspan="20">조회된 데이터가 없습니다.</td>
</tr>
</c:if>
<c:forEach items="${ resultMap.resultList }" var="list" varStatus="status">
<tr>
<td>${ list.gubun }</td>
<td>${ list.unionCustCnt }</td>
<td>${ list.ncCuCnt }</td>
<td>${ list.chCuCnt }</td>
<td>${ list.tzCuCnt }</td>
<td>${ list.plCuCnt }</td>
<td>${ list.nbCuCnt }</td>
<td>${ list.dtCuCnt }</td>
<td>${ list.dlCuCnt }</td>
<td>${ list.afCuCnt }</td>
<td>${ list.bdCuCnt }</td>
<td>${ list.lfCuCnt }</td>
<td>${ list.jmCuCnt }</td>
<%-- <td><fmt:formatNumber value="${ list.slepricSum }" pattern="#,###"/></td>--%>
</tr>
</c:forEach>
</tbody>
</table>
</section>
<%--<div class="pagination__container">--%>
<%-- <ui:pagination paginationInfo="${ resultMap.paginationInfo }" type="image" jsFunction="fn_select_table_data" />--%>
<%--</div>--%>

View File

@@ -0,0 +1,118 @@
<%@ 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" %>
<!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/admin/Include.jsp" %>
</head>
<script>
$(document).ready(function() {
fn_set_dateRange_function('#dataRangeBtn', 'srchStrtSndngDt','srchEndSndngDt', 'srchEndSndngDt');
fn_set_date('srchStrtSndngDt', 'srchEndSndngDt','srchEndSndngDt', '7D');
// 표 조회
fn_select_table_data();
// 날짜 검색
$("#srchBtn").on("click", function(){
fn_select_table_data();
});
});
/**
* 테이블 데이터 조회
*/
const fn_select_table_data = function() {
const srchYear = $("#srchYear").val();
const srchMnt = $("#srchMnt").val();
const data = {
srchYear : srchYear,
srchMnt : srchMnt,
}
$.ajax({
type: "POST",
url : "/admin/stats/marktAnals/selectAdminMlgStlListInqire",
data : data,
success:function(resultHtml) {
$('#pageDiv').empty();
$('#pageDiv').html(resultHtml);
}
});
}
</script>
<body>
<%@include file ="/WEB-INF/views/comm/admin/Header.jsp" %>
<main class="main">
<%@include file ="/WEB-INF/views/comm/admin/Left.jsp" %>
<div class="content">
<div class="content__inner">
<button class="side-nav__fold"><span class="visually-hidden">좌측메뉴 펼치기/닫기</span></button>
<div class="page-title">
<h3 class="page-title__title">마일리지 정산</h3>
</div>
<section class="content-section">
<div class="table-wrapper">
<table class="table dashboardSearch">
<tbody>
<tr>
<th>검색조건</th>
<td>
<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>
<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>
<button class="btn sm primary ml-5" type="button" id="srchBtn">검색</button>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="table-wrapper">
<div id="pageDiv">
</div>
</div>
</section>
</div>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</main>
</body>
</html>

View File

@@ -0,0 +1,220 @@
<%@ 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" %>
<script>
$(document).ready(function() {
});
</script>
<body>
<section class="content-section">
<table class="table vertical">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: auto;">
</colgroup>
<thead id="tableHeader">
<tr>
<th>법인</th>
<th>GC</th>
<th>TB</th>
<th>SL</th>
<th>NP</th>
<th>CN</th>
<th>DB</th>
<th>CN</th>
<th>CN</th>
<th>CN</th>
<th>DB</th>
<th>TB</th>
<th>IS</th>
</tr>
</thead>
<tbody id="tableBody">
<tr>
<td>
사이트
</td>
<td>
CH
</td>
<td>
TZ
</td>
<td>
NC
</td>
<td>
PL
</td>
<td>
NB
</td>
<td>
OY
</td>
<td>
KL
</td>
<td>
DT
</td>
<td>
CB
</td>
<td>
AP
</td>
<td>
LF
</td>
<td>
GO
</td>
</tr>
<c:choose>
<c:when test="${not empty resultMap.mlgStatList}">
<c:forEach var = "result" items = "${resultMap.mlgStatList}">
<tr>
<td>
<c:out value="${result.sGroup}"/>
</td>
<td>
<fmt:formatNumber value="${result.sumCh}" type="number" pattern="#,###"/>
</td>
<td>
<fmt:formatNumber value="${result.sumTz}" type="number" pattern="#,###"/>
</td>
<td>
<fmt:formatNumber value="${result.sumNc}" type="number" pattern="#,###"/>
</td>
<td>
<fmt:formatNumber value="${result.sumPl}" type="number" pattern="#,###"/>
</td>
<td>
<fmt:formatNumber value="${result.sumNb}" type="number" pattern="#,###"/>
</td>
<td>
<fmt:formatNumber value="${result.sumOy}" type="number" pattern="#,###"/>
</td>
<td>
<fmt:formatNumber value="${result.sumKl}" type="number" pattern="#,###"/>
</td>
<td>
<fmt:formatNumber value="${result.sumDt}" type="number" pattern="#,###"/>
</td>
<td>
<fmt:formatNumber value="${result.sumCb}" type="number" pattern="#,###"/>
</td>
<td>
<fmt:formatNumber value="${result.sumAp}" type="number" pattern="#,###"/>
</td>
<td>
<fmt:formatNumber value="${result.sumLf}" type="number" pattern="#,###"/>
</td>
<td>
<fmt:formatNumber value="${result.sumGc}" type="number" pattern="#,###"/>
</td>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
<tr>
<td colspan="13"><spring:message code="common.nodata"/></td>
</tr>
</c:otherwise>
</c:choose>
</tbody>
</table>
</section>
<section class="content-section">
<table class="table vertical">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: auto;">
</colgroup>
<thead>
<tr>
<th>순서</th>
<th>사이트</th>
<th>CH</th>
<th>TZ</th>
<th>NC</th>
<th>PL</th>
<th>NB</th>
<th>OY</th>
<th>KL</th>
<th>DT</th>
<th>CB</th>
<th>AP</th>
<th>LF</th>
<th>GC</th>
</tr>
</thead>
<tbody>
<c:choose>
<c:when test="${not empty resultMap.mlgStlList}">
<c:forEach var = "result" items = "${resultMap.mlgStlList}">
<tr>
<td>
<c:out value="${result.sSeq}"/>
</td>
<td>
<c:out value="${result.sGroup}"/>
</td>
<td>
<fmt:formatNumber value="${result.ch}" type="number" pattern="#,###"/>
</td>
<td>
<fmt:formatNumber value="${result.tz}" type="number" pattern="#,###"/>
</td>
<td>
<fmt:formatNumber value="${result.nc}" type="number" pattern="#,###"/>
</td>
<td>
<fmt:formatNumber value="${result.pl}" type="number" pattern="#,###"/>
</td>
<td>
<fmt:formatNumber value="${result.nb}" type="number" pattern="#,###"/>
</td>
<td>
<fmt:formatNumber value="${result.oy}" type="number" pattern="#,###"/>
</td>
<td>
<fmt:formatNumber value="${result.kl}" type="number" pattern="#,###"/>
</td>
<td>
<fmt:formatNumber value="${result.dt}" type="number" pattern="#,###"/>
</td>
<td>
<fmt:formatNumber value="${result.cb}" type="number" pattern="#,###"/>
</td>
<td>
<fmt:formatNumber value="${result.ap}" type="number" pattern="#,###"/>
</td>
<td>
<fmt:formatNumber value="${result.lf}" type="number" pattern="#,###"/>
</td>
<td>
<fmt:formatNumber value="${result.gc}" type="number" pattern="#,###"/>
</td>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
<tr>
<td colspan="14"><spring:message code="common.nodata"/></td>
</tr>
</c:otherwise>
</c:choose>
</tbody>
</table>
</section>

View File

@@ -0,0 +1,124 @@
<%@ 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" %>
<!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/admin/Include.jsp" %>
</head>
<script>
$(document).ready(function() {
fn_set_dateRange_function('#dataRangeBtn', 'srchStrtSndngDt','srchEndSndngDt', 'srchEndSndngDt');
fn_set_date('srchStrtSndngDt', 'srchEndSndngDt','srchEndSndngDt', '7D');
// 표 조회
fn_select_table_data();
// 날짜 검색
$("#srchBtn").on("click", function(){
});
});
/**
* 테이블 데이터 조회
*/
const fn_select_table_data = function() {
const srchStrtSndngDt = $("#srchStrtSndngDt").val();
const srchEndSndngDt = $("#srchEndSndngDt").val();
const data = {
srchStrtSndngDt : srchStrtSndngDt,
srchEndSndngDt : srchEndSndngDt,
}
$.ajax({
type: "POST",
url : "/admin/stats/marktAnals/selectAdminMlgTableInqire",
data : data,
success:function(resultHtml) {
console.log('success');
$('#pageDiv').empty();
$('#pageDiv').html(resultHtml);
}
});
}
</script>
<body>
<%@include file ="/WEB-INF/views/comm/admin/Header.jsp" %>
<main class="main">
<%@include file ="/WEB-INF/views/comm/admin/Left.jsp" %>
<div class="content">
<div class="content__inner">
<button class="side-nav__fold"><span class="visually-hidden">좌측메뉴 펼치기/닫기</span></button>
<div class="page-title">
<h3 class="page-title__title">회원 및 마일리지</h3>
</div>
<section class="content-section">
<div class="table-wrapper">
<table class="table dashboardSearch">
<tbody>
<tr>
<th>검색조건</th>
<td>
<div class="td-inner">
<div class="input-container">
<input type="text" class="datepicker"
id="srchStrtSndngDt" name="srchStrtSndngDt" title="시작 날짜 선택"
autocomplete="off">
<span class="tilde">~</span>
<input type="text" class="datepicker"
id="srchEndSndngDt" name="srchEndSndngDt" title="종료 날짜 선택"
autocomplete="off">
</div>
<div class="dateRange-btnContainer" id="dataRangeBtn">
<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 selected" id="sevenDays">일주일</button>
<button type="button" class="dateRange-btn" id="oneMonth">1개월</button>
<button type="button" class="dateRange-btn" id="threeMonth">3개월</button>
<button type="button" class="dateRange-btn" id="sixMonth">6개월</button>
<button type="button" class="dateRange-btn" id="year">1년</button>
</div>
<button class="btn sm primary ml-5" type="button" id="srchBtn">검색</button>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="table-wrapper">
<div id="pageDiv">
</div>
</div>
</section>
</div>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</main>
</body>
</html>

View File

@@ -0,0 +1,111 @@
<%@ 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" %>
<script>
$(document).ready(function() {
});
</script>
<body>
<section class="content-section">
<table class="table vertical">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: auto;">
</colgroup>
<thead id="tableHeader">
<tr>
<th>회수</th>
<th>발송날짜</th>
<th>소멸 월</th>
<th>대상</th>
<th>문자발송성공건수</th>
<th>구매자수</th>
<th>매출</th>
<th>사용마일리지</th>
<th>비율</th>
</tr>
</thead>
<tbody id="tableBody">
<tr>
<td rowspan='4'>-</td>
<td rowspan='4'>-</td>
<td rowspan='4'>-</td>
<td>폐점매장 회원</td>
<td>42,554</td>
<td>250</td>
<td>₩32,420,029</td>
<td>₩4,207,881</td>
<td>12%</td>
</tr>
<tr>
<td>매장 회원</td>
<td>51,780</td>
<td>250</td>
<td>₩32,420,029</td>
<td>₩4,207,881</td>
<td>12%</td>
</tr>
<tr>
<td>온라인 회원</td>
<td>212,770</td>
<td>250</td>
<td>₩32,420,029</td>
<td>₩4,207,881</td>
<td>12%</td>
</tr>
<tr>
<td>합계</td>
<td>212,770</td>
<td>250</td>
<td>₩32,420,029</td>
<td>₩4,207,881</td>
<td>12%</td>
</tr>
</tbody>
</table>
</section>
<section class="content-section">
<table class="table vertical">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: auto;">
</colgroup>
<thead id="tableHeader">
<tr>
<th>날짜</th>
<th>내용</th>
<th>숫자</th>
<th>비율</th>
</tr>
</thead>
<tbody id="tableBody">
<tr>
<td rowspan='2'>발송기간</td>
<td>구매한 회원중 안내문자 받기전 1년 이상 구매 하지 않은 회원수</td>
<td>-</td>
<td>발송 대상 대비 비율</td>
</tr>
<tr>
<td>구매한 회원중 안내문자 받기전에도 1년안에 구매이력 있던 회원수</td>
<td>-</td>
<td>발송 대상 대비 비율</td>
</tr>
</tbody>
</table>
</section>

View File

@@ -0,0 +1,134 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%--
Class Name : MaBsnmInqirePopupR.jsp
Description : 사업자 상세조회 팝업
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
since : 2023.12.19 rvg 최초 생성
--%>
<div id="business-info-modal" class="modal" style="max-width: 900px;">
<div class="modal-header">
<h4>사업자 조회</h4>
</div>
<div class="modal-content">
<h3 class="content-section__title">사업자 정보</h3>
<div class="table-wrapper">
<table class="table">
<caption>사업자</caption>
<colgroup>
<col style="width: 15%;">
<col style="width: 35%;">
<col style="width: 15%;">
<col>
</colgroup>
<tbody>
<c:choose>
<c:when test="${ not empty resultMap.list }">
<c:forEach items="${ resultMap.list }" var="list" varStatus="status">
<tr>
<th>사업자(회사명)</th>
<td>
<div class="td-inner">
<c:out value="${list.bsnmNm}"/>
</div>
</td>
<th>업태/종목</th>
<td>
<div class="td-inner">
<c:out value="${list.bizcndCn}"/><span class="mx-5 gray-7">/</span><c:out value="${list.itemCn}"/>
</div>
</td>
</tr>
<tr>
<th>사업자등록번호</th>
<td>
<div class="td-inner">
<c:out value="${list.bizrnb.substring(0,3)}-${list.bizrnb.substring(3,5)}-${list.bizrnb.substring(5)}"/>
</div>
</td>
<th>통신판매업 신고번호</th>
<td>
<div class="td-inner">
<c:out value="${list.mobDclNb}"/>
</div>
</td>
</tr>
<tr>
<th>대표자명</th>
<td>
<div class="td-inner">
<c:out value="${list.reprsntvnm}"/>
</div>
</td>
<th>개인정보 보호책임자</th>
<td>
<div class="td-inner">
<c:out value="${list.indvdlinfoPrtcRspnberNm}"/>
</div>
</td>
</tr>
<tr>
<th>전화번호</th>
<td>
<div class="td-inner">
<c:out value="${list.telnb}"/>
</div>
</td>
<th>팩스번호</th>
<td>
<div class="td-inner">
<c:out value="${list.fxnb}"/>
</div>
</td>
</tr>
<tr>
<th>이메일</th>
<td>
<div class="td-inner">
<c:out value="${list.email}"/>
</div>
</td>
<th>영업신고증</th>
<td>
<div class="td-inner">
<c:out value="${list.bsnDclNb}"/>
</div>
</td>
</tr>
<tr>
<th>사업장 주소</th>
<td>
<div class="td-inner">
<div class="address-group">
<div class="address-line">
<span class="left">우편번호 : </span>
<c:out value="${list.zip}"/>
</div>
<div class="address-line">
<span class="left">주소 : </span>
<c:out value="${list.lnbAdres}"/>
</div>
<div class="address-line">
<span class="left">상세주소 : </span>
<c:out value="${list.dtlAdres}"/>
</div>
</div>
</div>
</td>
</tr>
</c:forEach>
</c:when>
</c:choose>
</tbody>
</table>
</div>
</div>
<div class="modal-footer">
<a href="#" rel="modal:close" class="btn outline">닫기</a>
</div>
</div>

View File

@@ -0,0 +1,103 @@
<%@ 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 : MaBsnmListInqireR.jsp
Description : 사업자 목록조회 리스트
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2023-12-14 박철민 최초 생성(퍼블리싱 적용)
2023-12-19 리브가 수정
2023-01-10 리브가 검색조건, 페이징정보 유지되도록 수정
--%>
<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_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>
<colgroup>
<col style="width: 6%;">
<col style="width: auto;">
<col style="width: 15%;">
<col style="width: 10%;">
<col style="width: 7%;">
<col style="width: 10%;">
<col style="width: 12%;">
<col style="width: 12%;">
<col style="width: 10%">
</colgroup>
<thead>
<tr>
<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.list }">
<c:forEach items="${ resultMap.list }" var="list" varStatus="status">
<tr>
<td><c:out value="${ resultMap.paginationInfo.totalRecordCount - list.rnum + 1 }" /></td>
<td class="left">
<a onclick="fn_open_modal('#modal','#business-info-modal','selectBsnmInqirePopup',{'bsnmInnb': <c:out value="${list.bsnmInnb}"/>}); return false;"
class="under-line"><c:out value="${list.bsnmNm}"/></a></td>
<td><c:out value="${list.bizcndCn}"/>&nbsp; <c:if test="${ not empty list.itemCn}">/</c:if>&nbsp;<c:out value="${list.itemCn}"/></td>
<td><c:out value="${list.bizrnb}"/></td>
<td><c:out value="${list.reprsntvnm}"/></td>
<td><c:out value="${list.telnb}"/></td>
<td><c:out value="${list.mobDclNb}"/></td>
<td><c:out value="${list.bsnDclNb}"/></td>
<td>
<div class="manage-btn-container">
<button class="btn xsm primary outline" type="button"
onclick="fn_move_dtl_uptpage(<c:out value="${list.bsnmInnb}"/>)">
<spring:message code="button.update"/></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>
</section>
<div class="pagination__container">
<ui:pagination paginationInfo="${resultMap.paginationInfo}" type="image" jsFunction="fn_select_list"/>
</div>

View File

@@ -0,0 +1,154 @@
<%@ 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 : MaBsnmListInqireRForm.jsp
Description : 사업자 목록조회 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2023-01-10 리브가 최초생성
--%>
<!DOCTYPE html>
<html lang="ko">
<%-- 공통 include --%>
<head>
<%@include file ="/WEB-INF/views/comm/admin/Include.jsp" %>
</head>
<script>
$(document).ready(function () {
let pageIndex = '<c:out value="${ resultMap.BOBsnmVO.pageIndex }"/>';
let pageUnit = '<c:out value="${ resultMap.BOBsnmVO.pageUnit }"/>';
fn_select_list(pageIndex, pageUnit);
});
/* ********************************************************
* 목록 조회
******************************************************** */
const fn_select_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;
}
}
$.ajax({
type: "post",
url : "<c:url value="/admin/store/bsnm/selectBsnmListInqire"/>",
data : dataStr,
success:function(resultHtml) {
$('#pageDiv').html(resultHtml);
$('#pageUnit').niceSelect();
}
});
}
/* ********************************************************
* 수정폼 이동
******************************************************** */
const fn_move_dtl_uptpage = function(Innb) {
const url = '<c:url value="/admin/store/bsnm/selectBsnmUpdtForm"/>';
$('#listForm').attr('action', url);
$('#listForm').attr('method', 'post');
$('#bsnmInnb').val(Innb);
$('#listForm').submit();
}
/* ********************************************************
* 등록폼 이동
******************************************************** */
const fn_move_regpage = function() {
const url = '<c:url value="/admin/store/bsnm/selectBsnmRegistForm"/>';
$('#listForm').attr('action', url);
$('#listForm').attr('method', 'post');
$('#listForm').submit();
};
history.replaceState({}, null, location.pathname);
</script>
<body>
<%@include file ="/WEB-INF/views/comm/admin/Header.jsp" %>
<main class="main">
<%@include file ="/WEB-INF/views/comm/admin/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 onclick="fn_move_regpage()" class="btn primary">사업자 <spring:message code="button.insert"/></button>
</div>
</div>
<form id='listForm' name="listForm" method="post" action="<c:url value="/admin/store/bsnm/selectBsnmListInqireForm"/>">
<input type="hidden" id="pageIndex" name="pageIndex" value="${ resultMap.BOBsnmVO.pageIndex }"/>
<input type="hidden" id="bsnmInnb" name="bsnmInnb"/>
<section class="content-section" 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="select-box">
<select title="검색타입" id="srchType" name="srchType">
<option value="BSNM_NM" <c:if test="${ resultMap.BOBsnmVO.srchType == 'BSNM_NM'}">selected="selected"</c:if>>사업자명</option>
<option value="BIZRNB" <c:if test="${ resultMap.BOBsnmVO.srchType == 'BIZRNB'}">selected="selected"</c:if>>사업자등록번호</option>
<option value="REPRSNTVNM" <c:if test="${ resultMap.BOBsnmVO.srchType == 'REPRSNTVNM'}">selected="selected"</c:if>>대표자명</option>
<option value="MOB_DCL_NB" <c:if test="${ resultMap.BOBsnmVO.srchType == 'MOB_DCL_NB'}">selected="selected"</c:if>>통신판매업신고번호</option>
</select>
</div>
<input class="input-text xl" type="text" title="검색어" id="srchStr" name="srchStr" value="<c:out value="${ resultMap.BOBsnmVO.srchStr }" />">
</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(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>
</div>
</main>
</body>
<%--모달--%>
<div id="modal"/>
</html>

View File

@@ -0,0 +1,398 @@
<%@ 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" %>
<%--
Class Name : MaBsnmRegistC.jsp
Description : 사업자 등록
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2023.12.19 리브가 최초 생성
2023-01-10 리브가 검색조건, 페이징정보 유지되도록 수정
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@include file ="/WEB-INF/views/comm/admin/Include.jsp" %>
</head>
<script>
$( document ).ready(function() {
$('.bizrnb-container input').on('input', function () {
// 사업자번호 필드 값 결합
var combinedValue = $('#bizrnb1').val() + $('#bizrnb2').val() + $('#bizrnb3').val();
$('#combiBizrnb').val(combinedValue);
});
$('.email-container input').on('input', function () {
fn_email_combinedValue();
});
// 이메일 도메인
$('#domain-list').change(function () {
fn_updateEmailFields();
fn_email_combinedValue();
});
fn_replace_kr_eng('#reprsntvnm');
fn_replace_kr('#indvdlinfoPrtcRspnberNm');
});
/* ********************************************************
* 한글 영문 공백변환
******************************************************** */
const fn_replace_kr_eng = function(id) {
$(id).keyup(function() {
// 한글, 영문만 허용하고 그 외의 문자는 모두 제거
var replace_text = $(this).val().replace(/[^가-힣a-zA-Z\s]/g, '');
$(this).val(replace_text);
});
}
/* ********************************************************
* 한글 제외 공백변환
******************************************************** */
const fn_replace_kr = function(id){
$(id).keyup(function() {
var replace_text = $(this).val().replace( /[a-z0-9]|[ \[\]{}()<>?|`~!@#$%^&*-_+=,.;:\"'\\]/g, '');
$(this).val(replace_text);
});
}
/* ********************************************************
* 이메일 아이디 + '@' + 도메인
******************************************************** */
const fn_email_combinedValue = function() {
if($('#email1').val() != '' && $('#email2').val() != '') {
var combinedValue = $('#email1').val() + '@' + $('#email2').val();
$('#combiEmail').val(combinedValue);
} else {
$('#combiEmail').val('');
}
}
/* ********************************************************
* 이메일 도메인 선택
******************************************************** */
const fn_updateEmailFields = function() {
$("#domain-list option:selected").each(function () {
if ($(this).val() == '99') { //직접입력일 경우
$("#email2").val(''); //값 초기화
$("#email2").attr("disabled", false); //활성화
} else { //직접입력이 아닐경우
$("#email2").val($(this).text()); //선택값 입력
$("#email2").attr("disabled", true); //비활성화
}
});
}
/* ********************************************************
* 등록 AJAX
******************************************************** */
const fn_regist = function() {
const url = '<c:url value="/admin/store/bsnm/insertBsnmRegist"/>';
const data = $('#listForm').serializeArray();
data.push({ name: 'email', value: $('#combiEmail').val() });
const bizrnb1 = $('#bizrnb1').val()
const bizrnb2 = $('#bizrnb2').val()
const bizrnb3 = $('#bizrnb3').val()
const bizrnb = bizrnb1+'-'+bizrnb2+'-'+bizrnb3
data.push({ name: 'bizrnb', value: bizrnb });
if(confirm('사업자를 <spring:message code="confirm.common.insert"/>')) {
$.ajax({
type: 'post',
url: url,
data: data,
success: function (data) {
let str = JSON.parse(data.resBody.result);
if(str.result=='success'){
alert('<spring:message code="success.common.insert"/>');
//등록 후 수정화면으로 이동
fn_move_dtl_uptpage(data.resBody.result.replace(/[^0-9]/g, ""));
} else if(str.result=='dublechk'){
alert("이미 등록된 사업자등록번호 입니다.");
} else{
alert('<spring:message code="fail.common.insert"/>');
}
}
});
}
};
/* ********************************************************
* 사업자등록번호 중복 조회 AJAX
******************************************************** */
function fn_id_doubleCheck() {
const url = '<c:url value="/admin/store/bsnm/selectBizrnbDplctInqire"/>';
var combiBizrnb = $('#combiBizrnb').val();
if(combiBizrnb.length != 10){
alert("사업자등록번호는 10자리 입니다.");
return false;
}
const bizrnb1 = $('#bizrnb1').val()
const bizrnb2 = $('#bizrnb2').val()
const bizrnb3 = $('#bizrnb3').val()
const bizrnb = bizrnb1+'-'+bizrnb2+'-'+bizrnb3
let data = {
'bizrnb': bizrnb
};
$.ajax({
type: "post",
url : url,
data : JSON.stringify(data),
contentType :'application/json',
success:function(result) {
const message = JSON.parse(result.resBody.result)
if(message === 0){
alert('사용가능한 사업자등록번호 입니다.');
return false;
}else{
alert('이미 등록된 사업자등록번호 입니다.');
return false;
}
}
});
};
/* ********************************************************
* 우편번호 찾기
******************************************************** */
const fn_set_postcode = function(data) {
$('#postcode').val(data.postcode);
if(data.addressType === '02') {
$('#address').val(data.jibunAddress);
} else {
$('#address').val(data.roadAddress);
}
}
/* ********************************************************
* 수정폼 이동
******************************************************** */
const fn_move_dtl_uptpage = function(Innb) {
const url = '<c:url value="/admin/store/bsnm/selectBsnmUpdtForm"/>';
$('#listForm').attr('action', url);
$('#listForm').attr('method', 'get');
$('#pageIndex').val(1);
$('#bsnmInnb').val(Innb);
$('#listForm').submit();
}
/* ********************************************************
* 목록 조회
******************************************************** */
const fn_select_list = function() {
const url = '<c:url value="/admin/store/bsnm/selectBsnmListInqireForm"/>';
$('#listForm').attr('action', url);
$('#listForm').attr('method', 'post');
$('#listForm').submit();
};
/* ********************************************************
* 숫자만 허용
******************************************************** */
function fn_only_num(input) {
var regex = /[^0-9]/g;
input.value = input.value.replace(regex, '');
input.value = input.value.toUpperCase();
}
</script>
<body>
<%@include file ="/WEB-INF/views/comm/admin/Header.jsp" %>
<main class="main">
<%@include file ="/WEB-INF/views/comm/admin/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 onclick="fn_select_list()" onkeypress="this.onclick" class="btn outline"><spring:message code="button.catalog"/></button>
<button class="btn primary" onclick="fn_regist();" ><spring:message code="button.insert"/></button>
</div>
</div>
<section class="content-section">
<form id="listForm" method="post" action="<c:url value="/admin/store/bsnm/insertBsnmRegist"/>">
<input type="hidden" id="combiBizrnb" name="combiBizrnb" value="">
<input type="hidden" id="combiEmail" name="combiEmail" 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>사업자(회사명)<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<input class="input-text md" type="text" id="bsnmNm" name="bsnmNm" title="사업자(회사명)" maxlength="35">
</div>
</td>
<th>업태/종목</th>
<td>
<div class="td-inner">
<input class="input-text" type="text" id="bizcndCn" name="bizcndCn" title="업태" placeholder="예) 제조업" maxlength="20">
<span class="mx-5 gray-7">/</span>
<input class="input-text" type="text" id="itemCn" name="itemCn" title="종목" placeholder="예) 건강식품" maxlength="20">
</div>
</td>
</tr>
<tr>
<th>사업자등록번호<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<div class="bizrnb-container">
<input type="text" class="input-text xsm" oninput="fn_only_num(this)" id="bizrnb1" name="bizrnb1" min="0" maxlength=3 title="사업자등록번호1" required="required">
<span class="mx-3 fs-16">-</span>
<input type="text" class="input-text xsm" oninput="fn_only_num(this)" id="bizrnb2" name="bizrnb2" min="0" maxlength=2 title="사업자등록번호2" required="required">
<span class="mx-3 fs-16">-</span>
<input type="text" class="input-text xsm" oninput="fn_only_num(this)" id="bizrnb3" name="bizrnb3" min="0" maxlength=5 title="사업자등록번호3" required="required">
</div>
<button type="button"
onclick="fn_id_doubleCheck(); return false;"
class="address-line__find-btn"><spring:message code="button.doubleCheck"/>
</button>
</div>
</td>
<th>통신판매업 신고번호<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<input class="input-text" type="text" id="mobDclNb" name="mobDclNb" title="통신판매업 신고번호" maxlength="35">
</div>
</td>
</tr>
<tr>
<th>대표자명<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<input class="input-text" type="text" id="reprsntvnm" name="reprsntvnm" title="대표자명" maxlength="20">
</div>
</td>
<th>개인정보 보호책임자<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<input class="input-text" type="text" id="indvdlinfoPrtcRspnberNm" name="indvdlinfoPrtcRspnberNm" title="개인정보 보호책임자" maxlength="20">
</div>
</td>
</tr>
<tr>
<th>전화번호<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<input class="input-text" type="text" id="telnb" oninput="fn_set_event(this, 'keyup', fn_fmt_telno)" name="telnb" title="전화번호" maxlength="13">
</div>
</td>
<th>팩스번호</th>
<td>
<div class="td-inner">
<input class="input-text" type="text" id="fxnb" name="fxnb" oninput="fn_set_event(this, 'keyup', fn_fmt_telno)" title="팩스번호" maxlength="13">
</div>
</td>
</tr>
<tr>
<th>이메일<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<div class="email-container" id="email" name="email">
<input type="text" class="input-text sm" id="email1" name="email1" title="이메일 아이디" maxlength="20" required="required">
<span class="mx-3 gray-7 fs-16">@</span>
<input type="text" class="input-text sm" id="email2" name="email2" title="이메일 도메인" maxlength="20" required="required">
</div>
<div class="select-box">
<select title="도메인 선택" id="domain-list" name="domain-list">
<c:forEach var="codeList" items="${ resultMap.codeList[0].emailAdres }" varStatus="">
<c:choose>
<c:when test="${codeList.cd eq '99'}">
<option value="${codeList.cd}" selected>${codeList.cdNm}</option>
</c:when>
<c:otherwise>
<option value="${codeList.cd}">${codeList.cdNm}</option>
</c:otherwise>
</c:choose>
</c:forEach>
</select>
</div>
</div>
</td>
<th>영업신고증</th>
<td>
<div class="td-inner">
<input class="input-text" type="text" id="bsnDclNb" name="bsnDclNb" title="영업신고증" maxlength="20">
</div>
</td>
</tr>
<tr>
<th>사업장 주소<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<div class="address-group">
<div class="address-line">
<span class="address-line__title">우편번호</span>
<input type="text" id="postcode" class="input-text xsm mr-2" value="" readonly
title="사업장 우편번호" name="zip">
<button type="button"
onclick="fn_select_postcode(fn_set_postcode); return false;"
class="address-line__find-btn">주소찾기
</button>
</div>
<div class="address-line">
<span class="address-line__title">주소</span>
<input type="text" id="address" class="input-text md" value="" readonly
title="사업장 주소" name="lnbAdres">
</div>
<div class="address-line">
<span class="address-line__title">상세주소</span>
<input type="text" id="detailAddress" class="input-text md" value="" maxlength="35"
title="사업장 상세주소" name="dtlAdres">
</div>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!--검색 조건 , 페이징 조건 -->
<input type="hidden" id="bsnmInnb" name="bsnmInnb" value=""/>
<input type="hidden" id="srchType" name="srchType" title="검색타입" value="<c:out value="${ resultMap.BOBsnmVO.srchType }"/>">
<input type="hidden" id="srchStr" name="srchStr" title="검색어" value="<c:out value="${ resultMap.BOBsnmVO.srchStr }"/>">
<input type="hidden" id="pageIndex" name="pageIndex" value="<c:out value="${ resultMap.BOBsnmVO.pageIndex }"/>"/>
<input type="hidden" id="pageUnit" name="pageUnit" value="<c:out value="${ resultMap.BOBsnmVO.pageUnit }"/>"/>
</form>
</section>
</div>
</div>
</main>
</body>
</html>

View File

@@ -0,0 +1,389 @@
<%@ page import="java.util.Date" %>
<%@ page import="java.util.Arrays" %>
<%@ page import="java.util.List" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%--
Class Name : MaBsnmUpdtU.jsp
Description : 사업자 수정
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2023.12.19 리브가 최초 생성
2023-01-10 리브가 검색조건, 페이징정보 유지되도록 수정
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@include file ="/WEB-INF/views/comm/admin/Include.jsp" %>
</head>
<script>
$(document).ready(function () {
$('.email-container input').on('input', function () {
fn_email_combinedValue();
});
// 이메일 도메인
$('#domain-list').change(function () {
fn_updateEmailFields();
fn_email_combinedValue();
});
fn_replace_kr('#reprsntvnm');
fn_replace_kr('#indvdlinfoPrtcRspnberNm');
});
/* ********************************************************
* 한글 제외 공백처리
******************************************************** */
const fn_replace_kr = function(id){
$(id).keyup(function() {
var replace_text = $(this).val().replace( /[a-z0-9]|[ \[\]{}()<>?|`~!@#$%^&*-_+=,.;:\"'\\]/g, '');
$(this).val(replace_text);
});
}
/* ********************************************************
* 이메일 아이디 + '@' + 도메인
******************************************************** */
const fn_email_combinedValue = function() {
if($('#email1').val() != '' && $('#email2').val() != '') {
var combinedValue = $('#email1').val() + '@' + $('#email2').val();
$('#combiEmail').val(combinedValue);
} else {
$('#combiEmail').val('');
}
}
/* ********************************************************
* 이메일 도메인 선택
******************************************************** */
const fn_updateEmailFields = function() {
$("#domain-list option:selected").each(function () {
if ($(this).val() == '99') { //직접입력일 경우
$("#email2").val(''); //값 초기화
$("#email2").attr("disabled", false); //활성화
} else { //직접입력이 아닐경우
$("#email2").val($(this).text()); //선택값 입력
$("#email2").attr("disabled", true); //비활성화
}
});
}
/* ********************************************************
* 수정 AJAX
******************************************************** */
const fn_update = function() {
const url = '<c:url value="/admin/store/bsnm/updateBsnmUpdt"/>';
const data = $('#listForm').serializeArray();
data.push({ name: 'email', value: $('#combiEmail').val() });
data.push({ name: 'bizrnb', value: $('#combiBizrnb').val() });
if(confirm('사업자를 <spring:message code="confirm.common.update"/>')) {
$.ajax({
type: 'post',
url: url,
data: data,
success: function (data) {
let str = JSON.parse(data.resBody.result);
if(str.result=='success'){
alert('<spring:message code="success.common.update"/>');
// 수정 후 수정화면 유지
fn_move_dtl_uptpage();
} else {
alert('<spring:message code="fail.common.update"/>');
}
}, error: function(data){
$("#overlay").fadeOut();
if(!data.responseJSON.resBody.message) {
alert('<spring:message code="error.internal-server"/>');
} else {
if(fn_check_json(data.responseJSON.resBody.message)) {
const errorObject = JSON.parse(data.responseJSON.resBody.message);
if(!errorObject) {
alert('<spring:message code="error.internal-server"/>');
} else {
if(!errorObject.errorMsg) {
alert('<spring:message code="error.internal-server"/>');
} else {
alert(errorObject.errorMsg);
let isMtched = false;
$('.main').eq(0).find('input,select,textarea').each(function(){
for(let idx=0; idx<errorObject.errorFields.length; idx++) {
if(errorObject.errorFields[idx].indexOf($(this).prop('name')) >= 0) {
isMtched = true;
break;
}
}
if(isMtched) {
$(this).focus();
return false;
} $('[required]').each(function () {
if ($(this).val() === '') {
$(this).focus();
return false;
}
});
});
}
}
} else {
if(data.responseJSON.resBody.message) {
alert(data.responseJSON.resBody.message);
} else {
alert('<spring:message code="error.internal-server"/>');
}
}
}
}
});
}
};
/* ********************************************************
* 삭제 AJAX
******************************************************** */
const fn_delete = function() {
const url = '<c:url value="/admin/store/bsnm/deleteBsnmDel"/>';
const data = $('#listForm').serialize();
if(confirm('사업자를 <spring:message code="confirm.common.delete"/>')) {
$.ajax({
type: 'post',
url: url,
data: data,
success: function (data) {
let str = JSON.parse(data.resBody.result);
if(str.result=='success'){
alert('<spring:message code="success.common.delete"/>');
// 삭제 후 목록 화면으로 이동
fn_select_list(1);
} else {
alert('<spring:message code="fail.common.delete"/>');
}
}
});
}
};
/* ********************************************************
* 우편번호 찾기
******************************************************** */
const fn_set_postcode = function(data) {
$('#postcode').val(data.postcode);
if(data.addressType === '02') {
$('#address').val(data.jibunAddress);
} else {
$('#address').val(data.roadAddress);
}
}
/* ********************************************************
* 목록 조회
******************************************************** */
const fn_select_list = function(pageIndex) {
const url = '<c:url value="/admin/store/bsnm/selectBsnmListInqireForm"/>';
$('#listForm').attr('action', url);
$('#listForm').attr('method', 'post');
if(pageIndex) {
$('#pageIndex').val(pageIndex);
}
$('#listForm').submit();
};
/* ********************************************************
* 수정폼 이동
******************************************************** */
const fn_move_dtl_uptpage = function() {
const url = '<c:url value="/admin/store/bsnm/selectBsnmUpdtForm"/>';
$('#listForm').attr('action', url);
$('#listForm').attr('method', 'get');
$('#pageIndex').val(1);
$('#listForm').submit();
}
</script>
<body>
<%@include file ="/WEB-INF/views/comm/admin/Header.jsp" %>
<main class="main">
<%@include file ="/WEB-INF/views/comm/admin/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 onclick="fn_select_list()" onkeypress="this.onclick" class="btn outline"><spring:message code="button.catalog"/></button>
<button class="btn dark" onclick="fn_delete();"><spring:message code="button.delete"/></button>
<button class="btn primary outline" onclick="fn_update(); return false;"><spring:message code="button.update"/></button>
</div>
</div>
<section class="content-section">
<form id="listForm" method="post" action="/admin/store/bsnm/selectSopThemaUpdtForm">
<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>
<c:choose>
<c:when test="${ not empty resultMap.list }">
<c:forEach items="${ resultMap.list }" var="list" varStatus="status">
<input type="hidden" id="bizrnb" name="bizrnb" value="<c:out value="${list.bizrnb}"/>"/>
<input type="hidden" id="bsnmInnb" name="bsnmInnb" value="<c:out value="${list.bsnmInnb}"/>"/>
<input type="hidden" id="combiEmail" name="combiEmail" value="<c:out value="${list.email}"/>">
<tr>
<th>사업자(회사명)<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<input class="input-text md" type="text" id="bsnmNm" name="bsnmNm" value="<c:out value="${list.bsnmNm}"/>" title="사업자(회사명)" maxlength="35">
</div>
</td>
<th>업태/종목</th>
<td>
<div class="td-inner">
<input class="input-text" type="text" id="bizcndCn" name="bizcndCn" value="<c:out value="${list.bizcndCn}"/>" title="업태" placeholder="예) 제조업" maxlength="20">
<span class="mx-5 gray-7">/</span>
<input class="input-text" type="text" id="itemCn" name="itemCn" value="<c:out value="${list.itemCn}"/>" title="종목" placeholder="예) 건강식품" maxlength="20">
</div>
</td>
</tr>
<tr>
<th>사업자등록번호<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<div class="bizrnb-container">
<c:out value="${list.bizrnb}"/>
</div>
</div>
</td>
<th>통신판매업 신고번호<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<input class="input-text" type="text" id="mobDclNb" name="mobDclNb" value="<c:out value="${list.mobDclNb}"/>" title="통신판매업 신고번호" maxlength="35">
</div>
</td>
</tr>
<tr>
<th>대표자명<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<input class="input-text" type="text" id="reprsntvnm" name="reprsntvnm" value="<c:out value="${list.reprsntvnm}"/>" title="대표자명" maxlength="20">
</div>
</td>
<th>개인정보 보호책임자<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<input class="input-text" type="text" id="indvdlinfoPrtcRspnberNm" name="indvdlinfoPrtcRspnberNm" value="<c:out value="${list.indvdlinfoPrtcRspnberNm}"/>" title="개인정보 보호책임자" maxlength="20">
</div>
</td>
</tr>
<tr>
<th>전화번호<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<input class="input-text" type="text" id="telnb" name="telnb" oninput="fn_set_event(this, 'keyup', fn_fmt_telno)" value="<c:out value="${list.telnb}"/>" title="전화번호" maxlength="13">
</div>
</td>
<th>팩스번호</th>
<td>
<div class="td-inner">
<input class="input-text" type="text" id="fxnb" name="fxnb" oninput="fn_set_event(this, 'keyup', fn_fmt_telno)" value="<c:out value="${list.fxnb}"/>" title="팩스번호" maxlength="13">
</div>
</td>
</tr>
<tr>
<th>이메일<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<div class="email-container">
<input type="text" class="input-text sm" id="email1" name="email1" value="<c:out value="${list.email1}"/>" title="이메일 아이디" maxlength="20" required="required">
<span class="mx-3 gray-7 fs-16">@</span>
<input type="text" class="input-text sm" id="email2" name="email2" value="<c:out value="${list.email2}"/>" title="이메일 도메인" maxlength="20" required="required">
</div>
<div class="select-box">
<select title="도메인 선택" id="domain-list" name="domain-list">
<c:forEach var="codeList" items="${ resultMap.codeList[0].emailAdres }" varStatus="">
<c:choose>
<c:when test="${codeList.cd eq '99'}">
<option value="${codeList.cd}" selected>${codeList.cdNm}</option>
</c:when>
<c:otherwise>
<option value="${codeList.cd}">${codeList.cdNm}</option>
</c:otherwise>
</c:choose>
</c:forEach>
</select>
</div>
</div>
</td>
<th>영업신고증</th>
<td>
<div class="td-inner">
<input class="input-text" type="text" id="bsnDclNb" name="bsnDclNb" value="<c:out value="${list.bsnDclNb}"/>" title="영업신고증" maxlength="20">
</div>
</td>
</tr>
<tr>
<th>사업장 주소<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<div class="address-group">
<div class="address-line">
<span class="address-line__title">우편번호</span>
<input type="text" id="postcode" class="input-text xsm mr-2" value="<c:out value="${list.zip}"/>" readonly
title="사업장 우편번호" name="zip">
<button type="button"
onclick="fn_select_postcode(fn_set_postcode); return false;"
class="address-line__find-btn">주소찾기
</button>
</div>
<div class="address-line">
<span class="address-line__title">주소</span>
<input type="text" id="address" class="input-text md" value="<c:out value="${list.lnbAdres}"/>" readonly
title="사업장 주소" name="lnbAdres">
</div>
<div class="address-line">
<span class="address-line__title">상세주소</span>
<input type="text" id="detailAddress" class="input-text md" value="<c:out value="${list.dtlAdres}"/>" maxlength="35"
title="사업장 상세주소" name="dtlAdres">
</div>
</div>
</div>
</td>
</tr>
</c:forEach>
</c:when>
</c:choose>
</tbody>
</table>
</div>
<!--검색 조건 , 페이징 조건 -->
<input type="hidden" id="srchType" name="srchType" title="검색타입" value="<c:out value="${ resultMap.BOBsnmVO.srchType }"/>">
<input type="hidden" id="srchStr" name="srchStr" title="검색어" value="<c:out value="${ resultMap.BOBsnmVO.srchStr }"/>">
<input type="hidden" id="pageIndex" name="pageIndex" value="<c:out value="${ resultMap.BOBsnmVO.pageIndex }"/>"/>
<input type="hidden" id="pageUnit" name="pageUnit" value="<c:out value="${ resultMap.BOBsnmVO.pageUnit }"/>"/>
</form>
</section>
</div>
</div>
</main>
</body>
</html>

View File

@@ -0,0 +1,191 @@
<%@ 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"%>
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld"%>
<%--
Class Name : maExtLinkC.jsp
Description : 외부연동 등록 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024.04.15 전일찬 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@include file ="/WEB-INF/views/comm/admin/Include.jsp" %>
</head>
<script>
$(document).ready(function() {
});
/* ********************************************************
* 외부연동 목록 이동
******************************************************** */
const fn_goto_list = function() {
$('#backUpData').attr('action', '<c:url value="/admin/store/extlink/selectExtLinkListForm"/>');
$('#backUpData').submit();
}
</script>
<body>
<%@include file ="/WEB-INF/views/comm/admin/Header.jsp" %>
<main class="main">
<%@include file ="/WEB-INF/views/comm/admin/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_goto_list()"><spring:message code="button.catalog"/></button>
<button type="button" class="btn primary" onclick="fn_regist_extlink();"><spring:message code="button.save"/></button>
</div>
</div>
<section class="content-section">
<form class="common-form" id="regForm">
<input type="hidden" name="srchExtrlNm" value="${resultMap.srchData.srchExtrlNm }" />
<input type="hidden" name="srchExtrlSystem" value="${resultMap.srchData.srchExtrlSystem }" />
<input type="hidden" name="pageUnit" value="${resultMap.srchData.pageUnit }" />
<input type="hidden" name="pageIndex" value="${resultMap.srchData.pageIndex }" />
<input type="hidden" name="pageDv" value="" />
<input type="hidden" name="useAt" value="Y" />
<div class="table-wrapper">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 15%;">
<col style="width: 35%;">
<col style="width: 15%;">
<col style="width: 35%;">
<tbody>
<tr>
<th>외부연동 명<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<input class="input-text xl" type="text" id="extrlNm" name="extrlNm" title="외부연동명" maxlength="48"/>
</div>
</td>
<th>연동 시스템<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<div class="select-box">
<select class="md" id="extrlSystem" name="extrlSystem" title="외부연동시스템" >
<c:forEach var="extlinkSystemList" items="${ resultMap.extLinkSystemList }" varStatus="">
<option value="${extlinkSystemList.extlinkSystemCd}"> ${extlinkSystemList.extlinkSystemNm} </option>
</c:forEach>
</select>
</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" id="extrlFunctionLogin" name="extrlFunctionLogin" value="Y">
<span class="check"></span>
<span class="control-label">가입 및 로그인</span>
</label>
<label class="b-checkbox checkbox">
<input type="checkbox" id="extrlFunctionBuy" name="extrlFunctionBuy" value="Y">
<span class="check"></span>
<span class="control-label">구매</span>
</label>
</div>
</div>
</td>
</tr>
</tr>
<tr>
<th>Client ID<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<input class="input-text xl" type="text" name="extrlClientId" title="clientId" maxlength="150"/>
</div>
</td>
</tr>
<tr>
<th>Cleint Secret<span class="red-7">*</span></th>
<td colspan="2">
<div class="td-inner">
<textarea class="textarea" name="extrlClientSecret" title="secret" rows="6" maxlength="300"></textarea>
</div>
</td>
</tr>
<tr>
<th>Cleint Pay Secret Key</th>
<td colspan="2">
<div class="td-inner">
<textarea class="textarea" name="extrlClientSecretKey" title="secretKey" rows="6" maxlength="300"></textarea>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</form>
</section>
</div>
</div>
<form id="backUpData" method="post" >
<input type="hidden" name="srchExtrlNm" value="${resultMap.srchData.srchExtrlNm }" />
<input type="hidden" name="srchExtrlSystem" value="${resultMap.srchData.srchExtrlSystem }" />
<input type="hidden" name="pageUnit" value="${resultMap.srchData.pageUnit }" />
<input type="hidden" name="pageIndex" value="${resultMap.srchData.pageIndex }" />
<input type="hidden" name="extrlInnb" value="" />
<input type="hidden" name="pageDv" value="" />
</form>
</main>
</body>
<script>
/* ********************************************************
* 외부연동 등록
******************************************************** */
const fn_regist_extlink = function() {
if(!confirm('외부연동을 <spring:message code="confirm.common.insert"/>')) return;
let params = $('#regForm').serialize();
$.ajax({
type : 'post',
url : '<c:url value="/admin/store/extlink/insertExtLinkRegist"/>',
data : params,
success : function (result) {
let data = JSON.parse(result.resBody.result);
if (data.result === 'fail') {
alert('<spring:message code="fail.common.insert"/>');
return;
}
if (data.result === "success") {
alert('<spring:message code="success.common.insert"/>');
$('#backUpData').find('[name=pageDv]').val('I');
$('#backUpData').find('[name=extrlInnb]').val(data.extrlInnb);
$('#backUpData').attr('action', '<c:url value="/admin/store/extlink/selectExtLinkUpdtForm"/>');
$('#backUpData').submit();
}
}
});
}
</script>
</html>

View File

@@ -0,0 +1,190 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ 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 : maExtLinkListForm.jsp
Description : 쇼핑몰 외부연동 목록
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024.04.15 전일찬 최초생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@include file ="/WEB-INF/views/comm/admin/Include.jsp" %>
<script>
$(document).ready(function(){
let pageIndex = '<c:out value="${ resultMap.paramVO.pageIndex }"/>';
let pageUnit = '<c:out value="${ resultMap.paramVO.pageUnit }"/>';
let pageDv = '<c:out value="${ resultMap.paramVO.pageDv }"/>';
if (pageDv == '') {
fn_select_extlink_list(pageIndex, pageUnit);
} else {
fn_select_extlink_list('1', '10');
}
$('[name=srchExtrlNm]').on('keydown', function(event) {
if (event.keyCode === 13) {
event.preventDefault();
fn_select_extlink_list(1);
}
});
});
/* ********************************************************
* 외부연동 목록조회
******************************************************** */
const fn_select_extlink_list = function(pageIndex, pageUnit) {
if (pageIndex == undefined || pageUnit == '') {
$('#pageIndex').val('1');
} else {
$('#pageIndex').val(pageIndex);
}
let params = $('#srchForm').serialize();
if (pageUnit != undefined || pageUnit == '') {
params += '&pageUnit=' + pageUnit;
} else {
params += '&pageUnit=' + $('#pageUnit').val();
}
$.ajax({
type : 'post',
url : '<c:url value="/admin/store/extlink/selectExtLinkListInqire"/>',
data : params,
success : function(data) {
$('#pageDiv').html(data);
$('#pageUnit').niceSelect();
}
});
}
/**********************************************
* 외부연동 검색 초기화
***********************************************/
const fn_clear_input = function() {
$('[name=srchExtrlNm]').val('');
$('#srchExtrlSystem').val('').niceSelect('update');
};
/**********************************************
* 외부연동 등록 화면 이동
***********************************************/
const fn_move_extlinkRegist = function() {
$('#srchForm').attr('action', '<c:url value="/admin/store/extlink/selectExtLinkRegistForm"/>');
$('#srchForm').attr('method', 'post');
$('#srchForm').submit();
};
/**********************************************
* 외부연동 수정 화면 이동
***********************************************/
const fn_move_extlinkDetail = function(_extlinkInnb) {
$('#extrlInnb').val(_extlinkInnb);
$('#srchForm').attr('action', '<c:url value="/admin/store/extlink/selectExtLinkUpdtForm"/>');
$('#srchForm').attr('method', 'post');
$('#srchForm').submit();
};
/**********************************************
* 외부연동 엑셀 다운로드
***********************************************/
const fn_down_excelFile = function() {
$('#srchForm').attr('action', '<c:url value="/admin/store/extlink/excelFileDownload"/>');
$('#srchForm').attr('method', 'post');
$('#srchForm').submit();
};
</script>
</head>
<body>
<%@include file ="/WEB-INF/views/comm/admin/Header.jsp" %>
<main class="main">
<%@include file ="/WEB-INF/views/comm/admin/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" onclick="fn_move_extlinkRegist();">외부연동 <spring:message code="button.insert"/></button>
</div>
</div>
<form id="srchForm">
<input type="hidden" id="extrlInnb" name="extrlInnb" />
<input type="hidden" id="pageIndex" name="pageIndex" value="1"/>
<%-- 검색 섹션 START --%>
<section class="content-section" >
<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">
<input class="input-text full" type="text" id="srchExtrlNm" name="srchExtrlNm" title="외부연동명" value="${resultMap.paramVO.srchExtrlNm }" />
</div>
</td>
<th>외부연동 시스템</th>
<td>
<div class="td-inner">
<div class="select-box">
<select class="md" id="srchExtrlSystem" name="srchExtrlSystem" title="외부연동시스템" >
<option value="">전체</option>
<c:forEach var="extlinkSystemList" items="${ resultMap.extlinkSystemList }" varStatus="">
<option value="${ extlinkSystemList.extlinkSystemCd }" ${f:setSelected(resultMap.paramVO.srchExtrlSystem, extlinkSystemList.extlinkSystemCd)}>${ extlinkSystemList.extlinkSystemNm }</option>
</c:forEach>
</select>
</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" onclick="fn_clear_input();"><spring:message code="button.init"/></button>
<button type="button" class="btn primary" onclick="fn_select_extlink_list('1');"><spring:message code="button.search"/></button>
</div>
<div class="right"></div>
</div>
</section>
<%-- 검색 섹션 END --%>
<%-- 리스트 출력 섹션 START --%>
<div id="pageDiv"></div>
</form>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</div>
</main>
</body>
</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 : maExtLinkListR.jsp
Description : 외부연동 목록 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024.04.15 전일찬 최초 생성
--%>
<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_extlink_list('1')">
<c:forEach items="${ resultMap.paginationInfo.pageUnitArr }" var="pageUnit" varStatus="pageUnitStatus">
<option value="<c:out value="${ pageUnit }"/>" <c:if test="${ resultMap.paramVO.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>
<div class="center">
</div>
<div class="right">
<button type="button" class="btn outline sm" onclick="fn_down_excelFile();">
<i class="icon icon_excel"></i>
<spring:message code="button.excelDownload"/>
</button>
</div>
</div>
<hr class="spacing">
<div class="table-wrapper">
<table class="table vertical">
<caption>해당 테이블에 대한 설명</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 4%;">
<col style="width: auto;">
<col style="width: 16%;">
<col style="width: 12%;">
<col style="width: 8%;">
<col style="width: 8%;">
<col style="width: 7%">
</colgroup>
<thead>
<tr>
<th>번호</th>
<th>외부연동명</th>
<th>연동시스템</th>
<th>가입 및 로그인</th>
<th>구매</th>
<th>등록일자</th>
<th>관리</th>
</tr>
</thead>
<%-- 리스트 BODY START --%>
<tbody>
<c:choose>
<c:when test="${ not empty resultMap.resultList }">
<c:forEach items="${resultMap.resultList }" var="extLinkList" varStatus="status">
<tr>
<td>
<c:out value="${resultMap.paginationInfo.totalRecordCount - extLinkList.rnum + 1 }" />
</td>
<td class="left">
<c:out value="${extLinkList.extrlNm }"/>
</td>
<td>
<c:out value="${extLinkList.extrlSystemNm}"/>
</td>
<td>
<c:choose>
<c:when test="${ extLinkList.extrlFunctionLogin eq 'Y'}">
<span>O</span>
</c:when>
<c:otherwise>
<span>X</span>
</c:otherwise>
</c:choose>
</td>
<td>
<c:choose>
<c:when test="${ extLinkList.extrlFunctionBuy eq 'Y'}">
<span>O</span>
</c:when>
<c:otherwise>
<span>X</span>
</c:otherwise>
</c:choose>
</td>
<td>
<c:out value="${extLinkList.registDt}"/>
</td>
<td>
<div class="manage-btn-container re">
<button type="button" class="btn xsm primary outline" onclick="fn_move_extlinkDetail('${extLinkList.extrlInnb }');"><spring:message code="button.update"/></button>
</div>
</td>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
<tr>
<td class="row-no-data" colspan="8">조회된 데이터가 없습니다.</td>
</tr>
</c:otherwise>
</c:choose>
</table>
</div>
<%-- 리스트 BODY END --%>
</section>
<div class="pagination__container">
<ui:pagination paginationInfo="${ resultMap.paginationInfo }" type="image" jsFunction="fn_select_mbrgrad_list" />
</div>

View File

@@ -0,0 +1,219 @@
<%@ 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"%>
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld"%>
<%--
Class Name : maExtLinkU.jsp
Description : 외부연동 수정 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024.04.15 전일찬 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@include file ="/WEB-INF/views/comm/admin/Include.jsp" %>
<%-- <c:import url="/comm/admin/include"/> --%>
</head>
<script>
$(document).ready(function() {
});
/* ********************************************************
* 외부연동 목록 이동
******************************************************** */
const fn_goto_list = function() {
$('#backUpData').attr('action', '<c:url value="/admin/store/extlink/selectExtLinkListForm"/>');
$('#backUpData').submit();
}
/* ********************************************************
* 외부연동 삭제
******************************************************** */
const fn_delete_extlink = function(_value) {
if(!confirm('외부연동을 <spring:message code="confirm.common.delete"/>')) return;
let params = {'extrlInnb' : _value};
$.ajax({
type: 'post',
url : '<c:url value="/admin/store/extlink/deleteExtLinkDel"/>',
data: params,
success: function (result) {
let message = JSON.parse(result.resBody.result).result;
if (message === 'fail') {
alert('<spring:message code="fail.common.delete"/>');
return;
} else if(message === 'includeShop'){
alert('현재 외부연동을 사용 중입니다. 다시 시도해 주세요.');
return;
} else {
alert('<spring:message code="success.common.delete"/>');
fn_goto_list();
}
}
});
}
</script>
<body>
<%@include file ="/WEB-INF/views/comm/admin/Header.jsp" %>
<%-- <c:import url="/comm/admin/header"/> --%>
<main class="main">
<%@include file ="/WEB-INF/views/comm/admin/Left.jsp" %>
<%-- <c:import url="/comm/admin/left"/> --%>
<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_goto_list()"><spring:message code="button.catalog"/></button>
<button type="button" class="btn dark regBtn" onclick="fn_delete_extlink('${resultMap.extLink.extrlInnb }');"><spring:message code="button.delete"/></button>
<button type="button" class="btn primary" onclick="fn_update_extlink();"><spring:message code="button.save"/></button>
</div>
</div>
<form class="common-form" id="regForm">
<section class="content-section">
<input type="hidden" name="srchExtrlNm" value="${resultMap.srchData.srchExtrlNm }" />
<input type="hidden" name="srchExtrlSystem" value="${resultMap.srchData.srchExtrlSystem }" />
<input type="hidden" name="pageUnit" value="${resultMap.srchData.pageUnit }" />
<input type="hidden" name="pageIndex" value="${resultMap.srchData.pageIndex }" />
<input type="hidden" name="extrlInnb" value="${resultMap.extLink.extrlInnb }" />
<input type="hidden" name="pageDv" value="" />
<div class="table-wrapper">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 15%;">
<col style="width: 35%;">
<col style="width: 15%;">
<col style="width: 35%;">
<tbody>
<tr>
<th>외부연동 명<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<input class="input-text xl" type="text" name="extrlNm" value="${resultMap.extLink.extrlNm }" title="외부연동명" maxlength="48"/>
</div>
</td>
<th>연동 시스템<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<div class="select-box">
<select class="md" id="extrlSystem" name="extrlSystem" title="외부연동시스템" >
<c:forEach var="extLinkSystemList" items="${ resultMap.extLinkSystemList }" varStatus="">
<option value="${ extLinkSystemList.extlinkSystemCd }" ${f:setSelected(extLinkSystemList.extlinkSystemCd, resultMap.extLink.extrlSystem)}> ${ extLinkSystemList.extlinkSystemNm }</option>
</c:forEach>
</select>
</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" id="extrlFunctionLogin" name="extrlFunctionLogin" ${f:setChecked(resultMap.extLink.extrlFunctionLogin, 'Y')} value="Y">
<span class="check"></span>
<span class="control-label">가입 및 로그인</span>
</label>
<label class="b-checkbox checkbox">
<input type="checkbox" id="extrlFunctionBuy" name="extrlFunctionBuy" ${f:setChecked(resultMap.extLink.extrlFunctionBuy, 'Y')} value="Y">
<span class="check"></span>
<span class="control-label">구매</span>
</label>
</div>
</div>
</td>
</tr>
<tr>
<th>Client ID<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<input class="input-text xl" type="text" name="extrlClientId" value="${resultMap.extLink.extrlClientId }" title="clientId" maxlength="150"/>
</div>
</td>
</tr>
<tr>
<th>Cleint Secret<span class="red-7">*</span></th>
<td colspan="2">
<div class="td-inner">
<textarea class="textarea" name="extrlClientSecret" title="secret" rows="6" maxlength="300"><c:out value="${resultMap.extLink.extrlClientSecret }"/></textarea>
</div>
</td>
</tr>
<tr>
<th>Cleint Pay Secret Key</th>
<td colspan="2">
<div class="td-inner">
<textarea class="textarea" name="extrlClientSecretKey" title="secretKey" rows="6" maxlength="300"><c:out value="${resultMap.extLink.extrlClientSecretKey }"/></textarea>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</section>
</form>
</div>
</div>
<form id="backUpData" method="post" >
<input type="hidden" name="srchExtrlNm" value="${resultMap.srchData.srchExtrlNm }" />
<input type="hidden" name="srchExtrlSystem" value="${resultMap.srchData.srchExtrlSystem }" />
<input type="hidden" name="pageUnit" value="${resultMap.srchData.pageUnit }" />
<input type="hidden" name="pageIndex" value="${resultMap.srchData.pageIndex }" />
<input type="hidden" name="extrlInnb" value="${resultMap.extLink.extrlInnb }" />
<input type="hidden" name="pageDv" value="" />
</form>
</main>
</body>
<script>
/* ********************************************************
* 외부연동 수정
******************************************************** */
const fn_update_extlink = function() {
if(!confirm('외부연동을 <spring:message code="confirm.common.update"/>')) return;
let params = $('#regForm').serialize();
$.ajax({
type : 'post',
url : '<c:url value="/admin/store/extlink/updateExtLinkUpdt"/>',
data : params,
success : function (result) {
let data = JSON.parse(result.resBody.result);
if (data.result === 'fail') {
alert('<spring:message code="fail.common.update"/>');
return;
}
if (data.result === "success") {
alert('<spring:message code="success.common.update"/>');
$('#backUpData').find('[name=pageDv]').val('I');
$('#backUpData').attr('action', '<c:url value="/admin/store/extlink/selectExtLinkUpdtForm"/>');
$('#backUpData').submit();
}
}
});
}
</script>
</html>

View File

@@ -0,0 +1,539 @@
<%@ 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"%>
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld"%>
<%--
Class Name : maMbrGradC.jsp
Description : 회원 등급 등록 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
since : 2023.12.22 최범식 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@include file ="/WEB-INF/views/comm/admin/Include.jsp" %>
</head>
<script>
$(document).ready(function() {
fn_init();
});
/* ********************************************************
* 숫자만 입력 / 콤마찌긱
******************************************************** */
const fn_set_comma = function(_target) {
let str = _target.value;
$(_target).val(str.replace(/[^0-9]/g,'').replace(/\B(?=(\d{3})+(?!\d))/g, ','));
}
/* ********************************************************
* file button show / file infor hide
******************************************************** */
const fn_delete_imgFile = function(_arg) {
$('#divInfor-' + _arg).hide();
$('#f-' + _arg).val('');
$('#divFile-' + _arg).show();
$('#divInfor-' + _arg).find('.filePh').attr('download', '');
}
/* ********************************************************
* 파일 이름 가져오기
******************************************************** */
const fn_set_fileName = function(_target, _arg, event) {
let tmpPath = URL.createObjectURL(event.target.files[0]);
let fileName = _target.files[0].name;
let fileSize = '( ' + Math.round(_target.files[0].size / 1024) + ' KB )';
$(_target).closest('tr').find('.filePh').attr('href', tmpPath);
$(_target).closest('tr').find('.fileNm').text(fileName);
$(_target).closest('tr').find('.fileSz').text(fileSize);
$('#divInfor-' + _arg).show();
$('#divFile-' + _arg).hide();
}
/* ********************************************************
* 회원 등급 화면 초기 세팅
******************************************************** */
const fn_init = function() {
$('[name=rlSetleAmtArr]').prop('disabled', true);
$('[name=purchsCntArr]').prop('disabled', true);
$('#calcCndD1').prop('checked', true);
}
/* ********************************************************
* 등급 설정 추가
******************************************************** */
const fn_add_emptyBox = function() {
let count = $('#tableSorting').children('tr').length + 1;
let trClone = '<tr>'
+ '<td>'
+ ' <div>'
+ ' <label class="b-checkbox checkbox is-medium center">'
+ ' <input type="checkbox" name="gradChkbox" />'
+ ' <span class="check"></span>'
+ ' </label>'
+ ' </div>'
+ ' </td>'
+ ' <td>'
+ ' <div>'
+ ' <input class="input-text left mm" type="text" name="gradNmArr" title="등급명" value="" placeholder="등급명" maxlength="40"/>'
+ ' </div>'
+ ' </td>'
+ ' <td>'
+ ' <div>'
+ ' <div class="select-box">'
+ ' <select name="gradMdatCndCdArr" title="조건">'
+ ' <c:forEach var="gradMdatCnd" items="${resultMap.codeList[0].cgn006}" varStatus="status">'
+ ' <option value="${gradMdatCnd.cd}"> ${gradMdatCnd.cdNm}</option>'
+ ' </c:forEach>'
+ ' </select>'
+ ' </div>'
+ ' </div>'
+ ' </td>'
+ ' <td>'
+ ' <div class="td-inner">'
+ ' <input class="input-text number right mm" type="text" name="purchsCntArr" title="구매건수" value="0" disabled placeholder="0" onkeyup="fn_set_comma(this);" maxlength="20"/>건'
+ ' </div>'
+ ' </td>'
+ ' <td>'
+ ' <div class="td-inner">'
+ ' <input class="input-text number right mm" type="text" name="rlSetleAmtArr" title="실 결제금액" value="0" disabled placeholder="0" onkeyup="fn_set_comma(this);" maxlength="12"/>원'
+ ' </div>'
+ ' </td>'
+ ' <td>'
+ ' <div class="draggable-icon-container">'
+ ' <i class="icon icon_draggable"></i>'
+ ' <span class="visually-hidden">순서 바꾸기</span>'
+ ' </div>'
+ ' </td>'
+ ' <td>'
+ ' <div class="manage-btn-container fileInfor" id="divInfor-' + count + '" style="display: none;" >'
+ ' <ul class="file-list">'
+ ' <li>'
+ ' <a href="" class="file-list__item filePh" download>'
+ ' <i class="icon icon_file-list mr-2"></i>'
+ ' <span class="file-list__item-title fileNm"></span>'
+ ' <span class="file-list__item-size fileSz"></span>'
+ ' </a>'
+ ' <button type="button" class="file-list__delete" onclick="fn_delete_imgFile(\'' + count + '\');">'
+ ' <span class="visually-hidden">파일 삭제</span>'
+ ' </button>'
+ ' </li>'
+ ' </ul>'
+ ' </div>'
+ ' <div class="manage-btn-container" id="divFile-' + count + '">'
+ ' <div class="input-file">'
+ ' <spring:eval expression="@environment.getProperty('mngrfo.common.fileupload.extensions.images')" var="acceptFileExtensions" />'
+ ' <input type="hidden" name="mbrInnbArr" value="' + count + '" />'
+ ' <input type="file" id="f-' + count + '" name="files" title="아이콘파일" accept="<c:out value="${ acceptFileExtensions }"/>" onchange="fn_set_fileName(this, \'' + count + '\', event);">'
+ ' <label for="f-' + count + '">파일선택</label>'
+ ' </div>'
+ ' </div>'
+ ' </td>'
+ '</tr>';
$('#noData').hide();
$('#tableSorting').append(trClone);
//행 추가 후, tableDnd 업데이트
$('#tableUpdate').tableDnDUpdate();
fn_add_emptyBox_after();
}
/* ********************************************************
* niceSelect 설정
******************************************************** */
const fn_add_emptyBox_after = function() {
if($('#purchsCntAt').is(':checked')){
$('[name=purchsCntArr]').prop('disabled', false);
}else{
$('[name=purchsCntArr]').prop('disabled', true);
}
if($('#rlSetleAmtAt').is(':checked')){
$('[name=rlSetleAmtArr]').prop('disabled', false);
}else{
$('[name=rlSetleAmtArr]').prop('disabled', true);
}
$('[name=gradMdatCndCdArr]').niceSelect();
}
/* ********************************************************
* 회원등급 선정조건에 따른 input event
******************************************************** */
const fn_mbr_grad_event = (elelment) => {
if(elelment.checked){
if(elelment.getAttribute('id') == 'purchsCntAt'){
$('[name=purchsCntArr]').prop('disabled', false);
}
else{
$('[name=rlSetleAmtArr]').prop('disabled', false);
}
}
else{
if(elelment.getAttribute('id') == 'purchsCntAt') {
$('[name=purchsCntArr]').prop('disabled', true);
}
else{
$('[name=rlSetleAmtArr]').prop('disabled', true);
}
}
}
/* ********************************************************
* 등급 설정 폼 삭제
******************************************************** */
const fn_remove_box = function() {
const target = $('[name=gradChkbox]:checked');
if (target.length === 0) {
alert('항목을 선택해 주세요.');
} else {
target.each(function() {
$(this).parents('tr').remove();
});
}
$('#gradAll').prop('checked', false);
if ($('[name=gradChkbox]').length === 0) {
$('#noData').show();
}
}
/* ********************************************************
* 회원 등급 목록 이동
******************************************************** */
const fn_goto_list = function() {
$('#backUpData').attr('action', '<c:url value="/admin/store/mbrgrad/selectMbrGradListInqireForm"/>');
$('#backUpData').submit();
}
</script>
<body>
<%@include file ="/WEB-INF/views/comm/admin/Header.jsp" %>
<main class="main">
<%@include file ="/WEB-INF/views/comm/admin/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_goto_list()"><spring:message code="button.catalog"/></button>
<button type="button" class="btn primary" onclick="fn_regist_mbrgrad();"><spring:message code="button.save"/></button>
</div>
</div>
<section class="content-section">
<spring:eval expression="@environment.getProperty('spring.servlet.multipart.max-file-size')" var="maxFileSize" />
<spring:eval expression="@environment.getProperty('mngrfo.common.fileupload.extensions.images')" var="acceptFileExtensions" />
<form class="common-form" id="regForm" enctype="multipart/form-data">
<input type="hidden" name="srchMbrGradNm" value="${resultMap.srchList[0].srchMbrGradNm }" />
<input type="hidden" name="srchCalcCndDvCds" value="${resultMap.srchList[0].srchCalcCndDvCds }" />
<input type="hidden" name="pageUnit" value="${resultMap.srchList[0].pageUnit }" />
<input type="hidden" name="pageIndex" value="${resultMap.srchList[0].pageIndex }" />
<input type="hidden" name="pageDv" value="" />
<input type="hidden" name="useAt" value="Y" />
<input type="hidden" name="trCnt" value="" />
<div class="table-wrapper">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 12%;">
<col style="width: 21%;">
<col style="width: 12%;">
<col style="width: 21%;">
<col style="width: 12%;">
<col style="width: 21%;">
<tbody>
<tr>
<th>회원등급 그룹명<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<input class="input-text xl" type="text" name="mbrGradGroupNm" title="회원등급명" maxlength="48"/>
</div>
</td>
<th>선정 조건<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox">
<input type="checkbox" id="purchsCntAt" name="purchsCntAt" value="Y" onclick="fn_mbr_grad_event(this)">
<span class="check"></span>
<span class="control-label">구매건수</span>
</label>
<label class="b-checkbox checkbox">
<input type="checkbox" id="rlSetleAmtAt" name="rlSetleAmtAt" value="Y" onclick="fn_mbr_grad_event(this)">
<span class="check"></span>
<span class="control-label">실 결제금액</span>
</label>
</div>
</div>
</td>
<th>쇼핑몰<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<div class="select-box">
<select title="쇼핑몰" name="sopmalCd" id="sopmalCd">
<option value = ''>쇼핑몰 선택</option>
<c:if test = "${not empty resultMap.srchList[0].sopmalList}">
<c:forEach var="sopmal" items="${resultMap.srchList[0].sopmalList}">
<option value="${sopmal.sopmalCd}">${sopmal.sopmalNm}</option>
</c:forEach>
</c:if>
</select>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<h3 class="content-section__inner-title">자동산정 설정</h3>
<div class="table-wrapper">
<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>산정기간<span class="red-7">*</span></th>
<td>
<div class="td-inner">
최근
<div class="select-box">
<select title="산정기간" name="calcPdMtCnt" id="calcPdMtCnt">
<c:forEach var="calcPdMt" items="${resultMap.codeList[0].cgn005}" varStatus="status">
<option value="${calcPdMt.cd}"> ${calcPdMt.cdNm}</option>
</c:forEach>
</select>
</div>
</div>
</td>
<th>등급 조정(정산)일<span class="red-7">*</span></th>
<td>
<div class="td-inner">
등급 기준 월
<div class="select-box">
<select title="등급 조정 월" name="gradMdatStdrMt" id="gradMdatStdrMt">
<c:forEach var="mt" items="${resultMap.codeList[0].mtArr}" varStatus="status">
<option value="${fn:trim(mt.cd)}">${mt.cdNm}</option>
</c:forEach>
</select>
</div>
<div class="select-box">
<select title="등급 조정 일" name="gradMdatStdrDe" id="gradMdatStdrDe">
<c:forEach var="dt" items="${resultMap.codeList[0].dtArr}" varStatus="status">
<option value="${dt.cd}">${dt.cdNm}</option>
</c:forEach>
</select>
</div>
</div>
</td>
</tr>
<tr>
<th>등급 조정 주기<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<div class="select-box">
<select title="등급 조정 주기" name="gradMdatCycleMtCnt" id="gradMdatCycleMtCnt">
<c:forEach var="gradMdatCycle" items="${resultMap.codeList[0].cgn005}" varStatus="status">
<option value="${gradMdatCycle.cd}"> ${gradMdatCycle.cdNm}</option>
</c:forEach>
</select>
</div>
</div>
</td>
<th>등급 유지 보장 기간<span class="red-7">*</span></th>
<td colspan="3">
<div class="td-inner">
<div class="select-box">
<select title="등급 유지 보장 기간" name="gradMntncPdMtCnt" id="gradMntncPdMtCnt">
<c:forEach var="gradMntncPdMt" items="${resultMap.codeList[0].cgn005}" varStatus="status">
<option value="${gradMntncPdMt.cd}"> ${gradMntncPdMt.cdNm}</option>
</c:forEach>
</select>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="page-title__btn-container">
<button type="button" class="btn xsm dark" onclick="fn_add_emptyBox();">추가</button>
<button type="button" class="btn xsm dark" onclick="fn_remove_box();">삭제</button>
</div>
<h3 class="content-section__inner-title">등급 설정</h3>
<div class="table-wrapper">
<table class="table vertical draggable" id="tableUpdate">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 60px;">
<col>
<col style="width: 18%;">
<col style="width: 18%;">
<col style="width: 18%;">
<col style="width: 12%;">
<col style="width: 16%;">
</colgroup>
<thead>
<tr>
<th>
<label class="b-checkbox checkbox is-medium check-all">
<input type="checkbox" id="gradAll" value="">
<span class="check"></span>
</label>
</th>
<th>등급명<span class="red-7">*</span></th>
<th>조건<span class="red-7">*</span></th>
<th>구매건수</th>
<th>실 결제금액</th>
<th>순서</th>
<th>등급아이콘</th>
</tr>
</thead>
<tbody id="tableSorting">
<tr id="noData">
<td colspan="8" class="row-no-data">등급 설정 정보를 입력해 주세요.</td>
</tr>
</tbody>
</table>
</div>
</form>
</section>
</div>
</div>
<form id="backUpData" method="post" >
<input type="hidden" name="srchMbrGradNm" value="${resultMap.srchList[0].srchMbrGradNm }" />
<input type="hidden" name="srchCalcCndDvCds" value="${resultMap.srchList[0].srchCalcCndDvCds }" />
<input type="hidden" name="pageUnit" value="${resultMap.srchList[0].pageUnit }" />
<input type="hidden" name="pageIndex" value="${resultMap.srchList[0].pageIndex }" />
<input type="hidden" name="mbrGradGroupInnb" value="" />
<input type="hidden" name="pageDv" value="" />
</form>
</main>
</body>
<script>
/* ********************************************************
* 회원 등급 등록
******************************************************** */
const fn_regist_mbrgrad = function() {
if(!confirm('회원등급을 <spring:message code="confirm.common.insert"/>')) return;
let trCnt = $('#tableSorting').find('tr').length - 1;
$('[name=trCnt]').val(trCnt);
const f = new FormData();
$('#regForm').serializeArray().forEach(function(item) {
f.append(item.name, item.value);
});
// let files = $('[name=files]');
// for (let i = 0; i < files.length; i++) {
// f.append('file' + i, files[i].files[0]);
// }
let fileNumber = [];
let newFileNumber = '';
$('[name=mbrInnbArr]').each(function(idx, item){
fileNumber[idx] = $(this).val();
});
let files = $('[name=files]');
for (let i = 0; i < files.length; i++) {
if (files[i].files[0] !== undefined) {
f.append(fileNumber[i], files[i].files[0]);
newFileNumber += '$' + fileNumber[i];
}
}
newFileNumber = newFileNumber.substring(1);
f.append('filesInnbs', newFileNumber);
let gradMdatCndCdArr = ''
let purchsCnts = '';
if ($('#purchsCntAt').is(':checked')) {
$('[name=purchsCntArr]').each(function(){
if ($(this).val() == '') return;
purchsCnts += '$' + $(this).val();
});
purchsCnts = purchsCnts.substring(1);
f.append('purchsCnts', purchsCnts);
}
let rlSetleAmts = '';
if ($('#rlSetleAmtAt').is(':checked')) {
$('[name=rlSetleAmtArr]').each(function(){
if ($(this).val() == '') return;
rlSetleAmts += '$' + $(this).val();
});
rlSetleAmts = rlSetleAmts.substring(1);
f.append('rlSetleAmts', rlSetleAmts);
}
let tempArr = '';
if($('#purchsCntAt').is(':checked')){
tempArr += $('#purchsCntAt').val();
}
if($('#rlSetleAmtAt').is(':checked')){
tempArr += $('#rlSetleAmtAt').val();
}
f.append('tempArr', tempArr);
$.ajax({
type : 'post',
enctype : 'multipart/form-data',
url : '<c:url value="/admin/store/mbrgrad/insertMbrGradRegist"/>',
data : f,
contentType : false,
processData : false,
success : function (result) {
if (result === 'fileUploadFail') {
alert('파일업로드에 문제가 발생했습니다. 다시 시도해 주세요.');
return;
}
let data = JSON.parse(result.resBody.result);
if (data.result === 'fail') {
alert('<spring:message code="fail.common.insert"/>');
return;
}
alert('<spring:message code="success.common.insert"/>');
$('#backUpData').find('[name=pageDv]').val('I');
$('#backUpData').find('[name=mbrGradGroupInnb]').val(data.mbrGradGroupInnb);
$('#backUpData').attr('action', '<c:url value="/admin/store/mbrgrad/selectMbrGradUpdtForm"/>');
$('#backUpData').submit();
}
});
}
</script>
</html>

View File

@@ -0,0 +1,185 @@
<%@ 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 : maMbrGradListInqireR.jsp
Description : 회원 등급 목록 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2023-12-20 김혜지 최초 생성(퍼블리싱 적용)
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>GC ONE 통합 관리자</title>
<%-- 공통 include --%>
<%@include file ="/WEB-INF/views/comm/admin/Include.jsp" %>
<script>
$(document).ready(function(){
let pageIndex = '<c:out value="${ resultMap.paramVO.pageIndex }"/>';
let pageUnit = '<c:out value="${ resultMap.paramVO.pageUnit }"/>';
let pageDv = '<c:out value="${ resultMap.paramVO.pageDv }"/>';
if (pageDv == '') {
fn_select_mbrgrad_list(pageIndex, pageUnit);
} else {
fn_select_mbrgrad_list('1', '10');
}
$('[name=srchMbrGradNm]').on('keydown', function(event) {
if (event.keyCode === 13) {
event.preventDefault();
fn_select_mbrgrad_list(1);
}
});
});
/* ********************************************************
* 회원등급 목록조회
******************************************************** */
const fn_select_mbrgrad_list = function(pageIndex, pageUnit) {
if (pageIndex == undefined || pageUnit == '') {
$('#pageIndex').val('1');
} else {
$('#pageIndex').val(pageIndex);
}
let params = $('#srchForm').serialize();
if (pageUnit != undefined || pageUnit == '') {
params += '&pageUnit=' + pageUnit;
} else {
params += '&pageUnit=' + $('#pageUnit').val();
}
$.ajax({
type : 'post',
url : '<c:url value="/admin/store/mbrgrad/selectMbrGradListInqire"/>',
data : params,
success : function(data) {
$('#pageDiv').html(data);
$('#pageUnit').niceSelect();
}
});
}
/**********************************************
* 회원등급 검색 초기화
***********************************************/
const fn_clear_input = function() {
$('[name=srchMbrGradNm]').val('');
$('#srchPurchsCntAt').prop('checked', false);
$('#srchRlSetleAmtAt').prop('checked', false);
};
/**********************************************
* 회원등급 수정 화면 이동
***********************************************/
const fn_move_mbrGradDetail = function(_mbrGradGroupInnb,sopmalCd) {
$('#mbrGradnnb').val(_mbrGradGroupInnb);
$('#sopmalCd').val(sopmalCd);
$('#srchForm').attr('action', '<c:url value="/admin/store/mbrgrad/selectMbrGradUpdtForm"/>');
$('#srchForm').attr('method', 'post');
$('#srchForm').submit();
};
/**********************************************
* 회원등급 엑셀 다운로드
***********************************************/
const fn_down_excelFile = function() {
$('#srchForm').attr('action', '<c:url value="/admin/store/mbrgrad/excelFileDownload"/>');
$('#srchForm').attr('method', 'post');
$('#srchForm').submit();
};
</script>
</head>
<body>
<%@include file ="/WEB-INF/views/comm/admin/Header.jsp" %>
<main class="main">
<%@include file ="/WEB-INF/views/comm/admin/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="srchForm" >
<input type="hidden" id="mbrGradnnb" name="mbrGradGroupInnb" />
<input type="hidden" id="sopmalCd" name="sopmalCd" />
<input type="hidden" id="pageIndex" name="pageIndex" value="<c:out value="${resultMap.paramVO.pageIndex}"/>"/>
<%-- 검색 섹션 START --%>
<section class="content-section" >
<div class="table-wrapper">
<table class="table">
<caption>회원등급 목록</caption>
<colgroup>
<col style="width: 16%;">
<col style="width: 34%;">
<col style="width: 16%;">
<col style="width: 34%;">
</colgroup>
<tbody>
<tr>
<th>회원등급 그룹명</th>
<td>
<div class="td-inner">
<input class="input-text full" type="text" name="srchMbrGradNm" title="회원등급명" value="<c:out value="${resultMap.paramVO.srchMbrGradNm}"/>" />
</div>
</td>
<th>쇼핑몰</th>
<td>
<div class="td-inner">
<div class="select-box">
<select title="쇼핑몰" name="srchSopmalCd" id="srchSopmalCd">
<option value=''>쇼핑몰 선택</option>
<c:if test="${not empty resultMap.sopmalList}">
<c:forEach var="sopmal" items="${resultMap.sopmalList}">
<option value="${sopmal.sopmalCd}" <c:if test = "${resultMap.paramVO.srchSopmalCd eq sopmal.sopmalCd}">selected</c:if>>${sopmal.sopmalNm}</option>
</c:forEach>
</c:if>
</select>
</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" onclick="fn_reset_form('srchForm');"><spring:message code="button.init"/></button>
<button type="button" class="btn primary" onclick="fn_select_mbrgrad_list('1');"><spring:message code="button.search"/></button>
</div>
<div class="right"></div>
</div>
</section>
<%-- 검색 섹션 END --%>
<%-- 리스트 출력 섹션 START --%>
<div id="pageDiv"></div>
</form>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</div>
</main>
</body>
</html>

View File

@@ -0,0 +1,119 @@
<%@ 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 : maMbrGradListInqireR.jsp
Description : 회원 등급 목록 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2023-12-20 김혜지 최초 생성(퍼블리싱 적용)
--%>
<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_mbrgrad_list('1')">
<c:forEach items="${ resultMap.paginationInfo.pageUnitArr }" var="pageUnit" varStatus="pageUnitStatus">
<option value="<c:out value="${ pageUnit }"/>" <c:if test="${ resultMap.paramVO.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>
<div class="center">
</div>
<div class="right">
<button type="button" class="btn outline sm" onclick="fn_down_excelFile();">
<i class="icon icon_excel"></i>
<spring:message code="button.excelDownload"/>
</button>
</div>
</div>
<hr class="spacing">
<div class="table-wrapper">
<table class="table vertical">
<caption>해당 테이블에 대한 설명</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 4%;">
<col style="width: 16%;">
<col style="width: 16%;">
<col style="width: 8%;">
<col style="width: 11%;">
<col style="width: 8%;">
<col style="width: 7%">
</colgroup>
<thead>
<tr>
<th>번호</th>
<th>회원등급 그룹명</th>
<th>쇼핑몰</th>
<th>산정기간</th>
<th>등급조정주기</th>
<th>등록일자</th>
<th>관리</th>
</tr>
</thead>
<%-- 리스트 BODY START --%>
<tbody>
<c:choose>
<c:when test="${ not empty resultMap.resultList }">
<c:forEach items="${resultMap.resultList }" var="mbrGradList" varStatus="status">
<tr>
<td>
<c:out value="${resultMap.paginationInfo.totalRecordCount - mbrGradList.rnum + 1 }" />
</td>
<td class="left">
<c:out value="${mbrGradList.mbrGradGroupNm }"/>
</td>
<td class="left">
<c:out value="${mbrGradList.sopmalNm}"/>
</td>
<td>
<c:out value="${mbrGradList.calcPdMtCntNm }"/>
</td>
<td>
<c:out value="${mbrGradList.gradMdatCycleMtCntNm }"/>
</td>
<td>
<c:out value="${mbrGradList.registDt}"/>
</td>
<td>
<div class="manage-btn-container re">
<button type="button" class="btn xsm primary outline" onclick="fn_move_mbrGradDetail('${mbrGradList.mbrGradGroupInnb }','<c:out value="${mbrGradList.sopmalCd}"/>');"><spring:message code="button.update"/></button>
</div>
</td>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
<tr>
<td class="row-no-data" colspan="8">조회된 데이터가 없습니다.</td>
</tr>
</c:otherwise>
</c:choose>
</table>
</div>
<%-- 리스트 BODY END --%>
</section>
<div class="pagination__container">
<ui:pagination paginationInfo="${ resultMap.paginationInfo }" type="image" jsFunction="fn_select_mbrgrad_list" />
</div>

View File

@@ -0,0 +1,735 @@
<%@ 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"%>
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld"%>
<%--
Class Name : maMbrGradU.jsp
Description : 회원 등급 등록 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
since : 2023.12.19 김세엽 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@include file ="/WEB-INF/views/comm/admin/Include.jsp" %>
<script src="<c:url value='/js/fileupload_comm.js'/>"></script>
<spring:eval expression="@environment.getProperty('mngrfo.common.fileupload.extensions.images')" var="acceptFileExtensions"/>
<script>
$(document).ready(function () {
fn_init();
/*전체 체크박스 클릭시 체크박스 전체 체크*/
$("#gradAll").on("click",function(){
if($(this).is(":checked")){
$("input[name='gradChkbox']").each(function () {
$(this).prop("checked", true);
});
}else{
$("input[name='gradChkbox']").each(function () {
$(this).prop("checked", false);
});
}
});
/* 체크박스 클릭 시 전체 체크박스 체크 해제 */
$(document).on("click", "input[name='gradChkbox']", function() {
// 현재 체크된 상태를 기준으로 전체 체크 여부 확인
let allChecked = $("input[name='gradChkbox']").length === $("input[name='gradChkbox']:checked").length;
// 만약 모든 체크박스가 체크되지 않았으면, 전체 선택 체크박스 해제
if (!allChecked) {
$("#gradAll").prop("checked", false);
} else {
$("#gradAll").prop("checked", true);
}
});
$(".file-list__item-title").find("img").each(function(){
$(this).css({
width : "60px",
height : "60px"
});
});
});
/* ********************************************************
* 숫자만 입력 / 콤마찌긱
******************************************************** */
const fn_set_comma = function (_target) {
let str = _target.value;
$(_target).val(str.replace(/[^0-9]/g, '').replace(/\B(?=(\d{3})+(?!\d))/g, ','));
}
/* ********************************************************
* 회원 등급 화면 초기 세팅
******************************************************** */
const fn_init = function () {
$('#noData').hide();
}
/* ********************************************************
* 등급 설정 추가
* cd: 공통코드cd
******************************************************** */
const fn_add_emptyBox = function () {
let count = $('#tableSorting').children('tr').length + 1; // tr 개수 +1
const index = count-1;
const mbrGradCnCdNm = $("#mbrGradCndCdNm").val(); // 회원 등급 코드
const acceptFileExtensions = '${acceptFileExtensions}';
// 마지막 행을 복제하여 추가
let newRow = ` <tr class="mbrGradTr">
<input type = "hidden" class= "mbrGradInnb" name = "mbrGradInnbArr" value="x"/>
<input type = "hidden" class= "mbrGradCnt"/>
<td>
<div>
<label class="b-checkbox checkbox is-medium center">
<input type="checkbox" name="gradChkbox"/>
<span class="check"></span>
</label>
</div>
</td>
<td>
<div>
<input class="input-text full" type="text" name="mbrGradNmArr" title="등급명" value="" placeholder="등급명" maxlength="40"/>
</div>
</td>
<td>
<div>
\${mbrGradCnCdNm}
<input type = "hidden" name = "mbrGradCndCdArr" value = "02"/>
</div>
</td>
<td>
<div class="td-inner">
<input class="input-text number right mm" type="text" name="mbrGradAmtArr" title="실 결제금액" value="0" maxlength="10"/>원
</div>
</td>
<td>
<div class="manage-btn-container">
<input type = "hidden" name = "filUploadAt" value = "0"/>
<input type = "hidden" value = "x" name="mbrGradIconCoursArr" class="mbrGradIconCours"/>
<div class="input-file">
<input type="file" id="fileUpload-\${count}" name="files" title="대표이미지" accept="\${acceptFileExtensions}"
onchange="fn_add_file_mbrGradNm(1,'fileUl\${count}',\${count})">
<label for="fileUpload-\${count}">파일선택</label>
</div>
<ul class="file-list" id = "fileUl\${count}">
</ul>
</div>
</td>
<td>
<div>
0(0)
</div>
</td>
<td>
<div>
-
</div>
</td>
<td>
<div>
-
</div>
</td>
</tr>`;
$('#tableSorting').append(newRow);
//결제금액 이벤트 바인딩
$("input[name='mbrGradAmtArr']").eq(index).on("input", function () {
var input = $(this).val();
$(this).val(input.replace(/[^0-9]/g, "").replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,"));
});
};
/* ********************************************************
* 등급 설정 삭제
******************************************************** */
const fn_remove_box = function () {
const target = $('[name=gradChkbox]:checked');
if (target.length === 0) {
alert('삭제할 회원등급을 선택해주세요.');
} else {
/*등급 설정 조건 상태 확인*/
const nonRemoveArr = [];
target.each(function () {
const mbrGradNmArr = $(this).closest("tr").find("input[name='mbrGradNmArr']").val();
if(mbrGradNmArr === ''){ //새로 추가한 등급 삭제시
$(this).closest("tr").remove();
}else{//기존 등급 삭제시
const mbrGradCnt = parseInt($(this).closest("tr").find(".mbrGradCnt").val(),10);
if(mbrGradCnt > 0) {
nonRemoveArr.push(mbrGradCnt);
}else{
$(this).closest("tr").hide();
$(this).closest("tr").find(".useAt").val("N");
}
}
});
if (nonRemoveArr.length > 0) {
alert("이미 회원에게 지정된 등급을 제외한 나머지 등급이 삭제됩니다.")
}
}
}
/*동적 요소로 인한 이벤트 바인딩*/
$(document).on("click", "#deleteBtn", function () {
fn_remove_box();
});
//파일 삭제시 아이콘 컬럼값 삭제
const fn_delete_file = (index) => {
$(".mbrGradIconCours").eq(index).val("x");
$("input[name='filUploadAt']").eq(index).val("0");
$('.input-file').eq(index).show();
}
//파일 삭제
$(document).on("click",".fileDel", function () {
const liId = $(this).closest("li").attr("id");
const idx = $(this).closest("tr").index();
const sopmalCd = '<c:out value="${resultMap.maMbrGradVO.sopmalCd}"/>';
if (liId.indexOf('temp') == 0) { //임시등록파일은 화면에서 삭제
$(this).closest("li").remove();
fn_delete_file(idx);
} else { //업로드된 파일은 서버삭제
if (confirm("파일을 삭제하시겠습니까?")) {
$(this).closest("li").remove();
ajaxFileDelete('', liId, sopmalCd, 'MBRG', 1, fn_delete_file, idx);
}
}
});
/* ********************************************************
* 회원 등급 목록 이동
******************************************************** */
const fn_goto_list = function () {
$('#backUpData').attr('action', '<c:url value="/admin/store/mbrgrad/selectMbrGradListInqireForm"/>');
$('#backUpData').submit();
}
const fn_add_file_mbrGradNm = (mode, targetFilListId, index) => {
let target = $(event.target);
let inputContainer = target.closest('.manage-btn-container').find("input[name='filUploadAt']");
inputContainer.val("1");
let files = event.target.files;
let filesArr = Array.prototype.slice.call(files); //file객체 array추가
let filesArrLen = filesArr.length;
let filesTempArrSize = filesTempArr.length * 1;
if (mode === 1 && $(targetFilListId + ' li').length > 0) {
alert("파일은 한개만 첨부할 수 있습니다.");
return false;
}
let templist = '';
for (let i = 0; i < filesArrLen; i++) {
filesTempArr.push(filesArr[i]); // 임시 배열에 저장
let file = filesArr[i];
let reader = new FileReader();
reader.onload = function (e) {
templist = `<li id="temp\${index}" class="fileLi">
<a class="file-list__item">
<span class="file-list__item-title">
<img src="\${e.target.result}"
onerror="this.src='/admin/images/image_placeholder.png'; this.style.width='60px'; this.style.height='60px';"
style="width: 60px; height: 60px; margin-right: 16px;"/>
</span>
</a>
<a class="file-list__delete fileDel" style="cursor:pointer;">
<span class="visually-hidden">파일 삭제</span>
</a>
</li>`;
$("#" + targetFilListId).append(templist);
};
reader.readAsDataURL(file);
//파일선택 영역 hide 처리
target.closest('.manage-btn-container').find(".input-file").hide();
}
}
const fn_show_fileUpload = (length) => {
$(".input-file").eq(length).show();
$(".manage-btn-container").eq(length).find("input[name='filUploadAt']").val("0");
}
/* ********************************************************
* 회원 등급 수정
******************************************************** */
const fn_update_mbrgrad = function () {
if (!confirm('회원등급을 <spring:message code="confirm.common.update"/>')) return;
let submitAt = true;
//등급 설정 조건 확인
//이름 중복 체크
let gradNmArr = [];
let index;
let isDuplicate = false;
let isNull = false;
$("input[name='mbrGradNmArr']").each(function () {
let value = $(this).val(); // 현재 input의 값을 가져옴
if(value !== ''){
if (gradNmArr.includes(value)) {
isDuplicate = true; // 중복이 있는 경우 플래그를 설정
index = $(this).index("input[name='mbrGradNmArr']");
}
}else{
isNull = true;
index = $(this).index("input[name='mbrGradNmArr']");
}
gradNmArr.push(value); // 배열에 값을 추가
});
if (isDuplicate) {
submitAt = false;
alert("중복된 등급명이 있습니다."); // 사용자에게 중복 알림
$("input[name='mbrGradNmArr']").eq(index).focus();
return false;
}
let visibleRows = $(".mbrGradTr:visible");
let visibleArr = [];
visibleRows.each(function() {
visibleArr.push($(this).index(".mbrGradTr"));
});
// 각 보이는 tr 요소를 순회합니다.
let lastVal = null; // 마지막 값을 저장할 변수를 초기화합니다.
visibleRows.each(function(rowIndex) {
// 현재 tr 내의 모든 input[name='mbrGradAmtArr'] 요소를 가져옵니다.
let inputs = $(this).find("input[name='mbrGradAmtArr']");
inputs.each(function(inputIndex) {
// 현재 input의 값이 비어있는 경우
if ($(this).val() === '') {
submitAt = false;
alert("실 결제금액에 입력되지 않은 값이 있습니다");
$(this).focus();
return false; // inputs.each()의 반복을 중단
}
let currentVal = parseInt($(this).val().replace(/,/g, ""), 10);
// 이전 값이 있는 경우 비교 시작
if (lastVal !== null) {
// 이전 값과 현재 값을 비교
if (currentVal === lastVal) {
submitAt = false;
alert("전 회원등급 실 결제금액에 같은 값이 있습니다");
$(this).focus();
return false; // inputs.each()의 반복을 중단
} else if (currentVal < lastVal) {
submitAt = false;
alert("전 회원등급 실 결제금액이 더 큽니다.");
$(this).focus();
return false; // inputs.each()의 반복을 중단
}
}
// 현재 값을 'lastVal'로 업데이트
lastVal = currentVal;
});
// 각 tr에 대해 체크를 중단하도록 하는 반환값
if (!submitAt) {
return false; // visibleRows.each()의 반복을 중단
}
});
if (submitAt) {
//회원 등급 수정
const formData = new FormData();
$('#udpForm').serializeArray().forEach(function (item) {
formData.append(item.name, item.value);
});
// formData에서 배열 데이터를 가져옵니다.
const updatedAmounts = formData.getAll("mbrGradAmtArr").map(function(value) {
// 쉼표를 제거한 값을 반환합니다.
return value.replaceAll(",", "");
});
// 기존의 "mbrGradAmtArr" 필드를 삭제합니다.
formData.delete("mbrGradAmtArr");
// 수정된 값들을 다시 formData에 추가합니다.
updatedAmounts.forEach(function(newValue) {
formData.append("mbrGradAmtArr", newValue);
});
//파일 data 추출
$.each(filesTempArr, function (i, file) {
if (file.upload != 'disable') {
formData.append('files', file);
}
});
//수정 ajax
$.ajax({
type: 'post',
url: '<c:url value="/admin/store/mbrgrad/updateMbrGradUpdt"/>',
data: formData,
processData: false,
contentType: false,
success: function (result) {
alert('<spring:message code="success.common.save"/>');
$('#backUpData').attr('action', '<c:url value="/admin/store/mbrgrad/selectMbrGradUpdtForm"/>');
$('#backUpData').attr('method', 'post');
$('#backUpData').submit();
}
});
}
}
</script>
</head>
<body>
<%@include file="/WEB-INF/views/comm/admin/Header.jsp" %>
<main class="main">
<%@include file ="/WEB-INF/views/comm/admin/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_goto_list()"><spring:message code="button.catalog"/></button>
<button class="btn primary" onclick="fn_update_mbrgrad();"><spring:message code="button.save"/></button>
</div>
</div>
<section class="content-section">
<form class="common-form" id="udpForm" enctype="multipart/form-data">
<input type="hidden" name="mbrGradGroupInnb" value="${resultMap.maMbrGradVO.mbrGradGroupInnb }" />
<input type="hidden" name="srchMbrGradNm" value="${resultMap.maMbrGradVO.srchMbrGradNm }" />
<input type="hidden" name="srchCalcCndDvCds" value="${resultMap.maMbrGradVO.srchCalcCndDvCds }" />
<input type="hidden" name="pageUnit" value="${resultMap.maMbrGradVO.pageUnit }" />
<input type="hidden" name="pageIndex" value="${resultMap.maMbrGradVO.pageIndex }" />
<input type="hidden" name="sopmalCd" value="${resultMap.maMbrGradVO.sopmalCd }" />
<input type="hidden" name="pageDv" value="" />
<div class="table-wrapper">
<table class="table">
<caption>회원등급 수정</caption>
<colgroup>
<col style="width: 16%;">
<col style="width: 34%;">
<col style="width: 16%;">
<col style="width: 34%;">
</colgroup>
<tbody>
<%--회원등급 그룹 정보--%>
<c:set var = "mbrGradGroupInfo" value = "${resultMap.mbrGradInfo.mbrGradInfo}"/>
<tr>
<th>회원등급 그룹명<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<input class="input-text xl" type="text" name="mbrGradGroupNm" title="회원등급명" value="${mbrGradGroupInfo.mbrGradGroupNm}" maxlength="40"/>
</div>
</td>
<th>쇼핑몰</th>
<td>
<div class="td-inner">
<c:out value="${mbrGradGroupInfo.sopmalNm}"/>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<h3 class="content-section__inner-title">자동산정 설정</h3>
<div class="table-wrapper">
<table class="table">
<caption>자동산정 설정</caption>
<colgroup>
<col style="width: 16%;">
<col style="width: 34%;">
<col style="width: 16%;">
<col style="width: 34%;">
</colgroup>
<tbody>
<tr>
<th>등급 조정 주기</th>
<td>
<div class="td-inner">
<div class="select-box">
<select title="등급 조정 주기" name="gradMdatCycleMtCnt"
id="gradMdatCycleMtCnt">
<c:forEach var="gradMdatCycle"
items="${resultMap.mbrGradInfo.codeMap.mtCd}"
varStatus="status">
<option value="${gradMdatCycle.cd}" ${f:setSelected(mbrGradGroupInfo.gradMdatCycleMtCnt, gradMdatCycle.cd)}> ${gradMdatCycle.cdNm}</option>
</c:forEach>
</select>
</div>
마다 자동 조정
</div>
</td>
<th>산정기간</th>
<td>
<div class="td-inner">
등급 조정일로 부터
<div class="select-box">
<select title="산정기간" name="calcPdMtCnt" id="calcPdMtCnt">
<c:forEach var="calcPdMt" items="${resultMap.mbrGradInfo.codeMap.mtCd}" varStatus="status">
<option value="${calcPdMt.cd}"
<c:if test = "${calcPdMt.cd eq mbrGradGroupInfo.calcPdMtCnt}">
selected
</c:if>> ${calcPdMt.cdNm}</option>
</c:forEach>
</select>
</div>
동안 의 실 결제금액으로 산정
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="form-control-container mb-8">
<div class="left">
<h3 class="content-section__inner-title">등급 설정</h3>
</div>
<div class="center">
</div>
<div class="right">
<button type = "button" class="btn dark xsm" id = "deleteBtn">삭제</button>
<button type = "button" class="btn primary outline xsm" onclick="fn_add_emptyBox();">추가</button>
</div>
</div>
<div class="table-wrapper">
<table class="table vertical">
<caption>등급 설정</caption>
<colgroup>
<col style="width: 8%;">
<col style="width: 17%;">
<col style="width: 10%;">
<col style="width: auto;">
<col style="width: 10%;">
<col style="width: 10%;">
<col style="width: 15%;">
<col style="width: 15%;">
</colgroup>
<thead>
<tr>
<th>
<label class="b-checkbox checkbox is-medium check-all">
<input type="checkbox" id="gradAll" >
<span class="check"></span>
</label>
</th>
<th>등급명<span class="red-7">*</span></th>
<th>조건</th>
<th>실 결제금액<span class="red-7">*</span></th>
<th>등급아이콘<span class="red-7">*</span></th>
<th>현재 통계</th>
<th>생성일시</th>
<th>최근수정일시</th>
</tr>
</thead>
<tbody id="tableSorting">
<c:choose>
<c:when test = "${not empty resultMap.mbrGradInfo.gradStdrList}">
<c:forEach var="gradStdr" items="${resultMap.mbrGradInfo.gradStdrList}" varStatus="status">
<tr class="mbrGradTr">
<input type = "hidden" class= "mbrGradInnb" name = "mbrGradInnbArr" value = "<c:out value = "${gradStdr.mbrGradInnb}"/>"/>
<input type = "hidden" class= "mbrGradCnt" value = "<c:out value = "${gradStdr.mbrGradCnt}"/>"/>
<input type = "hidden" class= "useAt" name = "useAtArr" value = "<c:out value = "${gradStdr.useAt}"/>"/>
<td>
<c:choose>
<c:when test = "${status.index eq 0}">
-
</c:when>
<c:otherwise>
<div>
<label class="b-checkbox checkbox is-medium center">
<input type="checkbox" name="gradChkbox" />
<span class="check"></span>
</label>
</div>
</c:otherwise>
</c:choose>
</td>
<td>
<div>
<input class="input-text full" type="text" name="mbrGradNmArr" title="등급명" value="${gradStdr.mbrGradNm}" placeholder="등급명" maxlength="40"/>
</div>
</td>
<td>
<div>
<c:forEach var = "mbrGradCnd" items = "${resultMap.mbrGradInfo.codeMap.mbrGradCnd}">
<c:if test = "${mbrGradCnd.cd eq gradStdr.mbrGradCndCd}">
<c:out value="${mbrGradCnd.cdNm}"/>
</c:if>
</c:forEach>
<input type = "hidden" name = "mbrGradCndCdArr" value = "<c:out value="${gradStdr.mbrGradCndCd}"/>"/>
</div>
</td>
<td>
<div class="td-inner">
<input class="input-text number right mm" type="text" name="mbrGradAmtArr" title="실 결제금액"
value="<fmt:formatNumber value="${gradStdr.mbrGradAmt}" pattern="#,###" />" maxlength="10"/>원
</div>
</td>
<td>
<div class="manage-btn-container">
<c:choose>
<c:when test="${gradStdr.mbrGradIconCours eq 'x'}">
<c:set var = "mbrGradIconCours" value = ""/>
</c:when>
<c:otherwise>
<c:set var = "mbrGradIconCours" value = "${gradStdr.mbrGradIconCours}"/>
</c:otherwise>
</c:choose>
<input type = "hidden" name = "filUploadAt" value = "0"/>
<input type="hidden" value= "<c:out value="${mbrGradIconCours}"/>" name="mbrGradIconCoursArr" class="mbrGradIconCours"/>
<%--파일이 없는 경우--%>
<div class="input-file" <c:if test = "${not empty mbrGradIconCours}">style="display:none"</c:if>>
<input type="file" id="fileUpload-${status.index}" name="files" title="대표이미지" accept="<c:out value="${ acceptFileExtensions }"/>"
onchange="fn_add_file_mbrGradNm(1,'fileUl${status.index}',${status.index})">
<label for="fileUpload-${status.index}">파일선택</label>
</div>
<%--파일이 있는 경우--%>
<c:choose>
<c:when test = "${empty mbrGradIconCours}">
<ul class="file-list" id = "fileUl${status.index}">
</ul>
</c:when>
<c:otherwise>
<ul class="file-list" id = 'fileUl${status.index}'>
<li id = "<c:out value="${gradStdr.mbrGradInnb}"/>" class="fileLi">
<a class="file-list__item">
<spring:eval expression="@environment.getProperty('mngrfo.common.fileupload.cdnurl')" var="cdnurl"/>
<input type = "hidden" value="<c:out value="${cdnurl}${mbrGradIconCours}"/>"/>
<span class="file-list__item-title">
<img src = "<c:out value="${cdnurl}${mbrGradIconCours}"/>"
onerror="this.src='/admin/images/image_placeholder.png'" />
</span>
</a>
<a class="file-list__delete fileDel" style="cursor:pointer">
<span class="visually-hidden">파일 삭제</span>
</a>
</li>
</ul>
</c:otherwise>
</c:choose>
</div>
</td>
<td>
<div>
<fmt:formatNumber value="${gradStdr.mbrGradCnt}" pattern="#,###"/>(<c:out value="${gradStdr.mbrGradInnbPer}"/>)
</div>
</td>
<td>
<div>
<c:out value="${gradStdr.registDt}"/>
</div>
</td>
<td>
<div>
<c:out value="${gradStdr.updtDt}"/>
</div>
</td>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
<tr class="mbrGradTr">
<input type = "hidden" class= "mbrGradInnb" name = "mbrGradInnbArr" value = "x"/>
<input type = "hidden" class= "mbrGradCnt" value = ""/>
<td>
<div>
<label class="b-checkbox checkbox is-medium center">
<input type="checkbox" name="gradChkbox"/>
<span class="check"></span>
</label>
</div>
</td>
<td>
<div>
<input class="input-text full" type="text" name="mbrGradNmArr" title="등급명" value="" placeholder="등급명" maxlength="40"/>
</div>
</td>
<td>
<div>
<c:forEach var = "mbrGradCnd" items = "${resultMap.mbrGradInfo.codeMap.mbrGradCnd}">
<c:if test = "${mbrGradCnd.cd eq '01'}"><c:out value="${mbrGradCnd.cdNm}"/></c:if>
</c:forEach>
<input type = "hidden" name = "mbrGradCndCdArr" value = "01"/>
</div>
</td>
<td>
<div class="td-inner">
<input class="input-text number right mm" type="text" name="mbrGradAmtArr" title="실 결제금액"
value="0" placeholder="0" maxlength="10" readonly/>원
</div>
</td>
<td>
<div class="manage-btn-container">
<input type = "hidden" name = "filUploadAt" value = "0"/>
<input type = "hidden" value = "" name="mbrGradIconCours" class="mbrGradIconCours"/>
<%--파일이 없는 경우--%>
<div class="input-file">
<input type="file" id="fileUpload-0" name="files" title="대표이미지" accept="<c:out value="${ acceptFileExtensions }"/>"
onchange="fn_add_file_mbrGradNm(1,'fileUl0',0)">
<label for="fileUpload-0">파일선택</label>
</div>
<ul class="file-list" id = "fileUl0">
</ul>
</div>
</td>
<td>
<div>
0(0)
</div>
</td>
<td>
<div>
-
</div>
</td>
<td>
<div>
-
</div>
</td>
</tr>
</c:otherwise>
</c:choose>
</tbody>
</table>
</div>
</form>
</section>
</div>
</div>
<%--복제시 clone값 set--%>
<c:forEach var = "mbrGradCnd" items = "${resultMap.mbrGradInfo.codeMap.mbrGradCnd}">
<c:if test = "${mbrGradCnd.cd eq '02'}">
<input type="hidden" value="${mbrGradCnd.cd}" id="mbrGradCndCd"/>
<input type="hidden" value="${mbrGradCnd.cdNm}" id="mbrGradCndCdNm"/>
</c:if>
</c:forEach>
<form id="backUpData" method="post" >
<input type="hidden" name="srchMbrGradNm" value="<c:out value="${resultMap.maMbrGradVO.srchMbrGradNm}"/>" />
<input type="hidden" name="srchCalcCndDvCds" value="<c:out value="${resultMap.maMbrGradVO.srchCalcCndDvCds }"/>" />
<input type="hidden" name="pageUnit" value="<c:out value="${resultMap.maMbrGradVO.pageUnit }"/>" />
<input type="hidden" name="pageIndex" value="<c:out value="${resultMap.maMbrGradVO.pageIndex }"/>" />
<input type="hidden" name="mbrGradGroupInnb" value="<c:out value="${resultMap.maMbrGradVO.mbrGradGroupInnb}"/>" />
<input type="hidden" name="srchSopmalCd" value="<c:out value="${resultMap.maMbrGradVO.srchSopmalCd}"/>" />
<input type="hidden" name="sopmalCd" value="<c:out value="${resultMap.maMbrGradVO.sopmalCd}"/>" />
<input type="hidden" name="pageDv" />
</form>
</main>
</body>
</html>

View File

@@ -0,0 +1,132 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%--
Class Name : MaBsnmInqirePopupR.jsp
Description : 사업자 상세조회 팝업
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
since : 2023.12.19 rvg 최초 생성
--%>
<div class="modal-header">
<h4>사업자 조회</h4>
</div>
<div class="modal-content">
<h3 class="content-section__title">사업자 정보</h3>
<div class="table-wrapper">
<table class="table">
<caption>사업자</caption>
<colgroup>
<col style="width: 15%;">
<col style="width: 35%;">
<col style="width: 15%;">
<col>
</colgroup>
<tbody>
<c:choose>
<c:when test="${ not empty resultSrchMap.list }">
<c:forEach items="${ resultSrchMap.list }" var="list" varStatus="status">
<tr>
<th>사업자(회사명)</th>
<td>
<div class="td-inner">
<c:out value="${list.bsnmNm}"/>
</div>
</td>
<th>업태/종목</th>
<td>
<div class="td-inner">
<c:out value="${list.bizcndCn}"/><span class="mx-5 gray-7">/</span><c:out value="${list.itemCn}"/>
</div>
</td>
</tr>
<tr>
<th>사업자등록번호</th>
<td>
<div class="td-inner">
<c:out value="${list.bizrnb}"/>
</div>
</td>
<th>통신판매업 신고번호</th>
<td>
<div class="td-inner">
<c:out value="${list.mobDclNb}"/>
</div>
</td>
</tr>
<tr>
<th>대표자명</th>
<td>
<div class="td-inner">
<c:out value="${list.reprsntvnm}"/>
</div>
</td>
<th>개인정보 보호책임자</th>
<td>
<div class="td-inner">
<c:out value="${list.indvdlinfoPrtcRspnberNm}"/>
</div>
</td>
</tr>
<tr>
<th>전화번호</th>
<td>
<div class="td-inner">
<c:out value="${list.telnb}"/>
</div>
</td>
<th>팩스번호</th>
<td>
<div class="td-inner">
<c:out value="${list.fxnb}"/>
</div>
</td>
</tr>
<tr>
<th>이메일</th>
<td>
<div class="td-inner">
<c:out value="${list.email}"/>
</div>
</td>
<th>영업신고증</th>
<td>
<div class="td-inner">
<c:out value="${list.bsnDclNb}"/>
</div>
</td>
</tr>
<tr>
<th>사업장 주소</th>
<td colspan="3">
<div class="td-inner">
<div class="address-group">
<div class="address-line">
<span class="left">우편번호 : </span>
<c:out value="${list.zip}"/>
</div>
<div class="address-line">
<span class="left">주소 : </span>
<c:out value="${list.lnbAdres}"/>
</div>
<div class="address-line">
<span class="left">상세주소 : </span>
<c:out value="${list.dtlAdres}"/>
</div>
</div>
</div>
</td>
</tr>
</c:forEach>
</c:when>
</c:choose>
</tbody>
</table>
</div>
</div>
<div class="modal-footer">
<a href="#" rel="modal:close" class="btn outline" id="clsMd">닫기</a>
</div>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,229 @@
<%@ 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 : maSopmalListInqireForm.jsp
Description : 쇼핑몰 조회 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-02-05 최범식 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@include file ="/WEB-INF/views/comm/admin/Include.jsp" %>
<script>
$(document).ready(function(){
let pageIndex = '<c:out value="${ resultMap.paramVO.pageIndex }"/>';
let pageUnit = '<c:out value="${ resultMap.paramVO.pageUnit }"/>';
let pageDv = '<c:out value="${ resultMap.paramVO.pageDv }"/>';
if (pageDv == '') {
fn_select_sopmal_list(pageIndex, pageUnit);
} else {
fn_select_sopmal_list('1', '10');
}
$('#srchStr').on('keydown', function(event) {
if (event.keyCode === 13) {
event.preventDefault();
fn_select_sopmal_list(1);
}
});
});
/* ********************************************************
* 쇼핑몰 목록조회
******************************************************** */
const fn_select_sopmal_list = function(pageIndex, pageUnit) {
if (pageIndex == undefined || pageUnit == '') {
$('#pageIndex').val('1');
} else {
$('#pageIndex').val(pageIndex);
}
let params = $('#srchForm').serialize();
if (pageUnit != undefined || pageUnit == '') {
params += '&pageUnit=' + pageUnit;
} else {
params += '&pageUnit=' + $('#pageUnit').val();
}
$.ajax({
type : 'post',
url : '<c:url value="/admin/store/sopmal/selectSopmalListInqire"/>',
data : params,
success : function(data) {
$('#pageDiv').html(data);
$('#pageUnit').niceSelect();
}
});
}
/**********************************************
* 쇼핑몰 검색 초기화
***********************************************/
const fn_clear_input = function() {
$('#srchType').val('').niceSelect('update');
$('#srchStr').val('');
$('#srchSopmalTyCd').val('').niceSelect('update');
$('#srchBsnmInnb').val('').niceSelect('update');
$('#srchOperAt').val('').niceSelect('update');
};
/**********************************************
* 쇼핑몰 등록 화면 이동
***********************************************/
const fn_move_sopmalRegist = function() {
$('#srchForm').attr('action', '<c:url value="/admin/store/sopmal/selectSopmalRegistForm"/>');
$('#srchForm').attr('method', 'post');
$('#srchForm').submit();
};
/**********************************************
* 쇼핑몰 수정 화면 이동
***********************************************/
const fn_move_sopmalDetail = function(_arg) {
$('#sopmalCd').val(_arg);
$('#srchForm').attr('action', '<c:url value="/admin/store/sopmal/selectSopmalUpdtForm"/>');
$('#srchForm').attr('method', 'post');
$('#srchForm').submit();
};
/**********************************************
* 쇼핑몰 엑셀 다운로드
***********************************************/
const fn_down_excelFile = function() {
$('#srchForm').attr('action', '<c:url value="/admin/store/sopmal/excelFileDownload"/>');
$('#srchForm').attr('method', 'post');
$('#srchForm').submit();
};
</script>
</head>
<body>
<%@include file ="/WEB-INF/views/comm/admin/Header.jsp" %>
<main class="main">
<%@include file ="/WEB-INF/views/comm/admin/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" onclick="fn_move_sopmalRegist();">쇼핑몰 <spring:message code="button.insert"/></button>
</div>
</div>
<form id="srchForm" >
<input type="hidden" name="sopmalCd" id="sopmalCd"/>
<input type="hidden" name="pageIndex" id="pageIndex"/>
<%-- 검색 섹션 START --%>
<section class="content-section" >
<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 class="serchSelectBox" name="srchType" id="srchType" title="검색타입" ">
<option value="" ${f:setSelected(resultMap.paramVO.srchType, 'ALL') }>전체</option>
<option value="SOPMALNM" ${f:setSelected(resultMap.paramVO.srchType, 'SOPMALNM') }>쇼핑몰명</option>
<option value="DOMAIN" ${f:setSelected(resultMap.paramVO.srchType, 'DOMAIN') }>도메인</option>
</select>
</div>
<input class="input-text lg" type="text" title="검색어" name="srchStr" id="srchStr" value="${resultMap.paramVO.srchStr }"/>
</div>
</td>
</tr>
<tr>
<th>쇼핑몰 구분</th>
<td>
<div class="td-inner">
<div class="select-box">
<select class="md" name="srchSopmalTyCd" id="srchSopmalTyCd" title="쇼핑몰 구분">
<option value="" ${f:setSelected(resultMap.paramVO.srchSopmalTyCd, null) } >전체</option>
<c:forEach var="sopmalTyCd" items="${resultMap.sopmalTyCdList}" varStatus="status">
<option value="${sopmalTyCd.cd }" ${f:setSelected(resultMap.paramVO.srchSopmalTyCd, sopmalTyCd.cd) }><c:out value="${sopmalTyCd.cdNm }"/></option>
</c:forEach>
</select>
</div>
</div>
</td>
<th>사업자</th>
<td>
<div class="td-inner">
<div class="select-box">
<select class="md" name="srchBsnmInnb" id="srchBsnmInnb" title="사업자">
<option value="" ${f:setSelected(resultMap.paramVO.srchBsnmInnb, '') }>전체</option>
<c:forEach var="company" items="${resultMap.companyAllList}" varStatus="status">
<option value="${company.bsnmInnb}" ${f:setSelected(resultMap.paramVO.srchBsnmInnb, company.bsnmInnb) }> ${company.bsnmNm}</option>
</c:forEach>
</select>
</div>
</div>
</td>
</tr>
<tr>
<th>상태</th>
<td colspan="3">
<div class="td-inner">
<div class="select-box">
<select class="md" name="srchOperAt" id="srchOperAt" title="상태">
<option value="" ${f:setSelected(resultMap.paramVO.srchOperAt, '') }>전체</option>
<option value="Y" ${f:setSelected(resultMap.paramVO.srchOperAt, 'Y') }>운영</option>
<option value="N" ${f:setSelected(resultMap.paramVO.srchOperAt, 'N') }>운영중지</option>
</select>
</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" onclick="fn_clear_input();"><spring:message code="button.init"/></button>
<button type="button" class="btn primary" onclick="fn_select_sopmal_list('1');"><spring:message code="button.search"/></button>
</div>
<div class="right"></div>
</div>
</section>
<%-- 검색 섹션 END --%>
<%-- 리스트 출력 섹션 START --%>
<div id="pageDiv"></div>
</form>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</div>
</main>
</body>
</html>

View File

@@ -0,0 +1,124 @@
<%@ 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 : maSopmalListInqireR.jsp
Description : 몰 리스트
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-01-19 최범식 최초 생성
--%>
<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_sopmal_list('1')">
<c:forEach items="${ resultMap.paginationInfo.pageUnitArr }" var="pageUnit" varStatus="pageUnitStatus">
<option value="<c:out value="${ pageUnit }"/>" <c:if test="${ resultMap.paramVO.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>
<div class="center">
</div>
<div class="right">
<button type="button" class="btn outline sm" onclick="fn_down_excelFile();">
<i class="icon icon_excel"></i>
<spring:message code="button.excelDownload"/>
</button>
</div>
</div>
<hr class="spacing">
<div class="table-wrapper">
<table class="table vertical">
<caption>몰 리스트</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 4%;">
<col style="width: auto;">
<col style="width: 10%;">
<col style="width: 24%;">
<col style="width: 16%;">
<col style="width: 7%;">
<col style="width: 7%;">
<col style="width: 7%;">
<col style="width: 7%">
</colgroup>
<thead>
<tr>
<th>번호</th>
<th>쇼핑몰명</th>
<th>구분</th>
<th>도메인</th>
<th>쇼핑몰운영사</th>
<th>담당자</th>
<th>최종수정일</th>
<th>상태</th>
<th>관리</th>
</tr>
</thead>
<%-- 리스트 BODY START --%>
<tbody>
<c:choose>
<c:when test="${ not empty resultMap.sopmalList }">
<c:forEach items="${resultMap.sopmalList }" var="sopmal" varStatus="status">
<tr>
<td><c:out value="${resultMap.paginationInfo.totalRecordCount - sopmal.rnum + 1 }" /></td>
<td class="text-left"><c:out value="${sopmal.sopmalNm }"/></td>
<td><c:out value="${sopmal.sopmalTyCdNm }"/></td>
<td class="text-left">
PC : <span><c:out value="${sopmal.pcDomnAdres }"/></span><br/>
모바일 : <span><c:out value="${sopmal.mblDomnAdres }"/></span>
</td>
<td class="text-left"><c:out value="${sopmal.bsnmNm }"/></td>
<td>
<div class="manage-btn-container">
<a href="/admin/use/mngr/selectJobUserListInqireForm" class="btn xsm primary outline" target="_blank"><spring:message code="button.view"/></a>
</div>
</td>
<td><c:out value="${sopmal.updtDt }"/></td>
<c:set var="oper" value="운영"/>
<c:if test="${sopmal.operAt eq 'N'}">
<c:set var="oper" value="운영중지"/>
</c:if>
<td><c:out value="${oper }"/></td>
<td>
<div class="manage-btn-container">
<button type="button" class="btn xsm primary outline" onclick="fn_move_sopmalDetail('${sopmal.sopmalCd }');"><spring:message code="button.update"/></button>
</div>
</td>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
<tr>
<td class="row-no-data" colspan="9">조회된 데이터가 없습니다.</td>
</tr>
</c:otherwise>
</c:choose>
</table>
</div>
<%-- 리스트 BODY END --%>
</section>
<div class="pagination__container">
<ui:pagination paginationInfo="${ resultMap.paginationInfo }" type="image" jsFunction="fn_select_sopmal_list" />
</div>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,92 @@
<%@ 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 : MaSopthemaListInqireR.jsp
Description : 쇼핑몰테마 목록조회 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2023-12-26 리브가 최초 생성
2023-01-09 리브가 목록조회 수정
--%>
<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_sopthema_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>
<colgroup>
<col style="width: 6%;">
<col style="width: 14%;">
<col style="width: auto;">
<col style="width: 12%;">
<col style="width: 12%;">
<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 resultMap.list }">
<c:forEach items="${ resultMap.list }" var="list" varStatus="status">
<tr>
<td><c:out value="${ resultMap.paginationInfo.totalRecordCount - list.rnum + 1 }" /></td>
<td class="left"><c:out value="${list.themaNm}"/></td>
<td class="left"><c:out value="${list.sopmalNm}"/></td>
<td><c:out value="${list.registDe}"/></td>
<td><c:out value="${list.updtDe}"/></td>
<td>
<div class="manage-btn-container">
<button class="btn xsm primary outline" type="button"
onclick="fn_move_dtl_uptpage(<c:out value="${list.themaInnb}"/>)">
<spring:message code="button.update"/></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>
</section>
<div class="pagination__container">
<ui:pagination paginationInfo="${resultMap.paginationInfo}" type="image" jsFunction="fn_select_sopthema_list"/>
</div>

View File

@@ -0,0 +1,156 @@
<%@ 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 : MaSopthemaListInqireR.jsp
Description : 쇼핑몰테마 목록조회 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2023-12-26 리브가 최초 생성
2023-01-09 리브가 목록조회 수정
2024-01-10 박철민 pageUnit 유지를 위한 코드 추가
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@include file ="/WEB-INF/views/comm/admin/Include.jsp" %>
</head>
<script>
$(document).ready(function () {
let pageIndex = '<c:out value="${ resultMap.BOSopThemaVO.pageIndex }"/>';
let pageUnit = '<c:out value="${ resultMap.BOSopThemaVO.pageUnit }"/>';
fn_select_sopthema_list(pageIndex, pageUnit);
});
/* ********************************************************
* 목록 조회
******************************************************** */
const fn_select_sopthema_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;
}
}
$.ajax({
type: "post",
url : "<c:url value="/admin/store/sopthema/selectSopThemaListInqire"/>",
data : dataStr,
success:function(resultHtml) {
$('#pageDiv').html(resultHtml);
$('#pageUnit').niceSelect();
}
});
}
/* ********************************************************
* 수정폼 이동
******************************************************** */
const fn_move_dtl_uptpage = function(themaInnb) {
$('#listForm').attr('action', '<c:url value="/admin/store/sopthema/selectSopThemaUpdtForm"/>');
$('#listForm').attr('method', 'post');
$('#themaInnb').val(themaInnb);
$('#listForm').submit();
}
/* ********************************************************
* 등록폼 이동
******************************************************** */
const fn_move_regpage = function() {
$('#listForm').attr('action', '<c:url value="/admin/store/sopthema/selectSopThemaRegistForm"/>');
$('#listForm').attr('method', 'post');
$('#listForm').submit();
};
history.replaceState({}, null, location.pathname);
</script>
<body>
<%@include file ="/WEB-INF/views/comm/admin/Header.jsp" %>
<main class="main">
<%@include file ="/WEB-INF/views/comm/admin/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 onclick="fn_move_regpage()" class="btn primary">쇼핑몰테마 <spring:message code="button.insert"/></button>
</div>
</div>
<form id='listForm' name="listForm" method="post" action="<c:url value="/admin/store/sopthema/selectSopThemaListInqireForm"/>">
<input type="hidden" id="pageIndex" name="pageIndex" value="${ resultMap.BOSopThemaVO.pageIndex}"/>
<input type="hidden" id="themaInnb" name="themaInnb"/>
<section class="content-section" id="search-section">
<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">
<input class="input-text xl" type="text" id="srchThemaNm" name="srchThemaNm" title="쇼핑몰테마명" value="<c:out value="${ resultMap.BOSopThemaVO.srchThemaNm }" />">
</div>
</td>
<th>쇼핑몰</th>
<td>
<div class="td-inner">
<div class="select-box">
<select class="md" id="srchSopmalCd" name="srchSopmalCd" title="쇼핑몰" >
<option value="">전체</option>
<c:forEach var="sopmalList" items="${ resultMap.SopmalCdNmList }" varStatus="">
<option value="${ sopmalList.sopmalCd }" ${f:setSelected(resultMap.BOSopThemaVO.srchSopmalCd, sopmalList.sopmalCd)}>${ sopmalList.sopmalNm }</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('search-section'); return false;">초기화</button>
<button class="btn primary" id="searchBtn" type="button" onclick="fn_select_sopthema_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>
</div>
</main>
</body>
</html>

View File

@@ -0,0 +1,143 @@
<%@ 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" %>
<%--
Class Name : MaSopthemaRegistC.jsp
Description : 쇼핑몰테마 등록
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2023-12-26 리브가 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@include file ="/WEB-INF/views/comm/admin/Include.jsp" %>
</head>
<script>
$( document ).ready(function() {
});
/* ********************************************************
* 등록 AJAX
******************************************************** */
const fn_regist = function() {
const url = '<c:url value="/admin/store/sopthema/insertSopThemaRegist"/>';
const data = $('#listForm').serialize();
if(confirm('쇼핑몰 테마를 <spring:message code="confirm.common.insert"/>')) {
$.ajax({
type: 'post',
url: url,
data: data,
success: function (data) {
let str = JSON.parse(data.resBody.result);
if(str.result=='success'){
alert('<spring:message code="success.common.insert"/>');
//등록 후 수정화면으로 이동
fn_move_dtl_uptpage(data.resBody.result.replace(/[^0-9]/g, ""));
} else {
alert('<spring:message code="fail.common.insert"/>');
}
}
});
}
};
/* ********************************************************
* 수정폼 이동
******************************************************** */
const fn_move_dtl_uptpage = function(themaInnb) {
const url = '<c:url value="/admin/store/sopthema/selectSopThemaUpdtForm"/>';
$('#listForm').attr('action', url);
$('#listForm').attr('method', 'get');
$('#pageIndex').val(1);
$('#themaInnb').val(themaInnb);
$('#listForm').submit();
}
/* ********************************************************
* 목록 조회
******************************************************** */
const fn_select_list = function() {
const url = '<c:url value="/admin/store/sopthema/selectSopThemaListInqireForm"/>';
$('#listForm').attr('action', url);
$('#listForm').attr('method', 'post');
$('#listForm').submit();
};
</script>
<body>
<%@include file ="/WEB-INF/views/comm/admin/Header.jsp" %>
<main class="main">
<%@include file ="/WEB-INF/views/comm/admin/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 onclick="fn_select_list()" onkeypress="this.onclick" class="btn outline"><spring:message code="button.catalog"/></button>
<button class="btn primary" onclick="fn_regist();" ><spring:message code="button.insert"/></button>
</div>
</div>
<section class="content-section">
<form id="listForm" method="post" action="<c:url value="/admin/store/sopthema/insertSopThemaRegist"/>">
<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>테마 명<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<input class="input-text lg" type="text" id="themaNm" name="themaNm" title="테마 명" maxlength="20">
</div>
</td>
<th>스타일 시트 경로<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<input class="input-text lg" type="text" id="cssCours" name="cssCours" title="CSS 경로" maxlength="30">
</div>
</td>
</tr>
<tr>
<th>설명</th>
<td colspan="3">
<textarea class="textarea" id="dcCn" name="dcCn" title="설명" rows="8"></textarea>
</td>
</tr>
</tbody>
</table>
</div>
<!--검색 조건 , 페이징 조건 -->
<input type="hidden" id="themaInnb" name="themaInnb" value=""/>
<input type="hidden" id="srchThemaNm" name="srchThemaNm" title="검색_쇼핑몰테마명" value="<c:out value="${ resultMap.BOSopThemaVO.srchThemaNm }"/>">
<input type="hidden" id="srchSopmalCd" name="srchSopmalCd" title="검색_쇼핑몰" value="<c:out value="${ resultMap.BOSopThemaVO.srchSopmalCd }"/>">
<input type="hidden" id="pageIndex" name="pageIndex" value="<c:out value="${ resultMap.BOSopThemaVO.pageIndex }"/>"/>
<input type="hidden" id="pageUnit" name="pageUnit" value="<c:out value="${ resultMap.BOSopThemaVO.pageUnit }"/>"/>
</form>
</section>
</div>
</div>
</main>
</body>
</html>

View File

@@ -0,0 +1,184 @@
<%@ page import="java.util.Date" %>
<%@ page import="java.util.Arrays" %>
<%@ page import="java.util.List" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%--
Class Name : MaSopthemaUpdtU.jsp
Description : 쇼핑몰테마 수정
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2023-12-26 리브가 최초 생성
2024-01-10 리브가 검색조건, 페이징정보 유지되도록 수정
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@include file ="/WEB-INF/views/comm/admin/Include.jsp" %>
</head>
<script>
$(document).ready(function () {
});
/* ********************************************************
* 수정 AJAX
******************************************************** */
const fn_update = function() {
const url = '<c:url value="/admin/store/sopthema/updateSopThemaUpdt"/>';
const data = $('#listForm').serialize();
if(confirm('쇼핑몰 테마를 <spring:message code="confirm.common.update"/>')) {
$.ajax({
type: 'post',
url: url,
data: data,
success: function (data) {
let str = JSON.parse(data.resBody.result);
if(str.result=='success'){
alert('<spring:message code="success.common.update"/>');
// 수정 후 수정화면 유지
fn_move_dtl_uptpage();
} else {
alert('<spring:message code="fail.common.update"/>');
}
}
});
}
};
/* ********************************************************
* 삭제 AJAX
******************************************************** */
const fn_delete = function() {
const url = '<c:url value="/admin/store/sopthema/deleteSopThemaDel"/>';
const data = $('#listForm').serialize();
if(confirm('쇼핑몰 테마를 <spring:message code="confirm.common.delete"/>')) {
$.ajax({
type: 'post',
url: url,
data: data,
success: function (data) {
let str = JSON.parse(data.resBody.result);
if(str.result=='success'){
alert('<spring:message code="success.common.delete"/>');
// 삭제 후 목록 화면으로 이동
fn_select_sopthema_list(1);
} else {
alert(str.result);
}
}
});
}
};
/* ********************************************************
* 목록 조회
******************************************************** */
const fn_select_sopthema_list = function(pageIndex) {
$('#listForm').attr('action', '<c:url value="/admin/store/sopthema/selectSopThemaListInqireForm"/>');
$('#listForm').attr('method', 'post');
if(pageIndex) {
$('#pageIndex').val(pageIndex);
}
$('#listForm').submit();
};
/* ********************************************************
* 수정폼 이동
******************************************************** */
const fn_move_dtl_uptpage = function() {
$('#listForm').attr('action', '<c:url value="/admin/store/sopthema/selectSopThemaUpdtForm"/>');
$('#listForm').attr('method', 'get');
$('#pageIndex').val(1);
$('#listForm').submit();
}
</script>
<body>
<%@include file ="/WEB-INF/views/comm/admin/Header.jsp" %>
<main class="main">
<%@include file ="/WEB-INF/views/comm/admin/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 onclick="fn_select_sopthema_list();" class="btn outline"><spring:message code="button.catalog"/></button>
<button class="btn dark" onclick="fn_delete();"><spring:message code="button.delete"/></button>
<button class="btn primary outline" onclick="fn_update(); return false;"><spring:message code="button.update"/></button>
</div>
</div>
<section class="content-section">
<form id="listForm" method="post" action="/admin/store/sopthema/selectSopThemaUpdt">
<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>
<c:choose>
<c:when test="${ not empty resultMap.list }">
<c:forEach items="${ resultMap.list }" var="list" varStatus="status">
<input type="hidden" id="themaInnb" name="themaInnb" value="${list.themaInnb}"/>
<tr>
<th>테마 명<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<input class="input-text lg" type="text" id="themaNm" name="themaNm" value="<c:out value="${list.themaNm}"/>" title="테마 명" maxlength="20">
</div>
</td>
<th>스타일 시트 경로<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<input class="input-text lg" type="text" id="cssCours" name="cssCours" value="<c:out value="${list.cssCours}"/>" title="CSS 경로" maxlength="30">
</div>
</td>
</tr>
<tr>
<th>설명</th>
<td colspan="3">
<textarea class="textarea" id="dcCn" name="dcCn" title="설명" rows="8"><c:out value="${list.dcCn}"/></textarea>
</td>
</tr>
<tr>
<th>적용 쇼핑몰</th>
<td colspan="3">
<div class="td-inner">
<c:out value="${list.sopmalNm}"/>
</div>
</td>
</tr>
</c:forEach>
</c:when>
</c:choose>
</tbody>
</table>
</div>
<!--검색 조건 , 페이징 조건 -->
<input type="hidden" id="srchThemaNm" name="srchThemaNm" title="검색_쇼핑몰테마명" value="<c:out value="${ resultMap.BOSopThemaVO.srchThemaNm }"/>">
<input type="hidden" id="srchSopmalCd" name="srchSopmalCd" title="검색_쇼핑몰" value="<c:out value="${ resultMap.BOSopThemaVO.srchSopmalCd }"/>">
<input type="hidden" id="pageIndex" name="pageIndex" value="<c:out value="${ resultMap.BOSopThemaVO.pageIndex }"/>"/>
<input type="hidden" id="pageUnit" name="pageUnit" value="<c:out value="${ resultMap.BOSopThemaVO.pageUnit }"/>"/>
</form>
</section>
</div>
</div>
</main>
</body>
</html>

View File

@@ -0,0 +1,232 @@
<%@ 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 : maStplatC.jsp
Description : 약관 등록 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2023-12-20 김혜지 최초 생성(퍼블리싱 적용)
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@include file ="/WEB-INF/views/comm/admin/Include.jsp" %>
<script>
$(document).ready(function(){
const sopmalCd = $("#sopmalCd").val();
fn_create_ckeditor('#stplatCn', sopmalCd); //에디터 적용
fn_create_ckeditor('#imprtncStplatCn', sopmalCd); //에디터 적용
});
/*********************************************************
* 약관 목록조회 (리스트로 가기)
*********************************************************/
$("#listBtn").on("click", function(){
$('#moveForm').attr('action', '<c:url value="/admin/store/stplat/selectStplatListInqireForm"/>');
$('#moveForm').attr('method', 'post');
$('#moveForm').submit();
})
const fn_select_stplat_list = function() {
$('#moveForm').attr('action', '<c:url value="/admin/store/stplat/selectStplatListInqireForm"/>');
$('#moveForm').attr('method', 'post');
$('#moveForm').submit();
}
/*********************************************************
* 약관 등록
*********************************************************/
const fn_insert_stplat = function() {
let saveForm = $('#listForm');
saveForm.find("#stplatCn").val(fn_get_editor_data('#stplatCn'));
saveForm.find("#imprtncStplatCn").val(fn_get_editor_data('#imprtncStplatCn'));
if(confirm('약관을 <spring:message code="confirm.common.save"/>')) {
$.ajax({
type : 'post',
url : '<c:url value="/admin/store/stplat/insertStplatRegist"/>',
data : saveForm.serialize(),
success : function(result) {
let data = JSON.parse(result.resBody.result);
if(data.status === "0") {
alert('<spring:message code="success.common.insert"/>');
let params = '?stplatInnb=' + data.stplatInnb + '&pageDv=' + data.pageDv + '&srchStplatNm=' + data.srchStplatNm
+ '&srchStplatDvCd=' + data.srchStplatDvCd + '&srchSopmalCd=' + data.srchSopmalCd;
location.href = '<c:url value="/admin/store/stplat/selectStplatUpdtForm"/>' + params;
}
if(data.status === "1") {
alert('<spring:message code="fail.common.update"/>');
}
}
});
}
}
</script>
</head>
<body>
<%@include file ="/WEB-INF/views/comm/admin/Header.jsp" %>
<main class="main">
<%@include file ="/WEB-INF/views/comm/admin/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" id="listBtn" onclick="fn_select_stplat_list(${ resultMap.srchData.pageIndex });"><spring:message code="button.catalog"/></button>
<button class="btn primary" onclick="fn_insert_stplat();"><spring:message code="button.save"/></button>
</div>
</div>
<form id="moveForm">
</form>
<section class="content-section">
<form id="listForm" class="common-form">
<input type="hidden" name="chngResnCn" value="최초등록"/>
<input type="hidden" id="sopmalCd" name="srchSopmalCd" value="${ resultMap.srchData.srchSopmalCd }"/>
<input type="hidden" name="srchStplatDvCd" value="${ resultMap.srchData.srchStplatDvCd }"/>
<input type="hidden" name="srchStplatNm" value="${ resultMap.srchData.srchStplatNm }"/>
<input type="hidden" name="pageIndex" value="${ resultMap.srchData.pageIndex }"/>
<input type="hidden" name="pageUnit" value="${ resultMap.srchData.pageUnit }"/>
<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>약관 명<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<input class="input-text lg" id="stplatNm" name="stplatNm" type="text" title="약관명" maxlength="40">
</div>
</td>
<th>약관 구분<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<div class="select-box">
<select class="md" id="stplatDvCd" name="stplatDvCd" title="약관구분코드">
<option value="">선택하세요.</option>
<c:forEach var="stplatDvList" items="${ resultMap.stplatDvList }" varStatus="">
<option value="${ stplatDvList.cd }">${ stplatDvList.cdNm }</option>
</c:forEach>
</select>
</div>
</div>
</td>
</tr>
<tr>
<th>필수여부<span class="red-7"></span></th>
<td>
<div class="td-inner">
<div class="custom-radio-container">
<div class="custom-radio">
<input type="radio" id="essntlAt-y" name="essntlAt" value="Y"/>
<label for="essntlAt-y">예</label>
</div>
<div class="custom-radio">
<input type="radio" id="essntlAt-n" name="essntlAt" value="N"/>
<label for="essntlAt-n">아니오</label>
</div>
</div>
</div>
</td>
</tr>
<tr>
<th>내용작성여부<span class="red-7"></span></th>
<td>
<div class="td-inner">
<div class="custom-radio-container">
<div class="custom-radio">
<input type="radio" id="cnWritngAt-y" name="cnWritngAt" value="Y"/>
<label for="cnWritngAt-y">예</label>
</div>
<div class="custom-radio">
<input type="radio" id="cnWritngAt-n" name="cnWritngAt" value="N"/>
<label for="cnWritngAt-n">아니오</label>
</div>
</div>
</div>
</td>
</tr>
<tr>
<th>회원가입사용여부<span class="red-7"></span></th>
<td>
<div class="td-inner">
<div class="custom-radio-container">
<div class="custom-radio">
<input type="radio" id="joinUseAt-y" name="joinUseAt" value="Y"/>
<label for="joinUseAt-y">예</label>
</div>
<div class="custom-radio">
<input type="radio" id="joinUseAt-n" name="joinUseAt" value="N"/>
<label for="joinUseAt-n">아니오</label>
</div>
</div>
</div>
</td>
</tr>
<tr>
<th>비회원구매여부<span class="red-7"></span></th>
<td>
<div class="td-inner">
<div class="custom-radio-container">
<div class="custom-radio">
<input type="radio" id="nmbrPurchsAt-y" name="nmbrPurchsAt" value="Y"
/>
<label for="nmbrPurchsAt-y">예</label>
</div>
<div class="custom-radio">
<input type="radio" id="nmbrPurchsAt-n" name="nmbrPurchsAt" value="N"
/>
<label for="nmbrPurchsAt-n">아니오</label>
</div>
</div>
</div>
</td>
</tr>
<tr>
<th>약관 전문<span class="red-7">*</span></th>
<td colspan="3">
<div class="td-inner">
<textarea class="textarea" id="stplatCn" name="stplatCn" title="약관전문" rows="8"></textarea>
</div>
</td>
</tr>
<tr>
<th>중요고지 사항</th>
<td colspan="3">
<div class="td-inner">
<textarea class="textarea" id="imprtncStplatCn" name="imprtncStplatCn" title="중요고지사항" rows="8"></textarea>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</form>
</section>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</div>
</main>
</body>
</html>

View File

@@ -0,0 +1,67 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%--
Class Name : maStplatChangePopupR.jsp
Description : 약관 수정이력 상세조회 팝업
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
since : 2023.12.27 김혜지 최초 생성
--%>
<div id="stplatHist-dtl-modal" class="modal" style="max-width: 900px;">
<div class="modal-header">
<h4>약관 변경내용 조회</h4>
</div>
<div class="modal-content">
<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">
<div class="pop-terms__box" tabindex="0" style="width: 100%;">
<div class="terms_box">
<c:out value="${resultMap.stplat.stplatCn}"/>
</div>
</div>
</div>
</td>
</tr>
<tr>
<th>중요고지사항</th>
<td>
<div class="td-inner">
<div class="pop-terms__box" tabindex="0" style="width: 100%;">
<div class="terms_box">
<c:out value="${resultMap.stplat.imprtncStplatCn}"/>
</div>
</div>
</div>
</td>
</tr>
<tr>
<th>변경사유</th>
<td>
<div class="td-inner">
<c:out value="${resultMap.stplat.chngResnCn}"/>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="modal-footer">
<button onclick="fn_close_modal('stplatHist-dtl-modal')" class="btn outline">닫기</button>
</div>
</div>

View File

@@ -0,0 +1,141 @@
<%@ 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 : maStplatListInqireR.jsp
Description : 약관 목록조회 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-01-10 김혜지 최초 생성
--%>
<%-- 리스트 출력 섹션 START --%>
<script>
$(document).ready(function(){
/*********************************************************--%>
* 약관 수정 폼
*********************************************************/
$(".updtStplatBtn").on("click", function(){
const stplatInnb = $(this).data("innb");
let url = '<c:url value="/admin/store/stplat/selectStplatUpdtForm"/>';
$('#updtForm').attr('action', url);
$('#updtForm').attr('method', 'post');
$('#stplatInnb').val(stplatInnb);
$("#updtForm").find("#stplatInnb").val(stplatInnb);
$('#updtForm').submit();
})
})
</script>
<section class="content-section">
<form id="updtForm">
<input type="hidden" id="stplatInnb" name="stplatInnb" value="">
</form>
<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_stplat_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>
<div class="center">
</div>
<div class="right">
<button type="button" class="btn outline sm" onclick="fn_excel_download();">
<i class="icon icon_excel"></i>
다운로드
</button>
</div>
</div>
<hr class="spacing">
<div class="table-wrapper">
<table class="table vertical">
<caption>해당 테이블에 대한 설명</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 4%;">
<col style="width: auto;">
<col style="width: 14%;">
<col style="width: 20%;">
<col style="width: 7%;">
<col style="width: 7%;">
<col style="width: 7%">
</colgroup>
<thead>
<tr>
<th>번호</th>
<th>약관명</th>
<th>약관구분</th>
<th>적용쇼핑몰</th>
<th>사용여부</th>
<th>등록일자</th>
<th>최종수정일자</th>
<th>관리</th>
</tr>
</thead>
<%-- 리스트 BODY START --%>
<tbody id="listCount">
<c:choose>
<c:when test="${ not empty resultMap.resultList }">
<c:forEach items="${ resultMap.resultList }" var="stplatList" varStatus="status">
<tr>
<td><c:out value="${ resultMap.paginationInfo.totalRecordCount - stplatList.rnum + 1 }" /></td>
<td style="text-align: left;"><c:out value="${ stplatList.stplatNm }"/></td>
<td style="text-align: left;"><c:out value="${ stplatList.stplatDvNm }"/></td>
<td style="text-align: left;"><c:out value="${ stplatList.sopmalNm }"/></td>
<td style="text-align: center;">
<c:if test="${ stplatList.useAt eq 'Y'}">사용</c:if>
<c:if test="${ stplatList.useAt eq 'N'}">미사용</c:if>
</td>
<td><c:out value="${ stplatList.registDt }"/></td>
<td><c:out value="${ stplatList.updtDe }"/></td>
<td>
<div class="manage-btn-container re">
<button class="btn xsm primary outline updtStplatBtn" type="button"
data-innb="${ stplatList.stplatInnb }">
<spring:message code="button.update"/>
</button>
</div>
</td>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
<tr>
<td colspan="8"><spring:message code="common.nodata"/></td>
</tr>
</c:otherwise>
</c:choose>
</tbody>
<%-- 리스트 BODY END --%>
</table>
</div>
</section>
<%-- 리스트 출력 섹션 END --%>
<div class="pagination__container">
<ui:pagination paginationInfo="${ resultMap.paginationInfo }" type="image" jsFunction="fn_select_stplat_list" />
</div>

View File

@@ -0,0 +1,215 @@
<%@ 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 : maStplatListInqireRForm.jsp
Description : 약관 목록조회 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------sms
2023-12-20 김혜지 최초 생성
2024-01-10 김혜지 jsp 분리
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@include file ="/WEB-INF/views/comm/admin/Include.jsp" %>
<script>
$(document).ready(function(){
let pageIndex = '<c:out value="${ resultMap.stplat.pageIndex }"/>';
let pageUnit = '<c:out value="${ resultMap.stplat.pageUnit }"/>';
let pageDv = '<c:out value="${ resultMap.stplat.pageDv }"/>';
if (pageDv == '') {
fn_select_stplat_list(1);
} else {
pageIndex = '1';
pageDv = '10';
fn_select_stplat_list(pageIndex, '10');
}
$('#listForm').on('keydown', function(event) {
if (event.keyCode === 13) {
event.preventDefault();
fn_select_stplat_list('1', '10');
}
});
});
/*********************************************************
* 약관 목록조회 ajax
*********************************************************/
const fn_select_stplat_list = function(pageIndex, pageUnit) {
let dataStr;
if(!pageIndex) {
$('#pageIndex').val(1);
} else {
$('#pageIndex').val(pageIndex);
}
$('#pageIndex').val(pageIndex);
if(!pageUnit) {
dataStr = $('#listForm').serialize();
} else {
if($('#pageUnit').length){
$('#pageUnit').val(pageUnit);
dataStr = $('#listForm').serialize();
} else {
dataStr = $('#listForm').serialize()+'&pageUnit='+pageUnit;
}
}
$.ajax({
type: "post",
url : "<c:url value='/admin/store/stplat/selectStplatListInqire'/>",
data : dataStr,
success:function(resultHtml) {
$('#pageDiv').html(resultHtml);
$('#pageUnit').niceSelect();
}
});
}
/*********************************************************
* 약관 검색 초기화
*********************************************************/
const fn_clear_input = function() {
$('#srchStplatNm').val("");
$('#srchSopmalCd').val("");
$('#srchStplatDvCd').val("");
$('#srchSopmalCd').next(".nice-select").find("li.selected").removeClass("selected");
$('#srchStplatDvCd').next(".nice-select").find("li.selected").removeClass("selected");
$('#srchSopmalCd').next(".nice-select").find(".current").text("전체");
$('#srchStplatDvCd').next(".nice-select").find(".current").text("전체");
};
/*********************************************************
* 약관 목록 엑셀 다운
*********************************************************/
const fn_excel_download = function() {
$('#listForm').attr('action', '<c:url value="/admin/store/stplat/selectStplatListExcelDwld"/>');
$('#listForm').attr('method', 'post');
$('#listForm').submit();
}
/*********************************************************
* 약관 등록 폼
*********************************************************/
const fn_insert_stplat_form = function(){
$('#listForm').attr('action', '<c:url value="/admin/store/stplat/selectStplatRegistForm"/>');
$('#listForm').attr('method', 'post');
$('#listForm').submit();
}
/*********************************************************
* 새로고침시 검색 초기화
*********************************************************/
history.replaceState({}, null, location.pathname);
</script>
</head>
<body>
<%@include file ="/WEB-INF/views/comm/admin/Header.jsp" %>
<main class="main">
<%@include file ="/WEB-INF/views/comm/admin/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">
<a href="#" onclick="fn_insert_stplat_form();" class="btn primary">약관 <spring:message code="button.insert"/></a>
</div>
</div>
<form id="listForm" name="listForm" method="post" action="<c:url value="/admin/store/stplat/selectStplatListInqireForm"/>">
<input type="hidden" id="pageIndex" name="pageIndex"/>
<!-- <input type="hidden" id="recordCountPerPage" name="recordCountPerPage" value="${ resultMap.paginationInfo.recordCountPerPage }"/> -->
<input type="hidden" id="stplatInnb" name="stplatInnb"/>
<%-- 검색 섹션 START --%>
<section class="content-section" id="stplatSearchForm">
<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">
<input class="input-text xl" type="text" id="srchStplatNm" name="srchStplatNm" title="약관명" maxlength="35"
value="<c:out value="${ resultMap.stplat.srchStplatNm }" />">
</div>
</td>
<th>쇼핑몰</th>
<td>
<div class="td-inner">
<div class="select-box">
<select class="md" id="srchSopmalCd" name="srchSopmalCd" title="쇼핑몰코드">
<option value="">전체</option>
<c:forEach var="stplatSopmalList" items="${ resultMap.stplatSopmalList }" varStatus="">
<option value="${ stplatSopmalList.sopmalCd }">${ stplatSopmalList.sopmalNm }</option>
</c:forEach>
</select>
</div>
</div>
</td>
</tr>
<tr>
<th>약관구분</th>
<td colspan="3">
<div class="td-inner">
<div class="select-box">
<select class="md" id="srchStplatDvCd" name="srchStplatDvCd" title="약관구분코드">
<option value="">전체</option>
<c:forEach var="stplatDvList" items="${ resultMap.stplatDvList }" varStatus="">
<option value="${ stplatDvList.cd }">${ stplatDvList.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" type="button" onclick="fn_clear_input();"><spring:message code="button.init"/></button>
<button class="btn primary" type="button" onclick="fn_select_stplat_list(1);"><spring:message code="button.search"/></button>
</div>
<div class="right"></div>
</div>
</section>
<%-- 검색 섹션 END --%>
<div id="pageDiv">
</div>
</form>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</div>
</main>
</body>
</html>

View File

@@ -0,0 +1,445 @@
<%@ 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 : maStplatU.jsp
Description : 약관 수정 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2023-12-21 김혜지 최초 생성(퍼블리싱 적용)
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@include file ="/WEB-INF/views/comm/admin/Include.jsp" %>
<script>
$(document).ready(function(){
let saveForm = $("#moveForm");
const sopmalCd = $("#sopmalCd").val();
fn_create_ckeditor('#stplatCn', sopmalCd); //에디터 적용
fn_create_ckeditor('#imprtncStplatCn', sopmalCd); //에디터 적용
/*********************************************************
* 약관 목록조회 (리스트로 가기)
*********************************************************/
$("#listBtn").on("click", function(){
$('#moveForm').attr('action', '<c:url value="/admin/store/stplat/selectStplatListInqireForm"/>');
$('#moveForm').attr('method', 'post');
$('#moveForm').submit();
})
/*********************************************************
* 약관 수정
*********************************************************/
$("#updtBtn").on("click", function() {
let saveForm = $('#listForm');
saveForm.find("#stplatCn").val(fn_get_editor_data('#stplatCn'));
saveForm.find("#imprtncStplatCn").val(fn_get_editor_data('#imprtncStplatCn'));
if(confirm('약관을 <spring:message code="confirm.common.update"/>')) {
$.ajax({
type : 'post',
url : '<c:url value="/admin/store/stplat/updateStplatUpd"/>',
data : saveForm.serialize(),
success : function(result) {
let data = JSON.parse(result.resBody.result);
if(data.status === "0") {
alert('<spring:message code="success.common.update"/>');
let params = '?stplatInnb=' + data.stplatInnb + '&pageDv=' + data.pageDv + '&srchStplatNm=' + data.srchStplatNm
+ '&srchStplatDvCd=' + data.srchStplatDvCd + '&srchSopmalCd=' + data.srchSopmalCd;
location.href = '<c:url value="/admin/store/stplat/selectStplatUpdtForm"/>' + params;
}
if(data.status === "1") {
alert('<spring:message code="fail.common.update"/>');
}
}
});
};
})
});
const fn_select_stplat_list = function() {
$('#listForm').attr('action', '<c:url value="/admin/store/stplat/selectStplatListInqireForm"/>');
$('#listForm').attr('method', 'post');
$('#listForm').submit();
}
/* ********************************************************
* 삭제 AJAX
******************************************************** */
const fn_delete = function() {
let deleteForm = $('#listForm');
//사용여부 체크 Y - 사용, N - 미사용
const checkUrl = '<c:url value="/admin/store/stplat/selectStplatSopmalUse"/>';
let useYnResult;
$.ajax({
type: 'post',
url: checkUrl,
data: deleteForm.serialize(),
success: function (data) {
let str = JSON.parse(data.resBody.result);
if(str.result=='Y'){
alert("사용중인 약관입니다.");
return false;
} else {
useYnResult = str.result;
if(useYnResult == "N") {
if(confirm('약관을 <spring:message code="confirm.common.delete"/>')) {
const url = '<c:url value="/admin/store/stplat/deleteStplatDel"/>';
$.ajax({
type: 'post',
url: url,
data: deleteForm.serialize(),
success: function (data) {
let str = JSON.parse(data.resBody.result);
if(str.result=='success'){
alert('<spring:message code="success.common.delete"/>');
// 삭제 후 목록 화면으로 이동
//fn_select_stplat_list(1);
} else {
alert(str.result);
}
}
});
}
}
}
}
});
};
/*********************************************************
* 약관 변경이력 목록 조회
*********************************************************/
const fn_select_stplatHist_list = function(pageIndex) {
$('#listForm').attr('action', '<c:url value="/admin/store/stplat/selectStplatUpdtForm"/>');
$('#listForm').attr('method', 'post');
$('#pageIndex').val(pageIndex);
$('#listForm').submit();
}
/*********************************************************
* 변경내역 불러오기
*********************************************************/
const fn_apply_chng = function(chngSnb, stplatNms, stplatDvNm, stplatDvCd) {
$('#stplatCn').val(stplatCn);
$('#stplatDvCd').val(stplatDvCd).prop('selected', true);
$('#stplatDvCd').find('option').removeAttr('selected')
$('#stplatDvCd').next().find('[data-value=' + stplatDvCd + ']').addClass('selected');
$('#stplatDvCd').next(".nice-select").find("li.selected").removeClass("selected");
$('#stplatDvCd').next(".nice-select").find(".current").text(stplatDvNm);
//$('#imprtncStplatCn').value = imprtncStplatCn;
$("#chngSnb").val(chngSnb)
let form = $('#chngForm');
const url = '<c:url value="/admin/store/stplat/selectStplatInqire"/>';
$.ajax({
type: 'post',
url: url,
data: form.serialize(),
success: function (data) {
let str = JSON.parse(data.resBody.result);
fn_set_editor_data("#stplatCn", str.stplat.stplatCn);
fn_set_editor_data("#imprtncStplatCn", str.stplat.imprtncStplatCn);
$("#stplatNm").val(str.stplat.stplatNm)
$("#stplatDvNm").val(str.stplat.stplatDvNm)
}
});
};
/*********************************************************
* 약관 수정 폼
*********************************************************/
$(".updtStplatBtn").on("click", function(){
const stplatInnb = $(this).data("innb");
let url = '<c:url value="/admin/store/stplat/selectStplatUpdtForm?stplatInnb="/>' + stplatInnb;
$('#updtForm').attr('action', url);
$('#updtForm').attr('method', 'post');
$('#updtForm').submit();
})
</script>
</head>
<body>
<%@include file ="/WEB-INF/views/comm/admin/Header.jsp" %>
<main class="main">
<%@include file ="/WEB-INF/views/comm/admin/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" id="listBtn" onclick="fn_select_stplat_list();"><spring:message code="button.catalog"/></button>
<button class="btn primary" type="button" id="updtBtn"><spring:message code="button.save"/></button>
</div>
</div>
<form id="moveForm">
</form>
<form id="chngForm">
<input type="hidden" name="stplatInnb" value="<c:out value="${ resultMap.stplat.stplatInnb }"/>"/>
<input type="hidden" id="chngSnb" name="chngSnb" value=""/>
</form>
<form id="listForm">
<input type="hidden" id="stplatInnb" name="stplatInnb" value="<c:out value="${ resultMap.stplat.stplatInnb }"/>"/>
<input type="hidden" id="sopmalCd" name="srchSopmalCd" value="${ resultMap.stplat.srchSopmalCd }"/>
<input type="hidden" name="srchStplatDvCd" value="${ resultMap.stplat.srchStplatDvCd }"/>
<input type="hidden" name="srchStplatNm" value="${ resultMap.stplat.srchStplatNm }"/>
<input type="hidden" name="pageIndex" value="${ resultMap.srchData.pageIndex }"/>
<input type="hidden" name="pageUnit" value="${ resultMap.srchData.pageUnit }"/>
<input type="hidden" name="pageDv" value="${ resultMap.srchData.pageDv }"/>
<%-- 수정 섹션 START --%>
<section class="content-section">
<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>약관 명<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<input class="input-text lg" id="stplatNm" name="stplatNm" type="text" title="약관명" maxlength="40" value="<c:out value="${ resultMap.stplat.stplatNm }"/>">
</div>
</td>
<th>약관 구분<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<div class="select-box">
<select class="md" id="stplatDvCd" name="stplatDvCd" title="약관구분코드">
<c:forEach var="stplatDvList" items="${ resultMap.stplatDvList }" varStatus="">
<option value="${ stplatDvList.cd }" ${ f:setSelected(stplatDvList.cd, resultMap.stplat.stplatDvCd) }>${ stplatDvList.cdNm }</option>
</c:forEach>
</select>
</div>
</div>
</td>
</tr>
<tr>
<th>필수여부<span class="red-7"></span></th>
<td>
<div class="td-inner">
<div class="custom-radio-container">
<div class="custom-radio">
<input type="radio" id="essntlAt-y" name="essntlAt" value="Y"
<c:if test="${resultMap.stplat.essntlAt == 'Y'}">checked</c:if>
/>
<label for="essntlAt-y">예</label>
</div>
<div class="custom-radio">
<input type="radio" id="essntlAt-n" name="essntlAt" value="N"
<c:if test="${resultMap.stplat.essntlAt == 'N'}">checked</c:if>
/>
<label for="essntlAt-n">아니오</label>
</div>
</div>
</div>
</td>
</tr>
<tr>
<th>내용작성여부<span class="red-7"></span></th>
<td>
<div class="td-inner">
<div class="custom-radio-container">
<div class="custom-radio">
<input type="radio" id="cnWritngAt-y" name="cnWritngAt" value="Y"
<c:if test="${resultMap.stplat.cnWritngAt == 'Y'}">checked</c:if>
/>
<label for="cnWritngAt-y">예</label>
</div>
<div class="custom-radio">
<input type="radio" id="cnWritngAt-n" name="cnWritngAt" value="N"
<c:if test="${resultMap.stplat.cnWritngAt == 'N'}">checked</c:if>
/>
<label for="cnWritngAt-n">아니오</label>
</div>
</div>
</div>
</td>
</tr>
<tr>
<th>회원가입사용여부<span class="red-7"></span></th>
<td>
<div class="td-inner">
<div class="custom-radio-container">
<div class="custom-radio">
<input type="radio" id="joinUseAt-y" name="joinUseAt" value="Y"
<c:if test="${resultMap.stplat.joinUseAt == 'Y'}">checked</c:if>
/>
<label for="joinUseAt-y">예</label>
</div>
<div class="custom-radio">
<input type="radio" id="joinUseAt-n" name="joinUseAt" value="N"
<c:if test="${resultMap.stplat.joinUseAt == 'N'}">checked</c:if>
/>
<label for="joinUseAt-n">아니오</label>
</div>
</div>
</div>
</td>
</tr>
<tr>
<th>비회원구매여부<span class="red-7"></span></th>
<td>
<div class="td-inner">
<div class="custom-radio-container">
<div class="custom-radio">
<input type="radio" id="nmbrPurchsAt-y" name="nmbrPurchsAt" value="Y"
<c:if test="${resultMap.stplat.nmbrPurchsAt == 'Y'}">checked</c:if>
/>
<label for="nmbrPurchsAt-y">예</label>
</div>
<div class="custom-radio">
<input type="radio" id="nmbrPurchsAt-n" name="nmbrPurchsAt" value="N"
<c:if test="${resultMap.stplat.nmbrPurchsAt == 'N'}">checked</c:if>
/>
<label for="nmbrPurchsAt-n">아니오</label>
</div>
</div>
</div>
</td>
</tr>
<tr>
<th>사용여부<span class="red-7"></span></th>
<td>
<div class="td-inner">
<div class="select-box">
<select class="md" id="useAt" name="useAt" title="약관구분코드">
<option value="Y" ${ f:setSelected('Y', resultMap.stplat.useAt) }>사용</option>
<option value="N" ${ f:setSelected('N', resultMap.stplat.useAt) }>미사용</option>
</select>
</div>
</div>
</td>
</tr>
<tr>
<th>약관 전문<span class="red-7">*</span></th>
<td colspan="3">
<div class="td-inner">
<textarea class="textarea" id="stplatCn" name="stplatCn" title="약관전문" rows="8"><c:out value="${ resultMap.stplat.stplatCn }"/></textarea>
</div>
</td>
</tr>
<tr>
<th>중요고지 사항</th>
<td colspan="3">
<div class="td-inner">
<textarea class="textarea" id="imprtncStplatCn" name="imprtncStplatCn" title="중요고지사항" rows="8"><c:out value="${ resultMap.stplat.imprtncStplatCn }"/></textarea>
</div>
</td>
</tr>
<tr>
<th>적용 쇼핑몰</th>
<td colspan="3">
<div class="td-inner">
<c:out value="${ resultMap.stplat.sopmalNm }" />
</div>
</td>
</tr>
<tr>
<th>변경사유<span class="red-7">*</span></th>
<td colspan="3">
<div class="td-inner">
<textarea class="textarea" id="chngResnCn" name="chngResnCn" title="변경사유" rows="4" maxlength="1000"><c:out value="${ resultMap.stplat.chngResnCn }"/></textarea>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</section>
<%-- 수정 섹션 END --%>
<%-- 리스트 출력 섹션 START --%>
<section class="content-section">
<h3 class="content-section__title">변경이력</h3>
<div class="table-wrapper">
<table class="table vertical">
<caption>약관 변경이력</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 4%;">
<col style="width: auto;">
<col style="width: 12%;">
<col style="width: 7%;">
<col style="width: 7%">
</colgroup>
<thead>
<tr>
<th>번호</th>
<th>변경사유</th>
<th>변경일시</th>
<th>변경자</th>
<th>관리</th>
</tr>
</thead>
<%-- 리스트 BODY START --%>
<tbody>
<c:choose>
<c:when test="${ not empty resultMap.resultList }">
<c:forEach items="${ resultMap.resultList }" var="histList" varStatus="status">
<tr>
<td><c:out value="${ histList.chngSnb }"/></td>
<td class="left">
<a class="under-line" onclick="fn_open_modal('#stplat-modal','#stplatHist-dtl-modal','selectStplatChangePopup',
{'stplatInnb': <c:out value="${ histList.stplatInnb }"/>,'chngSnb': <c:out value="${ histList.chngSnb }"/>}); return false;">
<c:out value="${ histList.chngResnCn }"/></a>
</td>
<td><c:out value="${ histList.registDt }"/></td>
<td><c:out value="${ histList.mngrNm }"/></td>
<td>
<div class="manage-btn-container">
<button class="btn xsm outline" onclick="fn_apply_chng('${ histList.chngSnb }', '${ histList.stplatNm }', '${ histList.stplatDvNm }', '${ histList.stplatDvCd }'); return false;">적용</button>
</div>
</td>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
<tr>
<td colspan="8"><spring:message code="common.nodata"/></td>
</tr>
</c:otherwise>
</c:choose>
</tbody>
<%-- 리스트 BODY END --%>
</table>
</div>
</section>
<%-- 리스트 출력 섹션 END --%>
</form>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</div>
</main>
</body>
<div id="stplat-modal">
</div>
</html>

View File

@@ -0,0 +1,500 @@
<%@ 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"%>
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld"%>
<%--
Class Name : maAuthGrpC.jsp
Description : 권한 등급 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
since : 2023.12.19 최범식 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@include file ="/WEB-INF/views/comm/admin/Include.jsp" %>
<script>
$(document).ready(function() {
$('[name=srchFnctNm], [name=srchFnctUrl]').keydown(function(event) {
if (event.keyCode === 13) {
event.preventDefault();
fn_select_fnctList('1');
}
});
let fnctStr = '${resultMap.mbrGradList[0].detailList[0].fnctIdsArr}';
if (fnctStr !== null && fnctStr !== '') {
inFnctArr = fnctStr.split('$');
}
});
/* ********************************************************
* 기능 팝업 전체 선택
******************************************************** */
const fn_check_selectAll = function(_target) {
if ($(_target).is(':checked')) {
$('[name=fnctPopChk]').prop('checked', true);
} else {
$('[name=fnctPopChk]').prop('checked', false);
}
}
/* ********************************************************
* 기능 팝업 전체 해제
******************************************************** */
const fn_uncheck_selectAll = function() {
let chkCnt = $('[name=fnctPopChk]:checked').length;
let allCnt = $('[name=fnctPopChk]').length;
if (chkCnt !== allCnt && $('#check-all').is(':checked')) {
$('#check-all').prop('checked', false);
} else if (chkCnt !== allCnt && !$('#check-all').is(':checked') && allCnt - chkCnt === 1 ) {
$('#check-all').prop('checked', true);
} else if (chkCnt === allCnt ) {
$('#check-all').prop('checked', true);
}
}
/* ********************************************************
* 모달 닫기 리스트 삭제
******************************************************** */
const fn_remove_fnctList = function() {
$('#pageDiv').html('');
fn_clear_input();
}
/* ********************************************************
* 모달화면 -> 본화면으로 데이터 전송 > 데이타 정리
******************************************************** */
let inFnctArr = [];
const fn_collect_params = function() {
$('[name=fnctPopChk]:checked').each(function() {
if ($(this).val() === '') return;
let fnctId = $(this).closest('td').find('[name=fnctId]').val();
let fnctNm = $(this).closest('td').find('[name=fnctNm]').val();
let fnctDvNm = $(this).closest('td').find('[name=fnctDvNm]').val();
let fnctDvCd = $(this).closest('td').find('[name=fnctDvCd]').val();
let fnctUri = $(this).closest('td').find('[name=fnctUri]').val();
let fnctData = {
'fnctId' : fnctId,
'fnctNm' : fnctNm,
'fnctDvNm' : fnctDvNm,
'fnctDvCd' : fnctDvCd,
'fnctUri' : fnctUri
};
if (inFnctArr.includes(fnctId)) {
alert('[' + fnctNm + '] 이미 선택된 기능입니다.');
$('[name=fnctPopChk]').prop('checked', false);
return;
} else {
inFnctArr.push(fnctId);
fn_add_input(fnctData);
$('[name=fnctPopChk]').prop('checked', false);
}
});
}
/* ********************************************************
* 기능 추가 버튼 기능
******************************************************** */
const fn_add_input = function(_data) {
const fnctInfore = '<tr>'
+ ' <td>'
+ ' <input type="hidden" name="fnctIds" value="' + _data.fnctId + '">'
+ ' <input type="hidden" name="fnctNm" value="' + _data.fnctNm + '">'
+ ' <input type="hidden" name="fnctDvNm" value="' + _data.fnctDvNm + '">'
+ ' <input type="hidden" name="fnctDvCd" value="' + _data.fnctDvCd +'">'
+ ' <input type="hidden" name="fnctUri" value="' + _data.fnctUri +'">'
+ ' <label class="b-checkbox checkbox is-medium">'
+ ' <input type="checkbox" name="fnctChk" value="' + _data.fnctId + '">'
+ ' <span class="check"></span>'
+ ' </label>'
+ ' </td>'
+ ' <td class="text-left">' + _data.fnctNm + '</td>'
+ ' <td>' + _data.fnctDvNm + '</td>'
+ ' <td class="text-left">' + _data.fnctUri +'</td>'
+ ' </tr>'
$('#fnctList').append(fnctInfore);
$('#noData').hide();
let cnt = $('#fnctList').children().length - 1;
$('#total').text(cnt);
}
/* ********************************************************
* 기능 삭제 버튼 기능
******************************************************** */
const fn_remove_Input = function() {
const target = $('[name=fnctChk]:checked');
if (target.length === 0) {
alert('항목을 선택해 주세요.');
return;
} else {
target.each(function(tg) {
if (inFnctArr.length > 0) {
let fnctId = $(this).val();
inFnctArr = inFnctArr.filter((fid) => fid !== fnctId);
}
$(this).parents('tr').remove();
});
}
let cnt = $('#fnctList').children().length;
if (cnt === 1) $('#noData').show();
$('#total').text(cnt - 1);
$('#btn_fnctAll').prop('checked', false);
}
/* ********************************************************
* 권한그룹 등록
******************************************************** */
const fn_regist_authGrp = function() {
if(!confirm('기능을 <spring:message code="confirm.common.insert"/>')) return;
let fnctIdArr = [];
$('[name=fnctChk]').each(function() {
fnctIdArr.push($(this).val());
});
let fnctIds = fnctIdArr.join(',');
if(fnctIds === ''){
alert('기능은 최소 하나 이상 등록해야합니다.');
return;
}
let params = $('#regForm').serialize() + '&fnctIds=' + fnctIds;
$.ajax({
type: 'post',
url : '<c:url value="/admin/sys/authgrp/insertAuthGrpRegist"/>',
data: params,
success: function (result) {
let authorId = JSON.parse(result.resBody.result).authorId;
$('#backupForm').find('[name=authorId]').val(authorId);
$('#backupForm').find('[name=pageDv]').val('I');
if(authorId !== '' && authorId !== undefined ){
alert('<spring:message code="success.common.insert"/>');
$('#backupForm').attr('action', '<c:url value="/admin/sys/authgrp/selectAuthGrpUpdtForm"/>');
$('#backupForm').submit();
} else {
alert('<spring:message code="fail.common.insert"/>');
}
}
});
}
</script>
</head>
<body>
<%@include file ="/WEB-INF/views/comm/admin/Header.jsp" %>
<main class="main">
<%@include file ="/WEB-INF/views/comm/admin/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_goto_list()"><spring:message code="button.catalog"/></button>
<button type="button" class="btn primary" onclick="fn_regist_authGrp();"><spring:message code="button.save"/></button>
</div>
</div>
<section class="content-section">
<form id="regForm">
<div class="table-wrapper">
<table class="table">
<caption>권한그룹</caption>
<colgroup>
<col style="width: 12%;">
<col style="width: 38%;">
</colgroup>
<tbody>
<tr>
<th>권한그룹 명<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<input type="text" class="input-text xl" name="authorNm" value="${resultMap.mbrGradList[0].detailList[0].authorNm}" title="권한그룹 명" maxlength="43">
</div>
</td>
<th>시스템 구분<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<div class="select-box" id="sysDvCd">
<select name="sysDvCd" id="srchSys-select" title="시스템 구분" >
<option value="" ${f:setSelected(resultMap.mbrGradList[0].detailList[0].sysDvCd, '')}>전체</option>
<c:forEach var="sysDvCd" items="${resultMap.sysDvList}" varStatus="status">
<option value="${sysDvCd.cd}" ${f:setSelected(resultMap.mbrGradList[0].detailList[0].sysDvCd, sysDvCd.cd) }> ${sysDvCd.cdNm}</option>
</c:forEach>
</select>
</div>
</div>
</td>
</tr>
<tr>
<th>권한그룹 설명<span class="red-7">*</span></th>
<td colspan="3">
<div class="td-inner">
<textarea class="textarea" name="authorDc" title="권한그룹 설명" rows="8" maxlength="200">${resultMap.mbrGradList[0].detailList[0].authorDc }</textarea>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</form>
</section>
<section class="content-section">
<h3 class="content-section__title">기능 정보</h3>
<div class="form-control-container">
<div class="left">
<div class="search-number">
<span class="search-number__text">총 <strong id="total"><c:out value="${resultMap.mbrGradList[0].total }"/></strong>건</span>
</div>
</div>
<div class="center">
</div>
<div class="right">
<button type="button" class="btn dark sm" onclick="fn_remove_Input(this);">
<spring:message code="button.delete"/>
</button>
<a href="#fnct-modal" rel="modal:open" class="btn primary outline sm" id="fnctPopOpen" onclick="fn_select_fnctList('1');" >
<spring:message code="button.add"/>
</a>
</div>
</div>
<hr class="spacing">
<div class="table-wrapper">
<table class="table vertical">
<caption>해당 테이블에 대한 설명</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 4%;">
<col style="width: 24%;">
<col style="width: 12%;">
<col style="width: auto;">
</colgroup>
<thead>
<tr>
<th>
<label class="b-checkbox checkbox is-medium check-all">
<input type="checkbox" value="" id="btn_fnctAll">
<span class="check"></span>
</label>
</th>
<th>기능 명</th>
<th>기능 구분</th>
<th>URL</th>
</tr>
</thead>
<tbody id="fnctList">
<c:if test="${not empty resultMap.mbrGradList[0].fnctList }" >
<c:forEach var="fnct" items="${resultMap.mbrGradList[0].fnctList }" varStatus="status">
<tr>
<td>
<input type="hidden" name="fnctIds[]" value="${fnct.fnctId}">
<label class="b-checkbox checkbox is-medium">
<input type="checkbox" name="fnctChk" value="${fnct.fnctId}" >
<span class="check"></span>
</label>
</td>
<td class="text-left">${fnct.fnctNm }</td>
<td>${fnct.fnctDvNm }</td>
<td class="text-left">${fnct.fnctUri }</td>
</tr>
</c:forEach>
<tr id="noData" style="display: none;">
<td colspan="5">해당 권한그룹에 포함되는 기능정보를 선택하세요.</td>
</tr>
</c:if>
<c:if test="${empty resultMap.mbrGradList[0].fnctList }" >
<tr id="noData">
<td colspan="5">해당 권한그룹에 포함되는 기능정보를 선택하세요.</td>
</tr>
</c:if>
</tbody>
</table>
</div>
</section>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</div>
</main>
<!-- 기능 조회 모달 -->
<div id="fnct-modal" class="modal" style="max-width: 900px; max-height: 800px;">
<div class="modal-header">
<h4>기능 조회</h4>
</div>
<div class="modal-content">
<form id="fnctForm">
<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" >
<input type="text" class="input-text xl" name="srchFnctNm" id="srchFnctNm" />
</div>
</td>
<th>기능 구분</th>
<td>
<div class="td-inner">
<div class="select-box">
<select name="srchFnctDv" id="srchFnct-select" title="기능 구분" >
<option value="">전체</option>
<c:forEach var="fnctDvCd" items="${resultMap.fnctDvList}" varStatus="status">
<option value="${fnctDvCd.cd}"> ${fnctDvCd.cdNm}</option>
</c:forEach>
</select>
</div>
</div>
</td>
</tr>
<tr>
<th>URL</th>
<td>
<div class="td-inner" >
<input type="text" class="input-text xl" name="srchFnctUri" id="srchFnctUri"/>
</div>
</td>
<th>시스템 구분</th>
<td>
<div class="td-inner">
<div class="select-box">
<select name="srchSysDv" id="srchSysDv-select" title="시스템 구분" >
<option value="" checked>전체</option>
<c:forEach var="sysDvCd" items="${resultMap.sysDvList}" varStatus="status">
<option value="${sysDvCd.cd}"> ${sysDvCd.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 type="button" class="btn outline" id="resetBtn" onclick="fn_clear_input();"><spring:message code="button.init"/></button>
<button type="button" class="btn primary" id="searchBtn" onclick="fn_select_fnctList('1');"><spring:message code="button.search"/></button>
</div>
<div class="right"></div>
</div>
<div id="pageDiv"></div>
</form>
</div>
<div class="modal-footer">
<a href="#" rel="modal:close" class="btn outline" onclick="fn_remove_fnctList();" ><spring:message code="button.close"/></a>
<button type="button" class="btn primary" onclick="fn_collect_params();"><spring:message code="button.apply"/></button>
</div>
</div>
<form id="backupForm" method="post" >
<input type="hidden" name="srchAuthorNm" value="${resultMap.srchList[0].srchAuthorNm}" />
<input type="hidden" name="srchSysDvCd" value="${resultMap.srchList[0].srchSysDvCd}" />
<input type="hidden" name="pageUnit" value="${resultMap.srchList[0].pageUnit }" />
<input type="hidden" name="pageIndex" value="${resultMap.srchList[0].pageIndex }" />
<input type="hidden" name="authorId" value="" />
<input type="hidden" name="pageDv" value="" />
</form>
</body>
<script>
/* ********************************************************
* 권한 그룹 목록 이동
******************************************************** */
const fn_goto_list = function() {
$('#backupForm').attr('action', '<c:url value="/admin/sys/authgrp/selectAuthGrpListInqireForm"/>');
$('#backupForm').submit();
}
/* ********************************************************
* 기능 목록조회
******************************************************** */
const fn_select_fnctList = function(pageIndex) {
let srchFnctNm = $('#fnct-modal').find('#srchFnctNm').val() === undefined ? '' : $('#srchFnctNm').val();
let srchFnctUri = $('#fnct-modal').find('#srchFnctUri').val() === undefined ? '' : $('#srchFnctUri').val();
let srchSysDvCd = $('#fnct-modal').find('#srchSysDv-select').val() === undefined ? '' : $('#srchSysDv-select').val();
let srchFnctDv = $('#fnct-modal').find('#srchFnct-select').val() === undefined ? '' : $('#srchFnct-select').val();
let params = {
'srchFnctNm' : srchFnctNm,
'srchFnctUri' : srchFnctUri,
'srchFnctDv' : srchFnctDv,
'srchSysDvCd' : srchSysDvCd,
'pageIndex' : pageIndex,
'pageUnit' : '5'
};
$.ajax({
type : 'POST',
url : '<c:url value="/admin/sys/authgrp/selectAuthGrpListInqirePopup"/>',
data : params,
success : function(data) {
$('#pageDiv').html(data);
// $('#srchFnct-select').niceSelect();
}
});
}
/**********************************************
* 기능 검색 초기화
***********************************************/
const fn_clear_input = function() {
$('[name=srchFnctNm]').val('');
$('[name=srchFnctUri]').val('');
$('#srchFnct-select').val('').niceSelect('update');
$('#srchSysDv-select').val('').niceSelect('update');
}
</script>
</html>

View File

@@ -0,0 +1,195 @@
<%@ 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 : maAuthGrpListInqireForm.jsp
Description : 권한그룹 목록 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-01-19 최범식 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@include file ="/WEB-INF/views/comm/admin/Include.jsp" %>
<script>
$(document).ready(function(){
let pageIndex = '<c:out value="${ resultMap.paramVO.pageIndex }"/>';
let pageUnit = '<c:out value="${ resultMap.paramVO.pageUnit }"/>';
let pageDv = '<c:out value="${ resultMap.paramVO.pageDv }"/>';
if (pageDv == '') {
fn_select_authGrp_list(pageIndex, pageUnit);
} else {
fn_select_authGrp_list('1', '10');
}
$('[name=srchAuthorNm]').on('keydown', function(event) {
if (event.keyCode === 13) {
event.preventDefault();
fn_select_authGrp_list(1);
}
});
});
/* ********************************************************
* 권한그룹 목록조회
******************************************************** */
const fn_select_authGrp_list = function(pageIndex, pageUnit) {
if (pageIndex == undefined || pageUnit == '') {
$('#pageIndex').val('1');
} else {
$('#pageIndex').val(pageIndex);
}
let params = $('#srchForm').serialize();
if (pageUnit != undefined || pageUnit == '') {
params += '&pageUnit=' + pageUnit;
} else {
params += '&pageUnit=' + $('#pageUnit').val();
}
$.ajax({
type : 'post',
url : '<c:url value="/admin/sys/authgrp/selectAuthGrpListInqire"/>',
data : params,
success : function(data) {
$('#pageDiv').html(data);
$('#pageUnit').niceSelect();
}
})
}
/**********************************************
* 권한그룹 검색 초기화
***********************************************/
const fn_clear_input = function() {
$('[name=srchAuthorNm]').val('');
$('#srchSys-select').val('').niceSelect('update');
}
/**********************************************
* 권한그룹 등록 화면 이동
***********************************************/
const fn_move_authGrpRegist = function() {
$('#srchForm').attr('action', '<c:url value="/admin/sys/authgrp/selectAuthGrpRegistForm"/>');
$('#srchForm').attr('method', 'post');
$('#srchForm').submit();
}
/**********************************************
* 권한그룹 수정 화면 이동
***********************************************/
const fn_move_authGrpDetail = function(_authorId) {
$('#authorId').val(_authorId);
$('#srchForm').attr('action', '<c:url value="/admin/sys/authgrp/selectAuthGrpUpdtForm"/>');
$('#srchForm').attr('method', 'post');
$('#srchForm').submit();
}
/**********************************************
* 권한그룹 엑셀 다운로드
***********************************************/
const fn_down_excelFile = function() {
$('#srchForm').attr('action', '<c:url value="/admin/sys/authgrp/excelFileDownload"/>');
$('#srchForm').attr('method', 'post');
$('#srchForm').submit();
}
</script>
</head>
<body>
<%@include file ="/WEB-INF/views/comm/admin/Header.jsp" %>
<main class="main">
<%@include file ="/WEB-INF/views/comm/admin/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" onclick="fn_move_authGrpRegist();">권한 <spring:message code="button.insert"/></button>
</div>
</div>
<form id="srchForm" >
<input type="hidden" id="authorId" name="authorId" />
<input type="hidden" id="pageIndex" name="pageIndex" />
<%-- 검색 섹션 START --%>
<section class="content-section" >
<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">
<input class="input-text xl" type="text" name="srchAuthorNm" title="권한그룹명" value="${resultMap.srchList[0].srchAuthorNm}"/>
</div>
</td>
<th>시스템 구분</th>
<td>
<div class="td-inner">
<div class="select-box" id="srchSysDvCd">
<select name="srchSysDvCd" id="srchSys-select" title="시스템 구분" >
<option value="" ${f:setSelected(resultMap.paramVO.srchSysDvCd, '')}>전체</option>
<c:forEach var="sysDvCd" items="${resultMap.sysDvList}" varStatus="status">
<option value="${sysDvCd.cd}" ${f:setSelected(resultMap.srchList[0].srchSysDvCd, sysDvCd.cd) }> ${sysDvCd.cdNm}</option>
</c:forEach>
</select>
</div>
</div>
</td>
</tr>
<tr>
</tr>
</tbody>
</table>
</div>
<div class="form-control-container">
<div class="left"></div>
<div class="center">
<button type="button" class="btn primary" onclick="fn_select_authGrp_list('1');"><spring:message code="button.search"/></button>
<button type="button" class="btn outline" onclick="fn_clear_input();"><spring:message code="button.init"/></button>
</div>
<div class="right"></div>
</div>
</section>
<%-- 검색 섹션 END --%>
<%-- 리스트 출력 섹션 START --%>
<div id="pageDiv"></div>
</form>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</div>
</main>
</body>
</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 : maAuthGrpListInqirePopupR.jsp
Description : 기능 조회 팝업
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
since : 2024-01-16 최범식 최초
--%>
<div class="form-control-container">
<div class="left">
<div class="search-number" id="divTotalCount">
<span class="search-number__text">총 <strong><c:out value="${resultMap.paginationInfo.totalRecordCount }"/></strong>건</span>
</div>
</div>
<div class="center">
</div>
<div class="right">
</div>
</div>
<div class="table-wrapper">
<table class="table vertical">
<caption>기능 정보</caption>
<colgroup>
<col style="width: 8%;">
<col style="width: 20%;">
<col style="width: 14%;">
<col style="width: auto;">
</colgroup>
<thead>
<tr>
<th>
<label class="b-checkbox checkbox is-medium check-all">
<input type="checkbox" name="fnctPopChk" id="check-all" value="" onchange="fn_check_selectAll(this);">
<span class="check"></span>
</label>
</th>
<th>기능 명</th>
<th>기능구분</th>
<th>URL</th>
</tr>
</thead>
<tbody>
<c:choose>
<c:when test="${not empty resultMap.fnctList}">
<c:forEach var="fnct" items="${ resultMap.fnctList }" varStatus="status" >
<tr>
<td>
<input type="hidden" name="fnctId" value="${fnct.fnctId }">
<input type="hidden" name="fnctNm" value="${fnct.fnctNm }">
<input type="hidden" name="fnctDvNm" value="${fnct.fnctDvNm }">
<input type="hidden" name="sysDvCd" value="${fnct.sysDvCd }">
<input type="hidden" name="fnctDvCd" value="${fnct.fnctDvCd }">
<input type="hidden" name="fnctUri" value="${fnct.fnctUri }">
<input type="hidden" name="fnctDc" value="${fnct.fnctDc }">
<label class="b-checkbox checkbox is-medium">
<input type="checkbox" name="fnctPopChk" value="f${status.index }" onclick="fn_uncheck_selectAll();">
<span class="check"></span>
</label>
</td>
<td><span class="fw-300">${fnct.fnctNm }</span></td>
<td><span class="fw-300">${fnct.fnctDvNm }</span></td>
<td class="left" style="word-break: break-all"><span class="fw-300">${fnct.fnctUri }</span></td>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
<tr>
<td colspan="4">조회된 데이터가 없습니다.</td>
</tr>
</c:otherwise>
</c:choose>
</tbody>
</table>
</div>
<div class="pagination__container" id="divPageInfo">
<ui:pagination paginationInfo="${resultMap.paginationInfo}" type="image" jsFunction="fn_select_fnctList" />
</div>

View File

@@ -0,0 +1,119 @@
<%@ 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 : maAuthGrpListInqireR.jsp
Description : 권한그룹 리스트
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-01-19 최범식 최초 생성
--%>
<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_authGrp_list('1')">
<c:forEach items="${ resultMap.paginationInfo.pageUnitArr }" var="pageUnit" varStatus="pageUnitStatus">
<option value="<c:out value="${ pageUnit }"/>" <c:if test="${ resultMap.paramVO.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>
<div class="center">
</div>
<div class="right">
<button type="button" class="btn outline sm" onclick="fn_down_excelFile();">
<i class="icon icon_excel"></i>
<spring:message code="button.excelDownload"/>
</button>
</div>
</div>
<hr class="spacing">
<div class="table-wrapper">
<table class="table vertical">
<caption>해당 테이블에 대한 설명</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 4%;">
<col style="width: auto;">
<col style="width: 18%;">
<col style="width: auto;">
<col style="width: 6%;">
<col style="width: 6%;">
<col style="width: 6%;">
<col style="width: 6%;">
<col style="width: 6%;">
<col style="width: 10%;">
<col style="width: 7%">
</colgroup>
<thead>
<tr>
<th>번호</th>
<th>시스템 구분</th>
<th>권한 명</th>
<th>권한 설명</th>
<th>조회</th>
<th>화면이동</th>
<th>등록</th>
<th>수정</th>
<th>삭제</th>
<th>등록일자</th>
<th>관리</th>
</tr>
</thead>
<%-- 리스트 BODY START --%>
<tbody>
<c:choose>
<c:when test="${ not empty resultMap.resultList }">
<c:forEach items="${resultMap.resultList }" var="authGrl" varStatus="status">
<tr>
<td><c:out value="${resultMap.paginationInfo.totalRecordCount - authGrl.rnum + 1 }" /></td>
<td><c:out value="${authGrl.sysDvNm }"/></td>
<td class="left"><c:out value="${authGrl.authorNm }"/></td>
<td class="left" style="word-break: break-all;"><c:out value="${authGrl.authorDc }"/></td>
<td><c:out value="${authGrl.r }"/></td>
<td><c:out value="${authGrl.f }"/></td>
<td><c:out value="${authGrl.i }"/></td>
<td><c:out value="${authGrl.u }"/></td>
<td><c:out value="${authGrl.d }"/></td>
<td><c:out value="${authGrl.registDt}"/></td>
<td>
<div class="manage-btn-container">
<button type="button" class="btn xsm primary outline" onclick="fn_move_authGrpDetail('${authGrl.authorId}');"><spring:message code="button.update"/></button>
</div>
</td>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
<tr>
<td class="row-no-data" colspan="10">조회된 데이터가 없습니다.</td>
</tr>
</c:otherwise>
</c:choose>
</table>
</div>
<%-- 리스트 BODY END --%>
</section>
<div class="pagination__container">
<ui:pagination paginationInfo="${ resultMap.paginationInfo }" type="image" jsFunction="fn_select_authGrp_list" />
</div>

View File

@@ -0,0 +1,541 @@
<%@ 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"%>
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld"%>
<%--
Class Name : maAuthGrpU.jsp
Description : 권한 등급 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
since : 2023.12.19 최범식 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@include file ="/WEB-INF/views/comm/admin/Include.jsp" %>
<script>
$(document).ready(function() {
$('[name=srchFnctNm], [name=srchFnctUri]').keydown(function(event) {
if (event.keyCode === 13) {
event.preventDefault();
fn_select_fnctList('1');
}
});
let fnctStr = '${resultMap.mbrGradList[0].detailList[0].fnctIdsArr}';
if (fnctStr !== null && fnctStr !== '') {
inFnctArr = fnctStr.split('$');
}
});
/* ********************************************************
* 기능 팝업 전체 선택
******************************************************** */
const fn_check_selectAll = function(_target) {
if ($(_target).is(':checked')) {
$('[name=fnctPopChk]').prop('checked', true);
} else {
$('[name=fnctPopChk]').prop('checked', false);
}
}
/* ********************************************************
* 기능 팝업 전체 해제
******************************************************** */
const fn_uncheck_selectAll = function() {
let chkCnt = $('[name=fnctPopChk]:checked').length;
let allCnt = $('[name=fnctPopChk]').length;
if (chkCnt !== allCnt && $('#check-all').is(':checked')) {
$('#check-all').prop('checked', false);
} else if (chkCnt !== allCnt && !$('#check-all').is(':checked') && allCnt - chkCnt === 1 ) {
$('#check-all').prop('checked', true);
} else if (chkCnt === allCnt ) {
$('#check-all').prop('checked', true);
}
}
/* ********************************************************
* 모달 닫기 리스트 삭제
******************************************************** */
const fn_remove_fnctList = function() {
$('#pageDiv').html('');
fn_clear_input();
}
/* ********************************************************
* 모달화면 -> 본화면으로 데이터 전송 > 데이타 정리
******************************************************** */
let inFnctArr = [];
const fn_collect_params = function() {
$('[name=fnctPopChk]:checked').each(function() {
if ($(this).val() === '') return;
let fnctId = $(this).closest('td').find('[name=fnctId]').val();
let fnctNm = $(this).closest('td').find('[name=fnctNm]').val();
let fnctDvNm = $(this).closest('td').find('[name=fnctDvNm]').val();
let fnctDvCd = $(this).closest('td').find('[name=fnctDvCd]').val();
let fnctUri = $(this).closest('td').find('[name=fnctUri]').val();
let fnctData = {
'fnctId' : fnctId,
'fnctNm' : fnctNm,
'fnctDvNm' : fnctDvNm,
'fnctDvCd' : fnctDvCd,
'fnctUri' : fnctUri
};
if (inFnctArr.includes(fnctId)) {
alert('[' + fnctNm + '] 이미 선택된 기능입니다.');
$('[name=fnctPopChk]').prop('checked', false);
return;
} else {
inFnctArr.push(fnctId);
fn_add_input(fnctData);
$('[name=fnctPopChk]').prop('checked', false);
}
});
}
/* ********************************************************
* 기능 추가 버튼 기능
******************************************************** */
const fn_add_input = function(_data) {
const fnctInfore = '<tr>'
+ ' <td>'
+ ' <input type="hidden" name="fnctIds" value="' + _data.fnctId + '">'
+ ' <input type="hidden" name="fnctNm" value="' + _data.fnctNm + '">'
+ ' <input type="hidden" name="fnctDvNm" value="' + _data.fnctDvNm + '">'
+ ' <input type="hidden" name="fnctDvCd" value="' + _data.fnctDvCd +'">'
+ ' <input type="hidden" name="fnctUri" value="' + _data.fnctUri +'">'
+ ' <label class="b-checkbox checkbox is-medium">'
+ ' <input type="checkbox" name="fnctChk" value="' + _data.fnctId + '">'
+ ' <span class="check"></span>'
+ ' </label>'
+ ' </td>'
+ ' <td class="text-left">' + _data.fnctNm + '</td>'
+ ' <td>' + _data.fnctDvNm + '</td>'
+ ' <td class="text-left">' + _data.fnctUri +'</td>'
+ ' </tr>'
$('#fnctList').append(fnctInfore);
$('#noData').hide();
let cnt = $('#fnctList').children().length - 1;
$('#total').text(cnt);
}
/* ********************************************************
* 기능 삭제 버튼 기능
******************************************************** */
const fn_remove_Input = function() {
const target = $('[name=fnctChk]:checked');
if (target.length === 0) {
alert('항목을 선택해 주세요.');
return;
} else {
target.each(function(tg) {
if (inFnctArr.length > 0) {
let fnctId = $(this).val();
inFnctArr = inFnctArr.filter((fci) => fci !== fnctId);
}
$(this).parents('tr').remove();
});
}
let cnt = $('#fnctList').children().length;
if (cnt === 1) $('#noData').show();
$('#total').text(cnt - 1);
$('#btn_fnctAll').prop('checked', false);
}
/* ********************************************************
* 권한그룹 수정
******************************************************** */
const fn_update_authGrp = function() {
if(!confirm('권한그룹을 <spring:message code="confirm.common.update"/>')) return;
let fnctIdArr = [];
$('[name=fnctChk]').each(function() {
fnctIdArr.push($(this).val());
});
let fnctIds = fnctIdArr.join(',');
if(fnctIds === ''){
alert('기능은 최소 하나 이상 등록해야합니다.');
return;
}
let params = $('#updForm').serialize() + '&fnctIds=' + fnctIds;
$.ajax({
type: 'post',
url : '<c:url value="/admin/sys/authgrp/updateAuthGrpUpdt"/>',
data: params,
success: function (result) {
let authorId = JSON.parse(result.resBody.result).authorId;
$('#backupForm').find('[name=authorId]').val(authorId);
$('#backupForm').find('[name=pageDv]').val('U');
if(authorId !== '' && authorId !== undefined ){
alert('<spring:message code="success.common.update"/>');
$('#backupForm').attr('action', '<c:url value="/admin/sys/authgrp/selectAuthGrpUpdtForm"/>');
$('#backupForm').submit();
} else {
alert('<spring:message code="fail.common.update"/>');
}
}
});
}
/* ********************************************************
* 권한그룹 등록 화면 이동
******************************************************** */
const fn_change_authGrp = function() {
$('#updForm').attr('action', '<c:url value="/admin/sys/authgrp/selectAuthGrpRegistForm"/>');
$('#updForm').attr('method', 'post');
$('#updForm').submit();
}
/* ********************************************************
* 권한그룹 삭제
******************************************************** */
const fn_delete_authGrpDel = function(_value) {
if(!confirm('권한그룹을 <spring:message code="confirm.common.delete"/>')) return;
let params = {'authorId' : _value};
$.ajax({
type: 'post',
url : '<c:url value="/admin/sys/authgrp/deleteAuthGrpDel"/>',
data: params,
success: function (result) {
let message = JSON.parse(result.resBody.result).result;
if (message !== 'success') {
alert('<spring:message code="fail.common.delete"/>');
return;
}
alert('<spring:message code="success.common.delete"/>');
fn_goto_list();
}
});
}
</script>
</head>
<body>
<%@include file ="/WEB-INF/views/comm/admin/Header.jsp" %>
<main class="main">
<%@include file ="/WEB-INF/views/comm/admin/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" id="regTitle">권한 수정</h2>
<div class="page-title__btn-container">
<button type="button" class="btn outline" onclick="fn_goto_list()"><spring:message code="button.catalog"/></button>
<button type="button" class="btn dark regBtn" onclick="fn_delete_authGrpDel('${resultMap.mbrGradList[0].detailList[0].authorId }');"><spring:message code="button.delete"/></button>
<button type="button" class="btn primary outline regBtn" onclick="fn_change_authGrp();"><spring:message code="button.copyInsert"/></button>
<button type="button" class="btn primary regBtn" onclick="fn_update_authGrp();"><spring:message code="button.update"/></button>
<button type="button" class="btn primary uptBtn" onclick="fn_regist_authGrp();" style="display: none;"><spring:message code="button.save"/></button>
</div>
</div>
<section class="content-section">
<form id="updForm">
<input type="hidden" name="srchAuthorNm" value="${resultMap.srchList[0].srchAuthorNm}" />
<input type="hidden" name="srchSysDvCd" value="${resultMap.srchList[0].srchSysDvCd}" />
<input type="hidden" name="pageUnit" value="${resultMap.srchList[0].pageUnit }" />
<input type="hidden" name="pageIndex" value="${resultMap.srchList[0].pageIndex }" />
<input type="hidden" name="authorId" value="${resultMap.mbrGradList[0].detailList[0].authorId }" />
<input type="hidden" name="pageDv" value="U" />
<div class="table-wrapper">
<table class="table">
<caption>권한그룹</caption>
<colgroup>
<col style="width: 12%;">
<col style="width: 38%;">
<col>
</colgroup>
<tbody>
<tr>
<th>권한그룹 명<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<input type="text" class="input-text xl" name="authorNm" title="권한그룹 명" maxlength="43" value="${resultMap.mbrGradList[0].detailList[0].authorNm}">
</div>
</td>
<th>시스템 구분<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<div class="select-box" id="sysDvCd">
<select name="sysDvCd" id="sys-select" title="시스템 구분" >
<option value="" ${f:setSelected(resultMap.mbrGradList[0].detailList[0].sysDvCd, '')}>전체</option>
<c:forEach var="sysDvCd" items="${resultMap.sysDvList}" varStatus="status">
<option value="${sysDvCd.cd}" ${f:setSelected(resultMap.mbrGradList[0].detailList[0].sysDvCd, sysDvCd.cd) }> ${sysDvCd.cdNm}</option>
</c:forEach>
</select>
</div>
</div>
</td>
</tr>
<tr>
<th>권한그룹 설명<span class="red-7">*</span></th>
<td colspan="3">
<div class="td-inner">
<textarea class="textarea" name="authorDc" title="권한그룹 설명" rows="8" maxlength="199" ><c:out value="${resultMap.mbrGradList[0].detailList[0].authorDc }" /></textarea>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</form>
</section>
<section class="content-section">
<h3 class="content-section__title">기능 정보</h3>
<div class="form-control-container">
<div class="left">
<div class="search-number">
<span class="search-number__text">총 <strong id="total"><c:out value="${resultMap.mbrGradList[0].total }"/></strong>건</span>
</div>
</div>
<div class="center">
</div>
<div class="right">
<button type="button" class="btn dark sm" onclick="fn_remove_Input(this);">
<spring:message code="button.delete"/>
</button>
<a href="#fnct-modal" rel="modal:open" class="btn primary outline sm" id="fnctPopOpen" onclick="fn_select_fnctList('1');" >
<spring:message code="button.add"/>
</a>
</div>
</div>
<hr class="spacing">
<div class="table-wrapper">
<table class="table vertical">
<caption>해당 테이블에 대한 설명</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 4%;">
<col style="width: 24%;">
<col style="width: 12%;">
<col style="width: auto;">
</colgroup>
<thead>
<tr>
<th>
<label class="b-checkbox checkbox is-medium check-all">
<input type="checkbox" value="" id="btn_fnctAll">
<span class="check"></span>
</label>
</th>
<th>기능 명</th>
<th>기능 구분</th>
<th>URL</th>
</tr>
</thead>
<tbody id="fnctList">
<c:if test="${not empty resultMap.mbrGradList[0].fnctList }" >
<c:forEach var="fnct" items="${resultMap.mbrGradList[0].fnctList }" varStatus="status">
<tr>
<td>
<input type="hidden" name="fnctIds[]" value="${fnct.fnctId}">
<label class="b-checkbox checkbox is-medium">
<input type="checkbox" name="fnctChk" value="${fnct.fnctId}" >
<span class="check"></span>
</label>
</td>
<td class="text-left">${fnct.fnctNm }</td>
<td>${fnct.fnctDvNm }</td>
<td class="text-left">${fnct.fnctUri }</td>
</tr>
</c:forEach>
<tr id="noData" style="display: none;">
<td colspan="5">해당 권한그룹에 포함되는 기능정보를 선택하세요.</td>
</tr>
</c:if>
<c:if test="${empty resultMap.mbrGradList[0].fnctList }" >
<tr id="noData">
<td colspan="5">해당 권한그룹에 포함되는 기능정보를 선택하세요.</td>
</tr>
</c:if>
</tbody>
</table>
</div>
</section>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</div>
</main>
<!-- 기능 조회 모달 -->
<div id="fnct-modal" class="modal" style="max-width: 900px; max-height: 800px;">
<div class="modal-header">
<h4>기능 조회</h4>
</div>
<div class="modal-content">
<form id="fnctForm">
<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" >
<input type="text" class="input-text xl" name="srchFnctNm" id="srchFnctNm" />
</div>
</td>
<th>기능 구분</th>
<td>
<div class="td-inner">
<div class="select-box">
<select name="srchFnctDv" id="srchFnct-select" title="기능 구분" >
<option value="">전체</option>
<c:forEach var="fnctDvCd" items="${resultMap.fnctDvList}" varStatus="status">
<option value="${fnctDvCd.cd}"> ${fnctDvCd.cdNm}</option>
</c:forEach>
</select>
</div>
</div>
</td>
</tr>
<tr>
<th>URL</th>
<td>
<div class="td-inner" >
<input type="text" class="input-text xl" name="srchFnctUri" id="srchFnctUri"/>
</div>
</td>
<th>시스템 구분</th>
<td>
<div class="td-inner">
<div class="select-box">
<select name="srchSysDv" id="srchSysDv-select" title="시스템 구분" >
<option value="" checked>전체</option>
<c:forEach var="sysDvCd" items="${resultMap.sysDvList}" varStatus="status">
<option value="${sysDvCd.cd}"> ${sysDvCd.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 type="button" class="btn outline" id="resetBtn" onclick="fn_clear_input();"><spring:message code="button.init"/></button>
<button type="button" class="btn primary" id="searchBtn" onclick="fn_select_fnctList('1');"><spring:message code="button.search"/></button>
</div>
<div class="right"></div>
</div>
<div id="pageDiv"></div>
</form>
</div>
<div class="modal-footer">
<a href="#" rel="modal:close" class="btn outline" onclick="fn_remove_fnctList();" ><spring:message code="button.close"/></a>
<button type="button" class="btn primary" onclick="fn_collect_params();"><spring:message code="button.apply"/></button>
</div>
</div>
<form id="backupForm" method="post" >
<input type="hidden" name="srchAuthorNm" value="${resultMap.srchList[0].srchAuthorNm}" />
<input type="hidden" name="srchSysDvCd" value="${resultMap.srchList[0].srchSysDvCd}" />
<input type="hidden" name="pageUnit" value="${resultMap.srchList[0].pageUnit }" />
<input type="hidden" name="pageIndex" value="${resultMap.srchList[0].pageIndex }" />
<input type="hidden" name="authorId" value="" />
<input type="hidden" name="pageDv" value="" />
</form>
</body>
<script>
/* ********************************************************
* 권한 그룹 목록 이동
******************************************************** */
const fn_goto_list = function() {
$('#backupForm').attr('action', '<c:url value="/admin/sys/authgrp/selectAuthGrpListInqireForm"/>');
$('#backupForm').submit();
}
/* ********************************************************
* 기능 목록조회
******************************************************** */
const fn_select_fnctList = function(pageIndex) {
let srchFnctNm = $('#fnct-modal').find('#srchFnctNm').val() === undefined ? '' : $('#srchFnctNm').val();
let srchFnctUri = $('#fnct-modal').find('#srchFnctUri').val() === undefined ? '' : $('#srchFnctUri').val();
let srchSysDvCd = $('#fnct-modal').find('#srchSysDv-select').val() === undefined ? '' : $('#srchSysDv-select').val();
let srchFnctDv = $('#fnct-modal').find('#srchFnct-select').val() === undefined ? '' : $('#srchFnct-select').val();
let params = {
'srchFnctNm' : srchFnctNm,
'srchFnctUri' : srchFnctUri,
'srchFnctDv' : srchFnctDv,
'srchSysDvCd' : srchSysDvCd,
'pageIndex' : pageIndex,
'pageUnit' : '5'
};
$.ajax({
type : 'POST',
url : '<c:url value="/admin/sys/authgrp/selectAuthGrpListInqirePopup"/>',
data : params,
success : function(data) {
$('#pageDiv').html(data);
// $('#srchFnct-select').niceSelect();
}
});
}
/**********************************************
* 기능 검색 초기화
***********************************************/
const fn_clear_input = function() {
$('[name=srchFnctNm]').val('');
$('[name=srchFnctUri]').val('');
$('#srchFnct-select').val('').niceSelect('update');
$('#srchSysDv-select').val('').niceSelect('update');
}
</script>
</html>

View File

@@ -0,0 +1,188 @@
<%@ 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 : maAuthorListInqireForm.jsp
Description : 권한 조회 목록 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-01-19 최범식 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@include file ="/WEB-INF/views/comm/admin/Include.jsp" %>
<script>
$(document).ready(function(){
fn_add_codeList('#mngrDv', 'select', 'srchMngrDv', '${resultMap.paramVO.srchMngrDv}', JSON.parse('${resultMap.cgn036 }'), '전체');
let pageIndex = '<c:out value="${ resultMap.paramVO.pageIndex }"/>';
let pageUnit = '<c:out value="${ resultMap.paramVO.pageUnit }"/>';
let pageDv = '<c:out value="${ resultMap.paramVO.pageDv }"/>';
if (pageDv == '') {
fn_select_author_list(pageIndex, pageUnit);
} else {
fn_select_author_list('1', '10');
}
$('#srchStr').on('keydown', function(event) {
if (event.keyCode === 13) {
event.preventDefault();
fn_select_author_list(1);
}
});
});
/* ********************************************************
* 권한 목록조회
******************************************************** */
const fn_select_author_list = function(pageIndex, pageUnit) {
if (pageIndex == undefined || pageUnit == '') {
$('#pageIndex').val('1');
} else {
$('#pageIndex').val(pageIndex);
}
let params = $('#srchForm').serialize();
if (pageUnit != undefined || pageUnit == '') {
params += '&pageUnit=' + pageUnit;
} else {
params += '&pageUnit=' + $('#pageUnit').val();
}
$.ajax({
type : 'post',
url : '<c:url value="/admin/sys/author/selectAuthorListInqire"/>',
data : params,
success : function(data) {
$('#pageDiv').html(data);
$('#pageUnit').niceSelect();
}
});
}
/**********************************************
* 권한 검색 초기화
***********************************************/
const fn_clear_input = function() {
$('#srchStr').val('');
// 선택박스 초기화
$('#srchType').val('ALL');
$('#srchType').niceSelect('update');
$('#authorEx').val('');
$('#authorEx').niceSelect('update');
$('#srchMngrDv').val('');
$('#srchMngrDv').niceSelect('update');
};
/**********************************************
* 권한 수정 화면 이동
***********************************************/
const fn_move_authorDetail = function(_mngrInnb) {
$('#mngrInnb').val(_mngrInnb);
$('#srchForm').attr('action', '<c:url value="/admin/sys/author/selectAuthorUpdtForm"/>');
$('#srchForm').attr('method', 'post');
$('#srchForm').submit();
};
/**********************************************
* 권한 엑셀 다운로드
***********************************************/
const fn_down_excelFile = function() {
$('#srchForm').attr('action', '<c:url value="/admin/sys/author/excelFileDownload"/>');
$('#srchForm').attr('method', 'post');
$('#srchForm').submit();
};
</script>
</head>
<body>
<%@include file ="/WEB-INF/views/comm/admin/Header.jsp" %>
<main class="main">
<%@include file ="/WEB-INF/views/comm/admin/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="srchForm">
<input type="hidden" name="mngrInnb" id="mngrInnb" />
<input type="hidden" id="pageIndex" name="pageIndex" value="${resultMap.paramVO.pageIndex}" />
<section class="content-section">
<div class="table-wrapper">
<table class="table">
<caption>사용자별 권한 목록</caption>
<colgroup>
<col style="width: 12%;">
<col style="width: auto;">
<col style="width: 12%;">
<col style="width: 25%;">
</colgroup>
<tbody>
<tr>
<th>검색어</th>
<td>
<div class="td-inner">
<div class="select-box">
<select class="serchSelectBox" name="srchType" id="srchType" title="검색타입">
<option value="ALL" ${f:setSelected(resultMap.paramVO.srchType, 'ALL') }>전체</option>
<option value="MNGR_NM" ${f:setSelected(resultMap.paramVO.srchType, 'MNGR_NM') }>사용자명</option>
<option value="PARTNM" ${f:setSelected(resultMap.paramVO.srchType, 'PARTNM') }>부서명</option>
<option value="MNGR_ID" ${f:setSelected(resultMap.paramVO.srchType, 'MNGR_ID') }>사용자ID</option>
<option value="EMAIL" ${f:setSelected(resultMap.paramVO.srchType, 'EMAIL') }>이메일</option>
<option value="MBTLNB" ${f:setSelected(resultMap.paramVO.srchType, 'MBTLNB') }>휴대전화번호</option>
</select>
</div>
<input class="input-text lg" type="text" title="검색어" name="srchStr" id="srchStr" value="${resultMap.paramVO.srchStr}"/>
</div>
</td>
<th>사용자 구분</th>
<td>
<div class="td-inner">
<div class="select-box" id="mngrDv"></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" onclick="fn_clear_input();"><spring:message code="button.init"/></button>
<button type="button" class="btn primary" onclick="fn_select_author_list('1');"><spring:message code="button.search"/></button>
</div>
<div class="right"></div>
</div>
</section>
<div id="pageDiv"></div>
</form>
<button type="button" class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</div>
</main>
</body>
</html>

View File

@@ -0,0 +1,113 @@
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="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 : maAuthGrpListInqireR.jsp
Description : 권한그룹 리스트
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-01-19 최범식 최초 생성
--%>
<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_author_list('1')">
<c:forEach items="${ resultMap.paginationInfo.pageUnitArr }" var="pageUnit" varStatus="pageUnitStatus">
<option value="<c:out value="${ pageUnit }"/>" <c:if test="${ resultMap.paramVO.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>
<div class="center">
</div>
<div class="right">
<button type="button" class="btn outline sm" onclick="fn_down_excelFile();">
<i class="icon icon_excel"></i>
<spring:message code="button.excelDownload"/>
</button>
</div>
</div>
<hr class="spacing">
<div class="table-wrapper">
<table class="table vertical">
<caption>해당 테이블에 대한 설명</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 4%;">
<col style="width: 8%;">
<col style="width: 8%;">
<col style="width: 8%;">
<col style="width: 8%;">
<col style="width: auto;">
<col style="width: 12%;">
<col style="width: 8%;">
<col style="width: 7%">
</colgroup>
<thead>
<tr>
<th>번호</th>
<th>사용자 명</th>
<th>사용자 구분</th>
<th>부서명</th>
<th>사용자 ID</th>
<th>권한그룹</th>
<th>최종 수정일시</th>
<th>최종 수정자</th>
<th>관리</th>
</tr>
</thead>
<%-- 리스트 BODY START --%>
<tbody>
<c:choose>
<c:when test="${ not empty resultMap.authorList }">
<c:forEach var="author" items="${resultMap.authorList }" varStatus="status">
<tr>
<td><c:out value="${resultMap.paginationInfo.totalRecordCount - author.rnum + 1 }" /></td>
<td><c:out value="${author.mngrNm }"/></td>
<td><c:out value="${author.mngrDvNm }"/></td>
<td><c:out value="${author.partnm }"/></td>
<td><c:out value="${author.mngrId }"/></td>
<td class="text-left" style="word-break: break-all;"><c:out value="${author.authGrpMainTitle }"/></td>
<td><c:out value="${author.maRegistDt}"/></td>
<td><c:out value="${author.updMngrNm }"/></td>
<td>
<div class="manage-btn-container">
<button type="button" class="btn xsm primary outline" onclick="fn_move_authorDetail('${author.mngrInnb }');"><spring:message code="button.update"/></button>
</div>
</td>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
<tr>
<td class="row-no-data" colspan="10">조회된 데이터가 없습니다.</td>
</tr>
</c:otherwise>
</c:choose>
</table>
</div>
<%-- 리스트 BODY END --%>
</section>
<div class="pagination__container">
<ui:pagination paginationInfo="${ resultMap.paginationInfo }" type="image" jsFunction="fn_select_author_list" />
</div>

View File

@@ -0,0 +1,339 @@
<%@ 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"%>
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld"%>
<%--
Class Name : maAuthGrpU.jsp
Description : 권한 등급 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
since : 2023.12.19 최범식 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@include file ="/WEB-INF/views/comm/admin/Include.jsp" %>
<script>
$(document).ready(function() {
});
/* ********************************************************
* 기능 팝업 전체 선택
******************************************************** */
const fn_check_selectAll = function(_target) {
if ($(_target).is(':checked')) {
$('[name=fnctPopChk]').prop('checked', true);
} else {
$('[name=fnctPopChk]').prop('checked', false);
}
}
/* ********************************************************
* 기능 팝업 전체 해제
******************************************************** */
const fn_uncheck_selectAll = function() {
let chkCnt = $('[name=fnctPopChk]:checked').length;
let allCnt = $('[name=fnctPopChk]').length;
if (chkCnt !== allCnt && $('#check-all').is(':checked')) {
$('#check-all').prop('checked', false);
} else if (chkCnt !== allCnt && !$('#check-all').is(':checked') && allCnt - chkCnt === 1 ) {
$('#check-all').prop('checked', true);
} else if (chkCnt === allCnt ) {
$('#check-all').prop('checked', true);
}
}
/* ********************************************************
* 권한 수정
******************************************************** */
const fn_save_author = function() {
if(!confirm('권한을 <spring:message code="confirm.common.update"/>')) return;
//수정대상 추출
let params = $('#updtFrm').serialize();
$.ajax({
type: 'post',
url : '<c:url value="/admin/sys/author/updateAuthorUpdt"/>',
data: params,
success: function (result) {
let resultVal = JSON.parse(result.resBody.result).result;
if(resultVal === 'success'){
alert('<spring:message code="success.common.update"/>');
$('#backupForm').attr('action', '<c:url value="/admin/sys/author/selectAuthorUpdtForm"/>');
$('#backupForm').submit();
} else {
alert('<spring:message code="fail.common.update"/>');
}
}
});
}
/* ********************************************************
* 권한 포함된 기능 조회
******************************************************** */
const fn_select_fnctList = function(_authorId, _target) {
let param = { 'authorId' : _authorId };
$.ajax({
type: 'post',
url : '<c:url value="/admin/sys/author/selectAuthGrpFuntPopup"/>',
data: param,
success: function (result) {
authorInfo = JSON.parse(result.resBody.result).authorInfo;
fnctList = JSON.parse(result.resBody.result).fnctList;
$('#authorNm').text(authorInfo.authorNm);
$('#sysDvNm').text(authorInfo.sysDvNm);
$('#authorDc').text(authorInfo.authorDc);
fn_make_fnctList(fnctList);
}
});
}
/* ********************************************************
* 기능조회 팝업 기능목록 그리기
******************************************************** */
const fn_make_fnctList = function(_data) {
let authorGroupNm = '';
let authorGroupDc = '';
let tagClone = '';
if(_data.length > 0) {
tagClone = '<tr>';
for (let i = 0; i < _data.length; i++) {
authorGroupNm = _data[0].authorGroupNm;
authorGroupDc = _data[0].authorGroupDc;
tagClone += '<tr>'
+ ' <td>' + (i + 1) + '</td>'
+ ' <td class="text-left" style="word-break: break-all;">' + _data[i].fnctNm + '</td>'
+ ' <td style="word-break: break-all;">' + _data[i].fnctDvNm + '</td>'
+ ' <td class="text-left" style="word-break: break-all;">' + _data[i].fnctUri + '</td>'
+ ' </tr>';
}
}else{
tagClone = '<tr><td colspan="4">조회된 데이터가 없습니다.</td></tr>';
}
$('#fnctPopup').html(tagClone);
}
/* ********************************************************
* 권한 목록 이동
******************************************************** */
const fn_goto_list = function() {
$('#backupForm').attr('action', '<c:url value="/admin/sys/author/selectAuthorListInqireForm"/>');
$('#backupForm').submit();
}
</script>
</head>
<body>
<%@include file ="/WEB-INF/views/comm/admin/Header.jsp" %>
<main class="main">
<%@include file ="/WEB-INF/views/comm/admin/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_goto_list()"><spring:message code="button.catalog"/></button>
<button type="button" class="btn primary" onclick="fn_save_author();"><spring:message code="button.save"/></button>
</div>
</div>
<section class="content-section">
<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">${resultMap.managerAuth.mngrNm }</div></td>
<th>아이디</th>
<td><div class="td-inner">${resultMap.managerAuth.mngrId }</div></td>
</tr>
<tr>
<th>부서명</th>
<td><div class="td-inner">${resultMap.managerAuth.partnm }</div></td>
<th>사용자 구분</th>
<td><div class="td-inner"> ${resultMap.managerAuth.mngrDvNm }</div></td>
</tr>
</tbody>
</table>
</div>
</section>
<section class="content-section">
<h3 class="content-section__title">기능 권한</h3>
<form id="updtFrm">
<input type="hidden" name="mngrInnb" value="${resultMap.managerAuth.mngrInnb}"/>
<div class="table-wrapper">
<table class=" table vertical">
<caption>사용자 권한 정보</caption>
<colgroup>
<col style="width: 15%;">
<col style="width: 20%;">
<col style="width: auto;">
<col style="width: 8%;">
</colgroup>
<thead>
<tr>
<th>권한 명</th>
<th>권한 설명</th>
<th>쇼핑몰 권한</th>
<th>기능 조회</th>
</tr>
</thead>
<tbody>
<c:if test="${not empty resultMap.authorList }" >
<c:forEach var="authorInfo" items="${resultMap.authorList }" varStatus="status">
<tr>
<td>
<c:out value="${authorInfo.authorNm }"/>
</td>
<td class="text-left" style="word-break: break-all;">
<c:out value="${authorInfo.authorDc }"/>
</td>
<td class="text-left" style="word-break: break-all;">
<c:if test="${not empty authorInfo.sopmalList}" >
<div class="td-inner">
<div class="b-checkbox-container shoping-mall">
<c:forEach var="sopmalInfo" items="${authorInfo.sopmalList}" varStatus="sopStatus">
<label class="b-checkbox checkbox">
<input type="checkbox" name="arrAuthSpomal" value="${authorInfo.authorId}_${sopmalInfo.sopmalCd}" ${f:setChecked(sopmalInfo.chk, 1)} >
<span class="check"></span>
<span class="control-label"><c:out value="${sopmalInfo.sopmalNm }"/></span>
</label>
</c:forEach>
</div>
</div>
</c:if>
</td>
<td>
<div class="manage-btn-container">
<a href="#auto-group-pop" rel="modal:open" class="btn xsm primary outline" onclick="fn_select_fnctList('${authorInfo.authorId }', this)"><spring:message code="button.view"/></a>
</div>
</td>
</tr>
</c:forEach>
</c:if>
<c:if test="${empty resultMap.authorList }" >
<tr>
<td colspan="4"><spring:message code="common.nodata"/></td>
</tr>
</c:if>
</tbody>
</table>
</div>
</form>
</section>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</div>
</main>
<!-- 권한그룹 조회 -->
<div id="auto-group-pop" class="modal" style="max-width: 1000px;">
<div class="modal-header">
<h4>권한 조회</h4>
</div>
<div class="modal-content">
<h3 class="content-section__title">권한 정보</h3>
<div class="table-wrapper">
<table class="table">
<caption>authorGroupDc</caption>
<colgroup>
<col style="width: 15%;">
<col>
<col style="width: 15%;">
<col>
</colgroup>
<tbody>
<tr>
<th>권한 명</th>
<td>
<div class="td-inner" id="authorNm" style="word-break: break-all;"></div>
</td>
<th>시스템 구분</th>
<td>
<div class="td-inner" id="sysDvNm" style="word-break: break-all;"></div>
</td>
</tr>
<tr>
<th>권한 설명</th>
<td colspan="3">
<div class="td-inner" id="authorDc" style="word-break: break-all;"></div>
</td>
</tr>
</tbody>
</table>
</div>
<h3 class="content-section__title">기능 정보</h3>
<div class="table-wrapper" style="max-height: 280px; overflow-y: auto;">
<table class="table vertical">
<caption>기능 정보</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 8%;">
<col style="width: 12%;">
<col style="width: auto;">
</colgroup>
<thead>
<tr>
<th>순번</th>
<th>기능명</th>
<th>기능 구분</th>
<th>URL</th>
</tr>
</thead>
<tbody id="fnctPopup">
</tbody>
</table>
</div>
</div>
<div class="modal-footer">
<a href="#" rel="modal:close" class="btn outline"><spring:message code="button.close"/></a>
<!-- <button class="btn primary">확인</button> -->
</div>
</div>
<form id="backupForm" method="post" >
<input type="hidden" name="srchType" value="${resultMap.srchInfo.srchType }" />
<input type="hidden" name="srchStr" value="${resultMap.srchInfo.srchStr }" />
<input type="hidden" name="srchMngrDv" value="${resultMap.srchInfo.srchMngrDv }" />
<input type="hidden" name="pageUnit" value="${resultMap.srchInfo.pageUnit }" />
<input type="hidden" name="pageIndex" value="${resultMap.srchInfo.pageIndex }" />
<input type="hidden" name="mngrInnb" value="${resultMap.managerAuth.mngrInnb}" />
<input type="hidden" name="pageDv" value="" />
</form>
</body>
</html>

View File

@@ -0,0 +1,110 @@
<%@ 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 : MaCmmnCodeListInqireR.jsp
Description : 공통코드 목록조회 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-01-11 리브가 최초 생성
--%>
<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_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>
<div class="center">
</div>
<div class="right">
<button type="button" class="btn outline sm" onclick="fn_excel_download();">
<i class="icon icon_excel"></i>
다운로드
</button>
</div>
</div>
<hr class="spacing">
<div class="table-wrapper">
<table class="table vertical">
<caption>공통코드 목록</caption>
<colgroup>
<col style="width: 6%;">
<col style="width: auto;">
<col style="width: 16%;">
<col style="width: 16%;">
<col style="width: 16%;">
<col style="width: 8%;">
<col style="width: 12%;">
<col style="width: 8%">
</colgroup>
<thead>
<tr>
<th>번호</th>
<th>코드그룹 명</th>
<th>코드그룹 ID</th>
<th>코드명</th>
<th>코드</th>
<th>사용여부</th>
<th>등록일자</th>
<th>관리</th>
</tr>
</thead>
<tbody>
<c:choose>
<c:when test="${ not empty resultMap.list }">
<c:forEach items="${ resultMap.list }" var="list" varStatus="status">
<tr>
<td><c:out value="${ resultMap.paginationInfo.totalRecordCount - list.rnum + 1 }" /></td>
<td class="left"><c:out value="${list.groupCdNm}"/></td>
<td class="left"><c:out value="${list.groupCd}"/></td>
<td class="left"><c:out value="${list.cdNm}"/></td>
<td><c:out value="${list.cd}"/></td>
<td><c:if test="${ list.useAt eq 'Y'}">사용</c:if>
<c:if test="${ list.useAt eq 'N'}">미사용</c:if></td>
<td><c:out value="${list.registDe}"/></td>
<td>
<div class="manage-btn-container">
<button class="btn xsm primary outline" type="button"
onclick="fn_move_dtl_uptpage('<c:out value="${list.groupCd}"/>')">
<spring:message code="button.update"/></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>
</section>
<div class="pagination__container">
<ui:pagination paginationInfo="${resultMap.paginationInfo}" type="image" jsFunction="fn_select_list"/>
</div>

View File

@@ -0,0 +1,182 @@
<%@ 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 : MaCmmnCodeListInqireRForm.jsp
Description : 공통코드 목록조회 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-01-08 리브가 최초생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@include file ="/WEB-INF/views/comm/admin/Include.jsp" %>
</head>
<script>
$(document).ready(function () {
let pageIndex = '<c:out value="${ resultMap.BOMaComncdVO.pageIndex }"/>';
let pageUnit = '<c:out value="${ resultMap.BOMaComncdVO.pageUnit }"/>';
fn_select_list(pageIndex, pageUnit);
$('#listForm').on('keydown', function(event) {
if (event.keyCode === 13) {
event.preventDefault();
fn_select_list(1);
}
});
});
/* ********************************************************
* 목록 조회
******************************************************** */
const fn_select_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;
}
}
$.ajax({
type: "post",
url : "<c:url value="/admin/sys/comncd/selectCmmnCodeListInqire"/>",
data : dataStr,
success:function(resultHtml) {
$('#pageDiv').html(resultHtml);
$('#pageUnit').niceSelect();
}
});
}
/* ********************************************************
* 등록폼 이동
******************************************************** */
const fn_move_regpage = function() {
const url = '<c:url value="/admin/sys/comncd/selectCmmnCodeRegistForm"/>';
$('#listForm').attr('action', url);
$('#listForm').attr('method', 'POST');
$('#listForm').submit();
};
/* ********************************************************
* 수정폼 이동
******************************************************** */
const fn_move_dtl_uptpage = function(groupCd) {
const url = '<c:url value="/admin/sys/comncd/selectCmmnCodeUpdtForm"/>';
$('#listForm').attr('action', url);
$('#listForm').attr('method', 'get');
$('#groupCd').val(groupCd);
$('#listForm').submit();
}
/*********************************************************
* 엑셀 다운로드
*********************************************************/
const fn_excel_download = function() {
$('#listForm').attr('action', '<c:url value="/admin/sys/comncd/selectBOCmmnCodeListExcelDwld"/>');
$('#listForm').attr('method', 'post');
$('#listForm').submit();
}
history.replaceState({}, null, location.pathname);
</script>
<body>
<%@include file ="/WEB-INF/views/comm/admin/Header.jsp" %>
<main class="main">
<%@include file ="/WEB-INF/views/comm/admin/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 onclick="fn_move_regpage()" class="btn primary">공통코드 <spring:message code="button.insert"/></button>
</div>
</div>
<form id='listForm' name="listForm" method="post" action="<c:url value="/admin/sys/comncd/selectCmmnCodeListInqireForm"/>">
<input type="hidden" id="pageIndex" name="pageIndex" value="${ resultMap.BOMaComncdVO.pageIndex }"/>
<input type="hidden" id="groupCd" name="groupCd"/>
<section class="content-section" 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="select-box">
<select title="검색타입" id="srchType" name="srchType">
<option value="GROUP_CD_NM" <c:if test="${ resultMap.BOMaComncdVO.srchType == 'GROUP_CD_NM'}">selected="selected"</c:if>>코드그룹 명</option>
<option value="GROUP_CD" <c:if test="${ resultMap.BOMaComncdVO.srchType == 'GROUP_CD'}">selected="selected"</c:if>>코드그룹 ID</option>
<option value="CD_NM" <c:if test="${ resultMap.BOMaComncdVO.srchType == 'CD_NM'}">selected="selected"</c:if>>코드명</option>
<option value="CD" <c:if test="${ resultMap.BOMaComncdVO.srchType == 'CD'}">selected="selected"</c:if>>코드</option>
</select>
</div>
<input class="input-text xl" type="text" title="검색어" id="srchStr" name="srchStr" value="<c:out value="${ resultMap.BOMaComncdVO.srchStr }" />">
</div>
</td>
</tr>
<tr>
<th>사용여부</th>
<td>
<div class="td-inner">
<div class="select-box">
<select title="사용여부" id="srchUseAt" name="srchUseAt" value="<c:out value="${ resultMap.BOMaComncdVO.srchUseAt }" />">
<option value="">전체</option>
<option value="Y" <c:if test="${ resultMap.BOMaComncdVO.srchUseAt eq 'Y'}">selected="selected"</c:if>>사용</option>
<option value="N" <c:if test="${ resultMap.BOMaComncdVO.srchUseAt eq 'N'}">selected="selected"</c:if>>미사용</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" 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(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>
</div>
</main>
</body>
</html>

View File

@@ -0,0 +1,418 @@
<%@ 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" %>
<%--
Class Name : MaCmmnCodeRegistC.jsp
Description : 공통코드 등록 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
since : 2024.01.03 리브가 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@include file ="/WEB-INF/views/comm/admin/Include.jsp" %>
</head>
<script>
$( document ).ready(function() {
$('#noData').hide();
});
/* ********************************************************
* 등록 AJAX
******************************************************** */
const fn_regist = function() {
if(confirm('공통코드를 <spring:message code="confirm.common.insert"/>')) {
if ($('[name=cd]').length === 0) {
alert('코드를 한 개 이상 등록해야 합니다.');
return;
}
if (checkForDuplicateCodes()) {
alert('코드 값에 중복이 있습니다. 다른 값을 입력해주세요.');
return;
}
if($('#hiddenForm') != null) {
$('#hiddenForm').remove();
}
const hiddenForm = document.createElement('form');
hiddenForm.name = 'hiddenForm';
hiddenForm.id = 'hiddenForm';
hiddenForm.method = 'post';
hiddenForm.action = '';
hiddenForm.target = '_blank';
$('[name=cd]').each(function(idx){
fn_create_input('hidden', "comncdDetailVOList["+idx+"].cdNm", $('[name=cdNm]').eq(idx).val(), hiddenForm);
fn_create_input('hidden', "comncdDetailVOList["+idx+"].cd", $('[name=cd]').eq(idx).val(), hiddenForm);
fn_create_input('hidden', "comncdDetailVOList["+idx+"].cdDc", $('[name=cdDc]').eq(idx).val(), hiddenForm);
fn_create_input('hidden', "comncdDetailVOList["+idx+"].sortOrdr", idx, hiddenForm);
});
document.body.appendChild(hiddenForm);
const url = '<c:url value="/admin/sys/comncd/insertCmmnCodeRegist"/>';
const data = $('#listForm').serializeArray();
$.merge(data, $('#hiddenForm').serializeArray());
$.ajax({
type: 'post',
url: url,
data: data,
success: function (data) {
let str = JSON.parse(data.resBody.result);
if(str.result=='success'){
alert('<spring:message code="success.common.insert"/>');
fn_move_dtl_uptpage();
} else if(str.result=='dublechk'){
alert("이미 등록된 코드그룹 ID 입니다.");
} else {
alert('<spring:message code="fail.common.insert"/>');
}
}, error: function(data){
$("#overlay").fadeOut();
if(!data.responseJSON.resBody.message) {
alert('<spring:message code="error.internal-server"/>');
} else {
if(fn_check_json(data.responseJSON.resBody.message)) {
const errorObject = JSON.parse(data.responseJSON.resBody.message);
if(!errorObject) {
alert('<spring:message code="error.internal-server"/>');
} else {
if(!errorObject.errorMsg) {
alert('<spring:message code="error.internal-server"/>');
} else {
alert(errorObject.errorMsg);
let isMtched = false;
$('.main').eq(0).find('input,select,textarea').each(function(){
if ($(this).is('input[type="checkbox"], span')) {
return true;
}
for(let idx=0; idx<errorObject.errorFields.length; idx++) {
if(errorObject.errorFields[idx].indexOf($(this).prop('name')) >= 0) {
isMtched = true;
break;
}
}
if(isMtched) {
$(this).focus();
return false;
}
});
}
}
} else {
if(data.responseJSON.resBody.message) {
alert(data.responseJSON.resBody.message);
} else {
alert('<spring:message code="error.internal-server"/>');
}
}
}
}
});
}
};
const fn_create_input = function(type, name, value, tgtForm) {
const input = document.createElement('input');
input.setAttribute("type", type);
input.setAttribute("name", name);
input.setAttribute("value", value);
tgtForm.appendChild(input);
}
/* ********************************************************
* 행추가
******************************************************** */
const fn_add_row = function() {
let count = $('#codeTbody').children('tr').length;
let idx = count; // 현재 행 인덱스
let trClone = '<tr>'
+' <tr>'
+' <td>'
+' <label class="b-checkbox checkbox is-medium">'
+' <input type="checkbox" name="Chkbox" >'
+' <span class="check"></span>'
+' </label>'
+' </td>'
+' <td>'
+' <input class="input-text full" type="text" title="코드명" placeholder="" name="cdNm" maxlength="35">'
+' </td>'
+' <td>'
+' <input class="input-text full" type="text" title="코드" oninput="fn_cd_validateInput(this)" placeholder="" value="" name="cd" maxlength="20">'
+' </td>'
+' <td>'
+' <input class="input-text full" type="text" title="코드 설명" placeholder="" value="" name="cdDc" maxlength="1000">'
+' </td>'
+' <td>'
+' <div class="draggable-icon-container">'
+' <i class="icon icon_draggable"></i>'
+' <span class="visually-hidden">순서 바꾸기</span>'
+' </div>'
+' </td>'
+' </tr>'
$('#noData').hide();
$('#codeTbody').append(trClone);
//행 추가 후, tableDnd 업데이트
$('#cmmnCodeListTb').tableDnDUpdate();
}
/* ********************************************************
* 행삭제
******************************************************** */
const fn_delete_row = function() {
const target = $('[name=Chkbox]:checked');
if (target.length === 0) {
alert('항목을 선택해 주세요.');
} else {
target.each(function() {
$(this).parents('tr').remove();
});
}
$('#ChkAll').prop('checked', false);
if ($('[name=Chkbox]').length === 0) {
$('#noData').show();
}
}
/* ********************************************************
* 코드그룹 ID 중복 조회 AJAX
******************************************************** */
function fn_id_doubleCheck() {
const url = '<c:url value="/admin/sys/comncd/selectCmmnCodeGrpIdDplctInqire"/>';
var groupCd = $('#groupCd').val();
let data = {
groupCd: groupCd
};
$.ajax({
type: "post",
url : url,
data : data,
success:function(result) {
const message = JSON.parse(result.resBody.result)
if(message === 0){
let check = confirm('사용가능한 코드그룹 ID 입니다.');
}else{
alert('이미 등록된 코드그룹 ID 입니다.');
}
}
});
};
/* ********************************************************
* 코드 중복 조회 FN
******************************************************** */
function checkForDuplicateCodes() {
let cdSet = new Set();
let hasDuplicate = false;
$('[name=cd]').each(function() {
let cdValue = $(this).val();
if (cdValue.trim() === '') {
return true;
}
if (cdSet.has(cdValue)) {
hasDuplicate = true;
return false; // 중복이 발견되면 반복을 종료
}
cdSet.add(cdValue);
});
return hasDuplicate;
}
/* ********************************************************
* 수정폼 이동
******************************************************** */
const fn_move_dtl_uptpage = function() {
const url = '<c:url value="/admin/sys/comncd/selectCmmnCodeUpdtForm"/>';
$('#listForm').attr('action', url);
$('#listForm').attr('method', 'get');
$('#pageIndex').val(1);
$('#listForm').submit();
}
/* ********************************************************
* 목록 조회
******************************************************** */
const fn_select_list = function() {
const url = '<c:url value="/admin/sys/comncd/selectCmmnCodeListInqireForm"/>';
$('#listForm').attr('action', url);
$('#listForm').attr('method', 'post');
$('#listForm').submit();
};
/* ********************************************************
* 코드 - 영어, 숫자, 언더바(_), 하이픈(-)만 허용
******************************************************** */
function fn_cd_validateInput(input) {
var regex = /[^a-zA-Z0-9_-]/g;
input.value = input.value.replace(regex, '');
input.value = input.value.toUpperCase();
}
</script>
<body>
<%@include file ="/WEB-INF/views/comm/admin/Header.jsp" %>
<main class="main">
<%@include file ="/WEB-INF/views/comm/admin/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 onclick="fn_select_list()" onkeypress="this.onclick" class="btn outline"><spring:message code="button.list"/></button>
<button class="btn primary" onclick="fn_regist();" ><spring:message code="button.insert"/></button>
</div>
</div>
<section class="content-section">
<h3 class="content-section__title">공통코드 정보</h3>
<form id="listForm" method="post" action="<c:url value="/admin/sys/comncd/selectCmmnCodeRegistForm"/>">
<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>코드그룹 명<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<input class="input-text lg" type="text" id="groupCdNm" name="groupCdNm" title="코드그룹 명" maxlength="35">
</div>
</td>
<th>코드그룹 ID<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<input class="input-text md" type="text" id="groupCd" name="groupCd" oninput="fn_cd_validateInput(this)" title="코드그룹 ID" maxlength="20">
<button type="button" class="btn sm gray"
onclick="fn_id_doubleCheck(); return false;"><spring:message code="button.doubleCheck"/></button>
</div>
</td>
</tr>
<tr>
<th>코드그룹 설명</th>
<td colspan="3">
<div class="td-inner">
<textarea class="textarea" title="코드그룹 설명" id="groupCdDc" name="groupCdDc" rows="8" maxlength="1000"></textarea>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="form-control-container mb-8">
<div class="left">
<h3 class="content-section__inner-title">코드 정보</h3>
</div>
<div class="center">
</div>
<div class="right">
<button type="button" class="btn dark sm" onclick="fn_delete_row()">행 <spring:message code="button.delete"/></button>
<button type="button" class="btn primary outline sm" onclick="fn_add_row()">행 <spring:message code="button.add"/></button>
</div>
</div>
<div class="table-wrapper">
<table class="table vertical draggable" id ="cmmnCodeListTb">
<caption>코드</caption>
<colgroup>
<col style="width: 60px;">
<col style="width: 18%;">
<col style="width: 18%;">
<col style="width: auto;">
<col style="width: 8%;">
</colgroup>
<thead>
<tr>
<th>
<label class="b-checkbox checkbox is-medium check-all">
<input type="checkbox" id="ChkAll" value="">
<span class="check"></span>
</label>
</th>
<th>코드명<span class="red-7">*</span></th>
<th>코드<span class="red-7">*</span></th>
<th>코드 설명</th>
<th>순서</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<label class="b-checkbox checkbox is-medium">
<input type="checkbox" name="Chkbox" >
<span class="check"></span>
</label>
</td>
<td>
<input class="input-text full" type="text" name="cdNm" title="코드명" maxlength="35">
</td>
<td>
<input class="input-text full" type="text" name="cd" title="코드" maxlength="20">
</td>
<td>
<input class="input-text full" type="text" name="cdDc" title="코드 설명" maxlength="1000">
</td>
<td>
<div class="draggable-icon-container">
<i class="icon icon_draggable"></i>
<span class="visually-hidden">순서 바꾸기</span>
</div>
</td>
</tr>
</tbody>
<tbody id="codeTbody">
<tr id="noData">
<td colspan="100%" class="row-no-data"> 데이터 없음</td>
</tr>
</tbody>
</table>
</div>
<!--검색 조건 , 페이징 조건 -->
<input type="hidden" id="srchType" name="srchType" title="검색타입" value="<c:out value="${ resultMap.BOMaComncdVO.srchType }"/>">
<input type="hidden" id="srchStr" name="srchStr" title="검색어" value="<c:out value="${ resultMap.BOMaComncdVO.srchStr }"/>">
<input type="hidden" id="srchUseAt" name="srchUseAt" title="사용여부" value="<c:out value="${ resultMap.BOMaComncdVO.srchUseAt }"/>">
<input type="hidden" id="pageIndex" name="pageIndex" value="<c:out value="${ resultMap.BOMaComncdVO.pageIndex }"/>"/>
<input type="hidden" id="pageUnit" name="pageUnit" value="<c:out value="${ resultMap.BOMaComncdVO.pageUnit }"/>"/>
</form>
</section>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</div>
</main>
</body>
</html>

View File

@@ -0,0 +1,448 @@
<%@ 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" %>
<%--
Class Name : MaCmmnCodeUpdtU.jsp
Description : 공통코드 수정 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
since : 2024.01.08 리브가 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@include file ="/WEB-INF/views/comm/admin/Include.jsp" %>
</head>
<script>
$( document ).ready(function() {
});
/* ********************************************************
* 수정 AJAX
******************************************************** */
const fn_update = function() {
var msg ='';
if($('#groupUseAt').val()=='N'){
msg = '그룹코드 미사용 설정시 하위 코드들도 모두 미사용 처리됩니다.\n공통코드를 <spring:message code="confirm.common.update"/>';
} else{
msg = '공통코드를 <spring:message code="confirm.common.update"/>';
}
if(confirm(msg)){
if (checkForDuplicateCodes()) {
alert('코드 값에 중복이 있습니다. 다른 값을 입력해주세요.');
return;
}
if($('#hiddenForm') != null) {
$('#hiddenForm').remove();
}
const hiddenForm = document.createElement('form');
hiddenForm.name = 'hiddenForm';
hiddenForm.id = 'hiddenForm';
hiddenForm.method = 'post';
hiddenForm.action = '';
hiddenForm.target = '_blank';
$('[name=cd]').each(function(idx){
fn_create_input('hidden', "comncdDetailVOList["+idx+"].cdNm", $('[name=cdNm]').eq(idx).val(), hiddenForm);
fn_create_input('hidden', "comncdDetailVOList["+idx+"].cd", $('[name=cd]').eq(idx).val(), hiddenForm);
fn_create_input('hidden', "comncdDetailVOList["+idx+"].cdDc", $('[name=cdDc]').eq(idx).val(), hiddenForm);
if ($('#groupUseAt').val() == 'N') {
fn_create_input('hidden', "comncdDetailVOList["+idx+"].useAt", 'N', hiddenForm);
} else {
fn_create_input('hidden', "comncdDetailVOList["+idx+"].useAt", $('[name=useAt]').eq(idx).val(), hiddenForm);
}
fn_create_input('hidden', "comncdDetailVOList["+idx+"].sortOrdr", idx, hiddenForm);
});
document.body.appendChild(hiddenForm);
const url = '<c:url value="/admin/sys/comncd/updateCmmnCodeUpdt"/>';
const data = $('#listForm').serializeArray();
$.merge(data, $('#hiddenForm').serializeArray());
$.ajax({
type: 'post',
url: url,
data: data,
success: function (data) {
let str = JSON.parse(data.resBody.result);
if(str.result=='success'){
alert('<spring:message code="success.common.update"/>');
fn_move_dtl_uptpage();
} else {
alert('<spring:message code="fail.common.update"/>');
}
}, error: function(data){
$("#overlay").fadeOut();
if(!data.responseJSON.resBody.message) {
alert('<spring:message code="error.internal-server"/>');
} else {
if(fn_check_json(data.responseJSON.resBody.message)) {
const errorObject = JSON.parse(data.responseJSON.resBody.message);
if(!errorObject) {
alert('<spring:message code="error.internal-server"/>');
} else {
if(!errorObject.errorMsg) {
alert('<spring:message code="error.internal-server"/>');
} else {
alert(errorObject.errorMsg);
let isMtched = false;
$('.main').eq(0).find('input,select,textarea').each(function(){
if ($(this).is('input[type="checkbox"], span')) {
return true;
}
for(let idx=0; idx<errorObject.errorFields.length; idx++) {
if(errorObject.errorFields[idx].indexOf($(this).prop('name')) >= 0) {
isMtched = true;
break;
}
}
if(isMtched) {
$(this).focus();
return false;
}
});
}
}
} else {
if(data.responseJSON.resBody.message) {
alert(data.responseJSON.resBody.message);
} else {
alert('<spring:message code="error.internal-server"/>');
}
}
}
}
});
}
};
const fn_create_input = function(type, name, value, tgtForm) {
const input = document.createElement('input');
input.setAttribute("type", type);
input.setAttribute("name", name);
input.setAttribute("value", value);
tgtForm.appendChild(input);
}
/* ********************************************************
* 삭제 AJAX
******************************************************** */
const fn_delete = function() {
const url = '<c:url value="/admin/sys/comncd/deleteCmmnCodeDel"/>';
const data = $('#listForm').serialize();
if(confirm('코드그룹을 <spring:message code="confirm.common.delete"/>')) {
$.ajax({
type: 'post',
url: url,
data: data,
success: function (data) {
let str = JSON.parse(data.resBody.result);
if(str.result=='success'){
alert('<spring:message code="success.common.delete"/>');
fn_select_list(1);
} else {
alert('<spring:message code="fail.common.delete"/>');
}
}
});
}
};
/* ********************************************************
* 행추가
******************************************************** */
const fn_add_row = function() {
let trClone = '<tr>'
+' <tr>'
+' <td>'
+' <label class="b-checkbox checkbox is-medium">'
+' <input type="checkbox" name="Chkbox" >'
+' <span class="check"></span>'
+' </label>'
+' </td>'
+' <td>'
+' <input class="input-text full" type="text" title="코드명" placeholder="" name="cdNm" maxlength="35">'
+' </td>'
+' <td>'
+' <input class="input-text full" type="text" title="코드" placeholder="" value="" name="cd" maxlength="20">'
+' </td>'
+' <td>'
+' <input class="input-text full" type="text" title="코드 설명" placeholder="" value="" name="cdDc" maxlength="1000">'
+' </td>'
+' <td>'
+' <div class="select-box">'
+' <select id="useAt" name="useAt" title="사용여부" disabled>'
+' <option value="Y" selected>사용</option>'
+' </select>'
+' </div>'
+' </td>'
+' <td>'
+' <div class="draggable-icon-container">'
+' <i class="icon icon_draggable"></i>'
+' <span class="visually-hidden">순서 바꾸기</span>'
+' </div>'
+' </td>'
+' </tr>'
$('#codeTbody').append(trClone);
$('#cmmnCodeListTb').tableDnDUpdate();
}
/* ********************************************************
* 행삭제
******************************************************** */
const fn_delete_row = function() {
const target = $('[name=Chkbox]:checked');
if (target.length === 0) {
alert('항목을 선택해 주세요.');
} else {
target.each(function() {
$(this).parents('tr').remove();
});
}
$('#ChkAll').prop('checked', false);
}
/* ********************************************************
* 코드 중복 조회 FN
******************************************************** */
function checkForDuplicateCodes() {
let cdSet = new Set();
let hasDuplicate = false;
$('[name=cd]').each(function() {
let cdValue = $(this).val();
if (cdValue.trim() === '') {
return true;
}
if (cdSet.has(cdValue)) {
hasDuplicate = true;
return false; // 중복이 발견되면 반복을 종료
}
cdSet.add(cdValue);
});
return hasDuplicate;
}
/* ********************************************************
* 목록 조회
******************************************************** */
const fn_select_list = function(pageIndex) {
const url = '<c:url value="/admin/sys/comncd/selectCmmnCodeListInqireForm"/>';
$('#listForm').attr('action', url);
$('#listForm').attr('method', 'post');
if(pageIndex) {
$('#pageIndex').val(pageIndex);
}
$('#listForm').submit();
};
/* ********************************************************
* 수정폼 이동
******************************************************** */
const fn_move_dtl_uptpage = function() {
const url = '<c:url value="/admin/sys/comncd/selectCmmnCodeUpdtForm"/>';
$('#listForm').attr('action', url);
$('#listForm').attr('method', 'get');
$('#pageIndex').val(1);
$('#listForm').submit();
}
/* ********************************************************
* 코드 - 영어, 숫자, 언더바(_), 하이픈(-)만 허용
******************************************************** */
function fn_cd_validateInput(input) {
var regex = /[^a-zA-Z0-9_-]/g;
input.value = input.value.replace(regex, '');
input.value = input.value.toUpperCase();
}
</script>
<body>
<%@include file ="/WEB-INF/views/comm/admin/Header.jsp" %>
<main class="main">
<%@include file ="/WEB-INF/views/comm/admin/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 onclick="fn_select_list()" onkeypress="this.onclick" class="btn outline"><spring:message code="button.list"/></button>
<button class="btn primary outline" onclick="fn_update();" ><spring:message code="button.update"/></button>
</div>
</div>
<section class="content-section">
<h3 class="content-section__title">공통코드 정보</h3>
<form id="listForm" method="post" action="<c:url value="/admin/sys/comncd/insertCmmnCodeRegist"/>">
<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>
<c:choose>
<c:when test="${ not empty resultMap.CodeGrouplist }">
<c:forEach items="${ resultMap.CodeGrouplist }" var="list" varStatus="status">
<tr>
<th>코드그룹 명<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<input class="input-text lg" type="text" id="groupCdNm" name="groupCdNm" value="<c:out value="${list.groupCdNm}"/>" title="코드그룹 명" maxlength="35">
</div>
</td>
<th>코드그룹 ID<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<input class="input-text md" type="text" id="groupCd" name="groupCd" value="<c:out value="${list.groupCd}"/>" title="코드그룹 ID" readonly>
</div>
</td>
</tr>
<tr>
<th>코드그룹 설명</th>
<td colspan="3">
<div class="td-inner">
<textarea class="textarea" title="코드그룹 설명" id="groupCdDc" name="groupCdDc" value="<c:out value="${list.groupCdDc}"/>" rows="8" maxlength="1000"><c:out value="${list.groupCdDc}"/></textarea>
</div>
</td>
</tr>
<tr>
<th>사용여부<span class="red-7">*</span></th>
<td colspan="3">
<div class="td-inner">
<div class="select-box">
<select title="사용여부" id="groupUseAt" name="groupUseAt">
<option value="Y" <c:if test="${ list.useAt eq 'Y'}">selected="selected"</c:if>>사용</option>
<option value="N" <c:if test="${ list.useAt eq 'N'}">selected="selected"</c:if>>미사용</option>
</select>
</div>
</div>
</td>
</tr>
</c:forEach></c:when></c:choose>
</tbody>
</table>
</div>
<div class="form-control-container mb-8">
<div class="left">
<h3 class="content-section__inner-title">코드 정보</h3>
</div>
<div class="center">
</div>
<div class="right">
<button type="button" class="btn dark sm" onclick="fn_delete_row()">행 <spring:message code="button.delete"/></button>
<button type="button" class="btn primary outline sm" onclick="fn_add_row()">행 <spring:message code="button.add"/></button>
</div>
</div>
<div class="table-wrapper">
<table class="table vertical draggable" id ="cmmnCodeListTb">
<caption>코드</caption>
<colgroup>
<col style="width: 60px;">
<col style="width: 18%;">
<col style="width: 18%;">
<col style="width: auto;">
<col style="width: 10%;">
<col style="width: 8%;">
</colgroup>
<thead>
<tr>
<th>
<label class="b-checkbox checkbox is-medium check-all">
<input type="checkbox" id="ChkAll" value="" >
<span class="check"></span>
</label>
</th>
<th>코드명<span class="red-7">*</span></th>
<th>코드<span class="red-7">*</span></th>
<th>코드 설명</th>
<th>사용여부<span class="red-7">*</span></th>
<th>순서</th>
</tr>
</thead>
<tbody id="codeTbody">
<c:choose>
<c:when test="${ not empty resultMap.list }">
<c:forEach items="${ resultMap.list }" var="list" varStatus="status">
<tr>
<td>
<label class="b-checkbox checkbox is-medium">
<span class="check"></span>
</label>
</td>
<td>
<input class="input-text full" type="text" id="cdNm" name="cdNm" value="<c:out value="${list.cdNm}"/>" title="코드명" maxlength="35">
</td>
<td>
<input class="input-text full" type="text" id="cd" name="cd" value="<c:out value="${list.cd}"/>" title="코드" readonly>
</td>
<td>
<input class="input-text full" type="text" id="cdDc" name="cdDc" value="<c:out value="${list.cdDc}"/>" title="코드 설명" maxlength="1000">
</td>
<td>
<div class="select-box">
<select id="useAt" name="useAt" title="사용여부">
<option value="Y" <c:if test="${ list.useAt eq 'Y'}">selected="selected"</c:if>>사용</option>
<option value="N" <c:if test="${ list.useAt eq 'N'}">selected="selected"</c:if>>미사용</option>
</select>
</div>
</td>
<td>
<div class="draggable-icon-container">
<i class="icon icon_draggable"></i>
<span class="visually-hidden">순서 바꾸기</span>
</div>
</td>
</tr>
</c:forEach>
</c:when></c:choose>
</tbody>
</table>
</div>
<!--검색 조건 , 페이징 조건 -->
<input type="hidden" id="srchType" name="srchType" title="검색타입" value="<c:out value="${ resultMap.BOMaComncdVO.srchType }"/>">
<input type="hidden" id="srchStr" name="srchStr" title="검색어" value="<c:out value="${ resultMap.BOMaComncdVO.srchStr }"/>">
<input type="hidden" id="srchUseAt" name="srchUseAt" title="사용여부" value="<c:out value="${ resultMap.BOMaComncdVO.srchUseAt }"/>">
<input type="hidden" id="pageIndex" name="pageIndex" value="<c:out value="${ resultMap.BOMaComncdVO.pageIndex }"/>"/>
<input type="hidden" id="pageUnit" name="pageUnit" value="<c:out value="${ resultMap.BOMaComncdVO.pageUnit }"/>"/>
</form>
</section>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</div>
</main>
</body>
</html>

View File

@@ -0,0 +1,65 @@
<%@ 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="f" uri="/WEB-INF/tlds/f.tld"%>
<script src="<c:url value='/mngr/js/script.js'/>" defer></script>
<div id="ctgryInGoodsOrdr" class="modal" style="max-width: 560px;">
<div class="modal-header">
<h4>상품 정렬</h4>
</div>
<div class="modal-content" style="height: 500px;">
<div class="table-wrapper">
<form id="ordrUptFrm">
<table class="table vertical draggable" id="targetTable">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 15%;">
<col style="width: auto;">
</colgroup>
<thead>
<tr>
<th>순서</th>
<th>상품명</th>
</tr>
</thead>
<tbody>
<c:choose>
<c:when test="${not empty resultMap.ctgryGoodsList}">
<c:forEach items="${ resultMap.ctgryGoodsList }" var="list" varStatus="status">
<tr>
<td>
<div class="draggable-icon-container">
<input type="hidden" name="ctgryGoodsEsntlNb" value="<c:out value="${list.ctgryGoodsEsntlNb}"/>"/>
<i class="icon icon_draggable"></i>
<span class="visually-hidden">순서 바꾸기</span>
</div>
</td>
<td class="text-left"><c:out value="${ list.goodsNm }"/></td>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
<tr class="row-no-data">
<td colspan="100%" ><spring:message code="common.nodata"/></td>
</tr>
</c:otherwise>
</c:choose>
</tbody>
</table>
</form>
</div>
</div>
<div class="modal-footer">
<a href="#" id="modalClose" rel="modal:close" class="btn outline">닫기</a>
<c:if test="${not empty resultMap.ctgryGoodsList}">
<button class="btn primary" type="button" onclick="fn_update_goodOrdr();"><spring:message code="button.save"/></button>
</c:if>
</div>
</div>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,288 @@
<%@ 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"%>
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld"%>
<%--
Class Name : maFnctC.jsp
Description : 기능 등록 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
since : 2023.12.22 최범식 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@include file ="/WEB-INF/views/comm/admin/Include.jsp" %>
<script>
$(document).ready(function() {
$('input').keydown(function(event) {
if (event.keyCode === 13) {
event.preventDefault();
}
});
});
/* ********************************************************
* url 공백 삭제
******************************************************** */
const fn_remove_noSpaceUrl = function(_value) {
$('#fnctUrl').val(_value.replace(/\s/g, ""));
}
/* ********************************************************
* 기능 목록조회
******************************************************** */
const fn_select_fnct_list = function(pageIndex, pageUnit) {
if (pageIndex == undefined || pageUnit == '') {
$('#pageIndex').val('1');
} else {
$('#pageIndex').val(pageIndex);
}
let params = $('#srchForm').serialize();
if (pageUnit != undefined || pageUnit == '') {
params += '&pageUnit=' + pageUnit;
} else {
params += '&pageUnit=' + $('#pageUnit').val();
}
$.ajax({
type : 'post',
url : '<c:url value="/admin/sys/fnct/selectFnctListInqire"/>',
data : params,
success : function(data) {
$('#pageDiv').html(data);
$('#pageUnit').niceSelect();
}
});
}
/* ********************************************************
* url 중복 조회
******************************************************** */
isChkd_Dup = false;
const fn_check_duplication = function() {
const sysDvCd = $('input[name="sysDvCd"]:checked').val();
if(fn_is_empty(sysDvCd)){
alert('시스템 구분을 선택해 주세요.')
return;
}
let fnctUri = $('#fnctUri').val();
if ( fnctUri === '' ) {
alert('URL을 입력해 주세요.');
$('#fnctUri').focus();
return;
}
if(fnctUri.includes('?')){
alert("파라미터는 입력할 수 없습니다.");
return;
}
let param = { 'fnctUri' : fnctUri,
'sysDvCd' : sysDvCd
}
$.ajax({
type: 'post',
url : '<c:url value="/admin/sys/fnct/selectFnctUrlDplctInqire"/>',
data: param,
success: function (data) {
let result = JSON.parse(data.resBody.result).result;
if (result === 'fail') {
alert('\"' + fnctUri + '\" 사용 가능한 URI 입니다.');
$('[name=fnctDc]').focus();
isChkd_Dup = true;
} else {
alert('\"' + fnctUri + '\" 사용 불가능한 URI 입니다.');
$('#fnctUri').focus();
}
}
});
}
/* ******************************
* 변경 감지 시 중복 다시 체크
********************************/
const fn_dirty_checking = () => {
isChkd_Dup = false;
}
/* ********************************************************
* 기능 등급 등록
******************************************************** */
const fn_regist_fnct = function() {
if (!confirm('기능을 <spring:message code="confirm.common.insert"/>')) return;
let params = $('#regForm').serialize();
if(isChkd_Dup){
params += "&isChckDup=true"
} else {
params += "&isChckDup=false"
}
$.ajax({
type: 'post',
url : '<c:url value="/admin/sys/fnct/insertFnctRegist"/>',
data: params,
success: function (result) {
let fnctId = JSON.parse(result.resBody.result).fnctId;
$('#backupForm').find('[name=fnctId]').val(fnctId);
$('#backupForm').find('[name=pageDv]').val('I');
if(fnctId !== '' && fnctId !== undefined){
alert('<spring:message code="success.common.insert"/>');
$('#backupForm').attr('action', '<c:url value="/admin/sys/fnct/selectFnctUpdtForm"/>');
$('#backupForm').submit();
} else {
alert('<spring:message code="fail.common.insert"/>');
}
}
});
}
/* ********************************************************
* 기능 등급 목록 이동
******************************************************** */
const fn_goto_list = function() {
$('#backupForm').attr('action', '<c:url value="/admin/sys/fnct/selectFnctListInqireForm"/>');
$('#backupForm').submit();
}
</script>
</head>
<body>
<%@include file ="/WEB-INF/views/comm/admin/Header.jsp" %>
<main class="main">
<%@include file ="/WEB-INF/views/comm/admin/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_goto_list()"><spring:message code="button.catalog"/></button>
<button type="button" class="btn primary" onclick="fn_regist_fnct();"><spring:message code="button.save"/></button>
</div>
</div>
<section class="content-section">
<form id="regForm" class="common-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>기능 명<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<input class="input-text xl" type="text" name="fnctNm" title="기능명" maxlength="48"/>
</div>
</td>
<th>기능 구분<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<div class="select-box">
<select name="fnctDvCd" title="기능구분" >
<option value="" selected disabled>선택하세요.</option>
<c:forEach var="fnctDvCd" items="${resultMap.codeList[0].cgn031}" varStatus="status">
<option value="${fnctDvCd.cd}"> ${fnctDvCd.cdNm}</option>
</c:forEach>
</select>
</div>
</div>
</td>
</tr>
<tr>
<th>시스템 구분<span class="red-7">*</span></th>
<td colspan="3">
<div class="td-inner">
<div class="custom-radio-container">
<c:forEach var="codeList" items="${ resultMap.mngrDvList }" varStatus="">
<div class="custom-radio">
<input type="radio" name="sysDvCd"
id="sysDvCd${ codeList.cd }"
value="<c:out value="${ codeList.cd }" />"
>
<label for="sysDvCd${ codeList.cd }"/>
<c:out value="${ codeList.cdNm }" />
</label>
</div>
</c:forEach>
</div>
</div>
</td>
</tr>
<tr>
<th>URL<span class="red-7">*</span></th>
<td colspan="3">
<div class="td-inner">
<input class="input-text xl" type="text" name="fnctUri" id="fnctUri" title="url" onkeyup="fn_remove_noSpaceUrl(this.value);" onchange="fn_dirty_checking()" maxlength="120"/>
<button type="button" class="btn sm gray ml-5" onclick="fn_check_duplication();"><spring:message code="button.doubleCheck"/></button>
</div>
</td>
</tr>
<tr>
<th>기능 설명</th>
<td colspan="3">
<div class="td-inner">
<textarea class="textarea" name="fnctDc" title="기능설명" rows="8" maxlength="200"></textarea>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</form>
</section>
</div>
</div>
</main>
<form id="backupForm" method="post" >
<input type="hidden" name="srchFnctNm" value="${resultMap.vo.srchFnctNm }" />
<input type="hidden" name="srchFnctUrl" value="${resultMap.vo.srchFnctUrl }" />
<input type="hidden" name="srchFnctDv" value="${resultMap.vo.srchFnctDv }" />
<input type="hidden" name="srchSysDvCd" value="${resultMap.vo.srchSysDvCd }" />
<input type="hidden" name="pageUnit" value="${resultMap.vo.pageUnit }" />
<input type="hidden" name="pageIndex" value="${resultMap.vo.pageIndex }" />
<input type="hidden" name="fnctId" value="" />
<input type="hidden" name="pageDv" value="" />
</form>
</body>
</html>

View File

@@ -0,0 +1,120 @@
<%@ 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 : maFnctListInqireR.jsp
Description : 기능 목록 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2023-12-20 김혜지 최초 생성(퍼블리싱 적용)
--%>
<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_fnct_list('1')">
<c:forEach items="${ resultMap.paginationInfo.pageUnitArr }" var="pageUnit" varStatus="pageUnitStatus">
<option value="<c:out value="${ pageUnit }"/>" <c:if test="${ resultMap.paramVO.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>
<div class="center">
</div>
<div class="right">
<button type="button" class="btn outline sm" onclick="fn_download_excel();">
<i class="icon icon_excel"></i>
다운로드
</button>
</div>
</div>
<hr class="spacing">
<div class="table-wrapper">
<table class="table vertical">
<caption>해당 테이블에 대한 설명</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 4%;">
<col style="width: auto;">
<col style="width: 10%;">
<col style="width: 10%;">
<col style="width: 36%;">
<col style="width: 8%;">
<col style="width: 7%">
</colgroup>
<thead>
<tr>
<th>번호</th>
<th>기능명</th>
<th>시스템 구분</th>
<th>기능 구분</th>
<th>URL</th>
<th>등록일자</th>
<th>관리</th>
</tr>
</thead>
<tbody>
<c:choose>
<c:when test="${ not empty resultMap.resultList }">
<c:forEach var="fnctList" items="${resultMap.resultList }" varStatus="status">
<tr>
<td>
<c:out value="${resultMap.paginationInfo.totalRecordCount - fnctList.rnum + 1 }"/>
</td>
<td class="left" style="word-break: break-all;">
<c:out value="${fnctList.fnctNm }"/>
</td>
<td>
<c:out value="${fnctList.sysDvCdNm}" />
</td>
<td>
<c:out value="${fnctList.fnctDvNm }"/>
</td>
<td>
<c:out value="${fnctList.fnctUri}" />
</td>
<td>
<span>
<c:out value="${fnctList.registDt}"/>
</span>
</td>
<td>
<div class="manage-btn-container re">
<button type="button" class="btn xsm primary outline" onclick="fn_move_fnctDetail('${fnctList.fnctId }');" ><spring:message code="button.update"/></button>
</div>
</td>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
<tr>
<td class="row-no-data" colspan="8">조회된 데이터가 없습니다.</td>
</tr>
</c:otherwise>
</c:choose>
</table>
</div>
</section>
<div class="pagination__container">
<ui:pagination paginationInfo="${ resultMap.paginationInfo }" type="image" jsFunction="fn_select_fnct_list" />
</div>

View File

@@ -0,0 +1,224 @@
<%@ 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 : maFnctListInqireR.jsp
Description : 기능 목록 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2023-12-20 김혜지 최초 생성(퍼블리싱 적용)
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@include file ="/WEB-INF/views/comm/admin/Include.jsp" %>
<script>
$(document).ready(function(){
let pageIndex = '<c:out value="${ resultMap.paramVO.pageIndex }"/>';
let pageUnit = '<c:out value="${ resultMap.paramVO.pageUnit }"/>';
let pageDv = '<c:out value="${ resultMap.paramVO.pageDv }"/>';
if (pageDv == '') {
fn_select_fnct_list(pageIndex, pageUnit);
} else {
fn_select_fnct_list('1', '10');
}
$('#srchFnct-select').keydown(function(event) {
if (event.keyCode === 13) {
event.preventDefault();
};
});
$('[name=srchFnctNm], [name=srchFnctUrl]').keydown(function(event) {
if (event.keyCode === 13) {
event.preventDefault();
fn_select_fnct_list('1');
};
});
});
/* ********************************************************
* 기능 목록조회
******************************************************** */
const fn_select_fnct_list = function(pageIndex, pageUnit) {
if (pageIndex == undefined || pageUnit == '') {
$('#pageIndex').val('1');
} else {
$('#pageIndex').val(pageIndex);
}
let params = $('#srchForm').serialize();
if (pageUnit != undefined || pageUnit == '') {
params += '&pageUnit=' + pageUnit;
} else {
params += '&pageUnit=' + $('#pageUnit').val();
}
$.ajax({
type : 'post',
url : '<c:url value="/admin/sys/fnct/selectFnctListInqire"/>',
data : params,
success : function(data) {
$('#pageDiv').html(data);
$('#pageUnit').niceSelect();
}
});
}
/**********************************************
* 기능 검색 초기화
***********************************************/
const fn_clear_input = function() {
$('[name=srchFnctNm]').val('');
$('[name=srchFnctUrl]').val('');
$('[name=srchSysDvCd]').prop('checked', false);
$('#srchFnct-select').val('').niceSelect('update');
}
/**********************************************
* 기능 등록 화면 이동
***********************************************/
const fn_move_fnctRegist = function() {
$('#srchForm').attr('action', '<c:url value="/admin/sys/fnct/selectFnctRegistForm"/>');
$('#srchForm').attr('method', 'post');
$('#srchForm').submit();
}
/**********************************************
* 기능 수정 화면 이동
***********************************************/
const fn_move_fnctDetail = function(_fnctId) {
$('#fnctId').val(_fnctId);
$('#srchForm').attr('action', '<c:url value="/admin/sys/fnct/selectFnctUpdtForm"/>');
$('#srchForm').attr('method', 'post');
$('#srchForm').submit();
}
/**********************************************
* 기능 엑셀 다운로드
***********************************************/
const fn_download_excel = function() {
$('#srchForm').attr('action', '<c:url value="/admin/sys/fnct/excelFileDownload"/>');
$('#srchForm').attr('method', 'post');
$('#srchForm').submit();
}
</script>
</head>
<body>
<%@include file ="/WEB-INF/views/comm/admin/Header.jsp" %>
<main class="main">
<%@include file ="/WEB-INF/views/comm/admin/Left.jsp" %>
<div class="content">
<div class="content__inner">
<button type="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 primary" onclick="fn_move_fnctRegist();">기능 <spring:message code="button.insert"/></button>
</div>
</div>
<form id="srchForm" >
<input type="hidden" id="fnctId" name="fnctId" />
<input type="hidden" id="pageIndex" name="pageIndex" value="1"/>
<section class="content-section" >
<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">
<input class="input-text xl" type="text" name="srchFnctNm" title="기능명" value="${resultMap.paramVO.srchFnctNm }"/>
</div>
</td>
<th>기능 구분</th>
<td>
<div class="td-inner">
<div class="select-box" id="fnctDvCd">
<select name="srchFnctDv" id="srchFnct-select" title="기능 구분" >
<option value="" ${f:setSelected(resultMap.paramVO.srchFnctDv, '')} >전체</option>
<c:forEach var="fnctDvCd" items="${resultMap.codeList[0].cgn031}" varStatus="status">
<option value="${fnctDvCd.cd}" ${f:setSelected(resultMap.paramVO.srchFnctDv, fnctDvCd.cd) }> ${fnctDvCd.cdNm}</option>
</c:forEach>
</select>
</div>
</div>
</td>
</tr>
<tr>
<th>시스템 구분</th>
<td colspan="3">
<div class="td-inner">
<div class="custom-radio-container">
<c:forEach var="codeList" items="${ resultMap.mngrDvList }" varStatus="">
<div class="custom-radio">
<input type="radio" name="srchSysDvCd"
id="sysDvCd${ codeList.cd }"
value="<c:out value="${ codeList.cd }" />"
<c:if test="${ codeList.cd eq resultMap.paramVO.srchSysDvCd }">checked="checked"</c:if>
>
<label for="sysDvCd${ codeList.cd }"/>
<c:out value="${ codeList.cdNm }" />
</label>
</div>
</c:forEach>
</div>
</div>
</td>
</tr>
<tr>
<th>URL</th>
<td colspan="3">
<div class="td-inner">
<input class="input-text full" type="text" name="srchFnctUrl" title="url" value="${resultMap.paramVO.srchFnctUrl}"/>
</div>
</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_select_fnct_list('1');"><spring:message code="button.search"/></button>
<button type="button" class="btn outline" onclick="fn_clear_input();"><spring:message code="button.init"/></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>
</div>
</main>
</body>
</html>

View File

@@ -0,0 +1,217 @@
<%@ 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"%>
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld"%>
<%--
Class Name : maFnctU.jsp
Description : 기능 수정 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
since : 2023.12.19 김혜지 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@include file ="/WEB-INF/views/comm/admin/Include.jsp" %>
<script>
$(document).ready(function() {
$('input').keydown(function(event) {
if (event.keyCode === 13) {
event.preventDefault();
}
});
});
/* ********************************************************
* 기능 설정 삭제
******************************************************** */
const fn_delete_fnct = function() {
if(!confirm('기능을 <spring:message code="confirm.common.delete"/>')) return;
let fnctId = $('#fnctId').val();
let param = {'fnctId' : fnctId};
$.ajax({
type: 'get',
url : '<c:url value="/admin/sys/fnct/deleteFnctDel"/>',
data: param,
success: function (data) {
let result = JSON.parse(data.resBody.result).result;
if (result !=='success') {
alert('<spring:message code="fail.common.delete"/>');
return;
}
alert('<spring:message code="success.common.delete"/>');
fn_goto_list();
}
});
}
/* ********************************************************
* 기능 수정
******************************************************** */
const fn_update_fnct = function() {
if(!confirm('기능을 <spring:message code="confirm.common.update"/>')) return;
$.ajax({
type: 'post',
url : '<c:url value="/admin/sys/fnct/updateFnctUpdt"/>',
data: $('#updForm').serialize(),
success: function (result) {
let data = JSON.parse(result.resBody.result);
if (data.result !== 'success') {
alert('<spring:message code="fail.common.update"/>');
return;
}
alert('<spring:message code="success.common.update"/>');
$('#backUpData').find('[name=pageDv]').val('U');
$('#backUpData').find('[name=fnctId]').val(data.fnctId);
$('#backUpData').attr('action', '<c:url value="/admin/sys/fnct/selectFnctUpdtForm"/>');
$('#backUpData').submit();
}
});
}
</script>
</head>
<body>
<%@include file ="/WEB-INF/views/comm/admin/Header.jsp" %>
<main class="main">
<%@include file ="/WEB-INF/views/comm/admin/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_goto_list();"><spring:message code="button.catalog"/></button>
<button type="button" class="btn dark" onclick="fn_delete_fnct();"><spring:message code="button.delete"/></button>
<button type="button" class="btn primary" onclick="fn_update_fnct();"><spring:message code="button.save"/></button>
</div>
</div>
<section class="content-section">
<form id="updForm">
<input type="hidden" name="fnctId" id="fnctId" value="${resultMap.vo.fnctId }" />
<input type="hidden" name="menuCd" id="menuCd" value="${resultMap.vo.menuCd }" />
<input type="hidden" name="srchFnctNm" value="${resultMap.vo.srchFnctNm }" />
<input type="hidden" name="srchFnctUrl" value="${resultMap.vo.srchFnctUrl }" />
<input type="hidden" name="srchFnctDv" value="${resultMap.vo.srchFnctDv }" />
<input type="hidden" name="pageUnit" value="${resultMap.vo.pageUnit }" />
<input type="hidden" name="pageIndex" value="${resultMap.vo.pageIndex }" />
<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>기능 명<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<input class="input-text lg" type="text" name="fnctNm" title="회원등급명" value="${resultMap.vo.fnctNm }" maxlength="48"/>
</div>
</td>
<th>기능 구분<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<div class="select-box">
<select name="fnctDvCd" title="기능 구분" >
<option value="" disabled>선택하세요.</option>
<c:forEach var="fnctDvCd" items="${resultMap.codeList[0].cgn031 }" varStatus="status">
<option value="${fnctDvCd.cd}" ${f:setSelected(fnctDvCd.cd, resultMap.vo.fnctDvCd)} > ${fnctDvCd.cdNm}</option>
</c:forEach>
</select>
</div>
</div>
</td>
</tr>
<tr>
<th>시스템 구분</th>
<td colspan="3">
<div class="td-inner">
<div class="custom-radio-container">
<c:forEach var="codeList" items="${ resultMap.mngrDvList }" varStatus="">
<div class="custom-radio">
<input type="radio" name="sysDvCd"
id="sysDvCd${ codeList.cd }"
value="<c:out value="${ codeList.cd }" />"
<c:if test="${ codeList.cd eq resultMap.vo.sysDvCd }">checked="checked"</c:if>
>
<label for="sysDvCd${ codeList.cd }"/>
<c:out value="${ codeList.cdNm }" />
</label>
</div>
</c:forEach>
</div>
</div>
</td>
</tr>
<tr>
<th>URL</th>
<td colspan="3">
<div class="td-inner">
<input type="hidden" name="fnctUrl" value="${resultMap.vo.fnctUri }"/>
<c:out value="${resultMap.vo.fnctUri }"/>
</div>
</td>
</tr>
<tr>
<th>기능 설명</th>
<td colspan="3">
<div class="td-inner">
<textarea class="textarea" name="fnctDc" title="기능 설명" rows="8" maxlength="200" ><c:out value="${resultMap.vo.fnctDc }"/></textarea>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</form>
</section>
</div>
</div>
</main>
<form id="backUpData" method="post" >
<input type="hidden" name="srchFnctNm" value="${resultMap.vo.srchFnctNm }" />
<input type="hidden" name="srchFnctUrl" value="${resultMap.vo.srchFnctUrl }" />
<input type="hidden" name="srchFnctDv" value="${resultMap.vo.srchFnctDv }" />
<input type="hidden" name="srchSysDvCd" value="${resultMap.vo.srchSysDvCd }" />
<input type="hidden" name="pageUnit" value="${resultMap.vo.pageUnit }" />
<input type="hidden" name="pageIndex" value="${resultMap.vo.pageIndex }" />
<input type="hidden" name="fnctId" value="" />
<input type="hidden" name="pageDv" value="" />
</form>
</body>
<script>
/* ********************************************************
* 기능 등급 목록 이동
******************************************************** */
const fn_goto_list = function() {
$('#backUpData').attr('action', '<c:url value="/admin/sys/fnct/selectFnctListInqireForm"/>');
$('#backUpData').submit();
}
</script>
</html>

View File

@@ -0,0 +1,506 @@
<%@ 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 : MaMenuUpdtU.jsp
Description : 메뉴 관리
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-01-31 리브가 최초생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@include file ="/WEB-INF/views/comm/admin/Include.jsp" %>
</head>
<body>
<%@include file ="/WEB-INF/views/comm/admin/Header.jsp" %>
<main class="main">
<%@include file ="/WEB-INF/views/comm/admin/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" onclick="fn_init();"><spring:message code="button.init"/></button>
<button class="btn primary" onclick="fn_save();"><spring:message code="button.save"/></button>
<button class="btn primary" onclick="fn_delete();"><spring:message code="button.delete"/></button>
</div>
</div>
<section class="content-section">
<form id="insertForm" method="post" novalidate onsubmit="return false;">
<div class="tree-section">
<div class="tree-section__left">
<div class="form-control-container">
<div class="left">
<h3 class="content-section__title mb-0">메뉴 관리</h3>
</div>
<div class="center">
</div>
<div class="right">
<button class="btn xsm outline primary" type="button" onclick="fn_child_add()"><spring:message code="button.add"/></button>
</div>
</div>
<div class="jstree-wrapper">
<div id="jstree-div"></div>
</div>
</div>
<div class="tree-section__right">
<div class="form-control-container">
<div class="left">
<h3 class="content-section__title mb-0">메뉴 정보</h3>
</div>
<div class="center">
</div>
<div class="right">
</div>
</div>
<div class="table-wrapper">
<input type="hidden" class="input-text" name="menuDepth" id="menuDepth" value="">
<input type="hidden" class="input-text" name="nodeParent" id="nodeParent" value="">
<input type="hidden" class="input-text" name="menuCd" id="menuCd" value="">
<input type="hidden" class="input-text" name="upperMenuCd" id="upperMenuCd" value="">
<input type="hidden" class="input-text" name="upmostMenuCd" id="upmostMenuCd" value="">
<input type="hidden" class="input-text" name="sopmalCd" id="sopmalCd" value="">
<table class="table">
<caption>메뉴 정보</caption>
<colgroup>
<col style="width: 120px;">
<col>
<col style="width: 120px;">
<col>
</colgroup>
<tbody>
<tr>
<th>메뉴명</th>
<td>
<div class="td-inner">
<input type="text" class="input-text xl" name="menuNm" id="menuNm" value="" title="메뉴명" maxlength="50">
</div>
</td>
</tr>
<tr>
<th>메뉴 순서</th>
<td>
<div class="td-inner">
<input type="text" class="input-text" value="" name="sortOrdr" id="sortOrdr" title="메뉴 순서">
</div>
</td>
</tr>
<tr id="trExpsrAt">
<th>노출 위치</th>
<td colspan="3">
<div class="td-inner">
<div class="custom-radio-container">
<c:forEach var="expsrLcDvCd" items="${resultMap.expsrLcDvCd}" varStatus="status">
<div class="custom-radio">
<input type="radio" id="expsrLcDvCd_${expsrLcDvCd.cd}" name="expsrLcDvCd" value="${expsrLcDvCd.cd}" <c:if test="${status.index == 0}">checked </c:if>>
<label for="expsrLcDvCd_${expsrLcDvCd.cd}">${expsrLcDvCd.cdNm}</label>
</div>
</c:forEach>
</div>
</div>
</td>
</tr>
<tr id="mappingUrl">
<th>URL</th>
<td colspan="3">
<div class="td-inner">
<input type="text" class="input-text xl" id="url" name="url" value="" title="URL">
</div>
</td>
</tr>
<tr>
<th>메뉴 설명</th>
<td colspan="3">
<div class="td-inner">
<textarea class="textarea" value="" name="menuDc" id="menuDc" rows="6" maxlength="200" title="메뉴 설명"></textarea>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</form>
</section>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</div>
</main>
</body>
</html>
<script type="text/javascript">
$(document).ready(
function () {
$("#trExpsrAt").hide();
localStorage.removeItem('jstree');
let _f = document.forms['insertForm'];
_setElement(_f['menuNm'], null, {required: 'Y', hname: '메뉴명', minbyte: '1', maxbyte: '50'});
_setElement(_f['sortOrdr'], null, {required: 'Y', hname: '메뉴순서', minbyte: '1', maxbyte: '10', option: 'number'});
_setElement(_f['url'], null, {required: 'Y', hname: 'URL', minbyte: '1', maxbyte: '4000'});
const code_data = ${codeMenuList};
$('#jstree-div').jstree({
"core": {
"check_callback": true,
"themes": {
"stripes": true,
dots: false
},
'data': function (node, callback) {
var parsedData = [];
code_data.forEach(function(item) {
// 부모 노드가 유효한지 확인
if (item.parent === "#" || code_data.some(n => n.id === item.parent)) {
parsedData.push(item);
}
});
callback(parsedData);
}
},
"types" : {
"#" : {
"max_children" : 1,
"max_depth" : 10,
"valid_children" : ["root"]
},
"root" : {
"icon" : "/static/3.3.10/assets/images/tree_icon.png",
"valid_children" : ["default"]
},
"default" : {
"valid_children" : ["default","file"]
},
"file" : {
"icon" : "glyphicon glyphicon-file",
"valid_children" : []
}
},
"plugins" : [
"search","state", "types", "wholerow"
]
}).on('ready.jstree', function(e, data) {
data.instance.close_all();
}).bind('select_node.jstree', function (event, data) {
let nodeData = data.instance.get_node(data.selected);
const parent = nodeData.parent;
let parentDepth = 0; //부모 메뉴DEPTH
if (parent != '#') {
parentDepth = parseInt($("#"+parent+"_anchor").attr('aria-level'), 10);
}
$("#nodeParent").val(parent); //parent
const thisVal = nodeData.original.upmostMenuCd;
const thisDepth = nodeData.original.depth;
if (nodeData.id != 'create') {
//기존 노드 선택 시 create 노드 삭제(삭제처리 안하면 newnode 중복생성 발생)
$('#jstree-div').jstree("delete_node", "#create");
$("#menuDepth").val(nodeData.original.depth); //메뉴DEPTH
$("#menuCd").val(nodeData.original.menuCd); //메뉴코드
$("#upperMenuCd").val(nodeData.original.upperMenuCd); //상위 메뉴코드
$("#upmostMenuCd").val(nodeData.original.upmostMenuCd); //최상단 메뉴코드
$("#menuNm").val(nodeData.original.menuNm); //메뉴명
$("#sortOrdr").val(nodeData.original.sortOrdr); //정렬순서
$("#menuDc").val(nodeData.original.menuDc); //메뉴설명
$("#sopmalCd").val(nodeData.original.sopmalCd); //쇼핑몰코드
$("#url").val(nodeData.original.url); //URL
//노출여부
const expsrLcDvCd = nodeData.original.expsrLcDvCd;
if(expsrLcDvCd != null && expsrLcDvCd != ''){
$("#expsrLcDvCd_"+expsrLcDvCd).prop("checked", true);//노출여부
}else{
$("#expsrLcDvCd_01").prop("checked", true);
}
if (thisVal == "crm" && thisDepth > 0) {
$("#trExpsrAt").show();
}else{
$("#trExpsrAt").hide();
}
} else {
//메뉴 추가
$("#menuCd").val('');
$("#menuNm").val('');
$("#sortOrdr").val('');
$("#expsrLcDvCd_01").prop('checked', true);
$("#url").val('');
$("#menuDc").val('');
$("#menuDepth").val(parentDepth); //메뉴DEPTH
if (nodeData.parent.startsWith("crm")) {
$("#trExpsrAt").show();
}else{
$("#trExpsrAt").hide();
}
}
if (parent == '#') {
//최상이 노드인경우
$("#menuNm").attr("readonly", true);
$("#sortOrdr").attr("readonly", true);
$("input[name=expsrLcDvCd]").attr("disabled",true);
$("#url").attr("readonly", true);
$("#menuDc").attr("readonly", true);
} else {
//그외
$("#menuNm").attr("readonly", false);
$("#sortOrdr").attr("readonly", false);
$("input[name=expsrLcDvCd]").attr("disabled",false);
$("#url").attr("readonly", false);
$("#menuDc").attr("readonly", false);
}
});
// 순서 값 문자 방지
$('#sortOrdr').keyup(function () {
this.value = this.value.replace(/[^0-9]/g, '');
});
});
const _setElement = function (el, v, a) {
if (v) v = v.replace(/__&LT__/g, '<').replace(/__&GT__/g, '>');
if (typeof (el) != 'object') return;
if (v != null)
switch (el.type) {
case 'text':
case 'hidden':
case 'password':
case 'file':
el.value = v;
break;
case 'textarea':
el.value = v;
break;
case 'checkbox':
case 'radio':
if (el.value == v) el.checked = true;
else el.checked = false;
break;
case 'select-one':
for (var i = 0; i < el.options.length; i++)
if (el.options[i].value == v)
el.options[i].selected = true;
break;
default:
var val = v.split(",");
if (val.length > 1) {
for (var i = 0; i < el.length; i++) {
for (var j = 0; j < val.length; j++) {
if (el[i].value == val[j])
el[i].checked = true;
}
}
break;
} else {
for (var i = 0; i < el.length; i++)
if (el[i].value == v)
el[i].checked = true;
el = el[0];
break;
}
}
if (typeof (a) == 'object') {
if (el.type != 'select-one' && el.length > 1)
el = el[0];
for (i in a) el.setAttribute(i, a[i]);
}
}
/* ********************************************************
* 노드 추가
******************************************************** */
const fn_child_add = function () {
if($("#jstree-div").jstree("get_selected", true)[0] !== undefined){
const node = $("#jstree-div").jstree("get_selected", true)[0].original;
if(node.id == 'create'){
alert('노드정보를 입력해주세요.');
return false;
}
if((node.id == 'adm' || node.id == 'usr') && node.depth == '0'){
alert('쇼핑몰 등록을 먼저 해주세요.');
return false;
}
const nodeText = {id: "create", text: "New code"};
$('#jstree-div').jstree().create_node(node.id, nodeText, 'last');
$("#upperMenuCd").val(node.id);
$("#menuCd").val('');
$("#url").val('');
$('#jstree-div').jstree("deselect_all");
$('#jstree-div').jstree("select_node", "#create");
}
else {
alert('상위 노드를 선택하세요.');
return;
}
}
/* ********************************************************
* 노드 저장
******************************************************** */
const fn_save = function () {
if(typeof $("#jstree-div").jstree("get_selected", true)[0]=='undefined'){
alert("노드를 선택하세요.");
return;
}
const node = $("#jstree-div").jstree("get_selected", true)[0].original;
if(node.parent == '#'){
alert("최상위 노드는 수정 불가합니다.");
return;
}
if(!fn_required_check('insertForm')){
return;
}
let nodeId = node.id; // 현재 선택된 노드의 ID
let parentId = $("#nodeParent").val(); // 부모 노드의 ID
let siblingIds = $('#jstree-div').jstree('get_node', parentId).children; // 부모 노드 아래의 모든 자식 노드들 (형제 노드 포함)
let sortOrder = $("#sortOrdr").val(); //변경 순서
let moveMenuCd = fn_move_order(siblingIds, nodeId,sortOrder-1);
if(confirm('노드를 <spring:message code="confirm.common.save"/>')){
var expsrLcDvCd = '';
if($("#sopmalCd").val() == 'CM'){
expsrLcDvCd = $("input[name=expsrLcDvCd]:checked").val();
}
const param =
{
'menuCd' : $("#menuCd").val(),
'upperMenuCd' : $("#upperMenuCd").val(),
'upmostMenuCd' : $("#upmostMenuCd").val(),
'menuNm' : $("#menuNm").val(),
'sortOrdr' : $("#sortOrdr").val(),
'menuDc' : $("#menuDc").val(),
'sopmalCd' : $("#sopmalCd").val(),
'url' : $("#url").val(),
'expsrLcDvCd' : expsrLcDvCd,
'menuDepth' : $("#menuDepth").val(),
'moveMenuCd' : moveMenuCd
};
$.ajax({
type: 'post',
url: '<c:url value="/admin/sys/menu/updateMenuUpdt"/>',
data: param,
success: function (data) {
let message = JSON.parse(data.resBody.result);
if (message.result == 'success') {
alert('<spring:message code="success.common.save"/>');
location.reload();
} else {
alert('<spring:message code="fail.common.save"/>');
}
}
});
}
}
const fn_required_check = function (formId){
let requiredFields = document.querySelectorAll('#'+formId+' [required="Y"]');
let result = true;
for (let field of requiredFields) {
if (!field.value.trim()) {
result = false;
alert(field.title + '을 입력해주세요.'); //메시지
field.focus();
break;
}
}
return result
}
const fn_move_order = function (array,id,order) {
const currentIndex = array.indexOf(id);
if (currentIndex === -1) {
return array;
}
const [removedElement] = array.splice(currentIndex, 1);
array.splice(order, 0, removedElement);
return array;
}
const fn_init = function () {
var idChk = $("#jstree-div").jstree("get_selected", true)[0];
if (idChk != null &&idChk.parent == "#") {
alert("최상위 노드는 초기화가 불가합니다.");
return false;
}
$("#menuNm").val('');
$("#sortOrdr").val('');
$("#expsrLcDvCd_01").prop('checked', true);
$("#url").val('');
$("#menuDc").val('');
}
/* ********************************************************
* 노드 삭제
******************************************************** */
const fn_delete = function () {
var idChk = $("#jstree-div").jstree("get_selected", true)[0].parent;
if (idChk == "#") {
alert("최상위 노드는 삭제 불가합니다.");
return false;
}
if(confirm('노드를 <spring:message code="confirm.common.delete"/>')){
$.ajax({
type: "POST",
url: '<c:url value="/admin/sys/menu/deleteMenuDel"/>',
data: {
'menuCd' : $("#menuCd").val(),
'sopmalCd' : $("#sopmalCd").val()
},
success: function (data) {
if (data) {
alert('<spring:message code="success.common.delete"/>');
location.reload();
} else {
alert('<spring:message code="fail.common.delete"/>');
}
},
error: function (request, status, error) {
console.log(error);
}
});
}
}
</script>

View File

@@ -0,0 +1,569 @@
<%@ 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 : maFnctListInqireR.jsp
Description : 기능 목록 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2023-12-20 김혜지 최초 생성(퍼블리싱 적용)
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@include file ="/WEB-INF/views/comm/admin/Include.jsp" %>
<script>
$(document).ready(function(){
let pageIndex = '<c:out value="${ resultMap.paramVO.pageIndex }"/>';
let pageUnit = '<c:out value="${ resultMap.paramVO.pageUnit }"/>';
let pageDv = '<c:out value="${ resultMap.paramVO.pageDv }"/>';
if (pageDv == '') {
fn_select_fnct_list(pageIndex, pageUnit);
} else {
fn_select_fnct_list('1', '10');
}
$('input').keydown(function(event) {
if (event.keyCode === 13) {
event.preventDefault();
};
});
});
/* ********************************************************
* 기능 목록조회
******************************************************** */
const fn_select_fnct_list = function(pageIndex, pageUnit) {
if (pageIndex == undefined || pageUnit == '') {
$('#pageIndex').val('1');
} else {
$('#pageIndex').val(pageIndex);
}
let params = $('#srchForm').serialize();
if (pageUnit != undefined || pageUnit == '') {
params += '&pageUnit=' + pageUnit;
} else {
params += '&pageUnit=' + $('#pageUnit').val();
}
$.ajax({
type : 'post',
url : '<c:url value="/admin/sys/fnct/selectFnctListInqire"/>',
data : params,
success : function(data) {
$('#pageDiv').html(data);
$('#pageUnit').niceSelect();
}
});
}
/**********************************************
* 기능 검색 초기화
***********************************************/
const fn_clear_input = function() {
$('[name=srchFnctNm]').val('');
$('[name=srchFnctUrl]').val('');
$('#srchFnct-select').val('').prop('selected', true);
// nice-select 설정
$('#srchFnct-select').next().find('li').removeClass('selected');
$('#srchFnct-select').next().find('[data-value=전체]').addClass('selected');
$('#srchFnct-select').next().find('.current').text('전체');
};
/**********************************************
* 기능 등록 화면 이동
***********************************************/
const fn_move_fnctRegist = function() {
$('#srchForm').attr('action', '<c:url value="/admin/sys/fnct/selectFnctRegistForm"/>');
$('#srchForm').attr('method', 'post');
$('#srchForm').submit();
};
/**********************************************
* 기능 수정 화면 이동
***********************************************/
const fn_move_fnctDetail = function(_fnctCd) {
$('#fnctCd').val(_fnctCd);
$('#srchForm').attr('action', '<c:url value="/admin/sys/fnct/selectFnctUpdtForm"/>');
$('#srchForm').attr('method', 'post');
$('#srchForm').submit();
};
/**********************************************
* 기능 엑셀 다운로드
***********************************************/
const fn_down_excelFile = function() {
$('#srchForm').attr('action', '<c:url value="/admin/sys/fnct/excelFileDownload"/>');
$('#srchForm').attr('method', 'post');
$('#srchForm').submit();
};
</script>
</head>
<body>
<%@include file ="/WEB-INF/views/comm/admin/Header.jsp" %>
<main class="main">
<%@include file ="/WEB-INF/views/comm/admin/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">
<a href="" class="btn primary">저장</a>
</div>
</div>
<section class="content-section">
<div class="tree-section">
<div class="tree-section__left">
<div class="form-control-container">
<div class="left">
<h3 class="content-section__title mb-0">메뉴 관리</h3>
</div>
<div class="center">
</div>
<div class="right">
<button class="btn xsm dark">삭제</button>
<button class="btn xsm outline primary">추가</button>
</div>
</div>
<div class="jstree-wrapper">
<div id="jstree-div">
<ul>
<li data-jstree='{ "opened" : true }'>셀러메뉴
<ul>
<li data-jstree='{ "selected" : true }'>상품관리(S00001)
<ul>
<li>1</li>
</ul>
</li>
<li>주문관리(S00002)
<ul>
<li>1</li>
</ul>
</li>
<li>회원/혜택관리(S00012)
<ul>
<li>1</li>
</ul>
</li>
<li>발주관리(S00039)
<ul>
<li>1</li>
</ul>
</li>
<li>결제링크(S00123)
<ul>
<li>1</li>
</ul>
</li>
<li>매출/정산(S00059)
<ul>
<li>1</li>
</ul>
</li>
<li>SMS관리(S00067)
<ul>
<li>1</li>
</ul>
</li>
<li>SMS셀러관리(S00076)
<ul>
<li>1</li>
</ul>
</li>
<li>통계/현황(S00108)
<ul>
<li>1</li>
</ul>
</li>
<li>알림링크(S00083)
<ul>
<li>1</li>
</ul>
</li>
<li>환경설정(S00086)
<ul>
<li>1</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
</div>
<div class="tree-section__right">
<div class="form-control-container">
<div class="left">
<h3 class="content-section__title mb-0">메뉴 정보</h3>
</div>
<div class="center">
</div>
<div class="right">
</div>
</div>
<div class="table-wrapper">
<table class="table">
<caption>해당 테이블에 대한 설명</caption>
<colgroup>
<col style="width: 120px;">
<col>
<col style="width: 120px;">
<col>
</colgroup>
<tbody>
<tr>
<th>메뉴명</th>
<td>
<div class="td-inner">
<input type="text" class="input-text md" value=""
title="해당 인풋에 대한 설명">
</div>
</td>
<th>상위 메뉴</th>
<td>
<div class="td-inner">
<input readonly type="text" class="input-text md"
value="관리자 시스템 > 판매상품" title="해당 인풋에 대한 설명">
<a href="#menu-check-pop" rel="modal:open"
class="btn sm gray">조회</a>
</div>
</td>
</tr>
<tr>
<th>Depth</th>
<td>
<div class="td-inner">
<input type="text" class="input-text" value="" title="해당 인풋에 대한 설명">
</div>
</td>
<th>순서</th>
<td>
<div class="td-inner">
<input type="text" class="input-text" value="" title="해당 인풋에 대한 설명">
</div>
</td>
</tr>
<tr>
<th>노출 여부</th>
<td colspan="3">
<div class="td-inner">
<div class="custom-radio-container">
<div class="custom-radio">
<input type="radio" id="r-3" name="r-group02" checked>
<label for="r-3">노출</label>
</div>
<div class="custom-radio">
<input type="radio" id="r-4" name="r-group02">
<label for="r-4">미노출</label>
</div>
<div class="custom-radio inner-input">
<input type="radio" id="r-5" name="r-group02">
<label for="r-5">
</label>
<div class="input-container gap-4">
<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>
</div>
</div>
</div>
</td>
</tr>
<tr>
<th>접근 권한</th>
<td colspan="3">
<div class="td-inner">
<div class="custom-radio-container">
<div class="custom-radio">
<input type="radio" id="r-1" name="r-group01" checked>
<label for="r-1">제한</label>
</div>
<span class="parentheses">(</span>
<div class="b-checkbox-container inner">
<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">등급1</span>
</label>
<label class="b-checkbox checkbox">
<input type="checkbox" value="">
<span class="check"></span>
<span class="control-label">등급2</span>
</label>
<label class="b-checkbox checkbox">
<input type="checkbox" value="">
<span class="check"></span>
<span class="control-label">등급3</span>
</label>
</div>
<span class="parentheses">)</span>
<div class="custom-radio">
<input type="radio" id="r-2" name="r-group01">
<label for="r-2">제한없음</label>
</div>
</div>
</div>
</td>
</tr>
<tr>
<th>연결 방법</th>
<td colspan="3">
<div class="td-inner">
<div class="custom-radio-container">
<div class="custom-radio inner-input">
<input type="radio" id="r-6" name="r-group03">
<label for="r-6">
</label>
<div class="input-container gap-4">
<div class="select-box">
<select title="해당 셀렉트에 대한 설명">
<option value="">카테고리</option>
</select>
</div>
</div>
</div>
<div class="custom-radio inner-input">
<input type="radio" id="r-7" name="r-group03">
<label for="r-7">
</label>
<div class="input-container gap-4">
<input type="text" class="input-text" value=""
title="해당 인풋에 대한 설명">
</div>
</div>
</div>
</div>
</td>
</tr>
<tr>
<th>메뉴 설명</th>
<td colspan="3">
<div class="td-inner">
실물 상품 정보를 관리하는 메뉴입니다.
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="form-control-container">
<div class="left">
<h3 class="content-section__title mb-0">상품 정렬</h3>
</div>
<div class="center">
</div>
<div class="right">
<button class="btn sm dark">삭제</button>
<button class="btn sm primary outline">추가</button>
</div>
</div>
<div class="table-wrapper">
<table class="table vertical">
<caption>해당 테이블에 대한 설명</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 4%;">
<col style="width: auto">
<col style="width: 14%;">
<col style="width: 32%;">
<col style="width: 4%;">
</colgroup>
<thead>
<tr>
<th>
<label class="b-checkbox checkbox is-medium check-all">
<input type="checkbox" value="">
<span class="check"></span>
</label>
</th>
<th>기능명</th>
<th>기능 구분</th>
<th>URL</th>
<th>대표</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<label class="b-checkbox checkbox is-medium">
<input type="checkbox" value="">
<span class="check"></span>
</label>
</td>
<td class="text-left">실물 상품 등록화면 이동</td>
<td>화면이동</td>
<td>/mng/goods/realgoods/goodsRegistView.do</td>
<td>
<div class="custom-radio no-text">
<input type="radio" id="r-8" name="r-group04">
<label for="r-8"></label>
</div>
</td>
</tr>
<tr>
<td>
<label class="b-checkbox checkbox is-medium">
<input type="checkbox" value="">
<span class="check"></span>
</label>
</td>
<td class="text-left">실물 상품 등록화면 이동</td>
<td>화면이동</td>
<td>/mng/goods/realgoods/goodsRegistView.do</td>
<td>
<div class="custom-radio no-text">
<input type="radio" id="r-9" name="r-group04">
<label for="r-9"></label>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</section>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</div>
</main>
<!-- 메뉴 조회 모달 -->
<div id="menu-check-pop" class="modal" style="max-width: 520px;">
<div class="modal-header">
<h4>메뉴 조회</h4>
</div>
<div class="modal-content" style="min-height: 400px;">
<div class="jstree-wrapper">
<div id="jstree-div2">
<ul>
<li data-jstree='{ "opened" : true }'>셀러메뉴
<ul>
<li data-jstree='{ "selected" : true }'>상품관리(S00001)
<ul>
<li>1</li>
</ul>
</li>
<li>주문관리(S00002)
<ul>
<li>1</li>
</ul>
</li>
<li>회원/혜택관리(S00012)
<ul>
<li>1</li>
</ul>
</li>
<li>발주관리(S00039)
<ul>
<li>1</li>
</ul>
</li>
<li>결제링크(S00123)
<ul>
<li>1</li>
</ul>
</li>
<li>매출/정산(S00059)
<ul>
<li>1</li>
</ul>
</li>
<li>SMS관리(S00067)
<ul>
<li>1</li>
</ul>
</li>
<li>SMS셀러관리(S00076)
<ul>
<li>1</li>
</ul>
</li>
<li>통계/현황(S00108)
<ul>
<li>1</li>
</ul>
</li>
<li>알림링크(S00083)
<ul>
<li>1</li>
</ul>
</li>
<li>환경설정(S00086)
<ul>
<li>1</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
</div>
<div class="modal-footer">
<a href="#" rel="modal:close" class="btn outline">닫기</a>
<button class="btn primary">확인</button>
</div>
</div>
<script>
$(function () {
$('#jstree-div').jstree({
"core": {
"themes": {
"stripes": true,
dots: false,
},
}
},);
$('#jstree-div2').jstree({
"core": {
"themes": {
"stripes": true,
dots: false,
},
}
},);
});
</script>
</body>
</html>

View File

@@ -0,0 +1,117 @@
<%@ 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 : MbrCrmInfoPopupR.jsp
Description :
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-02-19 추지훈
--%>
<script>
$(document).ready(function() {
fn_add_crm_menu_class("leftLog");
$("#crmMbtlnb").text(fn_format_mbtlnb($("#crmMbtlnb").text()));
});
</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">고객 정보</h5>
<button type = "button" class="mini-info-content__close"><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>
<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>사용중인 SNS 또는 POS</th>
<td>
<c:choose>
<c:when test="${not empty resultMap.sms}">
<c:forEach var="sms" items="${resultMap.sms}">
<c:if test="${sms.extrlIntrlckDvCd eq '01'}">
<i class="icon icon_word-badge_kakao"></i>
</c:if>
<c:if test="${sms.extrlIntrlckDvCd eq '02'}">
<i class="icon icon_word-badge_naver"></i>
</c:if>
<c:if test="${sms.extrlIntrlckDvCd eq '03'}">
<i class="icon icon_word-badge_pos"></i>
</c:if>
</c:forEach>
</c:when>
<c:otherwise>
없음
</c:otherwise>
</c:choose>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>

View File

@@ -0,0 +1,255 @@
<%@ 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="${maMbrSrchVO.sortDv eq 'recent'}">selected="selected"</c:if>>최근 가입순</option>
<option value="mlgDesc" <c:if test="${maMbrSrchVO.sortDv eq 'mlgDesc'}">selected="selected"</c:if>>마일리지 많은순</option>
<option value="mlgAsc" <c:if test="${maMbrSrchVO.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">
</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}" varStatus="status">
<tr>
<td>
<label class="b-checkbox checkbox is-medium">
<input type="checkbox"
class = "chk"
value="<c:out value='${resultList.mbrInnb}' />"
name="mbrInnb">
<span class="check"></span>
<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">
</label>
</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><%--블랙리스트화이트리스트지정--%>
<span>
<button type="button" data-info="info01" class="mbrInfo blue-7" id="mbrId${status.index}" mbr-innb = "<c:out value="${resultList.mbrInnb}"/>" mbr-dv-cd = "<c:out value="${resultList.mbrDvCd}"/>">
<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-badge08"></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>
</span>
<label for = "mbrId${status.index}">
<c:choose>
<c:when test = "${resultList.appnDvCd eq '02'}">
<span class="black-list">
B<span class="visually-hidden">블랙리스트</span>
</span>
</c:when>
<c:when test = "${resultList.appnDvCd eq '03'}">
<span class="white-list">
W<span class="visually-hidden">화이트리스트</span>
</span>
</c:when>
</c:choose>
</label>
</td>
<td>
<c:out value="${resultList.mbrNm}"/>
</td>
<td>
<c:out value="${resultList.maskingEmail}"/>
</td>
<td class="mbtlnb">
<c:out value="${resultList.mbtlnb}"/>
</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>
<fmt:formatNumber var="mbrMil" value="${resultList.mileage}" type="number"/>
<c:choose>
<c:when test="${empty mbrMil || mbrMil == '0' }">
0
</c:when>
<c:otherwise>
<c:out value="${mbrMil}"/>
</c:otherwise>
</c:choose>
</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="${ maMbrSrchVO.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,538 @@
<%@ 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 : MbrListInqireRForm.jsp
Description :회원 목록 검색 폼
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-01-15 김혜인 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@include file ="/WEB-INF/views/comm/admin/Include.jsp" %>
<script type="text/javascript">
$(document).ready(function () {
fn_init();
});
/*******************************************
검색 조건 이벤트 설정
********************************************/
function fn_init() {
/****************************************************
검색 폼 이벤트
****************************************************/
/*
* 검색조건 > 초기화 버튼 클릭 이벤트
*/
$('#btnResetForm').on('click', function () {
fn_reset_form('mbrSrchSection');
});
/*검색 버튼(검색어 지정 안할 시 검색 안됨)*/
$("#srchBtn").on('click', function () {
fn_select_list(1);
});
/*검색어 휴대폰 번호 숫자만허용*/
$("#srchKywordMb").on('input', function () {
fn_apply_regExp_mbtlnb("#listForm", "#srchKywordMb", $(this).val());
});
/****************************************************
검색 폼 이벤트
****************************************************/
/*
* 리셀러 지정 (회원 체크)
*/
$(document).on("click", ".rslrAppn", function () {
let noAppenArray = [];
const appnDvCd = $(this).val();
const appnDvCdNm = $(this).attr("appn-nm");
console.log(appnDvCdNm);
// 해제할 회원수를 체크한다
if ($('input[name=mbrInnb]:checked').length > 0) {
$('input[name=mbrInnb]:checked').each(function () {
//해제할 회원 중 리셀러 지정안된 회원이 포함되어 있으면 noAppenArray에 추가한다.
if ($(this).siblings("input[name='appnDvCd']").val() == appnDvCd) {
noAppenArray.push(this.value);
}
});
//지정안된 회원 수 존재 시 안내 문구를 호출한다.
if (noAppenArray.length > 0) {
alert("이미 지정된 회원이 포함되어 있습니다.");
} else {
//지정 사유 작성 모달
$("#resnTextArea").val('');
$("#resnModal").modal("show");
$("#resnTextArea").prop("name", "appnMemo");
$("#resnDv").val("resl");
$("#appenDvCdNm").val(appnDvCdNm);
$("#appnDvCd").val(appnDvCd);
}
} else {
//회원이 체크되지 않으면 안내 문구를 호출한다
alert("회원을 체크해주세요.");
}
});
//리셀러 지정 , 탈퇴 회원 사유 버튼
$(document).on("click", "#registBtn", function (e) {
//사유구분
const resnDv = $("#resnDv").val();
let appenDvCdNm = $("#appenDvCdNm").val();
let appnDvCd = $("#appnDvCd").val();
//구분 코드, 코드명(리셀러)
if (resnDv === 'resl') {
appenDvCdNm = $("#appenDvCdNm").val();
appnDvCd = $("#appnDvCd").val();
}
//사유 내용
const resnCn = $("#resnTextArea").val();
//체크된 회원
let mbrArr = [];
//체크된 회원 고유번호
let mbrDvCdArr = [];
//체크된 해당 회원의 지정고유번호
let appnInnbArr = [];
//체크된 회원 고유번호
$('input[name=mbrInnb]:checked').each(function () {
mbrArr.push(this.value);
let appnInnb = $(this).closest("td").find('input[name=appnInnb]').val();
appnInnbArr.push(appnInnb);
let mbrDvCd = $(this).closest("td").find('input[name=mbrDvCd]').val();
mbrDvCdArr.push(mbrDvCd);
});
if (resnDv === 'resl') {//리셀러 지정
fn_resel_upt(mbrArr, mbrDvCdArr ,appnInnbArr, appenDvCdNm, appnDvCd, resnCn);
} else { //회원 탈퇴
fn_withdrawal_reg(mbrArr, mbrDvCdArr , resnCn);
}
});
/*
* 회원 탈퇴
*/
$(document).on("click", "#withdrawal", function (e) {
const withdrawal = e.target.id;
// 탈퇴할 회원수를 체크한다
if ($('input[name=mbrInnb]:checked').length > 0) {
//지정 사유 작성 모달
$("#resnTextArea").val('');
$("#resnModal").modal();
$("#resnTextArea").prop("name", "memo");
$("#resnDv").val(withdrawal);
} else {
//해제할 회원이 체크되지 않으면 안내 문구를 호출한다
alert("탈퇴할 회원을 지정해주세요.");
}
});
// 테이블 체크박스 전체 선택
$(document).on("click", "#chkA", function () {
if($(this).is(':checked')){
$(".chk").prop('checked', true);
}else{
$(".chk").prop('checked', false);
}
});
// 목록에서 체크 해제시 전체 체크박스 해제 및 목록 항목 전체 체크 시 전체체크 버튼 true
$(document).on("click", ".chk", function () {
let length = $(".chk").length;
let chcedLen = $(".chk:checked").length;
if (length == chcedLen) {
$("#chkA").prop('checked', true);
}else{
$("#chkA").prop('checked', false);
}
});
//해당 회원 정보 조회
$(document).on("click",".mbrInfo",function(){
const mbrInnb = $(this).attr("mbr-innb");
const mbrDvCd = $(this).attr("mbr-dv-cd");
const sopmalCd = $("#sopmalCd").val();
fn_select_crm_mini_info(this,mbrInnb,mbrDvCd,'#modalDiv',sopmalCd);
});
}
/***********************************************
* 블랙리스트 화이트리스트 일반
***********************************************/
const fn_resel_upt = function (mbrArr, mbrDvCdArr ,appnInnbArr, appenDvCdNm, appnDvCd, resnCn) {
let url = "";
let confirmMessage = "";
//확인 구문 분기
if (appnDvCd == '01') {
confirmMessage = appenDvCdNm + "으로";
} else if (appnDvCd == '02' || appnDvCd == '03') {
confirmMessage = appenDvCdNm + "로";
}
url = "<c:url value='/admin/use/mbr/updateMaMbrRslrMvmn'/>"
if (confirm(confirmMessage + ' <spring:message code="confirm.common.insert"/>')) {
$.ajax({
type: "post",
url: url,
data: {
idntfcInfoArr : mbrArr
,appnInnbArr : appnInnbArr
,appnDvCd : appnDvCd
,originDvCd : '02'
,appnMemo : resnCn
,idntfcStdrCd : 'mbr_innb'
,mbrDvCdArr: mbrDvCdArr
,sopmalCd : $("#sopmalCd").val()
},
success: function (resultHtml) {
alert("<spring:message code="success.common.insert"/>");
$("#resnModal > a").each(function () {
if (this.href.indexOf('#close-modal')) {
$(this).click();
}
});
$("#resnModal").remove();
fn_select_list($("#pageIndex").val(), $("#pageUnit").val());
}
});
}
}
/***********************************************
* 회원 탈퇴 함수
***********************************************/
const fn_withdrawal_reg = function (mbrArr, mbrDvCdArr , resnCn) {
if (confirm('회원 탈퇴를 <spring:message code="confirm.common.insert"/>')) {
$.ajax({
type: "post",
url: "<c:url value='/admin/use/mbr/updateMaMbrSecsnUpdt'/>",
data: {
mbrarr: mbrArr
,mbrDvCdArr:mbrDvCdArr
,secsnResn: resnCn
,sopmalCd : $("#sopmalCd").val()
},
success: function (resultHtml) {
alert("<spring:message code="success.common.insert"/>");
$("#resnModal > a").each(function () {
if (this.href.indexOf('#close-modal')) {
$(this).click();
}
});
$("#resnModal").remove();
fn_select_list(1);
}
});
}
}
/* ********************************************************
* 목록 조회 function
******************************************************** */
//회원 목록 조회(ajax)
const fn_select_list = function (pageIndex, pageUnit) {
let valList = [];
/*검색어 미입력 찾기*/
$('#mbrSrchSection').find('input').each(function () {
let value = $(this).val();
if (value !== '') {
valList.push(value);
}
});
/*쇼핑몰 선택 찾기*/
let sopmalSelectVal = $("#sopmalCd").val();
if (valList.length === 0 || sopmalSelectVal === '') {
if (valList.length === 0 && sopmalSelectVal === '') {
alert("쇼핑몰과 검색어를 입력해주세요.");
} else if (valList.length === 0 && sopmalSelectVal !== '') {
alert("검색어를 입력해주세요.");
} else if (valList.length !== 0 && sopmalSelectVal === '') {
alert("쇼핑몰을 지정해주세요.");
}
return false;
}
let dataStr;
if (!pageIndex) {
$('#pageIndex').val(1);
} else {
$('#pageIndex').val(pageIndex);
}
/*회원 구분 코드 get*/
const mbrDvCd = $("#sopmalCd option:selected").attr("mbr-dv-cd");
if (!pageUnit) {
dataStr = $('#listForm').serialize()+ '&srchMbrDvCd=' + mbrDvCd;
} else {
if ($('#pageUnit').length) {
$('#pageUnit').val(pageUnit);
dataStr = $('#listForm').serialize()+ '&srchMbrDvCd=' + mbrDvCd;
} else {
dataStr = $('#listForm').serialize() + '&pageUnit=' + pageUnit + '&srchMbrDvCd=' + mbrDvCd;
}
}
$.ajax({
type: "post",
url: "<c:url value='/admin/use/mbr/selectMaMbrListInqire'/>",
data: dataStr,
success: function (resultHtml) {
$('#pageDiv').html(resultHtml);
fn_set_niceSelect_datePicker('#pageDiv');
let mbtlnb = '';
$(".mbtlnb").each(function(){
mbtlnb = fn_format_mbtlnb($(this).text().trim());
mbtlnb = mbtlnb.replace(/(\d{3})-(\d{4})-(\d{4})/, "$1-****-$3");
$(this).text(mbtlnb);
});
}
});
}
//검색 엔터 클릭시 목록 조회
document.addEventListener('keydown', function (event) {
if (event.keyCode === 13) {
event.preventDefault();
//모달창 visible 여부로 몪록 조회 혹은 사유 내용 등록 이벤트 처리
if (!$("#resnModal").is(":visible")) {
fn_select_list(1);
} else {
$("#registBtn").click();
}
}
});
</script>
</head>
<body>
<%-- 상단메뉴 공통화 적용 : 2023-11-30 / 박철민 추가 --%>
<%@include file ="/WEB-INF/views/comm/admin/Header.jsp" %>
<main class="main">
<%-- 좌측메뉴 공통화 적용 : 2023-11-30 / 박철민 추가 --%>
<%@include file ="/WEB-INF/views/comm/admin/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>
<form id="listForm">
<section class="content-section" id="mbrSrchSection">
<span class="red-7">*검색어는 정확히 입력해주세요</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">
<div class="select-box">
<select title="검색어 구분" name="sopmalCd" id="sopmalCd">
<option value="">선택</option>
<c:forEach var="sopmal" items="${resultMap.sopmal}">
<option value="<c:out value = '${sopmal.sopmalCd}'/>"
mbr-dv-cd="<c:out value="${sopmal.mbrDvCd}"/>">
<c:out value='${sopmal.sopmalNm}'/>
</option>
</c:forEach>
</select>
</div>
</div>
</td>
</tr>
<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="left"></div>
<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 class="right">
</div>
</div>
</section>
<div id="pageDiv">
<%--임시 section--%>
<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 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">
<div class="form-control-container">
<div class="left">
<c:forEach var="appnDv" items="${resultMap.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="${resultMap.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">
</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>
<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">
<button type="button" class="btn dark no-min" id="withdrawal">탈퇴</button>
</div>
</div>
</div>
</section>
</div>
</form>
<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,356 @@
<%@ 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" %>
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld"%>
<%--
Class Name : GradBnefSrch.jsp
Description : 등급별 혜택 검색 폼 jsp
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
since : 2024.01.10 김혜인 최초 생성
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%@include file="/WEB-INF/views/comm/admin/Include.jsp" %>
</head>
<script>
$(document).ready(function () {
//검색폼 데이트피커 제어
fn_set_dateRange_function("#dateRange", "juscrbStrtDt", "juscrbEndDt", "juscrbStrtDt");
//번호 포매팅
$("#mbtlnb").val(fn_format_mbtlnb($("#mbtlnb").val()));
$("#telnb").val(fn_format_mbtlnb($("#telnb").val()));
//이메일 셀렉트박스 값 set
$('[name=emailAderss]').change(function () {
let selectedEmail = $("#emailAderss option:selected").val();
if(selectedEmail !== '99'){
selectedEmail = $("#emailAderss option:selected").text().trim();
}else{//직접입력
selectedEmail = '';
}
$('#email2').val(selectedEmail);
});
$('input').keydown(function (event) {
if (event.keyCode === 13) {
event.preventDefault();
}
});
$('#pwChngAt').on("click",function (){
if($(this).is(":checked")){
$("#pwDiv").show();
fn_ctrl_disable('',["#pwDiv"]);
}else{
$("#pwDiv").hide();
fn_ctrl_disable(["#pwDiv"]);
}
});
});
/* ********************************************************
* 업무사용자 수정
******************************************************** */
const fn_update = function () {
if (!confirm('업무사용자를 <spring:message code="confirm.common.update"/>')) return;
fn_make_eamil();
let data = $('#jobuserUpdateForm').serialize();
$.ajax({
type: 'post',
url: '<c:url value="/mngr/setup/mngr/updateMngrInfoUpdt"/>',
data: data,
success: function (result) {
alert('<spring:message code="success.common.update"/>');
/*비밀번호 변경 시*/
let chngePwAt = JSON.parse(result.resBody.result);
chngePwAt = chngePwAt.chngePwAt;
if (chngePwAt === 'Y') {
location.href = "/logout";
} else {
location.href = "/admin/use/mngr/selectMngrInfoInqireForm";
}
}
});
}
/* ********************************************************
* 접속이력 검색
******************************************************** */
const fn_select_history = function (_pageIndex) {
$('#title').text('접속이력 조회');
$('#subTitle').text('접속일자');
let mngrInnb = $('#mngrInnb').val();
let srchStartDate = $('#juscrbStrtDt').val();
let srchEndDate = $('#juscrbEndDt').val();
let params = {
'mngrInnb': mngrInnb,
'srchStartDate': srchStartDate,
'srchEndDate': srchEndDate,
'pageIndex': _pageIndex,
'pageUnit': '5'
};
$.ajax({
type: 'post',
url: '<c:url value="/admin/use/mngr/selectJobUserConnHistListInqirePopup"/>',
data: params,
success: function (result) {
$('#jobUserList').html('');
$('#jobUserList').html(result);
}
});
}
/* ********************************************************
* email 합치기
******************************************************** */
const fn_make_eamil = function () {
let domain = $('[name=email2]').val();
let id = $('[name=email1]').val();
$('[name=email]').val(id + '@' + domain);
}
/* ********************************************************
* 검색조건 > 날짜 전체 클릭 시 날짜 설정 초기화
******************************************************** */
const fn_reset_date = function (strtDate, endDate) {
$('#' + strtDate).datepicker().datepicker("setDate", '');
$('#' + endDate).datepicker().datepicker("setDate", '');
}
</script>
<body>
<%@include file="/WEB-INF/views/comm/admin/Header.jsp" %>
<main class="main">
<%-- 좌측메뉴 공통화 적용 : 2023-11-30 / 박철민 추가 --%>
<%@include file="/WEB-INF/views/comm/admin/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 primary" onclick="fn_update();"><spring:message
code="button.save"/></button>
</div>
</div>
<section class="content-section">
<form id="jobuserUpdateForm" class="common-form">
<input type="hidden" name="email" value=""/>
<input type="hidden" name="mngrInnb" id="mngrInnb" value="${resultMap.detail[0].mngrInnb}"/>
<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>사용자 명<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<input class="input-text md" type="text" id="mngrNm" name="mngrNm" title="사용자명"
value="${ resultMap.detail[0].mngrNm }" maxlength="20">
</div>
</td>
<th>아이디</th>
<td>
<div class="td-inner">
<c:out value="${ resultMap.detail[0].mngrId }"/>
</div>
</td>
</tr>
<tr>
<th>부서명</th>
<td>
<div class="td-inner">
<c:out value="${ resultMap.detail[0].partnm }"/>
</div>
</td>
<th>이메일<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<input class="input-text sm" type="text" id="email1" name="email1" title="이메일1"
value="${ resultMap.detail[0].email1 }" maxlength="20">
<span>@</span>
<input class="input-text sm" type="text" id="email2" name="email2" title="이메일2"
value="${ resultMap.detail[0].email2 }" maxlength="20">
<div class="select-box" id="emailAderssDv">
<div class="select-box">
<select id="emailAderss" name="emailAderss">
<c:forEach var="email" items="${resultMap.emailCdList}">
<option value="<c:out value="${email.cd}"/>" ${f:setSelected(email.cd, '99')}>
<c:out value="${email.cdNm}"/>
</option>
</c:forEach>
</select>
</div>
</div>
</div>
</td>
</tr>
<tr>
<th>전화번호</th>
<td>
<div class="td-inner">
<input class="input-text md" type="text" id="telnb" name="telnb" title="전화번호"
oninput="fn_set_event(this, 'keyup', fn_fmt_telno)"
placeholder="'-'없이 입력"
value="<c:out value="${resultMap.detail[0].telnb}"/>" maxlength="12">
</div>
</td>
<th>휴대전화번호<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<input class="input-text md" type="text" id="mbtlnb" name="mbtlnb"
title="휴대전화번호" oninput="fn_set_event(this, 'keyup', fn_fmt_telno)"
placeholder="'-'없이 입력"
value="<c:out value="${resultMap.detail[0].mbtlnb}"/>" maxlength="13">
</div>
</td>
</tr>
<tr>
<th>비밀번호
<label class="b-checkbox checkbox">
<input type="checkbox" value="Y" name="pwChngAt" id="pwChngAt">
<span class="check"></span>
<span class="control-label">변경</span>
</label>
</th>
<td colspan="3">
<div class="td-inner" id="pwDiv" style="display: none">
<div class="address-group">
<div class="address-line">
<span class="address-line__title">현재 비밀번호&emsp;&emsp;</span>
<input type="password" id="recentPw" class="input-text md" value=""
title="현재 비밀번호" name="password" disabled>
</div>
<div class="address-line">
<span class="address-line__title">비밀번호 변경&emsp;&emsp;</span>
<input type="password" id="chngPw" class="input-text md" value=""
title="비밀번호 변경" name="chngPw" disabled>
<span class="gray-6">&emsp;* 10-20자, 영문 대소문자 또는 숫자, 특수문자 중 2가지 이상 조합</span>
</div>
<div class="address-line">
<span class="address-line__title">비밀번호 변경 확인</span>
<input type="password" id="cnfirmChngPw" class="input-text md" value=""
title="비밀번호 변경 확인" name="cnfirmChngPw" disabled>
<span class="gray-6">&emsp;* 사용 가능 특수문자 : ! # $ % & ( ) * + - / : < = > ? @ [ \ ] ^ _ { | } ~</span>
</div>
</div>
</div>
</td>
</tr>
<tr>
<th>관리자 구분</th>
<td>
<div class="custom-radio-container" id="userDv">
<c:forEach var="mngrDv" items="${resultMap.mngrDvCdList}">
<c:if test = "${mngrDv.cd eq resultMap.detail[0].mngrDv}"><c:out value="${mngrDv.cdNm}"/></c:if>
</c:forEach>
</div>
</td>
</tr>
<tr>
<th>최종접속일시</th>
<td>
<div class="td-inner">
<c:out value="${resultMap.detail[0].lastConectDt }"/>
<a href="#jobUser-modal" rel="modal:open" class="btn xsm gray ml-5"
onclick="fn_select_history('1'); fn_reset_form('srchFormTb');">
<spring:message code="button.connectionHistory"/>
</a>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</form>
</section>
</div>
</div>
</main>
<!-- 접속이력조회 모달 -->
<div id="jobUser-modal" class="modal" style="max-width: 900px; ">
<div class="modal-header">
<h4 id="title"></h4>
</div>
<div class="modal-content">
<form>
<div class="table-wrapper">
<table class="table">
<caption>검색창</caption>
<colgroup>
<col style="width: 12%;">
<col>
</colgroup>
<tbody id="his">
<tr>
<th id="subTitle"></th>
<td colspan="3" id="srchFormTb">
<div class="td-inner">
<div class="input-container">
<%-- 검색 종료일 현재 날짜 --%>
<c:set var="today" value="<%=new java.util.Date()%>"/>
<!-- 검색 조건 시작일 -->
<input type="text" name="srchStartDate" id="juscrbStrtDt" class="datepicker"
title="시작 날짜 선택" autocomplete="off" onchange="fn_check_date('juscrb')"/>
<span class="tilde">~</span>
<!-- 검색 조건 종료일 -->
<input type="text" name="srchEndDate" id="juscrbEndDt" class="datepicker"
title="종료 날짜 선택" autocomplete="off" onchange="fn_check_date('juscrb')"/>
</div>
<div class="dateRange-btnContainer" id="dateRange">
<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>
</tbody>
</table>
</div>
<div class="form-control-container">
<div class="left"></div>
<div class="center">
<button type="button" class="btn outline" onclick="fn_reset_form('srchFormTb');"><spring:message
code="button.init"/></button>
<button type="button" class="btn primary" id="btn_search" onclick="fn_select_history('1');"><spring:message
code="button.search"/></button>
</div>
<div class="right"></div>
</div>
<div id="jobUserList"></div>
</form>
</div>
<div class="modal-footer">
<a href="#" rel="modal:close" class="btn outline" onclick="">닫기</a>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,425 @@
<%@ 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"%>
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld"%>
<%--
Class Name : maJobUserC.jsp
Description : 업무 사용자 등록
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
since : 2023.12.19 김세엽 최초 생성
2024-01-16 최범식 수정
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@include file ="/WEB-INF/views/comm/admin/Include.jsp" %>
</head>
<script>
$( document ).ready(function() {
$('#noData').hide();
fn_add_codeList('#userDv', 'radio', 'mngrDv', '01', JSON.parse('${resultMap.managerCodeList}') );
fn_add_codeList('#emailAderssDv', 'select', 'emailAderss', '99', JSON.parse('${resultMap.emailCode}') );
$('[name=emailAderss]').change(function() {
$('#email2').val('');
$('#email2').val($('#emailAderssDv').find('.current').text());
});
$('input').keydown(function(event) {
if (event.keyCode === 13) {
event.preventDefault();
};
});
//휴대폰 포매팅
$("#mbtlnb").val(fn_format_mbtlnb($("#mbtlnb").val()));
});
isDupChk = false;
/* ********************************************************
* IP 입력창 숨기기 및 Y/N 값 변경
******************************************************** */
const fn_permit_ip = function(_tageg, arg) {
// 체크일때
if($(_tageg).is(':checked')){
$(_tageg).val('Y');
if (arg === 'ip') {
$('#lmttIpsInputRow').show();
}
} else {
$(_tageg).val('N');
if (arg === 'ip') {
$('#lmttIpsInputRow').hide();
}
}
}
/* ********************************************************
* IP 합치기
******************************************************** */
const fn_make_ipsStr = function() {
let ipStr = '';
if($("input[name='lmttIpCheck']").is(":checked")){
$('[name=lmttIps]').each(function(){
if($(this).val() !== '') {
ipStr += '|' + $(this).val();
}
});
ipStr = ipStr.substring(1);
}
$('[name=lmttIp]').val(ipStr);
}
/* ********************************************************
* 전화번호 하이픈 제거
******************************************************** */
const fn_make_mbtlnb = function() {
var mbtlnb = $('#mbtlnb').val();
$('[name=mbtlnb]').val(mbtlnb.trim().replace(/-/g, ''));
}
/* ********************************************************
* email 합치기
******************************************************** */
const fn_make_email = function() {
let domain = $('[name=email2]').val();
let id = $('[name=email1]').val();
$('[name=email]').val(id + '@' + domain);
}
/* ********************************************************
* 업무사용자 리스트 이동
******************************************************** */
const fn_select_jobuser_list = function() {
$('#backupForm').attr('action', '<c:url value="/admin/use/mngr/selectJobUserListInqireForm"/>');
$('#backupForm').attr('method', 'post');
$('#backupForm').submit();
};
/* ********************************************************
* 비밀번호 체크
******************************************************** */
const fn_check_password = function(){
const password = $('#password').val();
const passwordA = $('#passwordA').val();
if(password != passwordA){
alert('비밀번호가 일치하지 않습니다.');
return false;
}
return true;
}
/* ********************************************************
* ip 추가 버튼 기능
******************************************************** */
const fn_add_lmttIps_input = function() {
const newInputContent = `<tr>
<td class="left">
<div class="input-container w-full">
<input type="text" class="input-text xl ml-10" name="lmttIps" title="접속허용IP" >
</div>
</td>
<td>
<button type="button" class="circle-btn delete" onclick="fn_remove_Input(this);">
<span class="visually-hidden"><spring:message code="button.delete"/></span>
</button>
</td>
</tr>`;
$('#lmttIpsInputRow').append(newInputContent);
$('#noData').hide();
}
/* ********************************************************
* ip 삭제 버튼 기능
******************************************************** */
const fn_remove_Input = function(_target) {
$(_target).closest('tr').remove();
let cnt = $('#lmttIpsInputRow').children().length;
if (cnt === 1) $('#noData').show();
}
</script>
<body>
<%@include file ="/WEB-INF/views/comm/admin/Header.jsp" %>
<main class="main">
<%@include file ="/WEB-INF/views/comm/admin/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">
<a href="#fn_select_jobuser_list" onclick="fn_select_jobuser_list();" class="btn outline"><spring:message code="button.catalog"/></a>
<button class="btn primary" onclick="fn_regist(); return false;" ><spring:message code="button.save"/></button>
</div>
</div>
<section class="content-section">
<h3 class="content-section__title">업무사용자 등록</h3>
<form id="regForm" class="common-form" >
<input type="hidden" name="srchType" value="${resultMap.vo.srchType }" />
<input type="hidden" name="srchStr" value="${resultMap.vo.srchStr }" />
<input type="hidden" name="srchMngrDv" value="${resultMap.vo.srchMngrDv }" />
<input type="hidden" name="srchStartDate" value="${resultMap.vo.srchStartDate }" />
<input type="hidden" name="srchEndDate" value="${resultMap.vo.srchEndDate }" />
<input type="hidden" name="srchDatePick" value="${resultMap.vo.srchDatePick }" />
<input type="hidden" name="pageUint" value="${resultMap.vo.pageUnit }" />
<input type="hidden" name="pageIndex" value="${resultMap.vo.pageIndex }" />
<input type="hidden" name="email" value="" />
<input type="hidden" name="lmttIp" 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>사용자 명<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<input class="input-text md" type="text" id="mngrNm" name="mngrNm" title="사용자명" maxlength="20">
</div>
</td>
<th>아이디<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<input class="input-text" type="text" id="mngrId" name="mngrId" title="사용자아이디" maxlength="20">
<button type="button" class="btn sm gray" onclick="fn_id_doubleCheck();"><spring:message code="button.doubleCheck"/></button>
</div>
</td>
</tr>
<tr>
<th>비밀번호<span class="red-7">*</span></th>
<td>
<div class="td-inner vertical">
<input class="input-text" type="password" id="password" name="password" title="비밀번호" maxlength="25">
<p class="fyi gray-7">10-20자, 영문 대소문자 또는 숫자, 특수문자 중 2가지 이상 조합</p>
</div>
</td>
<th>비밀번호 확인<span class="red-7">*</span></th>
<td>
<div class="td-inner vertical">
<input class="input-text" type="password" id="passwordA" title="비밀번호" maxlength="25">
<p class="fyi gray-7">사용가능 특수문자 : ! # $ % &#x26; ( ) * + - / : &#x3C; = &#x3E; ? @ [ &#xFF3C; ] ^ _ { | } ~</p>
</div>
</td>
</tr>
<tr>
<th>부서명</th>
<td>
<div class="td-inner">
<input class="input-text md" type="text" id="partnm" name="partnm" title="부서명" maxlength="20">
</div>
</td>
<th>이메일<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<input class="input-text sm" type="text" name="email1" maxlength="25">
<span>@</span>
<input class="input-text sm" type="text" name="email2" id="email2" maxlength="20">
<div class="select-box" id="emailAderssDv"></div>
</div>
</td>
</tr>
<tr>
<th>전화번호</th>
<td>
<div class="td-inner">
<input class="input-text lg" type="text" id="telnb" name="telnb" title="전화번호" oninput="fn_set_event(this, 'keyup', fn_fmt_telno)" maxlength="12">
</div>
</td>
<th>휴대전화번호<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<input class="input-text lg" type="text" id="mbtlnb" title="휴대전화번호" oninput="fn_set_event(this, 'keyup', fn_fmt_telno)" maxlength="13">
<input type="hidden" name="mbtlnb">
</div>
</td>
</tr>
<tr>
<th>사용자 구분<span class="red-7">*</span></th>
<td colspan="3">
<div class="td-inner">
<div class="custom-radio-container" id="userDv"></div>
</div>
</td>
</tr>
<tr>
<th>로그인 보안</th>
<td colspan="3">
<div class="td-inner">
<div class="b-checkbox-container">
<label class="b-checkbox checkbox">
<input type="checkbox" name="lmttIpCheck" value="N" onchange="fn_permit_ip(this, 'ip');" />
<span class="check"></span>
<span class="control-label">IP보안</span>
</label>
<label class="b-checkbox checkbox">
<input type="checkbox" name="mblphonCrtfcAt" value="N" onchange="fn_permit_ip(this, '2fas');" >
<span class="check"></span>
<span class="control-label">2단계 인증</span>
</label>
</div>
</div>
</td>
</tr>
<tr>
<th>접속허용IP</th>
<td colspan="3">
<div class="td-inner">
<div class="table-wrapper" style="width: 400px;">
<table class="table vertical tight">
<caption>접속허용IP</caption>
<colgroup>
<col>
<col style="width:14%;">
</colgroup>
<thead>
<tr>
<th>목록</th>
<th>
<button type="button" id="textbox-row-add" class="circle-btn add" onclick="fn_add_lmttIps_input();">
<span class="visually-hidden"><spring:message code="button.add"/></span>
</button>
</th>
</tr>
</thead>
<tbody id="lmttIpsInputRow">
<tr>
<td class="left">
<div class="input-container w-full">
<input type="text" class="input-text xl ml-10" name="lmttIps" title="접속허용IP" />
</div>
</td>
<td>
<button type="button" class="circle-btn delete" onclick="fn_remove_Input(this);">
<span class="visually-hidden"><spring:message code="button.delete"/></span>
</button>
</td>
</tr>
<tr>
<td class="left">
<div class="input-container w-full">
<input type="text" class="input-text xl ml-10" name="lmttIps" title="접속허용IP" >
</div>
</td>
<td>
<button type="button" class="circle-btn delete" onclick="fn_remove_Input(this);">
<span class="visually-hidden"><spring:message code="button.delete"/></span>
</button>
</td>
</tr>
<tr id="noData" >
<td colspan="2">
접속허용IP를 입력해 주세요.
</td>
</tr>
</tbody>
</table>
</div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</form>
</section>
</div>
</div>
</main>
<form id="backupForm" method="post" >
<input type="hidden" name="srchType" value="${resultMap.vo.srchType }" />
<input type="hidden" name="srchStr" value="${resultMap.vo.srchStr }" />
<input type="hidden" name="srchMngrDv" value="${resultMap.vo.srchMngrDv }" />
<input type="hidden" name="srchStartDate" value="${resultMap.vo.srchStartDate }" />
<input type="hidden" name="srchEndDate" value="${resultMap.vo.srchEndDate }" />
<input type="hidden" name="srchDatePick" value="${resultMap.vo.srchDatePick }" />
<input type="hidden" name="pageUnit" value="${resultMap.vo.pageUnit }" />
<input type="hidden" name="pageIndex" value="${resultMap.vo.pageIndex }" />
<input type="hidden" name="mngrInnb" value="" />
<input type="hidden" name="pageDv" value="" />
</form>
<script>
/* ********************************************************
* 업무사용자 등록
******************************************************** */
const fn_regist = function() {
if(!isDupChk) {
alert('아이디 중복 체크해 주세요.')
return;
}
if(!fn_check_password()) return;
if(!confirm('업무사용자를 <spring:message code="confirm.common.save"/>')) return;
fn_make_email();
fn_make_mbtlnb();
fn_make_ipsStr();
let params = $('#regForm').serialize();
$.ajax({
type: 'post',
url : '<c:url value="/admin/use/mngr/insertJobUserRegist"/>',
data : params,
success:function(result) {
let mngrInnb = JSON.parse(result.resBody.result);
$('#backupForm').find('[name=mngrInnb]').val(mngrInnb);
$('#backupForm').find('[name=pageDv]').val('I');
if(mngrInnb > 0){
alert("<spring:message code="success.common.insert"/> \n시스템 관리 > '사용자별 권한 관리'에서 \n필요한 권한을 설정해 주세요.");
$('#backupForm').attr('action', '<c:url value="/admin/use/mngr/selectJobUserUpdtForm"/>');
$('#backupForm').submit();
} else {
alert('<spring:message code="fail.common.insert"/>');
}
}
});
}
/* ********************************************************
* 중복 확인 기능
******************************************************** */
const fn_id_doubleCheck = function() {
let mngrId = $('#mngrId').val();
if(mngrId === '') return;
let param = { 'mngrId': mngrId };
$.ajax({
type: 'post',
url : '<c:url value="/admin/use/mngr/selectJobUserIdbDplctInqire"/>',
data : param,
success:function(result) {
result = JSON.parse(result.resBody.result);
if(result == 0){
alert('\"' + mngrId + '\" 은 사용 가능합니다.');
isDupChk = true;
} else {
alert('\"' + mngrId + '\" 은 중복된 아이디 입니다.');
}
}
});
};
</script>
</body>
</html>

View File

@@ -0,0 +1,73 @@
<%@ 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="ui" uri="http://www.winbit.kr/ctl/ui"%>
<%--
Class Name : maJobUserConnHistListInqirePopupR.jsp
Description : 업무사용자 접속이력조회 팝업
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2023.12.27 김세엽 최초 생성
2023.12.29 박철민 datepicker 수동적용 코드 추가
2024-01-16 최범식 수정
--%>
<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>
</div>
<div class="table-wrapper">
<table class="table vertical">
<caption>리스트창</caption>
<colgroup>
<col style="width: 1%;">
<col style="width: 12%;">
<col style="width: 20%;">
<col style="width: 20%;">
<col style="width: auto;">
</colgroup>
<thead>
<tr>
<th>순번</th>
<th>접속자</th>
<th>접속IP</th>
<th>접속브라우저</th>
<th>접속일시</th>
</tr>
</thead>
<tbody>
<c:choose>
<c:when test="${not empty resultMap.resultList}">
<c:forEach items="${ resultMap.resultList }" var="historyList">
<tr>
<td><span class="fw-300"><c:out value="${ resultMap.paginationInfo.totalRecordCount - historyList.rnum + 1 }" /></span></td>
<td><span class="fw-300">${ historyList.mngrNm }</span></td>
<td><span class="fw-300">${ historyList.conectIp }</span></td>
<td><span class="fw-300">${ historyList.conectBrwsr }</span></td>
<td><span class="fw-300">${ historyList.conectDt }</span></td>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
<tr>
<td colspan="5">조회된 데이터가 없습니다.</td>
</tr>
</c:otherwise>
</c:choose>
</tbody>
</table>
</div>
<div class="pagination__container" id="divPageInfo">
<ui:pagination paginationInfo="${resultMap.paginationInfo}" type="image" jsFunction="fn_select_history" />

View File

@@ -0,0 +1,151 @@
<%@ 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 : maJobUserListInqireR.jsp
Description : 업무사용자 목록조회 리스트 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2023-12-18 김세엽 최초 생성
2024-01-16 최범식 수정
--%>
<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_paging_list('1')">
<c:forEach items="${ resultMap.paginationInfo.pageUnitArr }" var="pageUnit" varStatus="pageUnitStatus">
<option value="<c:out value="${ pageUnit }"/>" <c:if test="${ resultMap.paramVO.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>
<div class="center">
</div>
<div class="right">
<button class="btn outline sm" onclick="fn_download_excel();">
<i class="icon icon_excel"></i>
<spring:message code="button.excelDownload"/>
</button>
</div>
</div>
<hr class="spacing">
<div class="table-wrapper">
<table class="table vertical">
<caption>해당 테이블에 대한 설명</caption>
<!-- 각 열 width 설정 -->
<colgroup>
<col style="width: 1%;">
<col style="width: 8%;">
<col style="width: 8;">
<col style="width: 8%;">
<col style="width: 8%;">
<col style="width: auto%;">
<col style="width: 12%">
<col style="width: 12%">
<col style="width: auto%">
<col style="width: 5%">
</colgroup>
<thead>
<tr>
<th>번호</th>
<th>사용자명</th>
<th>사용자구분</th>
<th>부서명</th>
<th>사용자ID</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 }">
<c:forEach items="${ resultMap.resultList }" var="jobUserList">
<tr>
<td><c:out value="${ resultMap.paginationInfo.totalRecordCount - jobUserList.rnum + 1 }" /></td>
<td><c:out value="${ jobUserList.mngrNm }" /></td>
<td><c:out value="${ jobUserList.mngrDvNm }" /></td>
<td><c:out value="${ jobUserList.partnm }" /></td>
<td><c:out value="${ jobUserList.mngrId }" /></td>
<td><c:out value="${ jobUserList.email }" /></td>
<td class="mbtlnb"><c:out value="${ jobUserList.mbtlnb }" /></td>
<td>
<c:choose>
<c:when test="${ not empty jobUserList.lmttIp and jobUserList.mblphonCrtfcAt eq 'Y' }">
<span>IP보안, 2단계 인증</span>
</c:when>
<c:when test="${ not empty jobUserList.lmttIp }">
<span>IP보안</span>
</c:when>
<c:when test="${ jobUserList.mblphonCrtfcAt eq 'Y' }">
<span>2단계 인증</span>
</c:when>
<c:when test="${ empty jobUserList.lmttIp and jobUserList.mblphonCrtfcAt eq 'N' }">
<span>없음</span>
</c:when>
</c:choose>
</td>
<td>
<c:out value="${ jobUserList.lastConectDt }"/>
</td>
<td>
<c:if test="${ jobUserList.mngrSttusCd == '01' }">
활성
</c:if>
<c:if test="${ jobUserList.mngrSttusCd == '02' }">
비활성
</c:if>
</td>
<td>
<div class="manage-btn-container">
<button type="button" class="btn xsm outline primary" onclick="fn_go_userDetail('${jobUserList.mngrInnb}');" >
<spring:message code="button.update"/>
</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>
</section>
</form>
<div class="pagination__container">
<ui:pagination paginationInfo="${resultMap.paginationInfo}" type="image" jsFunction="fn_select_paging_list" />
</div>
<script>
$('#pageUnit').niceSelect();
</script>

View File

@@ -0,0 +1,273 @@
<%@ 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"%>
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld"%>
<%--
Class Name : maJobUserListInqireR.jsp
Description : 업무사용자 목록조회 화면
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2023-12-18 김세엽 최초 생성
2024-01-16 최범식 수정
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@include file ="/WEB-INF/views/comm/admin/Include.jsp" %>
</head>
<script>
$( document ).ready(function(){
fn_add_codeList('#mngrDv', 'select', 'srchMngrDv', '${resultMap.paramVO.srchMngrDv}', JSON.parse('${resultMap.cgn036 }'), '전체');
let pageIndex = '<c:out value="${ resultMap.paramVO.pageIndex }"/>';
let pageUnit = '<c:out value="${ resultMap.paramVO.pageUnit }"/>';
let pageDv = '<c:out value="${ resultMap.paramVO.pageDv }"/>';
fn_return_srchForm();
if (pageDv === '') {
fn_select_paging_list(pageIndex, pageUnit);
} else {
fn_select_paging_list('1', '10');
}
$('#srchStr').on('keydown', function(event) {
if (event.keyCode === 13) {
event.preventDefault();
fn_select_paging_list('1');
}
});
});
/* ********************************************************
* 페이지 복귀
******************************************************** */
const fn_return_srchForm = function() {
let datePick = '<c:out value="${resultMap.paramVO.srchDatePick}"/>';
if (datePick != '') {
$(datePick).trigger('click');
} else {
$('#juscrbStrtDt').val('<c:out value="${resultMap.paramVO.juscrbStrtDt}"/>');
$('#juscrbEndDt').val('<c:out value="${resultMap.paramVO.juscrbEndDt}"/>');
}
$('#srchStr').val('<c:out value="${resultMap.paramVO.srchStr}"/>');
}
/* ********************************************************
* 검색 초기화
******************************************************** */
const fn_reset_srchForm = function() {
$('#all').trigger('click');
$('#srchStr').val('');
$('#srchMngrDv').val('').niceSelect('update');
$('#srchType').val('ALL').niceSelect('update');
}
/* ********************************************************
* 데이트 검색 값
******************************************************** */
const fn_set_datePick = function(_taget) {
let dateBtn = '#' + $(_taget).attr('id');
$('[name=srchDatePick]').val(dateBtn);
}
/**********************************************
* 업무사용자 등록 이동
***********************************************/
const fn_regist_form = function(){
$('[name=srchForm]').attr('action', '<c:url value="/admin/use/mngr/selectJobUserRegistForm"/>');
$('[name=srchForm]').attr('method', 'post');
$('[name=srchForm]').submit();
}
/**********************************************
* 업무사용자 수정 이동
***********************************************/
const fn_go_userDetail = function(_value){
$('[name=mngrInnb]').val(_value);
$('[name=srchForm]').attr('action', '<c:url value="/admin/use/mngr/selectJobUserUpdtForm"/>');
$('[name=srchForm]').attr('method', 'post');
$('[name=srchForm]').submit();
}
/**********************************************
* 기능 엑셀 다운로드
***********************************************/
const fn_download_excel = function() {
$('[name=srchForm]').attr('action', '<c:url value="/admin/use/mngr/excelFileDownload"/>');
$('[name=srchForm]').attr('method', 'post');
$('[name=srchForm]').submit();
};
/* ********************************************************
* 검색 조회
******************************************************** */
const fn_select_paging_list = function(pageIndex, pageUnit) {
if (pageIndex == undefined || pageUnit == '') {
$('#pageIndex').val('1');
} else {
$('#pageIndex').val(pageIndex);
}
let params = $('[name=srchForm]').serialize();
if (pageUnit != undefined || pageUnit == '') {
params += '&pageUnit=' + pageUnit;
} else {
params += '&pageUnit=' + $('#pageUnit').val();
}
$.ajax({
type : 'post',
url : '<c:url value="/admin/use/mngr/selectJobUserListInqire"/>',
data : params,
success : function(data) {
$('#pageDiv').html(data);
$('#pageUnit').niceSelect();
let mbtlnb = '';
$(".mbtlnb").each(function(){
mbtlnb = fn_format_mbtlnb($(this).text().trim());
mbtlnb = mbtlnb.replace(/(\d{3})-(\d{4})-(\d{4})/, "$1-****-$3");
$(this).text(mbtlnb);
});
}
});
}
/* ********************************************************
* 검색조건 > 날짜 전체 클릭 시 날짜 설정 초기화
******************************************************** */
const fn_reset_date = function(strtDate, endDate){
$('#'+strtDate).datepicker().datepicker("setDate",'');
$('#'+endDate).datepicker().datepicker("setDate",'');
}
history.replaceState({}, null, location.pathname);
</script>
<body>
<%@include file ="/WEB-INF/views/comm/admin/Header.jsp" %>
<main class="main">
<%@include file ="/WEB-INF/views/comm/admin/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">
<a href="#" class="btn primary" onclick="fn_regist_form();">
업무사용자 <spring:message code="button.insert"/>
</a>
</div>
</div>
<form name="srchForm">
<input type="hidden" id="pageIndex" name="pageIndex" value="1"/>
<input type="hidden" name="srchDatePick" value="${resultMap.paramVO.srchDatePick}" />
<input type="hidden" name="mngrInnb" value="" />
<section class="content-section">
<div class="table-wrapper">
<table class="table">
<caption>검색창</caption>
<colgroup>
<col style="width: 12%;">
<col style="width: auto;">
<col style="width: 12%;">
<col style="width: 25%;">
</colgroup>
<tbody>
<tr>
<th>검색어</th>
<td>
<div class="td-inner" >
<div class="select-box">
<select class="serchSelectBox" name="srchType" id="srchType" title="검색타입">
<option value="ALL" ${f:setSelected(resultMap.paramVO.srchType, 'ALL') }>전체</option>
<option value="MNGR_NM" ${f:setSelected(resultMap.paramVO.srchType, 'MNGR_NM') }>사용자명</option>
<option value="PARTNM" ${f:setSelected(resultMap.paramVO.srchType, 'PARTNM') }>부서명</option>
<option value="MNGR_ID" ${f:setSelected(resultMap.paramVO.srchType, 'MNGR_ID') }>사용자ID</option>
<option value="EMAIL" ${f:setSelected(resultMap.paramVO.srchType, 'EMAIL') }>이메일</option>
<option value="MBTLNB" ${f:setSelected(resultMap.paramVO.srchType, 'MBTLNB') }>휴대전화번호</option>
</select>
</div>
<input class="input-text lg" type="text" title="검색어" name="srchStr" id="srchStr" />
</div>
</td>
<th>사용자구분</th>
<td>
<div class="td-inner">
<div class="select-box" id="mngrDv">
</div>
</div>
</td>
</tr>
<tr>
<th>접속일</th>
<td colspan="3">
<div class="td-inner">
<div class="input-container">
<%-- 검색 종료일 현재 날짜 --%>
<c:set var="today" value="<%=new java.util.Date()%>" />
<!-- 검색 조건 시작일 -->
<input type="text" name="srchStartDate" id="juscrbStrtDt" class="datepicker" title="시작 날짜 선택" autocomplete="off" onchange="fn_check_date('juscrb')"/>
<span class="tilde">~</span>
<!-- 검색 조건 종료일 -->
<input type="text" name="srchEndDate" id="juscrbEndDt" class="datepicker" title="종료 날짜 선택" autocomplete="off" onchange="fn_check_date('juscrb')"/>
</div>
<div class="dateRange-btnContainer">
<button class="dateRange-btn" id="yesterday" onclick = "fn_set_date('juscrbStrtDt','juscrbEndDt','juscrbEndDt','1D'); fn_set_datePick(this);">어제</button>
<button class="dateRange-btn" id="today" onclick = "fn_set_date('juscrbStrtDt','juscrbEndDt','juscrbEndDt','0'); fn_set_datePick(this);">오늘</button>
<button class="dateRange-btn" id="threeDays" onclick = "fn_set_date('juscrbStrtDt','juscrbEndDt','juscrbEndDt','3D'); fn_set_datePick(this);">3일간</button>
<button class="dateRange-btn" id="sevenDays" onclick = "fn_set_date('juscrbStrtDt','juscrbEndDt','juscrbEndDt','7D'); fn_set_datePick(this);">일주일</button>
<button class="dateRange-btn" id="oneMonth" onclick = "fn_set_date('juscrbStrtDt','juscrbEndDt','juscrbEndDt','1M'); fn_set_datePick(this);">1개월</button>
<button class="dateRange-btn" id="threeMonths" onclick = "fn_set_date('juscrbStrtDt','juscrbEndDt','juscrbEndDt','3M'); fn_set_datePick(this);">3개월</button>
<button class="dateRange-btn" id="halfAYear" onclick = "fn_set_date('juscrbStrtDt','juscrbEndDt','juscrbEndDt','6M'); fn_set_datePick(this);">6개월</button>
<button class="dateRange-btn" id="oneYear" onclick = "fn_set_date('juscrbStrtDt','juscrbEndDt','juscrbEndDt','1Y'); fn_set_datePick(this);">1년</button>
<button class="dateRange-btn selected" id="all" onclick = "fn_reset_date('juscrbStrtDt','juscrbEndDt'); fn_set_datePick(this);">전체</button>
</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="resetBtn" onclick="fn_reset_srchForm();"><spring:message code="button.init"/></button>
<button type="button" class="btn primary" id="searchBtn" onclick="fn_select_paging_list('1');"><spring:message code="button.search"/></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>
</div>
</main>
</body>
</html>

View File

@@ -0,0 +1,74 @@
<%@ 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 : maJobUserLogListInqirePopupR.jsp
Description : 업무사용자 로그조회 팝업
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
since : 2023.12.27 김세엽 최초 생성
2024-01-16 최범식 수정
--%>
<div class="form-control-container">
<div class="left">
<div class="search-number" id="divTotalCount">
<span class="search-number__text">총 <strong><c:out value="${ resultMap.paginationInfo.totalRecordCount }"/></strong>건</span>
</div>
</div>
<div class="center">
</div>
<div class="right">
</div>
</div>
<div class="table-wrapper">
<table class="table vertical">
<caption>리스트창</caption>
<colgroup>
<col style="width: 1%;">
<col style="width: 12%;">
<col style="width: 20%;">
<col style="width: 20%;">
<col style="width: auto;">
</colgroup>
<thead>
<tr>
<th id="logListTr">번호</th>
<th>행위자</th>
<th>접속IP</th>
<th>행위일시</th>
<th>내용</th>
</tr>
</thead>
<tbody>
<c:choose>
<c:when test="${not empty resultMap.resultList}">
<c:forEach items="${ resultMap.resultList }" var="logList">
<tr>
<td><span class="fw-300"><c:out value="${ resultMap.paginationInfo.totalRecordCount - logList.rnum + 1 }" /></span></td>
<td><span class="fw-300">${ logList.mngrNm }</span></td>
<td><span class="fw-300">${ logList.conectIp }</span></td>
<td><span class="fw-300">${ logList.registDe }</span></td>
<td><span class="fw-300">${ logList.procsCn }</span></td>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
<tr>
<td colspan="5">조회된 로그가 없습니다.</td>
</tr>
</c:otherwise>
</c:choose>
</tbody>
</table>
</div>
<div class="pagination__container" id="divPageInfo">
<ui:pagination paginationInfo="${resultMap.paginationInfo}" type="image" jsFunction="fn_select_log" />
</div>

View File

@@ -0,0 +1,730 @@
<%@ 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"%>
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld"%>
<%--
Class Name : maJobUserU.jsp
Description : 업무사용자 수정페이지
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
since : 2023.12.19 김세엽 최초 생성
2024-01-16 최범식 수정
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@include file ="/WEB-INF/views/comm/admin/Include.jsp" %>
</head>
<script>
$(document).ready(function() {
fn_add_codeList('#userDv', 'radio', 'mngrDv', '${resultMap.detail[0].mngrDv}', JSON.parse('${resultMap.managerCodeList}') );
fn_add_codeList('#emailAderssDv', 'select', 'emailAderss', '99', JSON.parse('${resultMap.emailCode}') );
$('[name=emailAderss]').change(function() {
$('#email2').val('');
$('#email2').val($('#emailAderssDv').find('.current').text());
});
$('input').keydown(function(event) {
if (event.keyCode === 13) {
event.preventDefault();
};
});
//휴대폰 포매팅
$("#mbtlnb").val(fn_format_mbtlnb($("#mbtlnb").val()));
});
/* ********************************************************
* IP 입력창 숨기기 및 Y/N 값 변경
******************************************************** */
const fn_reset_button = function() {
$('#all').trigger('click');
}
/* ********************************************************
* IP 입력창 숨기기 및 Y/N 값 변경
******************************************************** */
const fn_permit_ip2fas = function(_target, _arg) {
if($(_target).is(':checked')){
$(_target).val('Y');
if (_arg === 'ip') {
$('#lmttIpsInputRow').show();
$("#lmttIpsInputRow").find("input").each(function(){
$(this).prop("disabled",false);
});
}
} else {
$(_target).val('N');
if (_arg === 'ip') {
$('#lmttIpsInputRow').hide();
$("#lmttIpsInputRow").find("input").each(function () {
$(this).prop("disabled", true);
});
}
}
}
/* ********************************************************
* IP 합치기
******************************************************** */
const fn_make_ipsStr = function() {
let ipStr = '';
if($("input[name='lmttIpCheck']").is(":checked")){
$('[name=lmttIps]').each(function(){
if($(this).val() !== '') {
ipStr += '|' + $(this).val();
}
});
ipStr = ipStr.substring(1);
}
$('[name=lmttIp]').val(ipStr);
}
/* ********************************************************
* 전화번호 하이픈 제거
******************************************************** */
const fn_make_mbtlnb = function() {
var mbtlnb = $('#mbtlnb').val();
$('[name=mbtlnb]').val(mbtlnb.trim().replace(/-/g, ''));
}
/* ********************************************************
* email 합치기
******************************************************** */
const fn_make_email = function() {
let domain = $('[name=email2]').val();
let id = $('[name=email1]').val();
$('[name=email]').val(id + '@' + domain);
}
/* ********************************************************
* ip 추가 버튼 기능
******************************************************** */
const fn_add_lmttIps_input = function() {
const lmttIpCheck = $('input[name="lmttIpCheck"]');
lmttIpCheck.val()!= 'Y'&&lmttIpCheck.click();
const newInputContent = `<tr>
<td class="left">
<div class="input-container w-full">
<input type="text" class="input-text xl ml-10" name="lmttIps" title="접속허용IP" >
</div>
</td>
<td>
<button type="button" class="circle-btn delete" onclick="fn_remove_Input(this);">
<span class="visually-hidden"><spring:message code="button.delete"/></span>
</button>
</td>
</tr>`;
$('#lmttIpsInputRow').append(newInputContent);
$('#noData').hide();
}
/* ********************************************************
* ip 삭제 버튼 기능
******************************************************** */
const fn_remove_Input = function(_target) {
$(_target).closest('tr').remove();
let cnt = $('#lmttIpsInputRow').children().length;
if (cnt === 1) {
$('#noData').show();
$('input[name="lmttIpCheck"]').click();
}
}
/* ********************************************************
* 업무사용자 목록 이동
******************************************************** */
function fn_select_jobuser_list() {
$('#backupForm').attr('action', '<c:url value="/admin/use/mngr/selectJobUserListInqireForm"/>');
$('#backupForm').submit();
};
/* ********************************************************
* 검색조건 > 날짜 전체 클릭 시 날짜 설정 초기화
******************************************************** */
const fn_reset_date = function(strtDate,endDate){
$('#'+strtDate).datepicker().datepicker("setDate",'');
$('#'+endDate).datepicker().datepicker("setDate",'');
}
</script>
<body>
<%@include file ="/WEB-INF/views/comm/admin/Header.jsp" %>
<main class="main">
<%@include file ="/WEB-INF/views/comm/admin/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_select_jobuser_list();"><spring:message code="button.catalog"/></button>
<button type="button" class="btn dark" onclick="fn_reset_pswd();">비밀번호 초기화</button>
<c:if test="${resultMap.detail[0].mngrSttusCd == '01'}">
<button type="button" class="btn dark" onclick="fn_jobuser_disabled();">비활성화</button>
</c:if>
<c:if test="${resultMap.detail[0].mngrSttusCd == '02'}">
<button type="button" class="btn dark" onclick="fn_jobuser_enabled();">활성화</button>
</c:if>
<button type="button" class="btn dark" onclick="fn_jobuser_leave();">퇴사처리</button>
<button type="button" class="btn primary" onclick="fn_update();" ><spring:message code="button.save"/></button>
</div>
</div>
<section class="content-section">
<h3 class="content-section__title">업무사용자 정보</h3>
<form id="jobuserUpdateForm" class="common-form" >
<input type="hidden" name="srchType" value="${resultMap.srchData.srchType }" />
<input type="hidden" name="srchStr" value="${resultMap.srchData.srchStr }" />
<input type="hidden" name="srchMngrDv" value="${resultMap.srchData.srchMngrDv }" />
<input type="hidden" name="srchStartDate" value="${resultMap.srchData.srchStartDate }" />
<input type="hidden" name="srchEndDate" value="${resultMap.srchData.srchEndDate }" />
<input type="hidden" name="srchDatePick" value="${resultMap.srchData.srchDatePick }" />
<input type="hidden" name="pageUnit" value="${resultMap.srchData.pageUnit }" />
<input type="hidden" name="pageIndex" value="${resultMap.srchData.pageIndex }" />
<input type="hidden" name="email" value="" />
<input type="hidden" name="lmttIp" value="" />
<input type="hidden" name="mngrInnb" id="mngrInnb" value="${resultMap.detail[0].mngrInnb}" />
<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>사용자 명<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<input class="input-text md" type="text" id="mngrNm" name="mngrNm" title="사용자명" value="${ resultMap.detail[0].mngrNm }" maxlength="20">
</div>
</td>
<th>아이디<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<c:out value="${ resultMap.detail[0].mngrId }" />
</div>
</td>
</tr>
<tr>
<th>부서명</th>
<td>
<div class="td-inner">
<input class="input-text md" type="text" id="partnm" name="partnm" title="부서명" value="${ resultMap.detail[0].partnm }" maxlength="20">
</div>
</td>
<th>이메일<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<input class="input-text sm" type="text" id="email1" name="email1" title="이메일1" value="${ resultMap.detail[0].email1 }" maxlength="20">
<span>@</span>
<input class="input-text sm" type="text" id="email2" name="email2" title="이메일2" value="${ resultMap.detail[0].email2 }" maxlength="20">
<div class="select-box" id="emailAderssDv"></div>
</div>
</td>
</tr>
<tr>
<th>전화번호</th>
<td>
<div class="td-inner">
<input class="input-text md" type="text" id="telnb" name="telnb" title="전화번호" oninput="fn_set_event(this, 'keyup', fn_fmt_telno)" value="${ resultMap.detail[0].telnb }" maxlength="12" >
</div>
</td>
<th>휴대전화번호<span class="red-7">*</span></th>
<td>
<div class="td-inner">
<input class="input-text md" type="text" id="mbtlnb" title="휴대전화번호" oninput="fn_set_event(this, 'keyup', fn_fmt_telno)" value="${ resultMap.detail[0].mbtlnb }" maxlength="13">
<input type="hidden" name="mbtlnb">
</div>
</td>
</tr>
<tr>
<th>사용자 구분<span class="red-7">*</span></th>
<td>
<div class="custom-radio-container" id="userDv"></div>
</td>
</tr>
<tr>
<th>로그인 보안</th>
<td>
<div class="b-checkbox-container">
<label class="b-checkbox checkbox">
<input type="checkbox" name="lmttIpCheck" value="${resultMap.detail[0].lmttIpCheck }" ${f:setChecked(resultMap.detail[0].lmttIpCheck,'Y')} onclick="fn_permit_ip2fas(this, 'ip');" />
<span class="check"></span>
<span class="control-label">IP보안</span>
</label>
<label class="b-checkbox checkbox">
<input type="checkbox" name="mblphonCrtfcAt" value="${resultMap.detail[0].mblphonCrtfcAt }" ${f:setChecked(resultMap.detail[0].mblphonCrtfcAt,'Y')} onclick="fn_permit_ip2fas(this, '2fas');" />
<span class="check"></span>
<span class="control-label">2단계 인증</span>
</label>
</div>
</td>
</tr>
<th>접속허용IP</th>
<td colspan="3">
<div class="td-inner">
<div class="table-wrapper" style="width: 400px;">
<table class="table vertical tight">
<caption>접속허용IP</caption>
<colgroup>
<col>
<col style="width:14%;">
</colgroup>
<thead>
<tr>
<th>목록</th>
<th>
<button type="button" id="textbox-row-add" class="circle-btn add" onclick="fn_add_lmttIps_input();">
<span class="visually-hidden"><spring:message code="button.add"/></span>
</button>
</th>
</tr>
</thead>
<tbody id="lmttIpsInputRow">
<c:choose>
<c:when test="${not empty resultMap.detail[0].lmttIps }">
<c:forEach var="lmttIp" items="${resultMap.detail[0].lmttIps }" varStatus="loop">
<tr>
<td class="left">
<div class="input-container w-full">
<input type="text" class="input-text xl ml-10" name="lmttIps" title="접속허용IP" value="${lmttIp }"/>
</div>
</td>
<td>
<button type="button" class="circle-btn delete" onclick="fn_remove_Input(this);">
<span class="visually-hidden"><spring:message code="button.delete"/></span>
</button>
</td>
</tr>
</c:forEach>
<tr id="noData" style="display: none;">
<td colspan="2">
접속허용IP를 입력해 주세요.
</td>
</tr>
</c:when>
<c:otherwise>
<tr id="noData" >
<td colspan="2">
접속허용IP를 입력해 주세요.
</td>
</tr>
</c:otherwise>
</c:choose>
</tbody>
</table>
</div>
</div>
</td>
</tr>
<tr>
<th>최종접속일시</th>
<td>
<div class="td-inner">
<c:out value="${resultMap.detail[0].lastConectDt }"/>
<a href="#jobUser-modal" rel="modal:open" class="btn xsm gray ml-5" onclick="fn_select_history('1');" >
<spring:message code="button.connectionHistory"/>
</a>
</div>
</td>
<%-- <th>연관쇼핑몰</th>--%>
<%-- <td>--%>
<%-- <div class="td-inner">--%>
<%-- <c:if test="${not empty resultMap.detail[0].sopmalNmList }">--%>
<%-- <c:forEach var="sopmalNm" items="${ resultMap.detail[0].sopmalNmList }" varStatus="loop">--%>
<%-- ${ sopmalNm }<c:if test="${ not loop.last }">,</c:if>--%>
<%-- </c:forEach>--%>
<%-- </c:if>--%>
<%-- <c:if test="${empty resultMap.detail[0].sopmalNmList}">--%>
<%-- 연관쇼핑몰이 없습니다.--%>
<%-- </c:if>--%>
<%-- </div>--%>
<%-- </td>--%>
</tr>
</tbody>
</table>
</div>
</form>
</section>
<section class="content-section">
<div class="form-control-container mb-8">
<div class="left">
<h3 class="content-section__title">사용자 로그</h3>
</div>
<div class="center">
</div>
<div class="right">
<a href="#jobUser-modal" rel="modal:open" class="btn outline" onclick="fn_select_log('1');" >
<spring:message code="button.viewAll"/>
</a>
</div>
</div>
<div class="table-wrapper">
<table class="table">
<colgroup>
<col style="width: 12%;">
<col>
</colgroup>
<tbody class="table vertical">
<tr>
<th>로그</th>
<td>
<div class="change-log">
<c:if test="${not empty resultMap.detail[0].logList}">
<c:forEach var="logList" items="${resultMap.detail[0].logList}" varStatus="loop" begin="0" end="9">
<p class="change-log__list" align="left">
<span class="change-log__date"><c:out value="${logList.registDe} "/></span>
<span class="change-log__description">관리자(<c:out value="${resultMap.detail[0].mngrNm} "/>)가 </span><c:out value="${logList.procsCdNm} "/><c:out value="${logList.procsCn}" />
</p>
</c:forEach>
</c:if>
<c:if test="${ empty resultMap.detail[0].logList}">
<p class="change-log__list">로그가 없습니다.</p>
</c:if>
</div>
</td>
</tr>
<tr>
<th>중요행위발생로그</th>
<td>
<div class="change-log">
<c:if test="${not empty resultMap.detail[0].logList}">
<c:forEach var="logList" items="${resultMap.detail[0].logList}" varStatus="loop" begin="0" end="9">
<c:if test="${not empty logList.procsCd}">
<p class="change-log__list" align="left">
<span class="change-log__date"><c:out value="${logList.registDe} "/></span>
<span class="change-log__description">관리자(<c:out value="${resultMap.detail[0].mngrNm} "/>)가 </span><c:out value="${logList.procsCdNm} "/><c:out value="${logList.procsCn}" />
</p>
</c:if>
</c:forEach>
</c:if>
<c:if test="${ empty resultMap.detail[0].logList}">
<p class="change-log__list">최근 행위중 중요행위가 없습니다.</p>
</c:if>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</section>
</div>
</div>
</main>
<form id="backupForm" method="post" >
<input type="hidden" name="srchType" value="${resultMap.srchData.srchType }" />
<input type="hidden" name="srchStr" value="${resultMap.srchData.srchStr }" />
<input type="hidden" name="srchMngrDv" value="${resultMap.srchData.srchMngrDv }" />
<input type="hidden" name="srchStartDate" value="${resultMap.srchData.srchStartDate }" />
<input type="hidden" name="srchEndDate" value="${resultMap.srchData.srchEndDate }" />
<input type="hidden" name="srchDatePick" value="${resultMap.srchData.srchDatePick }" />
<input type="hidden" name="pageUnit" value="${resultMap.srchData.pageUnit }" />
<input type="hidden" name="pageIndex" value="${resultMap.srchData.pageIndex }" />
<input type="hidden" name="mngrInnb" value="${resultMap.detail[0].mngrInnb }" />
<input type="hidden" name="pageDv" value="${resultMap.srchData.pageDv }" />
</form>
<!-- 접속이력조회 모달 -->
<div id="jobUser-modal" class="modal" style="max-width: 900px; ">
<div class="modal-header">
<h4 id="title"></h4>
</div>
<div class="modal-content">
<form>
<input type="hidden" name="srchDatePopPick" id="srchDatePopPick" value="all"/>
<div class="table-wrapper">
<table class="table">
<caption>검색창</caption>
<colgroup>
<col style="width: 12%;">
<col>
</colgroup>
<tbody id="his">
<tr>
<th id="subTitle"></th>
<td colspan="3" >
<div class="td-inner" >
<div class="input-container">
<%-- 검색 종료일 현재 날짜 --%>
<c:set var="today" value="<%=new java.util.Date()%>" />
<!-- 검색 조건 시작일 -->
<input type="text" name="srchStartDate" id="juscrbStrtDt" class="datepicker"
title="시작 날짜 선택" autocomplete="off" onchange="fn_check_date('juscrb')"/>
<span class="tilde">~</span>
<!-- 검색 조건 종료일 -->
<input type="text" name="srchEndDate" id="juscrbEndDt" class="datepicker"
title="종료 날짜 선택" autocomplete="off" onchange="fn_check_date('juscrb')"/>
</div>
<div class="dateRange-btnContainer">
<button class="dateRange-btn" id="yesterday"
onclick = "fn_set_date('juscrbStrtDt','juscrbEndDt','juscrbEndDt','1D'); fn_set_datePopPick(this);">어제</button>
<button class="dateRange-btn" id="today"
onclick = "fn_set_date('juscrbStrtDt','juscrbEndDt','juscrbEndDt','0'); fn_set_datePopPick(this);">오늘</button>
<button class="dateRange-btn" id="threeDays"
onclick = "fn_set_date('juscrbStrtDt','juscrbEndDt','juscrbEndDt','3D'); fn_set_datePopPick(this);">3일간</button>
<button class="dateRange-btn" id="sevenDays"
onclick = "fn_set_date('juscrbStrtDt','juscrbEndDt','juscrbEndDt','7D'); fn_set_datePopPick(this);">일주일</button>
<button class="dateRange-btn" id="oneMonth"
onclick = "fn_set_date('juscrbStrtDt','juscrbEndDt','juscrbEndDt','1M'); fn_set_datePopPick(this);">1개월</button>
<button class="dateRange-btn" id="threeMonths"
onclick = "fn_set_date('juscrbStrtDt','juscrbEndDt','juscrbEndDt','3M'); fn_set_datePopPick(this);">3개월</button>
<button class="dateRange-btn" id="halfAYear"
onclick = "fn_set_date('juscrbStrtDt','juscrbEndDt','juscrbEndDt','6M'); fn_set_datePopPick(this);">6개월</button>
<button class="dateRange-btn" id="oneYear"
onclick = "fn_set_date('juscrbStrtDt','juscrbEndDt','juscrbEndDt','1Y'); fn_set_datePopPick(this);">1년</button>
<button class="dateRange-btn selected" id="all"
onclick = "fn_reset_date('juscrbStrtDt','juscrbEndDt'); fn_set_datePopPick(this);">전체</button>
</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" onclick="fn_reset_button();"><spring:message code="button.init"/></button>
<button type="button" class="btn primary" id="btn_search" onclick=""><spring:message code="button.search"/></button>
</div>
<div class="right"></div>
</div>
<div id="jobUserList" ></div>
</form>
</div>
<div class="modal-footer">
<a href="#" rel="modal:close" class="btn outline" onclick="">닫기</a>
</div>
</div>
<script type="text/javascript">
/* ********************************************************
* 업무사용자 수정
******************************************************** */
const fn_update = function(){
if(!confirm('업무사용자를 <spring:message code="confirm.common.update"/>')) return;
fn_make_email();
fn_make_mbtlnb();
fn_make_ipsStr();
let data = $('#jobuserUpdateForm').serialize();
$.ajax({
type: 'post',
url : '<c:url value="/admin/use/mngr/updateJobUserUpdt"/>',
data : data,
success:function(result) {
result = JSON.parse(result.resBody.result);
if (result > 0){
alert('<spring:message code="success.common.update"/>');
$('[name=pageDv]').val('U');
$('#backupForm').attr('action', '<c:url value="/admin/use/mngr/selectJobUserUpdtForm"/>');
$('#backupForm').submit();
} else {
alert('<spring:message code="fail.common.update"/>');
}
}
});
}
/* ********************************************************
* 비밀번호 초기화
******************************************************** */
const fn_reset_pswd = function(){
if(!confirm('비밀번호를 초기화 시키겠습니까?\n비밀번호는 [아이디]로 변경됩니다.')) return;
let mngrId = '<c:out value="${ resultMap.detail[0].mngrId }" />';
let data = { mngrInnb: $('#mngrInnb').val(), mngrId : mngrId };
$.ajax({
type: 'post',
url : '<c:url value="/admin/use/mngr/updateJobUserPswdInitl" />',
data : data,
success:function(result) {
result = JSON.parse(result.resBody.result);
if(result > 0){
alert('<spring:message code="success.common.update"/>');
}else{
alert('<spring:message code="fail.common.update"/>');
}
}
});
}
/* ********************************************************
* 활성화
******************************************************** */
const fn_jobuser_enabled = function(){
if(!confirm('활성화 시키겠습니까?')) return;
let data = {
mngrInnb: $('#mngrInnb').val(),
mngrSttusCd : '01'
};
// ajax 호출
$.ajax({
type: 'post',
url : '<c:url value="/admin/use/mngr/updateJobUserInactvty"/>',
data : data,
success:function(result) {
result = JSON.parse(result.resBody.result);
if(result > 0){
alert('<spring:message code="success.common.update"/>');
$('[name=pageDv]').val('U');
$('#backupForm').attr('action', '<c:url value="/admin/use/mngr/selectJobUserUpdtForm"/>');
$('#backupForm').submit();
}else{
alert('<spring:message code="fail.common.update"/>');
}
}
});
}
/* ********************************************************
* 비활성화
******************************************************** */
const fn_jobuser_disabled = function(){
if(!confirm('비활성화 시키겠습니까?')) return;
let data = {
mngrInnb: $('#mngrInnb').val(),
mngrSttusCd : '02'
};
// ajax 호출
$.ajax({
type: 'post',
url : '<c:url value="/admin/use/mngr/updateJobUserInactvty"/>',
data : data,
success:function(result) {
result = JSON.parse(result.resBody.result);
if(result > 0){
alert('<spring:message code="success.common.update"/>');
$('[name=pageDv]').val('U');
$('#backupForm').attr('action', '<c:url value="/admin/use/mngr/selectJobUserUpdtForm"/>');
$('#backupForm').submit();
}else{
alert('<spring:message code="fail.common.update"/>');
}
}
});
}
/* ********************************************************
* 퇴사처리
******************************************************** */
const fn_jobuser_leave = function() {
if(!confirm('퇴사처리 시키겠습니까?')) return;
let data = {
mngrInnb: $('#mngrInnb').val(),
mngrNm: $('#mngrNm').val(),
mngrSttusCd: '03'
};
$.ajax({
type: 'post',
url : '<c:url value="/admin/use/mngr/updateJobUserInactvty"/>',
data : data,
success:function(result) {
result = JSON.parse(result.resBody.result);
if(result > 0){
alert('<spring:message code="success.common.update"/>');
fn_select_jobuser_list();
}else{
alert('<spring:message code="fail.common.update"/>');
}
}
});
}
/* ********************************************************
* 데이트 검색 값
******************************************************** */
const fn_set_datePopPick = function(_taget) {
let dateBtn = '#' + $(_taget).attr('id');
$('#srchDatePopPick').val(dateBtn);
}
/* ********************************************************
* 접속이력 검색
******************************************************** */
const fn_select_history = function(_pageIndex) {
$('#title').text('접속이력 조회');
$('#subTitle').text('접속일자');
$('#btn_search').attr('onclick', 'fn_select_history(\'1\');');
let mngrInnb = $('#mngrInnb').val();
let srchStartDate = $('#juscrbStrtDt').val();
let srchEndDate = $('#juscrbEndDt').val();
let params = {
'mngrInnb' : mngrInnb,
'srchStartDate' : srchStartDate,
'srchEndDate' : srchEndDate,
'pageIndex' : _pageIndex,
'pageUnit' : '5'
};
$.ajax({
type: 'post',
url : '<c:url value="/admin/use/mngr/selectJobUserConnHistListInqirePopup"/>',
data : params,
success:function(result) {
$('#jobUserList').html('');
$('#jobUserList').html(result);
let datePick = $('#srchDatePopPick').val();
$('#' + datePick).trigger('click');
}
});
}
/* ********************************************************
* 사용자 로그 검색
******************************************************** */
const fn_select_log = function(_pageIndex) {
$('#title').text('로그 조회');
$('#subTitle').text('행위일자');
$('#btn_search').attr('onclick', 'fn_select_log(\'1\');');
let mngrInnb = $('#mngrInnb').val();
let srchStartDate = $('#juscrbStrtDt').val();
let srchEndDate = $('#juscrbEndDt').val();
let params = {
'mngrInnb' : mngrInnb,
'srchStartDate' : srchStartDate,
'srchEndDate' : srchEndDate,
'pageIndex' : _pageIndex,
'pageUnit' : '5'
};
$.ajax({
type: 'post',
url : '<c:url value="/admin/use/mngr/selectJobUserLogListInqirePopup"/>',
data : params,
success:function(result) {
$('#jobUserList').html('');
$('#jobUserList').html(result);
let datePick = $('#srchDatePopPick').val();
$('#' + datePick).trigger('click');
}
});
}
</script>
</body>
</html>

View File

@@ -0,0 +1,113 @@
<%@ 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"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<title>통합 관리자</title>
<style type="text/css">
button:hover {
-webkit-transform: scale(1.3);
transform: scale(1.3);
}
</style>
<script src="/mngr/vendor/jquery-3.7.1.min.js"></script>
<script>
$( document ).ready(function(){
setInterval(function() {
location.reload();
}, 600000);
});
</script>
</head>
<body>
<h1>관리자>혜택 Today : <%= new Date()%></h1>
<button style="padding: 10px 30px; background-color: #ffc9c9;" type="button" onclick="location.href='/index'">관리자</button>
<button style="padding: 10px 30px; background-color: #ffa9c9;" type="button" onclick="location.href='/mngrordr'">주문</button>
<button style="padding: 10px 30px; background-color: #d0bfff;" type="button" onclick="location.href='/goodsmngr'">상품</button>
<button style="padding: 10px 30px; background-color: #dbe4ff;" type="button" onclick="location.href='/integ'">통합관리자</button>
<button style="padding: 10px 30px; background-color: #e9fac8;" type="button" onclick="location.href='/crm'">고객관리(CRM)</button>
<button style="padding: 10px 30px; background-color: #f5d63d;" type="button" onclick="location.href='/sopmalpc'">사용자(PC)</button>
<br>
<br><br>
푸시알림 >
<button type="button" onclick="window.open('/mngr/bnft/selectBnftPushEvtRegistForm');">이벤트별 알림</button>
<button type="button" onclick="window.open('/mngr/bnft/selectBnftPushListInqireForm');">알림보내기 목록</button>
<button type="button" onclick="window.open('/mngr/bnft/selectBnftPushSetupRegistForm');">설정</button>
<br><br>
혜택 화면관리 >
<button type="button" onclick="window.open('/mngr/bnft/selectBnftMngBannerRegistForm');">배너관리</button>
<button type="button" onclick="window.open('/mngr/bnft/selectBnftMngMenuRegistForm');">메뉴관리</button>
<br><br>
출석체크 >
<button type="button" onclick="window.open('/mngr/bnft/selectBnftListInqireForm?bnfDvCd=010');">출석 목록</button>
<button type="button" onclick="window.open('/mngr/bnft/sttus/selectBnftAtendPdSttusForm');">기간별내역</button>
<button type="button" onclick="window.open('/mngr/bnft/sttus/selectBnftAtendMbrSttusForm');">회원별내역</button>
<br><br>
만보기 >
<button type="button" onclick="window.open('/mngr/bnft/selectBnftListInqireForm?bnfDvCd=020');">만보기 목록</button>
<button type="button" onclick="window.open('/mngr/bnft/sttus/selectBnftStepcntPdSttusForm');">기간별내역</button>
<button type="button" onclick="window.open('/mngr/bnft/sttus/selectBnftStepcntMbrSttusForm');">회원별내역</button>
<br><br>
행운복권 >
<button type="button" onclick="window.open('/mngr/bnft/selectBnftListInqireForm?bnfDvCd=030');">행운복권 목록</button>
<button type="button" onclick="window.open('/mngr/bnft/sttus/selectBnftLucklottSttusForm');">당첨자내역</button>
<br><br>
룰렛게임 >
<button type="button" onclick="window.open('/mngr/bnft/selectBnftListInqireForm?bnfDvCd=040');">룰렛게임 목록</button>
<button type="button" onclick="window.open('/mngr/bnft/sttus/selectBnftRougameSttusForm');">당첨자내역</button>
<br><br>
캡슐만들기 >
<button type="button" onclick="window.open('/mngr/bnft/selectBnftCpslLeafRegistForm');">초록잎 설정</button>
<button type="button" onclick="window.open('/mngr/bnft/selectBnftListInqireForm?bnfDvCd=050');">캡슐만들기 목록</button>
<button type="button" onclick="window.open('/mngr/bnft/selectBnftGdccRegistForm?bnfDvCd=050');">안내문관리</button>
<button type="button" onclick="window.open('/mngr/bnft/sttus/selectBnftCpslmknSttusForm');">참여현황/상세</button>
<br><br>
이벤트보기 >
<button type="button" onclick="window.open('/mngr/bnft/selectBnftListInqireForm?bnfDvCd=060');">이벤트보기 목록</button>
<button type="button" onclick="window.open('/mngr/bnft/selectBnftGdccRegistForm?bnfDvCd=060');">참여방법안내</button>
<button type="button" onclick="window.open('/mngr/bnft/sttus/selectBnftEvntviewSttusForm');">참여현황</button>
<br><br>
라이브쇼핑 >
<button type="button" onclick="window.open('/mngr/bnft/selectBnftListInqireForm?bnfDvCd=070');">라이브쇼핑 목록</button>
<button type="button" onclick="window.open('/mngr/bnft/selectBnftGdccRegistForm?bnfDvCd=070');">참여방법안내</button>
<button type="button" onclick="window.open('/mngr/bnft/sttus/selectBnftLvshopSttusForm');">참여현황</button>
<br><br>
할인소식공유 >
<button type="button" onclick="window.open('/mngr/bnft/selectBnftListInqireForm?bnfDvCd=080');">할인소식공유 목록</button>
<button type="button" onclick="window.open('/mngr/bnft/selectBnftGdccRegistForm?bnfDvCd=080');">참여방법안내</button>
<button type="button" onclick="window.open('/mngr/bnft/sttus/selectBnftDiscsharSttusForm');">참여현황</button>
<br><br>
베스트리뷰 >
<button type="button" onclick="window.open('/mngr/bnft/selectBnftListInqireForm?bnfDvCd=090');">베스트리뷰 목록</button>
<button type="button" onclick="window.open('/mngr/bnft/selectBnftGdccRegistForm?bnfDvCd=090');">참여방법안내</button>
<button type="button" onclick="window.open('/mngr/bnft/sttus/selectBnftConrevSttusForm');">참여현황</button>
<br><br>
섭취챌린지 >
<button type="button" onclick="window.open('/mngr/bnft/selectBnftListInqireForm?bnfDvCd=100');">섭취챌린지 목록</button>
<button type="button" onclick="window.open('/mngr/bnft/sttus/selectBnftIntakchlSttusForm');">참여현황/상세</button>
<br><br>
관심분야 >
<button type="button" onclick="window.open('/mngr/bnft/selectBnftRegistForm?bnfDvCd=120');">관심분야 설정</button>
<button type="button" onclick="window.open('/mngr/bnft/sttus/selectBnftHlthsetSttusForm');">설정현황</button>
<button type="button" onclick="window.open('/mngr/bnft/sttus/selectBnftHlthsetMonSttusForm');">월별내역</button>
<br><br>
OX퀴즈 >
<button type="button" onclick="window.open('/mngr/bnft/selectBnftListInqireForm?bnfDvCd=130');">OX퀴즈 목록</button>
<button type="button" onclick="window.open('/mngr/bnft/sttus/selectBnftOxquizSttusForm');">참여현황/상세</button>
<br><br>
모바일스탬프 >
<button type="button" onclick="window.open('/mngr/bnft/selectBnftRegistForm?bnfDvCd=140');">모바일스탬프 설정</button>
<button type="button" onclick="window.open('/mngr/bnft/sttus/selectBnftPurstmpPdSttusForm');">기간별내역/상세</button>
<button type="button" onclick="window.open('/mngr/bnft/sttus/selectBnftPurstmpStrSttusForm');">매장별현황</button>
<br><br>
QR코드이벤트 >
<button type="button" onclick="window.open('/mngr/bnft/selectBnftListInqireForm?bnfDvCd=150');">QR코드이벤트 목록</button>
<button type="button" onclick="window.open('/mngr/bnft/sttus/selectBnftQrevntSttusForm');">참여현황/상세</button>
</body>
</html>

View File

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

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,459 @@
<%@ page import="org.springframework.util.ObjectUtils" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="ui" uri="http://www.winbit.kr/ctl/ui" %>
<%@ taglib prefix="f" uri="/WEB-INF/tlds/f.tld" %>
<%--
Class Name : include.jsp
Description : 통합관리자 CSS 및 JS 공통 include
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2023-12-14 최범식 최초 생성
--%>
<%-- CSS --%>
<!-- 모든 사이트 공통 -->
<link rel="stylesheet" href="<c:url value='/pc/css/default.css'/>">
<!-- 네이버페이 확인용 css(실제 API 적용할땐 삭제하시면 됩니다.) -->
<link rel="stylesheet" href="<c:url value='/pc/css/pay.css'/>">
<!-- jquery -->
<script src="<c:url value='/pc/vendor/jquery-3.7.1.min.js'/>"></script>
<!-- 슬라이드 -->
<link rel="stylesheet" type="text/css" href="<c:url value='/pc/vendor/slick/slick.css'/>">
<link rel="stylesheet" type="text/css" href="<c:url value='/pc/vendor/slick/slick-theme.css'/>">
<script src="<c:url value='/pc/vendor/slick/slick.min.js'/>"></script>
<!-- 실시간검색 -->
<script src="<c:url value='/pc/vendor/jquery.vticker.js'/>"></script>
<!-- 커스텀 셀렉트 박스 -->
<script src="<c:url value='/pc/vendor/jquery-nice-select/jquery.nice-select.min.js'/>"></script>
<link rel="stylesheet" href="<c:url value='/pc/vendor/jquery-nice-select/nice-select.css'/>">
<!-- 제이쿼리 모달 -->
<script src="<c:url value='/pc/vendor/jquery-modal/jquery.modal.min.js'/>"></script>
<link rel="stylesheet" href="<c:url value='/pc/vendor/jquery-modal/jquery.modal.min.css'/>">
<!-- 제이쿼리 모달 -->
<script src="<c:url value='/pc/vendor/dropzone/dropzone.min.js'/>"></script>
<link rel="stylesheet" href="<c:url value='/pc/vendor/dropzone/dropzone.min.css'/>">
<!-- 스크립트 -->
<script src="//t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js"></script>
<script src="<c:url value='/js/sopmal/common.js'/>"></script>
<script src="<c:url value='/pc/js/script.js'/>" defer></script>
<script src="<c:url value='/js/sopmal/gcone.js'/>"></script>
<%--Web-App연동 스크립트--%>
<script src="/mobile/js/bnft/common/Common_app.js" defer=""></script>
<!-- 파일 업로드 -->
<script src="<c:url value='/js/sopmal/fileupload_comm.js'/>"></script>
<!--ckeditor-->
<script src="<c:url value='/ckeditor/ckeditor.js'/>"></script>
<script src="<c:url value='/ckeditor/uploadAdapter.js'/>"></script>
<!-- CK editor -->
<link rel="stylesheet" href="<c:url value='/ckeditor/content.css'/>">
<%-- CK editor 적용 시 width 설정 --%>
<style type="text/css">
.ck.ck-editor {
width: 100%;
}
</style>
<!-- Date Picker -->
<link rel="stylesheet" type="text/css" href="<c:url value='/pc/vendor/jquery-ui/jquery-ui.min.css'/>">
<link rel="stylesheet" type="text/css" href="<c:url value='/pc/vendor/jquery-ui/jquery-ui.structure.css'/>">
<script src="<c:url value='/pc/vendor/jquery-ui/jquery-ui.min.js'/>"></script>
<!-- popModal -->
<link rel="stylesheet" type="text/css" href="<c:url value='/pc/vendor/popModal/popModal.min.css'/>">
<script src="<c:url value='/pc/vendor/popModal/popModal.min.js'/>"></script>
<c:set var="meta" value="${sopmallInfo.shopInfo}"/>
<!--파비콘,메타-->
<%--파비콘--%>
<c:choose>
<c:when test="${fn:startsWith(meta.fviconCours, '/')}">
<c:set var="fviconCours" value="${meta.fviconCours}"/>
</c:when>
<c:otherwise>
<c:set var="fviconCours" value="/${meta.fviconCours}"/>
</c:otherwise>
</c:choose>
<%--메타--%>
<%--상품 타이틀 사용 여부 Y이면--%>
<c:choose>
<c:when test = "${sopmallInfo.shopInfo.metaGoodsAt eq 'Y' and fn:contains(accessUri,'/sopmal/goods/selectGoodsDtl')}">
<c:set var = "metaGoodsSj" value="${sopmallInfo.shopInfo.metaGoodsSj}"/>
<c:set var = "metaGoodsDc" value="${sopmallInfo.shopInfo.metaGoodsDc}"/>
<c:set var = "metaGoodsKwrd" value="${sopmallInfo.shopInfo.metaGoodsKwrd}"/>
<%--상품 명 있으면 set--%>
<c:choose>
<c:when test = "${not empty resultMap.goodsDtl.goodsNm}">
<c:set var="goodsNm" value="${resultMap.goodsDtl.goodsNm}"/>
<c:set var = "metaGoodsSj" value="${fn:replace(metaGoodsSj, '{goodsNm}', goodsNm)}"/>
<c:set var="metaGoodsDc" value="${fn:replace(metaGoodsDc, '{goodsNm}', goodsNm)}"/>
<c:set var="metaGoodsKwrd" value="${fn:replace(metaGoodsKwrd, '{goodsNm}', goodsNm)}"/>
</c:when>
<c:otherwise>
<c:set var = "metaGoodsSj" value="${fn:replace(metaGoodsSj, '{goodsNm}', '')}"/>
<c:set var = "metaGoodsDc" value="${fn:replace(metaGoodsDc, '{goodsNm}', '')}"/>
<c:set var = "metaGoodsKwrd" value="${fn:replace(metaGoodsKwrd, '{goodsNm}', '')}"/>
</c:otherwise>
</c:choose>
<%--짧은 설명 있으면 set--%>
<c:choose>
<c:when test = "${not empty resultMap.goodsDtl.srtDc}">
<c:set var="srtDc" value="${resultMap.goodsDtl.srtDc}"/>
<c:set var = "metaGoodsSj" value="${fn:replace(metaGoodsSj, '{srtDc}', srtDc)}"/>
<c:set var="metaGoodsDc" value="${fn:replace(metaGoodsDc, '{srtDc}', srtDc)}"/>
<c:set var="metaGoodsKwrd" value="${fn:replace(metaGoodsKwrd, '{srtDc}', srtDc)}"/>
</c:when>
<c:otherwise>
<c:set var = "metaGoodsSj" value="${fn:replace(metaGoodsSj, '{srtDc}', '')}"/>
<c:set var="metaGoodsDc" value="${fn:replace(metaGoodsDc, '{srtDc}', '')}"/>
<c:set var="metaGoodsKwrd" value="${fn:replace(metaGoodsKwrd, '{srtDc}', '')}"/>
</c:otherwise>
</c:choose>
<c:choose>
<c:when test = "${not empty resultMap.goodsDtl.reprsntDc}">
<c:set var="reprsntDc" value="${resultMap.goodsDtl.reprsntDc}"/>
<c:set var = "metaGoodsSj" value="${fn:replace(metaGoodsSj, '{reprsntDc}', reprsntDc)}"/>
<c:set var="metaGoodsDc" value="${fn:replace(metaGoodsDc, '{reprsntDc}', reprsntDc)}"/>
<c:set var="metaGoodsKwrd" value="${fn:replace(metaGoodsKwrd, '{reprsntDc}', reprsntDc)}"/>
</c:when>
<c:otherwise>
<c:set var = "metaGoodsSj" value="${fn:replace(metaGoodsSj, '{reprsntDc}', '')}"/>
<c:set var="metaGoodsDc" value="${fn:replace(metaGoodsDc, '{reprsntDc}', '')}"/>
<c:set var="metaGoodsKwrd" value="${fn:replace(metaGoodsKwrd, '{reprsntDc}', '')}"/>
</c:otherwise>
</c:choose>
<c:choose>
<c:when test = "${not empty resultMap.goodsDtl.kwrd}">
<c:set var="kwrd" value="${resultMap.goodsDtl.kwrd}"/>
<c:set var = "metaGoodsSj" value="${fn:replace(metaGoodsSj, '{kwrd}', kwrd)}"/>
<c:set var="metaGoodsDc" value="${fn:replace(metaGoodsDc, '{kwrd}', kwrd)}"/>
<c:set var="metaGoodsKwrd" value="${fn:replace(metaGoodsKwrd, '{kwrd}', kwrd)}"/>
</c:when>
<c:otherwise>
<c:set var = "metaGoodsSj" value="${fn:replace(metaGoodsSj, '{kwrd}', '')}"/>
<c:set var="metaGoodsDc" value="${fn:replace(metaGoodsDc, '{kwrd}', '')}"/>
<c:set var="metaGoodsKwrd" value="${fn:replace(metaGoodsKwrd, '{kwrd}', '')}"/>
</c:otherwise>
</c:choose>
<title>${metaGoodsSj}</title>
<meta name="description" content="<c:out value="${metaGoodsDc}"/>">
<meta name="keywords" content="<c:out value="${metaGoodsKwrd}"/>">
<meta property="og:title" content="<c:out value="${metaGoodsSj}"/>">
<meta property="og:description" content="<c:out value="${metaGoodsDc}"/>">
</c:when>
<c:otherwise>
<title><c:out value="${meta.metaSj}"/></title>
<meta name="description" content="<c:out value="${meta.metaDc}"/>">
<meta name="keywords" content="<c:out value="${meta.metaKwrd}"/>">
<meta property="og:title" content="<c:out value="${meta.metaSj}"/>">
<meta property="og:description" content="<c:out value="${meta.metaDc}"/>">
</c:otherwise>
</c:choose>
<link rel="icon" href="<c:out value="${fviconCours}"/>">
<meta name="robots" content="index,follow"/>
<%--상품상세 일 경우 파라미터 포함 전체 경로 --%>
<c:set var="ogUrl" value=""/>
<c:choose>
<c:when test="${fn:contains(accessUri,'/sopmal/goods/selectGoodsDtl')}">
<c:set var="ogUrl" value="${meta.pcDomnAdres}${accessUri}?goodsInnb=${pageContext.request.getParameter('goodsInnb')}"/>
</c:when>
<c:otherwise>
<c:set var="ogUrl" value="${meta.pcDomnAdres}${accessUri}"/>
</c:otherwise>
</c:choose>
<meta property="og:url" content="<c:out value="${ogUrl}"/>">
<meta property="og:site_name" content="<c:out value="${meta.sopmalNm}"/>">
<%--상품 상세일 경우 상품 이미지, 그외 로고 --%>
<spring:eval expression="@environment.getProperty('sopmalfo.common.fileupload.cdnurl')" var="cdnurl"/>
<c:set var="ogImage" value=""/>
<c:choose>
<c:when test="${fn:contains(accessUri,'/sopmal/goods/selectGoodsDtl')}">
<c:set var="ogImage" value="${cdnurl}${fn:split(resultMap.goodsDtl.img, '|')[0]}"/>
</c:when>
<c:otherwise>
<c:set var="ogImage" value="${ cdnurl }${ topBarInfo.topbar.topFilCours }/${ topBarInfo.topbar.topSysFilNm }"/>
</c:otherwise>
</c:choose>
<meta property="og:image" content="<c:out value="${ogImage}"/>">
<meta property="og:type" content="website">
<spring:eval expression="@environment.getProperty('meta-content.google.'+'${sopmallInfo.shopInfo.sopmalCd}')"
var="googleMeta"/>
<spring:eval expression="@environment.getProperty('meta-content.naver.'+'${sopmallInfo.shopInfo.sopmalCd}')"
var="naverMeta"/>
<spring:eval expression="@environment.getProperty('meta-content.facebook.'+'${sopmallInfo.shopInfo.sopmalCd}')"
var="facebookMeta"/>
<meta name="google-site-verification" content="${googleMeta}"/>
<meta name="naver-site-verification" content="${naverMeta}"/>
<meta name="facebook-domain-verification" content="${facebookMeta}"/>
<script type="text/javascript">
/*****************************************************************
* 로딩이미지
****************************************************************/
const loding = function (isShow) {
if (isShow) {
$('.loadingImg').show();
} else {
$('.loadingImg').hide();
}
};
$.ajaxSetup({
beforeSend: function (jqXhr, settins) {
jqXhr.setRequestHeader('AJAX', true);
$("#overlay").fadeIn();
loding(true);
},
complete: function () {
//동시에 여러개의 AJAX가 수행될 경우를 대비하여 delay를 설정
setTimeout(function () {
$("#overlay").fadeOut();
loding(false);
}, 500);
},
error: function (data, status, error) {
fn_ajax_error(data, status, error);
}
});
//ajax error 공통 처리 함수
//* 개별처리 필요 할 시 공통 함수 선언 후 개별 처리 할 수 있음
function fn_ajax_error(data, status, error) {
$("#overlay").fadeOut();
loding(true);
console.log(data);
if (data?.responseJSON?.resBody?.message != null) {
if (fn_check_json(data.responseJSON.resBody.message)) {
const errorObject = JSON.parse(data.responseJSON.resBody.message);
console.log(errorObject);
if (!errorObject) {
alert('<spring:message code="error.internal-server"/>');
} else {
if (!errorObject.errorMsg) {
alert('<spring:message code="error.internal-server"/>');
} else {
alert(errorObject.errorMsg);
let isMtched = false;
$('.main').eq(0).find('input,select,textarea').each(function () {
for (let idx = 0; idx < errorObject.errorFields.length; idx++) {
if (errorObject.errorFields[idx].indexOf($(this).attr('name')) >= 0) {
isMtched = true;
break;
}
}
if (isMtched) {
$(this).focus();
return false;
}
});
}
}
} else {
if (data.responseJSON.resBody.message) {
alert(data.responseJSON.resBody.message);
}else {
alert('<spring:message code="error.internal-server"/>');
}
}
}
if (data?.responseJSON?.resBody?.result != null) {
if (fn_check_json(data.responseJSON.resBody.result)) {
const errorObject = JSON.parse(data.responseJSON.resBody.result);
console.log(errorObject);
if (!errorObject) {
alert('<spring:message code="error.internal-server"/>');
} else {
if (!errorObject.errorMsg) {
alert('<spring:message code="error.internal-server"/>');
} else {
alert(errorObject.errorMsg);
let isMtched = false;
$('.main').eq(0).find('input,select,textarea').each(function () {
for (let idx = 0; idx < errorObject.errorFields.length; idx++) {
if (errorObject.errorFields[idx].indexOf($(this).attr('name')) >= 0) {
isMtched = true;
break;
}
}
if (isMtched) {
$(this).focus();
return false;
}
});
}
}
} else {
if (data.responseJSON.resBody.result) {
alert(data.responseJSON.resBody.result);
} else {
alert('<spring:message code="error.internal-server"/>');
}
}
}
else if (data.status !== 200) {
if (data.status !== 0) {
if(data.responseJSON.resBody.result){
const result = JSON.parse(data.responseJSON.resBody.result);
alert(result.errorMsg);
}else{
alert('<spring:message code="error.internal-server"/>');
}
}
}
}
</script>
<%--광고스크립트--%>
<%--광고스크립트 공통--%>
<script src="<c:url value='/js/adscript/common/adscript_common.js'/>"></script>
<%--광고스크립트 광고 매체별--%>
<script src="<c:url value='/js/adscript/admedia/adscirpt_mobion.js'/>"></script>
<script src="<c:url value='/js/adscript/admedia/adscript_adn2dot0.js'/>"></script>
<script src="<c:url value='/js/adscript/admedia/adscript_criteo.js'/>"></script>
<script src="<c:url value='/js/adscript/admedia/adscript_googleAds.js'/>"></script>
<script src="<c:url value='/js/adscript/admedia/adscript_googleAnalytics.js'/>"></script>
<script src="<c:url value='/js/adscript/admedia/adscript_googleTagManager.js'/>"></script>
<script src="<c:url value='/js/adscript/admedia/adscript_kakaoMoments.js'/>"></script>
<script src="<c:url value='/js/adscript/admedia/adscript_meta.js'/>"></script>
<script src="<c:url value='/js/adscript/admedia/adscript_naverSrchAds.js'/>"></script>
<script src="<c:url value='/js/adscript/admedia/adscript_tgscript.js'/>"></script>
<%--광고스크립트 트리거 액션--%>
<script src="<c:url value='/js/adscript/trigger/adscript_trigger.js'/>"></script>
<%--광고 스크립트 실행 스크립트--%>
<script src="<c:url value='/js/adscript/adscript.js'/>"></script>
<%--theme적용--%>
<link rel="stylesheet" type="text/css" href="${sopmallInfo.themaPath}">
<script>
<%--장바구니 갯수 조회--%>
fn_reflesh_cart_cnt()
/*비밀번호 변경 알림 여부 확인*/
$(document).ready(function () {
const url = '<c:url value="/sopmal/mbr/selectPasswordChng"/>';
const originalUrl = window.location.href;
let passwordAt = '<%=(String)session.getAttribute("passwordChngDeAt")%>'
if (passwordAt === 'Y') {
location.href = url + '?originalUrl=' + encodeURIComponent(originalUrl);
}
})
</script>
<%--광고스크립트 정보--%>
<input type="hidden" id="adScriptDeviceTy" value="${deviceType}"/>
<% String adscriptMbrId = "";
if (!ObjectUtils.isEmpty(session.getAttribute("adscriptMbrId"))) {
adscriptMbrId = session.getAttribute("adscriptMbrId").toString();
request.setAttribute("adscriptMbrId", adscriptMbrId);
}%>
<input type="hidden" id="adscriptMbrId" value="${adscriptMbrId}"/>
<div id="mbrMarktClauseAgreeDiv"></div>
<script>
/*최초 로그인시 마케팅 수신동의를 받지 않았을 경우 마케팅 수신동의 팝업 띄우기*/
$(document).ready(function () {
const name = 'marktAgreeAt'
const cookieValue = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)');
const agreeAt = cookieValue ? cookieValue[2] : null;
//현재경로
let locationUrl = window.location.pathname;
//마케팅 수신동의 여부가 없으면 마케팅 수신동의 여부 팝업 띄우기
//회원 주문서 작성페이지에는 미노출함
if (agreeAt === 'N' && !locationUrl.includes("selectMbrPurchsForm")) {
document.cookie = 'marktAgreeAt=P; path=/'
//해당팝업이 오픈된건 마케팅수신동의여부가 없어서 열림
const stplatDvCd = '05'
$.ajax({
type: 'post',
url: "/sopmal/mbr/selectMbrMarktAgreePopup",
data: {stplatDvCd: stplatDvCd},
success: function (data) {
$('#mbrMarktClauseAgreePopup').remove();
$('#mbrMarktClauseAgreeDiv').html(data)
$('#mbrMarktClauseAgreePopup').modal()
}
});
}
//회원 주문서 작성페이지에는 미노출 처리
if (locationUrl.includes("selectMbrPurchsForm")) {
document.cookie = 'marktAgreeAt=P; path=/'
}
})
//광고 수신동의여부 수정
function fn_global_mbr_markt_agree_at(agreeAt) {
//광고수신동의 여부 수정
$.ajax({
type: 'post',
url: "/sopmal/mbr/updateMarkRecptnAgreUpdt",
data: {marktRecptnAgreAt: agreeAt},
success: function (data) {
console.log(data)
const result = JSON.parse(data.resBody.result)
//신규회원가입쿠폰 발행되었을 경우 메시지
if (result.status === '0') {
alert(result.message);
}
}
});
}
</script>
<!--로딩영역-->
<div class="loadingImg" style="display:none; position: relative; z-index: 1010;">
<div class="loding_popup_wrap"><img src="/mobile/images/loading.svg" alt="loading"></div>
</div>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

Some files were not shown because too many files have changed in this diff Show More