mjon_git/src/main/webapp/js/user/fax/addr/event.js
2024-12-09 14:52:29 +09:00

382 lines
10 KiB
JavaScript

$(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);
// 오류 및 중복 데이터를 한 번에 추가
$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();
// 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]] || "";
});
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);
}