File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
<%@ page contentType="text/html; charset=utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="ec" uri="/WEB-INF/tld/ecnet_tld.tld"%>
<script type="text/javascript" src="<c:url value='/js/txtSpecialReplace.js?date=202209210001'/>"></script>
<script type="text/javascript" src="<c:url value='/js/MJUtill.js'/>"></script>
<script>
$(document).ready(function (){
var phoneIn = $(".send_right .phone", opener.document).html();
//팝업으로 보내기 전에 realtime class 삭제 - 스크립트 제외
phoneIn = phoneIn.replace(' class="realtime"',"");
// DOM 구조로 변환
var tempDiv = document.createElement("div");
tempDiv.innerHTML = phoneIn;
// 미리보기 영역 삭제
var realtimeElement = tempDiv.querySelector(".preview_util");
if (realtimeElement) {
realtimeElement.remove();
}
// 최종 수정된 HTML 반환
phoneIn = tempDiv.innerHTML.trim();
$("#phonePreview").html(phoneIn)
});
//문자발송 처리 함수
function fn_testSendMsgData(){
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 eventStatus = form.eventStatus.value;
var eventRemainCash = parseFloat(form.eventRemainCash.value);
if(eventStatus == 'Y'){
if(parseFloat(eventRemainCash) < parseFloat(totPriceOnly)){
alert("고객님의 이벤트 캐시 잔액은 " + eventRemainCash + "원으로 입력하신 수량의 문자를 전부 발송할 수 없습니다. 잔액 이하로 발송건수를 재설정하시기 바랍니다.");
return false;
}
//이벤트 발송 문자 종류로 셋팅
form.eventYn.value = "Y"; //이벤트문자 종류 설정
}
if(confirm("테스트 문자를 전송하시겠습니까?")){
var imgFilePath = [];
var imgFileId = [];
var templateYn = [];
// $('.thumb_wrap').find('.thumb_img').each(function(idx, el) {
$('.preiew_img').find('.preBoxF').each(function(idx, el) {
var imgSrc = $(el).find("img").attr("src");
//if($(el).hasClass("edit_y")) {
//에디터에서 넘어온 이미지인지 확인, 해당 문자열이 없으면 -1 반환
if(imgSrc.indexOf('base64') > 0) {
//이미지 변환
const imgBase64 = $(el).find("img").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/msgdata/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);
templateYn.push('N');
} else if(status== 'fail'){
alert(returnData.message);
}
},
error: function (e) { alert("이미지 업로드에 실패하였습니다."); console.log("ERROR : ", e); }
});
} else {
var fileId = imgSrc.substring(imgSrc.indexOf("=")+1, imgSrc.indexOf("&"));
//에디터 안거친 템플릿 이미지면 바로 src 때림
imgFilePath.push(imgSrc);
imgFileId.push(fileId);
templateYn.push('Y');
}
});
form.templateYnAdvc.value = templateYn; // 템플릿 사용여부 담아주기
form.imgFilePathAdvc.value = imgFilePath; // 저장한 이미지 경로 담아주기
form.imgFileIdAdvc.value = imgFileId;
// form.templateYn.value = templateYn; // 템플릿 사용여부 담아주기
// form.imgFilePath.value = imgFilePath; // 저장한 이미지 경로 담아주기
// form.imgFileId.value = imgFileId;
form.callFrom.value = removeDash(form.callFrom.value); // 발신번호 대쉬(-) 문자 없애주기
form.reserveYn.value = "N"; // 즉시 / 예약 문자 선택 여부
//광고, 선거문자 후처리
var msgKind = form.msgKind.value;
// form.smsTxt.value = $(".preview_auto").find("pre").text();
form.smsTxtArea.value = $(".preview_auto").find("pre").text();
/* if(msgKind == 'A') { //광고
var adTxt = $('.ad_tit').text();
var denyTxt = $('.deny_receipt').text();
form.smsTxt.value = adTxt + $(".preview_auto").find("pre").text() + '\n' + denyTxt + " "; //광고 문구 뒤에 공백을 붙이게되므로, 뒤에 한칸 추가하여 바이트수를 맞춤
} else if (msgKind == 'C') { //선거문자
var adTxt = '';
var denyTxt = '';
var adverYn = opener.document.msgForm.send_adYn.value;
//선거문자 20건 발송에서는 선거 필수문구가 필수가 아니어서 선거문자 필수 문구가 있는지 체크하여 처리함.20231214 추가
if(adverYn == 'Y'){
adTxt = $('.ad_tit').text();
denyTxt = $('.deny_receipt').html();
denyTxt = denyTxt.replaceAll("<br>","\n");
}
form.smsTxt.value = adTxt + '\n' + $(".preview_auto").find("pre").text() + '\n' + denyTxt;
} else { //일반문자
form.smsTxt.value = $(".preview_auto").find("pre").text();
} */
console.log('form : ',form)
// 폼 데이터를 배열로 직렬화
var form = $('#msgForm');
var formDataArray = form.serializeArray();
// 배열을 객체로 변환
var formData = {};
$.each(formDataArray, function(index, field) {
formData[field.name] = field.value;
});
formData.mjonMsgSendVOList = [
{
phone: formData.callToList
}
];
// 기존 callToList 제거
delete formData.callToList;
// 빈 값 제거
removeEmptyValues(formData);
// JSON 데이터 확인
console.log("최종 formData:", JSON.stringify(formData, null, 4));
// return false;
// var data = new FormData(form);
// url = "/web/mjon/msgdata/sendMsgDataAjax.do";
var url = "/web/mjon/msgdata/sendMsgDataAjax_advc.do";
$.ajax({
type: "POST",
url: url,
data: JSON.stringify(formData),
contentType: 'application/json',
dataType:'json',
// async: false,
// processData: false,
// contentType: false,
// cache: false,
success: function (data) {
var status = data.status;
if("OK" == status){
var resultCnt = Number(data.object.resultSts);
var resultBlockCnt = Number(data.object.resultBlockSts);
//차단한 번호 제외하고 발송건수가 1 미만인 경우는 발송이 안된 것
if(resultCnt < 1) {
alert("테스트 문자가 발송되지 않았습니다. \n"+ resultBlockCnt + "건의 번호가 수신거부 상태입니다.");
} else if (resultCnt >= 1) {
alert("테스트 문자가 발송되었습니다.");
}
//내 충전금액 변경해 주기 - 헤더, 충전금액 두군데 수정
var afterCash = opener.numberWithCommas(data.object.afterCash);
$("#hdUserMoney",opener.document).text(afterCash); // 헤더 보유잔액 부분
$("#spUserMoney",opener.document).text(afterCash); // 문자발송 내 충전금
$("#userMoney",opener.document).text(afterCash); // 문자발송 내 충전금
$("#userMoney",opener.document).attr('placeholder', afterCash); // 문자발송 내 충전금
window.close();
}else{
alert(data.message);
return false;
}
},
error: function (xhr, status, error) {
alert("문자 발송에 실패하였습니다.");
console.log("상태:", status);
console.log("에러:", error);
console.log("응답:", xhr.responseText);}
});
}
}
//빈 값이나 null 값을 제거하는 함수
function removeEmptyValues(obj) {
Object.keys(obj).forEach(function(key) {
if (obj[key] === null || obj[key] === '') {
delete obj[key];
}
});
}
</script>
<form id="msgForm" name="msgForm" method="post">
<input type="hidden" id="msgKind" name="msgKind" value="${searchVO.msgKind}" /><!-- 문자종류(일반:N, 광고:A , 선거:C,관리자:S) -->
<input type="hidden" id="msgType" name="msgType" value="${searchVO.msgType}" /><!-- 문자 종류 : 단문 - 4, 장문/그림 - 6 -->
<input type="hidden" id="imgFilePath" name="imgFilePath" value="" /><!-- 선택 이미지 파일 경로 정보 , 로 구분 최대 3장까지 -->
<input type="hidden" id="imgFilePathAdvc" name="imgFilePathAdvc" value="" /><!-- 선택 이미지 파일 경로 정보 , 로 구분 최대 3장까지 -->
<input type="hidden" id="imgFileId" name="imgFileId" value="" /><!-- 선택 이미지 파일 아이디 정보 , 로 구분 최대 3장까지 -->
<input type="hidden" id="imgFileIdAdvc" name="imgFileIdAdvc" value="" /><!-- 선택 이미지 파일 아이디 정보 , 로 구분 최대 3장까지 -->
<input type="hidden" id="fileCnt" name="fileCnt" value="0" /><!-- 첨부파일 추가 갯수 -->
<input type="hidden" id="mmsSubject" name="mmsSubject" value="${mmsSubject}"/> <!-- mms 제목 -->
<input type="hidden" id="callFrom" name="callFrom" value="${callFrom}"/> <!-- 발신자 전화번호 -->
<input type="hidden" id="eachPrice" name="eachPrice" value="${eachPrice}"/> <!-- 문자 개별 단가 금액 -->
<input type="hidden" id="totPrice" name="totPrice" value="${eachPrice}"/> <!-- 총 결제 금액 -->
<input type="hidden" id="smsLen" name="smsLen" value="0"/> <!-- 문자 길이 정보 -->
<input type="hidden" id="reserveYn" name="reserveYn" value="N"/> <!-- 즉시/예약 선택여부 -->
<input type="hidden" id="reqDate" name="reqDate" value=""/><!-- 예약문자 날짜 -->
<input type="hidden" id="imgCnt" value="0" />
<input type="hidden" id="templateYn" name="templateYn" value="" />
<input type="hidden" id="templateYnAdvc" name="templateYnAdvc" value="" />
<input type="hidden" id="smsTxtArea" name="smsTxtArea" value=""/><!-- 문자발송 문자 내용 -->
<input type="hidden" id="myPrice" name="myPrice" value="<c:out value="${userMoney}"/>"/><!-- 보유 캐시금액 -->
<input type="hidden" id="txtReplYn" name="txtReplYn" value="N"/><!-- 변환문자 유무 -->
<!-- <input type="hidden" id="shortMsgCnt" name="shortMsgCnt" value="0"/> --><!-- 단문 변환문자 건수 -->
<!-- <input type="hidden" id="longMsgCnt" name="longMsgCnt" value="0"/> --><!-- 장문 변환문자 건수 -->
<!-- 이벤트 관련 변수 -->
<input type="hidden" id="eventStatus" name="eventStatus" value="<c:out value='${eventMberInfo.eventStatus}'/>"/>
<input type="hidden" id="eventRemainCash" name="eventRemainCash" value="<c:out value='${eventMberInfo.eventRemainCash}'/>"/>
<input type="hidden" id="eventYn" name="eventYn" value="N"/>
<div class="test_sendpop">
<div class="info_popup">
<div class="popup_heading">
<p>테스트 발송</p>
</div>
<div class="layer_in">
<ul class="info_list">
<li>테스트 발송은 문자를 본인에게 발송하여 문자내용을 미리 확인하는 서비스 입니다.</li>
</ul>
</div>
</div>
<div class="test_wrap">
<div class="number">
<dl>
<dt>수신번호</dt>
<dd><input type="text" name="callToList" id="callToList" value="${mberManageVO.moblphonNo}"/></dd>
</dl>
<dl class="price">
<dt>발송금액</dt>
<dd><span>${eachPrice}</span>원</dd>
</dl>
<p class="text">발송하시겠습니까?<span>※ 문자 발송과 동일하게 요금이 차감됩니다.</span></p>
<button type="button" class="btnType btnType10" onclick="fn_testSendMsgData(); return false;">테스트발송</button>
</div>
<div class="phone" id="phonePreview"></div>
</div>
</div>
</form>