--- src/main/webapp/WEB-INF/jsp/web/addr/AddrList.jsp
+++ src/main/webapp/WEB-INF/jsp/web/addr/AddrList.jsp
... | ... | @@ -13,6 +13,7 @@ |
| 13 | 13 |
<script type="text/javascript" src="<c:url value='/js/web/addr/init.js'/>?v="+currentTime></script> |
| 14 | 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 |
+<script type="text/javascript" src="<c:url value='/js/web/addr/cmn.js?date=202409021440'/>"></script> |
|
| 16 | 17 |
|
| 17 | 18 |
|
| 18 | 19 |
<script type="text/javascript"> |
... | ... | @@ -212,8 +213,16 @@ |
| 212 | 213 |
function setAddrMassClose() {
|
| 213 | 214 |
var $objTabul = fn_utils_getTabulator(); |
| 214 | 215 |
$objTabul.clearData(); |
| 216 |
+ |
|
| 217 |
+ fn_rowDataClear(); |
|
| 218 |
+ |
|
| 219 |
+ |
|
| 215 | 220 |
$("#rowTotCnt").text(0); //총건수 수정
|
| 216 | 221 |
$("#rowDupCnt").text(0); //중복건수 수정
|
| 222 |
+ $("#rowErrorCnt").text(0); //중복건수 수정
|
|
| 223 |
+ |
|
| 224 |
+ |
|
| 225 |
+ |
|
| 217 | 226 |
dupliPhoneDataRealList.length = 0; // 중복 휴대폰번호 초기화 |
| 218 | 227 |
addrMassDupliSaveList = null; |
| 219 | 228 |
|
... | ... | @@ -226,6 +235,31 @@ |
| 226 | 235 |
addrLoadAjax(); |
| 227 | 236 |
errorPopClean(); // 에러 팝업 초기화 |
| 228 | 237 |
} |
| 238 |
+ |
|
| 239 |
+// 주소록 탭마다 돌면서 총, 중복, 오류 건수 초기화 |
|
| 240 |
+function fn_rowDataClear(){
|
|
| 241 |
+ |
|
| 242 |
+ // 모든 .tab 요소를 선택하여 반복 |
|
| 243 |
+ $('#tbTabl .tab').each(function() {
|
|
| 244 |
+ // 현재 반복 중인 요소 |
|
| 245 |
+ var tab = $(this); |
|
| 246 |
+ |
|
| 247 |
+ // data-tabul 값 가져오기 |
|
| 248 |
+ var tabulNm = tab.data('tabul');
|
|
| 249 |
+ var tabluC = '.'+tabulNm |
|
| 250 |
+ |
|
| 251 |
+ // 중복 카운트 |
|
| 252 |
+ $(tabluC+" #rowTotCnt").text(0); |
|
| 253 |
+ // 에러 카운트 |
|
| 254 |
+ $(tabluC+" #rowDupCnt").text(0); |
|
| 255 |
+ // |
|
| 256 |
+ $(tabluC+" #rowErrorCnt").text(0); |
|
| 257 |
+ |
|
| 258 |
+ |
|
| 259 |
+ }); |
|
| 260 |
+} |
|
| 261 |
+ |
|
| 262 |
+ |
|
| 229 | 263 |
|
| 230 | 264 |
// 주소록 그룹 중복체크 |
| 231 | 265 |
function getAddrGroupDuplCheckAjax() {
|
... | ... | @@ -733,7 +767,7 @@ |
| 733 | 767 |
<li>ex) 발송불가 특수문자, 자릿수 오류 등</li> |
| 734 | 768 |
</ul> |
| 735 | 769 |
<div class="popup_btn_wrap2"> |
| 736 |
- <button type="button">저장</button> |
|
| 770 |
+<!-- <button type="button">저장</button> --> |
|
| 737 | 771 |
<button type="button" class="tooltip-close" data-focus="adr_popup14-close" data-focus-next="adr_popup14">닫기</button> |
| 738 | 772 |
</div> |
| 739 | 773 |
</div> |
--- src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforClipboard.jsp
+++ src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforClipboard.jsp
... | ... | @@ -396,15 +396,12 @@ |
| 396 | 396 |
<!-- 붙여넣기 --> |
| 397 | 397 |
<div class="popCont pop_more_cont" id="popCont_2"> |
| 398 | 398 |
<div class="titBox"> |
| 399 |
- <p>- 텍스트(txt) 파일로 작성된 주소록을 등록하실 수 있습니다.</p> |
|
| 400 |
- <p>- 반드시 샘플파일을 다운로드하여 작성방법을 확인하신 후 정해진 양식에 맞추어 주소록을 붙여 넣으셔야 합니다.</p> |
|
| 401 |
- <p>- 입력 내용은 (Tab) 또는 (,) 구분하여 입력하여야 합니다.</p> |
|
| 402 |
- <p>- 한 줄(열)에 주소 한 건만 입력 가능합니다.</p> |
|
| 403 |
- <p>- 전화번호 형태는 010-1234-5678 또는 01012345678 모두 가능합니다. 단, 공백은 허용되지 않습니다.</p> |
|
| 404 |
- <p> (예) 홍길동,010-1234-5678 또는 홍길동,01012345678</p> |
|
| 405 |
- <p>- 한번에 많은 양의 데이터를 입력하시려면 ‘주소록 복사(Ctrl+c) + 붙여넣기(Ctrl+v)’ 또는 ‘엑셀입력’을 이용하세요.</p> |
|
| 406 |
- <p>- 주소록 등록이 어려우신 경우에는 주소록 입력대행 메뉴를 이용하시면 됩니다.</p> |
|
| 407 |
- <button type="button" class="txt_btn" onclick="location.href='/download/addr/주소록_대량등록.zip'"><i></i>TXT샘플 다운로드</button> |
|
| 399 |
+ <p>- 엑셀(EXCEL), 텍스트(TXT) 파일로 작성된 주소록 내용을 복사하여 등록 가능합니다.</p> |
|
| 400 |
+ <p>- 많은 양의 데이터를 입력하시려면 ‘주소록 복사(Ctrl+C) + 붙여넣기(Ctrl+V)’를 이용해주세요.</p> |
|
| 401 |
+ <p>- 입력 내용은 (Tab) 또는 (,) 기호로 구분하여 입력하여야 합니다.</p> |
|
| 402 |
+ <p>- 이름 200byte, [*1*]~[*4*] 200byte, 메모 250byte까지 입력 가능합니다.</p> |
|
| 403 |
+ <p>- 주소록 등록이 어려우신 경우에는 <a href="<c:url value='/web/mjon/addragency/selectAddrAgencyList.do'/>" style="font-weight: bold; color: blue;">주소록 입력대행</a> 메뉴를 이용하실 수 있습니다. </p> |
|
| 404 |
+<!-- <button type="button" class="txt_btn" onclick="location.href='/download/addr/주소록_대량등록.zip'"><i></i>TXT샘플 다운로드</button> --> |
|
| 408 | 405 |
</div> |
| 409 | 406 |
<div class="pop_more_wrap"> |
| 410 | 407 |
<button type="button" class="pop_more" onclick="popMore(this);">더보기<i></i></button> |
... | ... | @@ -552,8 +549,8 @@ |
| 552 | 549 |
<div> |
| 553 | 550 |
<button type="button" class="all_del"><i class="remove_img"></i>전체삭제</button> |
| 554 | 551 |
<button type="button" class="select_del"><i class="remove_img"></i>선택삭제</button> |
| 555 |
- <button type="button" class="chkVali_del"><i class="remove_img"></i>오류번호삭제</button> |
|
| 556 |
- <button type="button" class="check_validity">오류 검사 <i></i></button> |
|
| 552 |
+<!-- <button type="button" class="chkVali_del"><i class="remove_img"></i>오류번호삭제</button> --> |
|
| 553 |
+<!-- <button type="button" class="check_validity">오류 검사 <i></i></button> --> |
|
| 557 | 554 |
<div class="error_hover_cont send_hover_cont addr_hover_cont"> |
| 558 | 555 |
<p>휴대폰 번호 입력 시 해당 휴대폰 번호에 대한 형식이 어긋나거나 휴대폰 번호에 오류가 있는지 등을 검사하는 기능</p> |
| 559 | 556 |
<span>(예시) 010-1234-0001(O) / 010-123-0001(X)</span> |
... | ... | @@ -564,12 +561,12 @@ |
| 564 | 561 |
</div><!--// 공통 --> |
| 565 | 562 |
|
| 566 | 563 |
<!-- 붙여놓기 설명 --> |
| 567 |
- <div class="req_area"> |
|
| 568 |
- <div class="text_box"> |
|
| 569 |
- - 휴대폰 번호가 입력된 txt 파일을 열어 복사(Ctrl+c) + 붙여넣기(Ctrl+v)로도 입력하실 수 있습니다.<br> |
|
| 570 |
- - 휴대폰 번호는 필수입력 항목입니다.<br> |
|
| 571 |
- - 이름,휴대폰 번호,[*1*],[*2*],[*3*],[*4*],메모 순서대로 입력해주세요.(예 : 010-1234-5678,홍길동,변수1…메모)<br> |
|
| 572 |
- - 이름은 24byte, [*1*]~[*4*] 40byte, 메모는 250byte까지 입력 가능합니다.<br> |
|
| 573 |
- - '오류 검사'를 통해 등록된 데이터에 전화번호 입력 오류를 확인하실 수 있습니다. |
|
| 574 |
- </div> |
|
| 575 |
- </div> |
|
| 564 |
+<!-- <div class="req_area"> --> |
|
| 565 |
+<!-- <div class="text_box"> --> |
|
| 566 |
+<!-- - 휴대폰 번호가 입력된 txt 파일을 열어 복사(Ctrl+c) + 붙여넣기(Ctrl+v)로도 입력하실 수 있습니다.<br> --> |
|
| 567 |
+<!-- - 휴대폰 번호는 필수입력 항목입니다.<br> --> |
|
| 568 |
+<!-- - 이름,휴대폰 번호,[*1*],[*2*],[*3*],[*4*],메모 순서대로 입력해주세요.(예 : 010-1234-5678,홍길동,변수1…메모)<br> --> |
|
| 569 |
+<!-- - 이름은 24byte, [*1*]~[*4*] 40byte, 메모는 250byte까지 입력 가능합니다.<br> --> |
|
| 570 |
+<!-- - '오류 검사'를 통해 등록된 데이터에 전화번호 입력 오류를 확인하실 수 있습니다. --> |
|
| 571 |
+<!-- </div> --> |
|
| 572 |
+<!-- </div> --> |
--- src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforExcel.jsp
+++ src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforExcel.jsp
... | ... | @@ -501,19 +501,12 @@ |
| 501 | 501 |
<!-- 엑셀입력 --> |
| 502 | 502 |
<div class="popCont current pop_more_cont" id="popCont_1"> |
| 503 | 503 |
<div class="titBox"> |
| 504 |
- <p>- 엑셀(EXCEL) 파일로 주소록을 한 번에 최대 2만건까지 등록하여 간편하게 발송 및 관리하실 수 있습니다.</p> |
|
| 505 |
- <p>- 반드시 샘플파일을 다운로드하여 작성방법을 확인하신 후 정해진 양식에 맞추어 주소록을 작성하셔야 합니다.</p> |
|
| 506 |
- <p> ※ 주소록 관리 메뉴에서 다운로드 받으신 엑셀 파일 또한 업로드 양식에 맞추어 작성하셔야 하며, </p> |
|
| 507 |
- <p> 주소록에 이미 등록된 휴대폰 번호는 업데이트 되지 않으므로 기존 주소록에서 해당 휴대폰 번호를 삭제한 후 재등록해 주시기 바랍니다.</p> |
|
| 508 |
- <p>- 쉼표(,), 구분선(|), 역슬래시(\, ₩), 작은따옴표('), 큰따옴표(") 등 발송불가 특수문자는 저장되지 않습니다.</p>
|
|
| 509 |
- <p>- 휴대폰 번호는 필수입력 항목입니다.</p> |
|
| 510 |
- <p>- 전화번호 형태는 010-1234-5678 또는 01012345678 모두 가능합니다. 단, 공백은 허용되지 않습니다.</p> |
|
| 504 |
+ <p>- 주소록은 한 번에 최대 30만건까지 등록(EXCEL파일, 최대용량 3MB) 가능합니다. </p> |
|
| 511 | 505 |
<p>- 엑셀 파일에 비밀번호 설정, 제한된 보기, 수식 등이 설정되어 있는 경우 업로드가 불가합니다.</p> |
| 512 |
- <p>- 이름 20byte, [*1*]~[*4*] 40byte, 메모 250byte까지 입력 가능합니다.</p> |
|
| 513 |
- <p>- 첨부가능 파일 : xlsx, xls(최대용량 3MB)</p> |
|
| 514 |
- <p>- ‘오류 검사’를 통해 등록된 데이터에 전화번호 입력 오류를 확인하실 수 있습니다.</p> |
|
| 515 |
- <p>- 주소록 등록이 어려우신 경우에는 주소록 입력대행 메뉴를 이용하시면 됩니다.</p> |
|
| 516 |
- <button type="button" class="excel_btn" onclick="location.href='/download/addr/주소록_대량등록.xlsx'"><i class="downroad"></i>샘플파일 다운로드</button> |
|
| 506 |
+ <p>- 구분선(|), 역슬래시(\, ₩), 큰따옴표(") 등 발송불가 특수문자는 저장되지 않습니다.</p>
|
|
| 507 |
+ <p>- 이름 200byte, [*1*]~[*4*] 200byte, 메모 250byte까지 입력 가능합니다.</p> |
|
| 508 |
+ <p>- 주소록 등록이 어려우신 경우에는 <a href="<c:url value='/web/mjon/addragency/selectAddrAgencyList.do'/>" style="font-weight: bold; color: blue;">주소록 입력대행</a> 메뉴를 이용하실 수 있습니다. </p> |
|
| 509 |
+<!-- <button type="button" class="excel_btn" onclick="location.href='/download/addr/주소록_대량등록.xlsx'"><i class="downroad"></i>샘플파일 다운로드</button> --> |
|
| 517 | 510 |
</div> |
| 518 | 511 |
<div class="pop_more_wrap"> |
| 519 | 512 |
<button type="button" class="pop_more" onclick="popMore(this);">더보기<i></i></button> |
... | ... | @@ -674,8 +667,8 @@ |
| 674 | 667 |
<div> |
| 675 | 668 |
<button type="button" class="all_del"><i class="remove_img"></i>전체삭제</button> |
| 676 | 669 |
<button type="button" class="select_del"><i class="remove_img"></i>선택삭제</button> |
| 677 |
- <button type="button" class="chkVali_del"><i class="remove_img"></i>오류번호삭제</button> |
|
| 678 |
- <button type="button" class="check_validity">오류 검사 <i></i></button> |
|
| 670 |
+<!-- <button type="button" class="chkVali_del"><i class="remove_img"></i>오류번호삭제</button> --> |
|
| 671 |
+<!-- <button type="button" class="check_validity">오류 검사 <i></i></button> --> |
|
| 679 | 672 |
<div class="error_hover_cont send_hover_cont addr_hover_cont"> |
| 680 | 673 |
<p>휴대폰 번호 입력 시 해당 휴대폰 번호에 대한 형식이 어긋나거나 휴대폰 번호에 오류가 있는지 등을 검사하는 기능</p> |
| 681 | 674 |
<span>(예시) 010-1234-0001(O) / 010-123-0001(X)</span> |
... | ... | @@ -686,12 +679,12 @@ |
| 686 | 679 |
</div><!--// 공통 --> |
| 687 | 680 |
|
| 688 | 681 |
<!-- 붙여놓기 설명 --> |
| 689 |
- <div class="req_area"> |
|
| 690 |
- <div class="text_box"> |
|
| 691 |
- - 휴대폰 번호가 입력된 txt 파일을 열어 복사(Ctrl+c) + 붙여넣기(Ctrl+v)로도 입력하실 수 있습니다.<br> |
|
| 692 |
- - 휴대폰 번호는 필수입력 항목입니다.<br> |
|
| 693 |
- - 이름,휴대폰 번호,[*1*],[*2*],[*3*],[*4*],메모 순서대로 입력해주세요.(예 : 010-1234-5678,홍길동,변수1…메모)<br> |
|
| 694 |
- - 이름은 24byte, [*1*]~[*4*] 40byte, 메모는 250byte까지 입력 가능합니다.<br> |
|
| 695 |
- - '오류 검사'를 통해 등록된 데이터에 전화번호 입력 오류를 확인하실 수 있습니다. |
|
| 696 |
- </div> |
|
| 697 |
- </div> |
|
| 682 |
+<!-- <div class="req_area"> --> |
|
| 683 |
+<!-- <div class="text_box"> --> |
|
| 684 |
+<!-- - 휴대폰 번호가 입력된 txt 파일을 열어 복사(Ctrl+c) + 붙여넣기(Ctrl+v)로도 입력하실 수 있습니다.<br> --> |
|
| 685 |
+<!-- - 휴대폰 번호는 필수입력 항목입니다.<br> --> |
|
| 686 |
+<!-- - 이름,휴대폰 번호,[*1*],[*2*],[*3*],[*4*],메모 순서대로 입력해주세요.(예 : 010-1234-5678,홍길동,변수1…메모)<br> --> |
|
| 687 |
+<!-- - 이름은 24byte, [*1*]~[*4*] 40byte, 메모는 250byte까지 입력 가능합니다.<br> --> |
|
| 688 |
+<!-- - '오류 검사'를 통해 등록된 데이터에 전화번호 입력 오류를 확인하실 수 있습니다. --> |
|
| 689 |
+<!-- </div> --> |
|
| 690 |
+<!-- </div> --> |
--- src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforSelf.jsp
+++ src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforSelf.jsp
... | ... | @@ -7,341 +7,11 @@ |
| 7 | 7 |
<script type="text/javascript" src="<c:url value='/publish/js/content.js'/>"></script> |
| 8 | 8 |
|
| 9 | 9 |
<script type="text/javascript"> |
| 10 |
-$(document).ready(function(){
|
|
| 11 |
- |
|
| 12 |
- // 중복 휴대폰번호 버튼 노출여부 |
|
| 13 |
-// $("#btnAddrMassDupli").hide();
|
|
| 14 |
-// $("#btnAddrMassSaveDupli").hide();
|
|
| 15 |
- |
|
| 16 |
- |
|
| 17 |
-}); |
|
| 18 |
- |
|
| 19 |
- |
|
| 20 |
- |
|
| 21 |
- |
|
| 22 |
-function addrGroupLoadAjax(){
|
|
| 23 |
- $("#addrRegistSelect").load("/web/addr/selectAddrGroupAjax.do", function(response, status, xhr){});
|
|
| 24 |
- $("#funcAddrGroupSelect").load("/web/addr/selectAddrGroupAjax.do", function(response, status, xhr){});
|
|
| 25 |
-} |
|
| 26 |
- |
|
| 27 |
- |
|
| 28 |
-function insertAddrGroupAjax() {
|
|
| 29 |
- var form = document.addrGrpInsertForm; |
|
| 30 |
- if(form.addrGrpNm.value == "") {
|
|
| 31 |
- alert("주소록 그룹명을 입력해주세요.");
|
|
| 32 |
- return; |
|
| 33 |
- } |
|
| 34 |
- if(!confirm("주소록 그룹을 추가하시겠습니까?")) {
|
|
| 35 |
- return; |
|
| 36 |
- } |
|
| 37 |
- var data = new FormData(form); |
|
| 38 |
- |
|
| 39 |
- $.ajax({
|
|
| 40 |
- cache : false, |
|
| 41 |
- url : "<c:url value='/web/addr/insertAddrGroupAjax.do' />", |
|
| 42 |
- type : 'POST', |
|
| 43 |
- data : data, |
|
| 44 |
- dataType:'json', |
|
| 45 |
- processData: false, |
|
| 46 |
- contentType: false, |
|
| 47 |
- success : function(returnData, status){
|
|
| 48 |
- if(status == "success") {
|
|
| 49 |
- if("fail"==returnData.result){
|
|
| 50 |
- alert(returnData.message); |
|
| 51 |
- return; |
|
| 52 |
- } else if("dupl"==returnData.result) {
|
|
| 53 |
- alert("중복된 그룹명입니다.");
|
|
| 54 |
- return; |
|
| 55 |
- } |
|
| 56 |
- alert("등록되었습니다.");
|
|
| 57 |
- listAddrGrp(); |
|
| 58 |
- addrGroupLoadAjax(); |
|
| 59 |
- |
|
| 60 |
- }else{ alert("ERROR!");return;}
|
|
| 61 |
- }, |
|
| 62 |
- error: function (e) { alert("저장에 실패하였습니다."); console.log("ERROR : ", e); }
|
|
| 63 |
- }); |
|
| 64 |
- |
|
| 65 |
-} |
|
| 66 |
- |
|
| 67 |
-function insertAddrAjax() {
|
|
| 68 |
- var selectVal = $("#addrRegistSelect option:selected").val();
|
|
| 69 |
- //alert(selectVal); |
|
| 70 |
- |
|
| 71 |
- var form = document.addrInsertForm; |
|
| 72 |
- /* |
|
| 73 |
- //필수값 아니어서 뺐음 |
|
| 74 |
- if(form.addrNm.value == "") {
|
|
| 75 |
- alert("주소록 이름을 입력하세요");
|
|
| 76 |
- return; |
|
| 77 |
- } |
|
| 78 |
- */ |
|
| 79 |
- if(form.addrPhoneNo.value == "") {
|
|
| 80 |
- alert("주소록 번호를 입력하세요");
|
|
| 81 |
- return; |
|
| 82 |
- } |
|
| 83 |
- //if(!confirm("주소록을 추가하시겠습니까?")) {
|
|
| 84 |
- // return; |
|
| 85 |
- //} |
|
| 86 |
- |
|
| 87 |
- if(!checkHpNum(form.addrPhoneNo.value)){//휴대폰 유효성 검사
|
|
| 88 |
- if(!checkNorPhoneNum(form.addrPhoneNo.value)){//일반전화 유효성 검사
|
|
| 89 |
- |
|
| 90 |
- alert("잘못된 휴대폰번호 또는 일반전화 번호 입니다.");
|
|
| 91 |
- return false; |
|
| 92 |
- |
|
| 93 |
- } |
|
| 94 |
- |
|
| 95 |
- } |
|
| 96 |
- |
|
| 97 |
- var data = new FormData(form); |
|
| 98 |
- |
|
| 99 |
- $.ajax({
|
|
| 100 |
- cache : false, |
|
| 101 |
- url : "<c:url value='/web/mjon/addr/insertAddrAjax.do' />", |
|
| 102 |
- type : 'POST', |
|
| 103 |
- data : data, |
|
| 104 |
- dataType:'json', |
|
| 105 |
- processData: false, |
|
| 106 |
- contentType: false, |
|
| 107 |
- success : function(returnData, status){
|
|
| 108 |
- if(status == "success") {
|
|
| 109 |
- if("fail"==returnData.result){
|
|
| 110 |
- alert(returnData.message); |
|
| 111 |
- return; |
|
| 112 |
- } else if("dupl"==returnData.result){
|
|
| 113 |
- alert("해당 그룹에 중복된 번호가 있습니다.");
|
|
| 114 |
- return; |
|
| 115 |
- } |
|
| 116 |
- //alert("저장 되었습니다.");
|
|
| 117 |
- |
|
| 118 |
- listAddrGrp(); |
|
| 119 |
- addrGroupLoadAjax(); |
|
| 120 |
- addrLoadAjax(); |
|
| 121 |
- |
|
| 122 |
- // 주소록그룹 콤보박스 유지 |
|
| 123 |
- setTimeout(setSelectSetting, 500, selectVal); |
|
| 124 |
- |
|
| 125 |
- }else{ alert("ERROR!");return;}
|
|
| 126 |
- }, |
|
| 127 |
- error: function (e) { alert("저장에 실패하였습니다."); console.log("ERROR : ", e); }
|
|
| 128 |
- }); |
|
| 129 |
- |
|
| 130 |
-} |
|
| 131 |
- |
|
| 132 |
-// 주소록그룹 콤보박스 유지 |
|
| 133 |
-function setSelectSetting(selectVal) {
|
|
| 134 |
- $("#addrRegistSelect").val(selectVal).prop("selected", true);
|
|
| 135 |
-} |
|
| 136 |
- |
|
| 137 |
-function linkPage(pageNo){
|
|
| 138 |
- if ($('#searchKeywordAddr').val() != "" && $('#searchKeywordAddr').val() != null && $('#searchKeywordAddr').val() != undefined) {
|
|
| 139 |
- // 문자전송 검색용 |
|
| 140 |
- $("#msgStartKeyword").val("");
|
|
| 141 |
- } |
|
| 142 |
- |
|
| 143 |
- var searchForm = document.searchAddrForm; |
|
| 144 |
- searchForm.pageIndex.value = pageNo; |
|
| 145 |
- searchForm.pageUnit.value = $('#pageUnit').val();
|
|
| 146 |
- searchForm.searchCondition.value = $('#searchConditionAddr').val();
|
|
| 147 |
- searchForm.searchKeyword.value = $('#searchKeywordAddr').val();
|
|
| 148 |
- searchForm.startKeyword.value = $("#msgStartKeyword").val();
|
|
| 149 |
- |
|
| 150 |
- var sendData = $(document.searchAddrForm).serializeArray(); |
|
| 151 |
- $("#adr1_right").load("/web/mjon/addr/selectAddrAjax.do", sendData, function(response, status, xhr){tableAllChk();});
|
|
| 152 |
- addrGroupLoadAjax(); |
|
| 153 |
-} |
|
| 154 |
- |
|
| 155 |
- |
|
| 156 |
- |
|
| 157 |
-//############################################################################################# |
|
| 158 |
-//Tabulator |
|
| 159 |
-//############################################################################################# |
|
| 160 | 10 |
|
| 161 | 11 |
$(document).ready(function(){
|
| 162 | 12 |
//Tabulator AJAX Data Loading |
| 163 |
- |
|
| 164 |
- // 파일 선택 버튼 클릭 이벤트 |
|
| 165 |
- $("#file-load-trigger").on("click", function() {
|
|
| 166 |
- $("#excelFile").click();
|
|
| 167 |
- }); |
|
| 168 |
- |
|
| 169 |
- |
|
| 170 |
- //받는사람 오류번호 삭제 처리해주기 |
|
| 171 |
- $('.chkVali_del').click(function(){
|
|
| 172 |
- //기존 연락처 모두 불러오기 |
|
| 173 |
- var data = $tableClip.getRows(); |
|
| 174 |
- var tableData = []; |
|
| 175 |
- var totLen = $tableClip.getRows().length; |
|
| 176 |
- var errCnt = 0; |
|
| 177 |
- |
|
| 178 |
- if(totLen > 0){
|
|
| 179 |
- if(confirm("올바르지 않은 연락처 정보를 삭제 하시겠습니까?")){
|
|
| 180 |
- for(var i=0; i < totLen; i++){
|
|
| 181 |
- |
|
| 182 |
- |
|
| 183 |
- var phone = data[i].getData().phone; |
|
| 184 |
- var valiCheck = checkHpNum(phone); |
|
| 185 |
- if(valiCheck){
|
|
| 186 |
- tableData.push({name: data[i].getData().name.trim(), phone: data[i].getData().phone.trim(), info1:data[i].getData().info1, info2:data[i].getData().info2, info3:data[i].getData().info3, info4:data[i].getData().info4, memo:data[i].getData().memo});
|
|
| 187 |
- }else{
|
|
| 188 |
- errCnt++; |
|
| 189 |
- } |
|
| 190 |
- } |
|
| 191 |
- |
|
| 192 |
- var removeDuplData = dupliPhoneData(tableData); |
|
| 193 |
- |
|
| 194 |
-// $tableClip.setData(removeDuplData); |
|
| 195 |
- |
|
| 196 |
- //총 받는사람 수 계산 |
|
| 197 |
- totRows = $tableClip.getRows().length; |
|
| 198 |
- updateTotCnt(totRows); |
|
| 199 |
- |
|
| 200 |
- if(errCnt > 0){
|
|
| 201 |
- alert(errCnt + " 건의 연락처를 삭제하였습니다."); |
|
| 202 |
- return false; |
|
| 203 |
- }else{
|
|
| 204 |
- alert("오류가 있는 연락처가 없습니다.");
|
|
| 205 |
- } |
|
| 206 |
- } |
|
| 207 |
- }else{
|
|
| 208 |
- alert("연락처 정보를 입력해 주세요.");
|
|
| 209 |
- return false; |
|
| 210 |
- } |
|
| 211 |
- }); |
|
| 212 | 13 |
|
| 213 | 14 |
|
| 214 |
- |
|
| 215 |
- |
|
| 216 |
- |
|
| 217 |
- // 오류검사 항목 중복제거 |
|
| 218 |
- function SetTableErrorDupliCheck(sVal) {
|
|
| 219 |
- var isDuplicate = false; |
|
| 220 |
- if (tableErrorCheckData.length == 0) {
|
|
| 221 |
- tableErrorCheckData.push(sVal); |
|
| 222 |
- } |
|
| 223 |
- else {
|
|
| 224 |
- for (var i = 0; i < tableErrorCheckData.length; i++) |
|
| 225 |
- {
|
|
| 226 |
- if (tableErrorCheckData[i] == sVal) {
|
|
| 227 |
- isDuplicate = true; |
|
| 228 |
- } |
|
| 229 |
- } |
|
| 230 |
- |
|
| 231 |
- if (isDuplicate) {
|
|
| 232 |
- return; |
|
| 233 |
- } |
|
| 234 |
- else {
|
|
| 235 |
- tableErrorCheckData.push(sVal); |
|
| 236 |
- } |
|
| 237 |
- } |
|
| 238 |
- } |
|
| 239 |
- |
|
| 240 |
- |
|
| 241 |
- // 오류검사 항목 중복제거 |
|
| 242 |
- function SetTableErrorDupliCheck(sVal) {
|
|
| 243 |
- var isDuplicate = false; |
|
| 244 |
- if (tableErrorCheckData.length == 0) {
|
|
| 245 |
- tableErrorCheckData.push(sVal); |
|
| 246 |
- } |
|
| 247 |
- else {
|
|
| 248 |
- for (var i = 0; i < tableErrorCheckData.length; i++) |
|
| 249 |
- {
|
|
| 250 |
- if (tableErrorCheckData[i] == sVal) {
|
|
| 251 |
- isDuplicate = true; |
|
| 252 |
- } |
|
| 253 |
- } |
|
| 254 |
- |
|
| 255 |
- if (isDuplicate) {
|
|
| 256 |
- return; |
|
| 257 |
- } |
|
| 258 |
- else {
|
|
| 259 |
- tableErrorCheckData.push(sVal); |
|
| 260 |
- } |
|
| 261 |
- } |
|
| 262 |
- } |
|
| 263 |
- |
|
| 264 |
- $('.check_validity').click(function(){
|
|
| 265 |
- tableErrorCheckData.length = 0; // 오류 번호 배열 초기화 |
|
| 266 |
- |
|
| 267 |
- var data = $tableClip.getRows(); |
|
| 268 |
- var invalid = $tableClip.getInvalidCells(); //오류 데이터 체크 |
|
| 269 |
- var dataLen = $tableClip.getRows().length; //연락처 데이터 갯수 |
|
| 270 |
- var totLen = invalid.length; //오류 데이터 갯수 |
|
| 271 |
- var errMsg = ""; //최종 alert에 표시할 메시지 저장 변수 |
|
| 272 |
- |
|
| 273 |
- if(dataLen > 0) { //연락처 정보가 있으면 수행
|
|
| 274 |
- if(totLen > 0) { //내용에 오류가 있으면 수행
|
|
| 275 |
- //오류 데이터 값 저장 |
|
| 276 |
- for(var i=0; i < totLen; i++) {
|
|
| 277 |
- var cellValue = invalid[i].getValue(); |
|
| 278 |
- SetTableErrorDupliCheck(cellValue); |
|
| 279 |
- } |
|
| 280 |
- |
|
| 281 |
- for(var i=0; i < dataLen; i++){
|
|
| 282 |
- // 휴대폰번호 체크 |
|
| 283 |
- var phone = data[i].getData().phone; |
|
| 284 |
- var valiCheck = checkHpNum(phone); |
|
| 285 |
- if(!valiCheck){
|
|
| 286 |
- SetTableErrorDupliCheck(phone); |
|
| 287 |
- } |
|
| 288 |
- } |
|
| 289 |
- } |
|
| 290 |
- else {
|
|
| 291 |
- for(var i=0; i < dataLen; i++){
|
|
| 292 |
- // 휴대폰번호 체크 |
|
| 293 |
- var phone = data[i].getData().phone; |
|
| 294 |
- var valiCheck = checkHpNum(phone); |
|
| 295 |
- if(!valiCheck){
|
|
| 296 |
- SetTableErrorDupliCheck(phone); |
|
| 297 |
- } |
|
| 298 |
- } |
|
| 299 |
- } |
|
| 300 |
- } |
|
| 301 |
- else {
|
|
| 302 |
- alert("연락처를 입력해 주세요.");
|
|
| 303 |
- return false; |
|
| 304 |
- } |
|
| 305 |
- |
|
| 306 |
- if (tableErrorCheckData.length > 0) {
|
|
| 307 |
- for (var i = 0; i < tableErrorCheckData.length; i++) |
|
| 308 |
- {
|
|
| 309 |
- errMsg += tableErrorCheckData[i]; |
|
| 310 |
- if ((tableErrorCheckData.length - 1) > i) {
|
|
| 311 |
- errMsg += ", "; |
|
| 312 |
- } |
|
| 313 |
- } |
|
| 314 |
- alert(errMsg + "의 내용에 오류가 있습니다."); |
|
| 315 |
- } |
|
| 316 |
- else {
|
|
| 317 |
- alert("오류 데이터가 없습니다.");
|
|
| 318 |
- } |
|
| 319 |
- |
|
| 320 |
- return false; |
|
| 321 |
- }); |
|
| 322 |
- |
|
| 323 |
- |
|
| 324 |
- |
|
| 325 |
- //받는사람 중복 삭제 |
|
| 326 |
- $('.duple_del').click(function(){
|
|
| 327 |
- //기존 연락처 모두 불러오기 |
|
| 328 |
- var data = $tableClip.getRows(); |
|
| 329 |
- var tableData = []; |
|
| 330 |
- var dpCnt = 0; |
|
| 331 |
- var totLen = $tableClip.getRows().length; |
|
| 332 |
- |
|
| 333 |
- for(var i=0; i < totLen; i++){
|
|
| 334 |
- tableData.push({name: data[i].getData().name.trim(), phone: data[i].getData().phone.trim()});
|
|
| 335 |
- } |
|
| 336 |
- |
|
| 337 |
- var removeDuplData = dupliPhoneData(tableData); |
|
| 338 |
-// $tableClip.setData(removeDuplData); |
|
| 339 |
- |
|
| 340 |
- //총 받는사람 수 계산 |
|
| 341 |
- totRows = $tableClip.getRows().length; |
|
| 342 |
- updateTotCnt(totRows); |
|
| 343 |
- }); |
|
| 344 |
- |
|
| 345 | 15 |
|
| 346 | 16 |
}); |
| 347 | 17 |
|
... | ... | @@ -369,74 +39,40 @@ |
| 369 | 39 |
}); |
| 370 | 40 |
|
| 371 | 41 |
|
| 42 |
+function fn_selfUpdataCount(){
|
|
| 372 | 43 |
|
| 373 |
-// 중복 연락처 |
|
| 374 |
-function GetAddrMassDupli() {
|
|
| 375 |
- var sHtml = ""; |
|
| 376 |
- sHtml += "<div class='' style='overflow-x:auto; height:350px;'>"; |
|
| 377 |
- sHtml += "<table class='tType4'>"; |
|
| 378 |
- sHtml += " <colgroup>"; |
|
| 379 |
- sHtml += " <col style='width:auto' />"; |
|
| 380 |
- sHtml += " </colgroup>"; |
|
| 381 |
- sHtml += " <thead>"; |
|
| 382 |
- sHtml += " <tr>"; |
|
| 383 |
- sHtml += " <th>중복 휴대폰번호 (" + numberWithCommas(dupliPhoneDataRealList.length) + "개)</th>";
|
|
| 384 |
- sHtml += " </tr>"; |
|
| 385 |
- sHtml += " </thead>"; |
|
| 386 |
- sHtml += " <tbody>"; |
|
| 387 |
- for (var i = 0; i < dupliPhoneDataRealList.length; i++) {
|
|
| 388 |
- sHtml += " <tr>"; |
|
| 389 |
- sHtml += " <td>" + dupliPhoneDataRealList[i] + "</td>"; |
|
| 390 |
- sHtml += " </tr>"; |
|
| 391 |
- } |
|
| 392 |
- sHtml += " </tbody>"; |
|
| 393 |
- sHtml += " </table>"; |
|
| 394 |
- sHtml += " </div>"; |
|
| 44 |
+ // '휴대폰' 필드의 셀들 가져오기 |
|
| 45 |
+ var cells = $tableSelf.getColumn("addrPhoneNo").getCells();
|
|
| 395 | 46 |
|
| 396 |
- $("#addrMassDupli_layer").html(sHtml);
|
|
| 47 |
+ // 값이 있는 셀만 필터링하여 개수 카운트 |
|
| 48 |
+ var count = cells.filter(function(cell) {
|
|
| 49 |
+ var value = cell.getValue(); |
|
| 50 |
+ console.log('cell value: ', value);
|
|
| 51 |
+ return value !== "" && value !== undefined; // 빈 문자열과 undefined가 아닌 경우 |
|
| 52 |
+ }).length; |
|
| 53 |
+ |
|
| 54 |
+ console.log("휴대폰 번호가 있는 행 수: " + count);
|
|
| 55 |
+ |
|
| 56 |
+ var tabulNm = fn_utils_getTabulatorNm(); |
|
| 57 |
+ var tabluC = '.'+tabulNm |
|
| 58 |
+ |
|
| 59 |
+ $(tabluC+" #rowTotCnt").text(count); |
|
| 60 |
+ return ; |
|
| 397 | 61 |
} |
| 398 | 62 |
|
| 399 |
-//중복 연락처 => 저장시 |
|
| 400 |
-function GetAddrMassSaveDupli() {
|
|
| 401 |
- var sHtml = ""; |
|
| 402 |
- sHtml += "<div class='' style='overflow-x:auto; height:350px;'>"; |
|
| 403 |
- sHtml += "<table class='tType4'>"; |
|
| 404 |
- sHtml += " <colgroup>"; |
|
| 405 |
- sHtml += " <col style='width:auto' />"; |
|
| 406 |
- sHtml += " </colgroup>"; |
|
| 407 |
- sHtml += " <thead>"; |
|
| 408 |
- sHtml += " <tr>"; |
|
| 409 |
-// sHtml += " <th>중복 휴대폰번호 (" + numberWithCommas(addrMassDupliSaveList.length) + "개)</th>";
|
|
| 410 |
- sHtml += " <th>중복 휴대폰번호 (10개)</th>"; |
|
| 411 |
- sHtml += " </tr>"; |
|
| 412 |
- sHtml += " </thead>"; |
|
| 413 |
- sHtml += " <tbody>"; |
|
| 414 |
- for (var i = 0; i < addrMassDupliSaveList.length; i++) {
|
|
| 415 |
- sHtml += " <tr>"; |
|
| 416 |
- sHtml += " <td>" + addrMassDupliSaveList[i].addrPhoneNo + "</td>"; |
|
| 417 |
- sHtml += " </tr>"; |
|
| 418 |
- } |
|
| 419 |
- sHtml += " </tbody>"; |
|
| 420 |
- sHtml += " </table>"; |
|
| 421 |
- sHtml += " </div>"; |
|
| 422 |
- |
|
| 423 |
- $("#addrMassSaveDupli_layer").html(sHtml);
|
|
| 424 |
-} |
|
| 63 |
+ |
|
| 425 | 64 |
|
| 426 | 65 |
</script> |
| 427 | 66 |
|
| 428 | 67 |
<!-- 붙여넣기 --> |
| 429 |
- <div class="popCont pop_more_cont" id="popCont_2"> |
|
| 68 |
+ <div class="popCont pop_more_cont" id="popCont_3"> |
|
| 430 | 69 |
<div class="titBox"> |
| 431 |
- <p>- 텍스트(txt) 파일로 작성된 주소록을 등록하실 수 있습니다.</p> |
|
| 432 |
- <p>- 반드시 샘플파일을 다운로드하여 작성방법을 확인하신 후 정해진 양식에 맞추어 주소록을 붙여 넣으셔야 합니다.</p> |
|
| 433 |
- <p>- 입력 내용은 (Tab) 또는 (,) 구분하여 입력하여야 합니다.</p> |
|
| 434 |
- <p>- 한 줄(열)에 주소 한 건만 입력 가능합니다.</p> |
|
| 435 |
- <p>- 전화번호 형태는 010-1234-5678 또는 01012345678 모두 가능합니다. 단, 공백은 허용되지 않습니다.</p> |
|
| 436 |
- <p> (예) 홍길동,010-1234-5678 또는 홍길동,01012345678</p> |
|
| 437 |
- <p>- 한번에 많은 양의 데이터를 입력하시려면 ‘주소록 복사(Ctrl+c) + 붙여넣기(Ctrl+v)’ 또는 ‘엑셀입력’을 이용하세요.</p> |
|
| 438 |
- <p>- 주소록 등록이 어려우신 경우에는 주소록 입력대행 메뉴를 이용하시면 됩니다.</p> |
|
| 439 |
- <button type="button" class="txt_btn" onclick="location.href='/download/addr/주소록_대량등록.zip'"><i></i>TXT샘플 다운로드</button> |
|
| 70 |
+ <p>- 엑셀(EXCEL), 텍스트(TXT) 파일로 작성된 주소록 내용을 복사하여 등록 가능합니다.</p> |
|
| 71 |
+ <p>- 많은 양의 데이터를 입력하시려면 ‘주소록 복사(Ctrl+C) + 붙여넣기(Ctrl+V)’를 이용해주세요.</p> |
|
| 72 |
+ <p>- 입력 내용은 (Tab) 또는 (,) 기호로 구분하여 입력하여야 합니다.</p> |
|
| 73 |
+ <p>- 이름 200byte, [*1*]~[*4*] 200byte, 메모 250byte까지 입력 가능합니다.</p> |
|
| 74 |
+ <p>- 주소록 등록이 어려우신 경우에는 <a href="<c:url value='/web/mjon/addragency/selectAddrAgencyList.do'/>" style="font-weight: bold; color: blue;">주소록 입력대행</a> 메뉴를 이용하실 수 있습니다. </p> |
|
| 75 |
+<!-- <button type="button" class="txt_btn" onclick="location.href='/download/addr/주소록_대량등록.zip'"><i></i>TXT샘플 다운로드</button> --> |
|
| 440 | 76 |
</div> |
| 441 | 77 |
<div class="pop_more_wrap"> |
| 442 | 78 |
<button type="button" class="pop_more" onclick="popMore(this);">더보기<i></i></button> |
... | ... | @@ -464,129 +100,33 @@ |
| 464 | 100 |
<!-- <input type="file" id="excelFile" accept=".xls, .xlsx, .txt" onchange="excelExport(event); return false;" style="display:none"/> --> |
| 465 | 101 |
<input type="file" id="excelFile" accept=".xls, .xlsx, .txt" style="display:none"/> |
| 466 | 102 |
<!-- <button type="button" id="file-load-trigger">Choose File</button> --> |
| 467 |
- <button type="button" class="excel_btn2 btnType c3"><i class="uproad"></i>엑셀, TXT파일 업로드</button> |
|
| 103 |
+<!-- <button type="button" class="excel_btn2 btnType c3"><i class="uproad"></i>엑셀, TXT파일 업로드</button> --> |
|
| 468 | 104 |
</td> |
| 469 | 105 |
</tr> |
| 470 | 106 |
</tbody> |
| 471 | 107 |
</table> |
| 472 | 108 |
</div> |
| 473 |
- <div class="file_add upload_area"> |
|
| 474 |
- <p><img src="/publish/images/content/file_add.png" alt="파일 붙여넣기">마우스로 엑셀, TXT파일을 여기에 끌어다 놓으세요</p> |
|
| 475 |
- </div> |
|
| 109 |
+ |
|
| 476 | 110 |
<div class="excel_middle2"> |
| 477 | 111 |
<p> |
| 478 |
- 총 <span class="c_e40000 fwBold" id="rowTotCnt">0</span>건 / 중복 <span class="c_002c9a fwBold" id="rowDupCnt">0</span>건 |
|
| 112 |
+ 총 <span class="c_e40000 fwBold" id="rowTotCnt">0</span>건 |
|
| 113 |
+ / 중복 <span class="c_002c9a fwBold" id="rowDupCnt">0</span>건 |
|
| 114 |
+ / 오류 <span class="c_002c9a fwBold" id="rowErrorCnt">0</span>건 |
|
| 115 |
+ <button type="button" class="btn_list_detail" data-tooltip="adr_popup14"><img src="/publish/images/search.png"></button> |
|
| 479 | 116 |
<!-- --> |
| 480 |
- <button type="button" class="btnType btnType6" data-tooltip="addrMassDupli_layer" id="tableSelfDupliBtn">중복번호</button> |
|
| 117 |
+<!-- <button type="button" class="btnType btnType6" data-tooltip="addrMassDupli_layer" id="tableSelfDupliBtn">중복번호</button> --> |
|
| 481 | 118 |
<!-- <button type="button" class="btnType btnType6" data-tooltip="addrMassDupli_layer" onclick="GetAddrMassDupli()" id="btnAddrMassDupli">중복번호</button> --> |
| 482 | 119 |
<!-- --> |
| 483 | 120 |
<!-- <button type="button" class="btnType btnType6" data-tooltip="addrMassSaveDupli_layer" onclick="GetAddrMassSaveDupli()" id="btnAddrMassSaveDupli">중복번호</button> --> |
| 484 | 121 |
</p> |
| 485 |
- <button type="button" class="btnType btnType6 addCallToF">번호추가</button> |
|
| 122 |
+<!-- <button type="button" class="btnType btnType6 addCallToF">번호추가</button> --> |
|
| 486 | 123 |
</div> |
| 487 | 124 |
|
| 488 | 125 |
|
| 489 | 126 |
|
| 490 | 127 |
|
| 491 |
- <div class="adr_excel" style="margin-top: 13px;"> |
|
| 492 |
- <!-- thead --> |
|
| 493 |
- <div class="adr_hd select_adr_hd" data-group="tabulClip"> |
|
| 494 |
- <div></div> |
|
| 495 |
- <div style="width: 125px;"> |
|
| 496 |
- <label for="" class="label"></label> |
|
| 497 |
- <select class="field-selector"> |
|
| 498 |
- <option value="">선택하기</option> |
|
| 499 |
- <option value="addrNm">이름</option> |
|
| 500 |
- <option value="addrPhoneNo">휴대폰</option> |
|
| 501 |
- <option value="addrInfo1">[*1*]</option> |
|
| 502 |
- <option value="addrInfo2">[*2*]</option> |
|
| 503 |
- <option value="addrInfo3">[*3*]</option> |
|
| 504 |
- <option value="addrInfo4">[*4*]</option> |
|
| 505 |
- <option value="addrComment">메모</option> |
|
| 506 |
- </select> |
|
| 507 |
- </div> |
|
| 508 |
- <div style="width: 125px;"> |
|
| 509 |
- <label for="" class="label"></label> |
|
| 510 |
- <select class="field-selector"> |
|
| 511 |
- <option value="">선택하기</option> |
|
| 512 |
- <option value="addrNm">이름</option> |
|
| 513 |
- <option value="addrPhoneNo">휴대폰</option> |
|
| 514 |
- <option value="addrInfo1">[*1*]</option> |
|
| 515 |
- <option value="addrInfo2">[*2*]</option> |
|
| 516 |
- <option value="addrInfo3">[*3*]</option> |
|
| 517 |
- <option value="addrInfo4">[*4*]</option> |
|
| 518 |
- <option value="addrComment">메모</option> |
|
| 519 |
- </select> |
|
| 520 |
- </div> |
|
| 521 |
- <div style="width: 125px;"> |
|
| 522 |
- <label for="" class="label"></label> |
|
| 523 |
- <select class="field-selector"> |
|
| 524 |
- <option value="">선택하기</option> |
|
| 525 |
- <option value="addrNm">이름</option> |
|
| 526 |
- <option value="addrPhoneNo">휴대폰</option> |
|
| 527 |
- <option value="addrInfo1">[*1*]</option> |
|
| 528 |
- <option value="addrInfo2">[*2*]</option> |
|
| 529 |
- <option value="addrInfo3">[*3*]</option> |
|
| 530 |
- <option value="addrInfo4">[*4*]</option> |
|
| 531 |
- <option value="addrComment">메모</option> |
|
| 532 |
- </select> |
|
| 533 |
- </div> |
|
| 534 |
- <div style="width: 125px;"> |
|
| 535 |
- <label for="" class="label"></label> |
|
| 536 |
- <select class="field-selector"> |
|
| 537 |
- <option value="">선택하기</option> |
|
| 538 |
- <option value="addrNm">이름</option> |
|
| 539 |
- <option value="addrPhoneNo">휴대폰</option> |
|
| 540 |
- <option value="addrInfo1">[*1*]</option> |
|
| 541 |
- <option value="addrInfo2">[*2*]</option> |
|
| 542 |
- <option value="addrInfo3">[*3*]</option> |
|
| 543 |
- <option value="addrInfo4">[*4*]</option> |
|
| 544 |
- <option value="addrComment">메모</option> |
|
| 545 |
- </select> |
|
| 546 |
- </div> |
|
| 547 |
- <div style="width: 125px;"> |
|
| 548 |
- <label for="" class="label"></label> |
|
| 549 |
- <select class="field-selector"> |
|
| 550 |
- <option value="">선택하기</option> |
|
| 551 |
- <option value="addrNm">이름</option> |
|
| 552 |
- <option value="addrPhoneNo">휴대폰</option> |
|
| 553 |
- <option value="addrInfo1">[*1*]</option> |
|
| 554 |
- <option value="addrInfo2">[*2*]</option> |
|
| 555 |
- <option value="addrInfo3">[*3*]</option> |
|
| 556 |
- <option value="addrInfo4">[*4*]</option> |
|
| 557 |
- <option value="addrComment">메모</option> |
|
| 558 |
- </select> |
|
| 559 |
- </div> |
|
| 560 |
- <div style="width: 125px;"> |
|
| 561 |
- <label for="" class="label"></label> |
|
| 562 |
- <select class="field-selector"> |
|
| 563 |
- <option value="">선택하기</option> |
|
| 564 |
- <option value="addrNm">이름</option> |
|
| 565 |
- <option value="addrPhoneNo">휴대폰</option> |
|
| 566 |
- <option value="addrInfo1">[*1*]</option> |
|
| 567 |
- <option value="addrInfo2">[*2*]</option> |
|
| 568 |
- <option value="addrInfo3">[*3*]</option> |
|
| 569 |
- <option value="addrInfo4">[*4*]</option> |
|
| 570 |
- <option value="addrComment">메모</option> |
|
| 571 |
- </select> |
|
| 572 |
- </div> |
|
| 573 |
- <div style="width: 125px;"> |
|
| 574 |
- <label for="" class="label"></label> |
|
| 575 |
- <select class="field-selector"> |
|
| 576 |
- <option value="">선택하기</option> |
|
| 577 |
- <option value="addrNm">이름</option> |
|
| 578 |
- <option value="addrPhoneNo">휴대폰</option> |
|
| 579 |
- <option value="addrInfo1">[*1*]</option> |
|
| 580 |
- <option value="addrInfo2">[*2*]</option> |
|
| 581 |
- <option value="addrInfo3">[*3*]</option> |
|
| 582 |
- <option value="addrInfo4">[*4*]</option> |
|
| 583 |
- <option value="addrComment">메모</option> |
|
| 584 |
- </select> |
|
| 585 |
- </div> |
|
| 586 |
- </div> |
|
| 587 |
- </div> |
|
| 588 | 128 |
|
| 589 |
- <div class="drag_drop_wrap callList_box" id="tabulator_clip"> |
|
| 129 |
+ <div class="drag_drop_wrap callList_box" id="tabulator_self"> |
|
| 590 | 130 |
<img src="/publish/images/content/excel.jpg" style="width: 100%;"> |
| 591 | 131 |
</div> |
| 592 | 132 |
<div class="excel_middle"> |
... | ... | @@ -594,8 +134,8 @@ |
| 594 | 134 |
<div> |
| 595 | 135 |
<button type="button" class="all_del"><i class="remove_img"></i>전체삭제</button> |
| 596 | 136 |
<button type="button" class="select_del"><i class="remove_img"></i>선택삭제</button> |
| 597 |
- <button type="button" class="chkVali_del"><i class="remove_img"></i>오류번호삭제</button> |
|
| 598 |
- <button type="button" class="check_validity">오류 검사 <i></i></button> |
|
| 137 |
+<!-- <button type="button" class="chkVali_del"><i class="remove_img"></i>오류번호삭제</button> --> |
|
| 138 |
+<!-- <button type="button" class="check_validity">오류 검사 <i></i></button> --> |
|
| 599 | 139 |
<div class="error_hover_cont send_hover_cont addr_hover_cont"> |
| 600 | 140 |
<p>휴대폰 번호 입력 시 해당 휴대폰 번호에 대한 형식이 어긋나거나 휴대폰 번호에 오류가 있는지 등을 검사하는 기능</p> |
| 601 | 141 |
<span>(예시) 010-1234-0001(O) / 010-123-0001(X)</span> |
... | ... | @@ -606,12 +146,12 @@ |
| 606 | 146 |
</div><!--// 공통 --> |
| 607 | 147 |
|
| 608 | 148 |
<!-- 붙여놓기 설명 --> |
| 609 |
- <div class="req_area"> |
|
| 610 |
- <div class="text_box"> |
|
| 611 |
- - 휴대폰 번호가 입력된 txt 파일을 열어 복사(Ctrl+c) + 붙여넣기(Ctrl+v)로도 입력하실 수 있습니다.<br> |
|
| 612 |
- - 휴대폰 번호는 필수입력 항목입니다.<br> |
|
| 613 |
- - 이름,휴대폰 번호,[*1*],[*2*],[*3*],[*4*],메모 순서대로 입력해주세요.(예 : 010-1234-5678,홍길동,변수1…메모)<br> |
|
| 614 |
- - 이름은 24byte, [*1*]~[*4*] 40byte, 메모는 250byte까지 입력 가능합니다.<br> |
|
| 615 |
- - '오류 검사'를 통해 등록된 데이터에 전화번호 입력 오류를 확인하실 수 있습니다. |
|
| 616 |
- </div> |
|
| 617 |
- </div> |
|
| 149 |
+<!-- <div class="req_area"> --> |
|
| 150 |
+<!-- <div class="text_box"> --> |
|
| 151 |
+<!-- - 휴대폰 번호가 입력된 txt 파일을 열어 복사(Ctrl+c) + 붙여넣기(Ctrl+v)로도 입력하실 수 있습니다.<br> --> |
|
| 152 |
+<!-- - 휴대폰 번호는 필수입력 항목입니다.<br> --> |
|
| 153 |
+<!-- - 이름,휴대폰 번호,[*1*],[*2*],[*3*],[*4*],메모 순서대로 입력해주세요.(예 : 010-1234-5678,홍길동,변수1…메모)<br> --> |
|
| 154 |
+<!-- - 이름은 24byte, [*1*]~[*4*] 40byte, 메모는 250byte까지 입력 가능합니다.<br> --> |
|
| 155 |
+<!-- - '오류 검사'를 통해 등록된 데이터에 전화번호 입력 오류를 확인하실 수 있습니다. --> |
|
| 156 |
+<!-- </div> --> |
|
| 157 |
+<!-- </div> --> |
--- src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataSMLView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataSMLView.jsp
... | ... | @@ -8,7 +8,7 @@ |
| 8 | 8 |
<script type="text/javascript" src="<c:url value='/publish/js/content.js'/>"></script> |
| 9 | 9 |
<script type="text/javascript" src="<c:url value='/js/txtSpecialReplace.js?date=202304250003'/>"></script> |
| 10 | 10 |
<!-- 주소록 유효성 체크 공통유틸로 인해 추가 --> |
| 11 |
-<script type="text/javascript" src="<c:url value='/js/web/addr/event.js?date=202409021440'/>"></script> |
|
| 11 |
+<script type="text/javascript" src="<c:url value='/js/web/addr/cmn.js?date=202409021440'/>"></script> |
|
| 12 | 12 |
|
| 13 | 13 |
<% pageContext.setAttribute("newLineChar", "\r\n"); %>
|
| 14 | 14 |
<script type="text/javascript"> |
--- src/main/webapp/WEB-INF/jsp/web/msgdata/include/msgDataIncludeExcel.jsp
+++ src/main/webapp/WEB-INF/jsp/web/msgdata/include/msgDataIncludeExcel.jsp
... | ... | @@ -9,10 +9,28 @@ |
| 9 | 9 |
<script type="text/javascript"> |
| 10 | 10 |
|
| 11 | 11 |
var $tableExcel = null; //엑셀입력 탭 |
| 12 |
+var $tableError = null; //엑셀입력 탭 |
|
| 12 | 13 |
$(document).ready(function(){
|
| 13 |
- // 엑셀 중복번호 버튼 |
|
| 14 |
- $("#tableExcelDupliBtn").hide();
|
|
| 15 | 14 |
|
| 15 |
+ //Tabulator AJAX Data Loading |
|
| 16 |
+ $tableError = new Tabulator("#tabulator_error", {
|
|
| 17 |
+ height:"255px", |
|
| 18 |
+ width:"100%", |
|
| 19 |
+ layout:"fitColumns", |
|
| 20 |
+ autoColumns:false, |
|
| 21 |
+ headerHozAlign:"center", |
|
| 22 |
+ validationMode:"highlight", |
|
| 23 |
+ clipboard:false, |
|
| 24 |
+ clipboardCopySelector:"table", |
|
| 25 |
+ clipboardPasteAction:"insert", // insert, update, replace |
|
| 26 |
+ placeholder:"등록 팝업에서 휴대폰을 선택 후 확인해주세요.", //fit columns to width of table (optional) |
|
| 27 |
+ columns:[ //Define Table Columns |
|
| 28 |
+ {title:"이름", field:"name", hozAlign:"center", headerHozAlign: "center", width:125},
|
|
| 29 |
+ {title:"휴대폰", field:"phone", hozAlign:"center", headerHozAlign: "center", width:158},
|
|
| 30 |
+ {title:"미등록 결과", field:"result", hozAlign:"center", headerHozAlign: "center", width:125}
|
|
| 31 |
+ ] |
|
| 32 |
+ }); |
|
| 33 |
+ |
|
| 16 | 34 |
|
| 17 | 35 |
//Tabulator AJAX Data Loading |
| 18 | 36 |
$tableExcel = new Tabulator("#tabulator_excel", {
|
... | ... | @@ -80,13 +98,20 @@ |
| 80 | 98 |
$tableExcel.clearData(); |
| 81 | 99 |
$("#excelRowTotCnt").text(0); //총건수 수정
|
| 82 | 100 |
$("#excelRowDupCnt").text(0); //중복건수 수정
|
| 101 |
+ $("#excelRowErrorCnt").text(0); //중복건수 수정
|
|
| 83 | 102 |
dupliPhoneDataRealList.length = 0; // 중복 휴대폰번호 초기화 |
| 84 | 103 |
addrMassDupliSaveList = null; |
| 85 | 104 |
|
| 86 |
- $("#btnAddrMassDupli").hide();
|
|
| 87 |
- $('#tableExcelDupliBtn').hide();
|
|
| 88 |
-// $("#btnAddrMassSaveDupli").hide();
|
|
| 89 |
-// $('#closeBtn').click();
|
|
| 105 |
+ |
|
| 106 |
+ // popup 영역 |
|
| 107 |
+ $tableError.clearData(); |
|
| 108 |
+ // 중복 카운트 |
|
| 109 |
+ $("#errorPopDupCnt").text(0);
|
|
| 110 |
+ // 에러 카운트 |
|
| 111 |
+ $("#errorPopErrorCnt").text(0);
|
|
| 112 |
+ // |
|
| 113 |
+ $("#errorPopTotCnt").text(0);
|
|
| 114 |
+ |
|
| 90 | 115 |
|
| 91 | 116 |
} |
| 92 | 117 |
|
... | ... | @@ -133,7 +158,7 @@ |
| 133 | 158 |
$('.field-selector').on('change', function() {
|
| 134 | 159 |
fn_loadAddActive(); |
| 135 | 160 |
|
| 136 |
- setTimeout(() => { // 파일 읽기 완료 후 실행되도록 함
|
|
| 161 |
+ setTimeout(() => {
|
|
| 137 | 162 |
var selectedFields = []; |
| 138 | 163 |
var isDuplicate = false; |
| 139 | 164 |
|
... | ... | @@ -169,6 +194,8 @@ |
| 169 | 194 |
fn_loadRemoveActive(); |
| 170 | 195 |
|
| 171 | 196 |
}, 0); // 지연 없이 즉시 실행되도록 0ms 지연을 설정 |
| 197 |
+ |
|
| 198 |
+ |
|
| 172 | 199 |
}); |
| 173 | 200 |
|
| 174 | 201 |
|
... | ... | @@ -457,56 +484,102 @@ |
| 457 | 484 |
$objTabul.setData(updatedData); |
| 458 | 485 |
} |
| 459 | 486 |
|
| 487 |
+ |
|
| 460 | 488 |
/** |
| 461 | 489 |
* @ 핸드폰 중복 데이터 |
| 462 | 490 |
* */ |
| 463 | 491 |
function fn_phoneDupl($objTabul) {
|
| 464 |
- var data = $objTabul.getData(); |
|
| 465 |
- var uniquePhones = new Set(); |
|
| 466 |
- var dupliPhoneDataRealList = []; |
|
| 467 |
- var rowsToKeep = []; |
|
| 468 |
- var rowsToDelete = []; |
|
| 469 |
- var phoneNumberChk = false; |
|
| 492 |
+ |
|
| 493 |
+ $tableError.clearData(); |
|
| 494 |
+ |
|
| 495 |
+ var data = $objTabul.getData(); |
|
| 496 |
+ var phoneNumberChk = false; |
|
| 497 |
+ var existingNumbers = new Set(); // 배열에서 Set으로 변경 |
|
| 498 |
+ |
|
| 499 |
+ let errorCount = 0; // 중복 번호 개수를 저장할 변수 |
|
| 500 |
+ let duplicateCount = 0; // 중복 번호 개수를 저장할 변수 |
|
| 501 |
+ |
|
| 502 |
+ const errors = []; // 오류 데이터를 저장할 배열 |
|
| 503 |
+ const duplicates = []; // 오류 데이터를 저장할 배열 |
|
| 504 |
+ const newData = []; // 유효한 데이터만 저장할 새로운 배열 |
|
| 505 |
+ |
|
| 506 |
+ data.forEach((row, index) => {
|
|
| 507 |
+ if (index % 10000 === 0) {
|
|
| 508 |
+ console.log('i : ', index);
|
|
| 509 |
+ } |
|
| 510 |
+ |
|
| 511 |
+ const number = row.addrPhoneNo; |
|
| 512 |
+ const formattedNumber = formatPhoneNumber(number); // 번호 표준화 |
|
| 513 |
+ const cleanedNumber = formattedNumber.replace(/[^0-9]/g, ''); // 숫자만 남김 |
|
| 514 |
+ |
|
| 515 |
+ if (!existingNumbers.has(cleanedNumber)) { // 중복 번호 체크
|
|
| 516 |
+ if (isValidPhoneNumber(formattedNumber)) { // 유효성 검사
|
|
| 517 |
+ row.addrPhoneNo = formattedNumber; |
|
| 518 |
+ existingNumbers.add(cleanedNumber); // 추가된 번호를 기존 목록에 추가 |
|
| 519 |
+ newData.push(row); // 유효한 데이터만 새로운 배열에 추가 |
|
| 520 |
+ } else {
|
|
| 521 |
+ // 오류: 유효성 통과 못함 |
|
| 522 |
+ errorCount++; |
|
| 523 |
+ $tableError.addRow({
|
|
| 524 |
+ name: row.addrNm, // 이름 |
|
| 525 |
+ phone: row.addrPhoneNo, // 폰번호 |
|
| 526 |
+ result: "오류" // 결과 메시지 추가 |
|
| 527 |
+ }); |
|
| 528 |
+ errors.push({
|
|
| 529 |
+ name: row.addrNm, // 이름 |
|
| 530 |
+ phone: row.addrPhoneNo, // 폰번호 |
|
| 531 |
+ result: "오류" // 결과 메시지 추가 |
|
| 532 |
+ }); |
|
| 533 |
+ } |
|
| 534 |
+ } else {
|
|
| 535 |
+ // 중복 |
|
| 536 |
+ duplicateCount++; // 중복 번호가 발견될 때마다 카운트를 증가 |
|
| 537 |
+ $tableError.addRow({
|
|
| 538 |
+ name: row.addrNm, // 이름 |
|
| 539 |
+ phone: row.addrPhoneNo, // 폰번호 |
|
| 540 |
+ result: "중복" // 결과 메시지 추가 |
|
| 541 |
+ }); |
|
| 542 |
+ duplicates.push({
|
|
| 543 |
+ name: row.addrNm, // 이름 |
|
| 544 |
+ phone: row.addrPhoneNo, // 폰번호 |
|
| 545 |
+ result: "중복" // 결과 메시지 추가 |
|
| 546 |
+ }); |
|
| 547 |
+ } |
|
| 548 |
+ }); |
|
| 549 |
+ |
|
| 550 |
+ // data 배열을 newData 배열로 대체 |
|
| 551 |
+ data = newData; |
|
| 552 |
+ |
|
| 470 | 553 |
|
| 471 |
- |
|
| 472 |
- |
|
| 473 |
- data.forEach((row, index) => {
|
|
| 474 |
- |
|
| 475 |
- if (!isValidKoreanPhoneNumber(row.addrPhoneNo)) {
|
|
| 476 |
- phoneNumberChk = true |
|
| 477 |
- return false; |
|
| 478 |
- } |
|
| 479 |
- |
|
| 480 |
- if (uniquePhones.has(row.addrPhoneNo)) {
|
|
| 481 |
- dupliPhoneDataRealList.push(row.addrPhoneNo); |
|
| 482 |
- rowsToDelete.push(index); // 중복된 행의 인덱스를 기록 |
|
| 483 |
- } else {
|
|
| 484 |
- uniquePhones.add(row.addrPhoneNo); |
|
| 485 |
- rowsToKeep.push(row); // 고유한 데이터만 추가 |
|
| 486 |
- } |
|
| 487 |
- }); |
|
| 488 |
- |
|
| 489 |
- if(phoneNumberChk){
|
|
| 490 |
- alert('휴대폰 형식에 맞지 않는 데이터가 있습니다.\n 확인해 주세요');
|
|
| 491 |
- } |
|
| 492 |
- |
|
| 493 |
- $("#excelRowDupCnt").text(dupliPhoneDataRealList.length);
|
|
| 494 |
- |
|
| 495 |
- if (dupliPhoneDataRealList.length > 0) {
|
|
| 496 |
-// alert("중복된 휴대폰 번호가 있습니다: \n" + duplicatePhones.join(", "));
|
|
| 497 |
- makeAddrMassDupliPop(dupliPhoneDataRealList); |
|
| 498 |
- } |
|
| 499 |
- |
|
| 500 |
- // 중복된 행 삭제 |
|
| 501 |
- rowsToDelete.reverse().forEach(index => {
|
|
| 502 |
- $objTabul.deleteRow(index); |
|
| 503 |
- }); |
|
| 504 |
- |
|
| 505 |
- // 고유한 데이터만 남기고 테이블 업데이트 |
|
| 506 |
- $objTabul.setData(rowsToKeep); |
|
| 507 |
- $("#excelRowTotCnt").text(rowsToKeep.length);
|
|
| 554 |
+ // 수정된 데이터로 테이블 업데이트 |
|
| 555 |
+ $objTabul.setData(data); |
|
| 556 |
+ // 오류 총 카운트 |
|
| 557 |
+ $("#excelRowTotCnt").text($objTabul.getDataCount());
|
|
| 558 |
+ // 중복 카운트 |
|
| 559 |
+ $("#excelRowDupCnt").text(duplicateCount);
|
|
| 560 |
+ // 에러 카운트 |
|
| 561 |
+ $("#excelRowErrorCnt").text(errorCount);
|
|
| 562 |
+ |
|
| 563 |
+ // popup 영역 |
|
| 564 |
+ // 중복 카운트 |
|
| 565 |
+ $("#errorPopDupCnt").text(duplicateCount);
|
|
| 566 |
+ // 에러 카운트 |
|
| 567 |
+ $("#errorPopErrorCnt").text(errorCount);
|
|
| 568 |
+ // |
|
| 569 |
+ $("#errorPopTotCnt").text(duplicateCount+errorCount);
|
|
| 570 |
+ |
|
| 571 |
+ |
|
| 572 |
+ var errorData = errors.concat(duplicates); |
|
| 573 |
+ // 오류 및 중복 데이터를 한 번에 추가 |
|
| 574 |
+ $tableError.setData(errorData); |
|
| 575 |
+ |
|
| 576 |
+ if(errorCount > 0){
|
|
| 577 |
+ alert('휴대폰 형식에 맞지 않는 데이터는 삭제 후 업로드 됩니다.\nex) 발송불가 특수문자, 자릿수 오류 등');
|
|
| 508 | 578 |
} |
| 509 |
- |
|
| 579 |
+ |
|
| 580 |
+ |
|
| 581 |
+ |
|
| 582 |
+} |
|
| 510 | 583 |
|
| 511 | 584 |
function fn_dupliPopupShow(){
|
| 512 | 585 |
|
... | ... | @@ -588,6 +661,39 @@ |
| 588 | 661 |
|
| 589 | 662 |
</div> |
| 590 | 663 |
</div> |
| 664 |
+ |
|
| 665 |
+ |
|
| 666 |
+<!-- 주소록 상세 결과 팝업 data-tooltip:adr_popup14 --> |
|
| 667 |
+ <div class="tooltip-wrap"> |
|
| 668 |
+ <div class="popup-com adr_layer adr_popup14" tabindex="0" data-tooltip-con="adr_popup14" data-focus="adr_popup14" data-focus-prev="adr_popu14-close" style="width: 450px;"> |
|
| 669 |
+ <div class="popup_heading"> |
|
| 670 |
+ <p>주소록 상세 결과</p> |
|
| 671 |
+ <button type="button" class="tooltip-close" data-focus="adr_popup14-close"><img src="/publish/images/content/layerPopup_close.png" alt="팝업 닫기"></button> |
|
| 672 |
+ </div> |
|
| 673 |
+ <div class="layer_in" style="padding:30px 20px;"> |
|
| 674 |
+ <div class="table_top"> |
|
| 675 |
+ <p> |
|
| 676 |
+ 총 <span class="c_e40000" id="errorPopTotCnt">0</span>건 |
|
| 677 |
+ / 중복 <span class="c_002c9a" id="errorPopDupCnt">0</span>건 |
|
| 678 |
+ / 오류 <span class="c_002c9a" id="errorPopErrorCnt">0</span>건</p> |
|
| 679 |
+ <button type="button" class="excel_btn btnType" id="errorExcelBtn"><i class="downroad"></i>엑셀 다운로드</button> |
|
| 680 |
+ </div> |
|
| 681 |
+ <div class="tb_wrap adr_list" id="tabulator_error"> |
|
| 682 |
+ <!-- $tableError 참고 --> |
|
| 683 |
+ </div> |
|
| 684 |
+ <ul class="cf_text_ul"> |
|
| 685 |
+ <li>*중복번호는 하나의 번호만 등록됩니다.</li> |
|
| 686 |
+ <li>*휴대폰 형식에 맞지 않는 데이터는 삭제 후 업로드 됩니다.</li> |
|
| 687 |
+ <li>ex) 발송불가 특수문자, 자릿수 오류 등</li> |
|
| 688 |
+ </ul> |
|
| 689 |
+ <div class="popup_btn_wrap2"> |
|
| 690 |
+<!-- <button type="button">저장</button> --> |
|
| 691 |
+ <button type="button" class="tooltip-close" data-focus="adr_popup14-close" data-focus-next="adr_popup14">닫기</button> |
|
| 692 |
+ </div> |
|
| 693 |
+ </div> |
|
| 694 |
+ </div> |
|
| 695 |
+ </div> |
|
| 696 |
+ |
|
| 591 | 697 |
<!--// 중복전화번호 팝업 --> |
| 592 | 698 |
<div class="popup_heading"> |
| 593 | 699 |
<p>엑셀 불러오기</p> |
... | ... | @@ -605,19 +711,11 @@ |
| 605 | 711 |
<!-- 엑셀입력 --> |
| 606 | 712 |
<div class="popCont current pop_more_cont" id="popCont_1"> |
| 607 | 713 |
<div class="titBox"> |
| 608 |
- <p>- 엑셀(EXCEL) 파일로 주소록을 한 번에 최대 2만건까지 등록하여 간편하게 발송 및 관리하실 수 있습니다.</p> |
|
| 609 |
- <p>- 반드시 샘플파일을 다운로드하여 작성방법을 확인하신 후 정해진 양식에 맞추어 주소록을 작성하셔야 합니다.</p> |
|
| 610 |
- <p> ※ 주소록 관리 메뉴에서 다운로드 받으신 엑셀 파일 또한 업로드 양식에 맞추어 작성하셔야 하며, </p> |
|
| 611 |
- <p> 주소록에 이미 등록된 휴대폰 번호는 업데이트 되지 않으므로 기존 주소록에서 해당 휴대폰 번호를 삭제한 후 재등록해 주시기 바랍니다.</p> |
|
| 612 |
- <p>- 쉼표(,), 구분선(|), 역슬래시(\, ₩), 작은따옴표('), 큰따옴표(") 등 발송불가 특수문자는 저장되지 않습니다.</p>
|
|
| 613 |
- <p>- 휴대폰 번호는 필수입력 항목입니다.</p> |
|
| 614 |
- <p>- 전화번호 형태는 010-1234-5678 또는 01012345678 모두 가능합니다. 단, 공백은 허용되지 않습니다.</p> |
|
| 714 |
+ <p>- 주소록은 한 번에 최대 30만건까지 등록(EXCEL파일, 최대용량 3MB) 가능합니다. </p> |
|
| 615 | 715 |
<p>- 엑셀 파일에 비밀번호 설정, 제한된 보기, 수식 등이 설정되어 있는 경우 업로드가 불가합니다.</p> |
| 616 |
- <p>- 이름 20byte, [*1*]~[*4*] 40byte, 메모 250byte까지 입력 가능합니다.</p> |
|
| 617 |
- <p>- 첨부가능 파일 : xlsx, xls(최대용량 3MB)</p> |
|
| 618 |
- <p>- ‘오류 검사’를 통해 등록된 데이터에 전화번호 입력 오류를 확인하실 수 있습니다.</p> |
|
| 619 |
- <p>- 주소록 등록이 어려우신 경우에는 주소록 입력대행 메뉴를 이용하시면 됩니다.</p> |
|
| 620 |
- <button type="button" class="excel_btn" onclick="location.href='/download/addr/주소록_대량등록.xlsx'"><i class="downroad"></i>샘플파일 다운로드</button> |
|
| 716 |
+ <p>- 구분선(|), 역슬래시(\, ₩), 큰따옴표(") 등 발송불가 특수문자는 저장되지 않습니다.</p>
|
|
| 717 |
+ <p>- 이름 200byte, [*1*]~[*4*] 200byte, 메모 250byte까지 입력 가능합니다.</p> |
|
| 718 |
+ <p>- 주소록 등록이 어려우신 경우에는 <a href="<c:url value='/web/mjon/addragency/selectAddrAgencyList.do'/>" style="font-weight: bold; color: blue;">주소록 입력대행</a> 메뉴를 이용하실 수 있습니다. </p> |
|
| 621 | 719 |
</div> |
| 622 | 720 |
<div class="pop_more_wrap"> |
| 623 | 721 |
<button type="button" class="pop_more" onclick="popMore(this);">더보기<i></i></button> |
... | ... | @@ -661,9 +759,13 @@ |
| 661 | 759 |
|
| 662 | 760 |
<div class="excel_middle2"> |
| 663 | 761 |
<p> |
| 664 |
- 총 <span class="c_e40000 fwBold" id="excelRowTotCnt">0</span>건 / 중복 <span class="c_002c9a fwBold" id="excelRowDupCnt">0</span>건 |
|
| 665 |
- |
|
| 666 |
- <button type="button" class="btnType btnType6" data-tooltip="addrMassDupli_layer" id="tableExcelDupliBtn">중복번호</button> |
|
| 762 |
+ 총 <span class="c_e40000 fwBold" id="excelRowTotCnt">0</span>건 |
|
| 763 |
+ / 중복 <span class="c_002c9a fwBold" id="excelRowDupCnt">0</span>건 |
|
| 764 |
+ / 오류 <span class="c_002c9a fwBold" id="excelRowErrorCnt">0</span>건 |
|
| 765 |
+ <button type="button" class="btn_list_detail" data-tooltip="adr_popup14"><img src="/publish/images/search.png"></button> |
|
| 766 |
+ </p> |
|
| 767 |
+<!-- --> |
|
| 768 |
+<!-- <button type="button" class="btnType btnType6" data-tooltip="addrMassDupli_layer" id="tableExcelDupliBtn">중복번호</button> --> |
|
| 667 | 769 |
<!-- --> |
| 668 | 770 |
<!-- <button type="button" class="btnType btnType6" data-tooltip="addrMassSaveDupli_layer" onclick="GetAddrMassSaveDupli()" id="btnAddrMassSaveDupli">중복번호</button> --> |
| 669 | 771 |
</p> |
... | ... | @@ -779,27 +881,21 @@ |
| 779 | 881 |
<div> |
| 780 | 882 |
<button type="button" id="allDel"><i class="remove_img"></i>전체삭제</button> |
| 781 | 883 |
<button type="button" id="in_select_del"><i class="remove_img"></i>선택삭제</button> |
| 782 |
- <button type="button" id="chkVali_del"><i class="remove_img"></i>오류번호삭제</button> |
|
| 783 |
- <button type="button" id="check_validity">오류 검사 <i></i></button> |
|
| 784 |
- <div class="error_hover_cont send_hover_cont addr_hover_cont"> |
|
| 785 |
- <p>휴대폰 번호 입력 시 해당 휴대폰 번호에 대한 형식이 어긋나거나 휴대폰 번호에 오류가 있는지 등을 검사하는 기능</p> |
|
| 786 |
- <span>(예시) 010-1234-0001(O) / 010-123-0001(X)</span> |
|
| 787 |
- </div> |
|
| 788 | 884 |
</div> |
| 789 | 885 |
|
| 790 | 886 |
</div> |
| 791 | 887 |
</div><!--// 공통 --> |
| 792 | 888 |
|
| 793 | 889 |
<!-- 붙여놓기 설명 --> |
| 794 |
- <div class="req_area"> |
|
| 795 |
- <div class="text_box"> |
|
| 796 |
- - 휴대폰 번호가 입력된 txt 파일을 열어 복사(Ctrl+c) + 붙여넣기(Ctrl+v)로도 입력하실 수 있습니다.<br> |
|
| 797 |
- - 휴대폰 번호는 필수입력 항목입니다.<br> |
|
| 798 |
- - 이름,휴대폰 번호,[*1*],[*2*],[*3*],[*4*],메모 순서대로 입력해주세요.(예 : 010-1234-5678,홍길동,변수1…메모)<br> |
|
| 799 |
- - 이름은 24byte, [*1*]~[*4*] 40byte, 메모는 250byte까지 입력 가능합니다.<br> |
|
| 800 |
- - '오류 검사'를 통해 등록된 데이터에 전화번호 입력 오류를 확인하실 수 있습니다. |
|
| 801 |
- </div> |
|
| 802 |
- </div> |
|
| 890 |
+<!-- <div class="req_area"> --> |
|
| 891 |
+<!-- <div class="text_box"> --> |
|
| 892 |
+<!-- - 휴대폰 번호가 입력된 txt 파일을 열어 복사(Ctrl+c) + 붙여넣기(Ctrl+v)로도 입력하실 수 있습니다.<br> --> |
|
| 893 |
+<!-- - 휴대폰 번호는 필수입력 항목입니다.<br> --> |
|
| 894 |
+<!-- - 이름,휴대폰 번호,[*1*],[*2*],[*3*],[*4*],메모 순서대로 입력해주세요.(예 : 010-1234-5678,홍길동,변수1…메모)<br> --> |
|
| 895 |
+<!-- - 이름은 24byte, [*1*]~[*4*] 40byte, 메모는 250byte까지 입력 가능합니다.<br> --> |
|
| 896 |
+<!-- - '오류 검사'를 통해 등록된 데이터에 전화번호 입력 오류를 확인하실 수 있습니다. --> |
|
| 897 |
+<!-- </div> --> |
|
| 898 |
+<!-- </div> --> |
|
| 803 | 899 |
<div class="popup_btn_wrap2" style="margin: 0 auto 30px auto;"> |
| 804 | 900 |
<button type="button" id="btnAddrMassReg">추가</button> |
| 805 | 901 |
<button type="button" id="btnAddrMassClose" class="tooltip-close" data-focus="adr_popup01-close" data-focus-next="popup02">닫기</button> |
+++ src/main/webapp/js/web/addr/cmn.js
... | ... | @@ -0,0 +1,48 @@ |
| 1 | + | |
| 2 | + | |
| 3 | +// 유효한 번호인지 확인하는 함수 | |
| 4 | +function isValidPhoneNumber(phone) { | |
| 5 | + // 숫자만 추출 | |
| 6 | + const numberOnly = phone.replace(/\D/g, ''); | |
| 7 | + | |
| 8 | + // 유효한 형식 체크 | |
| 9 | + return ( | |
| 10 | + (numberOnly.startsWith("010") && numberOnly.length === 11) || // 010으로 시작하고 11자리 | |
| 11 | + (/^01[1-9]/.test(numberOnly) && numberOnly.length === 10) || // 011~019로 시작하고 10자리 | |
| 12 | + (numberOnly.startsWith("050") && numberOnly.length === 12) // 050X로 시작하고 12자리 | |
| 13 | + ); | |
| 14 | +} | |
| 15 | + | |
| 16 | +// 유효성 후 포맷 맞추는 함수 | |
| 17 | +function formatPhoneNumber(phone) { | |
| 18 | + if (typeof phone !== 'string') { | |
| 19 | + phone = String(phone); // phone을 문자열로 변환 | |
| 20 | + } | |
| 21 | + // 숫자만 남기기 | |
| 22 | + let cleanedPhone = phone.replace(/\D/g, ''); // 모든 숫자가 아닌 문자 제거 | |
| 23 | +// console.log('cleanedPhone : ', cleanedPhone); | |
| 24 | + | |
| 25 | + // 앞에 0이 추가된 경우 처리 | |
| 26 | + if (cleanedPhone.length === 10 && cleanedPhone.startsWith("10")) { | |
| 27 | + // 10으로 시작하는 10자리 번호는 앞에 0을 추가하여 11자리로 만듦 | |
| 28 | + cleanedPhone = "0" + cleanedPhone; | |
| 29 | + }else if (cleanedPhone.length === 9 && (cleanedPhone.startsWith("11") || cleanedPhone.startsWith("16") || cleanedPhone.startsWith("19"))) { | |
| 30 | + // 11, 16, 19로 시작하는 9자리 번호는 앞에 0을 추가하여 10자리로 만듦 | |
| 31 | + cleanedPhone = "0" + cleanedPhone; | |
| 32 | + } | |
| 33 | + | |
| 34 | + // 번호 형식 변환 | |
| 35 | + if (cleanedPhone.startsWith("010") && cleanedPhone.length === 11) { | |
| 36 | + // 010-1234-5678 형식 | |
| 37 | + return cleanedPhone.substring(0, 3) + '-' + cleanedPhone.substring(3, 7) + '-' + cleanedPhone.substring(7); | |
| 38 | + } else if ((/^01[1-9]/.test(cleanedPhone)) && cleanedPhone.length === 10) { | |
| 39 | + // 01X-123-5678 형식 | |
| 40 | + return cleanedPhone.substring(0, 3) + '-' + cleanedPhone.substring(3, 6) + '-' + cleanedPhone.substring(6); | |
| 41 | + } else if (cleanedPhone.startsWith("050") && cleanedPhone.length === 12) { | |
| 42 | + // 050X-1234-5678 형식 | |
| 43 | + return cleanedPhone.substring(0, 4) + '-' + cleanedPhone.substring(4, 8) + '-' + cleanedPhone.substring(8); | |
| 44 | + } | |
| 45 | + | |
| 46 | + // 원본 반환 (표준 형식으로 변환되지 않으면) | |
| 47 | + return phone; | |
| 48 | +} |
--- src/main/webapp/js/web/addr/event.js
+++ src/main/webapp/js/web/addr/event.js
... | ... | @@ -146,9 +146,14 @@ |
| 146 | 146 |
// 오류 및 중복 데이터를 한 번에 추가 |
| 147 | 147 |
$tableError.setData(errorData); |
| 148 | 148 |
|
| 149 |
+ if(errorCount > 0){
|
|
| 150 |
+ alert('휴대폰 형식에 맞지 않는 데이터는 삭제 후 업로드 됩니다.\nex) 발송불가 특수문자, 자릿수 오류 등');
|
|
| 151 |
+ } |
|
| 152 |
+ |
|
| 153 |
+ |
|
| 149 | 154 |
|
| 150 | 155 |
} |
| 151 |
- |
|
| 156 |
+ /* |
|
| 152 | 157 |
function fn_phoneDupl_old($objTabul) {
|
| 153 | 158 |
var data = $objTabul.getData(); |
| 154 | 159 |
var uniquePhones = new Set(); |
... | ... | @@ -196,7 +201,7 @@ |
| 196 | 201 |
// 고유한 데이터만 남기고 테이블 업데이트 |
| 197 | 202 |
$objTabul.setData(rowsToKeep); |
| 198 | 203 |
$(tabluC+" #rowTotCnt").text(rowsToKeep.length); |
| 199 |
- } |
|
| 204 |
+ }*/ |
|
| 200 | 205 |
|
| 201 | 206 |
//받는사람 전체삭제 버튼 처리 |
| 202 | 207 |
$('.all_del').click(function(){
|
... | ... | @@ -312,111 +317,24 @@ |
| 312 | 317 |
} |
| 313 | 318 |
}); |
| 314 | 319 |
|
| 315 |
-// |
|
| 316 |
-//function fn_loadAddActive(){
|
|
| 317 |
-// $('.loading_layer').addClass('active');
|
|
| 318 |
-//} |
|
| 319 |
-// |
|
| 320 |
-//function fn_loadRemoveActive(){
|
|
| 321 |
-// $('.loading_layer').removeClass('active');
|
|
| 322 |
-//} |
|
| 323 |
- |
|
| 324 |
-//중복 연락처 |
|
| 325 |
-function makeAddrMassDupliPop(dupliPhoneDataRealList) {
|
|
| 326 |
- var sHtml = ""; |
|
| 327 |
- sHtml += "<div class='' style='overflow-x:auto; height:350px;'>"; |
|
| 328 |
- sHtml += "<table class='tType4'>"; |
|
| 329 |
- sHtml += " <colgroup>"; |
|
| 330 |
- sHtml += " <col style='width:auto' />"; |
|
| 331 |
- sHtml += " </colgroup>"; |
|
| 332 |
- sHtml += " <thead>"; |
|
| 333 |
- sHtml += " <tr>"; |
|
| 334 |
- sHtml += " <th>중복 휴대폰번호 (" + numberWithCommas(dupliPhoneDataRealList.length) + "개)</th>";
|
|
| 335 |
- sHtml += " </tr>"; |
|
| 336 |
- sHtml += " </thead>"; |
|
| 337 |
- sHtml += " <tbody>"; |
|
| 338 |
- for (var i = 0; i < dupliPhoneDataRealList.length; i++) {
|
|
| 339 |
- sHtml += " <tr>"; |
|
| 340 |
- sHtml += " <td>" + dupliPhoneDataRealList[i] + "</td>"; |
|
| 341 |
- sHtml += " </tr>"; |
|
| 342 |
- } |
|
| 343 |
- sHtml += " </tbody>"; |
|
| 344 |
- sHtml += " </table>"; |
|
| 345 |
- sHtml += " </div>"; |
|
| 346 |
- |
|
| 347 |
- $("#addrMassDupli_layer").html(sHtml);
|
|
| 348 |
- fn_dupliPopupShow(); |
|
| 349 |
- |
|
| 350 |
-} |
|
| 351 |
- |
|
| 352 |
-function fn_dupliPopupShow(){
|
|
| 353 |
- |
|
| 354 |
- var showId = '#'+fn_utils_getTabulatorNm() |
|
| 355 |
- console.log('showId : ', showId);
|
|
| 356 |
- $(showId+'DupliBtn').show() |
|
| 357 |
-} |
|
| 358 | 320 |
|
| 359 | 321 |
|
| 360 |
- |
|
| 361 |
- |
|
| 362 |
-// 유효한 번호인지 확인하는 함수 |
|
| 363 |
-function isValidPhoneNumber(phone) {
|
|
| 364 |
- // 숫자만 추출 |
|
| 365 |
- const numberOnly = phone.replace(/\D/g, ''); |
|
| 366 |
- |
|
| 367 |
- // 유효한 형식 체크 |
|
| 368 |
- return ( |
|
| 369 |
- (numberOnly.startsWith("010") && numberOnly.length === 11) || // 010으로 시작하고 11자리
|
|
| 370 |
- (/^01[1-9]/.test(numberOnly) && numberOnly.length === 10) || // 011~019로 시작하고 10자리 |
|
| 371 |
- (numberOnly.startsWith("050") && numberOnly.length === 12) // 050X로 시작하고 12자리
|
|
| 372 |
- ); |
|
| 373 |
-} |
|
| 374 |
- |
|
| 375 |
-// 유효성 후 포맷 맞추는 함수 |
|
| 376 |
-function formatPhoneNumber(phone) {
|
|
| 377 |
- if (typeof phone !== 'string') {
|
|
| 378 |
- phone = String(phone); // phone을 문자열로 변환 |
|
| 379 |
- } |
|
| 380 |
- // 숫자만 남기기 |
|
| 381 |
- let cleanedPhone = phone.replace(/\D/g, ''); // 모든 숫자가 아닌 문자 제거 |
|
| 382 |
-// console.log('cleanedPhone : ', cleanedPhone);
|
|
| 383 |
- |
|
| 384 |
- // 앞에 0이 추가된 경우 처리 |
|
| 385 |
- if (cleanedPhone.length === 10 && cleanedPhone.startsWith("10")) {
|
|
| 386 |
- // 10으로 시작하는 10자리 번호는 앞에 0을 추가하여 11자리로 만듦 |
|
| 387 |
- cleanedPhone = "0" + cleanedPhone; |
|
| 388 |
- }else if (cleanedPhone.length === 9 && (cleanedPhone.startsWith("11") || cleanedPhone.startsWith("16") || cleanedPhone.startsWith("19"))) {
|
|
| 389 |
- // 11, 16, 19로 시작하는 9자리 번호는 앞에 0을 추가하여 10자리로 만듦 |
|
| 390 |
- cleanedPhone = "0" + cleanedPhone; |
|
| 391 |
- } |
|
| 392 |
- |
|
| 393 |
- // 번호 형식 변환 |
|
| 394 |
- if (cleanedPhone.startsWith("010") && cleanedPhone.length === 11) {
|
|
| 395 |
- // 010-1234-5678 형식 |
|
| 396 |
- return cleanedPhone.substring(0, 3) + '-' + cleanedPhone.substring(3, 7) + '-' + cleanedPhone.substring(7); |
|
| 397 |
- } else if ((/^01[1-9]/.test(cleanedPhone)) && cleanedPhone.length === 10) {
|
|
| 398 |
- // 01X-123-5678 형식 |
|
| 399 |
- return cleanedPhone.substring(0, 3) + '-' + cleanedPhone.substring(3, 6) + '-' + cleanedPhone.substring(6); |
|
| 400 |
- } else if (cleanedPhone.startsWith("050") && cleanedPhone.length === 12) {
|
|
| 401 |
- // 050X-1234-5678 형식 |
|
| 402 |
- return cleanedPhone.substring(0, 4) + '-' + cleanedPhone.substring(4, 8) + '-' + cleanedPhone.substring(8); |
|
| 403 |
- } |
|
| 404 |
- |
|
| 405 |
- // 원본 반환 (표준 형식으로 변환되지 않으면) |
|
| 406 |
- return phone; |
|
| 407 |
-} |
|
| 408 | 322 |
|
| 409 | 323 |
// 주소록 에러결과 초기화 |
| 410 | 324 |
function errorPopClean(){
|
| 411 | 325 |
|
| 412 | 326 |
// popup 영역 |
| 413 | 327 |
$tableError.clearData(); |
| 328 |
+ |
|
| 329 |
+ |
|
| 414 | 330 |
// 중복 카운트 |
| 415 | 331 |
$("#errorPopDupCnt").text(0);
|
| 416 | 332 |
// 에러 카운트 |
| 417 | 333 |
$("#errorPopErrorCnt").text(0);
|
| 418 | 334 |
// |
| 419 | 335 |
$("#errorPopTotCnt").text(0);
|
| 336 |
+ |
|
| 337 |
+ |
|
| 420 | 338 |
} |
| 421 | 339 |
|
| 422 | 340 |
|
--- src/main/webapp/js/web/addr/init.js
+++ src/main/webapp/js/web/addr/init.js
... | ... | @@ -97,7 +97,82 @@ |
| 97 | 97 |
}, |
| 98 | 98 |
}); |
| 99 | 99 |
|
| 100 |
+ |
|
| 101 |
+ |
|
| 102 |
+ |
|
| 103 |
+ var tableData = []; |
|
| 104 |
+ for (var i = 0; i < 1000; i++) {
|
|
| 105 |
+ tableData.push({A: "", B: "", C: "", D: "", E: "", F: "", G: ""});
|
|
| 106 |
+ } |
|
| 100 | 107 |
|
| 108 |
+ // 테이블 초기화 |
|
| 109 |
+ $tableSelf = new Tabulator("#tabulator_self", {
|
|
| 110 |
+ height: "255px", |
|
| 111 |
+ width: "100%", |
|
| 112 |
+ layout: "fitColumns", |
|
| 113 |
+ clipboardPasteAction: "update", |
|
| 114 |
+ keybindings: {
|
|
| 115 |
+ "navRight": "tab", // Tab 키를 누르면 오른쪽 셀로 이동 |
|
| 116 |
+ "navLeft": "shift+tab", |
|
| 117 |
+ "editNext": false // Tab 키를 누를 때 편집 모드를 종료하지 않도록 설정 |
|
| 118 |
+ }, |
|
| 119 |
+ data: tableData, |
|
| 120 |
+ columns: [ |
|
| 121 |
+ {formatter: "rowSelection", titleFormatter: "rowSelection", clipboard: false, hozAlign: "center", headerHozAlign: "center", headerSort: false, cellClick: function(e, cell) {
|
|
| 122 |
+ cell.getRow().toggleSelect(); |
|
| 123 |
+ }}, |
|
| 124 |
+ {formatter:"rownum", hozAlign:"center" ,title:"No", headerHozAlign:"center", width:40},
|
|
| 125 |
+ {title:"이름", field:"addrNm", hozAlign:"center", headerHozAlign: "center", width:119, validator:["maxLength:100"], editor:"input"},
|
|
| 126 |
+ {title:"휴대폰", field:"addrPhoneNo", hozAlign:"center", headerHozAlign: "center", width:119, validator:["maxLength:100"], editor:"input"
|
|
| 127 |
+ , formatter:function(cell, formatterParams){
|
|
| 128 |
+ var value = cell.getValue(); |
|
| 129 |
+ |
|
| 130 |
+ fn_selfUpdataCount(); |
|
| 131 |
+// if(value.indexOf("o") > 0){
|
|
| 132 |
+// return "<span style='color:#3FB449; font-weight:bold;'>" + value + "</span>"; |
|
| 133 |
+// }else{
|
|
| 134 |
+// return value; |
|
| 135 |
+// } |
|
| 136 |
+ return value; |
|
| 137 |
+ }}, |
|
| 138 |
+ {title:"[*1*]", field:"addrInfo1", hozAlign:"center", headerHozAlign: "center", width:119, validator:["maxLength:100"], editor:"input"},
|
|
| 139 |
+ {title:"[*2*]", field:"addrInfo2", hozAlign:"center", headerHozAlign: "center", width:119, validator:["maxLength:100"], editor:"input"},
|
|
| 140 |
+ {title:"[*3*]", field:"addrInfo3", hozAlign:"center", headerHozAlign: "center", width:119, validator:["maxLength:100"], editor:"input"},
|
|
| 141 |
+ {title:"[*4*]", field:"addrInfo4", hozAlign:"center", headerHozAlign: "center", width:119, validator:["maxLength:100"], editor:"input"},
|
|
| 142 |
+ {title:"메모", field:"addrComment", hozAlign:"center", headerHozAlign: "center", width:119, validator:["maxLength:100"], editor:"input"}
|
|
| 143 |
+ ], |
|
| 144 |
+ navigation: true // 키보드 탐색 활성화 |
|
| 145 |
+ }); |
|
| 146 |
+ // 사용자 정의 필터 설정: addrPhoneNo가 빈 값이나 undefined가 아닌 경우 |
|
| 147 |
+// $tableSelf.setFilter(function(data, filterParams) {
|
|
| 148 |
+// var value = data.addrPhoneNo; |
|
| 149 |
+// return value !== "" && value !== undefined; // 빈 문자열과 undefined가 아닌 경우 |
|
| 150 |
+// }); |
|
| 151 |
+ |
|
| 152 |
+// // 테이블의 셀 편집 후 이벤트를 등록 |
|
| 153 |
+// document.addEventListener('keydown', function(e) {
|
|
| 154 |
+// if(e.key === "Tab") {
|
|
| 155 |
+// e.preventDefault(); |
|
| 156 |
+// let selectedCells = $tableSelf.getSelectedCells(); |
|
| 157 |
+// let cell = selectedCells[selectedCells.length - 1]; // 현재 선택된 셀 가져오기 |
|
| 158 |
+// |
|
| 159 |
+// if (cell) {
|
|
| 160 |
+// let row = cell.getRow(); |
|
| 161 |
+// let table = cell.getTable(); |
|
| 162 |
+// let nextCell = cell.getNextCell("tab");
|
|
| 163 |
+// |
|
| 164 |
+// if (!nextCell && row === table.getRows().slice(-1)[0]) {
|
|
| 165 |
+// // 현재 셀이 마지막 행의 마지막 셀인 경우 |
|
| 166 |
+// table.addRow({A: "", B: "", C: "", D: "", E: "", F: "", G: ""}, false).then(function() {
|
|
| 167 |
+// table.scrollToRow(table.getRows().slice(-1)[0]); // 새로 추가된 행으로 스크롤 |
|
| 168 |
+// table.setActiveCell(table.getRows().slice(-1)[0].getCell("A")); // 새로운 행의 첫 번째 셀에 포커스
|
|
| 169 |
+// }); |
|
| 170 |
+// } |
|
| 171 |
+// } |
|
| 172 |
+// } |
|
| 173 |
+// }); |
|
| 174 |
+// |
|
| 175 |
+ |
|
| 101 | 176 |
//Tabulator AJAX Data Loading |
| 102 | 177 |
$tableError = new Tabulator("#tabulator_error", {
|
| 103 | 178 |
height:"255px", |
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?