diff --git a/src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataSMLView.jsp b/src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataSMLView.jsp index 776643a1..41fd6e51 100644 --- a/src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataSMLView.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataSMLView.jsp @@ -18,7 +18,6 @@ $(document).ready(function(){ - //받는사람 연락처 내용 처리 @@ -98,12 +97,21 @@ $(document).ready(function(){ placeholder: "주소록 그룹을 선택해 주세요.", resizableColumns: false, progressiveLoad:"scroll", + progressiveRender: true, // 렌더링 최적화 활성화 + progressiveRenderSize: 100, // 한 번에 렌더링할 행 수를 줄임 columns: [ - {formatter: "rowSelection", clipboard: false, hozAlign: "center", headerSort: false}, -// {formatter: "rowSelection", titleFormatter: "rowSelection", clipboard: false, hozAlign: "center", headerSort: false, cellClick: function(e, cell) { -// cell.getRow().toggleSelect(); -// } -// }, +// {formatter: "rowSelection", clipboard: false, hozAlign: "center", headerSort: false}, + {formatter: "rowSelection", titleFormatter: "rowSelection", hozAlign: "center", headerSort: false, + cellClick: function(e, cell) { + fn_loadAddActive(); // 로딩 활성화 + setTimeout(() => { + tableAddr.blockRedraw(); // 렌더링 차단 + cell.getRow().toggleSelect(); // 선택 상태 토글 + tableAddr.restoreRedraw(); // 렌더링 재개 + fn_loadRemoveActive(); // 로딩 비활성화 + }, 0); // 비동기적으로 실행 + } + }, {formatter: "rownum", align: "center", title: "No", hozAlign: "center", headerHozAlign: "center", width: 60}, {title: "그룹명", hozAlign: "center", field: "addrGroupNm", editor: false, width: 100, validator: ["required", "minLength:2", "maxLength:40"]}, {title: "이름", hozAlign: "center", field: "name", editor: false, width: 100, validator: ["maxLength:12"]}, @@ -1018,60 +1026,18 @@ $(document).ready(function (){ .filter(num => isValidPhoneNumber(num)); // 유효한 번호만 필터링; console.log('numbers : ', numbers); - - const addrData = numbers - .map(number => { - if (!number) return null; // 빈 값은 제외 - return { - name: "", // name은 빈 문자열 - phone: removeDash(number), // 전화번호는 removeDash 처리 - rep1: "", // rep로 시작하는 값 모두 빈 문자열 - rep2: "", - rep3: "", - rep4: "", - }; - }) - .filter(data => data !== null); // null 제거 + const addrData = processPhoneNumbers(numbers); - - - // 기존 tableL의 데이터를 가져옵니다. var existingData = tableL.getData(); - var combinedData = existingData.concat(addrData); - - /** - * @ phone을 기준으로 중복 제거 및 갯수 계산 - * @ 결과 반환 - * return { - * uniqueArray, // 중복 제거된 배열 - * uniqueCount, // 중복 제거된 데이터 개수 - * duplicateArray // 중복된 데이터 배열 - * duplicateCount: duplicateArray.length // 중복된 데이터 개수 - * }; - */ - const result = removeDuplicatesAndCount(combinedData, 'phone'); - - // 총 30만건이 넘으면 false - if (!validateRowLimit(result.uniqueCount)) { - return false; - } + // 데이터 병합 및 중복 제거 + const result = mergeAndValidateData(existingData, addrData); - // 합쳐진 데이터를 tableL에 설정합니다. - tableL.setData(result.uniqueArray); - // 중복데이터 건수 입력 - setRowDupCnt(result.duplicateArray.length); - // 미리보기 버튼 활성화 - updateButtons(0); - - var totRows = tableL.getRows().length; - updateTotCnt(totRows); //전체 데이터 갯수 구하기 - - - totalPriceSum(totRows); + // 테이블 데이터 업데이트 + if (!updateTableData(tableL, result)) return false; // textarea 초기화 textarea.val(''); // jQuery 객체에서 값을 초기화할 때는 .val('') 사용 @@ -1223,56 +1189,79 @@ $(document).ready(function (){ //최근전송내역 팝업 선택추가 버튼 처리(체크내역 받는사람 리스트로 추가해주기) $(document).on('click', '#latestAddPhone', function (){ - var addPhoneList = []; //신규로 추가할 전화번호 저장변수 + var numbers = []; //신규로 추가할 전화번호 저장변수 $("input:checkbox[name='latAddrChk']:checked").each(function(index){ var chkPhone = $(this).val(); if(!checkHpNum(chkPhone)){ alert("올바른 전화번호가 아닙니다."); return false; }else{ - addPhoneList.push({phone: removeDash(chkPhone.trim())}); + numbers.push(removeDash(chkPhone.trim())); } }); - if (!validateRowLimit(tableL.getDataCount(), addPhoneList.length)) { - return false; - } - if(addPhoneList.length > 0){ - //연락처 추가해 주기 - addPhoneInfo(addPhoneList); - $("#btnLatestAddPhoneClose").trigger("click"); - } - else { + + if(numbers.length < 1) + { alert("연락처를 선택해주세요."); return false; - } + } + + console.log('numbers : ', numbers); + const addrData = processPhoneNumbers(numbers); + + + // 기존 tableL의 데이터를 가져옵니다. + var existingData = tableL.getData(); + + // 데이터 병합 및 중복 제거 + const result = mergeAndValidateData(existingData, addrData); + + + // 테이블 데이터 업데이트 + if (!updateTableData(tableL, result)) return false; + + + $("#btnLatestAddPhoneClose").trigger("click"); + }); //최근전송내역 팝업 전체추가 버튼 처리 $(document).on('click', '#latestAddPhoneAll', function (){ - var addPhoneList = []; //신규로 추가할 전화번호 저장변수 + var numbers = []; //신규로 추가할 전화번호 저장변수 $("input:checkbox[name='latAddrChk']").each(function(index){ var chkPhone = $(this).val(); if(!checkHpNum(chkPhone)){ alert("올바른 전화번호가 아닙니다."); return false; }else{ - addPhoneList.push({phone: removeDash(chkPhone.trim())}); + numbers.push(removeDash(chkPhone.trim())); } }); - if (!validateRowLimit(tableL.getDataCount(), addPhoneList.length)) { + if(numbers.length < 1) + { + alert("연락처를 선택해주세요."); return false; - } - if(addPhoneList.length > 0){ - //연락처 추가해 주기 - addPhoneInfo(addPhoneList); - $("#btnLatestAddPhoneClose").trigger("click"); - } - else { - alert("연락처가 없습니다."); - return false; - } + } + + console.log('numbers : ', numbers); + const addrData = processPhoneNumbers(numbers); + + + // 기존 tableL의 데이터를 가져옵니다. + var existingData = tableL.getData(); + + // 데이터 병합 및 중복 제거 + const result = mergeAndValidateData(existingData, addrData); + + + // 테이블 데이터 업데이트 + if (!updateTableData(tableL, result)) return false; + + + $("#btnLatestAddPhoneClose").trigger("click"); + }); //최근전송내역 팝업 선택 취소 버튼 처리 @@ -1291,62 +1280,78 @@ $(document).ready(function (){ //자주보내는 번호 팝업 선택추가 버튼 처리(체크내역 받는사람 리스트로 추가해주기) $(document).on('click', '#bookMarkAddPhone', function (){ - var addPhoneList = []; //신규로 추가할 전화번호 저장변수 + var numbers = []; //신규로 추가할 전화번호 저장변수 $("input:checkbox[name='bookAddrChk']:checked").each(function(index){ var chkPhone = $(this).val(); if(!checkHpNum(chkPhone)){ alert("올바른 전화번호가 아닙니다."); return false; }else{ - addPhoneList.push({phone: removeDash(chkPhone.trim())}); + numbers.push(removeDash(chkPhone.trim())); } }); - if (!validateRowLimit(tableL.getDataCount(), addPhoneList.length)) { - return false; - } - - - if(addPhoneList.length > 0){ - //연락처 추가해 주기 - addPhoneInfo(addPhoneList); - $("#btnLatestAddPhoneClose").trigger("click"); - } - else { + if(numbers.length < 1) + { alert("연락처를 선택해주세요."); return false; - } + } + + console.log('numbers : ', numbers); + const addrData = processPhoneNumbers(numbers); + + + // 기존 tableL의 데이터를 가져옵니다. + var existingData = tableL.getData(); + + // 데이터 병합 및 중복 제거 + const result = mergeAndValidateData(existingData, addrData); + + + // 테이블 데이터 업데이트 + if (!updateTableData(tableL, result)) return false; + + + $("#btnLatestAddPhoneClose").trigger("click"); }); //자주보내는 번호 팝업 전체추가 버튼 처리 $(document).on('click', '#bookMarkAddPhoneAll', function (){ - - var addPhoneList = []; //신규로 추가할 전화번호 저장변수 + var numbers = []; //신규로 추가할 전화번호 저장변수 $("input:checkbox[name='bookAddrChk']").each(function(index){ var chkPhone = $(this).val(); if(!checkHpNum(chkPhone)){ alert("올바른 전화번호가 아닙니다."); return false; }else{ - addPhoneList.push({phone: removeDash(chkPhone.trim())}); + numbers.push(removeDash(chkPhone.trim())); } }); - - if (!validateRowLimit(tableL.getDataCount(), addPhoneList.length)) { + if(numbers.length < 1) + { + alert("연락처를 선택해주세요."); return false; - } + } + + console.log('numbers : ', numbers); + const addrData = processPhoneNumbers(numbers); + + + // 기존 tableL의 데이터를 가져옵니다. + var existingData = tableL.getData(); + + // 데이터 병합 및 중복 제거 + const result = mergeAndValidateData(existingData, addrData); + + + // 테이블 데이터 업데이트 + if (!updateTableData(tableL, result)) return false; + + + $("#btnLatestAddPhoneClose").trigger("click"); - if(addPhoneList.length > 0){ - //연락처 추가해 주기 - addPhoneInfo(addPhoneList); - $("#btnLatestAddPhoneClose").trigger("click"); - } - else { - alert("연락처가 없습니다."); - return false; - } }); //자주보내는 번호 팝업 선택 취소 버튼 처리 @@ -2934,61 +2939,63 @@ function addrToList(){ //주소록 불러오기에서 수신자 리스트 추가해 주기 function addrToList_advc(type){ - var selectedData = tableAddr.getSelectedRows(); - var tableData = []; - - console.log() - - if(selectedData < 1){ - + // 선택된 데이터 또는 전체 데이터 변수 초기화 + let selectedData = type === 'select' ? tableAddr.getSelectedRows() : tableAddr.getData(); + + // 데이터가 비어있으면 경고 후 종료 + if (!selectedData || selectedData.length < 1) { alert("주소록을 선택해 주세요."); return false; - - }else{ // 선택한 Row 데이터 저장해주기 - - - if (!validateRowLimit(tableL.getDataCount(), tableAddr.getSelectedRows())) { - return false; - } - - - // 기존 tableL의 데이터를 가져옵니다. - var existingData = tableL.getData(); - var addrData; - - if(type == 'all'){ - addrData = tableAddr.getData(); - }else{ - addrData = tableAddr.getSelectedData(); - } - - // 기존 데이터와 새로운 데이터를 합칩니다. - var combinedData = existingData.concat(addrData); - - // 합쳐진 데이터를 tableL에 설정합니다. - tableL.setData(combinedData); - - //일괄변환 문구 결제금액 처리 - 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); - } - - $(".closeAddr").trigger("click"); - //주소록 레이어 팝업의 Tabulator 데이터 지워주기 - tableAddr.clearData(); - } + + // 데이터 변환 로직 + const addrData = selectedData.map(row => { + const rowData = type === 'select' ? row.getData() : row; // 'select'는 행 객체에서 데이터 추출 + return { + name: rowData.name, + phone: removeDash(rowData.phone), + rep1: rowData.rep1, + rep2: rowData.rep2, + rep3: rowData.rep3, + rep4: rowData.rep4 + }; + }); + + + // 기존 tableL의 데이터를 가져옵니다. + var existingData = tableL.getData(); + // 기존 데이터와 새로운 데이터를 합칩니다. + var combinedData = existingData.concat(addrData); + + // @ phone을 기준으로 중복 제거 및 갯수 계산 + const result = removeDuplicatesAndCount(combinedData, 'phone'); + + + + // 총 30만건이 넘으면 false + if (!validateRowLimit(result.uniqueCount)) { + return false; + } + + + // 합쳐진 데이터를 tableL에 설정합니다. + tableL.setData(result.uniqueArray); + // 중복데이터 건수 입력 + setRowDupCnt(result.duplicateArray.length); + + + // 미리보기 버튼 활성화 + updateButtons(0); + + var totRows = tableL.getRows().length; + updateTotCnt(totRows); //전체 데이터 갯수 구하기 + totalPriceSum(totRows); + + + $(".closeAddr").trigger("click"); + //주소록 레이어 팝업의 Tabulator 데이터 지워주기 + tableAddr.clearData(); + } @@ -3428,7 +3435,6 @@ function getMjMsgSentListAll(pageNo) { }); } -
-
전체[
전체[