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