문자전송 엑셀기능 작업중
This commit is contained in:
parent
d8242e4509
commit
a985ce5d6d
@ -360,6 +360,57 @@ public class AddrVO extends ComDefaultVO{
|
||||
}
|
||||
|
||||
|
||||
|
||||
private String addrGroupNm;
|
||||
private String addrPhone;
|
||||
private String addrName;
|
||||
private String addrRep1;
|
||||
private String addrRep2;
|
||||
private String addrRep3;
|
||||
private String addrRep4;
|
||||
public String getAddrGroupNm() {
|
||||
return addrGroupNm;
|
||||
}
|
||||
public void setAddrGroupNm(String addrGroupNm) {
|
||||
this.addrGroupNm = addrGroupNm;
|
||||
}
|
||||
public String getAddrPhone() {
|
||||
return addrPhone;
|
||||
}
|
||||
public void setAddrPhone(String addrPhone) {
|
||||
this.addrPhone = addrPhone;
|
||||
}
|
||||
public String getAddrName() {
|
||||
return addrName;
|
||||
}
|
||||
public void setAddrName(String addrName) {
|
||||
this.addrName = addrName;
|
||||
}
|
||||
public String getAddrRep1() {
|
||||
return addrRep1;
|
||||
}
|
||||
public void setAddrRep1(String addrRep1) {
|
||||
this.addrRep1 = addrRep1;
|
||||
}
|
||||
public String getAddrRep2() {
|
||||
return addrRep2;
|
||||
}
|
||||
public void setAddrRep2(String addrRep2) {
|
||||
this.addrRep2 = addrRep2;
|
||||
}
|
||||
public String getAddrRep3() {
|
||||
return addrRep3;
|
||||
}
|
||||
public void setAddrRep3(String addrRep3) {
|
||||
this.addrRep3 = addrRep3;
|
||||
}
|
||||
public String getAddrRep4() {
|
||||
return addrRep4;
|
||||
}
|
||||
public void setAddrRep4(String addrRep4) {
|
||||
this.addrRep4 = addrRep4;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -172,5 +172,7 @@ public interface MjonMsgDataService {
|
||||
|
||||
//대용량 문자 전송시 사용자 마지막 PK 값 조회하기
|
||||
public String selectMsgUserLastIdgen(MjonMsgVO mjonMsgVO) throws Exception;
|
||||
|
||||
public List<AddrVO> selectMsgAddrListAjax_advc(AddrVO addrVO) throws Exception;
|
||||
|
||||
}
|
||||
|
||||
@ -350,5 +350,10 @@ public class MjonMsgDataDAO extends EgovAbstractDAO {
|
||||
public String selectMsgUserLastIdgen(MjonMsgVO mjonMsgVO) throws Exception{
|
||||
return (String) select("mjonMsgDAO.selectMsgUserLastIdgen", mjonMsgVO);
|
||||
}
|
||||
|
||||
|
||||
public List<AddrVO> selectMsgAddrListAjax_advc(AddrVO addrVO) {
|
||||
return (List<AddrVO>) list("mjonMsgDAO.selectMsgAddrListAjax_advc", addrVO);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -3050,6 +3050,12 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
|
||||
public String selectMsgUserLastIdgen(MjonMsgVO mjonMsgVO) throws Exception{
|
||||
return mjonMsgDataDAO.selectMsgUserLastIdgen(mjonMsgVO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<AddrVO> selectMsgAddrListAjax_advc(AddrVO addrVO) throws Exception {
|
||||
|
||||
return mjonMsgDataDAO.selectMsgAddrListAjax_advc(addrVO);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -1756,8 +1756,18 @@ public class MjonMsgDataController {
|
||||
return modelAndView;
|
||||
|
||||
}
|
||||
|
||||
List<AddrVO> resultAddrList = mjonMsgDataService.selectMsgAddrListAjax(addrVO);
|
||||
|
||||
long startTime = System.currentTimeMillis(); // 시작 시간 측정
|
||||
|
||||
// List<AddrVO> resultAddrList = mjonMsgDataService.selectMsgAddrListAjax(addrVO);
|
||||
List<AddrVO> resultAddrList = mjonMsgDataService.selectMsgAddrListAjax_advc(addrVO);
|
||||
|
||||
long endTime = System.currentTimeMillis(); // 종료 시간 측정
|
||||
|
||||
long elapsedTime = endTime - startTime; // 소요 시간 계산
|
||||
System.out.println("소요 시간: " + elapsedTime + " 밀리초");
|
||||
|
||||
|
||||
|
||||
modelAndView.addObject("resultAddrList", resultAddrList);
|
||||
modelAndView.addObject("result", "success");
|
||||
|
||||
@ -3708,6 +3708,64 @@
|
||||
|
||||
</select>
|
||||
|
||||
<!-- 등록 주소록 그룹 선택시 리스트 불러오기 -->
|
||||
<select id="mjonMsgDAO.selectMsgAddrListAjax_advc" parameterClass="addrVO" resultClass="addrVO">
|
||||
|
||||
SELECT A.ADDR_ID AS addrId,
|
||||
A.ADDR_GRP_ID AS addrGrpId,
|
||||
A.MBER_ID AS mberId,
|
||||
A.ADDR_NM AS addrName,
|
||||
A.ADDR_PHONE_NO AS addrPhone,
|
||||
A.ADDR_INFO1 AS addrRep1,
|
||||
A.ADDR_INFO2 AS addrRep2,
|
||||
A.ADDR_INFO3 AS addrRep3,
|
||||
A.ADDR_INFO4 AS addrRep4,
|
||||
A.DELETE_YN AS deleteYn,
|
||||
A.BOOKMARK AS bookmark,
|
||||
IFNULL(B.ADDR_GRP_NM,'그룹미지정') AS addrGroupNm
|
||||
FROM MJ_ADDR A
|
||||
LEFT OUTER JOIN
|
||||
MJ_ADDR_GRP B
|
||||
ON
|
||||
A.ADDR_GRP_ID = B.ADDR_GRP_ID
|
||||
WHERE A.MBER_ID = #mberId#
|
||||
AND (A.RECV_STATUS = 'Y' OR A.RECV_STATUS = 'S' OR A.RECV_STATUS IS NULL)
|
||||
AND A.DELETE_YN = 'N'
|
||||
<isNotEmpty property="type">
|
||||
<isEqual property="type" compareValue="none">
|
||||
AND A.ADDR_GRP_ID = '0'
|
||||
AND A.BOOKMARK = 'N'
|
||||
</isEqual>
|
||||
<isEqual property="type" compareValue="book">
|
||||
AND A.BOOKMARK = 'Y'
|
||||
</isEqual>
|
||||
<isEqual property="type" compareValue="grp">
|
||||
AND A.ADDR_GRP_ID = #searchAddrGrpId#
|
||||
</isEqual>
|
||||
</isNotEmpty>
|
||||
<isNotEmpty property="searchCondition">
|
||||
<isEqual property="searchCondition" compareValue="0">
|
||||
AND
|
||||
(
|
||||
A.ADDR_NM LIKE CONCAT('%', #searchKeyword#, '%')
|
||||
OR A.ADDR_PHONE_NO LIKE CONCAT('%', #searchKeyword#, '%')
|
||||
OR B.ADDR_GRP_NM LIKE CONCAT('%', #searchKeyword#, '%')
|
||||
)
|
||||
</isEqual>
|
||||
<isEqual property="searchCondition" compareValue="1">
|
||||
AND B.ADDR_GRP_NM LIKE CONCAT('%', #searchKeyword#, '%')
|
||||
</isEqual>
|
||||
<isEqual property="searchCondition" compareValue="2">
|
||||
AND A.ADDR_NM LIKE CONCAT('%', #searchKeyword#, '%')
|
||||
</isEqual>
|
||||
<isEqual property="searchCondition" compareValue="3">
|
||||
AND A.ADDR_PHONE_NO LIKE CONCAT('%', #searchKeyword#, '%')
|
||||
</isEqual>
|
||||
</isNotEmpty>
|
||||
ORDER BY A.ADDR_NM ASC, A.LAST_UPDT_PNTTM DESC
|
||||
|
||||
</select>
|
||||
|
||||
<select id="MjonMsgDataDAO.selectMsgAddInfoAjax" parameterClass="mjonMsgDataVO" resultClass="mjonMsgDataVO">
|
||||
|
||||
SELECT MSG_ID AS msgId,
|
||||
|
||||
@ -333,7 +333,6 @@ function SetAddrMassSave(){
|
||||
setSenderList_advc();
|
||||
}
|
||||
}
|
||||
/*
|
||||
function setSenderList_advc(){
|
||||
|
||||
// tab에 해당하는 타블레이터 가져오기
|
||||
@ -386,10 +385,9 @@ function setSenderList_advc(){
|
||||
}
|
||||
});
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/*
|
||||
function setSenderList_advc(){
|
||||
var $objTabul = fn_utils_getTabulator();
|
||||
var dataToSend = $objTabul.getData();
|
||||
@ -455,7 +453,7 @@ function setSenderList_advc(){
|
||||
$('.loading_layer').removeClass('active');
|
||||
}
|
||||
|
||||
|
||||
*/
|
||||
|
||||
//주소록그룹 콤보박스 유지
|
||||
function setSelectMassSetting(selectMassVal) {
|
||||
@ -631,6 +629,7 @@ function fn_tabToggle(tabNum){
|
||||
getAddrGroupList();
|
||||
}
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
<div class="loading_layer">
|
||||
@ -657,36 +656,32 @@ function fn_tabToggle(tabNum){
|
||||
<div class="tooltip-wrap" id="addrMassLoad">
|
||||
<div class="popup-com adr_layer adr_popup01" tabindex="0" data-tooltip-con="adr_popup01" data-focus="adr_popup01" data-focus-prev="adr_popup01-close" style="width: 1000px;">
|
||||
<div class="popup_heading">
|
||||
<p>주소록 대량등록</p>
|
||||
<button type="button" class="tooltip-close" data-focus="adr_popup01-close" onclick="setAddrMassClose();"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>
|
||||
<p>주소록 대량등록</p>
|
||||
<button type="button" class="tooltip-close" data-focus="adr_popup01-close" onclick="setAddrMassClose();"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>
|
||||
</div>
|
||||
<div class="layer_in" style="padding: 25px 30px;">
|
||||
<div class="list_tab_wrap2">
|
||||
<!-- tab button -->
|
||||
<ul class="list_tab" id="tbTabl">
|
||||
<li class="tab active" data-tabul="tableExcel"><button type="button" onclick="popupTab(this,'1'); fn_tabToggle('1');">엑셀입력</button></li>
|
||||
<li class="tab" data-tabul="tableClip"><button type="button" onclick="popupTab(this,'2'); fn_tabToggle('2');">붙여넣기</button></li>
|
||||
<li class="tab" data-tabul="tableSelf"><button type="button" onclick="popupTab(this,'3'); fn_tabToggle('3');">직접입력</button></li>
|
||||
</ul><!--// tab button -->
|
||||
</div>
|
||||
<div class="layer_in" style="padding: 25px 30px;">
|
||||
<div class="list_tab_wrap2">
|
||||
<!-- tab button -->
|
||||
<ul class="list_tab" id="tbTabl">
|
||||
<li class="tab active" data-tabul="tableExcel"><button type="button" onclick="popupTab(this,'1'); fn_tabToggle('1');">엑셀입력</button></li>
|
||||
<li class="tab" data-tabul="tableClip"><button type="button" onclick="popupTab(this,'2'); fn_tabToggle('2');">붙여넣기</button></li>
|
||||
<li class="tab" data-tabul="tableSelf"><button type="button" onclick="popupTab(this,'3'); fn_tabToggle('3');">직접입력</button></li>
|
||||
</ul><!--// tab button -->
|
||||
</div>
|
||||
|
||||
|
||||
<div id="tab1" class="tab_c tableExcel">
|
||||
<%@include file="/WEB-INF/jsp/web/addr/include/addrListforExcel.jsp" %>
|
||||
</div>
|
||||
<div id="tab2" class="tab_c tableClip" style="display: none;">
|
||||
<%@include file="/WEB-INF/jsp/web/addr/include/addrListforClipboard.jsp" %>
|
||||
</div>
|
||||
<!-- <div id="tab3" class="tab_c" style="display: none;"> -->
|
||||
<div id="tab3" class="tab_c tableSelf" style="display: none;">
|
||||
<%@include file="/WEB-INF/jsp/web/addr/include/addrListforSelf.jsp" %>
|
||||
</div>
|
||||
|
||||
<div class="popup_btn_wrap2" style="margin: 0 auto 30px auto;">
|
||||
<button type="button" id="btnAddrMassReg">등록</button>
|
||||
<button type="button" id="btnAddrMassClose" class="tooltip-close" data-focus="adr_popup01-close" data-focus-next="popup02">닫기</button>
|
||||
</div>
|
||||
|
||||
<div id="tab1" class="tab_c tableExcel">
|
||||
<%@include file="/WEB-INF/jsp/web/addr/include/addrListforExcel.jsp" %>
|
||||
</div>
|
||||
<div id="tab2" class="tab_c tableClip" style="display: none;">
|
||||
<%@include file="/WEB-INF/jsp/web/addr/include/addrListforClipboard.jsp" %>
|
||||
</div>
|
||||
<div id="tab3" class="tab_c tableSelf" style="display: none;">
|
||||
<%@include file="/WEB-INF/jsp/web/addr/include/addrListforSelf.jsp" %>
|
||||
</div>
|
||||
<div class="popup_btn_wrap2" style="margin: 0 auto 30px auto;">
|
||||
<button type="button" id="btnAddrMassReg">등록</button>
|
||||
<button type="button" id="btnAddrMassClose" class="tooltip-close" data-focus="adr_popup01-close" data-focus-next="popup02">닫기</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -364,37 +364,33 @@ $(document).on('drop', function (e){
|
||||
//파일 드래그앤드롭 종료
|
||||
|
||||
function excelFileChange(file) {
|
||||
if (file) {
|
||||
fn_loadAddActive();
|
||||
var reader = new FileReader();
|
||||
var extension = file.name.split('.').pop().toLowerCase();
|
||||
reader.onload = function(e) {
|
||||
setTimeout(() => { // 파일 읽기 완료 후 실행되도록 함
|
||||
if (extension === 'xlsx') {
|
||||
var data = new Uint8Array(e.target.result);
|
||||
var workbook = XLSX.read(data, {type: 'array'});
|
||||
var firstSheet = workbook.Sheets[workbook.SheetNames[0]];
|
||||
var jsonData = XLSX.utils.sheet_to_json(firstSheet, {header: 1});
|
||||
processExcelData(jsonData);
|
||||
} else if (extension === 'txt') {
|
||||
var textData = e.target.result;
|
||||
processTextData(textData);
|
||||
} else {
|
||||
alert('지원되지 않는 파일 형식입니다.');
|
||||
}
|
||||
fn_loadRemoveActive();
|
||||
}, 0); // 지연 없이 즉시 실행되도록 0ms 지연을 설정
|
||||
};
|
||||
|
||||
if (extension === 'xlsx') {
|
||||
reader.readAsArrayBuffer(file);
|
||||
} else if (extension === 'txt') {
|
||||
reader.readAsText(file);
|
||||
}
|
||||
}
|
||||
|
||||
// 로딩창 hide
|
||||
|
||||
if (file) {
|
||||
fn_loadAddActive();
|
||||
var reader = new FileReader();
|
||||
var extension = file.name.split('.').pop().toLowerCase();
|
||||
reader.onload = function(e) {
|
||||
setTimeout(() => { // 파일 읽기 완료 후 실행되도록 함
|
||||
if (extension === 'xlsx') {
|
||||
var data = new Uint8Array(e.target.result);
|
||||
var workbook = XLSX.read(data, {type: 'array'});
|
||||
var firstSheet = workbook.Sheets[workbook.SheetNames[0]];
|
||||
var jsonData = XLSX.utils.sheet_to_json(firstSheet, {header: 1});
|
||||
processExcelData(jsonData);
|
||||
} else if (extension === 'txt') {
|
||||
var textData = e.target.result;
|
||||
processTextData(textData);
|
||||
} else {
|
||||
alert('지원되지 않는 파일 형식입니다.');
|
||||
}
|
||||
fn_loadRemoveActive();
|
||||
}, 0); // 지연 없이 즉시 실행되도록 0ms 지연을 설정
|
||||
};
|
||||
if (extension === 'xlsx') {
|
||||
reader.readAsArrayBuffer(file);
|
||||
} else if (extension === 'txt') {
|
||||
reader.readAsText(file);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 엑셀 데이터 처리 함수
|
||||
@ -415,7 +411,7 @@ function processExcelData(data) {
|
||||
});
|
||||
|
||||
updateTable(tableData);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 텍스트 데이터 처리 함수
|
||||
@ -438,25 +434,26 @@ function processTextData(text) {
|
||||
|
||||
//공통 테이블 업데이트 함수
|
||||
function updateTable(tableData) {
|
||||
$tableExcel.setColumns([ // 열 정의를 다시 설정
|
||||
{formatter: "rowSelection", titleFormatter: "rowSelection", clipboard: false, hozAlign: "center", headerHozAlign: "center", headerSort: false, cellClick: function(e, cell) {
|
||||
cell.getRow().toggleSelect();
|
||||
}},
|
||||
{title: "A", field: "A", hozAlign: "center", headerHozAlign: "center", width: 125, validator: ["maxLength:100", "string"]},
|
||||
{title: "B", field: "B", hozAlign: "center", headerHozAlign: "center", width: 125, validator: ["maxLength:100", "string"]},
|
||||
{title: "C", field: "C", hozAlign: "center", headerHozAlign: "center", width: 125, validator: ["maxLength:100", "string"]},
|
||||
{title: "D", field: "D", hozAlign: "center", headerHozAlign: "center", width: 125, validator: ["maxLength:100", "string"]},
|
||||
{title: "E", field: "E", hozAlign: "center", headerHozAlign: "center", width: 125, validator: ["maxLength:100", "string"]},
|
||||
{title: "F", field: "F", hozAlign: "center", headerHozAlign: "center", width: 125, validator: ["maxLength:100", "string"]},
|
||||
{title: "G", field: "G", hozAlign: "center", headerHozAlign: "center", width: 125, validator: ["maxLength:100", "string"]}
|
||||
]);
|
||||
$tableExcel.setColumns([ // 열 정의를 다시 설정
|
||||
{formatter: "rowSelection", titleFormatter: "rowSelection", clipboard: false, hozAlign: "center", headerHozAlign: "center", headerSort: false, cellClick: function(e, cell) {
|
||||
cell.getRow().toggleSelect();
|
||||
}},
|
||||
{formatter:"rownum", align:"center", title:"No", hozAlign:"center", headerHozAlign:"center", width:40},
|
||||
{title: "A", field: "A", hozAlign: "center", headerHozAlign: "center", width: 125, validator: ["maxLength:100", "string"]},
|
||||
{title: "B", field: "B", hozAlign: "center", headerHozAlign: "center", width: 125, validator: ["maxLength:100", "string"]},
|
||||
{title: "C", field: "C", hozAlign: "center", headerHozAlign: "center", width: 125, validator: ["maxLength:100", "string"]},
|
||||
{title: "D", field: "D", hozAlign: "center", headerHozAlign: "center", width: 125, validator: ["maxLength:100", "string"]},
|
||||
{title: "E", field: "E", hozAlign: "center", headerHozAlign: "center", width: 125, validator: ["maxLength:100", "string"]},
|
||||
{title: "F", field: "F", hozAlign: "center", headerHozAlign: "center", width: 125, validator: ["maxLength:100", "string"]},
|
||||
{title: "G", field: "G", hozAlign: "center", headerHozAlign: "center", width: 125, validator: ["maxLength:100", "string"]}
|
||||
]);
|
||||
|
||||
$tableExcel.setData(tableData).then(() => {
|
||||
// rowTotCnt 업데이트
|
||||
document.getElementById("rowTotCnt").innerText = tableData.length;
|
||||
});
|
||||
$tableExcel.setData(tableData).then(() => {
|
||||
// rowTotCnt 업데이트
|
||||
document.getElementById("rowTotCnt").innerText = tableData.length;
|
||||
});
|
||||
|
||||
fn_loadRemoveActive();
|
||||
fn_loadRemoveActive();
|
||||
}
|
||||
|
||||
|
||||
@ -618,7 +615,7 @@ $(document).on("click", "#duplicationChkAll", function(e) {
|
||||
<div class="adr_excel" style="margin-top: 13px;">
|
||||
<!-- thead -->
|
||||
<div class="adr_hd select_adr_hd" data-group="tableExcel">
|
||||
<div></div>
|
||||
<div style="width: 80px;"></div>
|
||||
<div style="width: 125px;">
|
||||
<label for="" class="label"></label>
|
||||
<select class="field-selector">
|
||||
|
||||
@ -28,6 +28,79 @@ function updateTotCnt(data){
|
||||
}
|
||||
|
||||
//주소록 불러오기에서 수신자 리스트 tabulator에 데이터 추가해주기
|
||||
function addPhoneInfo_advc(tableAddr){
|
||||
|
||||
|
||||
var addrData = tableAddr.getData().map((row, index) => ({
|
||||
no: index+1,
|
||||
name: row.addrName,
|
||||
phone: removeDash(row.addrPhone),
|
||||
rep1: row.addrRep1,
|
||||
rep2: row.addrRep2,
|
||||
rep3: row.addrRep3,
|
||||
rep4: row.addrRep4,
|
||||
}));
|
||||
|
||||
tableL.setData(addrData);
|
||||
|
||||
/*
|
||||
var idx = 0;
|
||||
var newData = data;//중복 연락처는 하나만 남기고 모두 제거
|
||||
|
||||
var recTableData = tableL.getRows(); // 받는사람 리스트의 전체 목록을 저장
|
||||
var tableData = [];
|
||||
|
||||
//기존 받는사람 리스트를 배열에 미리 담아둔다.
|
||||
if(recTableData.length > 0){
|
||||
|
||||
for(var j=0; j < recTableData.length; j++){
|
||||
|
||||
tableData.push({phone: removeDash(recTableData[j].getData().phone) , name: recTableData[j].getData().name, rep1: recTableData[j].getData().rep1, rep2: recTableData[j].getData().rep2, rep3: recTableData[j].getData().rep3, rep4: recTableData[j].getData().rep4});
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//받는사람 리스트를 담아둔 배열에 신규 추가 데이터를 추가해 준다.
|
||||
for(var i=0; i < newData.length; i++){
|
||||
|
||||
tableData.push({phone: removeDash(newData[i].phone) , name: newData[i].name, rep1: newData[i].rep1, rep2: newData[i].rep2, rep3: newData[i].rep3, rep4: newData[i].rep4});
|
||||
|
||||
}
|
||||
|
||||
// var temp = tableData.length;
|
||||
|
||||
//기존 수신 리스트를 지워준 후 신규 전체 리스트를 추가해준다.
|
||||
tableL.clearData(); //기존 받는사람 목록을 삭제.
|
||||
//tableL.addData(dupliPhoneData(tableData)); // 받는사람 목록에 주소 정보 입력하기
|
||||
tableL.addData(getSpupDupliPhoneDataChk(tableData)); // 받는사람 목록에 주소 정보 입력하기
|
||||
|
||||
_fileForm2 = []; //form file data 초기화
|
||||
_fileIdx = 0; //form file idx 초기화
|
||||
|
||||
|
||||
//일괄변환 문구 결제금액 처리
|
||||
*/
|
||||
totRows = tableL.getRows().length;
|
||||
updateTotCnt(totRows); //전체 데이터 갯수 구하기
|
||||
var smsTxtArea = $('#smsTxtArea').val();
|
||||
if(smsTxtArea.indexOf("[*이름*]") > -1
|
||||
|| smsTxtArea.indexOf("[*1*]") > -1
|
||||
|| smsTxtArea.indexOf("[*2*]") > -1
|
||||
|| smsTxtArea.indexOf("[*3*]") > -1
|
||||
|| smsTxtArea.indexOf("[*4*]") > -1){
|
||||
|
||||
fnReplCell();
|
||||
|
||||
}else{
|
||||
|
||||
//결제 금액 구하기
|
||||
totalPriceSum(totRows);
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
function addPhoneInfo(data){
|
||||
|
||||
if(data == null){
|
||||
@ -61,7 +134,7 @@ function addPhoneInfo(data){
|
||||
|
||||
}
|
||||
|
||||
var temp = tableData.length;
|
||||
// var temp = tableData.length;
|
||||
|
||||
//기존 수신 리스트를 지워준 후 신규 전체 리스트를 추가해준다.
|
||||
tableL.clearData(); //기존 받는사람 목록을 삭제.
|
||||
@ -560,41 +633,32 @@ $(document).ready(function (){
|
||||
tableL = new Tabulator(".callList_box", {
|
||||
height:"255px",
|
||||
layout:"fitColumns",
|
||||
//data:tabledata,
|
||||
//autoColumns:true,
|
||||
headerHozAlign:"center",
|
||||
validationMode:"highlight",
|
||||
//clipboard:false,
|
||||
//clipboardCopySelector:"table",
|
||||
//clipboardPasteAction:"insert", // insert, update, replace
|
||||
placeholder:"복사(Ctrl+C)한 내용을 여기에 붙여넣기(Ctrl+V) 해주세요.", //fit columns to width of table (optional)
|
||||
resizableColumns:false,
|
||||
columns:[ //Define Table Columns
|
||||
{formatter:"rowSelection", titleFormatter:"rowSelection",clipboard:false, hozAlign:"center", headerSort:false, cellClick:function(e, cell){
|
||||
{formatter:"rowSelection", headerHozAlign:"center", titleFormatter:"rowSelection",clipboard:false, hozAlign:"center", width:5, headerSort:false, cellClick:function(e, cell){
|
||||
cell.getRow().toggleSelect();
|
||||
}},
|
||||
{title:"이름", hozAlign:"center", field:"name", editor:"input", validator:["maxLength:12"], cellEdited:function(cell){
|
||||
//cell - cell component
|
||||
// {formatter:"rownum", align:"center", title:"No", hozAlign:"center", headerHozAlign:"center", field:"No", width:30},
|
||||
{formatter:"rownum", align:"center" ,title:"No", hozAlign:"center", headerHozAlign:"center", width:40},
|
||||
{title:"이름", hozAlign:"center", headerHozAlign:"center", field:"name", editor:"input", validator:["maxLength:12"], cellEdited:function(cell){
|
||||
fnReplCell();
|
||||
}},
|
||||
{title:"휴대폰", hozAlign:"center", field:"phone", editor:"input", width:100, validator:["required","minLength:10", "maxLength:12"], cellEdited:function(cell){
|
||||
//cell - cell component
|
||||
{title:"휴대폰", hozAlign:"center", headerHozAlign:"center", field:"phone", editor:"input", width:100, validator:["required","minLength:10", "maxLength:12"], cellEdited:function(cell){
|
||||
fnDuplPhone();
|
||||
}},
|
||||
{title:"[*1*]", hozAlign:"center", field:"rep1", editor:"input", minWidth:60, validator:["maxLength:40"], cellEdited:function(cell){
|
||||
//cell - cell component
|
||||
{title:"[*1*]", hozAlign:"center", headerHozAlign:"center", field:"rep1", editor:"input", minWidth:60, validator:["maxLength:40"], cellEdited:function(cell){
|
||||
fnReplCell();
|
||||
}},
|
||||
{title:"[*2*]", hozAlign:"center", field:"rep2", editor:"input", minWidth:60, validator:["maxLength:40"], cellEdited:function(cell){
|
||||
//cell - cell component
|
||||
{title:"[*2*]", hozAlign:"center", headerHozAlign:"center", field:"rep2", editor:"input", minWidth:60, validator:["maxLength:40"], cellEdited:function(cell){
|
||||
fnReplCell();
|
||||
}},
|
||||
{title:"[*3*]", hozAlign:"center", field:"rep3", editor:"input", minWidth:60, validator:["maxLength:40"], cellEdited:function(cell){
|
||||
//cell - cell component
|
||||
{title:"[*3*]", hozAlign:"center", headerHozAlign:"center", field:"rep3", editor:"input", minWidth:60, validator:["maxLength:40"], cellEdited:function(cell){
|
||||
fnReplCell();
|
||||
}},
|
||||
{title:"[*4*]", hozAlign:"center", field:"rep4", editor:"input", minWidth:60, validator:["maxLength:40"], cellEdited:function(cell){
|
||||
//cell - cell component
|
||||
{title:"[*4*]", hozAlign:"center", headerHozAlign:"center", field:"rep4", editor:"input", minWidth:60, validator:["maxLength:40"], cellEdited:function(cell){
|
||||
fnReplCell();
|
||||
}},
|
||||
|
||||
@ -1010,14 +1074,11 @@ $(document).ready(function (){
|
||||
|
||||
if(confirm("선택하신 받는 사람을 삭제하시겠습니까?")){
|
||||
|
||||
for(var i=0; i < selectedData.length; i++){
|
||||
|
||||
selectedData[i].delete();
|
||||
|
||||
}
|
||||
|
||||
totRows = tableL.getRows().length;
|
||||
// 선택 데이터 삭제
|
||||
selectedData.forEach(row => row.delete());
|
||||
|
||||
|
||||
totRows = tableL.getRows().length;
|
||||
updateTotCnt(totRows);
|
||||
|
||||
var smsTxtArea = $('#smsTxtArea').val();
|
||||
@ -2696,6 +2757,7 @@ function loadAddrList(){
|
||||
async: true,
|
||||
cache: false,
|
||||
success: function (returnData, status) {
|
||||
console.log('returnData : ', returnData);
|
||||
if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나
|
||||
|
||||
if(returnData.result == "success"){
|
||||
@ -2711,14 +2773,33 @@ function loadAddrList(){
|
||||
}
|
||||
|
||||
//받는사람 리스트를 담아둔 배열에 신규 추가 데이터를 추가해 준다.
|
||||
for(var i=0; i < addrList.length; i++){
|
||||
|
||||
tableData.push({addrGroupNm: addrList[i].addrGrpNm, addrPhone: removeDash(addrList[i].addrPhoneNo) , addrName: addrList[i].addrNm, addrRep1: addrList[i].addrInfo1, addrRep2: addrList[i].addrInfo2, addrRep3: addrList[i].addrInfo3, addrRep4: addrList[i].addrInfo4});
|
||||
|
||||
}
|
||||
// for(var i=0; i < addrList.length; i++){
|
||||
// tableData.push({
|
||||
// addrGroupNm: addrList[i].addrGrpNm
|
||||
// , addrPhone: removeDash(addrList[i].addrPhoneNo)
|
||||
// , addrName: addrList[i].addrNm
|
||||
// , addrRep1: addrList[i].addrInfo1
|
||||
// , addrRep2: addrList[i].addrInfo2
|
||||
// , addrRep3: addrList[i].addrInfo3
|
||||
// , addrRep4: addrList[i].addrInfo4
|
||||
// });
|
||||
// }
|
||||
|
||||
// addrList.forEach(function(addr){
|
||||
// tableData.push({
|
||||
// addrGroupNm: addr.addrGrpNm,
|
||||
// addrPhone: removeDash(addr.addrPhoneNo),
|
||||
// addrName: addr.addrNm,
|
||||
// addrRep1: addr.addrInfo1,
|
||||
// addrRep2: addr.addrInfo2,
|
||||
// addrRep3: addr.addrInfo3,
|
||||
// addrRep4: addr.addrInfo4
|
||||
// });
|
||||
// });
|
||||
|
||||
//우측 주소록 리스트 Tabulator에 입력해주기
|
||||
tableAddr.setData(tableData);
|
||||
// tableAddr.setData(tableData);
|
||||
tableAddr.setData(addrList);
|
||||
|
||||
}else{
|
||||
|
||||
@ -2783,6 +2864,31 @@ function addrToList(){
|
||||
|
||||
}
|
||||
|
||||
//주소록 불러오기에서 수신자 리스트 추가해 주기
|
||||
function addrToList_advc(){
|
||||
console.log('tableAddr :: ', tableAddr);
|
||||
// var selectedData = tableAddr.getSelectedRows();
|
||||
var tableSize = tableAddr.getDataCount();
|
||||
var tableData = [];
|
||||
|
||||
if(tableSize < 1){
|
||||
|
||||
alert("주소록을 선택해 주세요.");
|
||||
return false;
|
||||
|
||||
}else{ // 선택한 Row 데이터 저장해주기
|
||||
|
||||
//선택한 데이터 받는사람 리스트에 추가해 주기
|
||||
addPhoneInfo_advc(tableAddr);
|
||||
$(".closeAddr").trigger("click");
|
||||
|
||||
//주소록 레이어 팝업의 Tabulator 데이터 지워주기
|
||||
tableAddr.clearData();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//주소록 팝업 닫기 기능
|
||||
function addrClose(){
|
||||
|
||||
@ -3345,13 +3451,15 @@ function getMjMsgSentListAll(pageNo) {
|
||||
<!-- 엑셀 불러오기 -->
|
||||
<form id="excelForm" name="excelForm" method="post">
|
||||
<div class="tooltip-wrap">
|
||||
<div class="popup-com import_layer popup02" tabindex="0" data-tooltip-con="popup02" data-focus="popup02" data-focus-prev="popup02-close">
|
||||
<div class="popup_heading">
|
||||
<!-- <div class="popup-com import_layer popup02" tabindex="0" data-tooltip-con="popup02" data-focus="popup02" data-focus-prev="popup02-close"> -->
|
||||
<div class="popup-com adr_layer popup02" tabindex="0" data-tooltip-con="popup02" data-focus="popup02" data-focus-prev="popup02-close" style="width: 1000px;">
|
||||
<%@include file="/WEB-INF/jsp/web/msgdata/include/msgDataIncludeExcel.jsp" %>
|
||||
<!-- <div class="popup_heading">
|
||||
<p><span>엑셀</span> 불러오기</p>
|
||||
<button type="button" class="tooltip-close" data-focus="popup02-close"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>
|
||||
</div>
|
||||
<div class="layer_in">
|
||||
<!-- 엑셀파일 불러오기 -->
|
||||
엑셀파일 불러오기
|
||||
<div class="hascont">
|
||||
<div class="titBox">
|
||||
<p>- 최대 2만 건까지 등록할 수 있습니다.</p>
|
||||
@ -3359,7 +3467,7 @@ function getMjMsgSentListAll(pageNo) {
|
||||
<p>- 이름 : 20byte, [*1*]~[*4*] : 40byte까지 입력 가능합니다.</p>
|
||||
<p>- 휴대폰 항목은 숫자, 하이픈(-)만 인식하며, 번호 앞에 0이 생략되어도 정상 등록됩니다.
|
||||
</p>
|
||||
<!-- <button type="button" class="excel_btn" onclick="location.href='/cmm/fms/FileDown.do?atchFileId=FILE_000000000011651&fileSn=1'"><i></i>샘플파일 다운로드</button> -->
|
||||
<button type="button" class="excel_btn" onclick="location.href='/cmm/fms/FileDown.do?atchFileId=FILE_000000000011651&fileSn=1'"><i></i>샘플파일 다운로드</button>
|
||||
<button type="button" class="excel_btn" onclick="location.href='/download/msg/엑셀주소록_등록양식.xlsx'"><i class="downroad"></i>샘플파일 다운로드</button>
|
||||
</div>
|
||||
<div class="attachedFile">
|
||||
@ -3369,12 +3477,17 @@ function getMjMsgSentListAll(pageNo) {
|
||||
<button type="button" class="btnType btnType6 c3">찾아보기</button>
|
||||
<p><span class="vMiddle">*</span> 첨부된 파일은 <span class="c_e40000">[추가]버튼을 클릭</span>하셔야 받는 사람에 등록됩니다.</p>
|
||||
</div>
|
||||
</div><!--// 엑셀파일 불러오기 -->
|
||||
</div>// 엑셀파일 불러오기
|
||||
<div class="popup_btn_wrap2">
|
||||
<button type="button" class="tooltip-close" data-focus="popup02-close" data-focus-next="popup02" id="excelAdd">추가</button>
|
||||
<button type="button" class="tooltip-close" data-focus="popup02-close" data-focus-next="popup02">닫기</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
-->
|
||||
|
||||
</div>
|
||||
</div><!--// 엑셀 불러오기 -->
|
||||
</form>
|
||||
@ -3470,7 +3583,8 @@ function getMjMsgSentListAll(pageNo) {
|
||||
<!--// table -->
|
||||
</div>
|
||||
<div class="popup_btn_wrap2">
|
||||
<button type="button" onClick="javascript:addrToList(); return false;">추가</button>
|
||||
<!-- <button type="button" onClick="javascript:addrToList(); return false;">추가</button> -->
|
||||
<button type="button" onClick="javascript:addrToList_advc(); return false;">추가</button>
|
||||
<button type="button" onClick="javascript:addrClose(); return false;">닫기</button>
|
||||
</div>
|
||||
<%-- 주소록 레이어 팝업 닫기 실행 코드 --%>
|
||||
@ -3862,10 +3976,11 @@ function getMjMsgSentListAll(pageNo) {
|
||||
<label for="callTo" class="label">받는 번호입력</label>
|
||||
<input type="text" id="callTo" name="callTo" oninput="this.value = this.value.replace(/[^0-9.]/g, '').replace(/(\..*)\./g, '$1');" placeholder="번호를 입력하세요" onfocus="this.placeholder=''" onblur="this.placeholder='번호를 입력하세요'" style="width:340px;">
|
||||
<button type="button" class="btnType btnType6 addCallToF">번호추가</button>
|
||||
<span><span class="vMiddle">*</span> 중복번호는 한번만 발송됩니다.</span>
|
||||
<span><span class="vMiddle">*</span> 중복번호는 한번만 추가됩니다.</span>
|
||||
</div>
|
||||
<div class="receipt_num_midde">
|
||||
<div class="listType list01 callList_box" id="callList_box">
|
||||
<div class="listType list01 callList_box">
|
||||
<!--
|
||||
<div class="list_table list_head">
|
||||
<div class="cb_wrap">
|
||||
<label for="" class="label"></label>
|
||||
@ -3881,7 +3996,7 @@ function getMjMsgSentListAll(pageNo) {
|
||||
<img src="/publish/images/sortUp.png">
|
||||
<img src="/publish/images/sortDown.png">
|
||||
</div>
|
||||
</div>
|
||||
</div> -->
|
||||
</div>
|
||||
<div class="put_right">
|
||||
<div class="btn_popup_wrap spc_wrap">
|
||||
|
||||
@ -0,0 +1,625 @@
|
||||
<%@ 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" %>
|
||||
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
|
||||
|
||||
<script type="text/javascript" src="<c:url value='/publish/js/content.js'/>"></script>
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
var $tableExcel = null; //엑셀입력 탭
|
||||
$(document).ready(function(){
|
||||
// 엑셀 중복번호 버튼
|
||||
$("#tableExcelDupliBtn").hide();
|
||||
|
||||
|
||||
//Tabulator AJAX Data Loading
|
||||
$tableExcel = new Tabulator("#tabulator_excel", {
|
||||
height:"255px",
|
||||
width:"100%",
|
||||
layout:"fitColumns",
|
||||
autoColumns:false,
|
||||
headerHozAlign:"center",
|
||||
validationMode:"highlight",
|
||||
clipboard:false,
|
||||
clipboardCopySelector:"table",
|
||||
clipboardPasteAction:"insert", // insert, update, replace
|
||||
placeholder:"Excel 파일을 업로드 해주세요.", //fit columns to width of table (optional)
|
||||
columns:[ //Define Table Columns
|
||||
{formatter:"rowSelection", titleFormatter:"rowSelection",clipboard:false, hozAlign:"center", headerSort:false, cellClick:function(e, cell){
|
||||
cell.getRow().toggleSelect();
|
||||
}
|
||||
},
|
||||
{formatter:"rownum", align:"center" ,title:"No", hozAlign:"center", headerHozAlign:"center", width:40},
|
||||
{title:"A", field:"A", hozAlign:"center", headerHozAlign: "center", width:125, validator:["maxLength:100", "string"]},
|
||||
{title:"B", field:"B", hozAlign:"center", headerHozAlign: "center", width:125, validator:["maxLength:100", "string"]},
|
||||
{title:"C", field:"C", hozAlign:"center", headerHozAlign: "center", width:125, validator:["maxLength:100", "string"]},
|
||||
{title:"D", field:"D", hozAlign:"center", headerHozAlign: "center", width:125, validator:["maxLength:100", "string"]},
|
||||
{title:"E", field:"E", hozAlign:"center", headerHozAlign: "center", width:125, validator:["maxLength:100", "string"]},
|
||||
{title:"F", field:"F", hozAlign:"center", headerHozAlign: "center", width:125, validator:["maxLength:100", "string"]},
|
||||
{title:"G", field:"G", hozAlign:"center", headerHozAlign: "center", width:125, validator:["maxLength:100", "string"]}
|
||||
],
|
||||
validationFailed:function(cell, value, parameters){ // 유효성 체크 함수
|
||||
var valid = cell.isValid();
|
||||
if(!valid){
|
||||
alert("양식에 맞지 않는 정보가 입력되었습니다.");
|
||||
|
||||
//해당 셀 데이터 삭제
|
||||
cell.setValue("");
|
||||
}
|
||||
return value % parameters.phone;
|
||||
},
|
||||
});
|
||||
|
||||
$("#excelFile").on("change", function(event) {
|
||||
var fileInfo = event.target.files;
|
||||
if(fileInfo.length > 0){
|
||||
excelFileChange(fileInfo[0]);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
|
||||
//#############################################################################################
|
||||
//파일업로드 드래그앤 드롭
|
||||
//#############################################################################################
|
||||
var objDragAndDrop = $(".upload_area");
|
||||
$(document).on("dragenter",".upload_area",function(e){
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
//$(this).css('border', '2px solid #0B85A1');
|
||||
});
|
||||
$(document).on("dragover",".upload_area",function(e){
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
});
|
||||
$(document).on("drop",".upload_area",function(e){
|
||||
// fn_loadAddActive();
|
||||
e.preventDefault();
|
||||
var files = e.originalEvent.dataTransfer.files;
|
||||
excelFileChange(files[0]);
|
||||
});
|
||||
|
||||
$(document).on('dragenter', function (e){
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
});
|
||||
$(document).on('dragover', function (e){
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
//objDragAndDrop.css('border', '2px dotted #0B85A1');
|
||||
});
|
||||
$(document).on('drop', function (e){
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
});
|
||||
//파일 드래그앤드롭 종료
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//타이틀 select 선택 이벤트
|
||||
$('.field-selector').on('change', function() {
|
||||
fn_loadAddActive();
|
||||
var selectedFields = [];
|
||||
var isDuplicate = false;
|
||||
|
||||
if($tableExcel.getData().length < 1){
|
||||
alert('데이터 입력 후 선택해 주세요.');
|
||||
$(this).val("");
|
||||
fn_loadRemoveActive();
|
||||
return false;
|
||||
}
|
||||
|
||||
// 중복체크
|
||||
$('.field-selector').each(function() {
|
||||
var selectedField = $(this).val();
|
||||
if (selectedField) {
|
||||
if (selectedFields.includes(selectedField)) {
|
||||
alert("중복된 필드를 선택할 수 없습니다.");
|
||||
$(this).val(""); // 중복 필드를 선택한 경우 빈 값으로 초기화
|
||||
isDuplicate = true;
|
||||
return false; // 반복문 종료
|
||||
}
|
||||
selectedFields.push(selectedField);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
//
|
||||
updateTableFields($tableExcel);
|
||||
|
||||
// 필드가 휴대폰이면 열 중복체크
|
||||
if($(this).val() == 'addrPhoneNo'){
|
||||
fn_phoneDupl($tableExcel);
|
||||
}
|
||||
fn_loadRemoveActive();
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
||||
// 받는사람 선택삭제 버튼 처리해주기
|
||||
$('#in_select_del').click(function(){
|
||||
|
||||
if(tableL == null || tableL == ""){
|
||||
|
||||
alert("받는사람을 추가해 주세요.");
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
var selectedData = tableL.getSelectedRows();
|
||||
|
||||
if(selectedData == "" || selectedData == null){
|
||||
|
||||
alert("삭제할 연락처를 선택해주세요.");
|
||||
return false;
|
||||
|
||||
}else{ // 선택한 Row 데이터 삭제하기
|
||||
|
||||
if(confirm("선택하신 받는 사람을 삭제하시겠습니까?")){
|
||||
|
||||
// 선택 데이터 삭제
|
||||
selectedData.forEach(row => row.delete());
|
||||
|
||||
|
||||
totRows = tableL.getRows().length;
|
||||
updateTotCnt(totRows);
|
||||
|
||||
var smsTxtArea = $('#smsTxtArea').val();
|
||||
|
||||
//일괄변환 문구 결제금액 처리
|
||||
if(smsTxtArea.indexOf("[*이름*]") > -1
|
||||
|| smsTxtArea.indexOf("[*1*]") > -1
|
||||
|| smsTxtArea.indexOf("[*2*]") > -1
|
||||
|| smsTxtArea.indexOf("[*3*]") > -1
|
||||
|| smsTxtArea.indexOf("[*4*]") > -1){
|
||||
|
||||
fnReplCell();
|
||||
}else{
|
||||
//결제 금액 구하기
|
||||
totalPriceSum(totRows);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
});
|
||||
|
||||
|
||||
|
||||
function excelFileChange(file) {
|
||||
if (file) {
|
||||
fn_loadAddActive();
|
||||
var reader = new FileReader();
|
||||
var extension = file.name.split('.').pop().toLowerCase();
|
||||
reader.onload = function(e) {
|
||||
setTimeout(() => { // 파일 읽기 완료 후 실행되도록 함
|
||||
if (extension === 'xlsx') {
|
||||
var data = new Uint8Array(e.target.result);
|
||||
var workbook = XLSX.read(data, {type: 'array'});
|
||||
var firstSheet = workbook.Sheets[workbook.SheetNames[0]];
|
||||
var jsonData = XLSX.utils.sheet_to_json(firstSheet, {header: 1});
|
||||
processExcelData(jsonData);
|
||||
} else if (extension === 'txt') {
|
||||
var textData = e.target.result;
|
||||
processTextData(textData);
|
||||
} else {
|
||||
alert('지원되지 않는 파일 형식입니다.');
|
||||
}
|
||||
fn_loadRemoveActive();
|
||||
}, 0); // 지연 없이 즉시 실행되도록 0ms 지연을 설정
|
||||
};
|
||||
if (extension === 'xlsx') {
|
||||
reader.readAsArrayBuffer(file);
|
||||
} else if (extension === 'txt') {
|
||||
reader.readAsText(file);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 엑셀 데이터 처리 함수
|
||||
function processExcelData(data) {
|
||||
var keys = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];
|
||||
var tableData = [];
|
||||
var totalRows = data.length - 2; // 전체 데이터 수 (1, 2행 제외)
|
||||
|
||||
|
||||
// 3번째 행부터 입력
|
||||
data.slice(2).forEach((row, index) => {
|
||||
var rowData = {};
|
||||
keys.forEach((key, idx) => { // index 변수명 변경 (내부와 외부에서 사용되므로 충돌 방지)
|
||||
rowData[key] = row[idx] ? row[idx].trim() : ""; // 각 컬럼에 대해 기본값을 설정
|
||||
});
|
||||
tableData.push(rowData);
|
||||
|
||||
});
|
||||
|
||||
updateTable(tableData);
|
||||
}
|
||||
|
||||
|
||||
// 텍스트 데이터 처리 함수
|
||||
function processTextData(text) {
|
||||
var lines = text.split('\n'); // 각 줄을 배열로 분리
|
||||
var keys = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];
|
||||
var tableData = [];
|
||||
|
||||
lines.forEach(line => {
|
||||
var rowData = {};
|
||||
var row = line.split(','); // 쉼표로 분리
|
||||
keys.forEach((key, index) => {
|
||||
rowData[key] = row[index] ? row[index].trim() : ""; // 각 컬럼에 대해 기본값을 설정
|
||||
});
|
||||
tableData.push(rowData);
|
||||
});
|
||||
|
||||
updateTable(tableData);
|
||||
}
|
||||
|
||||
//공통 테이블 업데이트 함수
|
||||
function updateTable(tableData) {
|
||||
$tableExcel.setColumns([ // 열 정의를 다시 설정
|
||||
{formatter: "rowSelection", titleFormatter: "rowSelection", clipboard: false, hozAlign: "center", headerHozAlign: "center", headerSort: false, cellClick: function(e, cell) {
|
||||
cell.getRow().toggleSelect();
|
||||
}},
|
||||
{formatter:"rownum", align:"center" ,title:"No", hozAlign:"center", headerHozAlign:"center", width:40},
|
||||
{title: "A", field: "A", hozAlign: "center", headerHozAlign: "center", width: 125, validator: ["maxLength:100", "string"]},
|
||||
{title: "B", field: "B", hozAlign: "center", headerHozAlign: "center", width: 125, validator: ["maxLength:100", "string"]},
|
||||
{title: "C", field: "C", hozAlign: "center", headerHozAlign: "center", width: 125, validator: ["maxLength:100", "string"]},
|
||||
{title: "D", field: "D", hozAlign: "center", headerHozAlign: "center", width: 125, validator: ["maxLength:100", "string"]},
|
||||
{title: "E", field: "E", hozAlign: "center", headerHozAlign: "center", width: 125, validator: ["maxLength:100", "string"]},
|
||||
{title: "F", field: "F", hozAlign: "center", headerHozAlign: "center", width: 125, validator: ["maxLength:100", "string"]},
|
||||
{title: "G", field: "G", hozAlign: "center", headerHozAlign: "center", width: 125, validator: ["maxLength:100", "string"]}
|
||||
]);
|
||||
|
||||
$tableExcel.setData(tableData).then(() => {
|
||||
// rowTotCnt 업데이트
|
||||
document.getElementById("rowTotCnt").innerText = tableData.length;
|
||||
});
|
||||
|
||||
fn_loadRemoveActive();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* 타이틀 select 선택할때마다 실행해서
|
||||
* 데이터테이블 필드값 수정
|
||||
*/
|
||||
function updateTableFields($objTabul) {
|
||||
var currentData = $objTabul.getData();
|
||||
var columns = [
|
||||
{formatter: "rowSelection", titleFormatter: "rowSelection", clipboard: false, hozAlign: "center", headerHozAlign: "center", headerSort: false, cellClick: function(e, cell) {
|
||||
cell.getRow().toggleSelect();
|
||||
}}
|
||||
,{formatter:"rownum", align:"center", title:"No", hozAlign:"center", headerHozAlign:"center", width:40}
|
||||
];
|
||||
|
||||
var fieldMapping = [];
|
||||
$('.field-selector').each(function(index) {
|
||||
var selectedField = $(this).val();
|
||||
// ASCII 문자 코드 사용 - 65=A, 66=B ...
|
||||
var field = String.fromCharCode(65 + index);
|
||||
if (selectedField) {
|
||||
columns.push({title: field, field: selectedField, hozAlign: "center", headerHozAlign: "center", editor: "input", width: 125, validator: ["maxLength:100", "string"]});
|
||||
fieldMapping.push(selectedField);
|
||||
} else {
|
||||
columns.push({title: field, field: field, hozAlign: "center", headerHozAlign: "center", editor: "input", width: 125, validator: ["maxLength:100", "string"]});
|
||||
fieldMapping.push(field);
|
||||
}
|
||||
});
|
||||
|
||||
var updatedData = currentData.map(row => {
|
||||
var newRow = {};
|
||||
fieldMapping.forEach((field, index) => {
|
||||
newRow[field] = row[Object.keys(row)[index]] || "";
|
||||
});
|
||||
return newRow;
|
||||
});
|
||||
|
||||
$objTabul.setColumns(columns);
|
||||
$objTabul.setData(updatedData);
|
||||
}
|
||||
|
||||
/**
|
||||
* @ 핸드폰 중복 데이터
|
||||
* */
|
||||
function fn_phoneDupl($objTabul) {
|
||||
var data = $objTabul.getData();
|
||||
var uniquePhones = new Set();
|
||||
var dupliPhoneDataRealList = [];
|
||||
var rowsToKeep = [];
|
||||
var rowsToDelete = [];
|
||||
var phoneNumberChk = false;
|
||||
|
||||
|
||||
|
||||
data.forEach((row, index) => {
|
||||
|
||||
if (!isValidKoreanPhoneNumber(row.addrPhoneNo)) {
|
||||
phoneNumberChk = true
|
||||
return false;
|
||||
}
|
||||
|
||||
if (uniquePhones.has(row.addrPhoneNo)) {
|
||||
dupliPhoneDataRealList.push(row.addrPhoneNo);
|
||||
rowsToDelete.push(index); // 중복된 행의 인덱스를 기록
|
||||
} else {
|
||||
uniquePhones.add(row.addrPhoneNo);
|
||||
rowsToKeep.push(row); // 고유한 데이터만 추가
|
||||
}
|
||||
});
|
||||
|
||||
if(phoneNumberChk){
|
||||
alert('휴대폰 형식에 맞지 않는 데이터가 있습니다.\n 확인해 주세요');
|
||||
}
|
||||
|
||||
$("#rowDupCnt").text(dupliPhoneDataRealList.length);
|
||||
|
||||
if (dupliPhoneDataRealList.length > 0) {
|
||||
// alert("중복된 휴대폰 번호가 있습니다: \n" + duplicatePhones.join(", "));
|
||||
makeAddrMassDupliPop(dupliPhoneDataRealList);
|
||||
}
|
||||
|
||||
// 중복된 행 삭제
|
||||
rowsToDelete.reverse().forEach(index => {
|
||||
$objTabul.deleteRow(index);
|
||||
});
|
||||
|
||||
// 고유한 데이터만 남기고 테이블 업데이트
|
||||
$objTabul.setData(rowsToKeep);
|
||||
$("#rowTotCnt").text(rowsToKeep.length);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
function fn_dupliPopupShow(){
|
||||
$('#tableExcelDupliBtn').show()
|
||||
}
|
||||
|
||||
//한국의 핸드폰 번호 형식 검사 함수
|
||||
function isValidKoreanPhoneNumber(phone) {
|
||||
// 하이픈(-)을 제거하고 숫자만 남긴 후 검사
|
||||
var cleaned = phone.replace(/-/g, '');
|
||||
// 010, 011, 016, 017, 018, 019로 시작하고 10~11자리인 경우 유효
|
||||
var valid = /^(010|011|016|017|018|019)\d{7,8}$/.test(cleaned);
|
||||
return valid;
|
||||
}
|
||||
|
||||
// 상단 설명 더보기
|
||||
function popMore(e){
|
||||
$(e).closest(".pop_more_cont").toggleClass("pop_more_click");
|
||||
|
||||
if($(e).closest(".pop_more_cont").is(".pop_more_click")){
|
||||
$(e).html('숨기기');
|
||||
$(e).append('<i></i>');
|
||||
}else {
|
||||
$(e).html('더보기');
|
||||
$(e).append('<i></i>');
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<div class="popup_heading">
|
||||
<p>주소록 대량등록</p>
|
||||
<button type="button" class="tooltip-close" data-focus="popup02-close"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>
|
||||
</div>
|
||||
<div class="layer_in" style="padding: 25px 30px;">
|
||||
<!-- <div class="list_tab_wrap2"> -->
|
||||
<!-- tab button -->
|
||||
<!-- <ul class="list_tab" id="tbTabl"> -->
|
||||
<!-- <li class="tab active" data-tabul="tableExcel"><button type="button" onclick="popupTab(this,'1'); fn_tabToggle('1');">엑셀입력</button></li> -->
|
||||
<!-- <li class="tab" data-tabul="tableClip"><button type="button" onclick="popupTab(this,'2'); fn_tabToggle('2');">붙여넣기</button></li> -->
|
||||
<!-- <li class="tab" data-tabul="tableSelf"><button type="button" onclick="popupTab(this,'3'); fn_tabToggle('3');">직접입력</button></li> -->
|
||||
<!-- </ul>// tab button -->
|
||||
<!-- </div> -->
|
||||
<!-- 엑셀입력 -->
|
||||
<div class="popCont current pop_more_cont" id="popCont_1">
|
||||
<div class="titBox">
|
||||
<p>- 엑셀(EXCEL) 파일로 주소록을 한 번에 최대 2만건까지 등록하여 간편하게 발송 및 관리하실 수 있습니다.</p>
|
||||
<p>- 반드시 샘플파일을 다운로드하여 작성방법을 확인하신 후 정해진 양식에 맞추어 주소록을 작성하셔야 합니다.</p>
|
||||
<p> ※ 주소록 관리 메뉴에서 다운로드 받으신 엑셀 파일 또한 업로드 양식에 맞추어 작성하셔야 하며, </p>
|
||||
<p> 주소록에 이미 등록된 휴대폰 번호는 업데이트 되지 않으므로 기존 주소록에서 해당 휴대폰 번호를 삭제한 후 재등록해 주시기 바랍니다.</p>
|
||||
<p>- 쉼표(,), 구분선(|), 역슬래시(\, ₩), 작은따옴표('), 큰따옴표(") 등 발송불가 특수문자는 저장되지 않습니다.</p>
|
||||
<p>- 휴대폰 번호는 필수입력 항목입니다.</p>
|
||||
<p>- 전화번호 형태는 010-1234-5678 또는 01012345678 모두 가능합니다. 단, 공백은 허용되지 않습니다.</p>
|
||||
<p>- 엑셀 파일에 비밀번호 설정, 제한된 보기, 수식 등이 설정되어 있는 경우 업로드가 불가합니다.</p>
|
||||
<p>- 이름 20byte, [*1*]~[*4*] 40byte, 메모 250byte까지 입력 가능합니다.</p>
|
||||
<p>- 첨부가능 파일 : xlsx, xls(최대용량 3MB)</p>
|
||||
<p>- ‘오류 검사’를 통해 등록된 데이터에 전화번호 입력 오류를 확인하실 수 있습니다.</p>
|
||||
<p>- 주소록 등록이 어려우신 경우에는 주소록 입력대행 메뉴를 이용하시면 됩니다.</p>
|
||||
<button type="button" class="excel_btn" onclick="location.href='/download/addr/주소록_대량등록.xlsx'"><i class="downroad"></i>샘플파일 다운로드</button>
|
||||
</div>
|
||||
<div class="pop_more_wrap">
|
||||
<button type="button" class="pop_more" onclick="popMore(this);">더보기<i></i></button>
|
||||
</div>
|
||||
</div><!--// 엑셀입력 -->
|
||||
|
||||
<!-- 공통 -->
|
||||
<div>
|
||||
<table class="layer_tType1">
|
||||
<caption>엑셀입력 표</caption>
|
||||
<colgroup>
|
||||
<col style="width: 95px">
|
||||
<col style="width: auto">
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>그룹 선택</th>
|
||||
<td>
|
||||
<label for="" class="label">그룹 선택</label>
|
||||
<select id="addrGrpIdInfo" name="addrGrpIdInfo">
|
||||
</select>
|
||||
<label for="" class="label">그룹명 입력</label>
|
||||
<input type="text" id="addrGrpNm" name="addrGrpNm" placeholder="새 그룹명을 입력해주세요." onfocus="this.placeholder=''" onblur="this.placeholder='새 그룹명을 입력해주세요.'"class="inputLight" style="width: 300px;">
|
||||
<input type="file" id="excelFile" accept=".xls, .xlsx, .txt" style="display:none"/>
|
||||
<button type="button" class="excel_btn2 btnType c3"><i class="uproad"></i>엑셀, TXT파일 업로드</button>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="file_add upload_area">
|
||||
<p><img src="/publish/images/content/file_add.png" alt="파일 붙여넣기">마우스로 엑셀, TXT파일을 여기에 끌어다 놓으세요</p>
|
||||
</div>
|
||||
<div class="excel_middle2">
|
||||
<p>
|
||||
총 <span class="c_e40000 fwBold" id="rowTotCnt">0</span>건 / 중복 <span class="c_002c9a fwBold" id="rowDupCnt">0</span>건
|
||||
|
||||
<button type="button" class="btnType btnType6" data-tooltip="addrMassDupli_layer" id="tableExcelDupliBtn">중복번호</button>
|
||||
<!-- -->
|
||||
<!-- <button type="button" class="btnType btnType6" data-tooltip="addrMassSaveDupli_layer" onclick="GetAddrMassSaveDupli()" id="btnAddrMassSaveDupli">중복번호</button> -->
|
||||
</p>
|
||||
<!-- <button type="button" class="btnType btnType6 addCallToF">번호추가</button> -->
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<div class="adr_excel" style="margin-top: 13px;">
|
||||
<!-- thead -->
|
||||
<div class="adr_hd select_adr_hd" data-group="tableExcel">
|
||||
<div style="width: 80px;"></div>
|
||||
<div style="width: 125px;">
|
||||
<label for="" class="label"></label>
|
||||
<select class="field-selector">
|
||||
<option value="">선택하기</option>
|
||||
<option value="addrNm">이름</option>
|
||||
<option value="addrPhoneNo">휴대폰</option>
|
||||
<option value="addrInfo1">[*1*]</option>
|
||||
<option value="addrInfo2">[*2*]</option>
|
||||
<option value="addrInfo3">[*3*]</option>
|
||||
<option value="addrInfo4">[*4*]</option>
|
||||
<option value="addrComment">메모</option>
|
||||
</select>
|
||||
</div>
|
||||
<div style="width: 125px;">
|
||||
<label for="" class="label"></label>
|
||||
<select class="field-selector">
|
||||
<option value="">선택하기</option>
|
||||
<option value="addrNm">이름</option>
|
||||
<option value="addrPhoneNo">휴대폰</option>
|
||||
<option value="addrInfo1">[*1*]</option>
|
||||
<option value="addrInfo2">[*2*]</option>
|
||||
<option value="addrInfo3">[*3*]</option>
|
||||
<option value="addrInfo4">[*4*]</option>
|
||||
<option value="addrComment">메모</option>
|
||||
</select>
|
||||
</div>
|
||||
<div style="width: 125px;">
|
||||
<label for="" class="label"></label>
|
||||
<select class="field-selector">
|
||||
<option value="">선택하기</option>
|
||||
<option value="addrNm">이름</option>
|
||||
<option value="addrPhoneNo">휴대폰</option>
|
||||
<option value="addrInfo1">[*1*]</option>
|
||||
<option value="addrInfo2">[*2*]</option>
|
||||
<option value="addrInfo3">[*3*]</option>
|
||||
<option value="addrInfo4">[*4*]</option>
|
||||
<option value="addrComment">메모</option>
|
||||
</select>
|
||||
</div>
|
||||
<div style="width: 125px;">
|
||||
<label for="" class="label"></label>
|
||||
<select class="field-selector">
|
||||
<option value="">선택하기</option>
|
||||
<option value="addrNm">이름</option>
|
||||
<option value="addrPhoneNo">휴대폰</option>
|
||||
<option value="addrInfo1">[*1*]</option>
|
||||
<option value="addrInfo2">[*2*]</option>
|
||||
<option value="addrInfo3">[*3*]</option>
|
||||
<option value="addrInfo4">[*4*]</option>
|
||||
<option value="addrComment">메모</option>
|
||||
</select>
|
||||
</div>
|
||||
<div style="width: 125px;">
|
||||
<label for="" class="label"></label>
|
||||
<select class="field-selector">
|
||||
<option value="">선택하기</option>
|
||||
<option value="addrNm">이름</option>
|
||||
<option value="addrPhoneNo">휴대폰</option>
|
||||
<option value="addrInfo1">[*1*]</option>
|
||||
<option value="addrInfo2">[*2*]</option>
|
||||
<option value="addrInfo3">[*3*]</option>
|
||||
<option value="addrInfo4">[*4*]</option>
|
||||
<option value="addrComment">메모</option>
|
||||
</select>
|
||||
</div>
|
||||
<div style="width: 125px;">
|
||||
<label for="" class="label"></label>
|
||||
<select class="field-selector">
|
||||
<option value="">선택하기</option>
|
||||
<option value="addrNm">이름</option>
|
||||
<option value="addrPhoneNo">휴대폰</option>
|
||||
<option value="addrInfo1">[*1*]</option>
|
||||
<option value="addrInfo2">[*2*]</option>
|
||||
<option value="addrInfo3">[*3*]</option>
|
||||
<option value="addrInfo4">[*4*]</option>
|
||||
<option value="addrComment">메모</option>
|
||||
</select>
|
||||
</div>
|
||||
<div style="width: 125px;">
|
||||
<label for="" class="label"></label>
|
||||
<select class="field-selector">
|
||||
<option value="">선택하기</option>
|
||||
<option value="addrNm">이름</option>
|
||||
<option value="addrPhoneNo">휴대폰</option>
|
||||
<option value="addrInfo1">[*1*]</option>
|
||||
<option value="addrInfo2">[*2*]</option>
|
||||
<option value="addrInfo3">[*3*]</option>
|
||||
<option value="addrInfo4">[*4*]</option>
|
||||
<option value="addrComment">메모</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="drag_drop_wrap callList_includ_box" id="tabulator_excel">
|
||||
<!-- <img src="/publish/images/content/excel.jpg" style="width: 100%;"> -->
|
||||
</div>
|
||||
<div class="excel_middle">
|
||||
<div class="select_btnWrap clearfix">
|
||||
<div>
|
||||
<button type="button" id="all_del"><i class="remove_img"></i>전체삭제</button>
|
||||
<button type="button" id="in_select_del"><i class="remove_img"></i>선택삭제</button>
|
||||
<button type="button" id="chkVali_del"><i class="remove_img"></i>오류번호삭제</button>
|
||||
<button type="button" id="check_validity">오류 검사 <i></i></button>
|
||||
<div class="error_hover_cont send_hover_cont addr_hover_cont">
|
||||
<p>휴대폰 번호 입력 시 해당 휴대폰 번호에 대한 형식이 어긋나거나 휴대폰 번호에 오류가 있는지 등을 검사하는 기능</p>
|
||||
<span>(예시) 010-1234-0001(O) / 010-123-0001(X)</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div><!--// 공통 -->
|
||||
|
||||
<!-- 붙여놓기 설명 -->
|
||||
<div class="req_area">
|
||||
<div class="text_box">
|
||||
- 휴대폰 번호가 입력된 txt 파일을 열어 복사(Ctrl+c) + 붙여넣기(Ctrl+v)로도 입력하실 수 있습니다.<br>
|
||||
- 휴대폰 번호는 필수입력 항목입니다.<br>
|
||||
- 이름,휴대폰 번호,[*1*],[*2*],[*3*],[*4*],메모 순서대로 입력해주세요.(예 : 010-1234-5678,홍길동,변수1…메모)<br>
|
||||
- 이름은 24byte, [*1*]~[*4*] 40byte, 메모는 250byte까지 입력 가능합니다.<br>
|
||||
- '오류 검사'를 통해 등록된 데이터에 전화번호 입력 오류를 확인하실 수 있습니다.
|
||||
</div>
|
||||
</div>
|
||||
<div class="popup_btn_wrap2" style="margin: 0 auto 30px auto;">
|
||||
<button type="button" id="btnAddrMassReg">등록</button>
|
||||
<button type="button" id="btnAddrMassClose" class="tooltip-close" data-focus="adr_popup01-close" data-focus-next="popup02">닫기</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@ -141,6 +141,7 @@ function addrToList(){
|
||||
}
|
||||
|
||||
function loadAddrList(){
|
||||
console.log(' loadAddrList() ');
|
||||
|
||||
/*
|
||||
serialize 를 사용할때는 processData, contentType 옵션 제가할것
|
||||
@ -157,8 +158,8 @@ function loadAddrList(){
|
||||
async: false,
|
||||
cache: false,
|
||||
success: function (returnData, status) {
|
||||
console.log('returnData : ', returnData);
|
||||
if(status == 'success'){ // status 확인 필요한가. 석세스 안뜨면 에러 가지 않나
|
||||
|
||||
if(returnData.result == "success"){
|
||||
|
||||
var addrList = returnData.resultAddrList;
|
||||
|
||||
@ -115,6 +115,7 @@ $(document).ready(function(){
|
||||
{formatter: "rowSelection", titleFormatter: "rowSelection", clipboard: false, hozAlign: "center", headerHozAlign: "center", headerSort: false, cellClick: function(e, cell) {
|
||||
cell.getRow().toggleSelect();
|
||||
}}
|
||||
,{formatter:"rownum", align:"center", title:"No", hozAlign:"center", headerHozAlign:"center", width:40}
|
||||
];
|
||||
|
||||
var fieldMapping = [];
|
||||
@ -144,14 +145,14 @@ $(document).ready(function(){
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
function fn_loadAddActive(){
|
||||
$('.loading_layer').addClass('active');
|
||||
}
|
||||
|
||||
function fn_loadRemoveActive(){
|
||||
$('.loading_layer').removeClass('active');
|
||||
}
|
||||
//
|
||||
//function fn_loadAddActive(){
|
||||
// $('.loading_layer').addClass('active');
|
||||
//}
|
||||
//
|
||||
//function fn_loadRemoveActive(){
|
||||
// $('.loading_layer').removeClass('active');
|
||||
//}
|
||||
|
||||
//중복 연락처
|
||||
function makeAddrMassDupliPop(dupliPhoneDataRealList) {
|
||||
|
||||
@ -37,6 +37,7 @@ $(document).ready(function(){
|
||||
cell.getRow().toggleSelect();
|
||||
}
|
||||
},
|
||||
{formatter:"rownum", align:"center" ,title:"No", hozAlign:"center", headerHozAlign:"center", width:40},
|
||||
{title:"A", field:"A", hozAlign:"center", headerHozAlign: "center", width:125, validator:["maxLength:100", "string"]},
|
||||
{title:"B", field:"B", hozAlign:"center", headerHozAlign: "center", width:125, validator:["maxLength:100", "string"]},
|
||||
{title:"C", field:"C", hozAlign:"center", headerHozAlign: "center", width:125, validator:["maxLength:100", "string"]},
|
||||
|
||||
@ -1553,4 +1553,12 @@ function buttonTypeDel(btn){
|
||||
|
||||
//미리보기 추가된 버튼 정보 삭제처리하기
|
||||
$('.btnEmpty').eq(btnIndex).remove();
|
||||
}
|
||||
}
|
||||
|
||||
function fn_loadAddActive(){
|
||||
$('.loading_layer').addClass('active');
|
||||
}
|
||||
|
||||
function fn_loadRemoveActive(){
|
||||
$('.loading_layer').removeClass('active');
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user