Files
sake/src/main/webapp/WEB-INF/views/mngr/ntcn/email/EmailPassivSndngManage.jsp

420 lines
14 KiB
Plaintext

<%@ 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 : EmailPassivSndngManage.jsp
Description : 이메일 발송 관리
Modification Information
수정일 수정자 수정내용
------- -------- ---------------------------
2024-02-28 리브가 최초 생성
2024-04-04 이대환 sndng>email 분리
--%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- 공통 include --%>
<%@include file ="/WEB-INF/views/comm/mngr/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>
$(document).ready(function () {
<c:choose>
<c:when test="${emailSrchVO != null && emailSrchVO.reqTab eq 'search'}">
fn_select_listForm(1);
</c:when>
<c:otherwise>
fn_select_Sndng();
</c:otherwise>
</c:choose>
});
/* ********************************************************
* 이메일 수동 발송 TAB
******************************************************** */
const fn_select_Sndng = function () {
$.ajax({
type: 'post',
url: '/mngr/ntcn/email/selectEmailPassivSndng',
success: function (resultHtml) {
$("#selectListInqireFormBtn").removeClass("active");
$("#selectListInqireForm").removeClass("active");
$("#selectSndngBtn").addClass("active");
$("#selectSndng").addClass("active");
$('#selectSndng').html(resultHtml);
$("#emailSndngBtn").css("display" ,"block");
}
});
}
/* ********************************************************
* 이메일 수동 발송 TAB _ 받는 사람 콤보박스
******************************************************** */
const fn_clear_recpntEmail = function() {
$('#recpntEmail').val('');
$('.mbrInfo').val('');
$('.srchMbrCnt').html('0 명');
}
/* ********************************************************
* 이메일 수동 발송 TAB _ 최근 발송한 이메일
******************************************************** */
const fn_apply_rcntEmail = function(getvalue) {
if(!getvalue){
fn_reset_form('selectSndng');
Editor.modify({
"content": " "
});
}else{
$.ajax({
type: 'post',
url: '/mngr/ntcn/email/selectEmailSndngDtl',
data: 'emailLogInnb='+getvalue,
success: function (result) {
Editor.modify({
"content": result.boCtrlMap.cn
});
}
});
}
}
/* ********************************************************
* 이메일 발송 내역 TAB
******************************************************** */
const fn_select_listForm = function () {
$.ajax({
type: 'post',
url: '/mngr/ntcn/email/selectEmailPassivSndngListInqireRForm',
success: function (resultHtml) {
$("#selectSndngBtn").removeClass("active");
$("#selectSndng").removeClass("active");
$("#selectListInqireFormBtn").addClass("active");
$("#selectListInqireForm").addClass("active");
$('#selectListInqireForm').html(resultHtml);
$("#emailSndngBtn").css("display" ,"none");
}
});
}
/* ********************************************************
* 이메일 발송 내역 TAB _ 리스트 조회
******************************************************** */
const fn_select_emailList = function(pageIndex, pageUnit) {
let dataStr;
if(!pageIndex) {
$('#emailPageIndex').val(1);
} else {
$('#emailPageIndex').val(pageIndex);
}
if(!pageUnit) {
dataStr = $('#emailListForm').serialize();
} else {
if($('#emailPageUnit').length){
$('#emailPageUnit').val(pageUnit);
dataStr = $('#emailListForm').serialize();
} else {
dataStr = $('#emailListForm').serialize()+'&pageUnit='+pageUnit;
}
}
$.ajax({
type: 'post',
url : '/mngr/ntcn/email/selectEmailPassivSndngListInqire',
data : dataStr,
success:function(resultHtml) {
$('#emailPageDiv').html(resultHtml);
$('#emailPageUnit').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 : '/admin/ntcn/email/selectEmailSndngDtlPopupMbrTb',
// data : dataStr,
// success:function(resultHtml) {
// $('#mbrInfoDiv').html(resultHtml);
// $('#mbrPageUnit').niceSelect();
// }
// });
// }
/**********************************************
* 이메일 수신거부 링크 처리
***********************************************/
const recptnRjct = function(lang) {
var rjctInput = $('input[name="recptnRjctUrl"]');
let recptnRjctUrl = rjctInput.val();
const urlParams = new URLSearchParams(recptnRjctUrl.split('?')[1]);
let langInner;
switch (lang) {
case 'ko':
langInner = '수신거부';
break;
case 'en':
langInner = 'Click here';
break;
default :
$.ajax({
type: 'get',
// url: 'http://'+recptnRjctUrl+'?mbrInnb={mbrInnb}',
url: recptnRjctUrl+'?mbrInnb=',
dataType: 'text',
error : function(request, status, error) {
//loadingStop();
alert("잘못된 URL입니다.");
$(".rjctCopy").hide();
} ,
success: function(data, status, request) {
//loadingStop();
alert('정상 URL입니다.');
$('.rjctCopy').show();
}
});
}
if(lang){
let recptnRjctTag = '<a href="https://' + recptnRjctUrl + '?mbrInnb={mbrInnb}">' + langInner + '</a>';
prompt('복사되었습니다.',recptnRjctTag)
}
}
/**********************************************
* 이메일 수동 발송 등록
***********************************************/
const fn_regist_Email = function() {
$("#cn").val(Editor.getContent());
if(validateEmail($('#sndrEmail'), $('#recpntEmail'), $('.mbrInfo'), $('#sj'), $('#cn'), $('#legalResp'))){
if (confirm('이메일 수동 발송을 <spring:message code="confirm.common.save"/>')) {
$.ajax({
type : 'post',
url : '/mngr/ntcn/email/insertEmailSndng',
data : $('form').serialize(),
dataType: 'text',
success : function(data) {
alert('<spring:message code="success.common.insert"/>');
location.replace('/mngr/ntcn/email/selectEmailPassivSndngManage');
},
error : function(request, status, error) {
console.log(error)
}
});
}
}
}
/**********************************************
* 이메일 형식 유효성 체크 (올바른 이메일 형식일 때 True)
***********************************************/
const emailCheck = function(email_address) {
email_regex = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/i;
if(email_regex.test(email_address)){
return true;
}else{
return false;
}
}
/**********************************************
* 이메일 발송 유효성 체크
***********************************************/
const validateEmail = function(sndrEmail, recpntEmail, mbrInfo, sj, cn, legalResp) {
if (sndrEmail.val().trim() === '') {
alert('보내는 사람 이메일을 입력하십시오');
sndrEmail.focus();
return false;
}
if (!emailCheck(sndrEmail.val())) {
alert('올바른 이메일 형식이 아닙니다(보내는 사람)');
sndrEmail.focus();
return false;
}
const recpntEmailValue = recpntEmail.val().trim();
const mbrInfoValue = mbrInfo.val().trim();
if (!recpntEmailValue && !mbrInfoValue) {
alert('받는 사람 이메일을 입력하십시오');
recpntEmail.focus();
return false;
}
if(recpntEmailValue){
if (recpntEmailValue.indexOf(',') === -1 && !emailCheck(recpntEmailValue)) {
alert('올바른 이메일 형식이 아닙니다(받는 사람 - 직접 입력)');
recpntEmail.focus();
return false;
}
if (recpntEmailValue.indexOf(',') !== -1) {
const parts = recpntEmailValue.split(',').map(part => part.trim());
for (let index = 0; index < parts.length; index++) {
if (!emailCheck(parts[index])) {
alert('올바른 이메일 형식이 아닙니다(받는 사람 : '+(index+1)+'번째)');
recpntEmail.focus();
return false;
}
}
}
}
if (sj.val().trim() === '') {
alert('이메일 제목을 입력하십시오');
sj.focus();
return false;
}
if (cn.val().trim() === '') {
alert('이메일 내용을 입력하십시오');
return false;
}
if (!legalResp.prop('checked')) {
alert('정보통신망이용 촉진 및 정보보호등에 관한 법률 및 시행령’ 위반에 따른 책임은 당사에게 있음에 동의하십시오');
legalResp.focus();
return false;
}
return true;
}
/**********************************************************
* 검색 조건 이벤트 설정(날짜 전체 클릭 시 날짜 설정 초기화)
***********************************************************/
const fn_reset_date = function(strtDate,endDate){
$('#'+strtDate).datepicker().datepicker("setDate",'');
$('#'+endDate).datepicker().datepicker("setDate",'');
}
</script>
<body>
<%-- 상단메뉴 공통화 적용 : 2023-11-30 / 박철민 추가 --%>
<%@include file ="/WEB-INF/views/comm/mngr/Header.jsp" %>
<main class="main">
<%-- 좌측메뉴 공통화 적용 : 2023-11-30 / 박철민 추가 --%>
<%@include file ="/WEB-INF/views/comm/mngr/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_regist_Email()" id="emailSndngBtn">발송하기</button>
</div>
</div>
<div class="content-tab">
<button class="content-tab__btn active" id="selectSndngBtn" onclick="fn_select_Sndng()">이메일 수동 발송</button>
<button class="content-tab__btn" id="selectListInqireFormBtn" onclick="fn_select_listForm(1)">이메일 발송 내역</button>
</div>
<div class="content-tab__content active" id="selectSndng">
<%--이메일 수동 발송--%>
</div>
<div class="content-tab__content" id="selectListInqireForm">
<%--이메일 발송 내역--%>
</div>
<button class="scroll-to-top"><span class="visually-hidden">위로가기</span></button>
</div>
</div>
</main>
<div id="modalDiv">
</div>
<!-- 툴팁 클릭 컨텐츠 -->
<!-- 버튼의 data-info값과 id를 통일시켜야함 -->
<div id="info01" class="mini-info-content" style="width: 280px;">
<div class="mini-info-content__header">
<h5 class="mini-info-content__title">정보통신망 이용촉진 및 정보보호 등에 관한 법률</h5>
<button class="mini-info-content__close"><span class="visually-hidden">닫기</span></button>
</div>
<div class="mini-info-content__content">
<p>
<a href="https://www.lawnb.com/lawinfo/contents_view.asp?cid=00EB2355AF5D4259BD60F91473F0232C">제50조 (영리목적의 광고성 정보 전송 제한)</a>
<p>
<p>
<a href="https://www.lawnb.com/lawinfo/contents_view.asp?cid=00EB2355AF5D4259BD60F91473F0232C">제76조 (과태료)</a>
</p>
</div>
<br>
<div class="mini-info-content__header">
<h5 class="mini-info-content__title">한국인터넷진흥원 (KISA)</h5>
</div>
<div class="mini-info-content__content">
<p>
<a href="https://spam.kisa.or.kr/kor/rule/rule03.jsp">광고정보 전송 시 준수사항</a>
<p>
<p>
<a href="https://spam.kisa.or.kr/kor/way/way04.jsp">광고전송가이드</a>
</p>
</div>
</div>
<div id="info02" 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 style="color : red">반드시 링크 주소는 정상 동작 여부를 확인하신 후에 복사하여 이용하시기 바랍니다.</p>
</div>
</div>
</body>
</html>