--- src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforClipboard.jsp
+++ src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforClipboard.jsp
... | ... | @@ -159,65 +159,7 @@ |
| 159 | 159 |
$(document).ready(function(){
|
| 160 | 160 |
//Tabulator AJAX Data Loading |
| 161 | 161 |
|
| 162 |
- //받는사람 전체삭제 버튼 처리 |
|
| 163 |
- $('.all_del').click(function(){
|
|
| 164 |
- var data = $tableClip.getRows(); |
|
| 165 |
- if(data == null || data == ""){
|
|
| 166 |
- alert("받는사람을 추가해 주세요.");
|
|
| 167 |
- return false; |
|
| 168 |
- }else{
|
|
| 169 |
- $tableClip.clearData(); |
|
| 170 |
- $("#rowTotCnt").text(0); //총건수 수정
|
|
| 171 |
- $("#rowDupCnt").text(0); //중복건수 수정
|
|
| 172 |
- dupliPhoneDataRealList.length = 0; // 중복 휴대폰번호 초기화 |
|
| 173 |
- } |
|
| 174 |
- |
|
| 175 |
- }); |
|
| 176 | 162 |
|
| 177 |
- |
|
| 178 |
-// 받는사람 오류번호 삭제 처리해주기 |
|
| 179 |
- $('.chkVali_del').click(function(){
|
|
| 180 |
- //기존 연락처 모두 불러오기 |
|
| 181 |
- var data = $tableClip.getRows(); |
|
| 182 |
- var tableData = []; |
|
| 183 |
- var totLen = $tableClip.getRows().length; |
|
| 184 |
- var errCnt = 0; |
|
| 185 |
- |
|
| 186 |
- if(totLen > 0){
|
|
| 187 |
- if(confirm("올바르지 않은 연락처 정보를 삭제 하시겠습니까?")){
|
|
| 188 |
- for(var i=0; i < totLen; i++){
|
|
| 189 |
- |
|
| 190 |
- |
|
| 191 |
- var phone = data[i].getData().phone; |
|
| 192 |
- var valiCheck = checkHpNum(phone); |
|
| 193 |
- if(valiCheck){
|
|
| 194 |
- 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});
|
|
| 195 |
- }else{
|
|
| 196 |
- errCnt++; |
|
| 197 |
- } |
|
| 198 |
- } |
|
| 199 |
- |
|
| 200 |
- var removeDuplData = dupliPhoneData(tableData); |
|
| 201 |
- |
|
| 202 |
- $tableClip.setData(removeDuplData); |
|
| 203 |
- |
|
| 204 |
- //총 받는사람 수 계산 |
|
| 205 |
- totRows = $tableClip.getRows().length; |
|
| 206 |
- console.log('totRows : ', totRows);
|
|
| 207 |
- updateTotCnt(totRows); |
|
| 208 |
- |
|
| 209 |
- if(errCnt > 0){
|
|
| 210 |
- alert(errCnt + " 건의 연락처를 삭제하였습니다."); |
|
| 211 |
- return false; |
|
| 212 |
- }else{
|
|
| 213 |
- alert("오류가 있는 연락처가 없습니다.");
|
|
| 214 |
- } |
|
| 215 |
- } |
|
| 216 |
- }else{
|
|
| 217 |
- alert("연락처 정보를 입력해 주세요.");
|
|
| 218 |
- return false; |
|
| 219 |
- } |
|
| 220 |
- }); |
|
| 221 | 163 |
|
| 222 | 164 |
//전체 데이터 갯수 구하는 함수 |
| 223 | 165 |
function updateTotCnt(data){
|
... | ... | @@ -338,27 +280,6 @@ |
| 338 | 280 |
}); |
| 339 | 281 |
|
| 340 | 282 |
|
| 341 |
- |
|
| 342 |
- //받는사람 중복 삭제 |
|
| 343 |
- $('.duple_del').click(function(){
|
|
| 344 |
- //기존 연락처 모두 불러오기 |
|
| 345 |
- var data = $tableClip.getRows(); |
|
| 346 |
- var tableData = []; |
|
| 347 |
- var dpCnt = 0; |
|
| 348 |
- var totLen = $tableClip.getRows().length; |
|
| 349 |
- |
|
| 350 |
- for(var i=0; i < totLen; i++){
|
|
| 351 |
- tableData.push({name: data[i].getData().name.trim(), phone: data[i].getData().phone.trim()});
|
|
| 352 |
- } |
|
| 353 |
- |
|
| 354 |
- var removeDuplData = dupliPhoneData(tableData); |
|
| 355 |
- $tableClip.setData(removeDuplData); |
|
| 356 |
- |
|
| 357 |
- //총 받는사람 수 계산 |
|
| 358 |
- totRows = $tableClip.getRows().length; |
|
| 359 |
- updateTotCnt(totRows); |
|
| 360 |
- }); |
|
| 361 |
- |
|
| 362 | 283 |
|
| 363 | 284 |
|
| 364 | 285 |
|
... | ... | @@ -367,67 +288,43 @@ |
| 367 | 288 |
|
| 368 | 289 |
//받는 사람 리스트 영역에 클립보드 데이터 가져와보기 |
| 369 | 290 |
// 붙여넣기 기능 |
| 370 |
- $('#tabulator_clip').on('paste', function (e) {
|
|
| 371 |
- var element = e.originalEvent.clipboardData.getData('text'); // 클립보드에 복사한 데이터 가져오기
|
|
| 291 |
+ $('#tabulator_clip').off('paste').on('paste', function (e) {
|
|
| 292 |
+ var element = e.originalEvent.clipboardData.getData('text');
|
|
| 372 | 293 |
var elmSplit = element.split("\n");
|
| 373 |
- var elmLen = elmSplit.length; |
|
| 374 |
- console.log('elmSplit : ', elmSplit);
|
|
| 375 |
- |
|
| 376 |
- if(elmLen < 0){
|
|
| 377 |
- alert("붙여넣을 연락처를 복사해주세요.");
|
|
| 378 |
- return false; |
|
| 379 |
- } |
|
| 380 |
- if (elmLen > 20001) {
|
|
| 381 |
- alert("2만줄 이상의 업로드는 데이터 부하로 업로드 할수 없습니다.");
|
|
| 382 |
- return false; |
|
| 383 |
- } |
|
| 384 |
- |
|
| 385 |
- tableErrorData.length = 0; // 오류 번호 배열 초기화 |
|
| 386 |
- |
|
| 387 | 294 |
var realPhone = []; |
| 388 | 295 |
|
| 389 |
- for(var i = 0; i < elmLen; i++){
|
|
| 390 |
- var splitStr = elmSplit[i]; |
|
| 391 |
- var tabData = splitStr.split("\t"); // 탭 구분으로 데이터 분할
|
|
| 392 |
- var comData = splitStr.split(","); // 콤마 구분으로 데이터 분할
|
|
| 393 |
- var splitData = (tabData.length >= 2) ? tabData : comData; |
|
| 296 |
+ for (var i = 0; i < elmSplit.length; i++) {
|
|
| 297 |
+ var splitStr = elmSplit[i].trim(); |
|
| 298 |
+ if (splitStr === "") continue; // 공백 행 무시 |
|
| 394 | 299 |
|
| 395 |
- if(splitData.length == 0){ // 데이터가 없는 경우
|
|
| 396 |
- alert("탭으로 구분하여 데이터를 복사해 주세요.");
|
|
| 300 |
+ var tabData = splitStr.split("\t");
|
|
| 301 |
+ var comData = splitStr.split(",");
|
|
| 302 |
+ |
|
| 303 |
+ var splitData = (tabData.length > 1) ? tabData : comData; |
|
| 304 |
+ |
|
| 305 |
+ if (splitData.length === 0) {
|
|
| 306 |
+ alert("탭 또는 콤마로 구분하여 데이터를 복사해 주세요.");
|
|
| 397 | 307 |
return false; |
| 398 | 308 |
} |
| 399 | 309 |
|
| 400 |
- if(splitData.length == 1){
|
|
| 401 |
- realPhone.push({ A: splitData[0].trim() });
|
|
| 402 |
- } else {
|
|
| 403 |
- let keys = ['A', 'B', 'C', 'D', 'E', 'F', 'G']; |
|
| 404 |
- let data = {};
|
|
| 405 |
- splitData.forEach((item, index) => {
|
|
| 406 |
- data[keys[index]] = item.trim(); |
|
| 407 |
- }); |
|
| 408 |
- realPhone.push(data); |
|
| 409 |
- } |
|
| 310 |
+ let keys = ['A', 'B', 'C', 'D', 'E', 'F', 'G']; |
|
| 311 |
+ let data = {};
|
|
| 312 |
+ splitData.forEach((item, index) => {
|
|
| 313 |
+ data[keys[index]] = item.trim() || ""; // 빈 문자열로 기본값 설정 |
|
| 314 |
+ }); |
|
| 315 |
+ realPhone.push(data); |
|
| 410 | 316 |
} |
| 411 |
- console.log('realPhone : ', realPhone);
|
|
| 412 | 317 |
|
| 413 |
- var recTableData = $tableClip.getRows().map(row => createDataObject(row.getData())); |
|
| 414 |
- console.log('recTableData : ', recTableData);
|
|
| 415 |
- var tableData = recTableData.concat(realPhone); |
|
| 416 |
- |
|
| 417 |
- // 중복 연락처 제거 작업 (필요에 따라 적용) |
|
| 418 |
- // var removeDuplPhone = dupliPhoneData(tableData); |
|
| 419 |
- var removeDuplPhone = tableData; // 현재 중복 제거하지 않음 |
|
| 420 |
- |
|
| 421 |
- // 기존 데이터를 유지하고 새 데이터를 추가한 결과를 테이블에 반영 |
|
| 422 |
- $tableClip.setData(removeDuplPhone); |
|
| 423 |
- |
|
| 424 |
- var totRows = $tableClip.getRows().length; |
|
| 425 |
- updateTotCnt(totRows); // 전체 데이터 갯수 구하기 |
|
| 426 |
- |
|
| 427 |
- if (tableErrorData.length > 0) {
|
|
| 428 |
- alert("데이터를 확인해 주세요.");
|
|
| 429 |
- } |
|
| 318 |
+ console.log('Parsed data:', realPhone);
|
|
| 319 |
+ console.log('Tabulator data before getData:', $tableClip.getData());
|
|
| 320 |
+// $tableClip.clearData(); |
|
| 321 |
+ $tableClip.setData(realPhone); |
|
| 322 |
+ var totRows = $tableClip.getDataCount(); |
|
| 323 |
+ updateTotCnt(totRows); |
|
| 324 |
+ console.log('Tabulator data after getData:', $tableClip.getData());
|
|
| 430 | 325 |
}); |
| 326 |
+ |
|
| 327 |
+ |
|
| 431 | 328 |
|
| 432 | 329 |
|
| 433 | 330 |
|
... | ... | @@ -539,14 +436,11 @@ |
| 539 | 436 |
</div> |
| 540 | 437 |
<div class="excel_middle2"> |
| 541 | 438 |
<p> |
| 542 |
- 총 <span class="c_e40000 fwBold" id="rowTotCnt">0</span>건 / 중복 <span class="c_002c9a fwBold" id="rowDupCnt">0</span>건 |
|
| 543 |
-<!-- --> |
|
| 544 |
- <button type="button" class="btnType btnType6" data-tooltip="addrMassDupli_layer" id="tableClipDupliBtn">중복번호</button> |
|
| 545 |
-<!-- <button type="button" class="btnType btnType6" data-tooltip="addrMassDupli_layer" onclick="GetAddrMassDupli()" id="btnAddrMassDupli">중복번호</button> --> |
|
| 546 |
-<!-- --> |
|
| 547 |
-<!-- <button type="button" class="btnType btnType6" data-tooltip="addrMassSaveDupli_layer" onclick="GetAddrMassSaveDupli()" id="btnAddrMassSaveDupli">중복번호</button> --> |
|
| 439 |
+ 총 <span class="c_e40000 fwBold" id="rowTotCnt">0</span>건 |
|
| 440 |
+ / 중복 <span class="c_002c9a fwBold" id="rowDupCnt">0</span>건 |
|
| 441 |
+ / 오류 <span class="c_002c9a fwBold" id="rowErrorCnt">0</span>건 |
|
| 442 |
+ <button type="button" class="btn_list_detail" data-tooltip="adr_popup14"><img src="/publish/images/search.png"></button> |
|
| 548 | 443 |
</p> |
| 549 |
-<!-- <button type="button" class="btnType btnType6 addCallToF">번호추가</button> --> |
|
| 550 | 444 |
</div> |
| 551 | 445 |
|
| 552 | 446 |
|
... | ... | @@ -555,9 +449,9 @@ |
| 555 | 449 |
<div class="adr_excel" style="margin-top: 13px;"> |
| 556 | 450 |
<!-- thead --> |
| 557 | 451 |
<div class="adr_hd select_adr_hd" data-group="tableClip"> |
| 558 |
- <div></div> |
|
| 559 |
- <div style="width: 125px;"> |
|
| 560 |
- <label for="" class="label"></label> |
|
| 452 |
+ <div style="width: 80px;"></div> |
|
| 453 |
+ <div style="width: 125px;"> |
|
| 454 |
+ <label for="" class="label"></label> |
|
| 561 | 455 |
<select class="field-selector"> |
| 562 | 456 |
<option value="">선택하기</option> |
| 563 | 457 |
<option value="addrNm">이름</option> |
... | ... | @@ -568,9 +462,9 @@ |
| 568 | 462 |
<option value="addrInfo4">[*4*]</option> |
| 569 | 463 |
<option value="addrComment">메모</option> |
| 570 | 464 |
</select> |
| 571 |
- </div> |
|
| 572 |
- <div style="width: 125px;"> |
|
| 573 |
- <label for="" class="label"></label> |
|
| 465 |
+ </div> |
|
| 466 |
+ <div style="width: 125px;"> |
|
| 467 |
+ <label for="" class="label"></label> |
|
| 574 | 468 |
<select class="field-selector"> |
| 575 | 469 |
<option value="">선택하기</option> |
| 576 | 470 |
<option value="addrNm">이름</option> |
... | ... | @@ -581,9 +475,9 @@ |
| 581 | 475 |
<option value="addrInfo4">[*4*]</option> |
| 582 | 476 |
<option value="addrComment">메모</option> |
| 583 | 477 |
</select> |
| 584 |
- </div> |
|
| 585 |
- <div style="width: 125px;"> |
|
| 586 |
- <label for="" class="label"></label> |
|
| 478 |
+ </div> |
|
| 479 |
+ <div style="width: 125px;"> |
|
| 480 |
+ <label for="" class="label"></label> |
|
| 587 | 481 |
<select class="field-selector"> |
| 588 | 482 |
<option value="">선택하기</option> |
| 589 | 483 |
<option value="addrNm">이름</option> |
... | ... | @@ -594,9 +488,9 @@ |
| 594 | 488 |
<option value="addrInfo4">[*4*]</option> |
| 595 | 489 |
<option value="addrComment">메모</option> |
| 596 | 490 |
</select> |
| 597 |
- </div> |
|
| 598 |
- <div style="width: 125px;"> |
|
| 599 |
- <label for="" class="label"></label> |
|
| 491 |
+ </div> |
|
| 492 |
+ <div style="width: 125px;"> |
|
| 493 |
+ <label for="" class="label"></label> |
|
| 600 | 494 |
<select class="field-selector"> |
| 601 | 495 |
<option value="">선택하기</option> |
| 602 | 496 |
<option value="addrNm">이름</option> |
... | ... | @@ -607,9 +501,9 @@ |
| 607 | 501 |
<option value="addrInfo4">[*4*]</option> |
| 608 | 502 |
<option value="addrComment">메모</option> |
| 609 | 503 |
</select> |
| 610 |
- </div> |
|
| 611 |
- <div style="width: 125px;"> |
|
| 612 |
- <label for="" class="label"></label> |
|
| 504 |
+ </div> |
|
| 505 |
+ <div style="width: 125px;"> |
|
| 506 |
+ <label for="" class="label"></label> |
|
| 613 | 507 |
<select class="field-selector"> |
| 614 | 508 |
<option value="">선택하기</option> |
| 615 | 509 |
<option value="addrNm">이름</option> |
... | ... | @@ -620,9 +514,9 @@ |
| 620 | 514 |
<option value="addrInfo4">[*4*]</option> |
| 621 | 515 |
<option value="addrComment">메모</option> |
| 622 | 516 |
</select> |
| 623 |
- </div> |
|
| 624 |
- <div style="width: 125px;"> |
|
| 625 |
- <label for="" class="label"></label> |
|
| 517 |
+ </div> |
|
| 518 |
+ <div style="width: 125px;"> |
|
| 519 |
+ <label for="" class="label"></label> |
|
| 626 | 520 |
<select class="field-selector"> |
| 627 | 521 |
<option value="">선택하기</option> |
| 628 | 522 |
<option value="addrNm">이름</option> |
... | ... | @@ -633,9 +527,9 @@ |
| 633 | 527 |
<option value="addrInfo4">[*4*]</option> |
| 634 | 528 |
<option value="addrComment">메모</option> |
| 635 | 529 |
</select> |
| 636 |
- </div> |
|
| 637 |
- <div style="width: 125px;"> |
|
| 638 |
- <label for="" class="label"></label> |
|
| 530 |
+ </div> |
|
| 531 |
+ <div style="width: 125px;"> |
|
| 532 |
+ <label for="" class="label"></label> |
|
| 639 | 533 |
<select class="field-selector"> |
| 640 | 534 |
<option value="">선택하기</option> |
| 641 | 535 |
<option value="addrNm">이름</option> |
... | ... | @@ -646,7 +540,7 @@ |
| 646 | 540 |
<option value="addrInfo4">[*4*]</option> |
| 647 | 541 |
<option value="addrComment">메모</option> |
| 648 | 542 |
</select> |
| 649 |
- </div> |
|
| 543 |
+ </div> |
|
| 650 | 544 |
</div> |
| 651 | 545 |
</div> |
| 652 | 546 |
|
--- src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforExcel.jsp
+++ src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforExcel.jsp
... | ... | @@ -355,7 +355,7 @@ |
| 355 | 355 |
data.forEach((row, index) => {
|
| 356 | 356 |
var rowData = {};
|
| 357 | 357 |
keys.forEach((key, idx) => { // index 변수명 변경 (내부와 외부에서 사용되므로 충돌 방지)
|
| 358 |
- console.log('row[idx] : ', row[idx]);
|
|
| 358 |
+// console.log('row[idx] : ', row[idx]);
|
|
| 359 | 359 |
rowData[key] = typeof row[idx] === 'string' ? row[idx].trim() : row[idx]; // 문자열인지 확인하고 trim() 적용 |
| 360 | 360 |
}); |
| 361 | 361 |
tableData.push(rowData); |
... | ... | @@ -568,13 +568,12 @@ |
| 568 | 568 |
|
| 569 | 569 |
|
| 570 | 570 |
|
| 571 |
- |
|
| 572 |
- <div class="adr_excel" style="margin-top: 13px;"> |
|
| 573 |
- <!-- thead --> |
|
| 574 |
- <div class="adr_hd select_adr_hd" data-group="tableExcel"> |
|
| 575 |
- <div style="width: 80px;"></div> |
|
| 576 |
- <div style="width: 125px;"> |
|
| 577 |
- <label for="" class="label"></label> |
|
| 571 |
+ <div class="adr_excel" style="margin-top: 13px;"> |
|
| 572 |
+ <!-- thead --> |
|
| 573 |
+ <div class="adr_hd select_adr_hd" data-group="tableExcel"> |
|
| 574 |
+ <div style="width: 80px;"></div> |
|
| 575 |
+ <div style="width: 125px;"> |
|
| 576 |
+ <label for="" class="label"></label> |
|
| 578 | 577 |
<select class="field-selector"> |
| 579 | 578 |
<option value="">선택하기</option> |
| 580 | 579 |
<option value="addrNm">이름</option> |
... | ... | @@ -585,9 +584,9 @@ |
| 585 | 584 |
<option value="addrInfo4">[*4*]</option> |
| 586 | 585 |
<option value="addrComment">메모</option> |
| 587 | 586 |
</select> |
| 588 |
- </div> |
|
| 589 |
- <div style="width: 125px;"> |
|
| 590 |
- <label for="" class="label"></label> |
|
| 587 |
+ </div> |
|
| 588 |
+ <div style="width: 125px;"> |
|
| 589 |
+ <label for="" class="label"></label> |
|
| 591 | 590 |
<select class="field-selector"> |
| 592 | 591 |
<option value="">선택하기</option> |
| 593 | 592 |
<option value="addrNm">이름</option> |
... | ... | @@ -598,9 +597,9 @@ |
| 598 | 597 |
<option value="addrInfo4">[*4*]</option> |
| 599 | 598 |
<option value="addrComment">메모</option> |
| 600 | 599 |
</select> |
| 601 |
- </div> |
|
| 602 |
- <div style="width: 125px;"> |
|
| 603 |
- <label for="" class="label"></label> |
|
| 600 |
+ </div> |
|
| 601 |
+ <div style="width: 125px;"> |
|
| 602 |
+ <label for="" class="label"></label> |
|
| 604 | 603 |
<select class="field-selector"> |
| 605 | 604 |
<option value="">선택하기</option> |
| 606 | 605 |
<option value="addrNm">이름</option> |
... | ... | @@ -611,9 +610,9 @@ |
| 611 | 610 |
<option value="addrInfo4">[*4*]</option> |
| 612 | 611 |
<option value="addrComment">메모</option> |
| 613 | 612 |
</select> |
| 614 |
- </div> |
|
| 615 |
- <div style="width: 125px;"> |
|
| 616 |
- <label for="" class="label"></label> |
|
| 613 |
+ </div> |
|
| 614 |
+ <div style="width: 125px;"> |
|
| 615 |
+ <label for="" class="label"></label> |
|
| 617 | 616 |
<select class="field-selector"> |
| 618 | 617 |
<option value="">선택하기</option> |
| 619 | 618 |
<option value="addrNm">이름</option> |
... | ... | @@ -624,9 +623,9 @@ |
| 624 | 623 |
<option value="addrInfo4">[*4*]</option> |
| 625 | 624 |
<option value="addrComment">메모</option> |
| 626 | 625 |
</select> |
| 627 |
- </div> |
|
| 628 |
- <div style="width: 125px;"> |
|
| 629 |
- <label for="" class="label"></label> |
|
| 626 |
+ </div> |
|
| 627 |
+ <div style="width: 125px;"> |
|
| 628 |
+ <label for="" class="label"></label> |
|
| 630 | 629 |
<select class="field-selector"> |
| 631 | 630 |
<option value="">선택하기</option> |
| 632 | 631 |
<option value="addrNm">이름</option> |
... | ... | @@ -637,9 +636,9 @@ |
| 637 | 636 |
<option value="addrInfo4">[*4*]</option> |
| 638 | 637 |
<option value="addrComment">메모</option> |
| 639 | 638 |
</select> |
| 640 |
- </div> |
|
| 641 |
- <div style="width: 125px;"> |
|
| 642 |
- <label for="" class="label"></label> |
|
| 639 |
+ </div> |
|
| 640 |
+ <div style="width: 125px;"> |
|
| 641 |
+ <label for="" class="label"></label> |
|
| 643 | 642 |
<select class="field-selector"> |
| 644 | 643 |
<option value="">선택하기</option> |
| 645 | 644 |
<option value="addrNm">이름</option> |
... | ... | @@ -650,9 +649,9 @@ |
| 650 | 649 |
<option value="addrInfo4">[*4*]</option> |
| 651 | 650 |
<option value="addrComment">메모</option> |
| 652 | 651 |
</select> |
| 653 |
- </div> |
|
| 654 |
- <div style="width: 125px;"> |
|
| 655 |
- <label for="" class="label"></label> |
|
| 652 |
+ </div> |
|
| 653 |
+ <div style="width: 125px;"> |
|
| 654 |
+ <label for="" class="label"></label> |
|
| 656 | 655 |
<select class="field-selector"> |
| 657 | 656 |
<option value="">선택하기</option> |
| 658 | 657 |
<option value="addrNm">이름</option> |
... | ... | @@ -663,9 +662,9 @@ |
| 663 | 662 |
<option value="addrInfo4">[*4*]</option> |
| 664 | 663 |
<option value="addrComment">메모</option> |
| 665 | 664 |
</select> |
| 666 |
- </div> |
|
| 667 |
- </div> |
|
| 668 |
- </div> |
|
| 665 |
+ </div> |
|
| 666 |
+ </div> |
|
| 667 |
+ </div> |
|
| 669 | 668 |
|
| 670 | 669 |
<div class="drag_drop_wrap callList_box" id="tabulator_excel"> |
| 671 | 670 |
<img src="/publish/images/content/excel.jpg" style="width: 100%;"> |
--- src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforSelf.jsp
+++ src/main/webapp/WEB-INF/jsp/web/addr/include/addrListforSelf.jsp
... | ... | @@ -13,26 +13,6 @@ |
| 13 | 13 |
// $("#btnAddrMassDupli").hide();
|
| 14 | 14 |
// $("#btnAddrMassSaveDupli").hide();
|
| 15 | 15 |
|
| 16 |
- //붙여넣기 이벤트 핸들러 |
|
| 17 |
- document.querySelector('#tabulator_clip').addEventListener('paste', function(e) {
|
|
| 18 |
- e.preventDefault(); |
|
| 19 |
- var text = e.clipboardData.getData('text/plain');
|
|
| 20 |
- var rows = text.split('\n').map(row => row.split(',').map(cell => cell.trim()));
|
|
| 21 |
- |
|
| 22 |
- var tableData = rows.map(row => {
|
|
| 23 |
- return {
|
|
| 24 |
- A: row[0] || "", |
|
| 25 |
- B: row[1] || "", |
|
| 26 |
- C: row[2] || "", |
|
| 27 |
- D: row[3] || "", |
|
| 28 |
- E: row[4] || "", |
|
| 29 |
- F: row[5] || "", |
|
| 30 |
- G: row[6] || "" |
|
| 31 |
- }; |
|
| 32 |
- }); |
|
| 33 |
- |
|
| 34 |
- $tableClip.setData(tableData); |
|
| 35 |
- }); |
|
| 36 | 16 |
|
| 37 | 17 |
}); |
| 38 | 18 |
|
... | ... | @@ -211,7 +191,7 @@ |
| 211 | 191 |
|
| 212 | 192 |
var removeDuplData = dupliPhoneData(tableData); |
| 213 | 193 |
|
| 214 |
- $tableClip.setData(removeDuplData); |
|
| 194 |
+// $tableClip.setData(removeDuplData); |
|
| 215 | 195 |
|
| 216 | 196 |
//총 받는사람 수 계산 |
| 217 | 197 |
totRows = $tableClip.getRows().length; |
... | ... | @@ -355,7 +335,7 @@ |
| 355 | 335 |
} |
| 356 | 336 |
|
| 357 | 337 |
var removeDuplData = dupliPhoneData(tableData); |
| 358 |
- $tableClip.setData(removeDuplData); |
|
| 338 |
+// $tableClip.setData(removeDuplData); |
|
| 359 | 339 |
|
| 360 | 340 |
//총 받는사람 수 계산 |
| 361 | 341 |
totRows = $tableClip.getRows().length; |
--- src/main/webapp/WEB-INF/jsp/web/addrBlock/AddrBlockList.jsp
+++ src/main/webapp/WEB-INF/jsp/web/addrBlock/AddrBlockList.jsp
... | ... | @@ -172,6 +172,7 @@ |
| 172 | 172 |
|
| 173 | 173 |
//받는 사람 리스트 영역에 클립보드 데이터 가져와보기 |
| 174 | 174 |
$('.callList_box').on('paste', function (e) {
|
| 175 |
+ console.log(' :: callList_box :: ');
|
|
| 175 | 176 |
var element = e.originalEvent.clipboardData.getData('text'); // 클립보드에 복사한 데이터 가져오기
|
| 176 | 177 |
var elmSplit= []; |
| 177 | 178 |
elmSplit = element.split("\n");
|
--- src/main/webapp/WEB-INF/jsp/web/msgcampain/MsgDataSMLView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/msgcampain/MsgDataSMLView.jsp
... | ... | @@ -905,6 +905,7 @@ |
| 905 | 905 |
|
| 906 | 906 |
//ë°ëì¬ë 목ë¡ì ë³µì¬/ë¶ì¬ë£ê¸° ê¸°ë¥ ì²ë¦¬ |
| 907 | 907 |
$('.callList_box').on('paste', function (e) {
|
| 908 |
+ console.log(' :: callList_box :: ');
|
|
| 908 | 909 |
|
| 909 | 910 |
var element = e.originalEvent.clipboardData.getData('text'); // í´ë¦½ë³´ëì ë³µì¬í ë°ì´í° ê°ì ¸ì¤ê¸°
|
| 910 | 911 |
|
--- src/main/webapp/WEB-INF/jsp/web/msgcampain/excel/MsgExcelDataSMLView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/msgcampain/excel/MsgExcelDataSMLView.jsp
... | ... | @@ -616,6 +616,7 @@ |
| 616 | 616 |
|
| 617 | 617 |
//받는 사람 리스트 영역에 클립보드 데이터 가져와보기 |
| 618 | 618 |
$('.callList_box').on('paste', function (e) {
|
| 619 |
+ console.log(' :: callList_box :: ');
|
|
| 619 | 620 |
|
| 620 | 621 |
var element = e.originalEvent.clipboardData.getData('text'); // 클립보드에 복사한 데이터 가져오기
|
| 621 | 622 |
|
--- src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataSMLView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/msgdata/MsgDataSMLView.jsp
... | ... | @@ -826,6 +826,7 @@ |
| 826 | 826 |
|
| 827 | 827 |
//받는사람 목록에 복사/붙여넣기 기능 처리 |
| 828 | 828 |
$('.callList_box').on('paste', function (e) {
|
| 829 |
+ console.log(' :: callList_box :: ');
|
|
| 829 | 830 |
|
| 830 | 831 |
var element = e.originalEvent.clipboardData.getData('text'); // 클립보드에 복사한 데이터 가져오기
|
| 831 | 832 |
|
--- src/main/webapp/WEB-INF/jsp/web/msgdata/excel/MsgExcelDataSMLView.jsp
+++ src/main/webapp/WEB-INF/jsp/web/msgdata/excel/MsgExcelDataSMLView.jsp
... | ... | @@ -845,6 +845,7 @@ |
| 845 | 845 |
//받는 사람 리스트 영역에 클립보드 데이터 가져와보기 |
| 846 | 846 |
//받는사람 목록에 복사/붙여넣기 기능 처리 |
| 847 | 847 |
$('.callList_box').on('paste', function (e) {
|
| 848 |
+ console.log(' :: callList_box :: ');
|
|
| 848 | 849 |
|
| 849 | 850 |
var element = e.originalEvent.clipboardData.getData('text'); // 클립보드에 복사한 데이터 가져오기
|
| 850 | 851 |
|
--- src/main/webapp/js/web/addr/event.js
+++ src/main/webapp/js/web/addr/event.js
... | ... | @@ -67,54 +67,59 @@ |
| 67 | 67 |
var phoneNumberChk = false; |
| 68 | 68 |
var existingNumbers = new Set(); // 배열에서 Set으로 변경 |
| 69 | 69 |
|
| 70 |
- console.log('입력된 번호들 : ', data);
|
|
| 71 |
- |
|
| 72 |
- |
|
| 73 | 70 |
let errorCount = 0; // 중복 번호 개수를 저장할 변수 |
| 74 | 71 |
let duplicateCount = 0; // 중복 번호 개수를 저장할 변수 |
| 75 | 72 |
|
| 76 |
- // 각 번호를 테이블에 추가 (중복 검사 및 포맷팅 포함) |
|
| 77 |
- for (let i = data.length - 1; i >= 0; i--) {
|
|
| 78 |
-// console.log('index : ', index);
|
|
| 79 |
-// console.log('existingNumbers : ', existingNumbers);
|
|
| 73 |
+ const errors = []; // 오류 데이터를 저장할 배열 |
|
| 74 |
+ const duplicates = []; // 오류 데이터를 저장할 배열 |
|
| 75 |
+ const newData = []; // 유효한 데이터만 저장할 새로운 배열 |
|
| 80 | 76 |
|
| 81 |
- let row = data[i]; |
|
| 82 |
- var number = row.addrPhoneNo; |
|
| 83 |
- const formattedNumber = formatPhoneNumber(number); // 번호 표준화 |
|
| 84 |
-// console.log('number : ', number)
|
|
| 85 |
-// console.log('formattedNumber : ', formattedNumber)
|
|
| 86 |
- const cleanedNumber = formattedNumber.replace(/[^0-9]/g, ''); // 숫자만 남김 |
|
| 87 |
- if (!existingNumbers.has(cleanedNumber)) { // 중복 번호 체크
|
|
| 88 |
- if (isValidPhoneNumber(formattedNumber)) { // 유효성 검사
|
|
| 89 |
-// $tableError.addRow({ phone: formattedNumber }); // 표준화된 번호로 추가
|
|
| 90 |
-// console.log('formattedNumber : ', formattedNumber);
|
|
| 91 |
- |
|
| 92 |
-// console.log('통과 : ', row.addrPhoneNo, " : ", cleanedNumber);
|
|
| 93 |
- row.addrPhoneNo = formattedNumber ; |
|
| 94 |
- existingNumbers.add(cleanedNumber); // 추가된 번호를 기존 목록에 추가 |
|
| 95 |
- } else {
|
|
| 96 |
- // 오류 : 유효성 통과 못함 |
|
| 97 |
-// console.log('오류 : ', formattedNumber, ' : ',cleanedNumber);
|
|
| 77 |
+ data.forEach((row, index) => {
|
|
| 78 |
+ if (index % 10000 === 0) {
|
|
| 79 |
+ console.log('i : ', index);
|
|
| 80 |
+ } |
|
| 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 |
+ // 오류: 유효성 통과 못함 |
|
| 98 | 93 |
errorCount++; |
| 99 |
- $tableError.addRow({
|
|
| 94 |
+// $tableError.addRow({
|
|
| 95 |
+// name: row.addrNm, // 이름 |
|
| 96 |
+// phone: row.addrPhoneNo, // 폰번호 |
|
| 97 |
+// result: "오류" // 결과 메시지 추가 |
|
| 98 |
+// }); |
|
| 99 |
+ errors.push({
|
|
| 100 | 100 |
name: row.addrNm, // 이름 |
| 101 | 101 |
phone: row.addrPhoneNo, // 폰번호 |
| 102 | 102 |
result: "오류" // 결과 메시지 추가 |
| 103 | 103 |
}); |
| 104 |
- data.splice(i, 1); // 유효하지 않은 행 삭제 |
|
| 105 |
- } |
|
| 106 |
- } else {
|
|
| 107 |
- // 중복 |
|
| 108 |
-// console.log('중복 : ', row.addrPhoneNo);
|
|
| 109 |
- duplicateCount++; // 중복 번호가 발견될 때마다 카운트를 증가 |
|
| 110 |
- $tableError.addRow({
|
|
| 104 |
+ } |
|
| 105 |
+ } else {
|
|
| 106 |
+ // 중복 |
|
| 107 |
+ duplicateCount++; // 중복 번호가 발견될 때마다 카운트를 증가 |
|
| 108 |
+// $tableError.addRow({
|
|
| 109 |
+// name: row.addrNm, // 이름 |
|
| 110 |
+// phone: row.addrPhoneNo, // 폰번호 |
|
| 111 |
+// result: "중복" // 결과 메시지 추가 |
|
| 112 |
+// }); |
|
| 113 |
+ duplicates.push({
|
|
| 111 | 114 |
name: row.addrNm, // 이름 |
| 112 | 115 |
phone: row.addrPhoneNo, // 폰번호 |
| 113 | 116 |
result: "중복" // 결과 메시지 추가 |
| 114 | 117 |
}); |
| 115 |
- data.splice(i, 1); // 유효하지 않은 행 삭제 |
|
| 116 |
- } |
|
| 117 |
- }; |
|
| 118 |
+ } |
|
| 119 |
+ }); |
|
| 120 |
+ |
|
| 121 |
+ // data 배열을 newData 배열로 대체 |
|
| 122 |
+ data = newData; |
|
| 118 | 123 |
|
| 119 | 124 |
// 중복 카운트 |
| 120 | 125 |
$(tabluC+" #rowDupCnt").text(duplicateCount); |
... | ... | @@ -136,7 +141,12 @@ |
| 136 | 141 |
$("#rowDupCnt").text(duplicateCount);
|
| 137 | 142 |
|
| 138 | 143 |
$(tabluC+" #rowTotCnt").text($objTabul.getDataCount()); |
| 139 |
- |
|
| 144 |
+ |
|
| 145 |
+ var errorData = errors.concat(duplicates); |
|
| 146 |
+ // 오류 및 중복 데이터를 한 번에 추가 |
|
| 147 |
+ $tableError.setData(errorData); |
|
| 148 |
+ |
|
| 149 |
+ |
|
| 140 | 150 |
} |
| 141 | 151 |
|
| 142 | 152 |
function fn_phoneDupl_old($objTabul) {
|
--- src/main/webapp/js/web/addr/init.js
+++ src/main/webapp/js/web/addr/init.js
... | ... | @@ -39,7 +39,7 @@ |
| 39 | 39 |
cell.getRow().toggleSelect(); |
| 40 | 40 |
} |
| 41 | 41 |
}, |
| 42 |
- {formatter:"rownum", align:"center" ,title:"No", hozAlign:"center", headerHozAlign:"center", width:40},
|
|
| 42 |
+ {formatter:"rownum", hozAlign:"center" ,title:"No", hozAlign:"center", headerHozAlign:"center", width:40},
|
|
| 43 | 43 |
{title:"A", field:"A", hozAlign:"center", headerHozAlign: "center", width:125, validator:["maxLength:100", "string"]},
|
| 44 | 44 |
{title:"B", field:"B", hozAlign:"center", headerHozAlign: "center", width:125, validator:["maxLength:100", "string"]},
|
| 45 | 45 |
{title:"C", field:"C", hozAlign:"center", headerHozAlign: "center", width:125, validator:["maxLength:100", "string"]},
|
... | ... | @@ -72,45 +72,13 @@ |
| 72 | 72 |
headerHozAlign:"center", |
| 73 | 73 |
validationMode:"highlight", |
| 74 | 74 |
placeholder:"복사(Ctrl+C)한 내용을 여기에 붙여넣기(Ctrl+V) 해주세요.", //fit columns to width of table (optional) |
| 75 |
- clipboard:true, // 클립보드 기능 활성화 |
|
| 75 |
+// clipboard:true, // 클립보드 기능 활성화 |
|
| 76 | 76 |
clipboardPasteAction:"update", // insert, update, replace |
| 77 |
- clipboardPasteParser: function(clipboard) {
|
|
| 78 |
- /*console.log('clipboard: ', clipboard); // 클립보드의 원본 내용 확인
|
|
| 79 |
- |
|
| 80 |
- var rows = clipboard.split('\n').map(row => {
|
|
| 81 |
- var cells = row.split(/[\t,]+/).map(cell => cell.trim()); |
|
| 82 |
- return cells; |
|
| 83 |
- }).filter(row => Array.isArray(row) && row.some(cell => cell !== "")); |
|
| 84 |
- |
|
| 85 |
- console.log('파싱된 rows: ', rows); // 파싱된 행 데이터 확인
|
|
| 86 |
- |
|
| 87 |
- var tableData = rows.map(row => {
|
|
| 88 |
- return {
|
|
| 89 |
- A: row[0] || "", |
|
| 90 |
- B: row[1] || "", |
|
| 91 |
- C: row[2] || "", |
|
| 92 |
- D: row[3] || "", |
|
| 93 |
- E: row[4] || "", |
|
| 94 |
- F: row[5] || "", |
|
| 95 |
- G: row[6] || "" |
|
| 96 |
- }; |
|
| 97 |
- }); |
|
| 98 |
- |
|
| 99 |
- console.log('새로 추가될 데이터: ', tableData); // 추가될 데이터 확인
|
|
| 100 |
- |
|
| 101 |
- // 기존 테이블 데이터를 가져와서 병합 |
|
| 102 |
- var existingData = $tableClip.getData(); // 기존 데이터를 가져옴 |
|
| 103 |
- console.log('기존 : ', existingData);
|
|
| 104 |
- var combinedData = existingData.concat(tableData); // 기존 데이터에 새로운 데이터 추가 |
|
| 105 |
- console.log('병합 : ', combinedData);
|
|
| 106 |
- |
|
| 107 |
- return combinedData; // 병합된 데이터를 반환하여 기존 데이터 아래에 추가되도록 함 |
|
| 108 |
-*/ }, |
|
| 109 | 77 |
columns: [ |
| 110 | 78 |
{formatter: "rowSelection", titleFormatter: "rowSelection", clipboard: false, hozAlign: "center", headerHozAlign: "center", headerSort: false, cellClick: function(e, cell) {
|
| 111 | 79 |
cell.getRow().toggleSelect(); |
| 112 | 80 |
}}, |
| 113 |
- {formatter:"rownum", align:"center" ,title:"No", hozAlign:"center", headerHozAlign:"center", width:40},
|
|
| 81 |
+ {formatter:"rownum", hozAlign:"center" ,title:"No", hozAlign:"center", headerHozAlign:"center", width:40},
|
|
| 114 | 82 |
{title:"A", field:"A", hozAlign:"center", headerHozAlign: "center", width:125, validator:["maxLength:100", "string"]},
|
| 115 | 83 |
{title:"B", field:"B", hozAlign:"center", headerHozAlign: "center", width:125, validator:["maxLength:100", "string"]},
|
| 116 | 84 |
{title:"C", field:"C", hozAlign:"center", headerHozAlign: "center", width:125, validator:["maxLength:100", "string"]},
|
... | ... | @@ -119,16 +87,14 @@ |
| 119 | 87 |
{title:"F", field:"F", hozAlign:"center", headerHozAlign: "center", width:125, validator:["maxLength:100", "string"]},
|
| 120 | 88 |
{title:"G", field:"G", hozAlign:"center", headerHozAlign: "center", width:125, validator:["maxLength:100", "string"]}
|
| 121 | 89 |
], |
| 122 |
- validationFailed:function(cell, value, parameters){ // 유효성 체크 함수
|
|
| 123 |
- var valid = cell.isValid(); |
|
| 124 |
- if(!valid){
|
|
| 125 |
- alert("양식에 맞지 않는 정보가 입력되었습니다.");
|
|
| 126 |
- |
|
| 127 |
- //해당 셀 데이터 삭제 |
|
| 128 |
- cell.setValue("");
|
|
| 129 |
- } |
|
| 130 |
- return value % parameters.phone; |
|
| 131 |
- }, |
|
| 90 |
+ validationFailed: function(cell, value, parameters) {
|
|
| 91 |
+ var valid = cell.isValid(); |
|
| 92 |
+ if (!valid) {
|
|
| 93 |
+ alert("양식에 맞지 않는 정보가 입력되었습니다.");
|
|
| 94 |
+ cell.setValue(""); // 해당 셀 데이터 삭제
|
|
| 95 |
+ } |
|
| 96 |
+ return false; // 유효하지 않은 경우 false 반환 |
|
| 97 |
+ }, |
|
| 132 | 98 |
}); |
| 133 | 99 |
|
| 134 | 100 |
|
... | ... | @@ -143,19 +109,11 @@ |
| 143 | 109 |
clipboard:false, |
| 144 | 110 |
clipboardCopySelector:"table", |
| 145 | 111 |
clipboardPasteAction:"insert", // insert, update, replace |
| 146 |
- placeholder:"Excel 파일을 업로드 해주세요.", //fit columns to width of table (optional) |
|
| 112 |
+ placeholder:"등록 팝업에서 휴대폰을 선택 후 확인해주세요.", //fit columns to width of table (optional) |
|
| 147 | 113 |
columns:[ //Define Table Columns |
| 148 |
-// {formatter:"rowSelection", titleFormatter:"rowSelection",clipboard:false, hozAlign:"center", headerSort:false, cellClick:function(e, cell){
|
|
| 149 |
-// cell.getRow().toggleSelect(); |
|
| 150 |
-// } |
|
| 151 |
-// }, |
|
| 152 |
-// {formatter:"rownum", align:"center" ,title:"No", hozAlign:"center", headerHozAlign:"center", width:40},
|
|
| 153 | 114 |
{title:"이름", field:"name", hozAlign:"center", headerHozAlign: "center", width:125},
|
| 154 | 115 |
{title:"휴대폰", field:"phone", hozAlign:"center", headerHozAlign: "center", width:158},
|
| 155 | 116 |
{title:"미등록 결과", field:"result", hozAlign:"center", headerHozAlign: "center", width:125}
|
| 156 |
-// {title:"이름", field:"name", hozAlign:"center", headerHozAlign: "center", width:125, validator:["maxLength:100", "string"]},
|
|
| 157 |
-// {title:"휴대폰", field:"phone", hozAlign:"center", headerHozAlign: "center", width:125, validator:["maxLength:100", "string"]},
|
|
| 158 |
-// {title:"미등록 결과", field:"result", hozAlign:"center", headerHozAlign: "center", width:125, validator:["maxLength:100", "string"]},
|
|
| 159 | 117 |
] |
| 160 | 118 |
}); |
| 161 | 119 |
|
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?