diff --git a/src/main/webapp/WEB-INF/jsp/web/addr/AddrList.jsp b/src/main/webapp/WEB-INF/jsp/web/addr/AddrList.jsp index c939dfd5..c655ccb0 100644 --- a/src/main/webapp/WEB-INF/jsp/web/addr/AddrList.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/addr/AddrList.jsp @@ -333,6 +333,8 @@ function SetAddrMassSave(){ setSenderList_advc(); } } + +// 주소록 등록 advc function setSenderList_advc(){ // tab에 해당하는 타블레이터 가져오기 diff --git a/src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforClipboard.jsp b/src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforClipboard.jsp index a3af35c1..737f9552 100644 --- a/src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforClipboard.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforClipboard.jsp @@ -159,11 +159,6 @@ function linkPage(pageNo){ $(document).ready(function(){ //Tabulator AJAX Data Loading - // 파일 선택 버튼 클릭 이벤트 - $("#file-load-trigger").on("click", function() { - $("#excelFile").click(); - }); - //받는사람 전체삭제 버튼 처리 $('.all_del').click(function(){ var data = $tableClip.getRows(); @@ -180,33 +175,7 @@ $(document).ready(function(){ }); - // 받는사람 선택삭제 버튼 처리해주기 - $('.select_del').click(function(){ - $("#rowDupCnt").text(0); //중복건수 수정 - dupliPhoneDataRealList.length = 0; // 중복 휴대폰번호 초기화 - - if($tableClip == null || $tableClip == ""){ - alert("받는사람을 추가해 주세요."); - return false; - } - - var selectedData = $tableClip.getSelectedRows(); - - if(selectedData == "" || selectedData == null){ - alert("받는 사람을 선택해 주세요."); - return false; - }else{ // 선택한 Row 데이터 삭제하기 - for(var i=0; i < selectedData.length; i++){ - selectedData[i].delete(); - } - } - - totRows = $tableClip.getRows().length; - - updateTotCnt(totRows); - }); - - //받는사람 오류번호 삭제 처리해주기 +// 받는사람 오류번호 삭제 처리해주기 $('.chkVali_del').click(function(){ //기존 연락처 모두 불러오기 var data = $tableClip.getRows(); @@ -234,6 +203,7 @@ $(document).ready(function(){ //총 받는사람 수 계산 totRows = $tableClip.getRows().length; + console.log('totRows : ', totRows); updateTotCnt(totRows); if(errCnt > 0){ @@ -249,7 +219,15 @@ $(document).ready(function(){ } }); + //전체 데이터 갯수 구하는 함수 + function updateTotCnt(data){ + var tabulNm = fn_utils_getTabulatorNm(); + var tabluC = '.'+tabulNm + + $(tabluC+" #rowTotCnt").text(data); + + } @@ -382,6 +360,84 @@ $(document).ready(function(){ }); + + + + + + //받는 사람 리스트 영역에 클립보드 데이터 가져와보기 + // 붙여넣기 기능 + $('#tabulator_clip').on('paste', function (e) { + var element = e.originalEvent.clipboardData.getData('text'); // 클립보드에 복사한 데이터 가져오기 + var elmSplit = element.split("\n"); + var elmLen = elmSplit.length; + console.log('elmSplit : ', elmSplit); + + if(elmLen < 0){ + alert("붙여넣을 연락처를 복사해주세요."); + return false; + } + if (elmLen > 20001) { + alert("2만줄 이상의 업로드는 데이터 부하로 업로드 할수 없습니다."); + return false; + } + + tableErrorData.length = 0; // 오류 번호 배열 초기화 + + var realPhone = []; + + for(var i = 0; i < elmLen; i++){ + var splitStr = elmSplit[i]; + var tabData = splitStr.split("\t"); // 탭 구분으로 데이터 분할 + var comData = splitStr.split(","); // 콤마 구분으로 데이터 분할 + var splitData = (tabData.length >= 2) ? tabData : comData; + + if(splitData.length == 0){ // 데이터가 없는 경우 + alert("탭으로 구분하여 데이터를 복사해 주세요."); + return false; + } + + if(splitData.length == 1){ + realPhone.push({ A: splitData[0].trim() }); + } else { + let keys = ['A', 'B', 'C', 'D', 'E', 'F', 'G']; + let data = {}; + splitData.forEach((item, index) => { + data[keys[index]] = item.trim(); + }); + realPhone.push(data); + } + } + console.log('realPhone : ', realPhone); + + var recTableData = $tableClip.getRows().map(row => createDataObject(row.getData())); + console.log('recTableData : ', recTableData); + var tableData = recTableData.concat(realPhone); + + // 중복 연락처 제거 작업 (필요에 따라 적용) + // var removeDuplPhone = dupliPhoneData(tableData); + var removeDuplPhone = tableData; // 현재 중복 제거하지 않음 + + // 기존 데이터를 유지하고 새 데이터를 추가한 결과를 테이블에 반영 + $tableClip.setData(removeDuplPhone); + + var totRows = $tableClip.getRows().length; + updateTotCnt(totRows); // 전체 데이터 갯수 구하기 + + if (tableErrorData.length > 0) { + alert("데이터를 확인해 주세요."); + } + }); + + + + + + + + + + }); @@ -396,6 +452,19 @@ $(document).on("click", "#duplicationChkAll", function(e) { $("input[name=addrCheck]:checkbox").prop("checked", isChecked); }); +//데이터 객체를 생성하는 함수 +function createDataObject(data) { + console.log('createDataObject : ', data); + return { + A: data.A, + B: data.B, + C: data.C, + D: data.D, + E: data.E, + F: data.F, + G: data.G + }; +} // 중복 연락처 diff --git a/src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforExcel.jsp b/src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforExcel.jsp index cb4b56c6..69789caf 100644 --- a/src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforExcel.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforExcel.jsp @@ -80,52 +80,14 @@ $(document).ready(function(){ $("#excelFile").on("change", function(event) { var fileInfo = event.target.files; if(fileInfo.length > 0){ -// fn_loadAddActive(); excelFileChange(fileInfo[0]); - } + } else { + fn_loadRemoveActive(); // 파일이 선택되지 않은 경우 로딩 상태 제거 + setTimeout(() => { $(this).val(''); }, 0); // 파일 선택 초기화 + } }); - - - //받는사람 전체삭제 버튼 처리 - $('.all_del').click(function(){ - var data = $tableExcel.getRows(); - if(data == null || data == ""){ - alert("받는사람을 추가해 주세요."); - return false; - }else{ - $tableExcel.clearData(); - $("#rowTotCnt").text(0); //총건수 수정 - $("#rowDupCnt").text(0); //중복건수 수정 - dupliPhoneDataRealList.length = 0; // 중복 휴대폰번호 초기화 - } - }); - // 받는사람 선택삭제 버튼 처리해주기 - $('.select_del').click(function(){ - $("#rowDupCnt").text(0); //중복건수 수정 - dupliPhoneDataRealList.length = 0; // 중복 휴대폰번호 초기화 - - if($tableExcel == null || $tableExcel == ""){ - alert("받는사람을 추가해 주세요."); - return false; - } - - var selectedData = $tableExcel.getSelectedRows(); - - if(selectedData == "" || selectedData == null){ - alert("받는 사람을 선택해 주세요."); - return false; - }else{ // 선택한 Row 데이터 삭제하기 - for(var i=0; i < selectedData.length; i++){ - selectedData[i].delete(); - } - } - - totRows = $tableExcel.getRows().length; - - updateTotCnt(totRows); - }); //받는사람 오류번호 삭제 처리해주기 $('.chkVali_del').click(function(){ @@ -315,18 +277,6 @@ $(document).ready(function(){ -// 데이터 객체를 생성하는 함수 -function createDataObject(data) { - return { - A: data.A, - B: data.B, - C: data.C, - D: data.D, - E: data.E, - F: data.F, - G: data.G - }; -} //############################################################################################# //파일업로드 드래그앤 드롭 @@ -400,8 +350,8 @@ function processExcelData(data) { var totalRows = data.length - 2; // 전체 데이터 수 (1, 2행 제외) - // 3번째 행부터 입력 - data.slice(2).forEach((row, index) => { + // 1번째 행부터 입력 + data.forEach((row, index) => { var rowData = {}; keys.forEach((key, idx) => { // index 변수명 변경 (내부와 외부에서 사용되므로 충돌 방지) rowData[key] = row[idx] ? row[idx].trim() : ""; // 각 컬럼에 대해 기본값을 설정 diff --git a/src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforSelf.jsp b/src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforSelf.jsp index e48f07e7..47367e1e 100644 --- a/src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforSelf.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforSelf.jsp @@ -187,48 +187,6 @@ $(document).ready(function(){ }); - //받는사람 전체삭제 버튼 처리 - $('.all_del').click(function(){ - var data = $tableClip.getRows(); - if(data == null || data == ""){ - alert("받는사람을 추가해 주세요."); - return false; - }else{ - $tableClip.clearData(); - $("#rowTotCnt").text(0); //총건수 수정 - $("#rowDupCnt").text(0); //중복건수 수정 - dupliPhoneDataRealList.length = 0; // 중복 휴대폰번호 초기화 - } - - }); - - - // 받는사람 선택삭제 버튼 처리해주기 - $('.select_del').click(function(){ - $("#rowDupCnt").text(0); //중복건수 수정 - dupliPhoneDataRealList.length = 0; // 중복 휴대폰번호 초기화 - - if($tableClip == null || $tableClip == ""){ - alert("받는사람을 추가해 주세요."); - return false; - } - - var selectedData = $tableClip.getSelectedRows(); - - if(selectedData == "" || selectedData == null){ - alert("받는 사람을 선택해 주세요."); - return false; - }else{ // 선택한 Row 데이터 삭제하기 - for(var i=0; i < selectedData.length; i++){ - selectedData[i].delete(); - } - } - - totRows = $tableClip.getRows().length; - - updateTotCnt(totRows); - }); - //받는사람 오류번호 삭제 처리해주기 $('.chkVali_del').click(function(){ //기존 연락처 모두 불러오기 diff --git a/src/main/webapp/WEB-INF/jsp/web/msgdata/include/msgDataIncludeExcel.jsp b/src/main/webapp/WEB-INF/jsp/web/msgdata/include/msgDataIncludeExcel.jsp index 63e9fe0c..c9304f2b 100644 --- a/src/main/webapp/WEB-INF/jsp/web/msgdata/include/msgDataIncludeExcel.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/msgdata/include/msgDataIncludeExcel.jsp @@ -54,12 +54,11 @@ $(document).ready(function(){ $("#excelFile").on("change", function(event) { var fileInfo = event.target.files; - console.log('fileInfo.length : ', fileInfo.length); if(fileInfo.length > 0){ excelFileChange(fileInfo[0]); } else { fn_loadRemoveActive(); // 파일이 선택되지 않은 경우 로딩 상태 제거 - $(this).val(''); // 파일 선택 초기화 + setTimeout(() => { $(this).val(''); }, 0); // 파일 선택 초기화 } }); @@ -407,10 +406,28 @@ function updateTableFields($objTabul) { // 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"]}); + columns.push({ + title: field + , field: selectedField + , hozAlign: "center" + , headerHozAlign: "center" +// , editor: "input" + , editor: false + , 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"]}); + columns.push({ + title: field + , field: field + , hozAlign: "center" + , headerHozAlign: "center" + , editor: false +// , editor: "input" + , width: 125 + , validator: ["maxLength:100", "string"] + }); fieldMapping.push(field); } }); diff --git a/src/main/webapp/js/web/addr/event.js b/src/main/webapp/js/web/addr/event.js index 3a6f47cb..496f0a5e 100644 --- a/src/main/webapp/js/web/addr/event.js +++ b/src/main/webapp/js/web/addr/event.js @@ -105,6 +105,57 @@ $(document).ready(function(){ $(tabluC+" #rowTotCnt").text(rowsToKeep.length); } + //받는사람 전체삭제 버튼 처리 + $('.all_del').click(function(){ + + var tabulNm = fn_utils_getTabulatorNm(); + var tabluC = '.'+tabulNm + + var $objTabul = fn_utils_getTabulator(); + + var data = $objTabul.getRows(); + $objTabul.clearData(); + $(tabluC+" #rowTotCnt").text(0); //총건수 수정 + $(tabluC+" #rowDupCnt").text(0); //중복건수 수정 + dupliPhoneDataRealList.length = 0; // 중복 휴대폰번호 초기화 + }); + + // 받는사람 선택삭제 버튼 처리해주기 + $('.select_del').click(function(){ + + var tabulNm = fn_utils_getTabulatorNm(); + var tabluC = '.'+tabulNm + + var $objTabul = fn_utils_getTabulator(); + + $(tabluC+" #rowDupCnt").text(0); //중복건수 수정 + dupliPhoneDataRealList.length = 0; // 중복 휴대폰번호 초기화 + var selectedData = $objTabul.getSelectedRows(); + + if(selectedData == "" || selectedData == null){ + alert("삭제할 데이터를 선택해 주세요."); + return false; + }else{ // 선택한 Row 데이터 삭제하기 + for(var i=0; i < selectedData.length; i++){ + selectedData[i].delete(); + } + } + + totRows = $objTabul.getRows().length; + + updateTotCnt(totRows); + }); + + //전체 데이터 갯수 구하는 함수 + function updateTotCnt(data){ + + var tabulNm = fn_utils_getTabulatorNm(); + var tabluC = '.'+tabulNm + + $(tabluC+" #rowTotCnt").text(data); + + } + /* * 타이틀 select 선택할때마다 실행해서 * 데이터테이블 필드값 수정 @@ -124,10 +175,28 @@ $(document).ready(function(){ // 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"]}); + columns.push({ + title: field + , field: selectedField + , hozAlign: "center" + , headerHozAlign: "center" +// , editor: "input" + , editor: false + , 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"]}); + columns.push({ + title: field + , field: field + , hozAlign: "center" + , headerHozAlign: "center" +// , editor: "input" + , editor: false + , width: 125 + , validator: ["maxLength:100", "string"] + }); fieldMapping.push(field); } }); diff --git a/src/main/webapp/js/web/addr/init.js b/src/main/webapp/js/web/addr/init.js index 1e3b337c..de32eba8 100644 --- a/src/main/webapp/js/web/addr/init.js +++ b/src/main/webapp/js/web/addr/init.js @@ -71,30 +71,45 @@ $(document).ready(function(){ validationMode:"highlight", placeholder:"복사(Ctrl+C)한 내용을 여기에 붙여넣기(Ctrl+V) 해주세요.", //fit columns to width of table (optional) clipboard:true, // 클립보드 기능 활성화 - clipboardPasteAction:"insert", // insert, update, replace + clipboardPasteAction:"update", // insert, update, replace clipboardPasteParser: function(clipboard) { - - // clipboard 기능 - var rows = clipboard.split('\n').map(row => row.split(/[\t,]+/).map(cell => cell.trim())); - console.log('rows : ', rows); - var tableData = rows.map(row => { - return { - A: row[0] || "", - B: row[1] || "", - C: row[2] || "", - D: row[3] || "", - E: row[4] || "", - F: row[5] || "", - G: row[6] || "" - }; - }); - return tableData; - }, + /*console.log('clipboard: ', clipboard); // 클립보드의 원본 내용 확인 + + var rows = clipboard.split('\n').map(row => { + var cells = row.split(/[\t,]+/).map(cell => cell.trim()); + return cells; + }).filter(row => Array.isArray(row) && row.some(cell => cell !== "")); + + console.log('파싱된 rows: ', rows); // 파싱된 행 데이터 확인 + + var tableData = rows.map(row => { + return { + A: row[0] || "", + B: row[1] || "", + C: row[2] || "", + D: row[3] || "", + E: row[4] || "", + F: row[5] || "", + G: row[6] || "" + }; + }); + + console.log('새로 추가될 데이터: ', tableData); // 추가될 데이터 확인 + + // 기존 테이블 데이터를 가져와서 병합 + var existingData = $tableClip.getData(); // 기존 데이터를 가져옴 + console.log('기존 : ', existingData); + var combinedData = existingData.concat(tableData); // 기존 데이터에 새로운 데이터 추가 + console.log('병합 : ', combinedData); + + return combinedData; // 병합된 데이터를 반환하여 기존 데이터 아래에 추가되도록 함 +*/ }, columns: [ {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"]}, + {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"]},