2334 lines
76 KiB
Plaintext
2334 lines
76 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="ui" uri="http://egovframework.gov/ctl/ui"%>
|
|
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
|
|
<%@ page import="itn.com.cmm.LoginVO" %>
|
|
|
|
<!-- <script src="/publish/js/content.js"></script> -->
|
|
|
|
<script type="text/javascript">
|
|
|
|
var _regExp1 = /(^02.{0}|^01.{1}|^[0-9]{3})-?([0-9]{3,4})-?([0-9]{4})$/;
|
|
|
|
var imgFilePath = []; // 최종 선택한 이미지 경로 저장 변수
|
|
var imgFileId = []; // 최종 선택한 파일 아이디 저장 변수
|
|
var templateYn = []; // 템플릿 사용 여부 저장 변수
|
|
var tableL = null; //좌측 받는 사람 주소록 Tabulator 변수
|
|
var tableR = null; //우측 주소록 불러오기 Tabulator 변수
|
|
var tableAddr = null; //주소록 불러오기 팝업 Tabulator 변수
|
|
|
|
var loginVO = '${loginVO}';
|
|
|
|
var popCustomScrT=0; // 맞춤제작 요청 JSPark => 2023.02.21 추가
|
|
var msgResendAllFlag = "${msgResendAllFlag}";
|
|
var msgResendAllGroupId = "${msgResendAllGroupId}";
|
|
var msgResendAllAdvertiseYn = "${msgResendAllAdvertiseYn}";
|
|
var msgResendAllReplaceYn = "${msgResendAllReplaceYn}";
|
|
|
|
$(document).ready(function(){
|
|
//문자 발송 화면 폼 불러오기
|
|
listMsgDataView();
|
|
|
|
//최 하단 문자 샘플 탭 리스트 내용 불러오기
|
|
fnLetterListAjax(1);
|
|
|
|
//최 하단 그림문자 탭 리스트 내용 불러오기
|
|
fnPhotoListAjax(1);
|
|
|
|
// 내보관함 리스트 로그인이 완료된 경우에만 로드되도록
|
|
if(loginVO != "" && loginVO != null){
|
|
//최 하단 내문자함 탭 리스트 내용 불러오기
|
|
fnMyMsgListAjax(1);
|
|
}
|
|
|
|
//그림문자 샘플 탭 활성화 시키기
|
|
TabType2($('.tabType2 li').eq(1), '2');
|
|
|
|
$(".tDep2_cateCode a").each(function(index, item){
|
|
|
|
if($(this).text() == "선거"){
|
|
$('.tDep2_cateCode').find('.on').removeClass('on');
|
|
$(this).addClass('on');
|
|
}
|
|
})
|
|
|
|
// 맞춤제작 요청 JSPark => 2023.02.21 추가
|
|
//맞춤제작 등록 Popup
|
|
//customPopup();
|
|
|
|
});
|
|
|
|
//문자 그룹정보 => 재전송용
|
|
function getMjMsgGroupInfoByResend() {
|
|
$.ajax({
|
|
type: "POST",
|
|
url: "/web/mjon/msgdata/selectMjMsgGroupInfoByResendAjax.do",
|
|
data: {"msgResendAllGroupId" : msgResendAllGroupId},
|
|
dataType:'json',
|
|
async: false,
|
|
success: function (data) {
|
|
//alert(JSON.stringify(data));
|
|
if(data.isSuccess == true){
|
|
var msgData = data.resultMsgInfo;
|
|
var fileData = data.resultMsgAddPhotoInfo;
|
|
|
|
// 발신번호
|
|
var reCallFrom = $.trim(removeDash($("#callFromList option:selected").val()));
|
|
if ($.trim(removeDash(msgData.callFrom)) != reCallFrom) {
|
|
alert("발신번호가 이전에 발송한 번호가 아닙니다.\n발신번호를 확인해주세요.")
|
|
}
|
|
|
|
var smsTxt = msgData.smsTxt;
|
|
var subject = msgData.subject;
|
|
var fileId = "";
|
|
var filePath = "";
|
|
var len = fileData.length;
|
|
|
|
// 기존 내용 지워주기
|
|
//$(".btnReset").trigger("click");
|
|
$('.delLi').each(function(){
|
|
$(this).remove();
|
|
});
|
|
|
|
$('.preBoxF').each(function(){
|
|
$(this).remove();
|
|
});
|
|
|
|
$('#imgCnt').val(0);
|
|
|
|
// 기존 imgFileId, imgFilePath 배열에 있는 내용 초기화 해주기
|
|
imgFilePath = [];
|
|
imgFileId = [];
|
|
|
|
// 문자제목
|
|
if (msgData.subject != null && msgData.subject != "") {
|
|
$('.msg_title').addClass('active');
|
|
$("input:radio[name='title_status']:radio[value='Y']").prop('checked', true); // 선택하기
|
|
$('.textbox').show();
|
|
$("#mmsSubject").val(subject);
|
|
}
|
|
|
|
// 문자내용
|
|
// 선거 기본정보 제거
|
|
if (smsTxt.indexOf("(선거운동정보)") == 0) {
|
|
smsTxt = $.trim(smsTxt.replace("(선거운동정보)", ""));
|
|
var smsTxtLastIdxCnt = smsTxt.lastIndexOf("후보자전화번호");
|
|
if (smsTxtLastIdxCnt != -1) {
|
|
smsTxt = $.trim(smsTxt.substring(0, smsTxtLastIdxCnt));
|
|
}
|
|
}
|
|
$('#smsTxtArea').val(smsTxt);
|
|
|
|
// 첨부 이미지가 있는경우 이미지 처리해주기
|
|
if(len > 0) {
|
|
for(var i=0; i < len; i++) {
|
|
var num = i + 1;
|
|
var imgId = fileData[i].atchFileId;
|
|
var imgSn = fileData[i].fileSn;
|
|
var fileStreCours = fileData[i].fileStreCours;
|
|
var streFileNm = fileData[i].streFileNm;
|
|
var fileExtsn = fileData[i].fileExtsn;
|
|
|
|
/* var imgSrc = fileStreCours + "/" + streFileNm + "." + fileExtsn; */
|
|
var imgSrc = '/cmm/fms/getImage2.do?atchFileId=' + imgId + '&fileSn=' + imgSn;
|
|
myMsgImageControl(imgSrc, "edit_n", "Template", imgId);
|
|
}
|
|
|
|
fnByteString($('#smsTxtArea').val());
|
|
}
|
|
else {
|
|
fnByteString($('#smsTxtArea').val());
|
|
}
|
|
|
|
// 문자전송 상단으로 이동
|
|
var sendOfT=$('.send_top').offset().top;
|
|
$('html,body').stop().animate({'scrollTop':sendOfT-60},250);
|
|
|
|
} else {
|
|
//alert("Message : " + msg);
|
|
}
|
|
},
|
|
error: function (e) {
|
|
//alert("저장에 실패하였습니다.");
|
|
//console.log("ERROR : ", e);
|
|
}
|
|
});
|
|
}
|
|
|
|
// 문자 상세정보 => 재전송용
|
|
function getMjMsgListByResend() {
|
|
$.ajax({
|
|
type: "POST",
|
|
url: "/web/mjon/msgdata/selectMjMsgListByResendAjax.do",
|
|
data: {"msgResendAllGroupId" : msgResendAllGroupId},
|
|
dataType:'json',
|
|
async: true,
|
|
success: function (data) {
|
|
if(data.isSuccess == true){
|
|
var listCnt = data.resultList.length;
|
|
|
|
//수신자 처리 변수
|
|
var callToList = []; //수신자 처리 리스트
|
|
var tableData = []; //수신자 tabulator 처리 변수
|
|
|
|
for(var i = 0; i < listCnt; i++){ // 수신자 리스트 Tabulator에 입력해 주기
|
|
callToList[i] = data.resultList[i].callTo;
|
|
tableData.push({phone: removeDash(callToList[i])});
|
|
}
|
|
|
|
if(tableData.length > 0){
|
|
tableL.addData(dupliPhoneData(tableData)); // 받는사람 목록에 주소 정보 입력하기
|
|
|
|
totRows = tableL.getRows().length;
|
|
updateTotCnt(totRows); //전체 데이터 갯수 구하기
|
|
|
|
//결제 금액 구하기
|
|
totalPriceSum(totRows);
|
|
}
|
|
|
|
} else {
|
|
//alert("Message : " + msg);
|
|
}
|
|
},
|
|
error: function (e) {
|
|
//alert("저장에 실패하였습니다.");
|
|
//console.log("ERROR : ", e);
|
|
}
|
|
});
|
|
}
|
|
|
|
//문자발송 URL Move
|
|
function goMsgUrlMove() {
|
|
document.location.href = "/web/mjon/msgcampain/selectMsgDataView.do";
|
|
}
|
|
|
|
function listMsgDataView(){
|
|
|
|
var sendData = $(document.searchForm).serializeArray() ;
|
|
$(".contentArea").load("/web/mjon/msgcampain/selectMsgDataSMLViewAjax.do", sendData ,function(response, status, xhr){
|
|
|
|
//문자 재전송 처리를 위해 사용
|
|
$("#msgForm").ready(function(){ //문자 내용 폼이 로드된 후 실행
|
|
|
|
var msgResendFlag = '${reSendMsgVO.msgResendFlag}';
|
|
var msgSeqList = [];
|
|
msgSeqList = '${reSendMsgVO.msgSeqList}';
|
|
if(msgSeqList.length > 0){
|
|
|
|
fnMsgResend(msgResendFlag, msgSeqList);
|
|
|
|
}
|
|
|
|
//주소록에서 주소를 전송한 경우 처리
|
|
var moveAddrFlag = '${addrVO.moveAddrFlag}';
|
|
var addrIdList = [];
|
|
addrIdList = '${addrVO.addrIdList}';
|
|
if(addrIdList.length > 0) {
|
|
fnAddrSet(moveAddrFlag, addrIdList);
|
|
}
|
|
|
|
// 문자 재전송 New
|
|
if (msgResendAllFlag == "Y") {
|
|
if (msgResendAllReplaceYn != "Y") {
|
|
// 문자 그룹정보 => 재전송용
|
|
getMjMsgGroupInfoByResend();
|
|
}
|
|
|
|
// 문자 상세정보 => 재전송용
|
|
getMjMsgListByResend();
|
|
}
|
|
|
|
});
|
|
|
|
|
|
}).slideDown();
|
|
}
|
|
|
|
function fnAddrSet(moveAddrFlag, addrIdList){
|
|
|
|
if(moveAddrFlag == 'Y'){ // 주소록에서 넘어오는 경우
|
|
|
|
var form = document.moveAddrForm;
|
|
form.addrIdList.value = addrIdList;
|
|
|
|
var data = new FormData(form);
|
|
url = "/web/mjon/addr/selectAddrDataListAjax.do";
|
|
|
|
$.ajax({
|
|
type: "POST",
|
|
url: url,
|
|
data: data,
|
|
dataType:'json',
|
|
async: true,
|
|
processData: false,
|
|
contentType: false,
|
|
cache: false,
|
|
success: function (returnData, status) {
|
|
if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나
|
|
if("fail"==returnData.result){
|
|
|
|
alert(returnData.message);
|
|
return false;
|
|
|
|
}else if("loginFail"==returnData.result){
|
|
|
|
alert(returnData.message);
|
|
return false;
|
|
|
|
}else if(returnData.resultListCnt == '0'){
|
|
|
|
alert("전달된 주소록이 없습니다.");
|
|
return false;
|
|
|
|
}else{
|
|
|
|
var listCnt = returnData.resultListCnt;
|
|
|
|
//수신자 처리 변수
|
|
var tableData = []; //수신자 tabulator 처리 변수
|
|
|
|
for(var i = 0; i < listCnt; i++){ // 수신자 리스트 Tabulator에 입력해 주기
|
|
|
|
tableData.push({
|
|
name: returnData.resultList[i].addrNm
|
|
,phone: removeDash(returnData.resultList[i].addrPhoneNo)
|
|
,rep1: returnData.resultList[i].addrInfo1
|
|
,rep2: returnData.resultList[i].addrInfo2
|
|
,rep3: returnData.resultList[i].addrInfo3
|
|
,rep4: returnData.resultList[i].addrInfo4
|
|
});
|
|
|
|
}
|
|
|
|
tableL.addData(dupliPhoneData(tableData)); // 받는사람 목록에 주소 정보 입력하기
|
|
|
|
totRows = tableL.getRows().length;
|
|
|
|
updateTotCnt(totRows); //전체 데이터 갯수 구하기
|
|
|
|
//결제 금액 구하기
|
|
totalPriceSum(totRows);
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
} else if(status== 'fail'){
|
|
alert(returnData.message);
|
|
}
|
|
},
|
|
error: function (e) {
|
|
alert("주소록 가져오기에 실패하였습니다.");
|
|
console.log("ERROR : ", e);
|
|
},
|
|
beforeSend : function(xmlHttpRequest) {
|
|
//로딩창 show
|
|
$('.loading_layer').addClass('active');
|
|
},
|
|
complete : function(xhr, textStatus) {
|
|
//로딩창 hide
|
|
$('.loading_layer').removeClass('active');
|
|
}
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
function fnMsgResend(msgResendFlag, msgSeqList){
|
|
|
|
if(msgResendFlag == 'Y'){ // 문자재전송에서 넘어오는 경우
|
|
|
|
var form = document.msgResendForm;
|
|
form.msgSeqList.value = msgSeqList;
|
|
|
|
var data = new FormData(form);
|
|
url = "/web/mjon/msgcampain/selectReSendMsgDataListAjax.do";
|
|
|
|
$.ajax({
|
|
type: "POST",
|
|
url: url,
|
|
data: data,
|
|
dataType:'json',
|
|
async: false,
|
|
processData: false,
|
|
contentType: false,
|
|
cache: false,
|
|
success: function (returnData, status) {
|
|
if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나
|
|
if("fail"==returnData.result){
|
|
|
|
alert(returnData.message);
|
|
return false;
|
|
|
|
}else if("loginFail"==returnData.result){
|
|
|
|
alert(returnData.message);
|
|
return false;
|
|
|
|
}else if(returnData.resultListCnt == '0'){
|
|
|
|
alert("재전송 문자내용이 없습니다.");
|
|
return false;
|
|
|
|
}else{
|
|
|
|
var data = returnData;
|
|
var listCnt = returnData.resultListCnt;
|
|
var photoInfo = returnData.resultMsgPhotoInfo;
|
|
//수신자 처리 변수
|
|
var callToList = []; //수신자 처리 리스트
|
|
var tableData = []; //수신자 tabulator 처리 변수
|
|
|
|
//var subject = data.resultList[0].subject; //제목
|
|
//var smsTxt = data.resultList[0].smsTxt; //문자내용
|
|
//var fileCnt = data.resultList[0].fileCnt; //그림문자 이미지 갯수
|
|
//var filePath1 = data.resultList[0].fileType1; //이미지1 파일 경로
|
|
//var filePath2 = data.resultList[0].fileType2; //이미지2 파일 경로
|
|
//var filePath3 = data.resultList[0].fileType3; //이미지3 파일 경로
|
|
var atchFileId1 = photoInfo.atchFileId1; //이미지1 파일 번호
|
|
var atchFileId2 = photoInfo.atchFileId2; //이미지2 파일 번호
|
|
var atchFileId3 = photoInfo.atchFileId3; //이미지3 파일 번호
|
|
|
|
/* if(smsTxt != null){
|
|
|
|
$("#smsTxtArea").val(smsTxt);
|
|
fnByteString(smsTxt);
|
|
|
|
}
|
|
|
|
if(subject != null){
|
|
|
|
$("#mmsSubject").val(subject);
|
|
|
|
}
|
|
|
|
if(fileCnt > 0){ //문자 내용 이미지 처리해주기
|
|
|
|
for(var i=0; i < fileCnt; i++){
|
|
|
|
var imgId = "";
|
|
var imgSrc = "";
|
|
|
|
if(i == 0){
|
|
|
|
imgSrc = filePath1.replace("/usr/local/tomcat_mjon/webapps/mjon","");
|
|
imgId = atchFileId1;
|
|
|
|
}else if(i == 1){
|
|
|
|
imgSrc = filePath2.replace("/usr/local/tomcat_mjon/webapps/mjon","");
|
|
imgId = atchFileId2;
|
|
|
|
}else{
|
|
|
|
imgSrc = filePath3.replace("/usr/local/tomcat_mjon/webapps/mjon","");
|
|
imgId = atchFileId3;
|
|
|
|
}
|
|
|
|
myMsgImageControl(imgSrc, "edit_n", "Template", imgId);
|
|
|
|
}
|
|
|
|
} */
|
|
|
|
for(var i = 0; i < listCnt; i++){ // 수신자 리스트 Tabulator에 입력해 주기
|
|
|
|
callToList[i] = data.resultList[i].callTo;
|
|
tableData.push({phone: removeDash(callToList[i])});
|
|
|
|
}
|
|
|
|
if(tableData.length > 0){
|
|
|
|
tableL.addData(dupliPhoneData(tableData)); // 받는사람 목록에 주소 정보 입력하기
|
|
|
|
//totRows = tableL.getRows().length;
|
|
//updateTotCnt(totRows); //전체 데이터 갯수 구하기
|
|
|
|
//결제 금액 구하기
|
|
//totalPriceSum(totRows);
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
} else if(status== 'fail'){
|
|
alert(returnData.message);
|
|
}
|
|
},
|
|
error: function (e) { alert("문자 재전송 번호 등록에 실패하였습니다."); console.log("ERROR : ", e); }
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
function fnLetterListAjax(index){
|
|
var form = document.letterForm;
|
|
|
|
if($('.tDep1_letType a').eq(0).hasClass('on')) {
|
|
form.letterType.value='S';
|
|
} else if ($('.tDep1_letType a').eq(1).hasClass('on')) {
|
|
form.letterType.value='L';
|
|
}
|
|
|
|
//검색자 입력 검색 시 카테고리, 해쉬태그 전체 초기화
|
|
if(form.searchKeyword.value != '') {
|
|
form.categoryCode.value = "";
|
|
form.hashTag.value = "";
|
|
|
|
$('.tDep1_cateCode').find('.on').removeClass('on');
|
|
$('.tDep1_cateCode').find('.cateAll').addClass('on');
|
|
$('.tDep1_hashTag').find('.on').removeClass('on');
|
|
$('.tDep1_hashTag').find('.hashAll').addClass('on');
|
|
}else{
|
|
//해시태그가 선택되어 있을 경우 해당 태그 검색어를 전달해줌
|
|
var strTagTxt = $('.tDep1_hashTag').find('.on').text().replace("#","");
|
|
if(strTagTxt == "전체"){
|
|
form.hashTag.value = "";
|
|
}else{
|
|
form.hashTag.value = strTagTxt;
|
|
}
|
|
}
|
|
|
|
form.pageIndex.value = index;
|
|
var sendData = $(document.letterForm).serializeArray();
|
|
//하위 카테고리
|
|
$("#tDep1_depThrCateCode").load("/web/mjon/msgcampain/selectCateConfThrDptListAjax.do", sendData ,function(response, status, xhr){
|
|
if(document.letterForm.searchKeyword.value == ''){
|
|
$('.bottom_content .area_total_count').hide();
|
|
}
|
|
if(form.hashTag.value != ''){
|
|
if($('#letterLoad .nodata_box').length > 0){
|
|
$('#letterLoad .nodata_box').hide().next('.nodata_box.hashTag').show();
|
|
}
|
|
}
|
|
|
|
});
|
|
$("#letterLoad").load("/web/mjon/msgcampain/selectLetterDataListAjax.do", sendData ,function(response, status, xhr){
|
|
if(document.letterForm.searchKeyword.value == ''){
|
|
$('.bottom_content .area_total_count').hide();
|
|
}
|
|
});
|
|
|
|
}
|
|
|
|
function fnPhotoListAjax(index){
|
|
var form = document.letterForm;
|
|
//검색자 입력 검색 시 카테고리, 해쉬태그 전체 초기화
|
|
if(form.searchKeyword.value != '') {
|
|
form.categoryCode.value = "";
|
|
form.hashTag.value = "";
|
|
|
|
$('.tDep2_cateCode').find('.on').removeClass('on');
|
|
$('.tDep2_cateCode').find('.cateAll').addClass('on');
|
|
$('.tDep2_hashTag').find('.on').removeClass('on');
|
|
$('.tDep2_hashTag').find('.hashAll').addClass('on');
|
|
}else{
|
|
//해시태그가 선택되어 있을 경우 해당 태그 검색어를 전달해줌
|
|
var strTagTxt = $('.tDep2_hashTag').find('.on').text().replace("#","");
|
|
if(strTagTxt == "전체"){
|
|
form.hashTag.value = "";
|
|
}else{
|
|
form.hashTag.value = strTagTxt;
|
|
}
|
|
}
|
|
|
|
form.letterType.value = 'P';
|
|
form.pageIndex.value = index;
|
|
var sendData = $(document.letterForm).serializeArray();
|
|
//하위 카테고리
|
|
$("#tDep2_depThrCateCode").load("/web/mjon/msgcampain/selectCateConfThrDptListAjax.do", sendData ,function(response, status, xhr){
|
|
if(document.letterForm.searchKeyword.value == ''){
|
|
$('.bottom_content .area_total_count').hide();
|
|
}
|
|
if(form.hashTag.value != ''){
|
|
if($('#letterLoad .nodata_box').length > 0){
|
|
$('#letterLoad .nodata_box').hide().next('.nodata_box.hashTag').show();
|
|
}
|
|
}
|
|
|
|
});
|
|
$("#photoLoad").load("/web/mjon/msgcampain/selectPhotoDataListAjax.do", sendData ,function(response, status, xhr){
|
|
photoLayerView();
|
|
if(document.letterForm.searchKeyword.value == ''){
|
|
$('.bottom_content .area_total_count').hide();
|
|
}
|
|
if(form.hashTag.value != ''){
|
|
if($('#photoLoad .nodata_box').length > 0){
|
|
$('#photoLoad .nodata_box').hide().next('.nodata_box.hashTag').show();
|
|
}
|
|
}
|
|
});
|
|
|
|
}
|
|
|
|
function fnMyMsgListAjax(index){
|
|
|
|
if(loginVO == "" || loginVO == null){
|
|
//alert("로그인 후 사용이 가능합니다.");
|
|
location.href="/web/user/login/login.do";
|
|
return false;
|
|
}else{
|
|
document.myMsgForm.pageIndex.value = index;
|
|
var sendData = $(document.myMsgForm).serializeArray();
|
|
$("#myMsgLoad").load("/web/mjon/msgcampain/selectMyMsgDataListAjax.do", sendData ,function(response, status, xhr){
|
|
/* $(".msg_cont").mCustomScrollbar({
|
|
axis: 'y',
|
|
scrollbarPosition: "inside",
|
|
theme: "dark",
|
|
autoHideScrollbar: false
|
|
}); */
|
|
|
|
});
|
|
}
|
|
}
|
|
|
|
function fnMyMsgSearchListAjax(index){
|
|
|
|
document.myMsgForm.pageIndex.value = index;
|
|
var sendData = $(document.myMsgForm).serializeArray();
|
|
$("#myMsgLoad").load("/web/mjon/msgcampain/selectMyMsgDataListAjax.do", sendData ,function(response, status, xhr){
|
|
|
|
/* $(".msg_cont").mCustomScrollbar({
|
|
axis: 'y',
|
|
scrollbarPosition: "inside",
|
|
theme: "dark",
|
|
autoHideScrollbar: false
|
|
}); */
|
|
|
|
});
|
|
|
|
}
|
|
|
|
function fnMsgExcelDataView(){
|
|
|
|
/* var sendData = $(document.searchForm).serializeArray() ;
|
|
|
|
//엑셀 문자 탭 활성화 시키기
|
|
TabType1($('.tabType1 li').eq(1), '2');
|
|
|
|
$(".contentExcelArea").load("/web/mjon/msgcampain/selectMsgExcelDataViewAjax.do", sendData ,function(response, status, xhr){
|
|
}); */
|
|
|
|
location.href="/web/mjon/msgcampain/excel/selectMsgExcelDataView.do";
|
|
|
|
}
|
|
|
|
function fnMsgTWDataView(){
|
|
|
|
location.href="/web/mjon/msgcampain/selectMsgTWDataView.do";
|
|
|
|
}
|
|
|
|
function fn_saveMyMsg(){ // 내 문자 보관함 저장
|
|
|
|
var form = document.msgForm;
|
|
var myImgFileId = []; //신규 이미지 추가 파일 Id 저장 변수
|
|
var adverYn = $("input[name='send_adYn']:checked").val(); //광고 체크여부
|
|
|
|
/*
|
|
이미지 에디터를 사용하여 추가한 경우 이미지 업로드 처리 - 단 에디터에서 템플릿을 선택한 경우는 업로드안함
|
|
신규 이미지 추가를 한 경우만 이미지 파일 업로드 처리함
|
|
*/
|
|
$('.thumb_wrap').find('.thumb_img').each(function(idx, el) {
|
|
|
|
if($("#delLi"+idx).hasClass("Template")){ //이미지 에디터 템플릿 이미지 선택 여부 확인
|
|
templateYn.push("Y");
|
|
} else {
|
|
templateYn.push("N");
|
|
}
|
|
|
|
if($(el).hasClass("edit_y")) { //에디터를 사용했고
|
|
//이미지 변환
|
|
const imgBase64 = $(el).attr("src");
|
|
const decodImg = atob(imgBase64.split(',')[1]); // base64~ 부분을 제외하고 데이터 디코딩
|
|
|
|
|
|
let array = [];
|
|
for (let i = 0; i < decodImg.length; i++) {
|
|
array.push(decodImg.charCodeAt(i));
|
|
}
|
|
|
|
const file = new Blob([new Uint8Array(array)], {type: 'image/jpeg'});
|
|
const fileName = 'canvas_img_' + new Date().getMilliseconds() + '.jpg';
|
|
let formData = new FormData();
|
|
formData.append('file', file, fileName);
|
|
|
|
$.ajax({
|
|
type: 'post',
|
|
url: '/web/mjon/msgcampain/insertEditImageAjax.do',
|
|
cache: false,
|
|
data: formData,
|
|
dataType:'json',
|
|
processData: false,
|
|
contentType: false,
|
|
async: false,
|
|
success: function (returnData, status) {
|
|
if(status == 'success'){
|
|
// imgFilePath 에 배열로 담아주기(이미지 순서대로)
|
|
//console.log(imgFilePath);
|
|
//imgFilePath.push(returnData.filefullPath);
|
|
myImgFileId.push(returnData.atchFileId);
|
|
|
|
} else if(status== 'fail'){
|
|
alert(returnData.message);
|
|
}
|
|
},
|
|
error: function (e) { alert("이미지 업로드에 실패하였습니다."); console.log("ERROR : ", e); }
|
|
});
|
|
|
|
} else {
|
|
//에디터 안거친 템플릿 이미지면 바로 src 때림
|
|
imgFilePath.push($(el).attr("src"));
|
|
}
|
|
});
|
|
|
|
if(myImgFileId.length > 0 && imgFileId.length > 0){ //기존 샘플 이미지와 이미지 에디터 둘다 사용한 경우
|
|
|
|
var tempImgId = [];
|
|
|
|
tempImgId.push(myImgFileId);
|
|
tempImgId.push(imgFileId);
|
|
form.imgFileId.value = tempImgId;
|
|
|
|
}else if(myImgFileId.length > 0){ //이미지 에디터에서 신규 등록한 이미지
|
|
|
|
form.imgFileId.value = myImgFileId;
|
|
|
|
}else{ //샘플 이미지 선택만 했을경우(이미지 에디터 사용 안했을때)
|
|
|
|
form.imgFileId.value = imgFileId;
|
|
}
|
|
|
|
//광고 문자 내용 합쳐주기
|
|
if(adverYn == 'Y'){
|
|
|
|
var adTxt = $('.ad_txt').text();
|
|
var denyTxt = $('.deny_txt').text();
|
|
var smsTxt = form.smsTxtArea.value;
|
|
|
|
//var adverTxt = adTxt + '\n\n' + smsTxt + '\n\n' + denyTxt;
|
|
var adverTxt = smsTxt;
|
|
form.smsTxt.value = adverTxt;
|
|
|
|
}else{
|
|
|
|
var smsTxt = form.smsTxtArea.value;
|
|
form.smsTxt.value = smsTxt;
|
|
|
|
}
|
|
|
|
//문자 종류 설정(S:단문 , L:장문 , P:그림)
|
|
var photoSts = $('.delLi').length;
|
|
var conLeng = conByteLeng(form.smsTxt.value); // 내용 문자 입력 바이트 수 계산하기
|
|
|
|
if(photoSts > 0){
|
|
|
|
form.msgType.value = 'P';
|
|
|
|
}else if(conLeng > 90){
|
|
|
|
form.msgType.value = 'L';
|
|
|
|
}else{
|
|
|
|
form.msgType.value = 'S';
|
|
|
|
}
|
|
|
|
if(photoSts == '0' && conLeng == '0'){
|
|
|
|
alert("문자내용을 입력해 주세요.");
|
|
return false;
|
|
|
|
}
|
|
|
|
var data = new FormData(form);
|
|
url = "/web/mjon/msgcampain/insertMyMsgDataAjax.do";
|
|
|
|
$.ajax({
|
|
type: "POST",
|
|
url: url,
|
|
data: data,
|
|
dataType:'json',
|
|
async: false,
|
|
processData: false,
|
|
contentType: false,
|
|
cache: false,
|
|
success: function (returnData, status) {
|
|
if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나
|
|
if("fail"==returnData.result){
|
|
|
|
alert(returnData.message);
|
|
return false;
|
|
|
|
}else{
|
|
|
|
alert("내 문자함에 저장되었습니다.");
|
|
|
|
//내 문자함 탭 활성화 시키기
|
|
TabType2($('.tabType2 li').eq(3), '4');
|
|
var offset = $('.tabType2').offset();
|
|
$('html, body').animate({scrollTop : offset.top-140}, 400);
|
|
|
|
//최 하단 내문자함 탭 리스트 내용 불러오기
|
|
var sendData = $(document.myMsgForm).serializeArray();
|
|
$("#myMsgLoad").load("/web/mjon/msgcampain/selectMyMsgDataListAjax.do", sendData ,function(response, status, xhr){
|
|
});
|
|
|
|
}
|
|
|
|
} else if(status== 'fail'){
|
|
alert(returnData.message);
|
|
}
|
|
},
|
|
error: function (e) { alert("문자 저장에 실패하였습니다."); console.log("ERROR : ", e); }
|
|
});
|
|
|
|
}
|
|
|
|
//내 문자함으로 탭이동
|
|
function fnGoMyMsg(){
|
|
|
|
//내 문자함 탭 활성화 시키기
|
|
TabType2($('.tabType2 li').eq(3), '4');
|
|
|
|
var offset = $('.tabType2').offset();
|
|
$('html, body').animate({scrollTop : offset.top-140}, 400);
|
|
|
|
}
|
|
|
|
//MJ_MSG_GROUP_DATA 누락데이터 체크
|
|
function getMsgGroupDataErrorCheck() {
|
|
var isError = false;
|
|
|
|
$.ajax({
|
|
type: "POST",
|
|
url: "/web/mjon/msgdata/selectMsgGroupNotExistInfoAjax.do",
|
|
data: {},
|
|
dataType:'json',
|
|
async: false,
|
|
success: function (data) {
|
|
if (data.isSuccess) {
|
|
if (data.isError == true) {
|
|
isError = true;
|
|
}
|
|
}
|
|
},
|
|
error: function (e) {
|
|
|
|
}
|
|
});
|
|
|
|
return isError;
|
|
}
|
|
|
|
function checkConf() {
|
|
var confCheck = false;
|
|
|
|
$.ajax({
|
|
type: "POST",
|
|
url: "/web/mjon/conf/selectMjonMsgUseConfAjax.do",
|
|
data: {},
|
|
dataType:'json',
|
|
async: false,
|
|
success: function (returnData, status) {
|
|
if(returnData.result == "fail") {
|
|
console.log(returnData.message);
|
|
}else if(returnData.result == "success"){
|
|
confCheck = true;
|
|
}
|
|
}
|
|
,error: function (e) {console.log("ERROR : ", e); }
|
|
});
|
|
|
|
return confCheck;
|
|
}
|
|
|
|
//문자발송 처리 함수
|
|
function fn_sendMsgData(){
|
|
|
|
if(!checkConf()){ //문자온 conf-check
|
|
alert("현재 문자 발송하기 기능 점검 중입니다.\n\n1분 후 다시 시도해주세요.");
|
|
return false;
|
|
}
|
|
|
|
var form = document.msgForm;
|
|
|
|
//회원 보유 잔액 비교
|
|
var totPriceOnly = stringReplaceAll(form.totPrice.value, ",", "");
|
|
var userMoneyOnly = stringReplaceAll(form.myPrice.value, ",", "");
|
|
if(parseFloat(userMoneyOnly) < parseFloat(totPriceOnly)){
|
|
alert("문자 발송에 필요한 회원님의 보유 잔액이 부족 합니다.");
|
|
return false;
|
|
}
|
|
|
|
var loginVO = '${LoginVO}';
|
|
var adverYn = $("#send_adYnY").val();
|
|
var spamStatus = false;
|
|
var exceptSpamYn = $("#exceptSpamYn").val(); //금지어 필터링 예외 여부 - N 일 경우만 스팸 검사를 진행
|
|
|
|
/* //이벤트 진행중 회원의 경우 이벤트 잔여금액 비교 처리 필요.
|
|
var eventStatus = form.eventStatus.value;
|
|
var eventRemainCash = parseFloat(form.eventRemainCash.value);
|
|
|
|
if(eventStatus == 'Y'){
|
|
|
|
if(parseFloat(eventRemainCash) < parseFloat(totPriceOnly)){
|
|
|
|
alert("고객님의 이벤트 캐시 잔액은 " + eventRemainCash + "원으로 입력하신 수량의 문자를 전부 발송할 수 없습니다. 잔액 이하로 발송건수를 재설정하시기 바랍니다.");
|
|
return false;
|
|
}
|
|
|
|
} */
|
|
|
|
if(loginVO == "" || loginVO == null){
|
|
|
|
alert("문자발송 서비스는 로그인 후 이용 가능합니다.");
|
|
return false;
|
|
|
|
}
|
|
|
|
//MJ_MSG_GROUP_DATA 누락데이터 체크
|
|
//if (getMsgGroupDataErrorCheck() == false) {
|
|
// alert("고객님께서 발송한 최근문자가 발송결과에 표시되지않아, 문자발송이 임시로 차단되었습니다.\n문자온 고객센터에 문의해주세요.");
|
|
// return false;
|
|
//}
|
|
|
|
if(form.callFromList.value == ""){
|
|
|
|
alert("발신번호를 입력해 주세요.");
|
|
return false;
|
|
|
|
}
|
|
|
|
var titleStatus = form.title_status.value;
|
|
if(titleStatus == 'N'){//장문 제목 사용안함으로 선택시 제목에 있는 데이터 지워주기
|
|
|
|
form.mmsSubject.value = "";
|
|
|
|
}else{//장문 제목에 치환문자 포함된 경우 입력 못하도록 처리.
|
|
|
|
var mmsSubject = form.mmsSubject.value;
|
|
if(getSpacialStringChk(mmsSubject)){
|
|
alert("문자 제목에는 치환문자(엑셀 내 *이름*, *1*, *2*, *3*, *4* 등)를 사용하실 수 없습니다.");
|
|
return false;
|
|
}
|
|
|
|
}
|
|
|
|
//문자내용 첫글자에 특수기호 포함 여부 체크
|
|
var strCont = form.smsTxtArea.value;
|
|
var rtnStr = strChinJpnCheck(strCont);
|
|
|
|
//문자제목에 이모지가 있는지 체크
|
|
var titleStatusYn = $("input[name='title_status']:checked").val();
|
|
if(titleStatusYn == 'Y') {
|
|
if(!emojiCheck(form.mmsSubject.value)) return false;
|
|
}
|
|
|
|
//문자내용에 이모지가 있는지 체크
|
|
if(!emojiCheck(strCont)) return false;
|
|
|
|
if(rtnStr.length > 0){
|
|
|
|
alert("입력하신 문구 중 \" " + rtnStr + " \" 는 일부 휴대폰에서 표기되지 않을 수 있습니다.");
|
|
|
|
}
|
|
|
|
//문자내용 첫글자에 특수기호 포함 여부 체크
|
|
/* var strCont = form.smsTxtArea.value;
|
|
var repStr = strFirstCharCheck(strCont);
|
|
|
|
if(repStr.length > 0){
|
|
|
|
alert("문자 내용 첫 글자는 특수기호가 들어갈 수 없습니다.");
|
|
$('#smsTxtArea').val(strCont.replace(repStr, ""));
|
|
fnByteString(strCont.replace(repStr, ""));
|
|
return false;
|
|
|
|
} */
|
|
|
|
if(imgFilePath.length == 0){ // 그림문자일 경우 내용이 없어도 됨 , 장문 문자일 경우만 문자내용 체크함
|
|
|
|
if(form.smsTxtArea.value == ""){
|
|
|
|
alert("문자 내용을 입력해 주세요.");
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//선거 문자 내용 합쳐주기
|
|
if(adverYn == 'Y'){
|
|
|
|
var adTxt = $('.ad_txt').text();
|
|
var denyTxt = $('.deny_txt').html();
|
|
var smsTxt = form.smsTxtArea.value;
|
|
|
|
//선거운동정보 하단 테스트내용 줄바꿈 처리해주기
|
|
denyTxt = denyTxt.replaceAll("<br>","\n");
|
|
denyTxt = denyTxt.replaceAll("<br/>","\n");
|
|
|
|
var adverTxt = adTxt + "\n" + smsTxt + "\n" + denyTxt;
|
|
form.smsTxt.value = adverTxt;
|
|
|
|
}else{
|
|
|
|
var smsTxt = form.smsTxtArea.value;
|
|
form.smsTxt.value = smsTxt;
|
|
|
|
}
|
|
|
|
//수신번호 리스트 체크하기
|
|
var numCnt = 0;
|
|
var nameList = []; //치환문자 이름
|
|
var phoneNum = []; //받는사람
|
|
var rep1List = []; //치환문자1
|
|
var rep2List = []; //치환문자2
|
|
var rep3List = []; //치환문자3
|
|
var rep4List = []; //치환문자4
|
|
|
|
var selectedData = tableL.getRows();
|
|
|
|
if(selectedData == "" || selectedData == null){
|
|
|
|
alert("받는사람 주소를 한 건 이상 입력해주세요.");
|
|
return false;
|
|
|
|
}else{ // 선택한 Row '-' 문자 삭제하기
|
|
|
|
//자동동보문자 2만건 초과시 발송 안되도록 처리함.
|
|
var totSendDataCnt = selectedData.length;
|
|
if(totSendDataCnt > 20000){
|
|
alert("자동동보문자를 한번에 20,000건 이상 보내실 경우에는 꼭 고객센터(1551-8011)로 연락주시어 발송 요청 후 진행해 주시길 바랍니다.");
|
|
return false;
|
|
}
|
|
|
|
for(var i=0; i < selectedData.length; i++){
|
|
|
|
//일괄변환 문자에 콤마(,)가 들어가있으면 배열로 넘길때 문제가 발생하여 특수문자(§)로 치환하여 넘겨주도록 한다.
|
|
var name = tableL.getRows()[i].getData().name;
|
|
var phone = removeDash(tableL.getRows()[i].getData().phone);
|
|
var rep1 = tableL.getRows()[i].getData().rep1;
|
|
var rep2 = tableL.getRows()[i].getData().rep2;
|
|
var rep3 = tableL.getRows()[i].getData().rep3;
|
|
var rep4 = tableL.getRows()[i].getData().rep4;
|
|
|
|
if(phone == ""){
|
|
|
|
alert("수신 목록에 핸드폰 번호가 없는 항목이 있습니다.");
|
|
return false;
|
|
|
|
}else if(!checkHpNum(phone)){
|
|
|
|
alert("수신 목록에 잘 못된 핸드폰 번호가 있습니다. 핸드폰 번호 : " + phone + " 입니다.");
|
|
return false;
|
|
|
|
}else{
|
|
|
|
if(typeof(name) != 'undefined' && name != null && name != ""){
|
|
if(!emojiCheck(name)){//이모지 체크 해주기
|
|
return false;
|
|
}
|
|
nameList[i] = name.replaceAll(",","§");
|
|
}
|
|
|
|
phoneNum[i] = phone;
|
|
|
|
if(typeof(rep1) != 'undefined' && rep1 != null){
|
|
if(!emojiCheck(rep1)){//이모지 체크 해주기
|
|
return false;
|
|
}
|
|
rep1List[i] = rep1.replaceAll(",","§");
|
|
}
|
|
if(typeof(rep2) != 'undefined' && rep2 != null){
|
|
if(!emojiCheck(rep2)){//이모지 체크 해주기
|
|
return false;
|
|
}
|
|
rep2List[i] = rep2.replaceAll(",","§");
|
|
}
|
|
if(typeof(rep3) != 'undefined' && rep3 != null){
|
|
if(!emojiCheck(rep3)){//이모지 체크 해주기
|
|
return false;
|
|
}
|
|
rep3List[i] = rep3.replaceAll(",","§");
|
|
}
|
|
if(typeof(rep4) != 'undefined' && rep4 != null){
|
|
if(!emojiCheck(rep4)){//이모지 체크 해주기
|
|
return false;
|
|
}
|
|
rep4List[i] = rep4.replaceAll(",","§");
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
var reserYn = $("input[name=reserYn]:checked").val(); // 예약 발송 여부 확인
|
|
|
|
if(reserYn == 'Y'){
|
|
|
|
var date = $(".resDate").val();//form.msgResDate.value;
|
|
var hour = form.msgResHour.value;
|
|
var min = form.msgResMin.value;
|
|
|
|
if(date == ""){
|
|
|
|
alert("예약전송 날짜를 선택해 주세요.");
|
|
return false;
|
|
|
|
}else{
|
|
|
|
var now = new Date();
|
|
var reqDate = date + " " + hour + ":" + min + ":00";
|
|
var gapDate = getGapDayTime(date, hour, min);
|
|
|
|
if(gapDate < 0){ // 음수이면 이전날짜, 크면 이후 날짜.
|
|
alert("예약 날짜는 현재 시간 이후의 날짜 및 시간을 선택해 주세요.");
|
|
return false;
|
|
}else{
|
|
form.reqDate.value = reqDate; //예약일자 파라미터 저장
|
|
}
|
|
}
|
|
|
|
}else{
|
|
|
|
form.reqDate.value = "";
|
|
|
|
}
|
|
|
|
var fileLinks = document.getElementsByName("fileLinks");
|
|
|
|
var conLeng = conByteLeng($('#smsTxt').val()); // 내용 문자 입력 바이트 수 계산하기
|
|
|
|
if(conLeng > 2000){
|
|
|
|
alert("문자 내용은 2000byte를 넘을 수 없습니다.");
|
|
return false;
|
|
|
|
}
|
|
|
|
if(confirm("문자를 전송하시겠습니까?")){
|
|
|
|
|
|
imgFilePath = [];
|
|
$('.thumb_wrap').find('.thumb_img').each(function(idx, el) {
|
|
if($("#delLi"+idx).hasClass("Template")){
|
|
templateYn.push("Y");
|
|
} else {
|
|
templateYn.push("N");
|
|
}
|
|
|
|
if($(el).hasClass("edit_y")) {
|
|
//이미지 변환
|
|
const imgBase64 = $(el).attr("src");
|
|
const decodImg = atob(imgBase64.split(',')[1]); // base64~ 부분을 제외하고 데이터 디코딩
|
|
|
|
|
|
let array = [];
|
|
for (let i = 0; i < decodImg.length; i++) {
|
|
array.push(decodImg.charCodeAt(i));
|
|
}
|
|
|
|
const file = new Blob([new Uint8Array(array)], {type: 'image/jpeg'});
|
|
const fileName = 'canvas_img_' + new Date().getMilliseconds() + '.jpg';
|
|
let formData = new FormData();
|
|
formData.append('file', file, fileName);
|
|
|
|
$.ajax({
|
|
type: 'post',
|
|
url: '/web/mjon/msgcampain/insertEditImageAjax.do',
|
|
cache: false,
|
|
data: formData,
|
|
dataType:'json',
|
|
processData: false,
|
|
contentType: false,
|
|
async: false,
|
|
success: function (returnData, status) {
|
|
if(status == 'success'){
|
|
// imgFilePath 에 배열로 담아주기(이미지 순서대로)
|
|
//console.log(imgFilePath);
|
|
imgFilePath.push(returnData.filefullPath);
|
|
imgFileId.push(returnData.atchFileId);
|
|
|
|
} else if(status== 'fail'){
|
|
alert(returnData.message);
|
|
}
|
|
},
|
|
error: function (e) { alert("이미지 업로드에 실패하였습니다."); console.log("ERROR : ", e); }
|
|
});
|
|
|
|
} else {
|
|
|
|
if(imgFilePath.length != imgFileId.length){
|
|
//에디터 안거친 템플릿 이미지면 바로 src 때림
|
|
imgFilePath.push($(el).attr("src"));
|
|
}
|
|
|
|
}
|
|
});
|
|
|
|
form.imgFilePath.value = imgFilePath; // 저장한 이미지 경로 담아주기
|
|
form.callToList.value = phoneNum; //수신자번호 리스트 저장해주기
|
|
form.callFrom.value = removeDash(form.callFromList.value); // 발신번호 대쉬(-) 문자 없애주기
|
|
form.reserveYn.value = reserYn; // 즉시 / 예약 문자 선택 여부
|
|
form.templateYn.value = templateYn;
|
|
form.imgFileId.value = imgFileId;
|
|
form.nameList.value = nameList;
|
|
form.rep1List.value = rep1List;
|
|
form.rep2List.value = rep2List;
|
|
form.rep3List.value = rep3List;
|
|
form.rep4List.value = rep4List;
|
|
|
|
//총 결제금액 천단위 콤마 삭제 후 전송
|
|
var totPrice = form.totPrice.value;
|
|
totPrice = totPrice.replace(",","");
|
|
form.totPrice.value = totPrice;
|
|
|
|
//문자내용이 입력된 경우 스팸 필터링 실행
|
|
if(!form.smsTxtArea.value == "" && exceptSpamYn == "N"){
|
|
|
|
console.log(smsTxtArea);
|
|
var spmData = new FormData(form);
|
|
url = "/web/mjon/msgdata/selectSpamTxtChkAjax.do";
|
|
|
|
$.ajax({
|
|
type: "POST",
|
|
url: url,
|
|
data: spmData,
|
|
dataType:'json',
|
|
async: false,
|
|
processData: false,
|
|
contentType: false,
|
|
cache: false,
|
|
success: function (returnData, status) {
|
|
if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나
|
|
|
|
if("fail" == returnData.result){
|
|
|
|
alert(returnData.message);
|
|
return false;
|
|
|
|
}else if("loginFail" == returnData.result){
|
|
|
|
alert(returnData.message);
|
|
return false;
|
|
|
|
}else if("spams" == returnData.result){
|
|
|
|
// var spmFilterTxt = returnData.spmFilterTxt;
|
|
spamStatus = true;
|
|
|
|
// form.spamKeyword.value = spmFilterTxt;
|
|
form.spamStatus.value='Y';
|
|
}else{
|
|
form.spamKeyword.value = '';
|
|
form.spamStatus.value='N';
|
|
|
|
}
|
|
|
|
} else if(status== 'fail'){
|
|
alert(returnData.message);
|
|
return false;
|
|
}
|
|
},
|
|
error: function (e) { alert("문자 발송에 실패하였습니다."); console.log("ERROR : ", e); return false;}
|
|
});
|
|
|
|
}
|
|
|
|
|
|
//이벤트 진행중 회원의 경우 이벤트 잔여금액 비교 처리 필요.
|
|
//이벤트 캐시가 부족한 경우 이벤트 캐시로 발송 가능한 만큼만 이벤트 금액으로 발송 처리해줌.
|
|
//이 후 나머지 발송 건수는 이벤트 캐시가 아닌 일반 단가로 발송 처리를 진행 함.
|
|
var eventStatus = form.eventStatus.value;
|
|
|
|
if(eventStatus == 'Y'){ //이벤트 진행 대상자이면 문자종류에 이벤트로 구분
|
|
|
|
form.eventYn.value = "Y"; //이벤트문자 종류 설정
|
|
|
|
}
|
|
|
|
var eventRemainCash = parseFloat(form.eventRemainCash.value);
|
|
|
|
if(eventStatus == 'Y'){
|
|
|
|
if(parseFloat(eventRemainCash) < parseFloat(totPriceOnly)){
|
|
|
|
if(confirm("고객님의 이벤트 캐시 잔액(" + eventRemainCash + "원) 부족으로 요청하신 문자("+numberWithCommas(phoneNum.length)+"건)를 모두 발송할 수 없습니다. 이벤트 캐시 초과 건에 대해서는 일반 단가를 적용하여 발송하시겠습니까?")){
|
|
|
|
var smsTxtArea = $('#smsTxtArea').val();
|
|
var evnMsgType = $("#msgType").val();
|
|
var evnEachPrice = $("#eachPrice").val(); //form 에 저장된 이벤트 개별 단가 불러오기
|
|
var evnSendCnt = Math.floor(eventRemainCash / evnEachPrice);
|
|
var norEachPrice = 0;
|
|
var imgCnt = $("#imgCnt").val(); //그림 이미지 갯수
|
|
var txtReplYn = $("#txtReplYn").val(); //치환문자 포함 여부
|
|
var evnPhoneNumCnt = Number($("#evnPhoneNumCnt").val()); //치환문자 체크하면서 단/장문 건수 카운팅하면서 이벤트 금액으로 발송가능한 수신자 갯수 정보
|
|
var myPrice = parseFloat($("#myPrice").val()); //회원보유 잔여 캐시 금액
|
|
|
|
//수신목록 저장 배열 변수
|
|
var evnPhoneNum = []; //이벤트 단가 받는사람
|
|
var norPhoneNum = []; //일반 단가 받는 사람
|
|
|
|
//치환문자 포함 문자 저장 배열 변수(이벤트 문자 저장)
|
|
var evnName = [];
|
|
var evnRep1 = [];
|
|
var evnRep2 = [];
|
|
var evnRep3 = [];
|
|
var evnRep4 = [];
|
|
|
|
//치환문자 포함 문자 저장 배열 변수(일반 문자 저장)
|
|
var norName = [];
|
|
var norRep1 = [];
|
|
var norRep2 = [];
|
|
var norRep3 = [];
|
|
var norRep4 = [];
|
|
|
|
|
|
/**
|
|
Desc: 1. 그림, 치환, 일반 문자에 대해서 각각 이벤트 단가로 전송할 리스트 와 일반단가로 전송할 리스트를 분리 하는 로직
|
|
2. 그림 및 일반 문자는 단순 이벤트 금액으로 보낼수 있는 건수를 계산하여 리스트[0] 부터 발송 건수만큼 추출하여 evnPhoneNum 배열에 입력 후 이벤트 금액으로 발송 진행
|
|
3. 이벤트 발송이 완료되면, 이벤트 건수를 제외한 나머지 건수를 norPhoneNum 배열에 입력 후 일반 금액으로 발송 진행
|
|
4. 일반 발송시에 전송 단가(eachPrice), 전체금액(totPrice) 등 변수 정보 변경
|
|
=====
|
|
5. 그림문자가 아닌 치환문자인 경우 치환 처리를 진행하면서 단문, 장문을 구분하고 이때 이벤트 금액에서 단문, 장문 가격을 차감하여 보낼 수량을 카운팅 함.
|
|
6. 치환 체크가 완료되면 치환시 나온 카운트 갯수만큼 이벤트 배열과 일반 배열에 분리처리 후 전송함.
|
|
Param Array : evnPhoneNum, norPhoneNum
|
|
function : getNorEachPrice - 메세지 타입(msgType)에 따른 단문, 장문, 그림문자 개별 단가 금액 확인
|
|
sendMsgAjax - 문자 발송 요청 Ajax 처리
|
|
*/
|
|
|
|
//그림문자인 경우
|
|
if(imgCnt > 0){
|
|
|
|
//이벤트 가격으로 전송 할 받는 사람 리스트 저장처리
|
|
for(var i=0; i< evnSendCnt; i++){
|
|
evnPhoneNum[i]= phoneNum[i];
|
|
|
|
//그림문자에 치환문자가 포함된 경우
|
|
if(txtReplYn == 'Y'){
|
|
|
|
evnPhoneNum[i] = phoneNum[i];
|
|
evnName[i] = nameList[i];
|
|
evnRep1[i] = rep1List[i];
|
|
evnRep2[i] = rep2List[i];
|
|
evnRep3[i] = rep3List[i];
|
|
evnRep4[i] = rep4List[i];
|
|
|
|
}
|
|
}
|
|
|
|
//일반 가격으로 전송 할 받는 사람 리스트 저장처리
|
|
for(var j=0; j < phoneNum.length - evnSendCnt; j++){
|
|
norPhoneNum[j]= phoneNum[j + evnSendCnt];
|
|
|
|
//그림문자에 치환문자가 포함된 경우
|
|
if(txtReplYn == 'Y'){
|
|
|
|
norPhoneNum[j]= phoneNum[j + evnSendCnt];
|
|
norName[j] = nameList[j + evnSendCnt];
|
|
norRep1[j] = rep1List[j + evnSendCnt];
|
|
norRep2[j] = rep2List[j + evnSendCnt];
|
|
norRep3[j] = rep3List[j + evnSendCnt];
|
|
norRep4[j] = rep4List[j + evnSendCnt];
|
|
|
|
}
|
|
|
|
};
|
|
|
|
}else if(txtReplYn == 'Y'){//치환 문자가 있는 경우 , 그림문자에 치환이 있는 경우 그림문자 가격으로 발송
|
|
|
|
//이벤트 가격으로 전송 할 받는 사람 리스트 저장처리
|
|
for(var i=0; i< evnPhoneNumCnt; i++){
|
|
evnPhoneNum[i] = phoneNum[i];
|
|
evnName[i] = nameList[i];
|
|
evnRep1[i] = rep1List[i];
|
|
evnRep2[i] = rep2List[i];
|
|
evnRep3[i] = rep3List[i];
|
|
evnRep4[i] = rep4List[i];
|
|
|
|
}
|
|
|
|
//일반 가격으로 전송 할 받는 사람 리스트 저장처리
|
|
for(var j=0; j < phoneNum.length - evnPhoneNumCnt; j++){
|
|
norPhoneNum[j]= phoneNum[j + evnPhoneNumCnt];
|
|
norName[j] = nameList[j + evnPhoneNumCnt];
|
|
norRep1[j] = rep1List[j + evnPhoneNumCnt];
|
|
norRep2[j] = rep2List[j + evnPhoneNumCnt];
|
|
norRep3[j] = rep3List[j + evnPhoneNumCnt];
|
|
norRep4[j] = rep4List[j + evnPhoneNumCnt];
|
|
|
|
};
|
|
|
|
}else{//치환문자 없는 경우 처리
|
|
|
|
//이벤트 가격으로 전송 할 받는 사람 리스트 저장처리
|
|
for(var i=0; i< evnSendCnt; i++){
|
|
evnPhoneNum[i]= phoneNum[i];
|
|
}
|
|
|
|
//일반 가격으로 전송 할 받는 사람 리스트 저장처리
|
|
for(var j=0; j < phoneNum.length - evnSendCnt; j++){
|
|
norPhoneNum[j]= phoneNum[j + evnSendCnt];
|
|
};
|
|
}
|
|
|
|
var orgShortMsgCnt = $("#shortMsgCnt").val(); //단문 총 건수 백업
|
|
var orgLongMsgCnt = $("#longMsgCnt").val(); //장문 총 건수 백업
|
|
//이벤트 단가 문자 전송 처리 시작
|
|
if(evnPhoneNum.length > 0){
|
|
|
|
form.callToList.value = evnPhoneNum; //수신자번호 리스트 저장해주기
|
|
form.totPrice.value = evnEachPrice * evnSendCnt; //이벤트 단가 총 결제금액 셋팅해주기
|
|
form.eventStatus.value = 'Y';
|
|
form.eventYn.value = 'Y';
|
|
|
|
var evnTotPrice = parseFloat(form.totPrice.value);
|
|
|
|
if(myPrice < evnTotPrice){
|
|
|
|
alert("문자 발송에 필요한 회원님의 보유 잔액이 부족 합니다.");
|
|
return false;
|
|
|
|
}else{
|
|
|
|
myPrice = myPrice - evnTotPrice;
|
|
|
|
}
|
|
|
|
//치환문자가 있는 경우 변수 정보 담아주기(그림문자 아닌경우)
|
|
if(txtReplYn == 'Y' && imgCnt < 1){
|
|
|
|
var evnShortMsgCnt = $("#evnShortMsgCnt").val();
|
|
var evnLongMsgCnt = $("#evnLongMsgCnt").val();
|
|
|
|
form.shortMsgCnt.value = evnShortMsgCnt;
|
|
form.longMsgCnt.value = evnLongMsgCnt;
|
|
form.nameList.value = evnName;
|
|
form.rep1List.value = evnRep1;
|
|
form.rep2List.value = evnRep2;
|
|
form.rep3List.value = evnRep3;
|
|
form.rep4List.value = evnRep4;
|
|
|
|
}else if(txtReplYn == 'Y' && imgCnt > 0){//치환문자가 있는 경우 변수 정보 담아주기(그림문자인 경우)
|
|
|
|
form.nameList.value = evnName;
|
|
form.rep1List.value = evnRep1;
|
|
form.rep2List.value = evnRep2;
|
|
form.rep3List.value = evnRep3;
|
|
form.rep4List.value = evnRep4;
|
|
|
|
}
|
|
|
|
//이벤트 발송 실행 해주기
|
|
var form = document.msgForm;
|
|
|
|
var data = new FormData(form);
|
|
url = "/web/mjon/msgcampain/sendMsgDataAjax.do";
|
|
|
|
$.ajax({
|
|
type: "POST",
|
|
url: url,
|
|
data: data,
|
|
dataType:'json',
|
|
async: true,
|
|
processData: false,
|
|
contentType: false,
|
|
cache: false,
|
|
success: function (returnData, status) {
|
|
if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나
|
|
if("fail" == returnData.result){
|
|
|
|
alert(returnData.message);
|
|
return false;
|
|
|
|
}else if("loginFail" == returnData.result){
|
|
|
|
alert(returnData.message);
|
|
return false;
|
|
|
|
}else if("smsLengFail" == returnData.result){
|
|
|
|
alert(returnData.message);
|
|
return false;
|
|
|
|
}else if("imgSourceFail" == returnData.result){
|
|
|
|
$('.pop_msg_fails').css({'display':'block','opacity':'1','left':'50%','top':'50%','transform':'translate(-50%,-50%)'});
|
|
$('.pop_msg_fails .msg_text').html(returnData.message);
|
|
$('.mask').addClass('on');
|
|
|
|
}else if("spamKeyWordFail" == returnData.result){//스팸 및 스미싱 단어가 들어간 문자 발송시 회원 이용정지 처리
|
|
|
|
$('.pop_msg_spam').css({'display':'block','opacity':'1','left':'50%','top':'50%','transform':'translate(-50%,-50%)'});
|
|
$('.pop_msg_spam .msg_text').html(returnData.message);
|
|
$('.mask').addClass('on');
|
|
|
|
}else if("statusFail" == returnData.result){
|
|
|
|
alert(returnData.message);
|
|
//문자발송 URL Move
|
|
goMsgUrlMove();
|
|
return false;
|
|
|
|
}else{
|
|
|
|
var smsCnt = returnData.resultSts;
|
|
var blockCnt = returnData.resultBlockSts;
|
|
|
|
//이벤트 발송 처리가 완료 되면 나머지 일반 캐시로 발송할 문자 처리를 진행해 준다.
|
|
var norPhoneNumCnt = norPhoneNum.length;
|
|
if(norPhoneNumCnt > 0){
|
|
|
|
var norEachPrice = getNorEachPrice(evnMsgType); //일반 개별 단가 금액 셋팅해주기
|
|
|
|
form.callToList.value = norPhoneNum; //수신자번호 리스트 저장해주기
|
|
form.eachPrice.value = norEachPrice; //일반 개별 단가 금액 셋팅해주기
|
|
form.totPrice.value = norEachPrice * norPhoneNumCnt; //일반 단가 총 결제 금액 셋팅해주기
|
|
form.sPrice.value = $("#norsPrice").val();
|
|
form.mPrice.value = $("#normPrice").val();
|
|
form.pPrice.value = $("#norpPrice").val();
|
|
form.p2Price.value = $("#norp2Price").val();
|
|
form.p3Price.value = $("#norp3Price").val();
|
|
form.eventStatus.value = 'N';
|
|
form.eventYn.value = 'N';
|
|
|
|
var norTotPrice = parseFloat(form.totPrice.value);
|
|
|
|
if(myPrice < norTotPrice){
|
|
|
|
var failMsg = "이벤트 캐시 잔액으로 발송한 문자("+smsCnt+"건)의 발송이 완료되었으나 일반 문자 발송("+norPhoneNumCnt+"건)에 필요한 회원님의 보유 잔액이 부족 합니다.";
|
|
|
|
$('.loading_layer').removeClass('active');
|
|
|
|
$('.pop_msg_fails').css({'display':'block','opacity':'1','left':'50%','top':'50%','transform':'translate(-50%,-50%)'});
|
|
$('.pop_msg_fails .msg_text').html(failMsg);
|
|
$('.mask').addClass('on');
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
//치환문자가 있는 경우 변수 정보 담아주기(그림문자가 아닌경우)
|
|
if(txtReplYn == 'Y' && imgCnt < 1){
|
|
|
|
//치환문자 단/장문 혼용된 경우 각 타입별 건수를 재 계산해준다.
|
|
//총 단/장문 각각 건수에서 이벤트로 발송한 건수를 빼준다.
|
|
var evnShortMsgCnt = $("#evnShortMsgCnt").val();
|
|
var evnLongMsgCnt = $("#evnLongMsgCnt").val();
|
|
|
|
var shortMsgCnt = Number(orgShortMsgCnt) - Number(evnShortMsgCnt);
|
|
var longMsgCnt = Number(orgLongMsgCnt) - Number(evnLongMsgCnt);
|
|
|
|
|
|
//계산 값이 음수로 나오는 경우 0건으로 간주한다.
|
|
if(shortMsgCnt <= 0){
|
|
|
|
shortMsgCnt = 0;
|
|
|
|
}
|
|
|
|
if(longMsgCnt <= 0){
|
|
|
|
longMsgCnt = 0;
|
|
|
|
}
|
|
|
|
form.shortMsgCnt.value = shortMsgCnt;
|
|
form.longMsgCnt.value = longMsgCnt;
|
|
|
|
form.nameList.value = norName;
|
|
form.rep1List.value = norRep1;
|
|
form.rep2List.value = norRep2;
|
|
form.rep3List.value = norRep3;
|
|
form.rep4List.value = norRep4;
|
|
|
|
}else if(txtReplYn == 'Y' && imgCnt > 0){//치환문자가 있는 경우 변수 정보 담아주기(그림문자인 경우)
|
|
|
|
form.nameList.value = norName;
|
|
form.rep1List.value = norRep1;
|
|
form.rep2List.value = norRep2;
|
|
form.rep3List.value = norRep3;
|
|
form.rep4List.value = norRep4;
|
|
|
|
}
|
|
|
|
|
|
sendMsgAjax(smsCnt, blockCnt);
|
|
}
|
|
|
|
}
|
|
|
|
} else if(status== 'fail'){
|
|
alert(returnData.message);
|
|
}
|
|
},
|
|
beforeSend : function(xmlHttpRequest) {
|
|
//로딩창 show
|
|
$('.loading_layer').addClass('active');
|
|
},
|
|
complete : function(xhr, textStatus) {
|
|
//로딩창 hide
|
|
//$('.loading_layer').removeClass('active');
|
|
},
|
|
error: function (e) { alert("문자 발송에 실패하였습니다."); console.log("ERROR : ", e); }
|
|
});
|
|
|
|
}else{
|
|
|
|
//이벤트 건수로 발송 할 수 없는 경우 일반 캐시 단가로 발송처리하기
|
|
if(norPhoneNum.length > 0){
|
|
|
|
form.callToList.value = norPhoneNum; //수신자번호 리스트 저장해주기
|
|
form.eachPrice.value = getNorEachPrice(evnMsgType); //일반 개별 단가 금액 셋팅해주기
|
|
form.sPrice.value = $("#norsPrice").val();
|
|
form.mPrice.value = $("#normPrice").val();
|
|
form.pPrice.value = $("#norpPrice").val();
|
|
form.p2Price.value = $("#norp2Price").val();
|
|
form.p3Price.value = $("#norp3Price").val();
|
|
form.eventStatus.value = 'N';
|
|
form.eventYn.value = 'N';
|
|
|
|
sendMsgAjax(0,0);
|
|
|
|
}else{
|
|
|
|
alert("문자 전송 중 오류가 발생하였습니다.!!");
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return false;
|
|
}else{
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}else{
|
|
|
|
//발송 Ajax 호출해주기
|
|
sendMsgAjax(0,0);
|
|
|
|
}
|
|
|
|
}else{
|
|
|
|
//발송 Ajax 호출해주기
|
|
sendMsgAjax(0,0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
//이벤트가 아닌 일반 개별 단가 셋팅해주기
|
|
function getNorEachPrice(evnMsgType){
|
|
|
|
var norEachPrice = 0;
|
|
var evnImgCnt = $("#imgCnt").val();
|
|
|
|
//일반 단가로 변경해주기
|
|
if(evnMsgType == '4'){
|
|
|
|
norEachPrice = $("#norsPrice").val();
|
|
console.log("norEachPrice Short::: "+norEachPrice);
|
|
|
|
}else if(evnMsgType == '6'){
|
|
|
|
if(evnImgCnt == 0){//장문 가격
|
|
|
|
norEachPrice = $("#normPrice").val();
|
|
console.log("norEachPrice Long ::: "+norEachPrice);
|
|
|
|
}else if(evnImgCnt == 1){
|
|
|
|
norEachPrice = $("#norpPrice").val();
|
|
console.log("norEachPrice p1 ::: "+norEachPrice);
|
|
|
|
}else if(evnImgCnt == 2){
|
|
|
|
norEachPrice = $("#norp2Price").val();
|
|
console.log("norEachPrice p2 ::: "+norEachPrice);
|
|
|
|
}else if(evnImgCnt == 3){
|
|
|
|
norEachPrice = $("#norp3Price").val();
|
|
console.log("norEachPrice p3 ::: "+norEachPrice);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return norEachPrice;
|
|
}
|
|
|
|
|
|
function sendMsgAjax(paramSmsCnt, paramBlockCnt){
|
|
|
|
var form = document.msgForm;
|
|
var reserYn = $("#reserveYn").val();
|
|
|
|
var data = new FormData(form);
|
|
url = "/web/mjon/msgcampain/sendMsgDataAjax.do";
|
|
|
|
$.ajax({
|
|
type: "POST",
|
|
url: url,
|
|
data: data,
|
|
dataType:'json',
|
|
async: true,
|
|
processData: false,
|
|
contentType: false,
|
|
cache: false,
|
|
success: function (returnData, status) {
|
|
if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나
|
|
if("fail" == returnData.result){
|
|
|
|
alert(returnData.message);
|
|
return false;
|
|
|
|
}else if("loginFail" == returnData.result){
|
|
|
|
alert(returnData.message);
|
|
return false;
|
|
|
|
}else if("smsLengFail" == returnData.result){
|
|
|
|
alert(returnData.message);
|
|
return false;
|
|
|
|
}else if("imgSourceFail" == returnData.result){
|
|
|
|
$('.pop_msg_fails').css({'display':'block','opacity':'1','left':'50%','top':'50%','transform':'translate(-50%,-50%)'});
|
|
$('.pop_msg_fails .msg_text').html(returnData.message);
|
|
$('.mask').addClass('on');
|
|
|
|
}else if("spamKeyWordFail" == returnData.result){//스팸 및 스미싱 단어가 들어간 문자 발송시 회원 이용정지 처리
|
|
|
|
$('.pop_msg_spam').css({'display':'block','opacity':'1','left':'50%','top':'50%','transform':'translate(-50%,-50%)'});
|
|
$('.pop_msg_spam .msg_text').html(returnData.message);
|
|
$('.mask').addClass('on');
|
|
|
|
}else if("statusFail" == returnData.result){
|
|
|
|
alert(returnData.message);
|
|
//문자발송 URL Move
|
|
goMsgUrlMove();
|
|
return false;
|
|
|
|
}else{
|
|
|
|
var smsCnt = Number(returnData.resultSts);
|
|
var blockCnt = Number(returnData.resultBlockSts);
|
|
|
|
smsCnt = Number(smsCnt) + Number(paramSmsCnt);
|
|
blockCnt = Number(blockCnt) + Number(paramBlockCnt);
|
|
|
|
if((smsCnt + blockCnt) == 0){
|
|
|
|
$('.pop_msg_spam').css({'display':'block','opacity':'1','left':'50%','top':'50%','transform':'translate(-50%,-50%)'});
|
|
$('.pop_msg_spam .msg_text').html("문자 발송(예약)에 실패하였습니다.<br/> 다시 시도해주세요. <br/>* 정상적으로 발송 시도하였으나 실패하신 경우 혹시 문자내용에 사용불가 이모지 <br/>또는 복사-붙여넣기로 인한 보이지 않는 특수문자가 포함되었는지 확인 후 다시 시도해주세요.");
|
|
$('.mask').addClass('on');
|
|
|
|
}else{
|
|
|
|
$('.pop_msg_success').css({'display':'block','opacity':'1','left':'50%','top':'50%','transform':'translate(-50%,-50%)'});
|
|
|
|
//예약발송 건의 경우 결과 팝업 문구 변경
|
|
if(reserYn == 'Y'){
|
|
$('.pop_msg_success .msg_text').html("예약 성공 : <strong>"+ smsCnt + "</strong>건,수신거부 : <span>" + blockCnt + "</span>건의<br>문자가 예약 되었습니다.");
|
|
}else{
|
|
$('.pop_msg_success .msg_text').html("발송 성공 : <strong>"+ smsCnt + "</strong>건,수신거부 : <span>" + blockCnt + "</span>건의<br>문자가 발송 되었습니다.");
|
|
}
|
|
|
|
$('.mask').addClass('on');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else if(status== 'fail'){
|
|
alert(returnData.message);
|
|
}
|
|
},
|
|
beforeSend : function(xmlHttpRequest) {
|
|
//로딩창 show
|
|
$('.loading_layer').addClass('active');
|
|
},
|
|
complete : function(xhr, textStatus) {
|
|
//로딩창 hide
|
|
$('.loading_layer').removeClass('active');
|
|
},
|
|
error: function (e) { alert("문자 발송에 실패하였습니다."); console.log("ERROR : ", e); }
|
|
});
|
|
|
|
}
|
|
|
|
|
|
function linkPage(pageNo){
|
|
fnLetterListAjax(pageNo);
|
|
}
|
|
|
|
|
|
function linkPhoPage(pageNo){
|
|
fnPhotoListAjax(pageNo);
|
|
}
|
|
|
|
function myMsgPage(pageNo){
|
|
fnMyMsgListAjax(pageNo);
|
|
}
|
|
|
|
function fnMyMsgCheckDelete(){
|
|
|
|
var msgId = [];
|
|
if($("input:checkbox[name='myMsgDel']").is(":checked")==false){
|
|
alert("선택된 항목이 없습니다.");
|
|
return;
|
|
}
|
|
|
|
$("input:checkbox[name='myMsgDel']:checked").each(function(index){
|
|
|
|
msgId[index] = $(this).val();
|
|
|
|
});
|
|
|
|
if(msgId.length > 0){
|
|
|
|
document.myMsgForm.msgIdList.value = msgId;
|
|
var sendData = $(document.myMsgForm).serializeArray();
|
|
|
|
$("#myMsgLoad").load("/web/mjon/msgcampain/deleteMyMsgDataListAjax.do", sendData ,function(response, status, xhr){
|
|
|
|
//문자 내용 스크롤 적용
|
|
/* $(".msg_cont").mCustomScrollbar({
|
|
axis: 'y',
|
|
scrollbarPosition: "inside",
|
|
theme: "dark",
|
|
autoHideScrollbar: false
|
|
}); */
|
|
|
|
});
|
|
|
|
}else{
|
|
|
|
alert("삭제할 문자를 선택해 주세요.");
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//문자 샘플 2줄, 4줄 보기 기능
|
|
function fnLPageUnit(){
|
|
|
|
var form = document.letterForm;
|
|
var pageUnit = form.LPageUnit.value;
|
|
|
|
form.pageUnit.value = pageUnit;
|
|
fnLetterListAjax();
|
|
|
|
}
|
|
|
|
//그림문자 샘플 2줄, 4줄 보기 기능
|
|
function fnPhPageUnit(){
|
|
|
|
var form = document.letterForm;
|
|
var pageUnit = form.PhPageUnit.value;
|
|
|
|
form.pageUnit.value = pageUnit;
|
|
fnPhotoListAjax();
|
|
|
|
}
|
|
|
|
//그림문자 샘플 2줄, 4줄 보기 기능
|
|
function fnPhPageUnit(){
|
|
|
|
var form = document.letterForm;
|
|
var pageUnit = form.PhPageUnit.value;
|
|
|
|
form.pageUnit.value = pageUnit;
|
|
fnPhotoListAjax();
|
|
|
|
}
|
|
|
|
function fnMsgPageUnit(){
|
|
|
|
var form = document.myMsgForm;
|
|
var pageUnit = form.msgPageUnit.value;
|
|
|
|
form.pageUnit.value = pageUnit;
|
|
fnMyMsgListAjax();
|
|
|
|
}
|
|
|
|
function fnMyMsgSearchListOrd(){
|
|
|
|
var form = document.myMsgForm;
|
|
var sortOrd = form.searchSortOrd.value;
|
|
|
|
if(sortOrd == 'desc'){
|
|
|
|
form.searchSortOrd.value = 'asc';
|
|
$('#sortCnd').text('등록순');
|
|
|
|
}else{
|
|
|
|
form.searchSortOrd.value = 'desc';
|
|
$('#sortCnd').text('최근순');
|
|
|
|
}
|
|
|
|
//내문자함 내용 검색하기
|
|
fnMyMsgSearchListAjax(1);
|
|
|
|
}
|
|
|
|
function msgSuccessClose(obj){
|
|
$(obj).closest('.pop_msg_success').attr('style','');
|
|
//문자발송 URL Move
|
|
goMsgUrlMove();
|
|
$('html').scrollTop(0);
|
|
}
|
|
|
|
function msgFailsClose(obj){
|
|
$(obj).closest('.pop_msg_fails').attr('style','');
|
|
}
|
|
|
|
function msgSpamClose(obj){
|
|
$(obj).closest('.pop_msg_spam').attr('style','');
|
|
//location.href="/web/uat/uia/actionLogout.do";
|
|
}
|
|
|
|
function msgResultLink(){
|
|
var reserYn = $("input[name=reserYn]:checked").val(); // 예약 발송 여부 확인
|
|
if(reserYn == 'Y'){
|
|
|
|
location.href="/web/mjon/reservmsg/selectReservMsgView.do";
|
|
|
|
}else{
|
|
|
|
location.href="/web/mjon/msgsent/selectMsgSentView.do";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//START
|
|
//맞춤제작 요청 JSPark => 2023.02.21 추가
|
|
//맞춤제작 등록 Popup
|
|
function customPopup(){
|
|
$("#customPopup").load("/web/mjon/custom/selectMsgCustomPopupAjax.do", "" ,function(response, status, xhr){
|
|
popupImgList(1);
|
|
});
|
|
}
|
|
|
|
function openMsgCustomPopup() {
|
|
if(loginVO == "" || loginVO == null){
|
|
alert("로그인 후 이용이 가능합니다.");
|
|
return false;
|
|
} else {
|
|
$("#customPopupOpen").trigger("click");
|
|
}
|
|
$("#customType04").hide();
|
|
popCustomScrT=$(window).scrollTop();
|
|
popScrTarget();
|
|
}
|
|
|
|
$(window).on('load',function(){
|
|
setTimeout(function(){
|
|
popScrTarget();
|
|
},500);
|
|
});
|
|
|
|
function popScrTarget(){
|
|
var closeTarget=$('.custom_layer .tooltip-close');
|
|
closeTarget.attr('onclick','popScrCloseSetting();');
|
|
}
|
|
|
|
function popScrCloseSetting(){
|
|
setTimeout(function(){
|
|
$(window).scrollTop(popCustomScrT);
|
|
},1);
|
|
}
|
|
//END
|
|
</script>
|
|
<div class="tooltip-wrap">
|
|
<!-- 문자발송 성공 레이어팝업 -->
|
|
<div class="popup-com pop_msg_success">
|
|
<div class="popup_heading">
|
|
<p>문자 전송 결과</p>
|
|
<button type="button" class="tooltip-close" onclick="msgSuccessClose(this);"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>
|
|
</div>
|
|
<div class="layer_in">
|
|
<div class="msg_text">발송성공 : <strong>1</strong> 건, 수신거부 : <span>0</span>건의<br>문자가 발송 되었습니다.</div>
|
|
</div>
|
|
<div class="popup_btn">
|
|
<button type="button" onclick="msgResultLink(); return false;">문자 발송결과 바로가기</button>
|
|
<button type="button" class="tooltip-close" onclick="msgSuccessClose(this);">확인</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="tooltip-wrap">
|
|
<!-- 문자발송 실패 레이어팝업 -->
|
|
<div class="popup-com pop_msg_fails">
|
|
<div class="popup_heading">
|
|
<p>문자 전송 결과</p>
|
|
<button type="button" class="tooltip-close" onclick="msgFailsClose(this);"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>
|
|
</div>
|
|
<div class="layer_in">
|
|
<div class="msg_text">발송성공 : <strong>1</strong> 건, 수신거부 : <span>0</span>건의<br>문자가 발송 되었습니다.</div>
|
|
</div>
|
|
<div class="popup_btn">
|
|
<button type="button" class="tooltip-close" onclick="msgFailsClose(this);">확인</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="tooltip-wrap">
|
|
<!-- 문자발송 스팸 이용정지 레이어팝업 -->
|
|
<div class="popup-com pop_msg_spam">
|
|
<div class="popup_heading">
|
|
<p>문자 전송 결과</p>
|
|
<button type="button" class="tooltip-close" onclick="msgSpamClose(this);"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>
|
|
</div>
|
|
<div class="layer_in">
|
|
<div class="msg_text"></div>
|
|
</div>
|
|
<div class="popup_btn">
|
|
<button type="button" class="tooltip-close" onclick="msgSpamClose(this);">확인</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="inner">
|
|
<!-- send top -->
|
|
<div class="send_top">
|
|
<!-- tab button -->
|
|
<ul class="tabType1">
|
|
<li class="tab active">
|
|
<%-- <button type="button" onclick="TabType1(this,'1');">단문 · 장문 · 그림 문자</button> --%>
|
|
<button type="button" onclick="TabType1(this,'1');">단체문자(자동동보문자)</button>
|
|
</li>
|
|
<li class="tab">
|
|
<%-- <button type="button" onclick="TabType1(this,'2');">대량 문자(엑셀·TXT)</button> --%>
|
|
<%-- <button type="button" onclick="javascript:fnMsgExcelDataView(); return false;">단체문자(엑셀·TXT)</button> --%>
|
|
<button type="button" onclick="javascript:fnMsgTWDataView(); return false;">20건 문자(수동문자)</button>
|
|
</li>
|
|
</ul><!--// tab button -->
|
|
<!-- tab content1 -->
|
|
<!-- <span id="contentArea"></span> -->
|
|
<div class="top_content current election contentArea" id="tab1_1" style="min-height: 555px;"></div>
|
|
|
|
<!-- tab content2 -->
|
|
<!-- <span id="contentExcelArea"></span> -->
|
|
<!-- <div class="top_content current get_excel contentExcelArea" id="tab1_2"></div> -->
|
|
</div><!--// send top -->
|
|
<!-- send bottom -->
|
|
<div class="send_bottom">
|
|
<!-- tab button -->
|
|
<ul class="tabType2 selectedTab">
|
|
<li class="tab active"><button type="button" onclick="TabType2(this,'1');">문자 샘플</button></li>
|
|
<li class="tab"><button type="button" onclick="TabType2(this,'2');">그림문자 샘플</button></li>
|
|
<li class="tab"><button type="button" onclick="TabType2(this,'3');">지도/약도 추가</button></li>
|
|
<li class="tab"><button type="button" onclick="TabType2(this,'4');">내 문자함</button></li>
|
|
</ul>
|
|
<!--// tab button -->
|
|
<!-- tab content1 -->
|
|
<form id="letterForm" name="letterForm" method="post">
|
|
<input type="hidden" id="letterType" name="letterType" value="<c:out value='${letterVO.letterType}'/>"/>
|
|
<input type="hidden" id="memberType" name="memberType" value="<c:out value='${letterVO.memberType}'/>"/>
|
|
<input type="hidden" id="categoryCode" name="categoryCode" value="<c:out value='${letterVO.categoryCode}'/>"/>
|
|
<input type="hidden" id="hashTag" name="hashTag" value="<c:out value='${letterVO.hashTag}'/>"/>
|
|
<input type="hidden" id="pageIndex" name="pageIndex" value="<c:out value='${letterVO.pageIndex}' default='1' /> "/>
|
|
<input type="hidden" id="pageUnit" name="pageUnit" value="<c:out value='${letterVO.pageUnit}'/>"/>
|
|
<input type="hidden" id="upperCateNo" name="upperCateNo" value=""/>
|
|
<input type="hidden" id="bestCategory" name="bestCategory" value="<c:out value='${letterVO.bestCategory}'/>"/>
|
|
|
|
<div class="search_sample">
|
|
<input type="text" id="searchKeyword" name="searchKeyword" value="<c:out value='${letterVO.searchKeyword}'/>" placeholder="문자샘플 검색하기" onfocus="this.placeholder=''" onblur="this.placeholder='문자샘플 검색하기'" maxlength="10">
|
|
<button class="btnSearchF"><img src="/publish/images/search02.png" alt=""></button>
|
|
</div>
|
|
<!-- tab content1 -->
|
|
<div class="bottom_content current" id="tab2_1">
|
|
<div class="area_tabs">
|
|
<div class="top_tab">
|
|
<!-- <div class="tab_depth1 tDep1_mType">
|
|
<a href="#none" class="on" value="">전체</a>
|
|
<a href="#none" value="B">기업</a>
|
|
<a href="#none" value="P">개인</a>
|
|
<div class="on_active">전체</div>
|
|
</div> -->
|
|
<div class="tab_depth2 tDep1_letType">
|
|
<a href="#none" class="on" value="S">단문문자</a>
|
|
<a href="#none" value="L">장문문자</a>
|
|
</div>
|
|
<select name="LPageUnit" id="LPageUnit" class="selType2" onChange="fnLPageUnit(); return false;">
|
|
<option value="10">2줄보기</option>
|
|
<option value="20">4줄보기</option>
|
|
<option value="30">6줄보기</option>
|
|
</select>
|
|
<div class="customReq">
|
|
<%-- 맞춤제작 요청 JSPark => 2023.02.21 추가 --%>
|
|
<%--
|
|
<input type="hidden" id="customPopupOpen" data-tooltip="popup01">
|
|
<button type="button" onclick="openMsgCustomPopup(); return false;"><i></i>맞춤제작 요청</button>
|
|
--%>
|
|
<button type="button" onClick="location.href='/web/mjon/custom/selectMsgCustomView.do'"><i></i>맞춤제작 요청</button>
|
|
</div>
|
|
</div>
|
|
<div class="bottom_tab">
|
|
<div class="tab_depth3 tDep1_cateCode">
|
|
<a href="#none" class="on cateAll" value="">All</a>
|
|
<a href="#none" value="best">BEST</a>
|
|
<c:forEach var="cateList" items="${cateCodeList}" varStatus="status">
|
|
<a href="#none" value="<c:out value='${cateList.cateCode}'/>"><c:out value="${cateList.cateNm}"/></a>
|
|
</c:forEach>
|
|
</div>
|
|
<div class="tab_depth4 tDep1_threeCateCode" id="tDep1_depThrCateCode"> <!-- 해쉬태그 삭제 및 하위 카테고리 추가로 인해 class="tDep1_hashTag" 삭제 -->
|
|
<%-- <a href="#none" class="on hashAll" value="">전체</a>
|
|
<c:forEach var="hashList" items="${hashTagList}" varStatus="status">
|
|
<a href="#none" value="${hashList.hashNm}">#<c:out value="${hashList.hashNm}"/></a>
|
|
</c:forEach> --%>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="letterLoad">
|
|
</div>
|
|
</div><!--// tab content1 -->
|
|
<!--// tab content2 -->
|
|
<div class="bottom_content" id="tab2_2">
|
|
<div class="area_tabs">
|
|
<div class="top_tab">
|
|
<!-- <div class="tab_depth1 tDep2_mType">
|
|
<a href="#none" class="on" value="">전체</a>
|
|
<a href="#none" value="B">기업</a>
|
|
<a href="#none" class="on" value="P">개인</a>
|
|
<div class="on_active">전체</div>
|
|
</div> -->
|
|
<div class="tab_depth2 tDep2_letType">
|
|
<a href="#none" class="on" value="P">그림문자</a>
|
|
</div>
|
|
<select name="PhPageUnit" id="PhPageUnit" class="selType2" onChange="fnPhPageUnit(); return false;">
|
|
<option value="10">2줄보기</option>
|
|
<option value="20">4줄보기</option>
|
|
<option value="30">6줄보기</option>
|
|
</select>
|
|
<div class="customReq">
|
|
<%-- 맞춤제작 요청 JSPark => 2023.02.21 추가 --%>
|
|
<%--
|
|
<input type="hidden" id="customPopupOpen" data-tooltip="popup01">
|
|
<button type="button" onclick="openMsgCustomPopup(); return false;"><i></i>맞춤제작 요청</button>
|
|
--%>
|
|
<button type="button" onClick="location.href='/web/mjon/custom/selectMsgCustomView.do'"><i></i>맞춤제작 요청</button>
|
|
</div>
|
|
</div>
|
|
<div class="bottom_tab">
|
|
<div class="tab_depth3 tDep2_cateCode">
|
|
<a href="#none" class="on cateAll" value="">All</a>
|
|
<a href="#none" value="best">BEST</a>
|
|
<c:forEach var="cateList" items="${cateCodeList}" varStatus="status">
|
|
<a href="#none" value="<c:out value='${cateList.cateCode}'/>"><c:out value="${cateList.cateNm}"/></a>
|
|
</c:forEach>
|
|
</div>
|
|
<div class="tab_depth4 tDep2_threeCateCode" id="tDep2_depThrCateCode"><!-- 해쉬태그 삭제 및 하위 카테고리 추가로 인해 class="tDep2_hashTag" 삭제 -->
|
|
<!-- 하위 카테고리(3뎁스)로 대체 -->
|
|
<%-- <a href="#none" class="on hashAll" value="">전체</a>
|
|
<c:forEach var="hashList" items="${hashTagList}" varStatus="status">
|
|
<a href="#none" value="${hashList.hashNm}">#<c:out value="${hashList.hashNm}"/></a>
|
|
</c:forEach> --%>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="photoLoad">
|
|
</div>
|
|
<!-- pagination -->
|
|
</div><!--// tab content2 -->
|
|
</form>
|
|
|
|
<!--tab content3 -->
|
|
<div class="bottom_content" id="tab2_3">
|
|
<div class="map_search">
|
|
<label for="" class="label"></label>
|
|
<div class="mapWrap">
|
|
<script src="//t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js"></script>
|
|
<script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=7fc7b80a3e32ac964da92f6aa3d6000d&libraries=services"></script>
|
|
<input type="text" id="sample5_address" placeholder="도로명 또는 지번을 입력해주세요." onfocus="this.placeholder=''" onblur="this.placeholder='도로명 또는 지번을 입력해주세요.'">
|
|
<button type="button" class="btnType map_check" onclick="sample5_execDaumPostcode()">확인</button>
|
|
<button type="button" class="btnType map_add" onclick="insertajax();">약도링크 추가</button>
|
|
<p><span class="vMiddle">*</span> 지도링크는 입력메시지 끝부분에 추가됩니다.</p>
|
|
<div id="map" style="width:100%;height:450px; margin-top: 10px;"> </div>
|
|
|
|
<div class="mapInfo">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<script>
|
|
var mapContainer = document.getElementById('map'), // 지도를 표시할 div
|
|
mapOption = {
|
|
center: new daum.maps.LatLng(37.613898152040385, 127.15319231152851), // 지도의 중심좌표
|
|
level: 5 // 지도의 확대 레벨
|
|
};
|
|
|
|
//지도를 미리 생성
|
|
var map = new daum.maps.Map(mapContainer, mapOption);
|
|
//주소-좌표 변환 객체를 생성
|
|
var geocoder = new daum.maps.services.Geocoder();
|
|
//마커를 미리 생성
|
|
var marker = new daum.maps.Marker({
|
|
position: new daum.maps.LatLng(37.613898152040385, 127.15319231152851),
|
|
map: map
|
|
});
|
|
var testcoords = new daum.maps.LatLng(37.613898152040385, 127.15319231152851);
|
|
setTimeout(function(){
|
|
map.relayout();
|
|
map.setCenter(testcoords);
|
|
}, 5000);
|
|
|
|
//lat 위도 lng 경도
|
|
var paramLat;
|
|
var paramLng;
|
|
|
|
function sample5_execDaumPostcode() {
|
|
new daum.Postcode({
|
|
oncomplete: function(data) {
|
|
var addr = data.address; // 최종 주소 변수
|
|
|
|
// 주소 정보를 해당 필드에 넣는다.
|
|
document.getElementById("sample5_address").value = addr;
|
|
// 주소로 상세 정보를 검색
|
|
geocoder.addressSearch(data.address, function(results, status) {
|
|
// 정상적으로 검색이 완료됐으면
|
|
if (status === daum.maps.services.Status.OK) {
|
|
|
|
var result = results[0]; //첫번째 결과의 값을 활용
|
|
|
|
// 해당 주소에 대한 좌표를 받아서
|
|
var coords = new daum.maps.LatLng(result.y, result.x);
|
|
// 지도를 보여준다.
|
|
mapContainer.style.display = "block";
|
|
map.relayout();
|
|
// 지도 중심을 변경한다.
|
|
map.setCenter(coords);
|
|
// 마커를 결과값으로 받은 위치로 옮긴다.
|
|
marker.setPosition(coords)
|
|
paramLat = result.y;
|
|
paramLng = result.x;
|
|
|
|
}
|
|
});
|
|
}
|
|
}).open({
|
|
q: document.getElementById("sample5_address").value
|
|
});
|
|
}
|
|
|
|
function insertajax(){
|
|
var mapInsertConfirm = confirm('약도를 추가하시겠습니까?');
|
|
|
|
if(mapInsertConfirm){
|
|
$.ajax({
|
|
cache : false,
|
|
url : "<c:url value='/MapUrlInsertAjax.do'/>",
|
|
type : 'POST',
|
|
data : {
|
|
"mapLat" : paramLat,
|
|
"mapLng" : paramLng
|
|
},
|
|
dataType:'json',
|
|
success : function(returnData, status){
|
|
if(status == "success") {
|
|
if (returnData.url != 0) {
|
|
var smsTxttmp = $('#smsTxtArea').val();
|
|
|
|
/* document.getElementById("testarea").value = returnData.url + "/MapUrl.do?seq=" + returnData.seq; */
|
|
$('#smsTxtArea').val(smsTxttmp+returnData.url + "/MapUrl.do?seq=" + returnData.seq);
|
|
|
|
smsTxttmp = $('#smsTxtArea').val();
|
|
|
|
fnByteString(smsTxttmp);
|
|
}
|
|
}else{ alert("ERROR!");return;}
|
|
},
|
|
|
|
error : function(request , status, error){
|
|
alert("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error);
|
|
|
|
}
|
|
});
|
|
}
|
|
else{
|
|
alert("취소되었습니다.");
|
|
}
|
|
}
|
|
</script>
|
|
</div><!--// tab content3 -->
|
|
<!-- tab content4 -->
|
|
<form id="myMsgForm" name="myMsgForm" method="post">
|
|
<input name="pageIndex" type="hidden" value="1"/>
|
|
<input name="msgIdList" type="hidden" value=""/>
|
|
<input name="pageUnit" type="hidden" value=""/>
|
|
<input name="searchSortOrd" type="hidden" value="desc"/>
|
|
<input name="msgKind" type="hidden" value="C"/>
|
|
<div class="bottom_content" id="tab2_4">
|
|
<div class="search_wrap clearfix">
|
|
<div class="btn_left">
|
|
<span>· 기간</span>
|
|
<div class="calendar_wrap">
|
|
<input type="text" class="startDate inp calendar" title="검색 시작일" id="startDate" name="myMsgStDt" value="" data-datecontrol="true">
|
|
<span class="dateEtc">~</span>
|
|
<input type="text" class="endDate inp calendar" title="검색 종료일" id="endDate" name="myMsgEndDt" value="" data-datecontrol="true">
|
|
</div>
|
|
<div class="search">
|
|
<label for="searchWord" class="label"></label>
|
|
<input type="text" id="searchWord" name="searchKeyword" placeholder="내 문자함 검색" onfocus="this.placeholder=''" onblur="this.placeholder='내보관함 검색'" maxlength="10">
|
|
<button type="button" class="btnType btnType2" onclick="javascript:fnMyMsgSearchListAjax(1); return false;">검색</button>
|
|
</div>
|
|
</div>
|
|
<div class="btn_right">
|
|
<button type="button" id="sortOrd" name="sortOrd" onClick="javascript:fnMyMsgSearchListOrd(); return false;"><span id="sortCnd">최근순</span><i></i></button>
|
|
<select name="msgType" id="msgType1" class="selType2" onChange="fnMyMsgSearchListAjax(1); return false;">
|
|
<option value="">전체보기</option>
|
|
<option value="S">단문문자</option>
|
|
<option value="L">장문문자</option>
|
|
<option value="P">그림문자</option>
|
|
</select>
|
|
<select name="msgPageUnit" id="msgPageUnit" class="selType2" onChange="fnMsgPageUnit(); return false;">
|
|
<option value="10">2줄보기</option>
|
|
<option value="20">4줄보기</option>
|
|
<option value="30">6줄보기</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div id="myMsgLoad">
|
|
</div>
|
|
</div><!--// tab content4 -->
|
|
</form>
|
|
</div><!-- inner close -->
|
|
|
|
<!-- 맞춤제작 요청 레이어 팝업 -->
|
|
<div class="tooltip-wrap" id="customPopup">
|
|
</div>
|
|
<!--// 맞춤제작 요청 레이어 팝업 -->
|
|
</div>
|
|
<form id="msgResendForm" name="msgResendForm" method="post">
|
|
<input name="msgResendFlag" type="hidden" value="N"/>
|
|
<input name="msgSeqList" type="hidden" value=""/>
|
|
</form>
|
|
<form id="moveAddrForm" name="moveAddrForm" method="post">
|
|
<input name="moveAddrFlag" type="hidden" value="N"/>
|
|
<input name="addrIdList" type="hidden" value=""/>
|
|
</form>
|