팩스 주소록 진행중

This commit is contained in:
hehihoho3@gmail.com 2024-12-09 14:52:29 +09:00
parent a8c8f46f0e
commit ed05ea4648
10 changed files with 255 additions and 787 deletions

View File

@ -4688,8 +4688,19 @@ public class MjonMsgDataServiceImpl extends EgovAbstractServiceImpl implements M
// 보유 금액이 충분한지 확인하는 메서드
private boolean isCashSufficient(MjonMsgVO mjonMsgVO) throws Exception {
String userMoney = priceAndPoint.getBefCash(mjonMsgVO.getUserId());
// 쉼표 제거
userMoney = userMoney.replace(",", "");
String totalPrice = mjonMsgVO.getTotPrice();
// 쉼표 제거
totalPrice = totalPrice.replace(",", "");
BigDecimal befCash = new BigDecimal(userMoney).setScale(2, RoundingMode.HALF_EVEN);
BigDecimal totMsgPrice = new BigDecimal(mjonMsgVO.getTotPrice()).setScale(2, RoundingMode.HALF_EVEN);
BigDecimal totMsgPrice = new BigDecimal(totalPrice).setScale(2, RoundingMode.HALF_EVEN);
// String userMoney = priceAndPoint.getBefCash(mjonMsgVO.getUserId());
// BigDecimal befCash = new BigDecimal(userMoney).setScale(2, RoundingMode.HALF_EVEN);
// BigDecimal totMsgPrice = new BigDecimal(mjonMsgVO.getTotPrice()).setScale(2, RoundingMode.HALF_EVEN);
return befCash.compareTo(totMsgPrice) >= 0;
}

View File

@ -9,7 +9,7 @@
SELECT
COUNT(1) OVER() AS totCnt
,A.ADDR_GRP_ID AS addrGrpId
,A.MBER_ID AS mberId
,A.MBER_ID AS mberId
,A.ADDR_GRP_NM AS addrGrpNm
,DATE_FORMAT(A.FRST_REGIST_PNTTM, '%Y-%m-%d %T' ) AS frstRegistPnttm
,A.DELETE_YN AS deleteYn
@ -26,6 +26,7 @@
<isNotEmpty property="mberId">
AND A.MBER_ID = #mberId#
</isNotEmpty>
AND A.DELETE_YN = 'N'
<isNotEmpty property="searchKeyword">
<isEqual property="searchCondition" compareValue="">
AND ( A.MBER_ID LIKE CONCAT ('%', #searchKeyword#,'%')

View File

@ -293,35 +293,11 @@ function getAddrGroupDuplCheckAjax(addrGrpNm) {
//저장
function SetAddrMassSave(){
var $objTabul = fn_utils_getTabulator();
var tabulNm = fn_utils_getTabulatorNm();
var tabluC = '.'+tabulNm
/* console.log('$objTabul : ', $objTabul.getData());
if(tabulNm == 'tableSelf'){
console.log('????');
var allRows = $objTabul.getData(); // 테이블의 모든 데이터를 가져옴
// addrPhoneNo 값이 있는 행만 필터링
var rowsWithPhoneNumbers = allRows.filter(function(row) {
return row.addrPhoneNo && row.addrPhoneNo.trim() !== ''; // 값이 존재하고 공백이 아닌 경우
});
$objTabul = rowsWithPhoneNumbers;
console.log('rowsWithPhoneNumbers : ', rowsWithPhoneNumbers);
console.log('$objTabul : ', $objTabul.getData());
return false;
} */
if($objTabul.getData().length < 1){
alert("한 개 이상의 연락처를 입력하세요");
return false;
@ -385,64 +361,6 @@ function SetAddrMassSave(){
}
}
/*
// 주소록 등록 old
function setSenderList_old(){
// tab에 해당하는 타블레이터 가져오기
var tabulNm = fn_utils_getTabulatorNm();
var tabluC = '.'+tabulNm
var $objTabul = fn_utils_getTabulator();
var dataToSend = $objTabul.getData();
var addrGrpIdInfo = $(tabluC+" #addrGrpIdInfo option:selected").val();
var addrGrpNmInfo = $(tabluC+" #addrGrpNm").val();
var updateData = dataToSend.map(row => {
row.addrGrpId = addrGrpIdInfo;
row.addrGrpNm = addrGrpNmInfo;
return row;
});
console.log('updateData : ', updateData);
$.ajax({
type: "POST",
url: "/web/mjon/addr/addrMassInsertByTempAjax_advc.do",
data: JSON.stringify(updateData),
dataType: 'json',
contentType: 'application/json',
async: true,
success: function (data) {
console.log('data : ', data);
if (data.status == 'OK') {
alert(data.message);
// 데이터 비우기
SetClear($objTabul);
setAddrMassClose();
var selectMassVal = $("#addrGrpIdInfo option:selected").val();
}
else {
alert("오류 알림 : :: "+data.message);
}
},
error: function (e) {
alert("저장에 실패하였습니다.");
alert("ERROR : " + JSON.stringify(e));
},
beforeSend : function(xmlHttpRequest) {
//로딩창 show
$('.loading_layer').addClass('active');
},
complete : function(xhr, textStatus) {
//로딩창 hide
$('.loading_layer').removeClass('active');
}
});
}
*/
function setSenderList_advc(){

View File

@ -22,117 +22,12 @@ function addrGroupLoadAjax(){
$("#funcAddrGroupSelect").load("/web/addr/selectAddrGroupAjax.do", function(response, status, xhr){});
}
function insertAddrGroupAjax() {
var form = document.addrGrpInsertForm;
if(form.addrGrpNm.value == "") {
alert("주소록 그룹명을 입력해주세요.");
return;
}
if(!confirm("주소록 그룹을 추가하시겠습니까?")) {
return;
}
var data = new FormData(form);
$.ajax({
cache : false,
url : "<c:url value='/web/addr/insertAddrGroupAjax.do' />",
type : 'POST',
data : data,
dataType:'json',
processData: false,
contentType: false,
success : function(returnData, status){
if(status == "success") {
if("fail"==returnData.result){
alert(returnData.message);
return;
} else if("dupl"==returnData.result) {
alert("중복된 그룹명입니다.");
return;
}
alert("등록되었습니다.");
listAddrGrp();
addrGroupLoadAjax();
}else{ alert("ERROR!");return;}
},
error: function (e) { alert("저장에 실패하였습니다."); console.log("ERROR : ", e); }
});
}
function insertAddrAjax() {
var selectVal = $("#addrRegistSelect option:selected").val();
//alert(selectVal);
var form = document.addrInsertForm;
/*
//필수값 아니어서 뺐음
if(form.addrNm.value == "") {
alert("주소록 이름을 입력하세요");
return;
}
*/
if(form.addrPhoneNo.value == "") {
alert("주소록 번호를 입력하세요");
return;
}
//if(!confirm("주소록을 추가하시겠습니까?")) {
// return;
//}
if(!checkHpNum(form.addrPhoneNo.value)){//휴대폰 유효성 검사
if(!checkNorPhoneNum(form.addrPhoneNo.value)){//일반전화 유효성 검사
alert("잘못된 휴대폰번호 또는 일반전화 번호 입니다.");
return false;
}
}
var data = new FormData(form);
$.ajax({
cache : false,
url : "<c:url value='/web/mjon/addr/insertAddrAjax.do' />",
type : 'POST',
data : data,
dataType:'json',
processData: false,
contentType: false,
success : function(returnData, status){
if(status == "success") {
if("fail"==returnData.result){
alert(returnData.message);
return;
} else if("dupl"==returnData.result){
alert("해당 그룹에 중복된 번호가 있습니다.");
return;
}
//alert("저장 되었습니다.");
listAddrGrp();
addrGroupLoadAjax();
addrLoadAjax();
// 주소록그룹 콤보박스 유지
setTimeout(setSelectSetting, 500, selectVal);
}else{ alert("ERROR!");return;}
},
error: function (e) { alert("저장에 실패하였습니다."); console.log("ERROR : ", e); }
});
}
// 주소록그룹 콤보박스 유지
function setSelectSetting(selectVal) {
$("#addrRegistSelect").val(selectVal).prop("selected", true);
}
function linkPage(pageNo){
/* function linkPage(pageNo){
if ($('#searchKeywordAddr').val() != "" && $('#searchKeywordAddr').val() != null && $('#searchKeywordAddr').val() != undefined) {
// 문자전송 검색용
$("#msgStartKeyword").val("");
@ -149,7 +44,7 @@ function linkPage(pageNo){
$("#adr1_right").load("/web/mjon/addr/selectAddrAjax.do", sendData, function(response, status, xhr){tableAllChk();});
addrGroupLoadAjax();
}
*/
//#############################################################################################

View File

@ -22,45 +22,6 @@ function addrGroupLoadAjax(){
}
function insertAddrGroupAjax() {
var form = document.addrGrpInsertForm;
if(form.addrGrpNm.value == "") {
alert("주소록 그룹명을 입력해주세요.");
return;
}
if(!confirm("주소록 그룹을 추가하시겠습니까?")) {
return;
}
var data = new FormData(form);
$.ajax({
cache : false,
url : "<c:url value='/web/addr/insertAddrGroupAjax.do' />",
type : 'POST',
data : data,
dataType:'json',
processData: false,
contentType: false,
success : function(returnData, status){
if(status == "success") {
if("fail"==returnData.result){
alert(returnData.message);
return;
} else if("dupl"==returnData.result) {
alert("중복된 그룹명입니다.");
return;
}
alert("등록되었습니다.");
listAddrGrp();
addrGroupLoadAjax();
}else{ alert("ERROR!");return;}
},
error: function (e) { alert("저장에 실패하였습니다."); console.log("ERROR : ", e); }
});
}
// 주소록그룹 콤보박스 유지
function setSelectSetting(selectVal) {
@ -140,10 +101,6 @@ $(document).ready(function(){
updateTableField(selectedField, newValue);
}
});
});
@ -282,14 +239,10 @@ function updateTable(tableData) {
{title: "F", field: "F", hozAlign: "center", headerHozAlign: "center", width: 125, validator: ["maxLength:100", "string"]},
{title: "G", field: "G", hozAlign: "center", headerHozAlign: "center", width: 125, validator: ["maxLength:100", "string"]}
]);
console.log(' :: $tableExcel.setData(tableData) :: ');
$tableExcel.setData(tableData).then(() => {
// rowTotCnt 업데이트
document.getElementById("rowTotCnt").innerText = tableData.length;
});
console.log(' :: fn_loadRemoveActive :: ');
fn_loadRemoveActive();
}
@ -299,37 +252,6 @@ function updateTable(tableData) {
//#############################################################################################
// 주소록 그룹 중복체크
function getAddrGroupDuplCheckAjax() {
var isReturn = true;
$.ajax({
url : "<c:url value='/web/addr/getAddrGroupDuplCheckAjax.do' />",
type : 'POST',
data : {"addrGrpNm" : $("#addrGrpNm").val()},
dataType:'json',
async: false, // 동기
success : function(data, status){
if(data.isSuccess == true) {
if(data.isDupl == true) {
//alert("중복된 그룹명입니다.");
isReturn = false;
}
}
else {
//alert("Message : " + msg);
}
},
error: function (e) {
//alert("주소록 중복체크에 실패했습니다.");
}
});
return isReturn;
}
//#############################################################################################
//파일 불러오기
//#############################################################################################
@ -353,33 +275,6 @@ $(document).on("click", "#duplicationChkAll", function(e) {
//중복 연락처 => 저장시
// 해당 그룹
/* function GetAddrMassSaveDupli() {
var sHtml = "";
sHtml += "<div class='' style='overflow-x:auto; height:350px;'>";
sHtml += "<table class='tType4'>";
sHtml += " <colgroup>";
sHtml += " <col style='width:auto' />";
sHtml += " </colgroup>";
sHtml += " <thead>";
sHtml += " <tr>";
// sHtml += " <th>중복 휴대폰번호 (" + numberWithCommas(addrMassDupliSaveList.length) + "개)</th>";
sHtml += " <th>중복 휴대폰번호 (10개)</th>";
sHtml += " </tr>";
sHtml += " </thead>";
sHtml += " <tbody>";
for (var i = 0; i < addrMassDupliSaveList.length; i++) {
sHtml += " <tr>";
sHtml += " <td>" + addrMassDupliSaveList[i].addrPhoneNo + "</td>";
sHtml += " </tr>";
}
sHtml += " </tbody>";
sHtml += " </table>";
sHtml += " </div>";
$("#addrMassSaveDupli_layer").html(sHtml);
} */
</script>
@ -435,13 +330,7 @@ $(document).on("click", "#duplicationChkAll", function(e) {
/ 오류 <span class="c_002c9a fwBold" id="rowErrorCnt">0</span>건
<button type="button" class="btn_list_detail" data-tooltip="adr_popup14"><img src="/publish/images/search.png"></button>
</p>
<!-- <p>총 <span class="c_e40000">171</span>건 / 중복 <span class="c_002c9a">9</span>건 / 오류 <span class="c_002c9a">9</span>건 <button type="button" class="btn_list_detail"><img src="/publish/images/search.png"></button></p> -->
&nbsp;
<!-- <button type="button" class="btnType btnType6" data-tooltip="addrMassDupli_layer" onclick="GetAddrMassDupli()" id="btnAddrMassDupli">중복번호</button> -->
<!-- <button type="button" class="btnType btnType6" data-tooltip="addrMassDupli_layer" id="tableExcelDupliBtn">중복번호</button> -->
<!-- &nbsp; -->
<!-- <button type="button" class="btnType btnType6" data-tooltip="addrMassSaveDupli_layer" onclick="GetAddrMassSaveDupli()" id="btnAddrMassSaveDupli">중복번호</button> -->
<!-- <button type="button" class="btnType btnType6 addCallToF">번호추가</button> -->
</div>

View File

@ -7,8 +7,10 @@
<script type="text/javascript" src="<c:url value='/publish/js/content.js'/>"></script>
<script type="text/javascript" src="https://oss.sheetjs.com/sheetjs/xlsx.full.min.js"></script>
<script type="text/javascript" src="<c:url value='/js/user/fax/addr/faxTabulator.js'/>?v=20241031"></script>
<script type="text/javascript" src="<c:url value='/js/user/fax/addr/faxEvent.js'/>?v=20241031"></script>
<%-- <script type="text/javascript" src="<c:url value='/js/user/fax/addr/faxTabulator.js'/>?v=20241031"></script> --%>
<script type="text/javascript" src="<c:url value='/js/user/fax/addr/init.js'/>?v=20241031"></script>
<%-- <script type="text/javascript" src="<c:url value='/js/user/fax/addr/faxEvent.js'/>?v=20241031"></script> --%>
<script type="text/javascript" src="<c:url value='/js/user/fax/addr/event.js'/>?v=20241031"></script>
<script type="text/javascript" src="<c:url value='/js/web/addr/cmn.js?date=202409021440'/>"></script>
<script type="text/javascript" src="<c:url value='/js/web/addr/utils.js'/>?v=20240919"></script>
@ -168,229 +170,6 @@ function moveTab(type){
}
//#############################################################################################
//Tabulator
//#############################################################################################
var tableR = null; //우측 주소록 불러오기 Tabulator 변수
/* 파일등록 */
var _fileIdx = 0;
var _fileForm2 = new Array();
var fileExt = ""; // 첨부파일 확장자
var excelAddr = []; //엑셀 불러오기에서 내용 저장하는 배열 변수
$(document).ready(function(){
//Tabulator AJAX Data Loading
//tableR.setData(tabledata);
//받는사람 번호 버튼 클릭시 Tabulator에 데이터 넣어주기
$('.addCallToF').click(function(){
var recTableData = tableR.getRows(); // 받는사람 리스트의 전체 목록을 저장
var tableData = [];
//빈 Row 한줄을 상단에 먼저 추가해준다.
tableData.push({phone: ""});
//기존 받는사람 리스트를 배열에 미리 담아둔다.
if(recTableData.length > 0){
for(var j=0; j < recTableData.length; j++){
tableData.push({name: recTableData[j].getData().name, phone: removeDash(recTableData[j].getData().phone.trim()), memo: recTableData[j].getData().memo});
}
}
//연락처 추가해 주기
//addPhoneInfo(tabledata);
tableR.setData(tableData);
//전체 데이터 갯수 구하기
totRows = tableR.getRows().length;
updateTotCnt(totRows);
});
//받는사람 오류번호 삭제 처리해주기
$('.chkVali_del').click(function(){
//기존 연락처 모두 불러오기
var data = tableR.getRows();
var tableData = [];
var totLen = tableR.getRows().length;
var errCnt = 0;
if(totLen > 0){
if(confirm("올바르지 않은 연락처 정보를 삭제 하시겠습니까?")){
for(var i=0; i < totLen; i++){
var phone = data[i].getData().phone;
var valiCheck = checkFaxNum(phone);
if(valiCheck){//팩스 번호인 것만 저장해 준다.
tableData.push({name: data[i].getData().name.trim(), phone: data[i].getData().phone.trim(), memo:data[i].getData().memo});
}else{
errCnt++;
}
}
var removeDuplData = dupliPhoneData(tableData);
tableR.setData(removeDuplData);
//총 받는사람 수 계산
totRows = tableR.getRows().length;
updateTotCnt(totRows);
if(errCnt > 0){
alert(errCnt + " 건의 연락처를 삭제하였습니다.");
return false;
}else{
alert("오류가 있는 연락처가 없습니다.");
}
}
}else{
alert("연락처 정보를 입력해 주세요.");
return false;
}
});
// 오류검사 항목 중복제거
function SetTableErrorDupliCheck(sVal) {
var isDuplicate = false;
if (tableErrorCheckData.length == 0) {
tableErrorCheckData.push(sVal);
}
else {
for (var i = 0; i < tableErrorCheckData.length; i++)
{
if (tableErrorCheckData[i] == sVal) {
isDuplicate = true;
}
}
if (isDuplicate) {
return;
}
else {
tableErrorCheckData.push(sVal);
}
}
}
// 오류검사 항목 중복제거
function SetTableErrorDupliCheck(sVal) {
var isDuplicate = false;
if (tableErrorCheckData.length == 0) {
tableErrorCheckData.push(sVal);
}
else {
for (var i = 0; i < tableErrorCheckData.length; i++)
{
if (tableErrorCheckData[i] == sVal) {
isDuplicate = true;
}
}
if (isDuplicate) {
return;
}
else {
tableErrorCheckData.push(sVal);
}
}
}
$('.check_validity').click(function(){
tableErrorCheckData.length = 0; // 오류 번호 배열 초기화
var data = tableR.getRows();
var invalid = tableR.getInvalidCells(); //오류 데이터 체크
var dataLen = tableR.getRows().length; //연락처 데이터 갯수
var totLen = invalid.length; //오류 데이터 갯수
var errMsg = ""; //최종 alert에 표시할 메시지 저장 변수
if(dataLen > 0) { //연락처 정보가 있으면 수행
if(totLen > 0) { //내용에 오류가 있으면 수행
//오류 데이터 값 저장
for(var i=0; i < totLen; i++) {
var cellValue = invalid[i].getValue();
SetTableErrorDupliCheck(cellValue);
}
for(var i=0; i < dataLen; i++){
// 팩스번호 체크
var phone = data[i].getData().phone;
var valiCheck = checkFaxNum(phone);
if(!valiCheck){
SetTableErrorDupliCheck(phone);
}
}
}
else {
for(var i=0; i < dataLen; i++){
// 팩스번호 체크
var phone = data[i].getData().phone;
var valiCheck = checkFaxNum(phone);
if(!valiCheck){
SetTableErrorDupliCheck(phone);
}
}
}
}
else {
alert("연락처를 입력해 주세요.");
return false;
}
if (tableErrorCheckData.length > 0) {
for (var i = 0; i < tableErrorCheckData.length; i++)
{
errMsg += tableErrorCheckData[i];
if ((tableErrorCheckData.length - 1) > i) {
errMsg += ", ";
}
}
alert(errMsg + "의 내용에 오류가 있습니다.");
}
else {
alert("오류 데이터가 없습니다.");
}
return false;
});
$('.addExcelDw').click(function(){
var data = tableR.getRows();
if(data.length > 0){
tableR.download("xlsx", "recieveAddr.xlsx", {sheetName:"recieveAddr"});
}else{
alert("입력된 연락처 정보가 없습니다.");
return false;
}
});
//받는사람 중복 삭제
$('.duple_del').click(function(){
//기존 연락처 모두 불러오기
var data = tableR.getRows();
var tableData = [];
var dpCnt = 0;
var totLen = tableR.getRows().length;
for(var i=0; i < totLen; i++){
tableData.push({name: data[i].getData().name.trim(), phone: data[i].getData().phone.trim()});
}
var removeDuplData = dupliPhoneData(tableData);
tableR.setData(removeDuplData);
//총 받는사람 수 계산
totRows = tableR.getRows().length;
updateTotCnt(totRows);
});
});
//전체 데이터 갯수 구하는 함수
function updateTotCnt(data){
var rowTotCnt = data;
@ -681,6 +460,7 @@ function fn_rowDataClear(){
// 주소록 그룹 중복체크
function getAddrGroupDuplCheckAjax(addrGrpNm) {
console.log('addrGrpNm : ', addrGrpNm);
var isReturn = true;
$.ajax({
@ -714,13 +494,7 @@ function SetAddrMassSave(){
var $objTabul = fn_utils_getTabulator();
var tabulNm = fn_utils_getTabulatorNm();
var tabluC = '.'+tabulNm
var loginVO = '${LoginVO}';
if(loginVO == "" || loginVO == null){
alert("로그인 후 이용이 가능합니다.");
return false;
}
if($objTabul.getData().length < 1){
alert("한 개 이상의 연락처를 입력하세요");
return false;
@ -730,6 +504,13 @@ function SetAddrMassSave(){
alert("30만개 까지 등록 가능합니다.");
return false;
}
var loginVO = '${LoginVO}';
if(fn_utils_isEmpty(loginVO)){
alert("로그인 후 이용이 가능합니다.");
return false;
}
var columns = $objTabul.getColumns();
var isAddrPhoneNoSelected = columns.some(column => column.getField() === 'addrPhoneNo');
@ -758,16 +539,13 @@ function SetAddrMassSave(){
console.log('addrGrpNm : ', addrGrpNm);
//주소록 중복체크
if (getAddrGroupDuplCheckAjax() == false) {
if (getAddrGroupDuplCheckAjax(addrGrpNm) == false) {
alert("중복된 그룹명입니다. 새 그룹명을 입력해주세요.");
return false;
}
}
//수신번호 리스트 체크하기
var phoneList = [];
var nameList = [];
var memoList = [];
var confirmMsg = "저장하시겠습니까?\n이름 20byte, 메모 250byte 초과 글자는 절사됩니다.";
if (confirm(confirmMsg)) {
//로딩창 show

View File

@ -23,110 +23,6 @@ function addrGroupLoadAjax(){
}
function insertAddrGroupAjax() {
var form = document.addrGrpInsertForm;
if(form.addrGrpNm.value == "") {
alert("주소록 그룹명을 입력해주세요.");
return;
}
if(!confirm("주소록 그룹을 추가하시겠습니까?")) {
return;
}
var data = new FormData(form);
$.ajax({
cache : false,
url : "<c:url value='/web/addr/insertAddrGroupAjax.do' />",
type : 'POST',
data : data,
dataType:'json',
processData: false,
contentType: false,
success : function(returnData, status){
if(status == "success") {
if("fail"==returnData.result){
alert(returnData.message);
return;
} else if("dupl"==returnData.result) {
alert("중복된 그룹명입니다.");
return;
}
alert("등록되었습니다.");
listAddrGrp();
addrGroupLoadAjax();
}else{ alert("ERROR!");return;}
},
error: function (e) { alert("저장에 실패하였습니다."); console.log("ERROR : ", e); }
});
}
function insertAddrAjax() {
var selectVal = $("#addrRegistSelect option:selected").val();
//alert(selectVal);
var form = document.addrInsertForm;
/*
//필수값 아니어서 뺐음
if(form.addrNm.value == "") {
alert("주소록 이름을 입력하세요");
return;
}
*/
if(form.addrPhoneNo.value == "") {
alert("주소록 번호를 입력하세요");
return;
}
//if(!confirm("주소록을 추가하시겠습니까?")) {
// return;
//}
if(!checkHpNum(form.addrPhoneNo.value)){//휴대폰 유효성 검사
if(!checkNorPhoneNum(form.addrPhoneNo.value)){//일반전화 유효성 검사
alert("잘못된 휴대폰번호 또는 일반전화 번호 입니다.");
return false;
}
}
var data = new FormData(form);
$.ajax({
cache : false,
url : "<c:url value='/web/mjon/addr/insertAddrAjax.do' />",
type : 'POST',
data : data,
dataType:'json',
processData: false,
contentType: false,
success : function(returnData, status){
if(status == "success") {
if("fail"==returnData.result){
alert(returnData.message);
return;
} else if("dupl"==returnData.result){
alert("해당 그룹에 중복된 번호가 있습니다.");
return;
}
//alert("저장 되었습니다.");
listAddrGrp();
addrGroupLoadAjax();
addrLoadAjax();
// 주소록그룹 콤보박스 유지
setTimeout(setSelectSetting, 500, selectVal);
}else{ alert("ERROR!");return;}
},
error: function (e) { alert("저장에 실패하였습니다."); console.log("ERROR : ", e); }
});
}
// 주소록그룹 콤보박스 유지
function setSelectSetting(selectVal) {
$("#addrRegistSelect").val(selectVal).prop("selected", true);
@ -312,7 +208,8 @@ $(document).ready(function(){
return false;
}
let keys = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];
// let keys = ['A', 'B', 'C', 'D', 'E', 'F', 'G'];
let keys = ['A', 'B', 'C'];
let data = {};
splitData.forEach((item, index) => {
data[keys[index]] = item.trim() || ""; // 빈 문자열로 기본값 설정
@ -324,8 +221,11 @@ $(document).ready(function(){
console.log('Tabulator data before getData:', $tableClip.getData());
// $tableClip.clearData();
$tableClip.setData([{
A: "", B: "", C: "", D: "", E: "", F: "", G: ""
A: "", B: "", C: ""
}]); // 초기 데이터로 복원
// $tableClip.setData([{
// A: "", B: "", C: "", D: "", E: "", F: "", G: ""
// }]); // 초기 데이터로 복원
$tableClip.setData(realPhone);
var totRows = $tableClip.getDataCount();
updateTotCnt(totRows);
@ -454,99 +354,34 @@ function GetAddrMassDupli() {
<div class="adr_excel" style="margin-top: 13px; overflow-x: auto;">
<!-- thead -->
<div class="adr_hd select_adr_hd" data-group="tableClip">
<div style="width: 80px;"></div>
<div style="width: 125px;">
<div style="width:80px;"></div>
<div style="width:240px;">
<label for="" class="label"></label>
<select class="field-selector">
<option value="">선택하기</option>
<option value="addrNm">이름</option>
<option value="addrPhoneNo">휴대폰</option>
<option value="addrInfo1">[*1*]</option>
<option value="addrInfo2">[*2*]</option>
<option value="addrInfo3">[*3*]</option>
<option value="addrInfo4">[*4*]</option>
<option value="addrPhoneNo">팩스번호</option>
<option value="addrComment">메모</option>
</select>
</div>
<div style="width: 125px;">
<div style="width:240px;">
<label for="" class="label"></label>
<select class="field-selector">
<option value="">선택하기</option>
<option value="addrNm">이름</option>
<option value="addrPhoneNo">휴대폰</option>
<option value="addrInfo1">[*1*]</option>
<option value="addrInfo2">[*2*]</option>
<option value="addrInfo3">[*3*]</option>
<option value="addrInfo4">[*4*]</option>
<option value="addrPhoneNo">팩스번호</option>
<option value="addrComment">메모</option>
</select>
</div>
<div style="width: 125px;">
<div style="width:240px;">
<label for="" class="label"></label>
<select class="field-selector">
<option value="">선택하기</option>
<option value="addrNm">이름</option>
<option value="addrPhoneNo">휴대폰</option>
<option value="addrInfo1">[*1*]</option>
<option value="addrInfo2">[*2*]</option>
<option value="addrInfo3">[*3*]</option>
<option value="addrInfo4">[*4*]</option>
<option value="addrPhoneNo">팩스번호</option>
<option value="addrComment">메모</option>
</select>
</div>
<div style="width: 125px;">
<label for="" class="label"></label>
<select class="field-selector">
<option value="">선택하기</option>
<option value="addrNm">이름</option>
<option value="addrPhoneNo">휴대폰</option>
<option value="addrInfo1">[*1*]</option>
<option value="addrInfo2">[*2*]</option>
<option value="addrInfo3">[*3*]</option>
<option value="addrInfo4">[*4*]</option>
<option value="addrComment">메모</option>
</select>
</div>
<div style="width: 125px;">
<label for="" class="label"></label>
<select class="field-selector">
<option value="">선택하기</option>
<option value="addrNm">이름</option>
<option value="addrPhoneNo">휴대폰</option>
<option value="addrInfo1">[*1*]</option>
<option value="addrInfo2">[*2*]</option>
<option value="addrInfo3">[*3*]</option>
<option value="addrInfo4">[*4*]</option>
<option value="addrComment">메모</option>
</select>
</div>
<div style="width: 125px;">
<label for="" class="label"></label>
<select class="field-selector">
<option value="">선택하기</option>
<option value="addrNm">이름</option>
<option value="addrPhoneNo">휴대폰</option>
<option value="addrInfo1">[*1*]</option>
<option value="addrInfo2">[*2*]</option>
<option value="addrInfo3">[*3*]</option>
<option value="addrInfo4">[*4*]</option>
<option value="addrComment">메모</option>
</select>
</div>
<div style="width: 125px;">
<label for="" class="label"></label>
<select class="field-selector">
<option value="">선택하기</option>
<option value="addrNm">이름</option>
<option value="addrPhoneNo">휴대폰</option>
<option value="addrInfo1">[*1*]</option>
<option value="addrInfo2">[*2*]</option>
<option value="addrInfo3">[*3*]</option>
<option value="addrInfo4">[*4*]</option>
<option value="addrComment">메모</option>
</select>
</div>
</div>
</div>
<div class="drag_drop_wrap callList_box" id="tabulator_clip">

View File

@ -16,45 +16,6 @@ function addrGroupLoadAjax(){
}
function insertAddrGroupAjax() {
var form = document.addrGrpInsertForm;
if(form.addrGrpNm.value == "") {
alert("주소록 그룹명을 입력해주세요.");
return;
}
if(!confirm("주소록 그룹을 추가하시겠습니까?")) {
return;
}
var data = new FormData(form);
$.ajax({
cache : false,
url : "<c:url value='/web/addr/insertAddrGroupAjax.do' />",
type : 'POST',
data : data,
dataType:'json',
processData: false,
contentType: false,
success : function(returnData, status){
if(status == "success") {
if("fail"==returnData.result){
alert(returnData.message);
return;
} else if("dupl"==returnData.result) {
alert("중복된 그룹명입니다.");
return;
}
alert("등록되었습니다.");
listAddrGrp();
addrGroupLoadAjax();
}else{ alert("ERROR!");return;}
},
error: function (e) { alert("저장에 실패하였습니다."); console.log("ERROR : ", e); }
});
}
// 주소록그룹 콤보박스 유지
function setSelectSetting(selectVal) {
@ -252,7 +213,6 @@ function updateTable(tableData) {
document.getElementById("rowTotCnt").innerText = tableData.length;
});
console.log(' :: fn_loadRemoveActive :: ');
fn_loadRemoveActive();
}
@ -261,34 +221,6 @@ function updateTable(tableData) {
//등록
//#############################################################################################
// 주소록 그룹 중복체크
function getAddrGroupDuplCheckAjax() {
var isReturn = true;
$.ajax({
url : "<c:url value='/web/addr/getAddrGroupDuplCheckAjax.do' />",
type : 'POST',
data : {"addrGrpNm" : $("#addrGrpNm").val()},
dataType:'json',
async: false, // 동기
success : function(data, status){
if(data.isSuccess == true) {
if(data.isDupl == true) {
//alert("중복된 그룹명입니다.");
isReturn = false;
}
}
else {
//alert("Message : " + msg);
}
},
error: function (e) {
//alert("주소록 중복체크에 실패했습니다.");
}
});
return isReturn;
}
//#############################################################################################

View File

@ -358,10 +358,10 @@ function resetTableFieldsToDefault() {
// 초기 필드(A, B, C, D 등)를 위한 열 설정
var columns = [
{formatter: "rowSelection", titleFormatter: "rowSelection", clipboard: false, hozAlign: "center", headerHozAlign: "center", headerSort: false, cellClick: function(e, cell) {
{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:40}
{formatter:"rownum", align:"center", title:"No", hozAlign:"center", headerHozAlign:"center", width:100}
];
// 기본 필드로 열 구성
@ -372,7 +372,7 @@ function resetTableFieldsToDefault() {
hozAlign: "center",
headerHozAlign: "center",
editor: false, // 편집 비활성화
width: 240,
width: 260,
validator: ["maxLength:100", "string"]
});
});

View File

@ -0,0 +1,209 @@
var tableErrorData = [];
var tableErrorCheckData = [];
var addrMassDupliSaveList = null;
var gArrRestartIndex = 0; //배열 재시작카운드
var gNameList = []; //치환문자 이름
var gPhoneList = []; //받는사람
var gMemoList = []; //메모
var $tableExcel = null; //엑셀입력 탭
var $tableClip = null; //붙여넣기 탭
var $tableSelf = null; //직접입력 탭
var $tableError = null; //에러 팝업 영역
$(document).ready(function(){
//excel 파일 불러오기 tabulator
$tableExcel = new Tabulator("#tabulator_excel", {
height:"255px",
width:"100%",
layout:"fitColumns",
autoColumns:false,
headerHozAlign:"center",
validationMode:"highlight",
clipboard:false,
clipboardCopySelector:"table",
clipboardPasteAction:"insert", // insert, update, replace
placeholder:"Excel 파일을 업로드 해주세요.", //fit columns to width of table (optional)
columns:[ //Define Table Columns
{formatter:"rowSelection", titleFormatter:"rowSelection",clipboard:false, hozAlign:"center", width:50, headerSort:false, cellClick:function(e, cell){
cell.getRow().toggleSelect();
}}
,{formatter:"rownum", hozAlign:"center" ,title:"No", hozAlign:"center", headerHozAlign:"center", width:100}
,{title:"A", field:"A", hozAlign:"center", headerHozAlign: "center", width:260, validator:["maxLength:100", "string"]}
,{title:"B", field:"B", hozAlign:"center", headerHozAlign: "center", width:260, validator:["maxLength:100", "string"]}
,{title:"C", field:"C", hozAlign:"center", headerHozAlign: "center", width:260, validator:["maxLength:100", "string"]}
],
validationFailed:function(cell, value, parameters){ // 유효성 체크 함수
var valid = cell.isValid();
if(!valid){
alert("양식에 맞지 않는 정보가 입력되었습니다.");
//해당 셀 데이터 삭제
cell.setValue("");
}
return value % parameters.phone;
},
});
$tableClip = new Tabulator("#tabulator_clip", {
height:"255px",
width:"100%",
layout:"fitColumns",
editor:true,
headerHozAlign:"center",
validationMode:"highlight",
placeholder:"복사(Ctrl+C)한 내용을 여기에 붙여넣기(Ctrl+V) 해주세요.", //fit columns to width of table (optional)
// clipboard:true, // 클립보드 기능 활성화
clipboardPasteAction:"update", // insert, update, replace
columns: [
{formatter: "rowSelection", titleFormatter: "rowSelection", clipboard: false, hozAlign: "center", width:50, headerHozAlign: "center", headerSort: false, cellClick: function(e, cell) {
cell.getRow().toggleSelect();
}},
{formatter:"rownum", hozAlign:"center" ,title:"No", hozAlign:"center", headerHozAlign:"center", width:100}
,{title:"A", field:"A", hozAlign:"center", headerHozAlign: "center", width:260, validator:["maxLength:100", "string"]}
,{title:"B", field:"B", hozAlign:"center", headerHozAlign: "center", width:260, validator:["maxLength:100", "string"]}
,{title:"C", field:"C", hozAlign:"center", headerHozAlign: "center", width:260, validator:["maxLength:100", "string"]}
/*,{title:"D", field:"D", hozAlign:"center", headerHozAlign: "center", width:125, validator:["maxLength:100", "string"]}
,{title:"E", field:"E", hozAlign:"center", headerHozAlign: "center", width:125, validator:["maxLength:100", "string"]}
,{title:"F", field:"F", hozAlign:"center", headerHozAlign: "center", width:125, validator:["maxLength:100", "string"]}
,{title:"G", field:"G", hozAlign:"center", headerHozAlign: "center", width:125, validator:["maxLength:100", "string"]}*/
],
validationFailed: function(cell, value, parameters) {
var valid = cell.isValid();
if (!valid) {
alert("양식에 맞지 않는 정보가 입력되었습니다.");
cell.setValue(""); // 해당 셀 데이터 삭제
}
return false; // 유효하지 않은 경우 false 반환
},
});
//Tabulator AJAX Data Loading
$tableError = new Tabulator("#tabulator_error", {
height:"255px",
width:"100%",
layout:"fitColumns",
autoColumns:false,
headerHozAlign:"center",
validationMode:"highlight",
clipboard:false,
clipboardCopySelector:"table",
clipboardPasteAction:"insert", // insert, update, replace
placeholder:"등록 팝업에서 팩스번호를 선택 후 확인해주세요.", //fit columns to width of table (optional)
columns:[ //Define Table Columns
{title:"이름", field:"name", hozAlign:"center", headerHozAlign: "center", width:125},
{title:"팩스번호", field:"phone", hozAlign:"center", headerHozAlign: "center", width:158},
{title:"미등록 결과", field:"result", hozAlign:"center", headerHozAlign: "center", width:125}
]
});
// 타뷸레이터 width값 변경 시 위에 select width 값 변경
var titleArray = ["A","B","C","D","E","F","G"];
$tableExcel.on("columnWidth",function(column){
var titleIndex = titleArray.indexOf(column._column.definition.title);
titleIndex += 1;
if(titleIndex != 0){
$('.tableExcel .select_adr_hd>div').eq(titleIndex).css('width', column._column.width);
}else{
$('.tableExcel .select_adr_hd>div').eq(0).css('width', column._column.width + 40);
}
});
$tableExcel.on("scrollHorizontal",function(left){
$(".tableExcel .adr_excel").scrollLeft(left);
})
$(".tableExcel .adr_excel").on("scroll",function(){
$(".tableExcel .tabulator-tableholder").scrollLeft($(this).scrollLeft());
});
$tableClip.on("columnWidth",function(column){
var titleIndex = titleArray.indexOf(column._column.definition.title);
titleIndex += 1;
if(titleIndex != 0){
$('.tableClip .select_adr_hd>div').eq(titleIndex).css('width', column._column.width);
}else{
$('.tableClip .select_adr_hd>div').eq(0).css('width', column._column.width + 40);
}
});
$tableClip.on("scrollHorizontal",function(left){
$(".tableClip .adr_excel").scrollLeft(left);
})
$(".tableClip .adr_excel").on("scroll",function(){
$(".tableClip .tabulator-tableholder").scrollLeft($(this).scrollLeft());
});
});
function fn_selfmakeTable(){
var tableData = [];
for (var i = 0; i < 1000; i++) {
tableData.push({addrNm: "", addrPhoneNo: "", addrInfo1: "", addrInfo2: "", addrInfo3: "", addrInfo4: "", addrComment: ""});
}
// 테이블 초기화
$tableSelf = new Tabulator("#tabulator_self", {
height: "255px",
width: "100%",
layout: "fitColumns",
clipboardPasteAction: "update",
keybindings: {
"navRight": "tab", // Tab 키를 누르면 오른쪽 셀로 이동
"navLeft": "shift+tab",
"editNext": false // Tab 키를 누를 때 편집 모드를 종료하지 않도록 설정
},
data: tableData,
columns: [
{formatter: "rowSelection", titleFormatter: "rowSelection", clipboard: false, hozAlign: "center", headerHozAlign: "center", headerSort: false, cellClick: function(e, cell) {
cell.getRow().toggleSelect();
}},
{formatter:"rownum", hozAlign:"center" ,title:"No", headerHozAlign:"center", width:40},
{title:"이름", field:"addrNm", hozAlign:"center", headerHozAlign: "center", width:119, validator:["maxLength:100"], editor:"input"},
{title:"휴대폰", field:"addrPhoneNo", hozAlign:"center", headerHozAlign: "center", width:119, validator:["maxLength:100"], editor:"input"
, cellEdited:function(cell){
var currentValue = cell.getValue();
console.log('cell.getValue() : ', currentValue);
// 현재 값이 null 또는 undefined가 아니고, 값이 변경된 경우에만 처리
if (currentValue !== null
&& currentValue !== ''
) {
var newValue = fn_selfUpdataCount(currentValue);
// 값이 실제로 변경된 경우에만 setValue 호출
if (currentValue !== newValue) {
cell.setValue(newValue);
}
}
}
},
{title:"[*1*]", field:"addrInfo1", hozAlign:"center", headerHozAlign: "center", width:119, validator:["maxLength:100"], editor:"input"},
{title:"[*2*]", field:"addrInfo2", hozAlign:"center", headerHozAlign: "center", width:119, validator:["maxLength:100"], editor:"input"},
{title:"[*3*]", field:"addrInfo3", hozAlign:"center", headerHozAlign: "center", width:119, validator:["maxLength:100"], editor:"input"},
{title:"[*4*]", field:"addrInfo4", hozAlign:"center", headerHozAlign: "center", width:119, validator:["maxLength:100"], editor:"input"},
{title:"메모", field:"addrComment", hozAlign:"center", headerHozAlign: "center", width:119, validator:["maxLength:100"], editor:"input"}
],
navigation: true // 키보드 탐색 활성화
});
}