mjon_git/src/main/webapp/WEB-INF/jsp/web/msgcampain/MsgDataView.jsp

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;">&nbsp;</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>