diff --git a/src/main/webapp/WEB-INF/jsp/web/addr/AddrList.jsp b/src/main/webapp/WEB-INF/jsp/web/addr/AddrList.jsp index 8f133ed0..e7b360eb 100644 --- a/src/main/webapp/WEB-INF/jsp/web/addr/AddrList.jsp +++ b/src/main/webapp/WEB-INF/jsp/web/addr/AddrList.jsp @@ -1,869 +1,868 @@ -<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> -<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> -<%@ taglib prefix="ui" uri="http://egovframework.gov/ctl/ui"%> -<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> -<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> - - - - - - - - - - - - - -
주소록 상세 결과
- -- 총 0건 - / 중복 0건 - / 오류 0건
- -- 연락처를 그룹별로 분류하여 간편하고 편리하게 관리할 수 있습니다(최대 100,000개까지 등록 가능)
-- 그룹은 그룹 간 이동, 병합 및 복사가 가능합니다.
-- 주소록은 중복검사가 가능하며 중복된 연락처를 삭제할 수 있습니다. 단, 데이터 양에 따라 시간이 소요될 수 있습니다.
-- 주소록 관리에서 그룹 또는 연락처를 선택하여 문자를 바로 발송할 수 있습니다.
-- 주소록 내보내기를 통해 다른 ID로 주소록을 복사할 수 있습니다(그룹 전송만 가능, 보낸 주소록 결과는 최대 90일까지 보관)
-- 주소록 내보내기 시에는 개인정보보호를 위해 추가 휴대폰 인증을 실시하며, 휴대폰 인증은 등록된 발신번호로만 인증 가능합니다.
-- 고객님께서 보유하신 엑셀파일이나 텍스트파일 등으로 작성된 주소록을 대량 등록할 수 있습니다.
-- 주소록 등록이 어려우신 경우에는 주소록 입력대행 메뉴를 이용하시면 됩니다.
-- 주소록 무료대행은 신규 그룹으로 생성됩니다(기존 그룹 수정 불가)
-- 주소록은 한 번에 최대 30만건까지 등록(EXCEL파일, 최대용량 3MB) 가능합니다.
+- 주소록은 한 번에 최대 30만건까지 등록(EXCEL파일, 최대용량 20MB) 가능합니다.
- 엑셀 파일에 비밀번호 설정, 제한된 보기, 수식 등이 설정되어 있는 경우 업로드가 불가합니다.
- 구분선(|), 역슬래시(\, ₩), 큰따옴표(") 등 발송불가 특수문자는 저장되지 않습니다.
- 이름 200byte, [*1*]~[*4*] 200byte, 메모 250byte까지 입력 가능합니다.
diff --git a/src/main/webapp/js/web/addr/event.js b/src/main/webapp/js/web/addr/event.js index c666b5f7..f298fd9b 100644 --- a/src/main/webapp/js/web/addr/event.js +++ b/src/main/webapp/js/web/addr/event.js @@ -1,454 +1,453 @@ - - -$(document).ready(function(){ - - - //타이틀 select 선택 이벤트 - $('[data-group]').on('change', '.field-selector', function() { - - fn_loadAddActive(); - - - var group = $(this).closest('[data-group]').data('group'); - var selectedFields = []; - var isDuplicate = false; - - - // 타불 객체 가져오기 - var $objTabul = fn_utils_getTabulator(); - - console.log('$objTabul : ', $objTabul); - - if($objTabul.getData().length < 1){ - alert('데이터 입력 후 선택해 주세요.'); - $(this).val(""); - fn_loadRemoveActive(); - return false; - } - - // 중복체크 - $('[data-group="' + group + '"] .field-selector').each(function() { - var selectedField = $(this).val(); - if (selectedField) { - if (selectedFields.includes(selectedField)) { - alert("중복된 필드를 선택할 수 없습니다."); - $(this).val(""); // 중복 필드를 선택한 경우 빈 값으로 초기화 - isDuplicate = true; - return false; // 반복문 종료 - } - selectedFields.push(selectedField); - } - }); - - - // 데이터 넣기 - updateTableFields($objTabul, group); - - // 필드가 휴대폰이면 열 중복체크 - if($(this).val() == 'addrPhoneNo'){ - fn_phoneDupl($objTabul); - } - fn_loadRemoveActive(); - - }); - - - /** - * @ 핸드폰 중복 데이터 - * */ - function fn_phoneDupl($objTabul) { - - $tableError.clearData(); - - var tabulNm = fn_utils_getTabulatorNm(); - var tabluC = '.'+tabulNm - - var data = $objTabul.getData(); - var phoneNumberChk = false; - var existingNumbers = new Set(); // 배열에서 Set으로 변경 - - let errorCount = 0; // 중복 번호 개수를 저장할 변수 - let duplicateCount = 0; // 중복 번호 개수를 저장할 변수 - - const errors = []; // 오류 데이터를 저장할 배열 - const duplicates = []; // 오류 데이터를 저장할 배열 - const newData = []; // 유효한 데이터만 저장할 새로운 배열 - - data.forEach((row, index) => { -// if (index % 10000 === 0) { -// console.log('i : ', index); -// } - - const number = row.addrPhoneNo; - const formattedNumber = formatPhoneNumber(number); // 번호 표준화 - const cleanedNumber = formattedNumber.replace(/[^0-9]/g, ''); // 숫자만 남김 - - if (!existingNumbers.has(cleanedNumber)) { // 중복 번호 체크 - if (isValidPhoneNumber(formattedNumber)) { // 유효성 검사 - row.addrPhoneNo = formattedNumber; - existingNumbers.add(cleanedNumber); // 추가된 번호를 기존 목록에 추가 - newData.push(row); // 유효한 데이터만 새로운 배열에 추가 - } else { - // 오류: 유효성 통과 못함 - errorCount++; - - errors.push({ - name: row.addrNm, // 이름 - phone: row.addrPhoneNo, // 폰번호 - result: "오류" // 결과 메시지 추가 - }); - } - } else { - // 중복 - duplicateCount++; - - errors.push({ - name: row.addrNm, // 이름 - phone: row.addrPhoneNo, // 폰번호 - result: "중복" // 결과 메시지 추가 - }); - } - }); - - // data 배열을 newData 배열로 대체 - data = newData; - - // 중복 카운트 - $(tabluC+" #rowDupCnt").text(duplicateCount); - // 에러 카운트 - $(tabluC+" #rowErrorCnt").text(errorCount); - - // popup 영역 - // 중복 카운트 - $("#errorPopDupCnt").text(duplicateCount); - // 에러 카운트 - $("#errorPopErrorCnt").text(errorCount); - // -// $("#errorPopTotCnt").text(duplicateCount+errorCount); - - // 수정된 데이터로 테이블 업데이트 - $objTabul.setData(data); - - // 중복 번호 개수를 #rowDupCnt 요소에 표시 - $("#rowDupCnt").text(duplicateCount); - - $(tabluC+" #rowTotCnt").text($objTabul.getDataCount()); - $("#errorPopTotCnt").text($objTabul.getDataCount()); - - var errorData = errors.concat(duplicates); - // 오류 및 중복 데이터를 한 번에 추가 - $tableError.setData(errorData); - - if(errorCount > 0){ - alert('휴대폰 형식에 맞지 않는 데이터는 삭제 후 업로드 됩니다.\nex) 발송불가 특수문자, 자릿수 오류 등'); - } - - - - } - /* - function fn_phoneDupl_old($objTabul) { - var data = $objTabul.getData(); - var uniquePhones = new Set(); - var rowsToKeep = []; - var rowsToDelete = []; - var phoneNumberChk = false; - - - var tabulNm = fn_utils_getTabulatorNm(); - var tabluC = '.'+tabulNm - - data.forEach((row, index) => { - - if (!isValidKoreanPhoneNumber(row.addrPhoneNo)) { - phoneNumberChk = true - return false; - } - - if (uniquePhones.has(row.addrPhoneNo)) { - rowsToDelete.push(index); // 중복된 행의 인덱스를 기록 - } else { - uniquePhones.add(row.addrPhoneNo); - rowsToKeep.push(row); // 고유한 데이터만 추가 - } - }); - - if(phoneNumberChk){ - alert('휴대폰 형식에 맞지 않는 데이터가 있습니다.\n 확인해 주세요'); - } - - - - // 중복된 행 삭제 - rowsToDelete.reverse().forEach(index => { - $objTabul.deleteRow(index); - }); - - // 고유한 데이터만 남기고 테이블 업데이트 - $objTabul.setData(rowsToKeep); - $(tabluC+" #rowTotCnt").text(rowsToKeep.length); - }*/ - - //받는사람 전체삭제 버튼 처리 - $('.all_del').click(function(){ - - var tabulNm = fn_utils_getTabulatorNm(); - var tabluC = '.'+tabulNm - - var $objTabul = fn_utils_getTabulator(); - - $objTabul.clearData(); - fn_rowCntInit(); - - // select box 초기화 - $('.field-selector').each(function() { $(this).val(''); }); - }); - - // 받는사람 선택삭제 버튼 처리해주기 - $('.select_del').click(function(){ - - var tabulNm = fn_utils_getTabulatorNm(); - var tabluC = '.'+tabulNm - - var $objTabul = fn_utils_getTabulator(); - - $(tabluC+" #rowDupCnt").text(0); //중복건수 수정 - var selectedData = $objTabul.getSelectedRows(); - - if(selectedData == "" || selectedData == null){ - alert("삭제할 데이터를 선택해 주세요."); - return false; - }else{ // 선택한 Row 데이터 삭제하기 - for(var i=0; i < selectedData.length; i++){ - selectedData[i].delete(); - } - } - - totRows = $objTabul.getRows().length; - - updateTotCnt(totRows); - }); - - - //받는사람 전체삭제 버튼 처리 - $('.self_all_del').click(function(){ - - var tabulNm = fn_utils_getTabulatorNm(); - var tabluC = '.'+tabulNm - - var $objTabul = fn_utils_getTabulator(); - - // 초기화 및 데이터 추가를 한번에 처리 - var newTableData = []; - - // 1000개의 빈 행을 미리 준비 - for (var i = 0; i < 1000; i++) { - newTableData.push({ - addrNm: "", - addrPhoneNo: "", - addrInfo1: "", - addrInfo2: "", - addrInfo3: "", - addrInfo4: "", - addrComment: "" - }); - } - - // 기존 데이터 초기화 후, 새로운 데이터를 한 번에 추가 - $objTabul.setData(newTableData); - - // 행 수 초기화 함수 호출 - fn_rowCntInit(); - }); - - // 직접입력 받는사람 선택삭제 버튼 처리해주기 - $('.self_select_del').click(function(){ - - var tabulNm = fn_utils_getTabulatorNm(); - var tabluC = '.'+tabulNm - - var $objTabul = fn_utils_getTabulator(); - - $(tabluC+" #rowDupCnt").text(0); //중복건수 수정 - var selectedData = $objTabul.getSelectedRows(); - - if(selectedData == "" || selectedData == null){ - alert("삭제할 데이터를 선택해 주세요."); - return false; - }else{ // 선택한 Row 데이터 삭제하기 - for(var i=0; i < selectedData.length; i++){ - selectedData[i].delete(); - } - } - - // 남은 행 수 계산 - var totRows = $objTabul.getRows().length; - - // 1000개 행이 되도록 나머지 행 생성 - for (var i = totRows; i < 1000; i++) { - $objTabul.addRow({addrNm: "", addrPhoneNo: "", addrInfo1: "", addrInfo2: "", addrInfo3: "", addrInfo4: "", addrComment: ""}); - } - - - var existingNumbers = []; // 중복 번호를 저장할 배열 - // 모든 행의 'addrPhoneNo' 값을 배열에 추가 - var allRows = $tableSelf.getData(); // 테이블의 모든 데이터를 가져옴 - allRows.forEach(function(row) { - if (row.addrPhoneNo) { - const cleanedExistingNumber = row.addrPhoneNo.replace(/[^0-9]/g, ''); // 숫자만 남김 - existingNumbers.push(cleanedExistingNumber); // 기존 번호를 배열에 추가 - } - }); - updateTotCnt(existingNumbers.length); - }); - - //전체 데이터 갯수 구하는 함수 - function updateTotCnt(data){ - - var tabulNm = fn_utils_getTabulatorNm(); - var tabluC = '.'+tabulNm - - $(tabluC+" #rowTotCnt").text(data); - - } - - /* - * 타이틀 select 선택할때마다 실행해서 - * 데이터테이블 필드값 수정 - */ - function updateTableFields($objTabul, group) { - // 데이터가져오기 - var currentData = $objTabul.getData(); - - // 필드 초기 값 셋팅 - var columns = [ - {formatter: "rowSelection", titleFormatter: "rowSelection", clipboard: false, hozAlign: "center", headerHozAlign: "center", headerSort: false, cellClick: function(e, cell) { - cell.getRow().toggleSelect(); - }} - ,{formatter:"rownum", align:"center", title:"No", hozAlign:"center", headerHozAlign:"center", width:40} - ]; - - var fieldMapping = []; - // 초기 후 필드 값 셋팅하기 - $('[data-group="' + group + '"] .field-selector').each(function(index) { - var selectedField = $(this).val(); - // ASCII 문자 코드 사용 - 65=A, 66=B ... - var field = String.fromCharCode(65 + index); - if (selectedField) { - columns.push({ - title: field - , field: selectedField - , hozAlign: "center" - , headerHozAlign: "center" -// , editor: "input" - , editor: false - , width: 125 - , validator: ["maxLength:100", "string"] - }); - fieldMapping.push(selectedField); - } else { - columns.push({ - title: field - , field: field - , hozAlign: "center" - , headerHozAlign: "center" -// , editor: "input" - , editor: false - , width: 125 - , validator: ["maxLength:100", "string"] - }); - fieldMapping.push(field); - } - }); - - // 데이터 셋팅 - var updatedData = currentData.map(row => { - var newRow = {}; - fieldMapping.forEach((field, index) => { - newRow[field] = row[Object.keys(row)[index]] || ""; - }); - return newRow; - }); - - $objTabul.setColumns(columns); - $objTabul.setData(updatedData); - } -}); - - - - -// 주소록 에러결과 초기화 -function fn_errorPopClean(){ - - var tabulNm = fn_utils_getTabulatorNm(); - var tabluC = '.'+tabulNm - - // popup 영역 - $tableError.clearData(); - - - // 중복 카운트 - $("#errorPopDupCnt").text(0); - // 에러 카운트 - $("#errorPopErrorCnt").text(0); - // - $("#errorPopTotCnt").text(0); - - // select box 초기화 - $(tabluC+' .field-selector').each(function() { $(this).val(''); }); - -} - -function fn_rowCntInit(){ - - var tabulNm = fn_utils_getTabulatorNm(); - var tabluC = '.'+tabulNm - - $(tabluC+" #rowTotCnt").text(0); //총건수 수정 - $(tabluC+" #rowDupCnt").text(0); //중복건수 수정 - $(tabluC+" #rowErrorCnt").text(0); //중복건수 수정 -} - - - -//1. 필드 초기화 함수 -function resetTableFieldsToDefault() { - - // 타불 객체 가져오기 - var $objTabul = fn_utils_getTabulator(); - - // 필드를 A, B, C, D로 초기화 - var defaultFields = ['A', 'B', 'C', 'D', 'E', 'F', 'G']; - - // 테이블의 기존 데이터를 가져옵니다. - var currentData = $objTabul.getData(); - - // 초기 필드(A, B, C, D 등)를 위한 열 설정 - var columns = [ - {formatter: "rowSelection", titleFormatter: "rowSelection", clipboard: false, hozAlign: "center", headerHozAlign: "center", headerSort: false, cellClick: function(e, cell) { - cell.getRow().toggleSelect(); - }}, - {formatter:"rownum", align:"center", title:"No", hozAlign:"center", headerHozAlign:"center", width:40} - ]; - - // 기본 필드로 열 구성 - defaultFields.forEach(field => { - columns.push({ - title: field, - field: field, - hozAlign: "center", - headerHozAlign: "center", - editor: false, // 편집 비활성화 - width: 125, - validator: ["maxLength:100", "string"] - }); - }); - - // 테이블을 기본 필드로 업데이트 - $objTabul.setColumns(columns); -// $objTabul.setData(updatedData); -} - - - + + +$(document).ready(function(){ + + + //타이틀 select 선택 이벤트 + $('[data-group]').on('change', '.field-selector', function() { + + fn_loadAddActive(); + + + var group = $(this).closest('[data-group]').data('group'); + var selectedFields = []; + var isDuplicate = false; + + + // 타불 객체 가져오기 + var $objTabul = fn_utils_getTabulator(); + + console.log('$objTabul : ', $objTabul); + + if($objTabul.getData().length < 1){ + alert('데이터 입력 후 선택해 주세요.'); + $(this).val(""); + fn_loadRemoveActive(); + return false; + } + + // 중복체크 + $('[data-group="' + group + '"] .field-selector').each(function() { + var selectedField = $(this).val(); + if (selectedField) { + if (selectedFields.includes(selectedField)) { + alert("중복된 필드를 선택할 수 없습니다."); + $(this).val(""); // 중복 필드를 선택한 경우 빈 값으로 초기화 + isDuplicate = true; + return false; // 반복문 종료 + } + selectedFields.push(selectedField); + } + }); + + + // 데이터 넣기 + updateTableFields($objTabul, group); + + // 필드가 휴대폰이면 열 중복체크 + if($(this).val() == 'addrPhoneNo'){ + fn_phoneDupl($objTabul); + } + fn_loadRemoveActive(); + + }); + + + /** + * @ 핸드폰 중복 데이터 + * */ + function fn_phoneDupl($objTabul) { + + $tableError.clearData(); + + var tabulNm = fn_utils_getTabulatorNm(); + var tabluC = '.'+tabulNm + + var data = $objTabul.getData(); + var phoneNumberChk = false; + var existingNumbers = new Set(); // 배열에서 Set으로 변경 + + let errorCount = 0; // 중복 번호 개수를 저장할 변수 + let duplicateCount = 0; // 중복 번호 개수를 저장할 변수 + + const errors = []; // 오류 데이터를 저장할 배열 + const newData = []; // 유효한 데이터만 저장할 새로운 배열 + + data.forEach((row, index) => { + + const number = row.addrPhoneNo; + + // number가 null, undefined, 빈 문자열이거나 숫자인 경우 처리 + if (!number || (typeof number === 'string' && !number.trim())){ + console.log("number : ", number); + return; + } + + const formattedNumber = formatPhoneNumber(number); // 번호 표준화 + const cleanedNumber = formattedNumber.replace(/[^0-9]/g, ''); // 숫자만 남김 + + if (!existingNumbers.has(cleanedNumber)) { // 중복 번호 체크 + if (isValidPhoneNumber(formattedNumber)) { // 유효성 검사 + row.addrPhoneNo = formattedNumber; + existingNumbers.add(cleanedNumber); // 추가된 번호를 기존 목록에 추가 + newData.push(row); // 유효한 데이터만 새로운 배열에 추가 + } else { + // 오류: 유효성 통과 못함 + errorCount++; + + errors.push({ + name: row.addrNm, // 이름 + phone: row.addrPhoneNo, // 폰번호 + result: "오류" // 결과 메시지 추가 + }); + } + } else { + // 중복 + duplicateCount++; + + errors.push({ + name: row.addrNm, // 이름 + phone: row.addrPhoneNo, // 폰번호 + result: "중복" // 결과 메시지 추가 + }); + } + }); + + // data 배열을 newData 배열로 대체 + data = newData; + + // 수정된 데이터로 테이블 업데이트 + $objTabul.setData(data); + + $(tabluC+" #rowTotCnt").text($objTabul.getDataCount()); + // 중복 카운트 + $(tabluC+" #rowDupCnt").text(duplicateCount); + // 에러 카운트 + $(tabluC+" #rowErrorCnt").text(errorCount); + + // popup 영역 + $("#errorPopTotCnt").text($objTabul.getDataCount()); + // 중복 카운트 + $("#errorPopDupCnt").text(duplicateCount); + // 에러 카운트 + $("#errorPopErrorCnt").text(errorCount); + // +// $("#errorPopTotCnt").text(duplicateCount+errorCount); + + + // 오류 및 중복 데이터를 한 번에 추가 + $tableError.setData(errors); + + if(errorCount > 0){ + alert('휴대폰 형식에 맞지 않는 데이터는 삭제 후 업로드 됩니다.\nex) 발송불가 특수문자, 자릿수 오류 등'); + } + + + + } + /* + function fn_phoneDupl_old($objTabul) { + var data = $objTabul.getData(); + var uniquePhones = new Set(); + var rowsToKeep = []; + var rowsToDelete = []; + var phoneNumberChk = false; + + + var tabulNm = fn_utils_getTabulatorNm(); + var tabluC = '.'+tabulNm + + data.forEach((row, index) => { + + if (!isValidKoreanPhoneNumber(row.addrPhoneNo)) { + phoneNumberChk = true + return false; + } + + if (uniquePhones.has(row.addrPhoneNo)) { + rowsToDelete.push(index); // 중복된 행의 인덱스를 기록 + } else { + uniquePhones.add(row.addrPhoneNo); + rowsToKeep.push(row); // 고유한 데이터만 추가 + } + }); + + if(phoneNumberChk){ + alert('휴대폰 형식에 맞지 않는 데이터가 있습니다.\n 확인해 주세요'); + } + + + + // 중복된 행 삭제 + rowsToDelete.reverse().forEach(index => { + $objTabul.deleteRow(index); + }); + + // 고유한 데이터만 남기고 테이블 업데이트 + $objTabul.setData(rowsToKeep); + $(tabluC+" #rowTotCnt").text(rowsToKeep.length); + }*/ + + //받는사람 전체삭제 버튼 처리 + $('.all_del').click(function(){ + + var tabulNm = fn_utils_getTabulatorNm(); + var tabluC = '.'+tabulNm + + var $objTabul = fn_utils_getTabulator(); + + $objTabul.clearData(); + fn_rowCntInit(); + + // select box 초기화 + $('.field-selector').each(function() { $(this).val(''); }); + }); + + // 받는사람 선택삭제 버튼 처리해주기 + $('.select_del').click(function(){ + + var tabulNm = fn_utils_getTabulatorNm(); + var tabluC = '.'+tabulNm + + var $objTabul = fn_utils_getTabulator(); + + $(tabluC+" #rowDupCnt").text(0); //중복건수 수정 + var selectedData = $objTabul.getSelectedRows(); + + if(selectedData == "" || selectedData == null){ + alert("삭제할 데이터를 선택해 주세요."); + return false; + }else{ // 선택한 Row 데이터 삭제하기 + for(var i=0; i < selectedData.length; i++){ + selectedData[i].delete(); + } + } + + totRows = $objTabul.getRows().length; + + updateTotCnt(totRows); + }); + + + //받는사람 전체삭제 버튼 처리 + $('.self_all_del').click(function(){ + + var tabulNm = fn_utils_getTabulatorNm(); + var tabluC = '.'+tabulNm + + var $objTabul = fn_utils_getTabulator(); + + // 초기화 및 데이터 추가를 한번에 처리 + var newTableData = []; + + // 1000개의 빈 행을 미리 준비 + for (var i = 0; i < 1000; i++) { + newTableData.push({ + addrNm: "", + addrPhoneNo: "", + addrInfo1: "", + addrInfo2: "", + addrInfo3: "", + addrInfo4: "", + addrComment: "" + }); + } + + // 기존 데이터 초기화 후, 새로운 데이터를 한 번에 추가 + $objTabul.setData(newTableData); + + // 행 수 초기화 함수 호출 + fn_rowCntInit(); + }); + + // 직접입력 받는사람 선택삭제 버튼 처리해주기 + $('.self_select_del').click(function(){ + + var tabulNm = fn_utils_getTabulatorNm(); + var tabluC = '.'+tabulNm + + var $objTabul = fn_utils_getTabulator(); + + $(tabluC+" #rowDupCnt").text(0); //중복건수 수정 + var selectedData = $objTabul.getSelectedRows(); + + if(selectedData == "" || selectedData == null){ + alert("삭제할 데이터를 선택해 주세요."); + return false; + }else{ // 선택한 Row 데이터 삭제하기 + for(var i=0; i < selectedData.length; i++){ + selectedData[i].delete(); + } + } + + // 남은 행 수 계산 + var totRows = $objTabul.getRows().length; + + // 1000개 행이 되도록 나머지 행 생성 + for (var i = totRows; i < 1000; i++) { + $objTabul.addRow({addrNm: "", addrPhoneNo: "", addrInfo1: "", addrInfo2: "", addrInfo3: "", addrInfo4: "", addrComment: ""}); + } + + + var existingNumbers = []; // 중복 번호를 저장할 배열 + // 모든 행의 'addrPhoneNo' 값을 배열에 추가 + var allRows = $tableSelf.getData(); // 테이블의 모든 데이터를 가져옴 + allRows.forEach(function(row) { + if (row.addrPhoneNo) { + const cleanedExistingNumber = row.addrPhoneNo.replace(/[^0-9]/g, ''); // 숫자만 남김 + existingNumbers.push(cleanedExistingNumber); // 기존 번호를 배열에 추가 + } + }); + updateTotCnt(existingNumbers.length); + }); + + //전체 데이터 갯수 구하는 함수 + function updateTotCnt(data){ + + var tabulNm = fn_utils_getTabulatorNm(); + var tabluC = '.'+tabulNm + + $(tabluC+" #rowTotCnt").text(data); + + } + + /* + * 타이틀 select 선택할때마다 실행해서 + * 데이터테이블 필드값 수정 + */ + function updateTableFields($objTabul, group) { + // 데이터가져오기 + var currentData = $objTabul.getData(); + + // 필드 초기 값 셋팅 + var columns = [ + {formatter: "rowSelection", titleFormatter: "rowSelection", clipboard: false, hozAlign: "center", headerHozAlign: "center", headerSort: false, cellClick: function(e, cell) { + cell.getRow().toggleSelect(); + }} + ,{formatter:"rownum", align:"center", title:"No", hozAlign:"center", headerHozAlign:"center", width:40} + ]; + + var fieldMapping = []; + // 초기 후 필드 값 셋팅하기 + $('[data-group="' + group + '"] .field-selector').each(function(index) { + var selectedField = $(this).val(); + // ASCII 문자 코드 사용 - 65=A, 66=B ... + var field = String.fromCharCode(65 + index); + if (selectedField) { + columns.push({ + title: field + , field: selectedField + , hozAlign: "center" + , headerHozAlign: "center" +// , editor: "input" + , editor: false + , width: 125 + , validator: ["maxLength:100", "string"] + }); + fieldMapping.push(selectedField); + } else { + columns.push({ + title: field + , field: field + , hozAlign: "center" + , headerHozAlign: "center" +// , editor: "input" + , editor: false + , width: 125 + , validator: ["maxLength:100", "string"] + }); + fieldMapping.push(field); + } + }); + + // 데이터 셋팅 + var updatedData = currentData.map(row => { + var newRow = {}; + fieldMapping.forEach((field, index) => { + newRow[field] = row[Object.keys(row)[index]] || ""; + }); + return newRow; + }); + + $objTabul.setColumns(columns); + $objTabul.setData(updatedData); + } +}); + + + + +// 주소록 에러결과 초기화 +function fn_errorPopClean(){ + + var tabulNm = fn_utils_getTabulatorNm(); + var tabluC = '.'+tabulNm + + // popup 영역 + $tableError.clearData(); + + + // 중복 카운트 + $("#errorPopDupCnt").text(0); + // 에러 카운트 + $("#errorPopErrorCnt").text(0); + // + $("#errorPopTotCnt").text(0); + + // select box 초기화 + $(tabluC+' .field-selector').each(function() { $(this).val(''); }); + +} + +function fn_rowCntInit(){ + + var tabulNm = fn_utils_getTabulatorNm(); + var tabluC = '.'+tabulNm + + $(tabluC+" #rowTotCnt").text(0); //총건수 수정 + $(tabluC+" #rowDupCnt").text(0); //중복건수 수정 + $(tabluC+" #rowErrorCnt").text(0); //중복건수 수정 +} + + + +//1. 필드 초기화 함수 +function resetTableFieldsToDefault() { + + // 타불 객체 가져오기 + var $objTabul = fn_utils_getTabulator(); + + // 필드를 A, B, C, D로 초기화 + var defaultFields = ['A', 'B', 'C', 'D', 'E', 'F', 'G']; + + // 테이블의 기존 데이터를 가져옵니다. + var currentData = $objTabul.getData(); + + // 초기 필드(A, B, C, D 등)를 위한 열 설정 + var columns = [ + {formatter: "rowSelection", titleFormatter: "rowSelection", clipboard: false, hozAlign: "center", headerHozAlign: "center", headerSort: false, cellClick: function(e, cell) { + cell.getRow().toggleSelect(); + }}, + {formatter:"rownum", align:"center", title:"No", hozAlign:"center", headerHozAlign:"center", width:40} + ]; + + // 기본 필드로 열 구성 + defaultFields.forEach(field => { + columns.push({ + title: field, + field: field, + hozAlign: "center", + headerHozAlign: "center", + editor: false, // 편집 비활성화 + width: 125, + validator: ["maxLength:100", "string"] + }); + }); + + // 테이블을 기본 필드로 업데이트 + $objTabul.setColumns(columns); +// $objTabul.setData(updatedData); +} + + + diff --git a/src/main/webapp/js/web/addr/init.js b/src/main/webapp/js/web/addr/init.js index b0a785c8..e8da0fb2 100644 --- a/src/main/webapp/js/web/addr/init.js +++ b/src/main/webapp/js/web/addr/init.js @@ -158,7 +158,6 @@ $(document).ready(function(){ $tableExcel.on("columnWidth",function(column){ var titleIndex = titleArray.indexOf(column._column.definition.title); titleIndex += 1; - console.log(titleIndex) if(titleIndex != 0){ $('.tableExcel .select_adr_hd>div').eq(titleIndex).css('width', column._column.width); }else{ @@ -181,7 +180,6 @@ $(document).ready(function(){ $tableClip.on("columnWidth",function(column){ var titleIndex = titleArray.indexOf(column._column.definition.title); titleIndex += 1; - console.log(titleIndex) if(titleIndex != 0){ $('.tableClip .select_adr_hd>div').eq(titleIndex).css('width', column._column.width); }else{