이호영 이호영 2024-08-19
주소록관리 > 클립보드 입력 진행중
@3e6ca8d7dddc86c99c9e5d952d7f3462461b5abd
src/main/webapp/WEB-INF/jsp/web/addr/AddrList.jsp
--- src/main/webapp/WEB-INF/jsp/web/addr/AddrList.jsp
+++ src/main/webapp/WEB-INF/jsp/web/addr/AddrList.jsp
@@ -333,6 +333,8 @@
 		setSenderList_advc();
 	}
 }
+
+// 주소록 등록 advc
 function setSenderList_advc(){
 
 	// tab에 해당하는 타블레이터 가져오기
src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforClipboard.jsp
--- src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforClipboard.jsp
+++ src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforClipboard.jsp
@@ -159,11 +159,6 @@
 $(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 @@
 	});
 
 
-	// 받는사람 선택삭제 버튼 처리해주기
-	$('.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 @@
 	            
 	            //총 받는사람 수 계산
 	            totRows = $tableClip.getRows().length;
+	            console.log('totRows : ', totRows);
 	            updateTotCnt(totRows);
 	            
 	          	if(errCnt > 0){
@@ -249,7 +219,15 @@
 	    }
 	});
 	
+	//전체 데이터 갯수 구하는 함수
+	function updateTotCnt(data){
 
+		var tabulNm = fn_utils_getTabulatorNm();
+		var tabluC = '.'+tabulNm
+		
+		$(tabluC+" #rowTotCnt").text(data);
+
+	}
 
     
     
@@ -382,6 +360,84 @@
 	});	
 	
 	
+	
+	
+	
+
+	
+	//받는 사람 리스트 영역에 클립보드 데이터 가져와보기 
+	// 붙여넣기 기능
+	$('#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 @@
     $("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
+ };
+}
 
 
 // 중복 연락처
src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforExcel.jsp
--- src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforExcel.jsp
+++ src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforExcel.jsp
@@ -80,52 +80,14 @@
     $("#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 @@
 
 
 
-// 데이터 객체를 생성하는 함수
-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 @@
     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() : ""; // 각 컬럼에 대해 기본값을 설정
src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforSelf.jsp
--- src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforSelf.jsp
+++ src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforSelf.jsp
@@ -187,48 +187,6 @@
     });
 
 
-	//받는사람 전체삭제 버튼 처리
-	$('.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(){
 		//기존 연락처 모두 불러오기
src/main/webapp/WEB-INF/jsp/web/msgdata/include/msgDataIncludeExcel.jsp
--- src/main/webapp/WEB-INF/jsp/web/msgdata/include/msgDataIncludeExcel.jsp
+++ src/main/webapp/WEB-INF/jsp/web/msgdata/include/msgDataIncludeExcel.jsp
@@ -54,12 +54,11 @@
 
     $("#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 @@
 		//  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);
 		}
 	});
src/main/webapp/js/web/addr/event.js
--- src/main/webapp/js/web/addr/event.js
+++ src/main/webapp/js/web/addr/event.js
@@ -105,6 +105,57 @@
 		    $(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 @@
 			//  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);
 			}
 		});
src/main/webapp/js/web/addr/init.js
--- src/main/webapp/js/web/addr/init.js
+++ src/main/webapp/js/web/addr/init.js
@@ -71,30 +71,45 @@
 		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"]},
Add a comment
List