493 lines
16 KiB
Plaintext
493 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 : MessagePassivSndngManage.jsp
|
|
Description : 메시지 발송 관리
|
|
Modification Information
|
|
|
|
수정일 수정자 수정내용
|
|
------- -------- ---------------------------
|
|
2024-02-28 리브가 최초 생성
|
|
--%>
|
|
<!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" %>
|
|
<script src="<c:url value='/js/fileupload_comm.js'/>"></script>
|
|
</head>
|
|
<script>
|
|
$(document).ready(function () {
|
|
/**********************
|
|
* 엔터 키 입력 처리
|
|
***********************/
|
|
$("input").keydown(function(event) {
|
|
if(event.key === "Enter" || event.keyCode === 13) {
|
|
event.preventDefault();
|
|
}
|
|
})
|
|
|
|
<c:choose>
|
|
<c:when test="${mssageVO != null && mssageVO.reqTab eq 'search'}">
|
|
fn_select_listForm();
|
|
</c:when>
|
|
<c:otherwise>
|
|
fn_select_Sndng();
|
|
</c:otherwise>
|
|
</c:choose>
|
|
});
|
|
|
|
|
|
/* ********************************************************
|
|
* 메시지 수동 발송 TAB
|
|
******************************************************** */
|
|
const fn_select_Sndng = function () {
|
|
|
|
$.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);
|
|
}
|
|
});
|
|
}
|
|
|
|
/* ********************************************************
|
|
* 메시지 발송 내역 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 = null;
|
|
|
|
if(!pageIndex || pageIndex === '') {
|
|
$('#mssagePageIndex').val(1);
|
|
} else {
|
|
$('#mssagePageIndex').val(pageIndex);
|
|
}
|
|
|
|
pageUnit = $("#mssagePageUnit").val();
|
|
|
|
if(!pageUnit) {
|
|
dataStr = $('#listForm').serialize();
|
|
} else {
|
|
if($('#mssagePageUnit').length){
|
|
$('#mssagePageUnit').val(pageUnit);
|
|
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);
|
|
$('#mssagePageUnit').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 agree_yn_check = function (){
|
|
const agree_text = "";
|
|
if($("input[name='agree_yn']").attr("checked")){
|
|
agree_text= "위 내용에 대하여 {=date('Y년m월d일 H시i분s초')}에 {managerInfo.mname}({managerInfo.manager_id})께서 동의하셨습니다.";
|
|
$("#agree_text").show();
|
|
}else{
|
|
$("#agree_text").hide();
|
|
}
|
|
|
|
$("#agree_text").html(agree_text);
|
|
}
|
|
|
|
/***********************************************************
|
|
* 미리보기
|
|
* *********************************************************/
|
|
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>
|
|
<%-- 상단메뉴 공통화 적용 : 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" type="button" 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>
|
|
</html> |