이호영 이호영 2024-08-14
문자전송 > 엑셀불러오기 완료 ( TODO:오류번호검사, 오류검사, 설명문구, 샘플파일 등등 은 cs팀에서 결정하고 알려준다합니다.)
알려준다합니다.)
@9079e3fe7b3d7eefa42fdb23606f702b68b2483b
src/main/webapp/WEB-INF/jsp/web/addr/AddrListAjax.jsp
--- src/main/webapp/WEB-INF/jsp/web/addr/AddrListAjax.jsp
+++ src/main/webapp/WEB-INF/jsp/web/addr/AddrListAjax.jsp
@@ -1030,7 +1030,6 @@
 	</div>		
 </div>
 <!-- // 중복전화번호 팝업 -->
- -->
 <form name="addrMemoForm" name="addrMemoForm" method="post">
 	<input type="hidden" name="addrCheck" />
 	<input type="hidden" name="addrComment" />
src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataSMLView.jsp
--- src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataSMLView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataSMLView.jsp
@@ -32,7 +32,6 @@
 
 		
 		var addrData = tableAddr.getData().map((row, index) => ({
-		    no: index+1,
 		    name: row.addrName,
 		    phone: removeDash(row.addrPhone),
 		    rep1: row.addrRep1,
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,13 +54,44 @@
 
     $("#excelFile").on("change", function(event) {
     	var fileInfo =  event.target.files;
-    	if(fileInfo.length > 0){
-        	excelFileChange(fileInfo[0]);
-    	}
+    	console.log('fileInfo.length : ', fileInfo.length);
+        if(fileInfo.length > 0){
+            excelFileChange(fileInfo[0]);
+        } else {
+            fn_loadRemoveActive(); // 파일이 선택되지 않은 경우 로딩 상태 제거
+            $(this).val('');  // 파일 선택 초기화
+        }
     });
 	
 
 
+    $(document).on('click', '#btnAddrMassClose', function() {
+    	// 대량등록 닫기
+    	setAddrMassClose();
+    });
+    
+
+    $(document).on('click', '#closeBtn', function() {
+    	// 대량등록 닫기
+    	setAddrMassClose();
+    });
+    
+
+ // 엑셀등록 닫기
+	function setAddrMassClose() {
+		$tableExcel.clearData();
+		$("#excelRowTotCnt").text(0); //총건수 수정
+		$("#excelRowDupCnt").text(0); //중복건수 수정
+		dupliPhoneDataRealList.length = 0;	// 중복 휴대폰번호 초기화
+		addrMassDupliSaveList = null;
+		
+		$("#btnAddrMassDupli").hide();
+		$('#tableExcelDupliBtn').hide();
+// 		$("#btnAddrMassSaveDupli").hide();
+// 		$('#closeBtn').click();
+		
+	}
+    
   //#############################################################################################
   //파일업로드 드래그앤 드롭
   //#############################################################################################
@@ -75,7 +106,7 @@
     e.preventDefault();
   });
   $(document).on("drop",".upload_area",function(e){
-//   	fn_loadAddActive();
+  	fn_loadAddActive();
   	e.preventDefault();
   	var files = e.originalEvent.dataTransfer.files;
   	excelFileChange(files[0]);
@@ -103,95 +134,157 @@
 	//타이틀 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);
+		setTimeout(() => { // 파일 읽기 완료 후 실행되도록 함
+			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();
 
-
-		// 
-		updateTableFields($tableExcel);
-		
-		// 필드가 휴대폰이면 열 중복체크
-		if($(this).val() == 'addrPhoneNo'){
-			fn_phoneDupl($tableExcel);
-		}
-		fn_loadRemoveActive();
-		
+		}, 0); // 지연 없이 즉시 실행되도록 0ms 지연을 설정
 	});
 	
   
 
-		// 받는사람 선택삭제 버튼 처리해주기
-		$('#in_select_del').click(function(){
+	// 받는사람 선택삭제 버튼 처리해주기
+	$('#in_select_del').click(function(){
+		
+		if($tableExcel == null || $tableExcel == ""){
 			
-			if(tableL == null || tableL == ""){
+			alert("받는사람을 추가해 주세요.");
+			return false;
+		
+		}
+		
+		var selectedData = $tableExcel.getSelectedRows();
+		
+		if(selectedData == "" || selectedData == null){
+			
+			alert("삭제할 연락처를 선택해주세요.");
+			return false;
+		
+		}else{ // 선택한 Row 데이터 삭제하기
+			
+			if(confirm("선택하신 받는 사람을 삭제하시겠습니까?")){
 				
-				alert("받는사람을 추가해 주세요.");
-				return false;
-			
+				// 선택 데이터 삭제
+			    selectedData.forEach(row => row.delete());
+			    
+			    
+				totRows = $tableExcel.getRows().length;
+			    $("#excelRowTotCnt").text(totRows);
+			    
+				
 			}
-			
-			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);
-					}
-					
-				}
 
-			}
+		}
+		
+	});
+
+	// 추가버튼
+	$('#btnAddrMassReg').click(function(){
+		
+		if($tableExcel.getData().length < 1){
+			alert("한 개 이상의 연락처를 입력하세요");
+			return false;
+		}
+//	 	else if (selectedData.length > 20000) {
+//	 		alert("2만줄 이상의 업로드는 데이터 부하로 업로드 할수 없습니다.");
+//	 		return false;
+//	 	}
+		
+		
+		// tableExcel 그룹의 select 요소들을 확인
+//	 	var isPhoneSelected = false;
+//	 	var isNameSelected = false;
+		var columns = $tableExcel.getColumns();
+		var isAddrPhoneNoSelected = columns.some(column => column.getField() === 'addrPhoneNo');
+
+		if (!isAddrPhoneNoSelected) {
+//			    isPhoneSelected = true;
+			alert('휴대폰이 선택되지 않았습니다.');
+			return false;
+
+		} 
+		
+		console.log('$tableExcel : ' ,$tableExcel);
+		var addrData = $tableExcel.getData().map((row, index) => ({
+		    name: row.addrNm,
+		    phone: removeDash(row.addrPhoneNo),
+		    rep1: row.addrInfo1,
+		    rep2: row.addrInfo2,
+		    rep3: row.addrInfo3,
+		    rep4: row.addrInfo4,
+		}));
+
+		tableL.setData(addrData);
+		
+		var totRows = tableL.getRows().length; 
+		updateTotCnt(totRows); //전체 데이터 갯수 구하기
+		console.log('totRows : ', 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);
+			
+		} 
+		
+		setAddrMassClose();
+	});
+		
   
-  
-  
+
+	//받는사람 전체삭제 버튼 처리
+	$('#allDel').click(function(){
+		var data = $tableExcel.getRows();	
+		$tableExcel.clearData();
+		$("#excelRowTotCnt").text(0); //총건수 수정
+		$("#excelRowDupCnt").text(0); //중복건수 수정
+		dupliPhoneDataRealList.length = 0;	// 중복 휴대폰번호 초기화
+		
+		// select box 초기화
+		$('.field-selector').each(function() { $(this).val(''); });
+		
+	});
+	
   
   
 });
@@ -285,8 +378,8 @@
 	]);
 
 	$tableExcel.setData(tableData).then(() => {
-		// rowTotCnt 업데이트
-		document.getElementById("rowTotCnt").innerText = tableData.length;
+		// excelRowTotCnt 업데이트
+		document.getElementById("excelRowTotCnt").innerText = tableData.length;
 	});
 	
 	fn_loadRemoveActive();
@@ -366,7 +459,7 @@
 	    	alert('휴대폰 형식에 맞지 않는 데이터가 있습니다.\n 확인해 주세요');
 	    }
 
-	    $("#rowDupCnt").text(dupliPhoneDataRealList.length);
+	    $("#excelRowDupCnt").text(dupliPhoneDataRealList.length);
 
 	    if (dupliPhoneDataRealList.length > 0) {
 //	        alert("중복된 휴대폰 번호가 있습니다: \n" + duplicatePhones.join(", "));
@@ -380,14 +473,45 @@
 
 	    // 고유한 데이터만 남기고 테이블 업데이트
 	    $objTabul.setData(rowsToKeep);
-	    $("#rowTotCnt").text(rowsToKeep.length);
+	    $("#excelRowTotCnt").text(rowsToKeep.length);
 	}
 
 
+function fn_dupliPopupShow(){
+
+	$("#tableExcelDupliBtn").show();
+}
+
+function makeAddrMassDupliPop(dupliPhoneDataRealList) {
+	var sHtml = "";
+	sHtml += "<div class='' style='overflow-x:auto; height:350px;'>";
+	sHtml += "<table class='tType4'>";
+	sHtml += "		<colgroup>";
+	sHtml += "			<col style='width:auto' />";
+	sHtml += "		</colgroup>";
+	sHtml += "		<thead>";
+	sHtml += "			<tr>";
+	sHtml += "				<th>중복 휴대폰번호 (" + numberWithCommas(dupliPhoneDataRealList.length) + "개)</th>";
+	sHtml += "			</tr>";
+	sHtml += "		</thead>";
+	sHtml += "		<tbody>";
+	for (var i = 0; i < dupliPhoneDataRealList.length; i++) {
+		sHtml += "		<tr>";
+		sHtml += "			<td>" + dupliPhoneDataRealList[i] + "</td>";
+		sHtml += "		</tr>";
+	}
+	sHtml += "		</tbody>";
+	sHtml += "	</table>";
+	sHtml += "	</div>";
+
+	$("#addrMassDupli_layer").html(sHtml);
+	fn_dupliPopupShow();
+	
+}
 
 
 function fn_dupliPopupShow(){
-	$('#tableExcelDupliBtn').show()
+	$('#tableExcelDupliBtn').show();
 }
 
 //한국의 핸드폰 번호 형식 검사 함수
@@ -398,6 +522,9 @@
     var valid = /^(010|011|016|017|018|019)\d{7,8}$/.test(cleaned);
     return valid;
 }
+
+
+
 
 // 상단 설명 더보기 
 function popMore(e){
@@ -414,9 +541,26 @@
 
 </script>
 
+<!-- 중복전화번호 data-tooltip:addrMassDupli_layer -->
+<div class="tooltip-wrap">
+	<div class="popup-com addrMassDupli_layer" tabindex="0" data-tooltip-con="addrMassDupli_layer" data-focus="addrMassDupli_layer" data-focus-prev="addrMassDupli_layer-close" style="width: 270px; height: 500px;">
+		<div class="popup_heading">
+			<p>중복 휴대폰번호</p>
+			<button type="button" class="tooltip-close" data-focus="addrMassDupli_layer-close" onclick="setAddrDupliClose();"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button>
+		</div>
+		<div class="layer_in" style="padding:20px 0px;" id="addrMassDupli_layer">
+		</div>
+		
+		<div class="popup_btn_wrap2" style="margin-top: 0px;">
+			<button type="button" class="tooltip-close" data-focus="addrMassDupli_layer-close" data-focus-next="addrMassDupli_layer">닫기</button>
+		</div>		
+		
+	</div>		
+</div>
+<!--// 중복전화번호 팝업 -->
 				<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>
+					<p>엑셀 불러오기</p>
+					<button type="button" class="tooltip-close" id="closeBtn" 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"> -->
@@ -459,7 +603,7 @@
 		                    </colgroup>
 		                    <tbody>
 		                        <tr>
-		                            <th>그룹 선택</th>
+		                            <!-- <th>그룹 선택</th>
 		                            <td>
 		                                <label for="" class="label">그룹 선택</label>
 		                                <select id="addrGrpIdInfo" name="addrGrpIdInfo">
@@ -468,17 +612,25 @@
 	                                    <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> -->
+		                            <td colspan="2" style="padding:20px 0;">
+		                            	<div class="file_upload_wrap" style="width:100%;display:flex;">
+						                	<div class="file_add upload_area">
+												<p><img src="/publish/images/content/file_add.png" alt="파일 붙여넣기">마우스로 엑셀, TXT파일을 여기에 끌어다 놓으세요</p>
+											</div>
+											<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>
+						                </div>
 		                            </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>건
+							총 <span class="c_e40000 fwBold" id="excelRowTotCnt">0</span>건 / 중복 <span class="c_002c9a fwBold" id="excelRowDupCnt">0</span>건
 							&nbsp; 
 							<button type="button" class="btnType btnType6" data-tooltip="addrMassDupli_layer" id="tableExcelDupliBtn">중복번호</button>
 <!-- 							&nbsp; -->
@@ -594,7 +746,7 @@
 					<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="allDel"><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>
@@ -618,7 +770,7 @@
 						</div>
 	                </div>
 					<div class="popup_btn_wrap2" style="margin: 0 auto 30px auto;">
-						<button type="button" id="btnAddrMassReg">등록</button>
+						<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>
 				
src/main/webapp/publish/css/popupLayer.css
--- src/main/webapp/publish/css/popupLayer.css
+++ src/main/webapp/publish/css/popupLayer.css
@@ -1195,7 +1195,11 @@
 .layer_in .popup_search_type1 button { width:63px;}
 .layer_in .gorup_join_cont .input_right.type1 {padding:0 0 0 30px; font-size:17px; font-weight:300;}
 
-
+/* 주소록 대량등록  */
+.file_upload_wrap{position:relative;display:flex;justify-content:space-between;align-items:center;}
+.file_upload_wrap .file_add.upload_area{display:flex;width:78%;margin:0;align-items:center;justify-content:center;}
+.file_upload_wrap .file_add.upload_area p{display:block;}
+.file_upload_wrap  .btnType.c3{position:unset;height:82px;}
 
 
 /* ie */
Add a comment
List