--- src/main/java/itn/let/fax/addr/web/FaxAddrController.java
+++ src/main/java/itn/let/fax/addr/web/FaxAddrController.java
... | ... | @@ -206,7 +206,7 @@ |
| 206 | 206 |
|
| 207 | 207 |
if("".equals(addrVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
|
| 208 | 208 |
addrVO.setSearchSortCnd("addrId");
|
| 209 |
- addrVO.setSearchSortOrd("desc");
|
|
| 209 |
+ addrVO.setSearchSortOrd("asc");
|
|
| 210 | 210 |
} |
| 211 | 211 |
|
| 212 | 212 |
List<FaxAddrVO> addrList = faxAddrService.selectFaxAddrList(addrVO); |
... | ... | @@ -263,7 +263,7 @@ |
| 263 | 263 |
|
| 264 | 264 |
if("".equals(addrVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
|
| 265 | 265 |
addrVO.setSearchSortCnd("addrId");
|
| 266 |
- addrVO.setSearchSortOrd("desc");
|
|
| 266 |
+ addrVO.setSearchSortOrd("asc");
|
|
| 267 | 267 |
} |
| 268 | 268 |
|
| 269 | 269 |
List<FaxAddrVO> addrDupliList = faxAddrService.selectFaxAddrDupliListByAll(addrVO); |
... | ... | @@ -856,7 +856,7 @@ |
| 856 | 856 |
|
| 857 | 857 |
if("".equals(addrVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
|
| 858 | 858 |
addrVO.setSearchSortCnd("addrId");
|
| 859 |
- addrVO.setSearchSortOrd("desc");
|
|
| 859 |
+ addrVO.setSearchSortOrd("asc");
|
|
| 860 | 860 |
} |
| 861 | 861 |
|
| 862 | 862 |
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); |
--- src/main/java/itn/let/fax/admin/web/FaxAdmController.java
+++ src/main/java/itn/let/fax/admin/web/FaxAdmController.java
... | ... | @@ -394,7 +394,7 @@ |
| 394 | 394 |
|
| 395 | 395 |
if("".equals(addrVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
|
| 396 | 396 |
addrVO.setSearchSortCnd("addrId");
|
| 397 |
- addrVO.setSearchSortOrd("desc");
|
|
| 397 |
+ addrVO.setSearchSortOrd("asc");
|
|
| 398 | 398 |
} |
| 399 | 399 |
|
| 400 | 400 |
|
--- src/main/java/itn/let/mjo/addr/web/AddrController.java
+++ src/main/java/itn/let/mjo/addr/web/AddrController.java
... | ... | @@ -115,7 +115,7 @@ |
| 115 | 115 |
|
| 116 | 116 |
if("".equals(addrVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
|
| 117 | 117 |
addrVO.setSearchSortCnd("addrId");
|
| 118 |
- addrVO.setSearchSortOrd("desc");
|
|
| 118 |
+ addrVO.setSearchSortOrd("asc");
|
|
| 119 | 119 |
} |
| 120 | 120 |
|
| 121 | 121 |
// 기간검색 설정 |
... | ... | @@ -384,7 +384,7 @@ |
| 384 | 384 |
|
| 385 | 385 |
if("".equals(addrVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
|
| 386 | 386 |
addrVO.setSearchSortCnd("addrId");
|
| 387 |
- addrVO.setSearchSortOrd("desc");
|
|
| 387 |
+ addrVO.setSearchSortOrd("asc");
|
|
| 388 | 388 |
} |
| 389 | 389 |
|
| 390 | 390 |
List<AddrVO> addrList = addrService.selectAddrList(addrVO); |
... | ... | @@ -449,7 +449,7 @@ |
| 449 | 449 |
|
| 450 | 450 |
if("".equals(addrVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
|
| 451 | 451 |
addrVO.setSearchSortCnd("addrId");
|
| 452 |
- addrVO.setSearchSortOrd("desc");
|
|
| 452 |
+ addrVO.setSearchSortOrd("asc");
|
|
| 453 | 453 |
} |
| 454 | 454 |
|
| 455 | 455 |
List<AddrVO> addrDupliList = addrService.selectAddrDupliListByAll(addrVO); |
... | ... | @@ -1055,7 +1055,7 @@ |
| 1055 | 1055 |
|
| 1056 | 1056 |
if("".equals(addrVO.getSearchSortCnd())){ //최초조회시 최신것 조회List
|
| 1057 | 1057 |
addrVO.setSearchSortCnd("addrId");
|
| 1058 |
- addrVO.setSearchSortOrd("desc");
|
|
| 1058 |
+ addrVO.setSearchSortOrd("asc");
|
|
| 1059 | 1059 |
} |
| 1060 | 1060 |
|
| 1061 | 1061 |
LoginVO loginVO = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser(); |
--- src/main/java/itn/let/mjo/addr/web/AddrGroupController.java
+++ src/main/java/itn/let/mjo/addr/web/AddrGroupController.java
... | ... | @@ -360,6 +360,11 @@ |
| 360 | 360 |
public ModelAndView getAddrGroupDuplCheckAjax(HttpServletRequest request, ModelMap model, |
| 361 | 361 |
AddrGroupVO addrGroupVO |
| 362 | 362 |
) throws Exception {
|
| 363 |
+ System.out.println(" :: /web/addr/getAddrGroupDuplCheckAjax.do :: ");
|
|
| 364 |
+ System.out.println(" :: /web/addr/getAddrGroupDuplCheckAjax.do :: ");
|
|
| 365 |
+ System.out.println(" :: /web/addr/getAddrGroupDuplCheckAjax.do :: ");
|
|
| 366 |
+ System.out.println(" :: addrGrpNm :: "+ addrGroupVO.getAddrGrpNm());
|
|
| 367 |
+ |
|
| 363 | 368 |
ModelAndView mv = new ModelAndView(); |
| 364 | 369 |
mv.setViewName("jsonView");
|
| 365 | 370 |
|
--- src/main/webapp/WEB-INF/jsp/web/addr/AddrList.jsp
+++ src/main/webapp/WEB-INF/jsp/web/addr/AddrList.jsp
... | ... | @@ -233,7 +233,7 @@ |
| 233 | 233 |
listAddrGrp(); |
| 234 | 234 |
addrGroupLoadAjax(); |
| 235 | 235 |
addrLoadAjax(); |
| 236 |
- errorPopClean(); // 에러 팝업 초기화 |
|
| 236 |
+ fn_errorPopClean(); // 에러 팝업 초기화 |
|
| 237 | 237 |
} |
| 238 | 238 |
|
| 239 | 239 |
// 주소록 탭마다 돌면서 총, 중복, 오류 건수 초기화 |
... | ... | @@ -262,13 +262,13 @@ |
| 262 | 262 |
|
| 263 | 263 |
|
| 264 | 264 |
// 주소록 그룹 중복체크 |
| 265 |
-function getAddrGroupDuplCheckAjax() {
|
|
| 265 |
+function getAddrGroupDuplCheckAjax(addrGrpNm) {
|
|
| 266 | 266 |
var isReturn = true; |
| 267 | 267 |
|
| 268 | 268 |
$.ajax({
|
| 269 | 269 |
url : "<c:url value='/web/addr/getAddrGroupDuplCheckAjax.do' />", |
| 270 | 270 |
type : 'POST', |
| 271 |
- data : {"addrGrpNm" : $(tabluC+" #addrGrpNm").val()},
|
|
| 271 |
+ data : {"addrGrpNm" : addrGrpNm},
|
|
| 272 | 272 |
dataType:'json', |
| 273 | 273 |
async: false, // 동기 |
| 274 | 274 |
success : function(data, status){
|
... | ... | @@ -286,6 +286,7 @@ |
| 286 | 286 |
//alert("주소록 중복체크에 실패했습니다.");
|
| 287 | 287 |
} |
| 288 | 288 |
}); |
| 289 |
+ console.log('isReturn : ', isReturn);
|
|
| 289 | 290 |
|
| 290 | 291 |
return isReturn; |
| 291 | 292 |
} |
... | ... | @@ -293,18 +294,34 @@ |
| 293 | 294 |
|
| 294 | 295 |
//저장 |
| 295 | 296 |
function SetAddrMassSave(){
|
| 296 |
-// gArrRestartIndex = 0; //배열 재시작카운드 |
|
| 297 |
-// gNameList = []; //치환문자 이름 |
|
| 298 |
-// gPhoneList = []; //받는사람 |
|
| 299 |
-// gInfo1List = []; //치환문자1 |
|
| 300 |
-// gInfo2List = []; //치환문자2 |
|
| 301 |
-// gInfo3List = []; //치환문자3 |
|
| 302 |
-// gInfo4List = []; //치환문자4 |
|
| 303 |
-// gMemoList = []; //메모 |
|
| 297 |
+ |
|
| 298 |
+ |
|
| 299 |
+ |
|
| 300 |
+ |
|
| 301 |
+ |
|
| 302 |
+ |
|
| 303 |
+ |
|
| 304 |
+ |
|
| 304 | 305 |
|
| 305 | 306 |
var $objTabul = fn_utils_getTabulator(); |
| 306 | 307 |
var tabulNm = fn_utils_getTabulatorNm(); |
| 307 | 308 |
var tabluC = '.'+tabulNm |
| 309 |
+ |
|
| 310 |
+ /* console.log('$objTabul : ', $objTabul.getData());
|
|
| 311 |
+ if(tabulNm == 'tableSelf'){
|
|
| 312 |
+ console.log('????');
|
|
| 313 |
+ |
|
| 314 |
+ var allRows = $objTabul.getData(); // 테이블의 모든 데이터를 가져옴 |
|
| 315 |
+ |
|
| 316 |
+ // addrPhoneNo 값이 있는 행만 필터링 |
|
| 317 |
+ var rowsWithPhoneNumbers = allRows.filter(function(row) {
|
|
| 318 |
+ return row.addrPhoneNo && row.addrPhoneNo.trim() !== ''; // 값이 존재하고 공백이 아닌 경우 |
|
| 319 |
+ }); |
|
| 320 |
+ $objTabul = rowsWithPhoneNumbers; |
|
| 321 |
+ console.log('rowsWithPhoneNumbers : ', rowsWithPhoneNumbers);
|
|
| 322 |
+ console.log('$objTabul : ', $objTabul.getData());
|
|
| 323 |
+ return false; |
|
| 324 |
+ } */ |
|
| 308 | 325 |
|
| 309 | 326 |
if($objTabul.getData().length < 1){
|
| 310 | 327 |
alert("한 개 이상의 연락처를 입력하세요");
|
... | ... | @@ -350,8 +367,10 @@ |
| 350 | 367 |
if ($(tabluC+" #addrGrpIdInfo option:selected").val() == "NEW" |
| 351 | 368 |
&& $(tabluC+" #addrGrpNm").val() != "") |
| 352 | 369 |
{
|
| 370 |
+ var addrGrpNm = $(tabluC+" #addrGrpNm").val(); |
|
| 371 |
+ console.log('addrGrpNm : ', addrGrpNm);
|
|
| 353 | 372 |
//주소록 중복체크 |
| 354 |
- if (getAddrGroupDuplCheckAjax() == false) {
|
|
| 373 |
+ if (getAddrGroupDuplCheckAjax(addrGrpNm) == false) {
|
|
| 355 | 374 |
alert("중복된 그룹명입니다. 새 그룹명을 입력해주세요.");
|
| 356 | 375 |
return false; |
| 357 | 376 |
} |
... | ... | @@ -433,6 +452,7 @@ |
| 433 | 452 |
|
| 434 | 453 |
var $objTabul = fn_utils_getTabulator(); |
| 435 | 454 |
var dataToSend = $objTabul.getData(); |
| 455 |
+ console.log('dataToSend : ', dataToSend);
|
|
| 436 | 456 |
var addrGrpIdInfo = $(tabluC+" #addrGrpIdInfo option:selected").val(); |
| 437 | 457 |
var addrGrpNmInfo = $(tabluC+" #addrGrpNm").val(); |
| 438 | 458 |
|
... | ... | @@ -524,11 +544,29 @@ |
| 524 | 544 |
$(tabluC+" #addrGrpNm").val(""); // 새그룹명 Clear;
|
| 525 | 545 |
// 주소록 그룹정보 불러오기 |
| 526 | 546 |
getAddrGroupList(); |
| 547 |
+ |
|
| 548 |
+ |
|
| 549 |
+ |
|
| 550 |
+ if (tabulNm === 'tableSelf') {
|
|
| 551 |
+ var tableData = []; |
|
| 552 |
+ for (var i = 0; i < 1000; i++) {
|
|
| 553 |
+ tableData.push({addrNm: "", addrPhoneNo: "", addrInfo1: "", addrInfo2: "", addrInfo3: "", addrInfo4: "", addrComment: ""});
|
|
| 554 |
+ } |
|
| 555 |
+ console.log(tableData); // 데이터 출력 확인 |
|
| 556 |
+ fn_selfmakeTable() |
|
| 557 |
+ }else{
|
|
| 558 |
+ $objTabul.clearData(); // clearData는 동기 방식이므로 바로 실행 |
|
| 559 |
+ |
|
| 560 |
+ } |
|
| 561 |
+// console.log('tabulNm : ', tabulNm);
|
|
| 562 |
+// console.log('tabulNm : ', tabulNm.trim());
|
|
| 563 |
+ |
|
| 527 | 564 |
|
| 528 |
- $objTabul.clearData(); |
|
| 529 | 565 |
$(tabluC+" #rowTotCnt").text(0); //총건수 수정 |
| 530 | 566 |
$(tabluC+" #rowDupCnt").text(0); //중복건수 수정 |
| 531 |
-// dupliPhoneDataRealList.length = 0; // 중복 휴대폰번호 초기화 |
|
| 567 |
+ |
|
| 568 |
+ // popup 영역 |
|
| 569 |
+ fn_errorPopClean(); |
|
| 532 | 570 |
} |
| 533 | 571 |
|
| 534 | 572 |
// 주소 대량등록 버튼 클릭 |
--- src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforClipboard.jsp
+++ src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforClipboard.jsp
... | ... | @@ -289,6 +289,11 @@ |
| 289 | 289 |
//받는 사람 리스트 영역에 클립보드 데이터 가져와보기 |
| 290 | 290 |
// 붙여넣기 기능 |
| 291 | 291 |
$('#tabulator_clip').off('paste').on('paste', function (e) {
|
| 292 |
+// fn_ClipMakeTable(); |
|
| 293 |
+ fn_errorPopClean(); |
|
| 294 |
+ fn_rowCntInit(); |
|
| 295 |
+ resetTableFieldsToDefault(); |
|
| 296 |
+ |
|
| 292 | 297 |
var element = e.originalEvent.clipboardData.getData('text');
|
| 293 | 298 |
var elmSplit = element.split("\n");
|
| 294 | 299 |
var realPhone = []; |
... | ... | @@ -318,6 +323,9 @@ |
| 318 | 323 |
console.log('Parsed data:', realPhone);
|
| 319 | 324 |
console.log('Tabulator data before getData:', $tableClip.getData());
|
| 320 | 325 |
// $tableClip.clearData(); |
| 326 |
+ $tableClip.setData([{
|
|
| 327 |
+ A: "", B: "", C: "", D: "", E: "", F: "", G: "" |
|
| 328 |
+ }]); // 초기 데이터로 복원 |
|
| 321 | 329 |
$tableClip.setData(realPhone); |
| 322 | 330 |
var totRows = $tableClip.getDataCount(); |
| 323 | 331 |
updateTotCnt(totRows); |
--- src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforExcel.jsp
+++ src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforExcel.jsp
... | ... | @@ -314,7 +314,8 @@ |
| 314 | 314 |
//파일 드래그앤드롭 종료 |
| 315 | 315 |
|
| 316 | 316 |
function excelFileChange(file) {
|
| 317 |
- errorPopClean(); // 에러 popup 초기화 |
|
| 317 |
+ console.log(' :: excelFileChange :: ');
|
|
| 318 |
+ fn_errorPopClean(); // 에러 popup 초기화 |
|
| 318 | 319 |
if (file) {
|
| 319 | 320 |
fn_loadAddActive(); |
| 320 | 321 |
var reader = new FileReader(); |
--- src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforSelf.jsp
+++ src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforSelf.jsp
... | ... | @@ -39,25 +39,50 @@ |
| 39 | 39 |
}); |
| 40 | 40 |
|
| 41 | 41 |
|
| 42 |
-function fn_selfUpdataCount(){
|
|
| 42 |
+function fn_selfUpdataCount(value){
|
|
| 43 |
+ |
|
| 44 |
+ ////////////////////////////////////////////////////////////////////////// |
|
| 45 |
+ |
|
| 46 |
+ console.log('fn_selfUpdataCount(value) : ', value);
|
|
| 47 |
+ let errorCount = 0; // 중복 오류 |
|
| 48 |
+ |
|
| 49 |
+ const number = value; |
|
| 50 |
+ const formattedNumber = formatPhoneNumber(number); // 번호 표준화 |
|
| 51 |
+ const cleanedNumber = formattedNumber.replace(/[^0-9]/g, ''); // 숫자만 남김 |
|
| 43 | 52 |
|
| 44 |
- // '휴대폰' 필드의 셀들 가져오기 |
|
| 45 |
- var cells = $tableSelf.getColumn("addrPhoneNo").getCells();
|
|
| 53 |
+ var existingNumbers = []; // 중복 번호를 저장할 배열 |
|
| 46 | 54 |
|
| 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; |
|
| 55 |
+ // 모든 행의 'addrPhoneNo' 값을 배열에 추가 |
|
| 56 |
+ var allRows = $tableSelf.getData(); // 테이블의 모든 데이터를 가져옴 |
|
| 57 |
+ allRows.forEach(function(row) {
|
|
| 58 |
+ if (row.addrPhoneNo) {
|
|
| 59 |
+ const cleanedExistingNumber = row.addrPhoneNo.replace(/[^0-9]/g, ''); // 숫자만 남김 |
|
| 60 |
+ existingNumbers.push(cleanedExistingNumber); // 기존 번호를 배열에 추가 |
|
| 61 |
+ } |
|
| 62 |
+ }); |
|
| 53 | 63 |
|
| 54 |
- console.log("휴대폰 번호가 있는 행 수: " + count);
|
|
| 55 | 64 |
|
| 65 |
+ // 중복제거한 데이터 구하기 |
|
| 66 |
+ var dataList = new Set(existingNumbers); |
|
| 56 | 67 |
var tabulNm = fn_utils_getTabulatorNm(); |
| 57 | 68 |
var tabluC = '.'+tabulNm |
| 69 |
+ $(tabluC+" #rowTotCnt").text(dataList.size); |
|
| 58 | 70 |
|
| 59 |
- $(tabluC+" #rowTotCnt").text(count); |
|
| 60 |
- return ; |
|
| 71 |
+ |
|
| 72 |
+ // 중복체크 |
|
| 73 |
+ var hasDuplicates = existingNumbers.length !== dataList.size; |
|
| 74 |
+ if (hasDuplicates) {
|
|
| 75 |
+ alert('중복된 값입니다 다시 입력해주세요.');
|
|
| 76 |
+ console.log('중복');
|
|
| 77 |
+ return ''; |
|
| 78 |
+ } |
|
| 79 |
+ |
|
| 80 |
+ if (!isValidPhoneNumber(formattedNumber)) { // 유효성 검사
|
|
| 81 |
+ alert('휴대폰 형식에 맞지 않는 데이터입니다.\nex) 발송불가 특수문자, 자릿수 오류 등');
|
|
| 82 |
+ console.log('유효성 실패');
|
|
| 83 |
+ return ''; |
|
| 84 |
+ } |
|
| 85 |
+ return formattedNumber; |
|
| 61 | 86 |
} |
| 62 | 87 |
|
| 63 | 88 |
|
... | ... | @@ -67,9 +92,10 @@ |
| 67 | 92 |
<!-- 붙여넣기 --> |
| 68 | 93 |
<div class="popCont pop_more_cont" id="popCont_3"> |
| 69 | 94 |
<div class="titBox"> |
| 70 |
- <p>- 엑셀(EXCEL), 텍스트(TXT) 파일로 작성된 주소록 내용을 복사하여 등록 가능합니다.</p> |
|
| 71 |
- <p>- 많은 양의 데이터를 입력하시려면 ‘주소록 복사(Ctrl+C) + 붙여넣기(Ctrl+V)’를 이용해주세요.</p> |
|
| 72 |
- <p>- 입력 내용은 (Tab) 또는 (,) 기호로 구분하여 입력하여야 합니다.</p> |
|
| 95 |
+<!-- <p>- 엑셀(EXCEL), 텍스트(TXT) 파일로 작성된 주소록 내용을 복사하여 등록 가능합니다.</p> --> |
|
| 96 |
+<!-- <p>- 많은 양의 데이터를 입력하시려면 ‘주소록 복사(Ctrl+C) + 붙여넣기(Ctrl+V)’를 이용해주세요.</p> --> |
|
| 97 |
+ <p>- 셀간 이동은 Tab으로 가능합니다.</p> |
|
| 98 |
+ <p>- 핸드폰 번호를 입력하지 않은 행은 저장되지 않습니다.</p> |
|
| 73 | 99 |
<p>- 이름 200byte, [*1*]~[*4*] 200byte, 메모 250byte까지 입력 가능합니다.</p> |
| 74 | 100 |
<p>- 주소록 등록이 어려우신 경우에는 <a href="<c:url value='/web/mjon/addragency/selectAddrAgencyList.do'/>" style="font-weight: bold; color: blue;">주소록 입력대행</a> 메뉴를 이용하실 수 있습니다. </p> |
| 75 | 101 |
<!-- <button type="button" class="txt_btn" onclick="location.href='/download/addr/주소록_대량등록.zip'"><i></i>TXT샘플 다운로드</button> --> |
--- src/main/webapp/js/kakao/at/addr.js
+++ src/main/webapp/js/kakao/at/addr.js
... | ... | @@ -60,13 +60,15 @@ |
| 60 | 60 |
} |
| 61 | 61 |
|
| 62 | 62 |
//주소록 그룹 중복체크 |
| 63 |
-function getAddrGroupDuplCheckAjax() {
|
|
| 63 |
+function getAddrGroupDuplCheckAjax(addrGrpNm) {
|
|
| 64 |
+ console.log('addrGrpNm : ', addrGrpNm)
|
|
| 65 |
+ console.log('getAddrGroupDuplCheckAjax()')
|
|
| 64 | 66 |
var isReturn = true; |
| 65 | 67 |
|
| 66 | 68 |
$.ajax({
|
| 67 | 69 |
url : "<c:url value='/web/addr/getAddrGroupDuplCheckAjax.do' />", |
| 68 | 70 |
type : 'POST', |
| 69 |
- data : {"addrGrpNm" : $("#addrGrpNm").val()},
|
|
| 71 |
+ data : {"addrGrpNm" : addrGrpNm},
|
|
| 70 | 72 |
dataType:'json', |
| 71 | 73 |
async: false, // 동기 |
| 72 | 74 |
success : function(data, status){
|
--- src/main/webapp/js/web/addr/event.js
+++ src/main/webapp/js/web/addr/event.js
... | ... | @@ -75,47 +75,39 @@ |
| 75 | 75 |
const newData = []; // 유효한 데이터만 저장할 새로운 배열 |
| 76 | 76 |
|
| 77 | 77 |
data.forEach((row, index) => {
|
| 78 |
- if (index % 10000 === 0) {
|
|
| 79 |
- console.log('i : ', index);
|
|
| 80 |
- } |
|
| 78 |
+// if (index % 10000 === 0) {
|
|
| 79 |
+// console.log('i : ', index);
|
|
| 80 |
+// } |
|
| 81 | 81 |
|
| 82 |
- const number = row.addrPhoneNo; |
|
| 83 |
- const formattedNumber = formatPhoneNumber(number); // 번호 표준화 |
|
| 84 |
- const cleanedNumber = formattedNumber.replace(/[^0-9]/g, ''); // 숫자만 남김 |
|
| 85 |
- |
|
| 86 |
- if (!existingNumbers.has(cleanedNumber)) { // 중복 번호 체크
|
|
| 87 |
- if (isValidPhoneNumber(formattedNumber)) { // 유효성 검사
|
|
| 88 |
- row.addrPhoneNo = formattedNumber; |
|
| 89 |
- existingNumbers.add(cleanedNumber); // 추가된 번호를 기존 목록에 추가 |
|
| 90 |
- newData.push(row); // 유효한 데이터만 새로운 배열에 추가 |
|
| 91 |
- } else {
|
|
| 92 |
- // 오류: 유효성 통과 못함 |
|
| 93 |
- errorCount++; |
|
| 94 |
-// $tableError.addRow({
|
|
| 95 |
-// name: row.addrNm, // 이름 |
|
| 96 |
-// phone: row.addrPhoneNo, // 폰번호 |
|
| 97 |
-// result: "오류" // 결과 메시지 추가 |
|
| 98 |
-// }); |
|
| 99 |
- errors.push({
|
|
| 100 |
- name: row.addrNm, // 이름 |
|
| 101 |
- phone: row.addrPhoneNo, // 폰번호 |
|
| 102 |
- result: "오류" // 결과 메시지 추가 |
|
| 103 |
- }); |
|
| 104 |
- } |
|
| 105 |
- } else {
|
|
| 106 |
- // 중복 |
|
| 107 |
- duplicateCount++; // 중복 번호가 발견될 때마다 카운트를 증가 |
|
| 108 |
-// $tableError.addRow({
|
|
| 109 |
-// name: row.addrNm, // 이름 |
|
| 110 |
-// phone: row.addrPhoneNo, // 폰번호 |
|
| 111 |
-// result: "중복" // 결과 메시지 추가 |
|
| 112 |
-// }); |
|
| 113 |
- duplicates.push({
|
|
| 114 |
- name: row.addrNm, // 이름 |
|
| 115 |
- phone: row.addrPhoneNo, // 폰번호 |
|
| 116 |
- result: "중복" // 결과 메시지 추가 |
|
| 117 |
- }); |
|
| 118 |
- } |
|
| 82 |
+ const number = row.addrPhoneNo; |
|
| 83 |
+ const formattedNumber = formatPhoneNumber(number); // 번호 표준화 |
|
| 84 |
+ const cleanedNumber = formattedNumber.replace(/[^0-9]/g, ''); // 숫자만 남김 |
|
| 85 |
+ |
|
| 86 |
+ if (!existingNumbers.has(cleanedNumber)) { // 중복 번호 체크
|
|
| 87 |
+ if (isValidPhoneNumber(formattedNumber)) { // 유효성 검사
|
|
| 88 |
+ row.addrPhoneNo = formattedNumber; |
|
| 89 |
+ existingNumbers.add(cleanedNumber); // 추가된 번호를 기존 목록에 추가 |
|
| 90 |
+ newData.push(row); // 유효한 데이터만 새로운 배열에 추가 |
|
| 91 |
+ } else {
|
|
| 92 |
+ // 오류: 유효성 통과 못함 |
|
| 93 |
+ errorCount++; |
|
| 94 |
+ |
|
| 95 |
+ errors.push({
|
|
| 96 |
+ name: row.addrNm, // 이름 |
|
| 97 |
+ phone: row.addrPhoneNo, // 폰번호 |
|
| 98 |
+ result: "오류" // 결과 메시지 추가 |
|
| 99 |
+ }); |
|
| 100 |
+ } |
|
| 101 |
+ } else {
|
|
| 102 |
+ // 중복 |
|
| 103 |
+ duplicateCount++; |
|
| 104 |
+ |
|
| 105 |
+ errors.push({
|
|
| 106 |
+ name: row.addrNm, // 이름 |
|
| 107 |
+ phone: row.addrPhoneNo, // 폰번호 |
|
| 108 |
+ result: "중복" // 결과 메시지 추가 |
|
| 109 |
+ }); |
|
| 110 |
+ } |
|
| 119 | 111 |
}); |
| 120 | 112 |
|
| 121 | 113 |
// data 배열을 newData 배열로 대체 |
... | ... | @@ -132,7 +124,7 @@ |
| 132 | 124 |
// 에러 카운트 |
| 133 | 125 |
$("#errorPopErrorCnt").text(errorCount);
|
| 134 | 126 |
// |
| 135 |
- $("#errorPopTotCnt").text(duplicateCount+errorCount);
|
|
| 127 |
+// $("#errorPopTotCnt").text(duplicateCount+errorCount);
|
|
| 136 | 128 |
|
| 137 | 129 |
// 수정된 데이터로 테이블 업데이트 |
| 138 | 130 |
$objTabul.setData(data); |
... | ... | @@ -141,6 +133,7 @@ |
| 141 | 133 |
$("#rowDupCnt").text(duplicateCount);
|
| 142 | 134 |
|
| 143 | 135 |
$(tabluC+" #rowTotCnt").text($objTabul.getDataCount()); |
| 136 |
+ $("#errorPopTotCnt").text($objTabul.getDataCount());
|
|
| 144 | 137 |
|
| 145 | 138 |
var errorData = errors.concat(duplicates); |
| 146 | 139 |
// 오류 및 중복 데이터를 한 번에 추가 |
... | ... | @@ -213,9 +206,11 @@ |
| 213 | 206 |
|
| 214 | 207 |
var data = $objTabul.getRows(); |
| 215 | 208 |
$objTabul.clearData(); |
| 216 |
- $(tabluC+" #rowTotCnt").text(0); //총건수 수정 |
|
| 217 |
- $(tabluC+" #rowDupCnt").text(0); //중복건수 수정 |
|
| 218 |
- dupliPhoneDataRealList.length = 0; // 중복 휴대폰번호 초기화 |
|
| 209 |
+ fn_rowCntInit(); |
|
| 210 |
+// dupliPhoneDataRealList.length = 0; // 중복 휴대폰번호 초기화 |
|
| 211 |
+ |
|
| 212 |
+ // select box 초기화 |
|
| 213 |
+ $('.field-selector').each(function() { $(this).val(''); });
|
|
| 219 | 214 |
}); |
| 220 | 215 |
|
| 221 | 216 |
// 받는사람 선택삭제 버튼 처리해주기 |
... | ... | @@ -321,7 +316,10 @@ |
| 321 | 316 |
|
| 322 | 317 |
|
| 323 | 318 |
// 주소록 에러결과 초기화 |
| 324 |
-function errorPopClean(){
|
|
| 319 |
+function fn_errorPopClean(){
|
|
| 320 |
+ |
|
| 321 |
+ var tabulNm = fn_utils_getTabulatorNm(); |
|
| 322 |
+ var tabluC = '.'+tabulNm |
|
| 325 | 323 |
|
| 326 | 324 |
// popup 영역 |
| 327 | 325 |
$tableError.clearData(); |
... | ... | @@ -333,10 +331,61 @@ |
| 333 | 331 |
$("#errorPopErrorCnt").text(0);
|
| 334 | 332 |
// |
| 335 | 333 |
$("#errorPopTotCnt").text(0);
|
| 336 |
- |
|
| 334 |
+ |
|
| 335 |
+ // select box 초기화 |
|
| 336 |
+ $(tabluC+' .field-selector').each(function() { $(this).val(''); });
|
|
| 337 | 337 |
|
| 338 | 338 |
} |
| 339 | 339 |
|
| 340 |
+function fn_rowCntInit(){
|
|
| 341 |
+ |
|
| 342 |
+ var tabulNm = fn_utils_getTabulatorNm(); |
|
| 343 |
+ var tabluC = '.'+tabulNm |
|
| 344 |
+ |
|
| 345 |
+ $(tabluC+" #rowTotCnt").text(0); //총건수 수정 |
|
| 346 |
+ $(tabluC+" #rowDupCnt").text(0); //중복건수 수정 |
|
| 347 |
+ $(tabluC+" #rowErrorCnt").text(0); //중복건수 수정 |
|
| 348 |
+} |
|
| 349 |
+ |
|
| 350 |
+ |
|
| 351 |
+ |
|
| 352 |
+//1. 필드 초기화 함수 |
|
| 353 |
+function resetTableFieldsToDefault() {
|
|
| 354 |
+ |
|
| 355 |
+ // 타불 객체 가져오기 |
|
| 356 |
+ var $objTabul = fn_utils_getTabulator(); |
|
| 357 |
+ |
|
| 358 |
+ // 필드를 A, B, C, D로 초기화 |
|
| 359 |
+ var defaultFields = ['A', 'B', 'C', 'D', 'E', 'F', 'G']; |
|
| 360 |
+ |
|
| 361 |
+ // 테이블의 기존 데이터를 가져옵니다. |
|
| 362 |
+ var currentData = $objTabul.getData(); |
|
| 363 |
+ |
|
| 364 |
+ // 초기 필드(A, B, C, D 등)를 위한 열 설정 |
|
| 365 |
+ var columns = [ |
|
| 366 |
+ {formatter: "rowSelection", titleFormatter: "rowSelection", clipboard: false, hozAlign: "center", headerHozAlign: "center", headerSort: false, cellClick: function(e, cell) {
|
|
| 367 |
+ cell.getRow().toggleSelect(); |
|
| 368 |
+ }}, |
|
| 369 |
+ {formatter:"rownum", align:"center", title:"No", hozAlign:"center", headerHozAlign:"center", width:40}
|
|
| 370 |
+ ]; |
|
| 371 |
+ |
|
| 372 |
+ // 기본 필드로 열 구성 |
|
| 373 |
+ defaultFields.forEach(field => {
|
|
| 374 |
+ columns.push({
|
|
| 375 |
+ title: field, |
|
| 376 |
+ field: field, |
|
| 377 |
+ hozAlign: "center", |
|
| 378 |
+ headerHozAlign: "center", |
|
| 379 |
+ editor: false, // 편집 비활성화 |
|
| 380 |
+ width: 125, |
|
| 381 |
+ validator: ["maxLength:100", "string"] |
|
| 382 |
+ }); |
|
| 383 |
+ }); |
|
| 384 |
+ |
|
| 385 |
+ // 테이블을 기본 필드로 업데이트 |
|
| 386 |
+ $objTabul.setColumns(columns); |
|
| 387 |
+// $objTabul.setData(updatedData); |
|
| 388 |
+} |
|
| 340 | 389 |
|
| 341 | 390 |
|
| 342 | 391 |
|
--- src/main/webapp/js/web/addr/init.js
+++ src/main/webapp/js/web/addr/init.js
... | ... | @@ -62,6 +62,7 @@ |
| 62 | 62 |
|
| 63 | 63 |
|
| 64 | 64 |
|
| 65 |
+// fn_ClipMakeTable(); |
|
| 65 | 66 |
|
| 66 | 67 |
|
| 67 | 68 |
$tableClip = new Tabulator("#tabulator_clip", {
|
... | ... | @@ -98,51 +99,7 @@ |
| 98 | 99 |
}); |
| 99 | 100 |
|
| 100 | 101 |
|
| 101 |
- |
|
| 102 |
- |
|
| 103 |
- var tableData = []; |
|
| 104 |
- for (var i = 0; i < 1000; i++) {
|
|
| 105 |
- tableData.push({A: "", B: "", C: "", D: "", E: "", F: "", G: ""});
|
|
| 106 |
- } |
|
| 107 | 102 |
|
| 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 | 103 |
// 사용자 정의 필터 설정: addrPhoneNo가 빈 값이나 undefined가 아닌 경우 |
| 147 | 104 |
// $tableSelf.setFilter(function(data, filterParams) {
|
| 148 | 105 |
// var value = data.addrPhoneNo; |
... | ... | @@ -192,8 +149,67 @@ |
| 192 | 149 |
] |
| 193 | 150 |
}); |
| 194 | 151 |
|
| 152 |
+ // 직접입력 타블레이터 |
|
| 153 |
+ fn_selfmakeTable() |
|
| 195 | 154 |
|
| 196 | 155 |
|
| 197 | 156 |
|
| 157 |
+}); |
|
| 158 |
+ |
|
| 159 |
+ |
|
| 160 |
+function fn_ClipMakeTable(){
|
|
| 161 |
+} |
|
| 162 |
+ |
|
| 163 |
+ |
|
| 164 |
+function fn_selfmakeTable(){
|
|
| 198 | 165 |
|
| 199 |
-});(No newline at end of file) |
|
| 166 |
+ var tableData = []; |
|
| 167 |
+ for (var i = 0; i < 1000; i++) {
|
|
| 168 |
+ tableData.push({addrNm: "", addrPhoneNo: "", addrInfo1: "", addrInfo2: "", addrInfo3: "", addrInfo4: "", addrComment: ""});
|
|
| 169 |
+ } |
|
| 170 |
+ |
|
| 171 |
+ // 테이블 초기화 |
|
| 172 |
+ $tableSelf = new Tabulator("#tabulator_self", {
|
|
| 173 |
+ height: "255px", |
|
| 174 |
+ width: "100%", |
|
| 175 |
+ layout: "fitColumns", |
|
| 176 |
+ clipboardPasteAction: "update", |
|
| 177 |
+ keybindings: {
|
|
| 178 |
+ "navRight": "tab", // Tab 키를 누르면 오른쪽 셀로 이동 |
|
| 179 |
+ "navLeft": "shift+tab", |
|
| 180 |
+ "editNext": false // Tab 키를 누를 때 편집 모드를 종료하지 않도록 설정 |
|
| 181 |
+ }, |
|
| 182 |
+ data: tableData, |
|
| 183 |
+ columns: [ |
|
| 184 |
+ {formatter: "rowSelection", titleFormatter: "rowSelection", clipboard: false, hozAlign: "center", headerHozAlign: "center", headerSort: false, cellClick: function(e, cell) {
|
|
| 185 |
+ cell.getRow().toggleSelect(); |
|
| 186 |
+ }}, |
|
| 187 |
+ {formatter:"rownum", hozAlign:"center" ,title:"No", headerHozAlign:"center", width:40},
|
|
| 188 |
+ {title:"이름", field:"addrNm", hozAlign:"center", headerHozAlign: "center", width:119, validator:["maxLength:100"], editor:"input"},
|
|
| 189 |
+ {title:"휴대폰", field:"addrPhoneNo", hozAlign:"center", headerHozAlign: "center", width:119, validator:["maxLength:100"], editor:"input"
|
|
| 190 |
+ , cellEdited:function(cell){
|
|
| 191 |
+ var currentValue = cell.getValue(); |
|
| 192 |
+ console.log('cell.getValue() : ', currentValue);
|
|
| 193 |
+ |
|
| 194 |
+ // 현재 값이 null 또는 undefined가 아니고, 값이 변경된 경우에만 처리 |
|
| 195 |
+ if (currentValue !== null |
|
| 196 |
+ && currentValue !== '' |
|
| 197 |
+ ) {
|
|
| 198 |
+ var newValue = fn_selfUpdataCount(currentValue); |
|
| 199 |
+ |
|
| 200 |
+ // 값이 실제로 변경된 경우에만 setValue 호출 |
|
| 201 |
+ if (currentValue !== newValue) {
|
|
| 202 |
+ cell.setValue(newValue); |
|
| 203 |
+ } |
|
| 204 |
+ } |
|
| 205 |
+ } |
|
| 206 |
+ }, |
|
| 207 |
+ {title:"[*1*]", field:"addrInfo1", hozAlign:"center", headerHozAlign: "center", width:119, validator:["maxLength:100"], editor:"input"},
|
|
| 208 |
+ {title:"[*2*]", field:"addrInfo2", hozAlign:"center", headerHozAlign: "center", width:119, validator:["maxLength:100"], editor:"input"},
|
|
| 209 |
+ {title:"[*3*]", field:"addrInfo3", hozAlign:"center", headerHozAlign: "center", width:119, validator:["maxLength:100"], editor:"input"},
|
|
| 210 |
+ {title:"[*4*]", field:"addrInfo4", hozAlign:"center", headerHozAlign: "center", width:119, validator:["maxLength:100"], editor:"input"},
|
|
| 211 |
+ {title:"메모", field:"addrComment", hozAlign:"center", headerHozAlign: "center", width:119, validator:["maxLength:100"], editor:"input"}
|
|
| 212 |
+ ], |
|
| 213 |
+ navigation: true // 키보드 탐색 활성화 |
|
| 214 |
+ }); |
|
| 215 |
+} |
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?