File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
$(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 (checkFaxNum(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);
// 오류 및 중복 데이터를 한 번에 추가
$tableError.setData(errors);
if(errorCount > 0){
alert('팩스번호 형식에 맞지 않는 데이터는 삭제 후 업로드 됩니다.\nex) 발송불가 특수문자, 자릿수 오류 등');
}
}
//받는사람 전체삭제 버튼 처리
$('.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: "",
addrNemo: ""
});
}
// 기존 데이터 초기화 후, 새로운 데이터를 한 번에 추가
$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: "", addrMemo: ""});
}
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", width:50, headerSort: false, cellClick: function(e, cell) {
cell.getRow().toggleSelect();
}}
,{formatter:"rownum", align:"center", title:"No", hozAlign:"center", headerHozAlign:"center", width:100}
];
var fieldMapping = [];
console.log(": setTing number : ");
// 초기 후 필드 값 셋팅하기
$('[data-group="' + group + '"] .field-selector').each(function(index) {
var selectedField = $(this).val();
console.log('selectedField : ', selectedField);
// ASCII 문자 코드 사용 - 65=A, 66=B ...
var field = String.fromCharCode(65 + index);
if (selectedField) {
columns.push({
title: field
, field: selectedField
, hozAlign: "center"
, headerHozAlign: "center"
, editor: false
, width: 260
, validator: ["maxLength:100", "string"]
});
fieldMapping.push(selectedField);
} else {
columns.push({
title: field
, field: field
, hozAlign: "center"
, headerHozAlign: "center"
, editor: false
, width: 260
, 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]] !== null && row[Object.keys(row)[index]] !== undefined
? 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로 초기화
var defaultFields = ['A', 'B', 'C'];
// 테이블의 기존 데이터를 가져옵니다.
var currentData = $objTabul.getData();
// 초기 필드(A, B, C, D 등)를 위한 열 설정
var columns = [
{formatter: "rowSelection", titleFormatter: "rowSelection", clipboard: false, width:50, hozAlign: "center", headerHozAlign: "center", headerSort: false, cellClick: function(e, cell) {
cell.getRow().toggleSelect();
}},
{formatter:"rownum", align:"center", title:"No", hozAlign:"center", headerHozAlign:"center", width:100}
];
// 기본 필드로 열 구성
defaultFields.forEach(field => {
columns.push({
title: field,
field: field,
hozAlign: "center",
headerHozAlign: "center",
editor: false, // 편집 비활성화
width: 260,
validator: ["maxLength:100", "string"]
});
});
// 테이블을 기본 필드로 업데이트
$objTabul.setColumns(columns);
}