초기소스

This commit is contained in:
jazz
2025-10-29 17:08:05 +09:00
parent e531aa9540
commit 439a379a02
7551 changed files with 1234427 additions and 3 deletions

View File

@@ -0,0 +1,472 @@
<%@ 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 () {
fn_preview();
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 () {
$.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;
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>