이호영 이호영 2025-06-25
수정완료
@681bdadb7dc2a0abb2c8b13ff9ae74c046f7513c
src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/ft/KakaoFriendsTalkMsgDataView.jsp
--- src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/ft/KakaoFriendsTalkMsgDataView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/kakao/msgdata/ft/KakaoFriendsTalkMsgDataView.jsp
@@ -474,7 +474,7 @@
 	if (!link) {
 		
 
-		if(!confirm("URL먼저 입력을 안하면 이미지에 URL 저장이 안됩니다.\n계속하시겠습니까?")){
+		if(!confirm("먼저 URL을 입력하지 않으면 이미지에 URL이 저장되지 않습니다. 계속하시겠습니까?")){
 			return false;	
 		}
 		
@@ -1551,6 +1551,9 @@
 	
 }
 
+
+
+
 </script>
 
 <!-- 로딩바 -->
@@ -2143,13 +2146,13 @@
 													<div class="btn_popup_wrap">
 														<button type="button" data-tooltip="popup03" class="btnType btnType7 tab2">자주보내는 번호</button>
 													</div>
-													<div class="btn_popup_wrap check_validity_wrap">
+													<!-- <div class="btn_popup_wrap check_validity_wrap">
 														<button type="button" class="btnType btnType7 check_validity">오류 검사<i class="qmMark error_qm"></i></button>
 														<div class="error_hover_cont send_hover_cont">
 															<p>휴대폰 번호 입력 시 해당 휴대폰 번호에 대한 형식이 어긋나거나 휴대폰 번호에 오류가 있는지 등을 검사하는 기능</p>
 															<span>(예시) 010-1234-0001(O) / 010-12345-0001(X)</span>
 														</div>
-													</div>
+													</div> -->
 												</div>
 											</div>
 											<div class="list_bottom clearfix">
src/main/webapp/js/kakao/ft/ftTabulator.js
--- src/main/webapp/js/kakao/ft/ftTabulator.js
+++ src/main/webapp/js/kakao/ft/ftTabulator.js
@@ -20,46 +20,41 @@
 	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,
         columnDefaults:{ // 공통설정
             hozAlign: "center",
             headerHozAlign: "center",
-            editor: "input",
+            editor: false,
             editor: false
         },
 	 	columns:[ //Define Table Columns
             {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){
+		 	{title:"이름", hozAlign:"center", field:"name", validator:["maxLength:12"], cellEdited:function(cell){
 		 	    //cell - cell component
 		 	    fnReplCell();
 		    }},
-		 	{title:"휴대폰", hozAlign:"center", field:"phone", editor:"input", width:100, validator:["required","minLength:10", "maxLength:12"], cellEdited:function(cell){
+		 	{title:"휴대폰", hozAlign:"center", field:"phone", width:100, validator:["required","minLength:10", "maxLength:12"], cellEdited:function(cell){
 		 	    //cell - cell component
 		 	    fnDuplPhone();
 		    }},
-		 	{title:"[*1*]", hozAlign:"center", field:"rep1", editor:"input", minWidth:60, validator:["maxLength:40"], cellEdited:function(cell){
+		 	{title:"[*1*]", hozAlign:"center", field:"rep1", minWidth:60, validator:["maxLength:40"], cellEdited:function(cell){
 		 	    //cell - cell component
 		 	    fnReplCell();
 		    }},
-		 	{title:"[*2*]", hozAlign:"center", field:"rep2", editor:"input", minWidth:60, validator:["maxLength:40"], cellEdited:function(cell){
+		 	{title:"[*2*]", hozAlign:"center", field:"rep2", minWidth:60, validator:["maxLength:40"], cellEdited:function(cell){
 		 	    //cell - cell component
 		 		fnReplCell();
 		    }},
-		 	{title:"[*3*]", hozAlign:"center", field:"rep3", editor:"input", minWidth:60, validator:["maxLength:40"], cellEdited:function(cell){
+		 	{title:"[*3*]", hozAlign:"center", field:"rep3", minWidth:60, validator:["maxLength:40"], cellEdited:function(cell){
 		 	    //cell - cell component
 		 		fnReplCell();
 		    }},
-		 	{title:"[*4*]", hozAlign:"center", field:"rep4", editor:"input", minWidth:60, validator:["maxLength:40"], cellEdited:function(cell){
+		 	{title:"[*4*]", hozAlign:"center", field:"rep4", minWidth:60, validator:["maxLength:40"], cellEdited:function(cell){
 		 	    //cell - cell component
 		 		fnReplCell();
 		    }},
@@ -556,6 +551,207 @@
 		
 	});
 	
+	
+	
+
+
+	//받는사람 목록에 복사/붙여넣기 기능 처리
+	$('.callList_box').on('paste', function (e) {
+		console.log(' :: callList _box :: ');
+		
+		var element = e.originalEvent.clipboardData.getData('text'); // 클립보드에 복사한 데이터 가져오기
+		
+		var elmSplit= [];
+		  
+		elmSplit = element.split("\n");
+		
+		var elmLen = elmSplit.length;
+		
+		  
+		if(elmLen < 0){
+			  
+			alert("붙여넣을 연락처를 복사해주세요.");
+			return false;
+			  
+		}else{
+			tableErrorData.length = 0;	// 오류 번호 배열 초기화
+			
+			var splitData = [];
+			var realPhone = [];
+			for(var i=0; i < elmLen; i++){
+				  
+				var splitStr = elmSplit[i]; 
+				var tabData = [];
+				var comData = [];
+				
+				if(splitStr.indexOf('\t') != -1){
+					splitData = splitStr.split('\t'); //탭 구분으로 데이터 분할
+				}else if(splitStr.indexOf(',') != -1){
+					splitData = splitStr.split(','); //콤마 구분으로 데이터 분할
+				}else{
+					splitData = splitStr.split(' ');
+				}
+				
+				
+				if(splitData.length == 0){// 데이터가 없는경우
+					
+					alert("탭으로 구분하여 데이터를 복사해 주세요.");
+				  	return false;
+				  
+				}else if(splitData.length == 1){// 데이터가 탭으로 구분이 없는 경우
+					
+					for(var j=0; j < splitData.length; j++){
+						if(checkHpNum(splitData[j].trim())){//핸드폰 양식이 맞는지 확인
+							//배열 끝에 데이터 추가해 주기
+							realPhone.push({phone: removeDash(splitData[j].trim()), name: ""});
+						}
+						else {
+							if (splitData[j].trim() != '' && splitData[j].trim() != null && splitData[j].trim() != undefined) {
+								tableErrorData.push(splitData[j].trim());
+							}
+						}
+					}
+				
+				}else{//데이터가 탭으로 구분되어 이름, 연락처로 구분된 경우
+					
+					var phone = "";	//핸드폰번호
+					var name = "";	//이름
+					var rep1 = "";	//치환문자1
+					var rep2 = "";	//치환문자2
+					var rep3 = "";	//치환문자3
+					var rep4 = "";	//치환문자4
+					var isPhoneValid = false;
+					for(var j=0; j < splitData.length; j++){
+
+						if(j == 0){
+							
+							name = splitData[j].trim();
+							
+						}
+						
+						if(j == 1){
+							
+							if(checkHpNum(splitData[j].trim())){//핸드폰 양식이 맞는지 확인
+								phone = removeDash(splitData[j].trim());
+								isPhoneValid = true;
+							}else{
+								if (splitData[j].trim() != '' && splitData[j].trim() != null && splitData[j].trim() != undefined) {
+									tableErrorData.push(splitData[j].trim());
+								}
+							}
+							
+						}
+						
+						if(j == 2){	//치환문자1
+							
+							rep1 = splitData[j].trim();
+							
+						}
+						
+						if(j == 3){	//치환문자2
+							
+							rep2 = splitData[j].trim();
+							
+						}
+						
+						if(j == 4){	//치환문자3
+							
+							rep3 = splitData[j].trim();
+							
+						}
+						
+						if(j == 5){	//치환문자4
+							
+							rep4 = splitData[j].trim();
+							
+						}
+						
+					}
+					
+					if (isPhoneValid == true) {
+						//배열 끝에 데이터 추가해 주기
+						realPhone.push({phone: phone, name: name, rep1 : rep1, rep2 : rep2, rep3 : rep3, rep4 : rep4 });
+					}
+					
+				}//else end
+				  
+			}
+			
+			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.trim()) , 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,  });
+				
+				}
+			
+			}
+			
+			if(realPhone.length > 0){
+				
+				for(var j=0; j < realPhone.length; j++){
+					
+					tableData.push({phone: removeDash(realPhone[j].phone.trim()) , name: realPhone[j].name, rep1: realPhone[j].rep1, rep2: realPhone[j].rep2, rep3: realPhone[j].rep3, rep4: realPhone[j].rep4});
+				
+				}
+			
+			}
+			
+			//tableData.push(realPhone);
+				
+			//중복 연락처 1개만 남기고 삭제하기
+			var removeDuplPhone = dupliPhoneData(tableData);
+			  
+			//수신자 리스트에 전화번호 추가해주기
+			//tableL.addData(removeDuplPhone);
+			tableL.setData(removeDuplPhone);
+			
+			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_advc();
+			}else{
+				//결제 금액 구하기
+			    totalPriceSum(totRows);
+			}
+
+			if (tableErrorData.length > 0) {
+				alert("올바르지 않은 휴대폰 번호가 "+ tableErrorData.length +" 건 있습니다.");
+			}			
+			
+
+			// 미리보기 버튼 활성화
+			updateButtons(0);
+			
+		}
+
+	});
+
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
 });
 
 var tableErrorData = [];
@@ -566,9 +762,9 @@
 * 토탈 카운트 화면에 노출
 * 변수 없는 리스트만 체크
 */ 
-function updateTotCnt(){
+function updateTotCnt(cnt){
 	
-	$("#rowTotCnt").text($('#wrap01_body .list_body').length);
+	$("#rowTotCnt").text(cnt);
 
 }
 
@@ -927,3 +1123,8 @@
 	}
 	
 });
+
+
+
+
+
Add a comment
List