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
/**
*
* @author : 이호영
* @fileName : alimtalkExcel.js
* @date : 2023.02.21
* @description : 알림톡 excel 관련된 fuction .js
* ===========================================================
* DATE AUTHOR NOTE
* ----------------------------------------------------------- *
* 2023.02.21 이호영 최초 생성
*
*
*
*/
$(document).ready(function(){
//치환문자 없는 엑섹불러오기 버튼 클릭시 파일 첨부 실행
$('.c1').click(function(){ // 엑셀파일 불러오기 선택 시
$("#excelFile01").click();
});
});
function excelAdd(){
var files = document.getElementById('excelFile01').files;
var filename = files[0].name;
var extension = filename.substring(filename.lastIndexOf(".")).toUpperCase();
if (extension == '.XLS' || extension == '.XLSX') {
excelFileToJSON01(files[0]);
}else{
alert("엑셀 파일을 첨부해주세요.");
}
}
/*
* 신규 엑셀 파일 불러오기
* 기존 json 처리가 아닌 POI 방식으로 처리하기 위함
*
* */
function excelExportAjax(){
var data = new FormData(document.excelToolTipForm);
var fileValue = $("#excelFile01").val().split("\\");
var fileName = fileValue[fileValue.length-1];
var fileExt = fileName.split('.').pop().toLowerCase();
if(fileExt.length > 0){
if($.inArray(fileExt, ['xls','xlsx']) == -1) {
alert('xls, xlsx 파일만 업로드 할수 있습니다.');
return false;
}
}
fn_viewDataInit02();
$('#excelNm01').val(fileName);
}
function excelAddAjax(){
var data = new FormData(document.excelToolTipForm);
data.append("file0", $('#excelFile01').prop('files')[0]);
var url = "/web/mjon/alimtalk/sendAlimtalkExelFilePhoneNumAjax.do";
$.ajax({
type: "POST",
enctype: 'multipart/form-data',
url: url,
data: data,
dataType:'json',
async: true,
processData: false,
contentType: false,
cache: false,
//timeout: 600000,
success: function (returnData, status) {
if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나
if(returnData.success){
var data = returnData.data;
var message = returnData.message;
if(message != '' ){
alert(returnData.message);
}
if(data != null){
//수신목록 Html 태그
var addHtml = '<div class="list_table list_body excelBody">'
+'\t<div class="cb_wrap">'
+'\t\t<label for="" class="label"></label>'
+'\t\t<input type="checkbox" class="wrap01C">'
+'\t</div>'
+'\t<div class="list_table_num phoneArea">'
+'\t\t<p>$PHONE$</p>'
+'\t</div>'
/*23.04.06 이름제거 요청으로인한 화면 이름 제거*/
/*+'\t<div class="list_table_name">'
+'\t\t<p>$NAME$</p>'
+'\t</div>'*/
+'</div>';
var totalDuplCnt = $('#rowDupCnt').text();//중복 건수 정보
var $excelBody = $('#wrap01_body');
var phoneNum;
$.each(data, function(i, item){
if(checkHpNum(item.phone)){
phoneNum = removeDash(item.phone);
if(!phoneDupl(phoneNum))
/*23.04.06 이름제거 요청으로인한 화면 이름 제거*/
// $excelBody.append(addHtml.replace('$PHONE$', phoneNum).replace('$NAME$', jsonData[bodyIndex]['이름'] ??= ''));
$excelBody.append(addHtml.replace('$PHONE$', phoneNum));
else
totalDuplCnt++;
} else{
alert("엑셀 파일 데이터의 형식이 맞지 않는 부분이 있습니다.");
excelAddr = []; //엑셀 데이터 저장 변수 초기화
$("#excelFile").val(""); //첨부파일 input 초기화
$("#excelNm").val(""); // 첨부파일 명 초기화
fileName = "";
return;
}
});
$('#rowDupCnt').text(totalDuplCnt);
$("#excelFile01").val(""); //첨부파일 input 초기화
$("#excelNm01").val(""); // 첨부파일 명 초기화
updateTotCnt();
}
}else{
alert(returnData.message);
// alert("첨부파일 불러오는 중 오류가 발생하였습니다.");
excelAddr = []; //엑셀 데이터 저장 변수 초기화
$("#excelFile01").val(""); //첨부파일 input 초기화
$("#excelNm01").val(""); // 첨부파일 명 초기화
fileName = "";
return;
}
} else if(status== 'fail'){
alert("첨부파일 불러오는 중 오류가 발생하였습니다.1");
console.log("status : fail ~");
}
},
error: function (e) {
alert("첨부파일 불러오는 중 오류가 발생하였습니다2.");
console.log("ERROR : ", e);
},
beforeSend : function(xmlHttpRequest) {
//로딩창 show
$('.loading_layer').addClass('active');
},
complete : function(xhr, textStatus) {
//로딩창 hide
$('.loading_layer').removeClass('active');
}
});
}
/*
* 신규 변수명 설정 엑셀 파일 불러오기
* 기존 json 처리가 아닌 POI 방식으로 처리하기 위함
*
* */
function excelExportVarAjax(){
console.log(' :: excelExportVarAjax ::')
var data = document.getElementById('excelFile').files;
var fileValue = $("#excelFile").val().split("\\");
var fileName = fileValue[fileValue.length-1];
var fileExt = fileName.split('.').pop().toLowerCase();
if(fileExt.length > 0){
if($.inArray(fileExt, ['xls','xlsx']) == -1) {
alert('xls, xlsx 파일만 업로드 할수 있습니다.');
return false;
}
}
fn_viewDataInit01();
excelAddVarAjax();
}
function excelAddVarAjax(){
var varList = $("#excelTemplateContent").val().match(/#\{([^}]+)\}/g);
var varListSize = new Set(varList);
var form = document.excelVarFileForm;
form.excelVarCnt.value = varListSize.size;
form.excelVarList.value = varList;
var data = new FormData(form);
data.append("file0", $('#excelFile').prop('files')[0]);
var url = "/web/mjon/alimtalk/sendAlimtalkExelVarFilePhoneNumAjax.do";
$.ajax({
type: "POST",
enctype: 'multipart/form-data',
url: url,
data: data,
dataType:'json',
async: true,
processData: false,
contentType: false,
cache: false,
//timeout: 600000,
success: function (returnData, status) {
if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나
console.log('returnData : ', returnData);
if(returnData.success){
var data = returnData.data;
var message = returnData.message;
if(message != '' ){
alert(returnData.message);
}
if(data != null){
//수신목록 Html 태그
// 엑셀 헤더
var excelTitleHeadText ='<div class="list_table_name">'
+'\t<p>$HEADTITLE$</p>'
+'</div>';
// 바디 row 수신자 tag
var excelBodyRowTextIndex00 ='<div class="list_table_name phoneArea">'
+'\t\t<p>$ROWTEXT$</p>'
+'\t</div>';
// 바디 row tag
var excelBodyRowTextIndex01 ='<div class="list_table_name transData">'
+'\t\t<p>$ROWTEXT$</p>'
+'\t</div>';
//맨 앞에 수신번호 배열 추가
varList.unshift('수신번호');
//변수 문자열 중복 제거
var newList = Array.from(new Set(varList));
//엑셀헤더 selector
var $excelHead = $('#excelHead');
//엑셀바디 selector
var $excelBody = $('#excelBody02');
// 엑셀 헤더 부분
$.each(newList, function(headerIndex, value) {
$excelHead.append(excelTitleHeadText.replace('$HEADTITLE$', value));
});
var totalDuplCnt = $('#rowDupCnt').text();//중복 건수 정보
var $excelBody = $('#excelBody02');
var addDiv = "";
var phoneNum;
var msgCnt = 0;
//입력데이터를 역정렬해준다.
data.reverse();
//변수명 추출해주기
var varListArr = [];
varListArr = form.excelVarList.value.split(",");
var forBreakB = true
$.each(data, function(i, item){
if(checkHpNum(item.phone)){
phoneNum = removeDash(item.phone);
if(!phoneDupl(phoneNum)){
var varVal = item.varVal;
var lengthCheck =true;
/*23.04.06 이름제거 요청으로인한 화면 이름 제거*/
var excelBody = '<div class="list_table list_body excelBody">';
//수신번호 화면 태그 생성
excelBody += excelBodyRowTextIndex00.replace('$ROWTEXT$', removeDash(phoneNum));
//변수 데이터 태그 생성
var varValArr = []
varValArr = varVal.split("§");
for(var i=0; i < varValArr.length; i++){
var bodyData = varValArr[i];
// 기타변수는 50자리 까지 입력
if(bodyData.length > 100 || bodyData.length == 0 ){
if(forBreakB){
alert("등록 변수[ "+varListArr[i]+" ] \n기타변수의 입력 값이 없거나 100자리를 초과하는 내용이 포함되어 해당 내용 제외되었습니다.");
forBreakB = false;
}
lengthCheck = false;
break;
}
excelBody += excelBodyRowTextIndex01.replace('$ROWTEXT$', bodyData);
}
excelBody += '</div>';
if(lengthCheck){
addDiv += excelBody;
msgCnt++;
}
}
else
totalDuplCnt++;
} else{
alert("엑셀 파일 데이터의 형식이 맞지 않는 부분이 있습니다.");
excelAddr = []; //엑셀 데이터 저장 변수 초기화
$("#excelFile").val(""); //첨부파일 input 초기화
$("#excelNm").val(""); // 첨부파일 명 초기화
fileName = "";
return;
}
});
//화면에 수신번호 및 변수 데이터 추가해 주기
$excelBody.append(addDiv);
// 총 금액 계산
fn_priceClclt(msgCnt);
}
}else{
alert(returnData.message);
// alert("첨부파일 불러오는 중 오류가 발생하였습니다.");
excelAddr = []; //엑셀 데이터 저장 변수 초기화
$("#excelFile01").val(""); //첨부파일 input 초기화
$("#excelNm01").val(""); // 첨부파일 명 초기화
fileName = "";
return;
}
} else if(status== 'fail'){
alert("첨부파일 불러오는 중 오류가 발생하였습니다.");
console.log("status : fail ~");
}
},
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 excelExport01() {
var files = document.getElementById('excelFile01').files;
if(files.length==0){
alert("파일을 선택해주세요.");
return;
}
// (치환문자가 있는)다른 형식의 값이 있으면 초기화
fn_viewDataInit02();
var filename = files[0].name;
$('#excelNm01').val(filename);
// var extension = filename.substring(filename.lastIndexOf(".")).toUpperCase();
// if (extension == '.XLS' || extension == '.XLSX') {
// excelFileToJSON01(files[0]);
// }else{
// alert("엑셀 파일을 첨부해주세요.");
// }
}
/**
* 변수 포함한 엑셀 파일 불러오기
*/
function excelExport02() {
var files = document.getElementById('excelFile').files;
if(files.length==0){
alert("파일을 선택해주세요.");
return;
}
// (치환문자가 없는)다른 형식의 값이 있으면 초기화
fn_viewDataInit01();
// fn_viewDataInit02();
var filename = files[0].name;
var extension = filename.substring(filename.lastIndexOf(".")).toUpperCase();
if (extension == '.XLS' || extension == '.XLSX') {
excelFileToJSON02(files[0]);
}else{
alert("엑셀 파일을 첨부해주세요.");
}
}
/**
* 엑셀 정보 json으로 변환
*/
function excelFileToJSON01(file){
/*
* 시트 row 삭제 function 시작
*
* */
const ec = (r, c) => {
return XLSX.utils.encode_cell({r:r,c:c})
}
const delete_row = (ws, row_index) => {
let range = XLSX.utils.decode_range(ws["!ref"])
for(var R = row_index; R < range.e.r; ++R){
for(var C = range.s.c; C <= range.e.c; ++C){
ws[ec(R, C)] = ws[ec(R+1, C)]
}
}
range.e.r--
ws['!ref'] = XLSX.utils.encode_range(range.s, range.e)
}
/*
* 시트 row 삭제 function 끝
*
* */
try {
var reader = new FileReader();
reader.readAsBinaryString(file);
reader.onload = function(e) {
var data = e.target.result;
var workbook = XLSX.read(data, {
type : 'binary'
});
var result = {};
//첫번째 시트 정보 json으로 변환
var firstSheetName = workbook.SheetNames[0];
//첫번째 시트의 첫번째 로우 삭제
delete_row(workbook.Sheets[firstSheetName], 0);
var jsonData = XLSX.utils.sheet_to_json(workbook.Sheets[firstSheetName]);
displayJsonToHtmlTable01(jsonData);
}
}catch(e){
console.error(e);
}
}
/**
* 엑셀 정보 json으로 변환
*/
function excelFileToJSON02(file){
try {
var reader = new FileReader();
reader.readAsBinaryString(file);
reader.onload = function(e) {
var data = e.target.result;
var workbook = XLSX.read(data, {
type : 'binary'
});
var result = {};
//첫번째 시트 정보 json으로 변환
var firstSheetName = workbook.SheetNames[0];
var jsonData = XLSX.utils.sheet_to_json(workbook.Sheets[firstSheetName]);
displayJsonToHtmlTable02(jsonData);
}
}catch(e){
console.error(e);
}
}
/**
* 변수 없는 엑셀 json 정보를 테이블로 그려주기
*/
function displayJsonToHtmlTable01(jsonData){
var addHtml = '<div class="list_table list_body excelBody">'
+'\t<div class="cb_wrap">'
+'\t\t<label for="" class="label"></label>'
+'\t\t<input type="checkbox" class="wrap01C">'
+'\t</div>'
+'\t<div class="list_table_num phoneArea">'
+'\t\t<p>$PHONE$</p>'
+'\t</div>'
/*23.04.06 이름제거 요청으로인한 화면 이름 제거*/
/*+'\t<div class="list_table_name">'
+'\t\t<p>$NAME$</p>'
+'\t</div>'*/
+'</div>';
// 중복 텍스트
var totalDuplCnt = $('#rowDupCnt').text();
var keys = Object.keys(jsonData); // json에 key만 추출
var $excelBody = $('#wrap01_body');
// jsonData.reverse();
var phoneNum;
$.each(jsonData, function(bodyIndex, value) {
phoneNum = removeDash(jsonData[bodyIndex]['수신번호'])
if(!phoneDupl(phoneNum))
/*23.04.06 이름제거 요청으로인한 화면 이름 제거*/
// $excelBody.append(addHtml.replace('$PHONE$', phoneNum).replace('$NAME$', jsonData[bodyIndex]['이름'] ??= ''));
$excelBody.append(addHtml.replace('$PHONE$', phoneNum));
else
totalDuplCnt++;
});
$('#rowDupCnt').text(totalDuplCnt);
updateTotCnt();
}
/**
* 변수 있는 엑셀 json 정보를 테이블로 그려주기
*/
function displayJsonToHtmlTable02(jsonData){
// 엑셀 헤더
var excelTitleHeadText ='<div class="list_table_name">'
+'\t<p>$HEADTITLE$</p>'
+'</div>';
// 바디 row 수신자 tag
var excelBodyRowTextIndex00 ='<div class="list_table_name phoneArea">'
+'\t\t<p>$ROWTEXT$</p>'
+'\t</div>';
// 바디 row tag
var excelBodyRowTextIndex01 ='<div class="list_table_name transData">'
+'\t\t<p>$ROWTEXT$</p>'
+'\t</div>';
//합친 내용에서 변수 문자열 뽑기 - #과{}포함
var varList = $("#excelTemplateContent").val().match(/#\{([^}]+)\}/g);
//맨 앞에 수신번호 배열 추가
varList.unshift('수신번호');
//변수 문자열 중복 제거
var newList = Array.from(new Set(varList));
//엑셀헤더 selector
var $excelHead = $('#excelHead');
//엑셀바디 selector
var $excelBody = $('#excelBody02');
// 엑셀 헤더 부분
$.each(newList, function(headerIndex, value) {
$excelHead.append(excelTitleHeadText.replace('$HEADTITLE$', value));
});
// 중복 텍스트
var totalDuplCnt = $('#rowDupCnt').text();
//엑셀바디 내용 리버스
jsonData.reverse();
// 치환 데이터 선언
var bodyData;
// 추가 div 선언
var addDiv = "";
// 입력 글자수 체크 선언
var lengthCheck =true;
outerLoop : for(var bodyIndex=0; bodyIndex < jsonData.length; bodyIndex++)
{
if(lengthCheck){
var excelBody = '<div class="list_table list_body excelBody">';
for(var headerIndex=0; headerIndex < newList.length; headerIndex++)
{
// 치환할 데이터
bodyData = jsonData[bodyIndex][newList[headerIndex]];
if(bodyData == null){
// reverse 감안하여 전체 개수 - 하여 몇행인지 알려줌
// alert((jsonData.length - bodyIndex+1)+'번째 데이터에 오류가 있습니다. 확인해주세요.');
continue outerLoop; // outerLoop 다음 loop 실행
}
//headerIndex == 0 : 전화번호
if(headerIndex == 0)
{
// 핸드폰 번호 11자리 체크
if(bodyData.length > 11){
alert("등록 핸드폰 번호["+bodyData+"] \n핸드폰 번호는 11자리 까지 입력이 가능합니다.");
lengthCheck = false;
break;
}
// 전화번호 중복 체크
if(!phoneDupl(bodyData)) excelBody += excelBodyRowTextIndex00.replace('$ROWTEXT$', removeDash(bodyData));
else
{
totalDuplCnt++;
continue outerLoop; // outerLoop 다음 loop 실행
}
}
else
{
// 기타변수는 50자리 까지 입력
if(bodyData.length > 100){
alert("등록 변수["+bodyData+"] \n기타 변수에는 100자리 까지 입력이 가능합니다.");
lengthCheck = false;
break;
}
excelBody += excelBodyRowTextIndex01.replace('$ROWTEXT$', bodyData);
}
}
excelBody += '</div>';
addDiv += excelBody;
}else{
addDiv = "";
break;
}
}
$excelBody.append(addDiv);
}
/**
* 중복체크
* true : 중복 [O]
* false : 중복 [X]
*/
function phoneDupl(data){
var resultBoo = true;
data = removeDash(data);
/*
* 중복체크
* 기존 데이터 배열화
*/
var area = [];
$('.phoneArea').each(function(index, item){
area.push($(item).text().trim());
});
if(!area.includes(data))
resultBoo = false;
return resultBoo;
}