초기소스
This commit is contained in:
@@ -0,0 +1,411 @@
|
||||
<%@ 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 () {
|
||||
fn_select_Sndng();
|
||||
});
|
||||
|
||||
/* ********************************************************
|
||||
* 이메일 수동 발송 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>
|
||||
Reference in New Issue
Block a user