--- src/main/java/itn/let/mail/service/StatusResponse.java
+++ src/main/java/itn/let/mail/service/StatusResponse.java
... | ... | @@ -26,6 +26,24 @@ |
| 26 | 26 |
* |
| 27 | 27 |
* |
| 28 | 28 |
*/ |
| 29 |
+ |
|
| 30 |
+ |
|
| 31 |
+ |
|
| 32 |
+/* |
|
| 33 |
+ * • 1XX : 조건부 응답 |
|
| 34 |
+ * • 2XX : 성공 |
|
| 35 |
+ * • 3XX : 리다이렉션 완료 |
|
| 36 |
+ * • 4XX : 요청 오류 |
|
| 37 |
+ * • 500 : 서버 오류 |
|
| 38 |
+ * |
|
| 39 |
+ * 참고 : https://km0830.tistory.com/33 |
|
| 40 |
+ * |
|
| 41 |
+ * ====== 자주 사용하는 코드 ===== |
|
| 42 |
+ * 200 : Ok : 서버가 클라이언트의 요청을 성공적으로 처리, 웹 페이지에서는 페이지 요청이 정상적으로 완료 (Ok) |
|
| 43 |
+ * 400 : Bad Request : 잘못 요청 (Bad Request) |
|
| 44 |
+ * 401 : Unauthorized : 권한 없음, 예를 들면, 로그인 페이지가 필요한 페이지를 로그인 없이 접속하려는 경우 반환되는 코드 (인증 실패) (Unauthorized) |
|
| 45 |
+ * |
|
| 46 |
+ * */ |
|
| 29 | 47 |
@Getter |
| 30 | 48 |
@Setter |
| 31 | 49 |
@NoArgsConstructor |
--- src/main/java/itn/let/mjo/addr/service/impl/AddrServiceImpl.java
+++ src/main/java/itn/let/mjo/addr/service/impl/AddrServiceImpl.java
... | ... | @@ -64,9 +64,10 @@ |
| 64 | 64 |
private static final Charset EUC_KR = Charset.forName("EUC-KR");
|
| 65 | 65 |
// private static final int MAX_ADDR_CNT = 500000; |
| 66 | 66 |
//임시 500만개 |
| 67 |
- private static final int MAX_ADDR_CNT = 5000000; |
|
| 68 |
-// private static final int BATCH_SIZE = 10000; |
|
| 69 |
-// private static final int THREAD_COUNT = 3; |
|
| 67 |
+ private static final int MAX_SINGLE_ENTRY_CNT = 100000; |
|
| 68 |
+ private static final int MAX_ADDR_CNT = 500000; |
|
| 69 |
+ private static final int BATCH_SIZE = 10000; |
|
| 70 |
+ private static final int THREAD_COUNT = 3; |
|
| 70 | 71 |
|
| 71 | 72 |
|
| 72 | 73 |
public List<AddrVO> selectAddrList(AddrVO addrVO) throws Exception {
|
... | ... | @@ -398,6 +399,14 @@ |
| 398 | 399 |
|
| 399 | 400 |
|
| 400 | 401 |
|
| 402 |
+ if(addrListVO.size() > MAX_SINGLE_ENTRY_CNT) {
|
|
| 403 |
+ return new StatusResponse( |
|
| 404 |
+ HttpStatus.BAD_REQUEST |
|
| 405 |
+ , "주소록은 한번에 10만개까지만 등록이 가능합니다." |
|
| 406 |
+ , LocalDateTime.now() |
|
| 407 |
+ ); |
|
| 408 |
+ |
|
| 409 |
+ } |
|
| 401 | 410 |
// step1 현재 주소록 갯수 조회 |
| 402 | 411 |
|
| 403 | 412 |
//회원별 주소록 전체 갯수 조회 |
... | ... | @@ -478,11 +487,7 @@ |
| 478 | 487 |
if(addrListVO.size() > 0) {
|
| 479 | 488 |
// 등록 |
| 480 | 489 |
// Batch insert |
| 481 |
-// batchInsertAddrList(addrListVO); |
|
| 482 |
-// batchInsertAddrListAsync(addrListVO); |
|
| 483 |
- |
|
| 484 |
- addrDAO.insertAddrList(addrListVO); |
|
| 485 |
- |
|
| 490 |
+ batchInsertAddrListAsync(addrListVO); |
|
| 486 | 491 |
// addrDAO.insertAddrList(addrListVO); |
| 487 | 492 |
|
| 488 | 493 |
} |
... | ... | @@ -519,7 +524,7 @@ |
| 519 | 524 |
} |
| 520 | 525 |
|
| 521 | 526 |
|
| 522 |
- /*private void batchInsertAddrListAsync(List<AddrVO> addrListVO) throws InterruptedException {
|
|
| 527 |
+ private void batchInsertAddrListAsync(List<AddrVO> addrListVO) throws InterruptedException {
|
|
| 523 | 528 |
int totalSize = addrListVO.size(); |
| 524 | 529 |
int batchCount = (totalSize + BATCH_SIZE - 1) / BATCH_SIZE; |
| 525 | 530 |
ExecutorService executor = Executors.newFixedThreadPool(THREAD_COUNT); |
... | ... | @@ -544,7 +549,7 @@ |
| 544 | 549 |
|
| 545 | 550 |
executor.shutdown(); |
| 546 | 551 |
executor.awaitTermination(1, TimeUnit.HOURS); |
| 547 |
- }*/ |
|
| 552 |
+ } |
|
| 548 | 553 |
|
| 549 | 554 |
public static boolean isValidPhoneNumber(String phoneNo) {
|
| 550 | 555 |
if (phoneNo == null || phoneNo.isEmpty()) {
|
--- src/main/java/itn/let/uss/umt/web/EgovUserManageController.java
+++ src/main/java/itn/let/uss/umt/web/EgovUserManageController.java
... | ... | @@ -1388,6 +1388,7 @@ |
| 1388 | 1388 |
|
| 1389 | 1389 |
//전용 전송사 발송 단가 조회 |
| 1390 | 1390 |
List<MjonMsgAgentStsVO> resultAgentPriceList = mjonMsgAgentStsService.selectHotLineAgentPriceList(hotLineAgentCode); |
| 1391 |
+ System.out.println("??????????????????????!!!!!!!!!!!!!!");
|
|
| 1391 | 1392 |
agentCodeNm = resultAgentPriceList.get(0).getAgentCodeNm(); |
| 1392 | 1393 |
|
| 1393 | 1394 |
for(MjonMsgAgentStsVO hotLineVO : resultAgentPriceList) {
|
--- src/main/webapp/WEB-INF/jsp/web/addr/AddrList.jsp
+++ src/main/webapp/WEB-INF/jsp/web/addr/AddrList.jsp
... | ... | @@ -10,8 +10,8 @@ |
| 10 | 10 |
|
| 11 | 11 |
<script type="text/javascript" src="<c:url value='/publish/js/content.js'/>"></script> |
| 12 | 12 |
<script type="text/javascript" src="https://oss.sheetjs.com/sheetjs/xlsx.full.min.js"></script> |
| 13 |
-<script type="text/javascript" src="<c:url value='/js/web/addr/init.js'/>"></script> |
|
| 14 |
-<script type="text/javascript" src="<c:url value='/js/web/addr/event.js'/>"></script> |
|
| 13 |
+<script type="text/javascript" src="<c:url value='/js/web/addr/init.js'/>?v=${currentTime}""></script>
|
|
| 14 |
+<script type="text/javascript" src="<c:url value='/js/web/addr/event.js'/>?v=${currentTime}""></script>
|
|
| 15 | 15 |
<script type="text/javascript" src="<c:url value='/js/web/addr/utils.js'/>?v=${currentTime}"></script>
|
| 16 | 16 |
|
| 17 | 17 |
|
... | ... | @@ -20,7 +20,10 @@ |
| 20 | 20 |
$(document).ready(function(){
|
| 21 | 21 |
listAddrGrp(); |
| 22 | 22 |
addrLoadAjax(); |
| 23 |
- |
|
| 23 |
+ |
|
| 24 |
+ // 엑셀 중복번호 버튼 |
|
| 25 |
+ $("#tableExcelDupliBtn").hide();
|
|
| 26 |
+// $("#btnAddrMassSaveDupli").hide();
|
|
| 24 | 27 |
// 주소록 대량등록 |
| 25 | 28 |
// addrMassTab(1); |
| 26 | 29 |
|
... | ... | @@ -83,70 +86,6 @@ |
| 83 | 86 |
|
| 84 | 87 |
} |
| 85 | 88 |
|
| 86 |
-function insertAddrAjax() {
|
|
| 87 |
- var selectVal = $("#addrRegistSelect option:selected").val();
|
|
| 88 |
- //alert(selectVal); |
|
| 89 |
- |
|
| 90 |
- var form = document.addrInsertForm; |
|
| 91 |
- /* |
|
| 92 |
- //필수값 아니어서 뺐음 |
|
| 93 |
- if(form.addrNm.value == "") {
|
|
| 94 |
- alert("주소록 이름을 입력하세요");
|
|
| 95 |
- return; |
|
| 96 |
- } |
|
| 97 |
- */ |
|
| 98 |
- if(form.addrPhoneNo.value == "") {
|
|
| 99 |
- alert("주소록 번호를 입력하세요");
|
|
| 100 |
- return; |
|
| 101 |
- } |
|
| 102 |
- //if(!confirm("주소록을 추가하시겠습니까?")) {
|
|
| 103 |
- // return; |
|
| 104 |
- //} |
|
| 105 |
- |
|
| 106 |
- if(!checkHpNum(form.addrPhoneNo.value)){//휴대폰 유효성 검사
|
|
| 107 |
- if(!checkNorPhoneNum(form.addrPhoneNo.value)){//일반전화 유효성 검사
|
|
| 108 |
- |
|
| 109 |
- alert("잘못된 휴대폰번호 또는 일반전화 번호 입니다.");
|
|
| 110 |
- return false; |
|
| 111 |
- |
|
| 112 |
- } |
|
| 113 |
- |
|
| 114 |
- } |
|
| 115 |
- |
|
| 116 |
- var data = new FormData(form); |
|
| 117 |
- |
|
| 118 |
- $.ajax({
|
|
| 119 |
- cache : false, |
|
| 120 |
- url : "<c:url value='/web/mjon/addr/insertAddrAjax.do' />", |
|
| 121 |
- type : 'POST', |
|
| 122 |
- data : data, |
|
| 123 |
- dataType:'json', |
|
| 124 |
- processData: false, |
|
| 125 |
- contentType: false, |
|
| 126 |
- success : function(returnData, status){
|
|
| 127 |
- if(status == "success") {
|
|
| 128 |
- if("fail"==returnData.result){
|
|
| 129 |
- alert(returnData.message); |
|
| 130 |
- return; |
|
| 131 |
- } else if("dupl"==returnData.result){
|
|
| 132 |
- alert("해당 그룹에 중복된 번호가 있습니다.");
|
|
| 133 |
- return; |
|
| 134 |
- } |
|
| 135 |
- //alert("저장 되었습니다.");
|
|
| 136 |
- |
|
| 137 |
- listAddrGrp(); |
|
| 138 |
- addrGroupLoadAjax(); |
|
| 139 |
- addrLoadAjax(); |
|
| 140 |
- |
|
| 141 |
- // 주소록그룹 콤보박스 유지 |
|
| 142 |
- setTimeout(setSelectSetting, 500, selectVal); |
|
| 143 |
- |
|
| 144 |
- }else{ alert("ERROR!");return;}
|
|
| 145 |
- }, |
|
| 146 |
- error: function (e) { alert("저장에 실패하였습니다."); console.log("ERROR : ", e); }
|
|
| 147 |
- }); |
|
| 148 |
- |
|
| 149 |
-} |
|
| 150 | 89 |
|
| 151 | 90 |
// 주소록그룹 콤보박스 유지 |
| 152 | 91 |
function setSelectSetting(selectVal) {
|
... | ... | @@ -187,23 +126,6 @@ |
| 187 | 126 |
|
| 188 | 127 |
$(document).ready(function(){
|
| 189 | 128 |
|
| 190 |
- |
|
| 191 |
- |
|
| 192 |
- //받는 사람 리스트 영역에 클립보드 데이터 가져와보기 |
|
| 193 |
- // 붙여넣기 기능 |
|
| 194 |
- |
|
| 195 |
- |
|
| 196 |
- |
|
| 197 |
-// // 필드 선택 이벤트 핸들러 |
|
| 198 |
-// $("#column-selector").on("change", function() {
|
|
| 199 |
-// let selectedField = $(this).val(); |
|
| 200 |
-// let newValue = prompt("새 값을 입력하세요:");
|
|
| 201 |
-// if (newValue !== null) {
|
|
| 202 |
-// updateTableField(selectedField, newValue); |
|
| 203 |
-// } |
|
| 204 |
-// }); |
|
| 205 |
- |
|
| 206 |
- |
|
| 207 | 129 |
|
| 208 | 130 |
|
| 209 | 131 |
|
... | ... | @@ -358,26 +280,30 @@ |
| 358 | 280 |
} |
| 359 | 281 |
|
| 360 | 282 |
// tableExcel 그룹의 select 요소들을 확인 |
| 361 |
- var isPhoneSelected = false; |
|
| 362 |
- var isNameSelected = false; |
|
| 283 |
+// var isPhoneSelected = false; |
|
| 284 |
+// var isNameSelected = false; |
|
| 363 | 285 |
$('.adr_hd.select_adr_hd[data-group="'+tabulNm+'"] .field-selector').each(function() {
|
| 364 | 286 |
var value = $(this).val(); |
| 365 | 287 |
if (value === 'addrPhoneNo') {
|
| 366 |
- isPhoneSelected = true; |
|
| 367 |
- } else if (value === 'addrNm') {
|
|
| 368 |
- isNameSelected = true; |
|
| 369 |
- } |
|
| 288 |
+// isPhoneSelected = true; |
|
| 289 |
+ alert('휴대폰이 선택되지 않았습니다.');
|
|
| 290 |
+ return false; |
|
| 291 |
+ |
|
| 292 |
+ } |
|
| 293 |
+// else if (value === 'addrNm') {
|
|
| 294 |
+// isNameSelected = true; |
|
| 295 |
+// } |
|
| 370 | 296 |
|
| 371 | 297 |
// 두 조건이 모두 충족되면 반복문 종료 |
| 372 |
- if (isPhoneSelected && isNameSelected) {
|
|
| 373 |
- return false; |
|
| 374 |
- } |
|
| 298 |
+// if (isPhoneSelected && isNameSelected) {
|
|
| 299 |
+// return false; |
|
| 300 |
+// } |
|
| 375 | 301 |
}); |
| 376 | 302 |
|
| 377 |
- if (!isPhoneSelected || !isNameSelected) {
|
|
| 378 |
- alert('휴대폰 또는 이름이 선택되지 않았습니다.');
|
|
| 379 |
- return false; |
|
| 380 |
- } |
|
| 303 |
+// if (!isPhoneSelected || !isNameSelected) {
|
|
| 304 |
+// alert('휴대폰 또는 이름이 선택되지 않았습니다.');
|
|
| 305 |
+// return false; |
|
| 306 |
+// } |
|
| 381 | 307 |
|
| 382 | 308 |
|
| 383 | 309 |
// 주소록이 새로생성이면 새로운 주소록명이 있는지 확인 |
... | ... | @@ -471,7 +397,7 @@ |
| 471 | 397 |
var selectMassVal = $("#addrGrpIdInfo option:selected").val();
|
| 472 | 398 |
|
| 473 | 399 |
// 주소록그룹 콤보박스 유지 |
| 474 |
- setTimeout(setSelectMassSetting, 500, selectMassVal); |
|
| 400 |
+// setTimeout(setSelectMassSetting, 500, selectMassVal); |
|
| 475 | 401 |
} |
| 476 | 402 |
else {
|
| 477 | 403 |
alert("오류 알림 : :: "+data.message);
|
--- src/main/webapp/WEB-INF/jsp/web/addr/AddrListAjax.jsp
+++ src/main/webapp/WEB-INF/jsp/web/addr/AddrListAjax.jsp
... | ... | @@ -1013,7 +1013,7 @@ |
| 1013 | 1013 |
</div> |
| 1014 | 1014 |
</div> |
| 1015 | 1015 |
<!--// 중복전화번호 팝업 --> |
| 1016 |
- |
|
| 1016 |
+<!-- |
|
| 1017 | 1017 |
<!-- 중복전화번호 저장시 data-tooltip:addrMassSaveDupli_layer --> |
| 1018 | 1018 |
<div class="tooltip-wrap"> |
| 1019 | 1019 |
<div class="popup-com addrMassSaveDupli_layer" tabindex="0" data-tooltip-con="addrMassSaveDupli_layer" data-focus="addrMassSaveDupli_layer" data-focus-prev="addrMassSaveDupli_layer-close" style="width: 320px; height: 500px;"> |
... | ... | @@ -1029,8 +1029,8 @@ |
| 1029 | 1029 |
</div> |
| 1030 | 1030 |
</div> |
| 1031 | 1031 |
</div> |
| 1032 |
-<!--// 중복전화번호 팝업 --> |
|
| 1033 |
- |
|
| 1032 |
+// 중복전화번호 팝업 |
|
| 1033 |
+ --> |
|
| 1034 | 1034 |
<form name="addrMemoForm" name="addrMemoForm" method="post"> |
| 1035 | 1035 |
<input type="hidden" name="addrCheck" /> |
| 1036 | 1036 |
<input type="hidden" name="addrComment" /> |
--- src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforClipboard.jsp
+++ src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforClipboard.jsp
... | ... | @@ -164,13 +164,6 @@ |
| 164 | 164 |
$("#excelFile").click();
|
| 165 | 165 |
}); |
| 166 | 166 |
|
| 167 |
- // 파일 입력 이벤트 |
|
| 168 |
- $("#excelFile").on("change", function(event) {
|
|
| 169 |
- excelFileChange(event.target.files[0]); |
|
| 170 |
- }); |
|
| 171 |
- |
|
| 172 |
- |
|
| 173 |
- |
|
| 174 | 167 |
//받는사람 전체삭제 버튼 처리 |
| 175 | 168 |
$('.all_del').click(function(){
|
| 176 | 169 |
var data = $tableClip.getRows(); |
... | ... | @@ -431,32 +424,6 @@ |
| 431 | 424 |
$("#addrMassDupli_layer").html(sHtml);
|
| 432 | 425 |
} |
| 433 | 426 |
|
| 434 |
-//중복 연락처 => 저장시 |
|
| 435 |
-function GetAddrMassSaveDupli() {
|
|
| 436 |
- var sHtml = ""; |
|
| 437 |
- sHtml += "<div class='' style='overflow-x:auto; height:350px;'>"; |
|
| 438 |
- sHtml += "<table class='tType4'>"; |
|
| 439 |
- sHtml += " <colgroup>"; |
|
| 440 |
- sHtml += " <col style='width:auto' />"; |
|
| 441 |
- sHtml += " </colgroup>"; |
|
| 442 |
- sHtml += " <thead>"; |
|
| 443 |
- sHtml += " <tr>"; |
|
| 444 |
-// sHtml += " <th>중복 휴대폰번호 (" + numberWithCommas(addrMassDupliSaveList.length) + "개)</th>";
|
|
| 445 |
- sHtml += " <th>중복 휴대폰번호 (10개)</th>"; |
|
| 446 |
- sHtml += " </tr>"; |
|
| 447 |
- sHtml += " </thead>"; |
|
| 448 |
- sHtml += " <tbody>"; |
|
| 449 |
- for (var i = 0; i < addrMassDupliSaveList.length; i++) {
|
|
| 450 |
- sHtml += " <tr>"; |
|
| 451 |
- sHtml += " <td>" + addrMassDupliSaveList[i].addrPhoneNo + "</td>"; |
|
| 452 |
- sHtml += " </tr>"; |
|
| 453 |
- } |
|
| 454 |
- sHtml += " </tbody>"; |
|
| 455 |
- sHtml += " </table>"; |
|
| 456 |
- sHtml += " </div>"; |
|
| 457 |
- |
|
| 458 |
- $("#addrMassSaveDupli_layer").html(sHtml);
|
|
| 459 |
-} |
|
| 460 | 427 |
|
| 461 | 428 |
</script> |
| 462 | 429 |
|
... | ... | @@ -505,6 +472,7 @@ |
| 505 | 472 |
<p> |
| 506 | 473 |
총 <span class="c_e40000 fwBold" id="rowTotCnt">0</span>건 / 중복 <span class="c_002c9a fwBold" id="rowDupCnt">0</span>건 |
| 507 | 474 |
<!-- --> |
| 475 |
+ <button type="button" class="btnType btnType6" data-tooltip="addrMassDupli_layer" id="tableClipDupliBtn">중복번호</button> |
|
| 508 | 476 |
<!-- <button type="button" class="btnType btnType6" data-tooltip="addrMassDupli_layer" onclick="GetAddrMassDupli()" id="btnAddrMassDupli">중복번호</button> --> |
| 509 | 477 |
<!-- --> |
| 510 | 478 |
<!-- <button type="button" class="btnType btnType6" data-tooltip="addrMassSaveDupli_layer" onclick="GetAddrMassSaveDupli()" id="btnAddrMassSaveDupli">중복번호</button> --> |
--- src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforExcel.jsp
+++ src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforExcel.jsp
... | ... | @@ -61,70 +61,6 @@ |
| 61 | 61 |
|
| 62 | 62 |
} |
| 63 | 63 |
|
| 64 |
-function insertAddrAjax() {
|
|
| 65 |
- var selectVal = $("#addrRegistSelect option:selected").val();
|
|
| 66 |
- //alert(selectVal); |
|
| 67 |
- |
|
| 68 |
- var form = document.addrInsertForm; |
|
| 69 |
- /* |
|
| 70 |
- //필수값 아니어서 뺐음 |
|
| 71 |
- if(form.addrNm.value == "") {
|
|
| 72 |
- alert("주소록 이름을 입력하세요");
|
|
| 73 |
- return; |
|
| 74 |
- } |
|
| 75 |
- */ |
|
| 76 |
- if(form.addrPhoneNo.value == "") {
|
|
| 77 |
- alert("주소록 번호를 입력하세요");
|
|
| 78 |
- return; |
|
| 79 |
- } |
|
| 80 |
- //if(!confirm("주소록을 추가하시겠습니까?")) {
|
|
| 81 |
- // return; |
|
| 82 |
- //} |
|
| 83 |
- |
|
| 84 |
- if(!checkHpNum(form.addrPhoneNo.value)){//휴대폰 유효성 검사
|
|
| 85 |
- if(!checkNorPhoneNum(form.addrPhoneNo.value)){//일반전화 유효성 검사
|
|
| 86 |
- |
|
| 87 |
- alert("잘못된 휴대폰번호 또는 일반전화 번호 입니다.");
|
|
| 88 |
- return false; |
|
| 89 |
- |
|
| 90 |
- } |
|
| 91 |
- |
|
| 92 |
- } |
|
| 93 |
- |
|
| 94 |
- var data = new FormData(form); |
|
| 95 |
- |
|
| 96 |
- $.ajax({
|
|
| 97 |
- cache : false, |
|
| 98 |
- url : "<c:url value='/web/mjon/addr/insertAddrAjax.do' />", |
|
| 99 |
- type : 'POST', |
|
| 100 |
- data : data, |
|
| 101 |
- dataType:'json', |
|
| 102 |
- processData: false, |
|
| 103 |
- contentType: false, |
|
| 104 |
- success : function(returnData, status){
|
|
| 105 |
- if(status == "success") {
|
|
| 106 |
- if("fail"==returnData.result){
|
|
| 107 |
- alert(returnData.message); |
|
| 108 |
- return; |
|
| 109 |
- } else if("dupl"==returnData.result){
|
|
| 110 |
- alert("해당 그룹에 중복된 번호가 있습니다.");
|
|
| 111 |
- return; |
|
| 112 |
- } |
|
| 113 |
- //alert("저장 되었습니다.");
|
|
| 114 |
- |
|
| 115 |
- listAddrGrp(); |
|
| 116 |
- addrGroupLoadAjax(); |
|
| 117 |
- addrLoadAjax(); |
|
| 118 |
- |
|
| 119 |
- // 주소록그룹 콤보박스 유지 |
|
| 120 |
- setTimeout(setSelectSetting, 500, selectVal); |
|
| 121 |
- |
|
| 122 |
- }else{ alert("ERROR!");return;}
|
|
| 123 |
- }, |
|
| 124 |
- error: function (e) { alert("저장에 실패하였습니다."); console.log("ERROR : ", e); }
|
|
| 125 |
- }); |
|
| 126 |
- |
|
| 127 |
-} |
|
| 128 | 64 |
|
| 129 | 65 |
// 주소록그룹 콤보박스 유지 |
| 130 | 66 |
function setSelectSetting(selectVal) {
|
... | ... | @@ -140,114 +76,15 @@ |
| 140 | 76 |
|
| 141 | 77 |
$(document).ready(function(){
|
| 142 | 78 |
// 파일 선택 버튼 클릭 이벤트 |
| 143 |
- $("#file-load-trigger").on("click", function() {
|
|
| 144 |
- $("#excelFile").click();
|
|
| 145 |
- }); |
|
| 146 |
- |
|
| 147 | 79 |
// 파일 입력 이벤트 |
| 148 | 80 |
$("#excelFile").on("change", function(event) {
|
| 149 |
- excelFileChange(event.target.files[0]); |
|
| 81 |
+ var fileInfo = event.target.files; |
|
| 82 |
+ if(fileInfo.length > 0){
|
|
| 83 |
+ fn_loadAddActive(); |
|
| 84 |
+ excelFileChange(fileInfo[0]); |
|
| 85 |
+ } |
|
| 150 | 86 |
}); |
| 151 | 87 |
|
| 152 |
- |
|
| 153 |
- |
|
| 154 |
- //받는 사람 리스트 영역에 클립보드 데이터 가져와보기 |
|
| 155 |
- // 붙여넣기 기능 |
|
| 156 |
- /* $('.callList_box').on('paste', function (e) {
|
|
| 157 |
- var element = e.originalEvent.clipboardData.getData('text'); // 클립보드에 복사한 데이터 가져오기
|
|
| 158 |
- var elmSplit= []; |
|
| 159 |
- elmSplit = element.split("\n");
|
|
| 160 |
- var elmLen = elmSplit.length; |
|
| 161 |
- console.log('elmSplit : ', elmSplit);
|
|
| 162 |
- if(elmLen < 0){
|
|
| 163 |
- alert("붙여넣을 연락처를 복사해주세요.");
|
|
| 164 |
- return false; |
|
| 165 |
- } |
|
| 166 |
- if (elmLen > 20001) {
|
|
| 167 |
- alert("2만줄 이상의 업로드는 데이터 부하로 업로드 할수 없습니다.");
|
|
| 168 |
- return false; |
|
| 169 |
- } |
|
| 170 |
- |
|
| 171 |
- tableErrorData.length = 0; // 오류 번호 배열 초기화 |
|
| 172 |
- |
|
| 173 |
- var splitData = []; |
|
| 174 |
- var realPhone = []; |
|
| 175 |
- |
|
| 176 |
- for(var i=0; i < elmLen; i++){
|
|
| 177 |
- var splitStr = elmSplit[i]; |
|
| 178 |
- var tabData = splitStr.split("\t"); //탭 구분으로 데이터 분할
|
|
| 179 |
- var comData = splitStr.split(","); //콤마 구분으로 데이터 분할
|
|
| 180 |
- if(tabData.length >= 2){
|
|
| 181 |
- splitData = tabData; |
|
| 182 |
- }else{
|
|
| 183 |
- splitData = comData; |
|
| 184 |
- } |
|
| 185 |
- |
|
| 186 |
- if(splitData.length == 0){// 데이터가 없는경우
|
|
| 187 |
- alert("탭으로 구분하여 데이터를 복사해 주세요.");
|
|
| 188 |
- return false; |
|
| 189 |
- } |
|
| 190 |
- |
|
| 191 |
- |
|
| 192 |
- if(splitData.length == 1){
|
|
| 193 |
- realPhone.push({A: splitData[0].trim()});
|
|
| 194 |
- }else{
|
|
| 195 |
- |
|
| 196 |
- let keys = ['A', 'B', 'C', 'D', 'E', 'F', 'G']; |
|
| 197 |
- let data = {};
|
|
| 198 |
- |
|
| 199 |
- splitData.forEach((item, index) => {
|
|
| 200 |
- data[keys[index]] = item.trim(); |
|
| 201 |
- }); |
|
| 202 |
- |
|
| 203 |
- realPhone.push(data); |
|
| 204 |
- }//else end |
|
| 205 |
- } |
|
| 206 |
- console.log('realPhone : ', realPhone);
|
|
| 207 |
- var recTableData = $tableExcel.getRows(); // 받는사람 리스트의 전체 목록을 저장 |
|
| 208 |
- var tableData = []; |
|
| 209 |
- |
|
| 210 |
- //기존 받는사람 리스트를 배열에 미리 담아둔다. |
|
| 211 |
- if (recTableData.length > 0) {
|
|
| 212 |
- recTableData.forEach(item => {
|
|
| 213 |
- tableData.push(createDataObject(item.getData())); |
|
| 214 |
- }); |
|
| 215 |
- } |
|
| 216 |
- |
|
| 217 |
- if (realPhone.length > 0) {
|
|
| 218 |
- realPhone.forEach(item => {
|
|
| 219 |
- tableData.push(createDataObject(item)); |
|
| 220 |
- }); |
|
| 221 |
- } |
|
| 222 |
- |
|
| 223 |
- //tableData.push(realPhone); |
|
| 224 |
- |
|
| 225 |
- //중복 연락처 1개만 남기고 삭제하기 |
|
| 226 |
- // 20240719 개선작업은 폰위치가 따로없어 중복제거를 못함 |
|
| 227 |
-// var removeDuplPhone = dupliPhoneData(tableData); |
|
| 228 |
- var removeDuplPhone = tableData; |
|
| 229 |
- |
|
| 230 |
- //수신자 리스트에 전화번호 추가해주기 |
|
| 231 |
- //$tableExcel.addData(removeDuplPhone); |
|
| 232 |
- $tableExcel.setData(removeDuplPhone); |
|
| 233 |
- |
|
| 234 |
- totRows = $tableExcel.getRows().length; |
|
| 235 |
- updateTotCnt(totRows); //전체 데이터 갯수 구하기 |
|
| 236 |
- |
|
| 237 |
- if (tableErrorData.length > 0) {
|
|
| 238 |
- alert("데이터를 확인해 주세요.");
|
|
| 239 |
- // alert("올바르지 않은 휴대폰 번호가 "+ tableErrorData.length +" 건 있습니다.");
|
|
| 240 |
- //for(var x=0; x < tableErrorData.length; x++){
|
|
| 241 |
- // alert(tableErrorData[x]); |
|
| 242 |
- //} |
|
| 243 |
- } |
|
| 244 |
- }); |
|
| 245 |
- */ |
|
| 246 |
- |
|
| 247 |
- //$tableExcel.setData(tabledata); |
|
| 248 |
- |
|
| 249 |
- |
|
| 250 |
- |
|
| 251 | 88 |
|
| 252 | 89 |
//받는사람 전체삭제 버튼 처리 |
| 253 | 90 |
$('.all_del').click(function(){
|
... | ... | @@ -261,7 +98,6 @@ |
| 261 | 98 |
$("#rowDupCnt").text(0); //중복건수 수정
|
| 262 | 99 |
dupliPhoneDataRealList.length = 0; // 중복 휴대폰번호 초기화 |
| 263 | 100 |
} |
| 264 |
- |
|
| 265 | 101 |
}); |
| 266 | 102 |
|
| 267 | 103 |
|
... | ... | @@ -345,10 +181,6 @@ |
| 345 | 181 |
}); |
| 346 | 182 |
|
| 347 | 183 |
|
| 348 |
- |
|
| 349 |
- |
|
| 350 |
- |
|
| 351 |
- |
|
| 352 | 184 |
|
| 353 | 185 |
// 오류검사 항목 중복제거 |
| 354 | 186 |
function SetTableErrorDupliCheck(sVal) {
|
... | ... | @@ -510,11 +342,10 @@ |
| 510 | 342 |
e.preventDefault(); |
| 511 | 343 |
}); |
| 512 | 344 |
$(document).on("drop",".upload_area",function(e){
|
| 513 |
- //$(this).css('border', '2px dotted #0B85A1');
|
|
| 514 |
- e.preventDefault(); |
|
| 515 |
- var files = e.originalEvent.dataTransfer.files; |
|
| 516 |
-// handleFileUpload(files,objDragAndDrop); //파일업로드 |
|
| 517 |
- excelFileChange(files[0]); |
|
| 345 |
+ fn_loadAddActive(); |
|
| 346 |
+ e.preventDefault(); |
|
| 347 |
+ var files = e.originalEvent.dataTransfer.files; |
|
| 348 |
+ excelFileChange(files[0]); |
|
| 518 | 349 |
}); |
| 519 | 350 |
|
| 520 | 351 |
$(document).on('dragenter', function (e){
|
... | ... | @@ -532,64 +363,95 @@ |
| 532 | 363 |
}); |
| 533 | 364 |
//파일 드래그앤드롭 종료 |
| 534 | 365 |
|
| 366 |
+function excelFileChange(file) {
|
|
| 367 |
+ if (file) {
|
|
| 368 |
+ var reader = new FileReader(); |
|
| 369 |
+ var extension = file.name.split('.').pop().toLowerCase();
|
|
| 535 | 370 |
|
| 536 |
- function excelFileChange(file){
|
|
| 537 |
- |
|
| 538 |
- $('.loading_layer').addClass('active');
|
|
| 539 |
-// var file = event.target.files[0]; |
|
| 540 |
- if (file) {
|
|
| 541 |
- var reader = new FileReader(); |
|
| 542 |
- reader.onload = function(e) {
|
|
| 371 |
+ reader.onload = function(e) {
|
|
| 372 |
+ if (extension === 'xlsx') {
|
|
| 543 | 373 |
var data = new Uint8Array(e.target.result); |
| 544 | 374 |
var workbook = XLSX.read(data, {type: 'array'});
|
| 545 | 375 |
var firstSheet = workbook.Sheets[workbook.SheetNames[0]]; |
| 546 | 376 |
var jsonData = XLSX.utils.sheet_to_json(firstSheet, {header: 1});
|
| 547 | 377 |
processExcelData(jsonData); |
| 548 |
- }; |
|
| 378 |
+ } else if (extension === 'txt') {
|
|
| 379 |
+ var textData = e.target.result; |
|
| 380 |
+ processTextData(textData); |
|
| 381 |
+ } else {
|
|
| 382 |
+ alert('지원되지 않는 파일 형식입니다.');
|
|
| 383 |
+ } |
|
| 384 |
+ }; |
|
| 385 |
+ |
|
| 386 |
+ if (extension === 'xlsx') {
|
|
| 549 | 387 |
reader.readAsArrayBuffer(file); |
| 388 |
+ } else if (extension === 'txt') {
|
|
| 389 |
+ reader.readAsText(file); |
|
| 550 | 390 |
} |
| 551 |
- |
|
| 552 |
- //로딩창 hide |
|
| 553 |
- $('.loading_layer').removeClass('active');
|
|
| 554 |
- |
|
| 555 | 391 |
} |
| 556 | 392 |
|
| 557 |
- // 엑셀 데이터 처리 함수 |
|
| 558 |
- function processExcelData(data) {
|
|
| 559 |
- var keys = ['A', 'B', 'C', 'D', 'E', 'F', 'G']; |
|
| 560 |
- var tableData = []; |
|
| 393 |
+ // 로딩창 hide |
|
| 394 |
+ fn_loadRemoveActive(); |
|
| 395 |
+} |
|
| 561 | 396 |
|
| 562 |
- // 3번째 행부터 입력 |
|
| 563 |
- // 1,2행은 예시와 타이틀이라 입력안함 |
|
| 564 |
- data.slice(2).forEach(row => {
|
|
| 565 |
- var rowData = {};
|
|
| 566 |
- keys.forEach((key, index) => {
|
|
| 567 |
- rowData[key] = row[index] ? row[index].trim() : ""; // 각 컬럼에 대해 기본값을 설정 |
|
| 568 |
- }); |
|
| 569 |
- tableData.push(rowData); |
|
| 397 |
+// 엑셀 데이터 처리 함수 |
|
| 398 |
+function processExcelData(data) {
|
|
| 399 |
+ var keys = ['A', 'B', 'C', 'D', 'E', 'F', 'G']; |
|
| 400 |
+ var tableData = []; |
|
| 401 |
+ |
|
| 402 |
+ // 3번째 행부터 입력 |
|
| 403 |
+ // 1, 2행은 예시와 타이틀이라 입력안함 |
|
| 404 |
+ data.slice(2).forEach(row => {
|
|
| 405 |
+ var rowData = {};
|
|
| 406 |
+ keys.forEach((key, index) => {
|
|
| 407 |
+ rowData[key] = row[index] ? row[index].trim() : ""; // 각 컬럼에 대해 기본값을 설정 |
|
| 570 | 408 |
}); |
| 409 |
+ tableData.push(rowData); |
|
| 410 |
+ }); |
|
| 571 | 411 |
|
| 412 |
+ updateTable(tableData); |
|
| 413 |
+} |
|
| 572 | 414 |
|
| 573 |
- $tableExcel.setColumns([ // 열 정의를 다시 설정 |
|
| 574 |
- {formatter: "rowSelection", titleFormatter: "rowSelection", clipboard: false, hozAlign: "center", headerHozAlign: "center", headerSort: false, cellClick: function(e, cell) {
|
|
| 575 |
- cell.getRow().toggleSelect(); |
|
| 576 |
- }}, |
|
| 577 |
- {title: "A", hozAlign: "center", headerHozAlign: "center", field: "A", editor: "input", width: 125, validator: ["maxLength:100", "string"]},
|
|
| 578 |
- {title: "B", hozAlign: "center", headerHozAlign: "center", field: "B", editor: "input", width: 125, validator: ["maxLength:100", "string"]},
|
|
| 579 |
- {title: "C", hozAlign: "center", headerHozAlign: "center", field: "C", editor: "input", width: 125, validator: ["maxLength:100", "string"]},
|
|
| 580 |
- {title: "D", hozAlign: "center", headerHozAlign: "center", field: "D", editor: "input", width: 125, validator: ["maxLength:100", "string"]},
|
|
| 581 |
- {title: "E", hozAlign: "center", headerHozAlign: "center", field: "E", editor: "input", width: 125, validator: ["maxLength:100", "string"]},
|
|
| 582 |
- {title: "F", hozAlign: "center", headerHozAlign: "center", field: "F", editor: "input", width: 125, validator: ["maxLength:100", "string"]},
|
|
| 583 |
- {title: "G", hozAlign: "center", headerHozAlign: "center", field: "G", editor: "input", width: 125, validator: ["maxLength:100", "string"]}
|
|
| 584 |
- ]); |
|
| 585 |
- |
|
| 586 |
- $tableExcel.setData(tableData).then(() => {
|
|
| 587 |
- // rowTotCnt 업데이트 |
|
| 588 |
- document.getElementById("rowTotCnt").innerText = tableData.length;
|
|
| 415 |
+// 텍스트 데이터 처리 함수 |
|
| 416 |
+function processTextData(text) {
|
|
| 417 |
+ var lines = text.split('\n'); // 각 줄을 배열로 분리
|
|
| 418 |
+ var keys = ['A', 'B', 'C', 'D', 'E', 'F', 'G']; |
|
| 419 |
+ var tableData = []; |
|
| 420 |
+ |
|
| 421 |
+ lines.forEach(line => {
|
|
| 422 |
+ var rowData = {};
|
|
| 423 |
+ var row = line.split(','); // 쉼표로 분리
|
|
| 424 |
+ keys.forEach((key, index) => {
|
|
| 425 |
+ rowData[key] = row[index] ? row[index].trim() : ""; // 각 컬럼에 대해 기본값을 설정 |
|
| 589 | 426 |
}); |
| 590 |
- |
|
| 591 |
- } |
|
| 427 |
+ tableData.push(rowData); |
|
| 428 |
+ }); |
|
| 592 | 429 |
|
| 430 |
+ updateTable(tableData); |
|
| 431 |
+} |
|
| 432 |
+ |
|
| 433 |
+//공통 테이블 업데이트 함수 |
|
| 434 |
+function updateTable(tableData) {
|
|
| 435 |
+ $tableExcel.setColumns([ // 열 정의를 다시 설정 |
|
| 436 |
+ {formatter: "rowSelection", titleFormatter: "rowSelection", clipboard: false, hozAlign: "center", headerHozAlign: "center", headerSort: false, cellClick: function(e, cell) {
|
|
| 437 |
+ cell.getRow().toggleSelect(); |
|
| 438 |
+ }}, |
|
| 439 |
+ {title: "A", hozAlign: "center", headerHozAlign: "center", field: "A", editor: "input", width: 125, validator: ["maxLength:100", "string"]},
|
|
| 440 |
+ {title: "B", hozAlign: "center", headerHozAlign: "center", field: "B", editor: "input", width: 125, validator: ["maxLength:100", "string"]},
|
|
| 441 |
+ {title: "C", hozAlign: "center", headerHozAlign: "center", field: "C", editor: "input", width: 125, validator: ["maxLength:100", "string"]},
|
|
| 442 |
+ {title: "D", hozAlign: "center", headerHozAlign: "center", field: "D", editor: "input", width: 125, validator: ["maxLength:100", "string"]},
|
|
| 443 |
+ {title: "E", hozAlign: "center", headerHozAlign: "center", field: "E", editor: "input", width: 125, validator: ["maxLength:100", "string"]},
|
|
| 444 |
+ {title: "F", hozAlign: "center", headerHozAlign: "center", field: "F", editor: "input", width: 125, validator: ["maxLength:100", "string"]},
|
|
| 445 |
+ {title: "G", hozAlign: "center", headerHozAlign: "center", field: "G", editor: "input", width: 125, validator: ["maxLength:100", "string"]}
|
|
| 446 |
+ ]); |
|
| 447 |
+ |
|
| 448 |
+ $tableExcel.setData(tableData).then(() => {
|
|
| 449 |
+ // rowTotCnt 업데이트 |
|
| 450 |
+ document.getElementById("rowTotCnt").innerText = tableData.length;
|
|
| 451 |
+ }); |
|
| 452 |
+ |
|
| 453 |
+ fn_loadRemoveActive(); |
|
| 454 |
+} |
|
| 593 | 455 |
|
| 594 | 456 |
|
| 595 | 457 |
//############################################################################################# |
... | ... | @@ -650,34 +512,10 @@ |
| 650 | 512 |
|
| 651 | 513 |
|
| 652 | 514 |
|
| 653 |
-// 중복 연락처 |
|
| 654 |
-function GetAddrMassDupli() {
|
|
| 655 |
- var sHtml = ""; |
|
| 656 |
- sHtml += "<div class='' style='overflow-x:auto; height:350px;'>"; |
|
| 657 |
- sHtml += "<table class='tType4'>"; |
|
| 658 |
- sHtml += " <colgroup>"; |
|
| 659 |
- sHtml += " <col style='width:auto' />"; |
|
| 660 |
- sHtml += " </colgroup>"; |
|
| 661 |
- sHtml += " <thead>"; |
|
| 662 |
- sHtml += " <tr>"; |
|
| 663 |
- sHtml += " <th>중복 휴대폰번호 (" + numberWithCommas(dupliPhoneDataRealList.length) + "개)</th>";
|
|
| 664 |
- sHtml += " </tr>"; |
|
| 665 |
- sHtml += " </thead>"; |
|
| 666 |
- sHtml += " <tbody>"; |
|
| 667 |
- for (var i = 0; i < dupliPhoneDataRealList.length; i++) {
|
|
| 668 |
- sHtml += " <tr>"; |
|
| 669 |
- sHtml += " <td>" + dupliPhoneDataRealList[i] + "</td>"; |
|
| 670 |
- sHtml += " </tr>"; |
|
| 671 |
- } |
|
| 672 |
- sHtml += " </tbody>"; |
|
| 673 |
- sHtml += " </table>"; |
|
| 674 |
- sHtml += " </div>"; |
|
| 675 |
- |
|
| 676 |
- $("#addrMassDupli_layer").html(sHtml);
|
|
| 677 |
-} |
|
| 678 | 515 |
|
| 679 | 516 |
//중복 연락처 => 저장시 |
| 680 |
-function GetAddrMassSaveDupli() {
|
|
| 517 |
+// 해당 그룹 |
|
| 518 |
+/* function GetAddrMassSaveDupli() {
|
|
| 681 | 519 |
var sHtml = ""; |
| 682 | 520 |
sHtml += "<div class='' style='overflow-x:auto; height:350px;'>"; |
| 683 | 521 |
sHtml += "<table class='tType4'>"; |
... | ... | @@ -701,7 +539,7 @@ |
| 701 | 539 |
sHtml += " </div>"; |
| 702 | 540 |
|
| 703 | 541 |
$("#addrMassSaveDupli_layer").html(sHtml);
|
| 704 |
-} |
|
| 542 |
+} */ |
|
| 705 | 543 |
|
| 706 | 544 |
</script> |
| 707 | 545 |
<!-- 엑셀입력 --> |
... | ... | @@ -760,9 +598,10 @@ |
| 760 | 598 |
<p> |
| 761 | 599 |
총 <span class="c_e40000 fwBold" id="rowTotCnt">0</span>건 / 중복 <span class="c_002c9a fwBold" id="rowDupCnt">0</span>건 |
| 762 | 600 |
|
| 763 |
- <button type="button" class="btnType btnType6" data-tooltip="addrMassDupli_layer" onclick="GetAddrMassDupli()" id="btnAddrMassDupli">중복번호</button> |
|
| 764 |
- |
|
| 765 |
- <button type="button" class="btnType btnType6" data-tooltip="addrMassSaveDupli_layer" onclick="GetAddrMassSaveDupli()" id="btnAddrMassSaveDupli">중복번호</button> |
|
| 601 |
+<!-- <button type="button" class="btnType btnType6" data-tooltip="addrMassDupli_layer" onclick="GetAddrMassDupli()" id="btnAddrMassDupli">중복번호</button> --> |
|
| 602 |
+ <button type="button" class="btnType btnType6" data-tooltip="addrMassDupli_layer" id="tableExcelDupliBtn">중복번호</button> |
|
| 603 |
+<!-- --> |
|
| 604 |
+<!-- <button type="button" class="btnType btnType6" data-tooltip="addrMassSaveDupli_layer" onclick="GetAddrMassSaveDupli()" id="btnAddrMassSaveDupli">중복번호</button> --> |
|
| 766 | 605 |
</p> |
| 767 | 606 |
<!-- <button type="button" class="btnType btnType6 addCallToF">번호추가</button> --> |
| 768 | 607 |
</div> |
--- src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforSelf.jsp
+++ src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforSelf.jsp
... | ... | @@ -186,12 +186,6 @@ |
| 186 | 186 |
$("#excelFile").click();
|
| 187 | 187 |
}); |
| 188 | 188 |
|
| 189 |
- // 파일 입력 이벤트 |
|
| 190 |
- $("#excelFile").on("change", function(event) {
|
|
| 191 |
- excelFileChange(event.target.files[0]); |
|
| 192 |
- }); |
|
| 193 |
- |
|
| 194 |
- |
|
| 195 | 189 |
|
| 196 | 190 |
//받는사람 전체삭제 버튼 처리 |
| 197 | 191 |
$('.all_del').click(function(){
|
... | ... | @@ -545,6 +539,7 @@ |
| 545 | 539 |
<p> |
| 546 | 540 |
총 <span class="c_e40000 fwBold" id="rowTotCnt">0</span>건 / 중복 <span class="c_002c9a fwBold" id="rowDupCnt">0</span>건 |
| 547 | 541 |
<!-- --> |
| 542 |
+ <button type="button" class="btnType btnType6" data-tooltip="addrMassDupli_layer" id="tableSelfDupliBtn">중복번호</button> |
|
| 548 | 543 |
<!-- <button type="button" class="btnType btnType6" data-tooltip="addrMassDupli_layer" onclick="GetAddrMassDupli()" id="btnAddrMassDupli">중복번호</button> --> |
| 549 | 544 |
<!-- --> |
| 550 | 545 |
<!-- <button type="button" class="btnType btnType6" data-tooltip="addrMassSaveDupli_layer" onclick="GetAddrMassSaveDupli()" id="btnAddrMassSaveDupli">중복번호</button> --> |
--- src/main/webapp/js/web/addr/event.js
+++ src/main/webapp/js/web/addr/event.js
... | ... | @@ -5,7 +5,10 @@ |
| 5 | 5 |
|
| 6 | 6 |
//타이틀 select 선택 이벤트 |
| 7 | 7 |
$('[data-group]').on('change', '.field-selector', function() {
|
| 8 |
- |
|
| 8 |
+ |
|
| 9 |
+ fn_loadAddActive(); |
|
| 10 |
+ |
|
| 11 |
+ |
|
| 9 | 12 |
var group = $(this).closest('[data-group]').data('group');
|
| 10 | 13 |
var selectedFields = []; |
| 11 | 14 |
var isDuplicate = false; |
... | ... | @@ -19,6 +22,7 @@ |
| 19 | 22 |
if($objTabul.getData().length < 1){
|
| 20 | 23 |
alert('데이터 입력 후 선택해 주세요.');
|
| 21 | 24 |
$(this).val("");
|
| 25 |
+ fn_loadRemoveActive(); |
|
| 22 | 26 |
return false; |
| 23 | 27 |
} |
| 24 | 28 |
|
... | ... | @@ -41,36 +45,60 @@ |
| 41 | 45 |
updateTableFields($objTabul, group); |
| 42 | 46 |
|
| 43 | 47 |
// 필드가 휴대폰이면 열 중복체크 |
| 44 |
- if($(this).val() == 'phone'){
|
|
| 48 |
+ if($(this).val() == 'addrPhoneNo'){
|
|
| 45 | 49 |
fn_phoneDupl($objTabul); |
| 46 | 50 |
} |
| 51 |
+ fn_loadRemoveActive(); |
|
| 52 |
+ |
|
| 47 | 53 |
}); |
| 48 | 54 |
|
| 49 | 55 |
|
| 50 |
- function fn_phoneDupl($objTabul){
|
|
| 51 |
- |
|
| 52 |
- var phoneFields = $objTabul.getData().map(row => row.phone); |
|
| 53 |
- |
|
| 54 |
- if(phoneFields.length < 1){ return false; }
|
|
| 55 |
- |
|
| 56 |
- var uniquePhones = new Set(); |
|
| 57 |
- var duplicatePhones = []; |
|
| 58 |
- |
|
| 59 |
- phoneFields.forEach(phone => {
|
|
| 60 |
- if (uniquePhones.has(phone)) {
|
|
| 61 |
- duplicatePhones.push(phone); |
|
| 62 |
- } else {
|
|
| 63 |
- uniquePhones.add(phone); |
|
| 64 |
- } |
|
| 65 |
- }); |
|
| 66 |
- |
|
| 67 |
- $('#rowDupCnt').text(duplicatePhones.length);
|
|
| 68 |
- if (duplicatePhones.length > 0) {
|
|
| 69 |
- alert("중복된 휴대폰 번호가 있습니다: \n" + duplicatePhones.join(", "));
|
|
| 70 |
- } else {
|
|
| 71 |
-// alert("중복된 phone 필드 값이 없습니다.");
|
|
| 56 |
+ /** |
|
| 57 |
+ * @ 핸드폰 중복 데이터 |
|
| 58 |
+ * */ |
|
| 59 |
+ function fn_phoneDupl($objTabul) {
|
|
| 60 |
+ var data = $objTabul.getData(); |
|
| 61 |
+ var uniquePhones = new Set(); |
|
| 62 |
+ var dupliPhoneDataRealList = []; |
|
| 63 |
+ var rowsToKeep = []; |
|
| 64 |
+ var rowsToDelete = []; |
|
| 65 |
+ var phoneNumberChk = false; |
|
| 66 |
+ |
|
| 67 |
+ data.forEach((row, index) => {
|
|
| 68 |
+ |
|
| 69 |
+ if (!isValidKoreanPhoneNumber(phone)) {
|
|
| 70 |
+ phoneNumberChk = true |
|
| 71 |
+ return false; |
|
| 72 |
+ } |
|
| 73 |
+ |
|
| 74 |
+ if (uniquePhones.has(row.addrPhoneNo)) {
|
|
| 75 |
+ dupliPhoneDataRealList.push(row.addrPhoneNo); |
|
| 76 |
+ rowsToDelete.push(index); // 중복된 행의 인덱스를 기록 |
|
| 77 |
+ } else {
|
|
| 78 |
+ uniquePhones.add(row.addrPhoneNo); |
|
| 79 |
+ rowsToKeep.push(row); // 고유한 데이터만 추가 |
|
| 80 |
+ } |
|
| 81 |
+ }); |
|
| 82 |
+ |
|
| 83 |
+ if(phoneNumberChk){
|
|
| 84 |
+ alert('휴대폰 형식에 맞지 않는 데이터가 있습니다.\n 확인해 주세요');
|
|
| 85 |
+ } |
|
| 86 |
+ |
|
| 87 |
+ $('#rowDupCnt').text(dupliPhoneDataRealList.length);
|
|
| 88 |
+ |
|
| 89 |
+ if (dupliPhoneDataRealList.length > 0) {
|
|
| 90 |
+// alert("중복된 휴대폰 번호가 있습니다: \n" + duplicatePhones.join(", "));
|
|
| 91 |
+ makeAddrMassDupliPop(dupliPhoneDataRealList); |
|
| 92 |
+ } |
|
| 93 |
+ |
|
| 94 |
+ // 중복된 행 삭제 |
|
| 95 |
+ rowsToDelete.reverse().forEach(index => {
|
|
| 96 |
+ $objTabul.deleteRow(index); |
|
| 97 |
+ }); |
|
| 98 |
+ |
|
| 99 |
+ // 고유한 데이터만 남기고 테이블 업데이트 |
|
| 100 |
+ $objTabul.setData(rowsToKeep); |
|
| 72 | 101 |
} |
| 73 |
- } |
|
| 74 | 102 |
|
| 75 | 103 |
/* |
| 76 | 104 |
* 타이틀 select 선택할때마다 실행해서 |
... | ... | @@ -108,10 +136,59 @@ |
| 108 | 136 |
|
| 109 | 137 |
$objTabul.setColumns(columns); |
| 110 | 138 |
$objTabul.setData(updatedData); |
| 111 |
- |
|
| 112 |
- |
|
| 113 | 139 |
} |
| 140 |
+}); |
|
| 141 |
+ |
|
| 142 |
+ |
|
| 143 |
+function fn_loadAddActive(){
|
|
| 144 |
+ $('.loading_layer').addClass('active');
|
|
| 145 |
+} |
|
| 146 |
+ |
|
| 147 |
+function fn_loadRemoveActive(){
|
|
| 148 |
+ $('.loading_layer').removeClass('active');
|
|
| 149 |
+} |
|
| 150 |
+ |
|
| 151 |
+//중복 연락처 |
|
| 152 |
+function makeAddrMassDupliPop(dupliPhoneDataRealList) {
|
|
| 153 |
+ var sHtml = ""; |
|
| 154 |
+ sHtml += "<div class='' style='overflow-x:auto; height:350px;'>"; |
|
| 155 |
+ sHtml += "<table class='tType4'>"; |
|
| 156 |
+ sHtml += " <colgroup>"; |
|
| 157 |
+ sHtml += " <col style='width:auto' />"; |
|
| 158 |
+ sHtml += " </colgroup>"; |
|
| 159 |
+ sHtml += " <thead>"; |
|
| 160 |
+ sHtml += " <tr>"; |
|
| 161 |
+ sHtml += " <th>중복 휴대폰번호 (" + numberWithCommas(dupliPhoneDataRealList.length) + "개)</th>";
|
|
| 162 |
+ sHtml += " </tr>"; |
|
| 163 |
+ sHtml += " </thead>"; |
|
| 164 |
+ sHtml += " <tbody>"; |
|
| 165 |
+ for (var i = 0; i < dupliPhoneDataRealList.length; i++) {
|
|
| 166 |
+ sHtml += " <tr>"; |
|
| 167 |
+ sHtml += " <td>" + dupliPhoneDataRealList[i] + "</td>"; |
|
| 168 |
+ sHtml += " </tr>"; |
|
| 169 |
+ } |
|
| 170 |
+ sHtml += " </tbody>"; |
|
| 171 |
+ sHtml += " </table>"; |
|
| 172 |
+ sHtml += " </div>"; |
|
| 173 |
+ |
|
| 174 |
+ $("#addrMassDupli_layer").html(sHtml);
|
|
| 175 |
+ fn_dupliPopupShow(); |
|
| 114 | 176 |
|
| 115 |
- |
|
| 116 |
- |
|
| 117 |
-});(No newline at end of file) |
|
| 177 |
+} |
|
| 178 |
+ |
|
| 179 |
+function fn_dupliPopupShow(){
|
|
| 180 |
+ |
|
| 181 |
+ var showId = '#'+fn_utils_getTabulatorNm() |
|
| 182 |
+ console.log('showId : ', showId);
|
|
| 183 |
+ $(showId+'DupliBtn').show() |
|
| 184 |
+} |
|
| 185 |
+ |
|
| 186 |
+//한국의 핸드폰 번호 형식 검사 함수 |
|
| 187 |
+function isValidKoreanPhoneNumber(phone) {
|
|
| 188 |
+ // 하이픈(-)을 제거하고 숫자만 남긴 후 검사 |
|
| 189 |
+ var cleaned = phone.replace(/-/g, ''); |
|
| 190 |
+ // 010, 011, 016, 017, 018, 019로 시작하고 10~11자리인 경우 유효 |
|
| 191 |
+ var valid = /^(010|011|016|017|018|019)\d{7,8}$/.test(cleaned);
|
|
| 192 |
+ return valid; |
|
| 193 |
+} |
|
| 194 |
+ |
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?