420 lines
14 KiB
Plaintext
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> |